From 69a1ecec9b4b7168fb570d2d07bcfaa0f29fc856 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sun, 24 Oct 2010 15:04:12 -0400 Subject: [PATCH 001/220] check for a post --- lib/action.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/action.php b/lib/action.php index 01bb0f7e92..d8f1392466 100644 --- a/lib/action.php +++ b/lib/action.php @@ -1354,4 +1354,15 @@ class Action extends HTMLOutputter // lawsuit $this->clientError(_('There was a problem with your session token.')); } } + + /** + * Check if the current request is a POST + * + * @return boolean true if POST; otherwise false. + */ + + function isPost() + { + return ($_SERVER['REQUEST_METHOD'] == 'POST'); + } } From 43a67b150a4e4285224ccf695171df731c736a1e Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sun, 24 Oct 2010 15:58:53 -0400 Subject: [PATCH 002/220] show a single notice in atom entry format --- actions/apistatusesshow.php | 16 ++++++++++++---- lib/apiaction.php | 6 ++++++ lib/router.php | 4 ++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/actions/apistatusesshow.php b/actions/apistatusesshow.php index 84f8079db5..c0eab15a44 100644 --- a/actions/apistatusesshow.php +++ b/actions/apistatusesshow.php @@ -105,8 +105,8 @@ class ApiStatusesShowAction extends ApiPrivateAuthAction { parent::handle($args); - if (!in_array($this->format, array('xml', 'json'))) { - $this->clientError(_('API method not found.'), $code = 404); + if (!in_array($this->format, array('xml', 'json', 'atom'))) { + $this->clientError(_('API method not found.'), 404); return; } @@ -122,10 +122,18 @@ class ApiStatusesShowAction extends ApiPrivateAuthAction function showNotice() { if (!empty($this->notice)) { - if ($this->format == 'xml') { + switch ($this->format) { + case 'xml': $this->showSingleXmlStatus($this->notice); - } elseif ($this->format == 'json') { + break; + case 'json': $this->show_single_json_status($this->notice); + break; + case 'atom': + $this->showSingleAtomStatus($this->notice); + break; + default: + throw new Exception(sprintf(_("Unsupported format: %s"), $this->format)); } } else { diff --git a/lib/apiaction.php b/lib/apiaction.php index 4e9dbb310b..8a7be31502 100644 --- a/lib/apiaction.php +++ b/lib/apiaction.php @@ -726,6 +726,12 @@ class ApiAction extends Action $this->endDocument('xml'); } + function showSingleAtomStatus($notice) + { + header('Content-Type: application/atom+xml; charset=utf-8'); + print $notice->asAtomEntry(true, true, true, $this->auth_user); + } + function show_single_json_status($notice) { $this->initDocument('json'); diff --git a/lib/router.php b/lib/router.php index 9aaac7dfe3..834445f09b 100644 --- a/lib/router.php +++ b/lib/router.php @@ -399,12 +399,12 @@ class Router $m->connect('api/statuses/show.:format', array('action' => 'ApiStatusesShow', - 'format' => '(xml|json)')); + 'format' => '(xml|json|atom)')); $m->connect('api/statuses/show/:id.:format', array('action' => 'ApiStatusesShow', 'id' => '[0-9]+', - 'format' => '(xml|json)')); + 'format' => '(xml|json|atom)')); $m->connect('api/statuses/update.:format', array('action' => 'ApiStatusesUpdate', From 292e789584df47834f30d4de1ef143670c079b24 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sun, 24 Oct 2010 21:24:23 -0400 Subject: [PATCH 003/220] delete a notice using AtomPub --- actions/apistatusesshow.php | 38 ++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/actions/apistatusesshow.php b/actions/apistatusesshow.php index c0eab15a44..86ffd6862e 100644 --- a/actions/apistatusesshow.php +++ b/actions/apistatusesshow.php @@ -110,7 +110,17 @@ class ApiStatusesShowAction extends ApiPrivateAuthAction return; } - $this->showNotice(); + switch ($_SERVER['REQUEST_METHOD']) { + case 'GET': + $this->showNotice(); + break; + case 'DELETE': + $this->deleteNotice(); + break; + default: + $this->clientError(_('HTTP method not supported.'), 405); + return; + } } /** @@ -213,4 +223,30 @@ class ApiStatusesShowAction extends ApiPrivateAuthAction return null; } + function deleteNotice() + { + if ($this->format != 'atom') { + $this->clientError(_("Can only delete using the Atom format.")); + return; + } + + if (empty($this->auth_user) || + ($this->notice->profile_id != $this->auth_user->id && + !$this->auth_user->hasRight(Right::DELETEOTHERSNOTICE))) { + $this->clientError(_('Can\'t delete this notice.'), 403); + return; + } + + if (Event::handle('StartDeleteOwnNotice', array($this->auth_user, $this->notice))) { + $this->notice->delete(); + Event::handle('EndDeleteOwnNotice', array($this->auth_user, $this->notice)); + } + + // @fixme is there better output we could do here? + + header('HTTP/1.1 200 OK'); + header('Content-Type: text/plain'); + print(sprintf(_('Deleted notice %d'), $this->notice->id)); + print("\n"); + } } From c0664599aa5a90f99d462d7e9d9930e1aaf5dcbc Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sun, 24 Oct 2010 22:50:13 -0400 Subject: [PATCH 004/220] allow posting to user timeline using AtomPub --- actions/apitimelineuser.php | 227 ++++++++++++++++++++++++++++++++---- 1 file changed, 203 insertions(+), 24 deletions(-) diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php index 0c97aad21c..cb7c847d62 100644 --- a/actions/apitimelineuser.php +++ b/actions/apitimelineuser.php @@ -101,7 +101,12 @@ class ApiTimelineUserAction extends ApiBareAuthAction function handle($args) { parent::handle($args); - $this->showTimeline(); + + if ($this->isPost()) { + $this->handlePost(); + } else { + $this->showTimeline(); + } } /** @@ -119,9 +124,9 @@ class ApiTimelineUserAction extends ApiBareAuthAction $atom = new AtomUserNoticeFeed($this->user, $this->auth_user); $link = common_local_url( - 'showstream', - array('nickname' => $this->user->nickname) - ); + 'showstream', + array('nickname' => $this->user->nickname) + ); $self = $this->getSelfUri(); @@ -137,14 +142,14 @@ class ApiTimelineUserAction extends ApiBareAuthAction break; case 'rss': $this->showRssTimeline( - $this->notices, - $atom->title, - $link, - $atom->subtitle, - $suplink, - $atom->logo, - $self - ); + $this->notices, + $atom->title, + $link, + $atom->subtitle, + $suplink, + $atom->logo, + $self + ); break; case 'atom': @@ -177,9 +182,9 @@ class ApiTimelineUserAction extends ApiBareAuthAction $notices = array(); $notice = $this->user->getNotices( - ($this->page-1) * $this->count, $this->count, - $this->since_id, $this->max_id - ); + ($this->page-1) * $this->count, $this->count, + $this->since_id, $this->max_id + ); while ($notice->fetch()) { $notices[] = clone($notice); @@ -232,18 +237,192 @@ class ApiTimelineUserAction extends ApiBareAuthAction $last = count($this->notices) - 1; return '"' . implode( - ':', - array($this->arg('action'), - common_user_cache_hash($this->auth_user), - common_language(), - $this->user->id, - strtotime($this->notices[0]->created), - strtotime($this->notices[$last]->created)) - ) - . '"'; + ':', + array($this->arg('action'), + common_user_cache_hash($this->auth_user), + common_language(), + $this->user->id, + strtotime($this->notices[0]->created), + strtotime($this->notices[$last]->created)) + ) + . '"'; } return null; } + function handlePost() + { + if (empty($this->auth_user) || + $this->auth_user->id != $this->user->id) { + $this->clientError(_("Only the user can add to their own timeline.")); + return; + } + + if ($this->format != 'atom') { + // Only handle posts for Atom + $this->clientError(_("Only accept AtomPub for atom feeds.")); + return; + } + + $xml = file_get_contents('php://input'); + + $dom = DOMDocument::loadXML($xml); + + if ($dom->documentElement->namespaceURI != Activity::ATOM || + $dom->documentElement->localName != 'entry') { + $this->clientError(_('Atom post must be an Atom entry.')); + return; + } + + $activity = new Activity($dom->documentElement); + + if ($activity->verb != ActivityVerb::POST) { + $this->clientError(_('Can only handle post activities.')); + return; + } + + $note = $activity->objects[0]; + + if (!in_array($note->type, array(ActivityObject::NOTE, + ActivityObject::BLOGENTRY, + ActivityObject::STATUS))) { + $this->clientError(sprintf(_('Cannot handle activity object type "%s"', + $note->type))); + return; + } + + // Use summary as fallback for content + + if (!empty($note->content)) { + $sourceContent = $note->content; + } else if (!empty($note->summary)) { + $sourceContent = $note->summary; + } else if (!empty($note->title)) { + $sourceContent = $note->title; + } else { + // @fixme fetch from $sourceUrl? + // @todo i18n FIXME: use sprintf and add i18n. + $this->clientError("No content for notice {$note->id}."); + return; + } + + // Get (safe!) HTML and text versions of the content + + $rendered = $this->purify($sourceContent); + $content = html_entity_decode(strip_tags($rendered), ENT_QUOTES, 'UTF-8'); + + $shortened = common_shorten_links($content); + + $options = array('is_local' => Notice::LOCAL_PUBLIC, + 'rendered' => $rendered, + 'replies' => array(), + 'groups' => array(), + 'tags' => array(), + 'urls' => array()); + + // accept remote URI (not necessarily a good idea) + + common_debug("Note ID is {$note->id}"); + + if (!empty($note->id)) { + $notice = Notice::staticGet('uri', trim($note->id)); + + if (!empty($notice)) { + $this->clientError(sprintf(_('Notice with URI "%s" already exists.'), + $note->id)); + return; + } + common_log(LOG_NOTICE, "Saving client-supplied notice URI '$note->id'"); + $options['uri'] = $note->id; + } + + // accept remote create time (also maybe not such a good idea) + + if (!empty($activity->time)) { + common_log(LOG_NOTICE, "Saving client-supplied create time {$activity->time}"); + $options['created'] = common_sql_date($activity->time); + } + + // Check for optional attributes... + + if (!empty($activity->context)) { + + foreach ($activity->context->attention as $uri) { + + $profile = Profile::fromURI($uri); + + if (!empty($profile)) { + $options['replies'] = $uri; + } else { + $group = User_group::staticGet('uri', $uri); + if (!empty($group)) { + $options['groups'] = $uri; + } else { + // @fixme: hook for discovery here + common_log(LOG_WARNING, sprintf(_('AtomPub post with unknown attention URI %s'), $uri)); + } + } + } + + // Maintain direct reply associations + // @fixme what about conversation ID? + + if (!empty($activity->context->replyToID)) { + $orig = Notice::staticGet('uri', + $activity->context->replyToID); + if (!empty($orig)) { + $options['reply_to'] = $orig->id; + } + } + + $location = $activity->context->location; + + if ($location) { + $options['lat'] = $location->lat; + $options['lon'] = $location->lon; + if ($location->location_id) { + $options['location_ns'] = $location->location_ns; + $options['location_id'] = $location->location_id; + } + } + } + + // Atom categories <-> hashtags + + foreach ($activity->categories as $cat) { + if ($cat->term) { + $term = common_canonical_tag($cat->term); + if ($term) { + $options['tags'][] = $term; + } + } + } + + // Atom enclosures -> attachment URLs + foreach ($activity->enclosures as $href) { + // @fixme save these locally or....? + $options['urls'][] = $href; + } + + $saved = Notice::saveNew($this->user->id, + $content, + 'atompub', // TODO: deal with this + $options); + + if (!empty($saved)) { + header("Location: " . common_local_url('ApiStatusesShow', array('notice_id' => $saved->id, + 'format' => 'atom'))); + $this->showSingleAtomStatus($saved); + } + } + + function purify($content) + { + require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php'; + + $config = array('safe' => 1, + 'deny_attribute' => 'id,style,on*'); + return htmLawed($content, $config); + } } From 698818bd7eee94e92f23967897862857a190c6ea Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sun, 24 Oct 2010 23:05:33 -0400 Subject: [PATCH 005/220] show rel=edit links in notices for authenticated users --- classes/Notice.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/classes/Notice.php b/classes/Notice.php index 60989f9bac..676e4cb546 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1613,6 +1613,20 @@ class Notice extends Memcached_DataObject Event::handle('EndActivityGeo', array(&$this, &$xs, $lat, $lon)); } + // @fixme check this logic + + if ($this->isLocal() && !empty($cur) && $cur->id == $this->profile_id) { + $relEditUrl = common_local_url('ApiStatusesShow', array('id' => $this->id, + 'format' => 'atom')); + + if (Event::handle('StartActivityRelEdit', array(&$this, &$xs, &$relEditUrl))) { + $xs->element('link', array('rel' => 'edit', + 'type' => 'application/atom+xml', + 'href' => $relEditUrl)); + Event::handle('EndActivityRelEdit', array(&$this, &$xs, $relEditUrl)); + } + } + if (Event::handle('StartActivityEnd', array(&$this, &$xs))) { $xs->elementEnd('entry'); Event::handle('EndActivityEnd', array(&$this, &$xs)); From 59a7d78acb09c92622814d55c14e266f8f460fdf Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sun, 24 Oct 2010 23:43:26 -0400 Subject: [PATCH 006/220] Atom Service Document --- actions/apiatomservice.php | 100 +++++++++++++++++++++++++++++++++++++ actions/rsd.php | 14 ++++++ lib/router.php | 7 +++ 3 files changed, 121 insertions(+) create mode 100644 actions/apiatomservice.php diff --git a/actions/apiatomservice.php b/actions/apiatomservice.php new file mode 100644 index 0000000000..fb9d6aee82 --- /dev/null +++ b/actions/apiatomservice.php @@ -0,0 +1,100 @@ +. + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +require_once INSTALLDIR.'/lib/apibareauth.php'; + +/** + * Shows an AtomPub service document for a user + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +class ApiAtomServiceAction extends ApiBareAuthAction +{ + /** + * Take arguments for running + * + * @param array $args $_REQUEST args + * + * @return boolean success flag + * + */ + + function prepare($args) + { + parent::prepare($args); + $this->user = $this->getTargetUser($this->arg('id')); + + if (empty($this->user)) { + $this->clientError(_('No such user.'), 404, $this->format); + return; + } + + return true; + } + + /** + * Handle the arguments. In our case, show a service document. + * + * @param Array $args unused. + * + * @return void + */ + + function handle($args) + { + parent::handle($args); + + header('Content-Type: application/atomsvc+xml'); + + $this->startXML(); + $this->elementStart('service', array('xmlns' => 'http://www.w3.org/2007/app', + 'xmlns:atom' => 'http://www.w3.org/2005/Atom')); + $this->elementStart('workspace'); + $this->element('atom:title', null, _('Main')); + $this->elementStart('collection', + array('href' => common_local_url('ApiTimelineUser', + array('id' => $this->user->id, + 'format' => 'atom')))); + $this->element('atom:title', + null, + sprintf(_("%s timeline"), + $this->user->nickname)); + $this->element('accept', null, 'application/atom+xml;type=entry'); + $this->elementEnd('collection'); + $this->elementEnd('workspace'); + $this->elementEnd('service'); + $this->endXML(); + } +} diff --git a/actions/rsd.php b/actions/rsd.php index f88bf2e9a8..e02c85c41b 100644 --- a/actions/rsd.php +++ b/actions/rsd.php @@ -162,6 +162,20 @@ class RsdAction extends Action 'true'); $this->elementEnd('settings'); $this->elementEnd('api'); + + // Atom API + + if (empty($this->user)) { + $service = common_local_url('ApiAtomService'); + } else { + $service = common_local_url('ApiAtomService', array('id' => $this->user->nickname)); + } + + $this->element('api', array('name' => 'Atom', + 'preferred' => 'false', + 'apiLink' => $service, + 'blogID' => $blogID)); + Event::handle('EndRsdListApis', array($this, $this->user)); } $this->elementEnd('apis'); diff --git a/lib/router.php b/lib/router.php index 834445f09b..c0f3bf31d7 100644 --- a/lib/router.php +++ b/lib/router.php @@ -686,6 +686,13 @@ class Router $m->connect('api/oauth/authorize', array('action' => 'ApiOauthAuthorize')); + $m->connect('api/statusnet/app/service/:id.xml', + array('action' => 'ApiAtomService', + 'id' => '[a-zA-Z0-9]+')); + + $m->connect('api/statusnet/app/service.xml', + array('action' => 'ApiAtomService')); + // Admin $m->connect('admin/site', array('action' => 'siteadminpanel')); From e51ed96b89eb0229f890a3924c653eda51972a76 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 25 Oct 2010 09:48:01 -0400 Subject: [PATCH 007/220] add rel=self links to atom entries --- classes/Notice.php | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index 676e4cb546..90ea811b6b 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1615,15 +1615,30 @@ class Notice extends Memcached_DataObject // @fixme check this logic - if ($this->isLocal() && !empty($cur) && $cur->id == $this->profile_id) { - $relEditUrl = common_local_url('ApiStatusesShow', array('id' => $this->id, - 'format' => 'atom')); + if ($this->isLocal()) { - if (Event::handle('StartActivityRelEdit', array(&$this, &$xs, &$relEditUrl))) { - $xs->element('link', array('rel' => 'edit', + $selfUrl = common_local_url('ApiStatusesShow', array('id' => $this->id, + 'format' => 'atom')); + + if (Event::handle('StartActivityRelSelf', array(&$this, &$xs, &$selfUrl))) { + $xs->element('link', array('rel' => 'self', 'type' => 'application/atom+xml', - 'href' => $relEditUrl)); - Event::handle('EndActivityRelEdit', array(&$this, &$xs, $relEditUrl)); + 'href' => $selfUrl)); + Event::handle('EndActivityRelSelf', array(&$this, &$xs, $selfUrl)); + } + + if (!empty($cur) && $cur->id == $this->profile_id) { + + // note: $selfUrl may have been changed by a plugin + $relEditUrl = common_local_url('ApiStatusesShow', array('id' => $this->id, + 'format' => 'atom')); + + if (Event::handle('StartActivityRelEdit', array(&$this, &$xs, &$relEditUrl))) { + $xs->element('link', array('rel' => 'edit', + 'type' => 'application/atom+xml', + 'href' => $relEditUrl)); + Event::handle('EndActivityRelEdit', array(&$this, &$xs, $relEditUrl)); + } } } From e6ba379c8bfcf6a057a9cdfc161cae84d031401f Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 25 Oct 2010 11:08:10 -0400 Subject: [PATCH 008/220] navigation links in user timeline (for AtomPub) --- actions/apitimelineuser.php | 58 +++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php index cb7c847d62..69cd9c2cb4 100644 --- a/actions/apitimelineuser.php +++ b/actions/apitimelineuser.php @@ -157,6 +157,49 @@ class ApiTimelineUserAction extends ApiBareAuthAction $atom->setId($self); $atom->setSelfLink($self); + + // Add navigation links: next, prev, first + // Note: we use IDs rather than pages for navigation; page boundaries + // change too quickly! + + if (!empty($this->next_id)) { + $nextUrl = common_local_url('ApiTimelineUser', + array('format' => 'atom', + 'id' => $this->user->id), + array('max_id' => $this->next_id)); + + $atom->addLink($nextUrl, + array('rel' => 'next', + 'type' => 'application/atom+xml')); + } + + if (($this->page > 1 || !empty($this->max_id)) && !empty($this->notices)) { + + $lastNotice = $this->notices[0]; + $lastId = $lastNotice->id; + + $prevUrl = common_local_url('ApiTimelineUser', + array('format' => 'atom', + 'id' => $this->user->id), + array('since_id' => $lastId)); + + $atom->addLink($prevUrl, + array('rel' => 'prev', + 'type' => 'application/atom+xml')); + } + + if ($this->page > 1 || !empty($this->since_id) || !empty($this->max_id)) { + + $firstUrl = common_local_url('ApiTimelineUser', + array('format' => 'atom', + 'id' => $this->user->id)); + + $atom->addLink($firstUrl, + array('rel' => 'first', + 'type' => 'application/atom+xml')); + + } + $atom->addEntryFromNotices($this->notices); $this->raw($atom->getString()); @@ -181,13 +224,18 @@ class ApiTimelineUserAction extends ApiBareAuthAction { $notices = array(); - $notice = $this->user->getNotices( - ($this->page-1) * $this->count, $this->count, - $this->since_id, $this->max_id - ); + $notice = $this->user->getNotices(($this->page-1) * $this->count, + $this->count + 1, + $this->since_id, + $this->max_id); while ($notice->fetch()) { - $notices[] = clone($notice); + if (count($notices) < $this->count) { + $notices[] = clone($notice); + } else { + $this->next_id = $notice->id; + break; + } } return $notices; From 2c420cc5eba9cd89b9daf0e10c750a34672a4795 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Fri, 29 Oct 2010 23:38:00 +0000 Subject: [PATCH 009/220] New Start/EndHtmlElement events. Allows adding namespaces. --- EVENTS.txt | 8 ++++++++ lib/htmloutputter.php | 13 ++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/EVENTS.txt b/EVENTS.txt index 8e730945a4..7d4fc6c162 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -365,6 +365,14 @@ GetValidDaemons: Just before determining which daemons to run HandleQueuedNotice: Handle a queued notice at queue time (or immediately if no queue) - &$notice: notice to handle +StartHtmlElement: Reight before outputting the HTML element - allows plugins to add namespaces +- $action: the current action +- &$attrs: attributes for the HTML element + +EndHtmlElement: Right after outputting the HTML element +- $action: the current action +- &$attrs: attributes for the HTML element + StartShowHeadElements: Right after the tag - $action: the current action diff --git a/lib/htmloutputter.php b/lib/htmloutputter.php index 42bff44908..b341d14958 100644 --- a/lib/htmloutputter.php +++ b/lib/htmloutputter.php @@ -119,9 +119,16 @@ class HTMLOutputter extends XMLOutputter $language = $this->getLanguage(); - $this->elementStart('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', - 'xml:lang' => $language, - 'lang' => $language)); + $attrs = array( + 'xmlns' => 'http://www.w3.org/1999/xhtml', + 'xml:lang' => $language, + 'lang' => $language + ); + + if (Event::handle('StartHtmlElement', array($this, &$attrs))) { + $this->elementStart('html', $attrs); + Event::handle('EndHtmlElement', array($this, &$attrs)); + } } function getLanguage() From 5738e0e4a9e569baf97522a01bb214b178fcb698 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Sat, 30 Oct 2010 00:44:16 +0000 Subject: [PATCH 010/220] Beginnings of a new Facebook integration plugin --- plugins/FacebookSSO/FacebookSSOPlugin.php | 301 ++++++ plugins/FacebookSSO/extlib/facebook.php | 963 ++++++++++++++++++ .../FacebookSSO/extlib/fb_ca_chain_bundle.crt | 121 +++ plugins/FacebookSSO/facebookadminpanel.php | 212 ++++ plugins/FacebookSSO/facebooklogin.php | 82 ++ 5 files changed, 1679 insertions(+) create mode 100644 plugins/FacebookSSO/FacebookSSOPlugin.php create mode 100644 plugins/FacebookSSO/extlib/facebook.php create mode 100644 plugins/FacebookSSO/extlib/fb_ca_chain_bundle.crt create mode 100644 plugins/FacebookSSO/facebookadminpanel.php create mode 100644 plugins/FacebookSSO/facebooklogin.php diff --git a/plugins/FacebookSSO/FacebookSSOPlugin.php b/plugins/FacebookSSO/FacebookSSOPlugin.php new file mode 100644 index 0000000000..f4790f7056 --- /dev/null +++ b/plugins/FacebookSSO/FacebookSSOPlugin.php @@ -0,0 +1,301 @@ +. + * + * @category Pugin + * @package StatusNet + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Main class for Facebook single-sign-on plugin + * + * + * Simple plugins can be implemented as a single module. Others are more complex + * and require additional modules; these should use their own directory, like + * 'local/plugins/{$name}/'. All files related to the plugin, including images, + * JavaScript, CSS, external libraries or PHP modules should go in the plugin + * directory. + * + * @category Plugin + * @package StatusNet + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ +class FacebookSSOPlugin extends Plugin +{ + public $appId = null; // Facebook application ID + public $secret = null; // Facebook application secret + public $facebook = null; // Facebook application instance + public $dir = null; // Facebook SSO plugin dir + + /** + * Initializer for this plugin + * + * Plugins overload this method to do any initialization they need, + * like connecting to remote servers or creating paths or so on. + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function initialize() + { + common_debug("XXXXXXXXXXXX " . $this->appId); + // Check defaults and configuration for application ID and secret + if (empty($this->appId)) { + $this->appId = common_config('facebook', 'appid'); + } + + if (empty($this->secret)) { + $this->secret = common_config('facebook', 'secret'); + } + + if (empty($this->facebook)) { + common_debug('instantiating facebook obj'); + $this->facebook = new Facebook( + array( + 'appId' => $this->appId, + 'secret' => $this->secret, + 'cookie' => true + ) + ); + } + + common_debug("FACEBOOK = " . var_export($this->facebook, true)); + + return true; + } + + /** + * Cleanup for this plugin + * + * Plugins overload this method to do any cleanup they need, + * like disconnecting from remote servers or deleting temp files or so on. + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function cleanup() + { + return true; + } + + /** + * Load related modules when needed + * + * Most non-trivial plugins will require extra modules to do their work. Typically + * these include data classes, action classes, widget classes, or external libraries. + * + * This method receives a class name and loads the PHP file related to that class. By + * tradition, action classes typically have files named for the action, all lower-case. + * Data classes are in files with the data class name, initial letter capitalized. + * + * Note that this method will be called for *all* overloaded classes, not just ones + * in this plugin! So, make sure to return true by default to let other plugins, and + * the core code, get a chance. + * + * @param string $cls Name of the class to be loaded + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function onAutoload($cls) + { + + $dir = dirname(__FILE__); + + //common_debug("class = " . $cls); + + switch ($cls) + { + case 'Facebook': + include_once $dir . '/extlib/facebook.php'; + return false; + case 'FacebookloginAction': + case 'FacebookadminpanelAction': + include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + return false; + default: + return true; + } + + } + + /** + * Map URLs to actions + * + * This event handler lets the plugin map URLs on the site to actions (and + * thus an action handler class). Note that the action handler class for an + * action will be named 'FoobarAction', where action = 'foobar'. The class + * must be loaded in the onAutoload() method. + * + * @param Net_URL_Mapper $m path-to-action mapper + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function onRouterInitialized($m) + { + // Always add the admin panel route + $m->connect('admin/facebook', array('action' => 'facebookadminpanel')); + + // Only add these routes if an application has been setup on + // Facebook for the plugin to use. + if ($this->hasApplication()) { + $m->connect('main/facebooklogin', array('action' => 'facebooklogin')); + } + + return true; + } + + /* + * Add a login tab for Facebook, but only if there's a Facebook + * application defined for the plugin to use. + * + * @param Action &action the current action + * + * @return void + */ + function onEndLoginGroupNav(&$action) + { + $action_name = $action->trimmed('action'); + + if ($this->hasApplication()) { + + $action->menuItem( + common_local_url('facebooklogin'), + _m('MENU', 'Facebook'), + // TRANS: Tooltip for menu item "Facebook". + _m('Login or register using Facebook'), + 'facebooklogin' === $action_name + ); + } + + return true; + } + + /** + * Add a Facebook tab to the admin panels + * + * @param Widget $nav Admin panel nav + * + * @return boolean hook value + */ + function onEndAdminPanelNav($nav) + { + if (AdminPanelAction::canAdmin('facebook')) { + + $action_name = $nav->action->trimmed('action'); + + $nav->out->menuItem( + common_local_url('facebookadminpanel'), + // TRANS: Menu item. + _m('MENU','Facebook'), + // TRANS: Tooltip for menu item "Facebook". + _m('Facebook integration configuration'), + $action_name == 'facebookadminpanel', + 'nav_facebook_admin_panel' + ); + } + + return true; + } + + /* + * Is there a Facebook application for the plugin to use? + */ + function hasApplication() + { + if (!empty($this->appId) && !empty($this->secret)) { + return true; + } else { + return false; + } + } + + function onStartShowHeader($action) + { + // output
as close to as possible + $action->element('div', array('id' => 'fb-root')); + + $session = $this->facebook->getSession(); + $dir = dirname(__FILE__); + + // XXX: minify this + $script = <<inlineScript( + sprintf($script, + json_encode($this->appId), + json_encode($this->session) + ) + ); + + return true; + } + + function onStartHtmlElement($action, $attrs) { + $attrs = array_merge($attrs, array('xmlns:fb' => 'http://www.facebook.com/2008/fbml')); + return true; + } + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'Facebook Single-Sign-On', + 'version' => STATUSNET_VERSION, + 'author' => 'Zach Copley', + 'homepage' => 'http://status.net/wiki/Plugin:FacebookSSO', + 'rawdescription' => + _m('A plugin for single-sign-on with Facebook.')); + return true; + } +} diff --git a/plugins/FacebookSSO/extlib/facebook.php b/plugins/FacebookSSO/extlib/facebook.php new file mode 100644 index 0000000000..d2d2e866bf --- /dev/null +++ b/plugins/FacebookSSO/extlib/facebook.php @@ -0,0 +1,963 @@ + + */ +class FacebookApiException extends Exception +{ + /** + * The result from the API server that represents the exception information. + */ + protected $result; + + /** + * Make a new API Exception with the given result. + * + * @param Array $result the result from the API server + */ + public function __construct($result) { + $this->result = $result; + + $code = isset($result['error_code']) ? $result['error_code'] : 0; + + if (isset($result['error_description'])) { + // OAuth 2.0 Draft 10 style + $msg = $result['error_description']; + } else if (isset($result['error']) && is_array($result['error'])) { + // OAuth 2.0 Draft 00 style + $msg = $result['error']['message']; + } else if (isset($result['error_msg'])) { + // Rest server style + $msg = $result['error_msg']; + } else { + $msg = 'Unknown Error. Check getResult()'; + } + + parent::__construct($msg, $code); + } + + /** + * Return the associated result object returned by the API server. + * + * @returns Array the result from the API server + */ + public function getResult() { + return $this->result; + } + + /** + * Returns the associated type for the error. This will default to + * 'Exception' when a type is not available. + * + * @return String + */ + public function getType() { + if (isset($this->result['error'])) { + $error = $this->result['error']; + if (is_string($error)) { + // OAuth 2.0 Draft 10 style + return $error; + } else if (is_array($error)) { + // OAuth 2.0 Draft 00 style + if (isset($error['type'])) { + return $error['type']; + } + } + } + return 'Exception'; + } + + /** + * To make debugging easier. + * + * @returns String the string representation of the error + */ + public function __toString() { + $str = $this->getType() . ': '; + if ($this->code != 0) { + $str .= $this->code . ': '; + } + return $str . $this->message; + } +} + +/** + * Provides access to the Facebook Platform. + * + * @author Naitik Shah + */ +class Facebook +{ + /** + * Version. + */ + const VERSION = '2.1.2'; + + /** + * Default options for curl. + */ + public static $CURL_OPTS = array( + CURLOPT_CONNECTTIMEOUT => 10, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 60, + CURLOPT_USERAGENT => 'facebook-php-2.0', + ); + + /** + * List of query parameters that get automatically dropped when rebuilding + * the current URL. + */ + protected static $DROP_QUERY_PARAMS = array( + 'session', + 'signed_request', + ); + + /** + * Maps aliases to Facebook domains. + */ + public static $DOMAIN_MAP = array( + 'api' => 'https://api.facebook.com/', + 'api_read' => 'https://api-read.facebook.com/', + 'graph' => 'https://graph.facebook.com/', + 'www' => 'https://www.facebook.com/', + ); + + /** + * The Application ID. + */ + protected $appId; + + /** + * The Application API Secret. + */ + protected $apiSecret; + + /** + * The active user session, if one is available. + */ + protected $session; + + /** + * The data from the signed_request token. + */ + protected $signedRequest; + + /** + * Indicates that we already loaded the session as best as we could. + */ + protected $sessionLoaded = false; + + /** + * Indicates if Cookie support should be enabled. + */ + protected $cookieSupport = false; + + /** + * Base domain for the Cookie. + */ + protected $baseDomain = ''; + + /** + * Indicates if the CURL based @ syntax for file uploads is enabled. + */ + protected $fileUploadSupport = false; + + /** + * Initialize a Facebook Application. + * + * The configuration: + * - appId: the application ID + * - secret: the application secret + * - cookie: (optional) boolean true to enable cookie support + * - domain: (optional) domain for the cookie + * - fileUpload: (optional) boolean indicating if file uploads are enabled + * + * @param Array $config the application configuration + */ + public function __construct($config) { + $this->setAppId($config['appId']); + $this->setApiSecret($config['secret']); + if (isset($config['cookie'])) { + $this->setCookieSupport($config['cookie']); + } + if (isset($config['domain'])) { + $this->setBaseDomain($config['domain']); + } + if (isset($config['fileUpload'])) { + $this->setFileUploadSupport($config['fileUpload']); + } + } + + /** + * Set the Application ID. + * + * @param String $appId the Application ID + */ + public function setAppId($appId) { + $this->appId = $appId; + return $this; + } + + /** + * Get the Application ID. + * + * @return String the Application ID + */ + public function getAppId() { + return $this->appId; + } + + /** + * Set the API Secret. + * + * @param String $appId the API Secret + */ + public function setApiSecret($apiSecret) { + $this->apiSecret = $apiSecret; + return $this; + } + + /** + * Get the API Secret. + * + * @return String the API Secret + */ + public function getApiSecret() { + return $this->apiSecret; + } + + /** + * Set the Cookie Support status. + * + * @param Boolean $cookieSupport the Cookie Support status + */ + public function setCookieSupport($cookieSupport) { + $this->cookieSupport = $cookieSupport; + return $this; + } + + /** + * Get the Cookie Support status. + * + * @return Boolean the Cookie Support status + */ + public function useCookieSupport() { + return $this->cookieSupport; + } + + /** + * Set the base domain for the Cookie. + * + * @param String $domain the base domain + */ + public function setBaseDomain($domain) { + $this->baseDomain = $domain; + return $this; + } + + /** + * Get the base domain for the Cookie. + * + * @return String the base domain + */ + public function getBaseDomain() { + return $this->baseDomain; + } + + /** + * Set the file upload support status. + * + * @param String $domain the base domain + */ + public function setFileUploadSupport($fileUploadSupport) { + $this->fileUploadSupport = $fileUploadSupport; + return $this; + } + + /** + * Get the file upload support status. + * + * @return String the base domain + */ + public function useFileUploadSupport() { + return $this->fileUploadSupport; + } + + /** + * Get the data from a signed_request token + * + * @return String the base domain + */ + public function getSignedRequest() { + if (!$this->signedRequest) { + if (isset($_REQUEST['signed_request'])) { + $this->signedRequest = $this->parseSignedRequest( + $_REQUEST['signed_request']); + } + } + return $this->signedRequest; + } + + /** + * Set the Session. + * + * @param Array $session the session + * @param Boolean $write_cookie indicate if a cookie should be written. this + * value is ignored if cookie support has been disabled. + */ + public function setSession($session=null, $write_cookie=true) { + $session = $this->validateSessionObject($session); + $this->sessionLoaded = true; + $this->session = $session; + if ($write_cookie) { + $this->setCookieFromSession($session); + } + return $this; + } + + /** + * Get the session object. This will automatically look for a signed session + * sent via the signed_request, Cookie or Query Parameters if needed. + * + * @return Array the session + */ + public function getSession() { + if (!$this->sessionLoaded) { + $session = null; + $write_cookie = true; + + // try loading session from signed_request in $_REQUEST + $signedRequest = $this->getSignedRequest(); + if ($signedRequest) { + // sig is good, use the signedRequest + $session = $this->createSessionFromSignedRequest($signedRequest); + } + + // try loading session from $_REQUEST + if (!$session && isset($_REQUEST['session'])) { + $session = json_decode( + get_magic_quotes_gpc() + ? stripslashes($_REQUEST['session']) + : $_REQUEST['session'], + true + ); + $session = $this->validateSessionObject($session); + } + + // try loading session from cookie if necessary + if (!$session && $this->useCookieSupport()) { + $cookieName = $this->getSessionCookieName(); + if (isset($_COOKIE[$cookieName])) { + $session = array(); + parse_str(trim( + get_magic_quotes_gpc() + ? stripslashes($_COOKIE[$cookieName]) + : $_COOKIE[$cookieName], + '"' + ), $session); + $session = $this->validateSessionObject($session); + // write only if we need to delete a invalid session cookie + $write_cookie = empty($session); + } + } + + $this->setSession($session, $write_cookie); + } + + return $this->session; + } + + /** + * Get the UID from the session. + * + * @return String the UID if available + */ + public function getUser() { + $session = $this->getSession(); + return $session ? $session['uid'] : null; + } + + /** + * Gets a OAuth access token. + * + * @return String the access token + */ + public function getAccessToken() { + $session = $this->getSession(); + // either user session signed, or app signed + if ($session) { + return $session['access_token']; + } else { + return $this->getAppId() .'|'. $this->getApiSecret(); + } + } + + /** + * Get a Login URL for use with redirects. By default, full page redirect is + * assumed. If you are using the generated URL with a window.open() call in + * JavaScript, you can pass in display=popup as part of the $params. + * + * The parameters: + * - next: the url to go to after a successful login + * - cancel_url: the url to go to after the user cancels + * - req_perms: comma separated list of requested extended perms + * - display: can be "page" (default, full page) or "popup" + * + * @param Array $params provide custom parameters + * @return String the URL for the login flow + */ + public function getLoginUrl($params=array()) { + $currentUrl = $this->getCurrentUrl(); + return $this->getUrl( + 'www', + 'login.php', + array_merge(array( + 'api_key' => $this->getAppId(), + 'cancel_url' => $currentUrl, + 'display' => 'page', + 'fbconnect' => 1, + 'next' => $currentUrl, + 'return_session' => 1, + 'session_version' => 3, + 'v' => '1.0', + ), $params) + ); + } + + /** + * Get a Logout URL suitable for use with redirects. + * + * The parameters: + * - next: the url to go to after a successful logout + * + * @param Array $params provide custom parameters + * @return String the URL for the logout flow + */ + public function getLogoutUrl($params=array()) { + return $this->getUrl( + 'www', + 'logout.php', + array_merge(array( + 'next' => $this->getCurrentUrl(), + 'access_token' => $this->getAccessToken(), + ), $params) + ); + } + + /** + * Get a login status URL to fetch the status from facebook. + * + * The parameters: + * - ok_session: the URL to go to if a session is found + * - no_session: the URL to go to if the user is not connected + * - no_user: the URL to go to if the user is not signed into facebook + * + * @param Array $params provide custom parameters + * @return String the URL for the logout flow + */ + public function getLoginStatusUrl($params=array()) { + return $this->getUrl( + 'www', + 'extern/login_status.php', + array_merge(array( + 'api_key' => $this->getAppId(), + 'no_session' => $this->getCurrentUrl(), + 'no_user' => $this->getCurrentUrl(), + 'ok_session' => $this->getCurrentUrl(), + 'session_version' => 3, + ), $params) + ); + } + + /** + * Make an API call. + * + * @param Array $params the API call parameters + * @return the decoded response + */ + public function api(/* polymorphic */) { + $args = func_get_args(); + if (is_array($args[0])) { + return $this->_restserver($args[0]); + } else { + return call_user_func_array(array($this, '_graph'), $args); + } + } + + /** + * Invoke the old restserver.php endpoint. + * + * @param Array $params method call object + * @return the decoded response object + * @throws FacebookApiException + */ + protected function _restserver($params) { + // generic application level parameters + $params['api_key'] = $this->getAppId(); + $params['format'] = 'json-strings'; + + $result = json_decode($this->_oauthRequest( + $this->getApiUrl($params['method']), + $params + ), true); + + // results are returned, errors are thrown + if (is_array($result) && isset($result['error_code'])) { + throw new FacebookApiException($result); + } + return $result; + } + + /** + * Invoke the Graph API. + * + * @param String $path the path (required) + * @param String $method the http method (default 'GET') + * @param Array $params the query/post data + * @return the decoded response object + * @throws FacebookApiException + */ + protected function _graph($path, $method='GET', $params=array()) { + if (is_array($method) && empty($params)) { + $params = $method; + $method = 'GET'; + } + $params['method'] = $method; // method override as we always do a POST + + $result = json_decode($this->_oauthRequest( + $this->getUrl('graph', $path), + $params + ), true); + + // results are returned, errors are thrown + if (is_array($result) && isset($result['error'])) { + $e = new FacebookApiException($result); + switch ($e->getType()) { + // OAuth 2.0 Draft 00 style + case 'OAuthException': + // OAuth 2.0 Draft 10 style + case 'invalid_token': + $this->setSession(null); + } + throw $e; + } + return $result; + } + + /** + * Make a OAuth Request + * + * @param String $path the path (required) + * @param Array $params the query/post data + * @return the decoded response object + * @throws FacebookApiException + */ + protected function _oauthRequest($url, $params) { + if (!isset($params['access_token'])) { + $params['access_token'] = $this->getAccessToken(); + } + + // json_encode all params values that are not strings + foreach ($params as $key => $value) { + if (!is_string($value)) { + $params[$key] = json_encode($value); + } + } + return $this->makeRequest($url, $params); + } + + /** + * Makes an HTTP request. This method can be overriden by subclasses if + * developers want to do fancier things or use something other than curl to + * make the request. + * + * @param String $url the URL to make the request to + * @param Array $params the parameters to use for the POST body + * @param CurlHandler $ch optional initialized curl handle + * @return String the response text + */ + protected function makeRequest($url, $params, $ch=null) { + if (!$ch) { + $ch = curl_init(); + } + + $opts = self::$CURL_OPTS; + if ($this->useFileUploadSupport()) { + $opts[CURLOPT_POSTFIELDS] = $params; + } else { + $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&'); + } + $opts[CURLOPT_URL] = $url; + + // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait + // for 2 seconds if the server does not support this header. + if (isset($opts[CURLOPT_HTTPHEADER])) { + $existing_headers = $opts[CURLOPT_HTTPHEADER]; + $existing_headers[] = 'Expect:'; + $opts[CURLOPT_HTTPHEADER] = $existing_headers; + } else { + $opts[CURLOPT_HTTPHEADER] = array('Expect:'); + } + + curl_setopt_array($ch, $opts); + $result = curl_exec($ch); + + if (curl_errno($ch) == 60) { // CURLE_SSL_CACERT + self::errorLog('Invalid or no certificate authority found, using bundled information'); + curl_setopt($ch, CURLOPT_CAINFO, + dirname(__FILE__) . '/fb_ca_chain_bundle.crt'); + $result = curl_exec($ch); + } + + if ($result === false) { + $e = new FacebookApiException(array( + 'error_code' => curl_errno($ch), + 'error' => array( + 'message' => curl_error($ch), + 'type' => 'CurlException', + ), + )); + curl_close($ch); + throw $e; + } + curl_close($ch); + return $result; + } + + /** + * The name of the Cookie that contains the session. + * + * @return String the cookie name + */ + protected function getSessionCookieName() { + return 'fbs_' . $this->getAppId(); + } + + /** + * Set a JS Cookie based on the _passed in_ session. It does not use the + * currently stored session -- you need to explicitly pass it in. + * + * @param Array $session the session to use for setting the cookie + */ + protected function setCookieFromSession($session=null) { + if (!$this->useCookieSupport()) { + return; + } + + $cookieName = $this->getSessionCookieName(); + $value = 'deleted'; + $expires = time() - 3600; + $domain = $this->getBaseDomain(); + if ($session) { + $value = '"' . http_build_query($session, null, '&') . '"'; + if (isset($session['base_domain'])) { + $domain = $session['base_domain']; + } + $expires = $session['expires']; + } + + // prepend dot if a domain is found + if ($domain) { + $domain = '.' . $domain; + } + + // if an existing cookie is not set, we dont need to delete it + if ($value == 'deleted' && empty($_COOKIE[$cookieName])) { + return; + } + + if (headers_sent()) { + self::errorLog('Could not set cookie. Headers already sent.'); + + // ignore for code coverage as we will never be able to setcookie in a CLI + // environment + // @codeCoverageIgnoreStart + } else { + setcookie($cookieName, $value, $expires, '/', $domain); + } + // @codeCoverageIgnoreEnd + } + + /** + * Validates a session_version=3 style session object. + * + * @param Array $session the session object + * @return Array the session object if it validates, null otherwise + */ + protected function validateSessionObject($session) { + // make sure some essential fields exist + if (is_array($session) && + isset($session['uid']) && + isset($session['access_token']) && + isset($session['sig'])) { + // validate the signature + $session_without_sig = $session; + unset($session_without_sig['sig']); + $expected_sig = self::generateSignature( + $session_without_sig, + $this->getApiSecret() + ); + if ($session['sig'] != $expected_sig) { + self::errorLog('Got invalid session signature in cookie.'); + $session = null; + } + // check expiry time + } else { + $session = null; + } + return $session; + } + + /** + * Returns something that looks like our JS session object from the + * signed token's data + * + * TODO: Nuke this once the login flow uses OAuth2 + * + * @param Array the output of getSignedRequest + * @return Array Something that will work as a session + */ + protected function createSessionFromSignedRequest($data) { + if (!isset($data['oauth_token'])) { + return null; + } + + $session = array( + 'uid' => $data['user_id'], + 'access_token' => $data['oauth_token'], + 'expires' => $data['expires'], + ); + + // put a real sig, so that validateSignature works + $session['sig'] = self::generateSignature( + $session, + $this->getApiSecret() + ); + + return $session; + } + + /** + * Parses a signed_request and validates the signature. + * Then saves it in $this->signed_data + * + * @param String A signed token + * @param Boolean Should we remove the parts of the payload that + * are used by the algorithm? + * @return Array the payload inside it or null if the sig is wrong + */ + protected function parseSignedRequest($signed_request) { + list($encoded_sig, $payload) = explode('.', $signed_request, 2); + + // decode the data + $sig = self::base64UrlDecode($encoded_sig); + $data = json_decode(self::base64UrlDecode($payload), true); + + if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { + self::errorLog('Unknown algorithm. Expected HMAC-SHA256'); + return null; + } + + // check sig + $expected_sig = hash_hmac('sha256', $payload, + $this->getApiSecret(), $raw = true); + if ($sig !== $expected_sig) { + self::errorLog('Bad Signed JSON signature!'); + return null; + } + + return $data; + } + + /** + * Build the URL for api given parameters. + * + * @param $method String the method name. + * @return String the URL for the given parameters + */ + protected function getApiUrl($method) { + static $READ_ONLY_CALLS = + array('admin.getallocation' => 1, + 'admin.getappproperties' => 1, + 'admin.getbannedusers' => 1, + 'admin.getlivestreamvialink' => 1, + 'admin.getmetrics' => 1, + 'admin.getrestrictioninfo' => 1, + 'application.getpublicinfo' => 1, + 'auth.getapppublickey' => 1, + 'auth.getsession' => 1, + 'auth.getsignedpublicsessiondata' => 1, + 'comments.get' => 1, + 'connect.getunconnectedfriendscount' => 1, + 'dashboard.getactivity' => 1, + 'dashboard.getcount' => 1, + 'dashboard.getglobalnews' => 1, + 'dashboard.getnews' => 1, + 'dashboard.multigetcount' => 1, + 'dashboard.multigetnews' => 1, + 'data.getcookies' => 1, + 'events.get' => 1, + 'events.getmembers' => 1, + 'fbml.getcustomtags' => 1, + 'feed.getappfriendstories' => 1, + 'feed.getregisteredtemplatebundlebyid' => 1, + 'feed.getregisteredtemplatebundles' => 1, + 'fql.multiquery' => 1, + 'fql.query' => 1, + 'friends.arefriends' => 1, + 'friends.get' => 1, + 'friends.getappusers' => 1, + 'friends.getlists' => 1, + 'friends.getmutualfriends' => 1, + 'gifts.get' => 1, + 'groups.get' => 1, + 'groups.getmembers' => 1, + 'intl.gettranslations' => 1, + 'links.get' => 1, + 'notes.get' => 1, + 'notifications.get' => 1, + 'pages.getinfo' => 1, + 'pages.isadmin' => 1, + 'pages.isappadded' => 1, + 'pages.isfan' => 1, + 'permissions.checkavailableapiaccess' => 1, + 'permissions.checkgrantedapiaccess' => 1, + 'photos.get' => 1, + 'photos.getalbums' => 1, + 'photos.gettags' => 1, + 'profile.getinfo' => 1, + 'profile.getinfooptions' => 1, + 'stream.get' => 1, + 'stream.getcomments' => 1, + 'stream.getfilters' => 1, + 'users.getinfo' => 1, + 'users.getloggedinuser' => 1, + 'users.getstandardinfo' => 1, + 'users.hasapppermission' => 1, + 'users.isappuser' => 1, + 'users.isverified' => 1, + 'video.getuploadlimits' => 1); + $name = 'api'; + if (isset($READ_ONLY_CALLS[strtolower($method)])) { + $name = 'api_read'; + } + return self::getUrl($name, 'restserver.php'); + } + + /** + * Build the URL for given domain alias, path and parameters. + * + * @param $name String the name of the domain + * @param $path String optional path (without a leading slash) + * @param $params Array optional query parameters + * @return String the URL for the given parameters + */ + protected function getUrl($name, $path='', $params=array()) { + $url = self::$DOMAIN_MAP[$name]; + if ($path) { + if ($path[0] === '/') { + $path = substr($path, 1); + } + $url .= $path; + } + if ($params) { + $url .= '?' . http_build_query($params, null, '&'); + } + return $url; + } + + /** + * Returns the Current URL, stripping it of known FB parameters that should + * not persist. + * + * @return String the current URL + */ + protected function getCurrentUrl() { + $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' + ? 'https://' + : 'http://'; + $currentUrl = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + $parts = parse_url($currentUrl); + + // drop known fb params + $query = ''; + if (!empty($parts['query'])) { + $params = array(); + parse_str($parts['query'], $params); + foreach(self::$DROP_QUERY_PARAMS as $key) { + unset($params[$key]); + } + if (!empty($params)) { + $query = '?' . http_build_query($params, null, '&'); + } + } + + // use port if non default + $port = + isset($parts['port']) && + (($protocol === 'http://' && $parts['port'] !== 80) || + ($protocol === 'https://' && $parts['port'] !== 443)) + ? ':' . $parts['port'] : ''; + + // rebuild + return $protocol . $parts['host'] . $port . $parts['path'] . $query; + } + + /** + * Generate a signature for the given params and secret. + * + * @param Array $params the parameters to sign + * @param String $secret the secret to sign with + * @return String the generated signature + */ + protected static function generateSignature($params, $secret) { + // work with sorted data + ksort($params); + + // generate the base string + $base_string = ''; + foreach($params as $key => $value) { + $base_string .= $key . '=' . $value; + } + $base_string .= $secret; + + return md5($base_string); + } + + /** + * Prints to the error log if you aren't in command line mode. + * + * @param String log message + */ + protected static function errorLog($msg) { + // disable error log if we are running in a CLI environment + // @codeCoverageIgnoreStart + if (php_sapi_name() != 'cli') { + error_log($msg); + } + // uncomment this if you want to see the errors on the page + // print 'error_log: '.$msg."\n"; + // @codeCoverageIgnoreEnd + } + + /** + * Base64 encoding that doesn't need to be urlencode()ed. + * Exactly the same as base64_encode except it uses + * - instead of + + * _ instead of / + * + * @param String base64UrlEncodeded string + */ + protected static function base64UrlDecode($input) { + return base64_decode(strtr($input, '-_', '+/')); + } +} diff --git a/plugins/FacebookSSO/extlib/fb_ca_chain_bundle.crt b/plugins/FacebookSSO/extlib/fb_ca_chain_bundle.crt new file mode 100644 index 0000000000..b92d7190e9 --- /dev/null +++ b/plugins/FacebookSSO/extlib/fb_ca_chain_bundle.crt @@ -0,0 +1,121 @@ +-----BEGIN CERTIFICATE----- +MIIFgjCCBGqgAwIBAgIQDKKbZcnESGaLDuEaVk6fQjANBgkqhkiG9w0BAQUFADBm +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSUwIwYDVQQDExxEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBDQS0zMB4XDTEwMDExMzAwMDAwMFoXDTEzMDQxMTIzNTk1OVowaDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEX +MBUGA1UEChMORmFjZWJvb2ssIEluYy4xFzAVBgNVBAMUDiouZmFjZWJvb2suY29t +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9rzj7QIuLM3sdHu1HcI1VcR3g +b5FExKNV646agxSle1aQ/sJev1mh/u91ynwqd2BQmM0brZ1Hc3QrfYyAaiGGgEkp +xbhezyfeYhAyO0TKAYxPnm2cTjB5HICzk6xEIwFbA7SBJ2fSyW1CFhYZyo3tIBjj +19VjKyBfpRaPkzLmRwIDAQABo4ICrDCCAqgwHwYDVR0jBBgwFoAUUOpzidsp+xCP +nuUBINTeeZlIg/cwHQYDVR0OBBYEFPp+tsFBozkjrHlEnZ9J4cFj2eM0MA4GA1Ud +DwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMF8GA1UdHwRYMFYwKaAnoCWGI2h0dHA6 +Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9jYTMtZmIuY3JsMCmgJ6AlhiNodHRwOi8vY3Js +NC5kaWdpY2VydC5jb20vY2EzLWZiLmNybDCCAcYGA1UdIASCAb0wggG5MIIBtQYL +YIZIAYb9bAEDAAEwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3LmRpZ2ljZXJ0 +LmNvbS9zc2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUHAgIwggFWHoIB +UgBBAG4AeQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQByAHQAaQBmAGkA +YwBhAHQAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBjAGUAcAB0AGEA +bgBjAGUAIABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAgAEMAUAAvAEMA +UABTACAAYQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQAGEAcgB0AHkA +IABBAGcAcgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBtAGkAdAAgAGwA +aQBhAGIAaQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBjAG8AcgBwAG8A +cgBhAHQAZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBlAHIAZQBuAGMA +ZQAuMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQUF +AAOCAQEACOkTIdxMy11+CKrbGNLBSg5xHaTvu/v1wbyn3dO/mf68pPfJnX6ShPYy +4XM4Vk0x4uaFaU4wAGke+nCKGi5dyg0Esg7nemLNKEJaFAJZ9enxZm334lSCeARy +wlDtxULGOFRyGIZZPmbV2eNq5xdU/g3IuBEhL722mTpAye9FU/J8Wsnw54/gANyO +Gzkewigua8ip8Lbs9Cht399yAfbfhUP1DrAm/xEcnHrzPr3cdCtOyJaM6SRPpRqH +ITK5Nc06tat9lXVosSinT3KqydzxBYua9gCFFiR3x3DgZfvXkC6KDdUlDrNcJUub +a1BHnLLP4mxTHL6faAXYd05IxNn/IA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGVTCCBT2gAwIBAgIQCFH5WYFBRcq94CTiEsnCDjANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA3MDQwMzAwMDAwMFoXDTIyMDQwMzAwMDAwMFowZjEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTElMCMGA1UEAxMcRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +Q0EtMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9hCikQH17+NDdR +CPge+yLtYb4LDXBMUGMmdRW5QYiXtvCgFbsIYOBC6AUpEIc2iihlqO8xB3RtNpcv +KEZmBMcqeSZ6mdWOw21PoF6tvD2Rwll7XjZswFPPAAgyPhBkWBATaccM7pxCUQD5 +BUTuJM56H+2MEb0SqPMV9Bx6MWkBG6fmXcCabH4JnudSREoQOiPkm7YDr6ictFuf +1EutkozOtREqqjcYjbTCuNhcBoz4/yO9NV7UfD5+gw6RlgWYw7If48hl66l7XaAs +zPw82W3tzPpLQ4zJ1LilYRyyQLYoEt+5+F/+07LJ7z20Hkt8HEyZNp496+ynaF4d +32duXvsCAwEAAaOCAvcwggLzMA4GA1UdDwEB/wQEAwIBhjCCAcYGA1UdIASCAb0w +ggG5MIIBtQYLYIZIAYb9bAEDAAIwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3 +LmRpZ2ljZXJ0LmNvbS9zc2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUH +AgIwggFWHoIBUgBBAG4AeQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQBy +AHQAaQBmAGkAYwBhAHQAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBj +AGUAcAB0AGEAbgBjAGUAIABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAg +AEMAUAAvAEMAUABTACAAYQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQ +AGEAcgB0AHkAIABBAGcAcgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBt +AGkAdAAgAGwAaQBhAGIAaQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBj +AG8AcgBwAG8AcgBhAHQAZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBl +AHIAZQBuAGMAZQAuMA8GA1UdEwEB/wQFMAMBAf8wNAYIKwYBBQUHAQEEKDAmMCQG +CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wgY8GA1UdHwSBhzCB +hDBAoD6gPIY6aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0SGlnaEFz +c3VyYW5jZUVWUm9vdENBLmNybDBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQu +Y29tL0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNybDAfBgNVHSMEGDAW +gBSxPsNpA/i/RwHUmCYaCALvY2QrwzAdBgNVHQ4EFgQUUOpzidsp+xCPnuUBINTe +eZlIg/cwDQYJKoZIhvcNAQEFBQADggEBAF1PhPGoiNOjsrycbeUpSXfh59bcqdg1 +rslx3OXb3J0kIZCmz7cBHJvUV5eR13UWpRLXuT0uiT05aYrWNTf58SHEW0CtWakv +XzoAKUMncQPkvTAyVab+hA4LmzgZLEN8rEO/dTHlIxxFVbdpCJG1z9fVsV7un5Tk +1nq5GMO41lJjHBC6iy9tXcwFOPRWBW3vnuzoYTYMFEuFFFoMg08iXFnLjIpx2vrF +EIRYzwfu45DC9fkpx1ojcflZtGQriLCnNseaIGHr+k61rmsb5OPs4tk8QUmoIKRU +9ZKNu8BVIASm2LAXFszj0Mi0PeXZhMbT9m5teMl5Q+h6N/9cNUm/ocU= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEQjCCA6ugAwIBAgIEQoclDjANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u +ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc +KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u +ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEy +MjIxNTI3MjdaFw0xNDA3MjIxNTU3MjdaMGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNV +BAMTIkRpZ2lDZXJ0IEhpZ2ggQXNzdXJhbmNlIEVWIFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGzOVz5vvUu+UtLTKm3+WBP8nNJUm2cSrD +1ZQ0Z6IKHLBfaaZAscS3so/QmKSpQVk609yU1jzbdDikSsxNJYL3SqVTEjju80lt +cZF+Y7arpl/DpIT4T2JRvvjF7Ns4kuMG5QiRDMQoQVX7y1qJFX5x6DW/TXIJPb46 +OFBbdzEbjbPHJEWap6xtABRaBLe6E+tRCphBQSJOZWGHgUFQpnlcid4ZSlfVLuZd +HFMsfpjNGgYWpGhz0DQEE1yhcdNafFXbXmThN4cwVgTlEbQpgBLxeTmIogIRfCdm +t4i3ePLKCqg4qwpkwr9mXZWEwaElHoddGlALIBLMQbtuC1E4uEvLAgMBAAGjggET +MIIBDzASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggr +BgEFBQcDAgYIKwYBBQUHAwQwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdo +dHRwOi8vb2NzcC5lbnRydXN0Lm5ldDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8v +Y3JsLmVudHJ1c3QubmV0L3NlcnZlcjEuY3JsMB0GA1UdDgQWBBSxPsNpA/i/RwHU +mCYaCALvY2QrwzALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7 +UISX8+1i0BowGQYJKoZIhvZ9B0EABAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEF +BQADgYEAUuVY7HCc/9EvhaYzC1rAIo348LtGIiMduEl5Xa24G8tmJnDioD2GU06r +1kjLX/ktCdpdBgXadbjtdrZXTP59uN0AXlsdaTiFufsqVLPvkp5yMnqnuI3E2o6p +NpAkoQSbB6kUCNnXcW26valgOjDLZFOnr241QiwdBAJAAE/rRa8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u +ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc +KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u +ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 +MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE +ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j +b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg +U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ +I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 +wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC +AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb +oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 +BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p +dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk +MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp +b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 +MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi +E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa +MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI +hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN +95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd +2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= +-----END CERTIFICATE----- diff --git a/plugins/FacebookSSO/facebookadminpanel.php b/plugins/FacebookSSO/facebookadminpanel.php new file mode 100644 index 0000000000..b76b035cd0 --- /dev/null +++ b/plugins/FacebookSSO/facebookadminpanel.php @@ -0,0 +1,212 @@ +. + * + * @category Settings + * @package StatusNet + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Administer global Facebook integration settings + * + * @category Admin + * @package StatusNet + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ +class FacebookadminpanelAction extends AdminPanelAction +{ + /** + * Returns the page title + * + * @return string page title + */ + function title() + { + return _m('Facebook'); + } + + /** + * Instructions for using this form. + * + * @return string instructions + */ + function getInstructions() + { + return _m('Facebook integration settings'); + } + + /** + * Show the Facebook admin panel form + * + * @return void + */ + function showForm() + { + $form = new FacebookAdminPanelForm($this); + $form->show(); + return; + } + + /** + * Save settings from the form + * + * @return void + */ + function saveSettings() + { + static $settings = array( + 'facebook' => array('appid', 'secret'), + ); + + $values = array(); + + foreach ($settings as $section => $parts) { + foreach ($parts as $setting) { + $values[$section][$setting] + = $this->trimmed($setting); + } + } + + // This throws an exception on validation errors + $this->validate($values); + + // assert(all values are valid); + + $config = new Config(); + + $config->query('BEGIN'); + + foreach ($settings as $section => $parts) { + foreach ($parts as $setting) { + Config::save($section, $setting, $values[$section][$setting]); + } + } + + $config->query('COMMIT'); + + return; + } + + function validate(&$values) + { + // appId and secret (can't be too long) + + if (mb_strlen($values['facebook']['appid']) > 255) { + $this->clientError( + _m("Invalid Facebook ID. Max length is 255 characters.") + ); + } + + if (mb_strlen($values['facebook']['secret']) > 255) { + $this->clientError( + _m("Invalid Facebook secret. Max length is 255 characters.") + ); + } + } +} + +class FacebookAdminPanelForm extends AdminForm +{ + /** + * ID of the form + * + * @return int ID of the form + */ + function id() + { + return 'facebookadminpanel'; + } + + /** + * class of the form + * + * @return string class of the form + */ + function formClass() + { + return 'form_settings'; + } + + /** + * Action of the form + * + * @return string URL of the action + */ + function action() + { + return common_local_url('facebookadminpanel'); + } + + /** + * Data elements of the form + * + * @return void + */ + function formData() + { + $this->out->elementStart( + 'fieldset', + array('id' => 'settings_facebook-application') + ); + $this->out->element('legend', null, _m('Facebook application settings')); + $this->out->elementStart('ul', 'form_data'); + + $this->li(); + $this->input( + 'appid', + _m('Application ID'), + _m('ID of your Facebook application'), + 'facebook' + ); + $this->unli(); + + $this->li(); + $this->input( + 'secret', + _m('Secret'), + _m('Application secret'), + 'facebook' + ); + $this->unli(); + + $this->out->elementEnd('ul'); + $this->out->elementEnd('fieldset'); + } + + /** + * Action elements + * + * @return void + */ + function formActions() + { + $this->out->submit('submit', _m('Save'), 'submit', null, _m('Save Facebook settings')); + } +} diff --git a/plugins/FacebookSSO/facebooklogin.php b/plugins/FacebookSSO/facebooklogin.php new file mode 100644 index 0000000000..9ea687d5d9 --- /dev/null +++ b/plugins/FacebookSSO/facebooklogin.php @@ -0,0 +1,82 @@ +. + * + * @category Pugin + * @package StatusNet + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class FacebookloginAction extends Action +{ + function handle($args) + { + parent::handle($args); + + if (common_is_real_login()) { + $this->clientError(_m('Already logged in.')); + } + + $this->showPage(); + } + + function getInstructions() + { + // TRANS: Instructions. + return _m('Login with your Facebook Account'); + } + + function showPageNotice() + { + $instr = $this->getInstructions(); + $output = common_markup_to_html($instr); + $this->elementStart('div', 'instructions'); + $this->raw($output); + $this->elementEnd('div'); + } + + function title() + { + // TRANS: Page title. + return _m('Login with Facebook'); + } + + function showContent() { + + $this->elementStart('fieldset'); + $this->element('fb:login-button'); + $this->elementEnd('fieldset'); + } + + function showLocalNav() + { + $nav = new LoginGroupNav($this); + $nav->show(); + } +} + From b54afa0cbc305df4177bb4b081bbc00b002409fd Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 1 Nov 2010 23:50:45 +0000 Subject: [PATCH 011/220] Facebook SSO - add ability to register a new user or connect to an existing local account --- plugins/FacebookSSO/facebookregister.php | 548 +++++++++++++++++++++++ 1 file changed, 548 insertions(+) create mode 100644 plugins/FacebookSSO/facebookregister.php diff --git a/plugins/FacebookSSO/facebookregister.php b/plugins/FacebookSSO/facebookregister.php new file mode 100644 index 0000000000..e21deff880 --- /dev/null +++ b/plugins/FacebookSSO/facebookregister.php @@ -0,0 +1,548 @@ +. + * + * @category Plugin + * @package StatusNet + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class FacebookregisterAction extends Action +{ + + private $facebook = null; // Facebook client + private $fbuid = null; // Facebook user ID + private $fbuser = null; // Facebook user object (JSON) + + function prepare($args) { + + parent::prepare($args); + + $this->facebook = new Facebook( + array( + 'appId' => common_config('facebook', 'appid'), + 'secret' => common_config('facebook', 'secret'), + 'cookie' => true, + ) + ); + + // Check for a Facebook user session + + $session = $this->facebook->getSession(); + $me = null; + + if ($session) { + try { + $this->fbuid = $this->facebook->getUser(); + $this->fbuser = $this->facebook->api('/me'); + } catch (FacebookApiException $e) { + common_log(LOG_ERROR, $e, __FILE__); + } + } + + if (!empty($this->fbuser)) { + + // OKAY, all is well... proceed to register + + common_debug("Found a valid Facebook user.", __FILE__); + } else { + + // This shouldn't happen in the regular course of things + + list($proxy, $ip) = common_client_ip(); + + common_log( + LOG_WARNING, + sprintf( + 'Failed Facebook authentication attempt, proxy = %s, ip = %s.', + $proxy, + $ip + ), + __FILE__ + ); + + $this->clientError( + _m('You must be logged into Facebook to register a local account using Facebook.') + ); + } + + return true; + } + + function handle($args) + { + parent::handle($args); + + if (common_is_real_login()) { + + // User is already logged in, are her accounts already linked? + + $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_SERVICE); + + if (!empty($flink)) { + + // User already has a linked Facebook account and shouldn't be here! + + common_debug( + sprintf( + 'There\'s already a local user %d linked with Facebook user %s.', + $flink->user_id, + $this->fbuid + ) + ); + + $this->clientError( + _m('There is already a local account linked with that Facebook account.') + ); + + } else { + + // Possibly reconnect an existing account + + $this->connectUser(); + } + + } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { + + $token = $this->trimmed('token'); + + if (!$token || $token != common_session_token()) { + $this->showForm( + _m('There was a problem with your session token. Try again, please.')); + return; + } + + if ($this->arg('create')) { + + if (!$this->boolean('license')) { + $this->showForm( + _m('You can\'t register if you don\'t agree to the license.'), + $this->trimmed('newname') + ); + return; + } + + // We has a valid Facebook session and the Facebook user has + // agreed to the SN license, so create a new user + $this->createNewUser(); + + } else if ($this->arg('connect')) { + + $this->connectNewUser(); + + } else { + + $this->showForm( + _m('An unknown error has occured.'), + $this->trimmed('newname') + ); + } + } else { + + $this->tryLogin(); + } + } + + function showPageNotice() + { + if ($this->error) { + + $this->element('div', array('class' => 'error'), $this->error); + + } else { + + $this->element( + 'div', 'instructions', + // TRANS: %s is the site name. + sprintf( + _m('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new local account, or connect with an existing local account.'), + common_config('site', 'name') + ) + ); + } + } + + function title() + { + // TRANS: Page title. + return _m('Facebook Setup'); + } + + function showForm($error=null, $username=null) + { + $this->error = $error; + $this->username = $username; + + $this->showPage(); + } + + function showPage() + { + parent::showPage(); + } + + /** + * @fixme much of this duplicates core code, which is very fragile. + * Should probably be replaced with an extensible mini version of + * the core registration form. + */ + function showContent() + { + if (!empty($this->message_text)) { + $this->element('p', null, $this->message); + return; + } + + $this->elementStart('form', array('method' => 'post', + 'id' => 'form_settings_facebook_connect', + 'class' => 'form_settings', + 'action' => common_local_url('facebookregister'))); + $this->elementStart('fieldset', array('id' => 'settings_facebook_connect_options')); + // TRANS: Legend. + $this->element('legend', null, _m('Connection options')); + $this->elementStart('ul', 'form_data'); + $this->elementStart('li'); + $this->element('input', array('type' => 'checkbox', + 'id' => 'license', + 'class' => 'checkbox', + 'name' => 'license', + 'value' => 'true')); + $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license')); + // TRANS: %s is the name of the license used by the user for their status updates. + $message = _m('My text and files are available under %s ' . + 'except this private data: password, ' . + 'email address, IM address, and phone number.'); + $link = '' . + htmlspecialchars(common_config('license', 'title')) . + ''; + $this->raw(sprintf(htmlspecialchars($message), $link)); + $this->elementEnd('label'); + $this->elementEnd('li'); + $this->elementEnd('ul'); + + $this->elementStart('fieldset'); + $this->hidden('token', common_session_token()); + $this->element('legend', null, + // TRANS: Legend. + _m('Create new account')); + $this->element('p', null, + _m('Create a new user with this nickname.')); + $this->elementStart('ul', 'form_data'); + $this->elementStart('li'); + // TRANS: Field label. + $this->input('newname', _m('New nickname'), + ($this->username) ? $this->username : '', + _m('1-64 lowercase letters or numbers, no punctuation or spaces')); + $this->elementEnd('li'); + $this->elementEnd('ul'); + // TRANS: Submit button. + $this->submit('create', _m('BUTTON','Create')); + $this->elementEnd('fieldset'); + + $this->elementStart('fieldset'); + // TRANS: Legend. + $this->element('legend', null, + _m('Connect existing account')); + $this->element('p', null, + _m('If you already have an account, login with your username and password to connect it to your Facebook.')); + $this->elementStart('ul', 'form_data'); + $this->elementStart('li'); + // TRANS: Field label. + $this->input('nickname', _m('Existing nickname')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->password('password', _m('Password')); + $this->elementEnd('li'); + $this->elementEnd('ul'); + // TRANS: Submit button. + $this->submit('connect', _m('BUTTON','Connect')); + $this->elementEnd('fieldset'); + + $this->elementEnd('fieldset'); + $this->elementEnd('form'); + } + + function message($msg) + { + $this->message_text = $msg; + $this->showPage(); + } + + function createNewUser() + { + if (common_config('site', 'closed')) { + // TRANS: Client error trying to register with registrations not allowed. + $this->clientError(_m('Registration not allowed.')); + return; + } + + $invite = null; + + if (common_config('site', 'inviteonly')) { + $code = $_SESSION['invitecode']; + if (empty($code)) { + // TRANS: Client error trying to register with registrations 'invite only'. + $this->clientError(_m('Registration not allowed.')); + return; + } + + $invite = Invitation::staticGet($code); + + if (empty($invite)) { + // TRANS: Client error trying to register with an invalid invitation code. + $this->clientError(_m('Not a valid invitation code.')); + return; + } + } + + $nickname = $this->trimmed('newname'); + + if (!Validate::string($nickname, array('min_length' => 1, + 'max_length' => 64, + 'format' => NICKNAME_FMT))) { + $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.')); + return; + } + + if (!User::allowed_nickname($nickname)) { + $this->showForm(_m('Nickname not allowed.')); + return; + } + + if (User::staticGet('nickname', $nickname)) { + $this->showForm(_m('Nickname already in use. Try another one.')); + return; + } + + $args = array( + 'nickname' => $nickname, + 'fullname' => $this->fbuser['firstname'] . ' ' . $this->fbuser['lastname'], + // XXX: Figure out how to get email + 'homepage' => $this->fbuser['link'], + 'bio' => $this->fbuser['about'], + 'location' => $this->fbuser['location']['name'] + ); + + if (!empty($invite)) { + $args['code'] = $invite->code; + } + + $user = User::register($args); + + $result = $this->flinkUser($user->id, $this->fbuid); + + if (!$result) { + $this->serverError(_m('Error connecting user to Facebook.')); + return; + } + + common_set_user($user); + common_real_login(true); + + common_log( + LOG_INFO, + sprintf( + 'Registered new user %d from Facebook user %s', + $user->id, + $this->fbuid + ), + __FILE__ + ); + + common_redirect( + common_local_url( + 'showstream', + array('nickname' => $user->nickname) + ), + 303 + ); + } + + function connectNewUser() + { + $nickname = $this->trimmed('nickname'); + $password = $this->trimmed('password'); + + if (!common_check_user($nickname, $password)) { + $this->showForm(_m('Invalid username or password.')); + return; + } + + $user = User::staticGet('nickname', $nickname); + + if (!empty($user)) { + common_debug('Facebook Connect Plugin - ' . + "Legit user to connect to Facebook: $nickname"); + } + + $result = $this->flinkUser($user->id, $this->fbuid); + + if (!$result) { + $this->serverError(_m('Error connecting user to Facebook.')); + return; + } + + common_debug('Facebook Connnect Plugin - ' . + "Connected Facebook user $this->fbuid to local user $user->id"); + + common_set_user($user); + common_real_login(true); + + $this->goHome($user->nickname); + } + + function connectUser() + { + $user = common_current_user(); + + $result = $this->flinkUser($user->id, $this->fbuid); + + if (empty($result)) { + $this->serverError(_m('Error connecting user to Facebook.')); + return; + } + + common_debug('Facebook Connect Plugin - ' . + "Connected Facebook user $this->fbuid to local user $user->id"); + + // Return to Facebook connection settings tab + common_redirect(common_local_url('FBConnectSettings'), 303); + } + + function tryLogin() + { + common_debug('Facebook Connect Plugin - ' . + "Trying login for Facebook user $this->fbuid."); + + $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_CONNECT_SERVICE); + + if (!empty($flink)) { + $user = $flink->getUser(); + + if (!empty($user)) { + + common_debug('Facebook Connect Plugin - ' . + "Logged in Facebook user $flink->foreign_id as user $user->id ($user->nickname)"); + + common_set_user($user); + common_real_login(true); + $this->goHome($user->nickname); + } + + } else { + + common_debug('Facebook Connect Plugin - ' . + "No flink found for fbuid: $this->fbuid - new user"); + + $this->showForm(null, $this->bestNewNickname()); + } + } + + function goHome($nickname) + { + $url = common_get_returnto(); + if ($url) { + // We don't have to return to it again + common_set_returnto(null); + } else { + $url = common_local_url('all', + array('nickname' => + $nickname)); + } + + common_redirect($url, 303); + } + + function flinkUser($user_id, $fbuid) + { + $flink = new Foreign_link(); + $flink->user_id = $user_id; + $flink->foreign_id = $fbuid; + $flink->service = FACEBOOK_SERVICE; + + // Pull the access token from the Facebook cookies + $flink->credentials = $this->facebook->getAccessToken(); + + $flink->created = common_sql_now(); + + $flink_id = $flink->insert(); + + return $flink_id; + } + + function bestNewNickname() + { + if (!empty($this->fbuser['name'])) { + $nickname = $this->nicknamize($this->fbuser['name']); + if ($this->isNewNickname($nickname)) { + return $nickname; + } + } + + // Try the full name + + $fullname = trim($this->fbuser['firstname'] . + ' ' . $this->fbuser['lastname']); + + if (!empty($fullname)) { + $fullname = $this->nicknamize($fullname); + if ($this->isNewNickname($fullname)) { + return $fullname; + } + } + + return null; + } + + /** + * Given a string, try to make it work as a nickname + */ + function nicknamize($str) + { + $str = preg_replace('/\W/', '', $str); + return strtolower($str); + } + + function isNewNickname($str) + { + if (!Validate::string($str, array('min_length' => 1, + 'max_length' => 64, + 'format' => NICKNAME_FMT))) { + return false; + } + if (!User::allowed_nickname($str)) { + return false; + } + if (User::staticGet('nickname', $str)) { + return false; + } + return true; + } + +} From 5ccc548bbcdd62e1b6aba3cd79372b4ace12d16b Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 2 Nov 2010 01:41:31 +0000 Subject: [PATCH 012/220] Facebook SSO - new settings page --- plugins/FacebookSSO/FacebookSSOPlugin.php | 44 +++- plugins/FacebookSSO/facebooklogin.php | 91 +++++++- plugins/FacebookSSO/facebooksettings.php | 264 ++++++++++++++++++++++ 3 files changed, 396 insertions(+), 3 deletions(-) create mode 100644 plugins/FacebookSSO/facebooksettings.php diff --git a/plugins/FacebookSSO/FacebookSSOPlugin.php b/plugins/FacebookSSO/FacebookSSOPlugin.php index f4790f7056..fca0275af0 100644 --- a/plugins/FacebookSSO/FacebookSSOPlugin.php +++ b/plugins/FacebookSSO/FacebookSSOPlugin.php @@ -32,6 +32,8 @@ if (!defined('STATUSNET')) { exit(1); } +define("FACEBOOK_SERVICE", 2); + /** * Main class for Facebook single-sign-on plugin * @@ -136,7 +138,9 @@ class FacebookSSOPlugin extends Plugin include_once $dir . '/extlib/facebook.php'; return false; case 'FacebookloginAction': + case 'FacebookregisterAction': case 'FacebookadminpanelAction': + case 'FacebooksettingsAction': include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; default: @@ -165,7 +169,21 @@ class FacebookSSOPlugin extends Plugin // Only add these routes if an application has been setup on // Facebook for the plugin to use. if ($this->hasApplication()) { - $m->connect('main/facebooklogin', array('action' => 'facebooklogin')); + + $m->connect( + 'main/facebooklogin', + array('action' => 'facebooklogin') + ); + $m->connect( + 'main/facebookregister', + array('action' => 'facebookregister') + ); + + $m->connect( + 'settings/facebook', + array('action' => 'facebooksettings') + ); + } return true; @@ -224,6 +242,30 @@ class FacebookSSOPlugin extends Plugin return true; } + /* + * Add a tab for managing Facebook Connect settings + * + * @param Action &action the current action + * + * @return void + */ + function onEndConnectSettingsNav(&$action) + { + if ($this->hasApplication()) { + $action_name = $action->trimmed('action'); + + $action->menuItem(common_local_url('facebooksettings'), + // @todo CHECKME: Should be 'Facebook Connect'? + // TRANS: Menu item tab. + _m('MENU','Facebook'), + // TRANS: Tooltip for menu item "Facebook". + _m('Facebook Connect Settings'), + $action_name === 'facebooksettings'); + } + + return true; + } + /* * Is there a Facebook application for the plugin to use? */ diff --git a/plugins/FacebookSSO/facebooklogin.php b/plugins/FacebookSSO/facebooklogin.php index 9ea687d5d9..fce481fc03 100644 --- a/plugins/FacebookSSO/facebooklogin.php +++ b/plugins/FacebookSSO/facebooklogin.php @@ -39,12 +39,91 @@ class FacebookloginAction extends Action parent::handle($args); if (common_is_real_login()) { + $this->clientError(_m('Already logged in.')); + + } else { + + $facebook = new Facebook( + array( + 'appId' => common_config('facebook', 'appid'), + 'secret' => common_config('facebook', 'secret'), + 'cookie' => true, + ) + ); + + $session = $facebook->getSession(); + $me = null; + + if ($session) { + try { + $fbuid = $facebook->getUser(); + $fbuser = $facebook->api('/me'); + } catch (FacebookApiException $e) { + common_log(LOG_ERROR, $e); + } + } + + if (!empty($fbuser)) { + common_debug("Found a valid Facebook user", __FILE__); + + // Check to see if we have a foreign link already + $flink = Foreign_link::getByForeignId($fbuid, FACEBOOK_SERVICE); + + if (empty($flink)) { + + // See if the user would like to register a new local + // account + common_redirect( + common_local_url('facebookregister'), + 303 + ); + + } else { + + // Log our user in! + $user = $flink->getUser(); + + if (!empty($user)) { + + common_debug( + sprintf( + 'Logged in Facebook user $s as user %d (%s)', + $this->fbuid, + $user->id, + $user->nickname + ), + __FILE__ + ); + + common_set_user($user); + common_real_login(true); + $this->goHome($user->nickname); + } + } + + } } - + $this->showPage(); } + function goHome($nickname) + { + $url = common_get_returnto(); + if ($url) { + // We don't have to return to it again + common_set_returnto(null); + } else { + $url = common_local_url( + 'all', + array('nickname' => $nickname) + ); + } + + common_redirect($url, 303); + } + function getInstructions() { // TRANS: Instructions. @@ -69,7 +148,15 @@ class FacebookloginAction extends Action function showContent() { $this->elementStart('fieldset'); - $this->element('fb:login-button'); + + $attrs = array( + 'show-faces' => 'true', + 'width' => '100', + 'max-rows' => '2', + 'perms' => 'user_location,user_website,offline_access,publish_stream' + ); + + $this->element('fb:login-button', $attrs); $this->elementEnd('fieldset'); } diff --git a/plugins/FacebookSSO/facebooksettings.php b/plugins/FacebookSSO/facebooksettings.php new file mode 100644 index 0000000000..e511810369 --- /dev/null +++ b/plugins/FacebookSSO/facebooksettings.php @@ -0,0 +1,264 @@ +. + * + * @category Settings + * @package StatusNet + * @author Zach Copley + * @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); +} + +/** + * Settings for Facebook + * + * @category Settings + * @package StatusNet + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + * + * @see SettingsAction + */ + +class FacebooksettingsAction extends ConnectSettingsAction +{ + private $facebook; + private $flink; + private $user; + + function prepare($args) + { + parent::prepare($args); + + $this->facebook = new Facebook( + array( + 'appId' => common_config('facebook', 'appid'), + 'secret' => common_config('facebook', 'secret'), + 'cookie' => true, + ) + ); + + $this->user = common_current_user(); + $this->flink = Foreign_link::getByUserID($this->user->id, FACEBOOK_SERVICE); + + return true; + } + + function handlePost($args) + { + // CSRF protection + + $token = $this->trimmed('token'); + if (!$token || $token != common_session_token()) { + $this->showForm( + _m('There was a problem with your session token. Try again, please.') + ); + return; + } + + if ($this->arg('save')) { + $this->saveSettings(); + } else if ($this->arg('disconnect')) { + $this->disconnect(); + } + } + + function title() + { + // TRANS: Page title for Facebook settings. + return _m('Facebook settings'); + } + + /** + * Instructions for use + * + * @return instructions for use + */ + + function getInstructions() + { + return _('Facebook settings'); + } + + function showContent() + { + + if (empty($this->flink)) { + + $this->element( + 'p', + 'instructions', + _m('There is no Facebook user connected to this account.') + ); + + $attrs = array( + 'show-faces' => 'true', + 'perms' => 'user_location,user_website,offline_access,publish_stream' + ); + + $this->element('fb:login-button', $attrs); + + + } else { + + $this->elementStart( + 'form', + array( + 'method' => 'post', + 'id' => 'form_settings_facebook', + 'class' => 'form_settings', + 'action' => common_local_url('facebooksettings') + ) + ); + + $this->hidden('token', common_session_token()); + + $this->element('p', 'form_note', _m('Connected Facebook user')); + + $this->elementStart('p', array('class' => 'facebook-user-display')); + + $this->elementStart( + 'fb:profile-pic', + array('uid' => $this->flink->foreign_id, + 'size' => 'small', + 'linked' => 'true', + 'facebook-logo' => 'true') + ); + $this->elementEnd('fb:profile-pic'); + + $this->elementStart( + 'fb:name', + array('uid' => $this->flink->foreign_id, 'useyou' => 'false') + ); + + $this->elementEnd('fb:name'); + + $this->elementEnd('p'); + + $this->elementStart('ul', 'form_data'); + + $this->elementStart('li'); + + $this->checkbox( + 'noticesync', + _m('Publish my notices to Facebook.'), + ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND) : true + ); + + $this->elementEnd('li'); + + $this->elementStart('li'); + + $this->checkbox( + 'replysync', + _m('Send "@" replies to Facebook.'), + ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true + ); + + $this->elementEnd('li'); + + $this->elementStart('li'); + + // TRANS: Submit button to save synchronisation settings. + $this->submit('save', _m('BUTTON','Save')); + + $this->elementEnd('li'); + + $this->elementEnd('ul'); + + $this->elementStart('fieldset'); + + // TRANS: Legend. + $this->element('legend', null, _m('Disconnect my account from Facebook')); + + if (empty($this->user->password)) { + + $this->elementStart('p', array('class' => 'form_guide')); + // @todo FIXME: Bad i18n. Patchwork message in three parts. + // TRANS: Followed by a link containing text "set a password". + $this->text(_m('Disconnecting your Faceboook ' . + 'would make it impossible to log in! Please ')); + $this->element('a', + array('href' => common_local_url('passwordsettings')), + // TRANS: Preceded by "Please " and followed by " first." + _m('set a password')); + // TRANS: Preceded by "Please set a password". + $this->text(_m(' first.')); + $this->elementEnd('p'); + } else { + + $note = 'Keep your %s account but disconnect from Facebook. ' . + 'You\'ll use your %s password to log in.'; + + $site = common_config('site', 'name'); + + $this->element('p', 'instructions', + sprintf($note, $site, $site)); + + // TRANS: Submit button. + $this->submit('disconnect', _m('BUTTON','Disconnect')); + } + + $this->elementEnd('fieldset'); + + $this->elementEnd('form'); + } + } + + function saveSettings() + { + + $noticesync = $this->boolean('noticesync'); + $replysync = $this->boolean('replysync'); + + $original = clone($this->flink); + $this->flink->set_flags($noticesync, false, $replysync, false); + $result = $this->flink->update($original); + + if ($result === false) { + $this->showForm(_m('There was a problem saving your sync preferences.')); + } else { + // TRANS: Confirmation that synchronisation settings have been saved into the system. + $this->showForm(_m('Sync preferences saved.'), true); + } + } + + function disconnect() + { + $flink = Foreign_link::getByUserID($this->user->id, FACEBOOK_SERVICE); + $result = $flink->delete(); + + if ($result === false) { + common_log_db_error($user, 'DELETE', __FILE__); + $this->serverError(_m('Couldn\'t delete link to Facebook.')); + return; + } + + $this->showForm(_m('You have disconnected from Facebook.'), true); + + } +} + From 764a297383ad8160b3e4d645d8953ef46a541b09 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 2 Nov 2010 23:13:20 +0000 Subject: [PATCH 013/220] Output filename in log msg if one is supplied --- lib/util.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/util.php b/lib/util.php index d50fa20814..47e52c9152 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1499,6 +1499,7 @@ function common_request_id() function common_log($priority, $msg, $filename=null) { if(Event::handle('StartLog', array(&$priority, &$msg, &$filename))){ + $msg = (empty($filename)) ? $msg : basename($filename) . ' - ' . $msg; $msg = '[' . common_request_id() . '] ' . $msg; $logfile = common_config('site', 'logfile'); if ($logfile) { From 5ea04611450645e3b6b8c36627243e699be5f367 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 2 Nov 2010 23:14:45 +0000 Subject: [PATCH 014/220] Facebook SSO - Log the user out of Facebook when s/he logs out of StatusNet --- plugins/FacebookSSO/FacebookSSOPlugin.php | 89 ++++++++++++++++++----- plugins/FacebookSSO/facebooklogin.php | 18 +++-- 2 files changed, 81 insertions(+), 26 deletions(-) diff --git a/plugins/FacebookSSO/FacebookSSOPlugin.php b/plugins/FacebookSSO/FacebookSSOPlugin.php index fca0275af0..da109e9c47 100644 --- a/plugins/FacebookSSO/FacebookSSOPlugin.php +++ b/plugins/FacebookSSO/FacebookSSOPlugin.php @@ -68,7 +68,6 @@ class FacebookSSOPlugin extends Plugin */ function initialize() { - common_debug("XXXXXXXXXXXX " . $this->appId); // Check defaults and configuration for application ID and secret if (empty($this->appId)) { $this->appId = common_config('facebook', 'appid'); @@ -79,7 +78,6 @@ class FacebookSSOPlugin extends Plugin } if (empty($this->facebook)) { - common_debug('instantiating facebook obj'); $this->facebook = new Facebook( array( 'appId' => $this->appId, @@ -89,8 +87,6 @@ class FacebookSSOPlugin extends Plugin ); } - common_debug("FACEBOOK = " . var_export($this->facebook, true)); - return true; } @@ -243,7 +239,7 @@ class FacebookSSOPlugin extends Plugin } /* - * Add a tab for managing Facebook Connect settings + * Add a tab for user-level Facebook settings * * @param Action &action the current action * @@ -254,13 +250,14 @@ class FacebookSSOPlugin extends Plugin if ($this->hasApplication()) { $action_name = $action->trimmed('action'); - $action->menuItem(common_local_url('facebooksettings'), - // @todo CHECKME: Should be 'Facebook Connect'? - // TRANS: Menu item tab. - _m('MENU','Facebook'), - // TRANS: Tooltip for menu item "Facebook". - _m('Facebook Connect Settings'), - $action_name === 'facebooksettings'); + $action->menuItem( + common_local_url('facebooksettings'), + // TRANS: Menu item tab. + _m('MENU','Facebook'), + // TRANS: Tooltip for menu item "Facebook". + _m('Facebook settings'), + $action_name === 'facebooksettings' + ); } return true; @@ -325,19 +322,75 @@ ENDOFSCRIPT; return true; } + /* + * Log the user out of Facebook, per the Facebook authentication guide + * + * @param Action action the action + */ + function onEndLogout($action) + { + $session = $this->facebook->getSession(); + $fbuser = null; + $fbuid = null; + + if ($session) { + try { + $fbuid = $this->facebook->getUser(); + $fbuser = $this->facebook->api('/me'); + } catch (FacebookApiException $e) { + common_log(LOG_ERROR, $e, __FILE__); + } + } + + if (!empty($fbuser)) { + + $logoutUrl = $this->facebook->getLogoutUrl( + array('next' => common_local_url('public')) + ); + + common_log( + LOG_INFO, + sprintf( + "Logging user out of Facebook (fbuid = %s)", + $fbuid + ), + __FILE__ + ); + + common_redirect($logoutUrl, 303); + } + } + + /* + * Add fbml namespace so Facebook's JavaScript SDK can parse and render + * XFBML tags (e.g: ) + * + * @param Action $action current action + * @param array $attrs array of attributes for the HTML tag + * + * @return nothing + */ function onStartHtmlElement($action, $attrs) { $attrs = array_merge($attrs, array('xmlns:fb' => 'http://www.facebook.com/2008/fbml')); return true; } + /* + * Add version info for this plugin + * + * @param array &$versions plugin version descriptions + */ function onPluginVersion(&$versions) { - $versions[] = array('name' => 'Facebook Single-Sign-On', - 'version' => STATUSNET_VERSION, - 'author' => 'Zach Copley', - 'homepage' => 'http://status.net/wiki/Plugin:FacebookSSO', - 'rawdescription' => - _m('A plugin for single-sign-on with Facebook.')); + $versions[] = array( + 'name' => 'Facebook Single-Sign-On', + 'version' => STATUSNET_VERSION, + 'author' => 'Zach Copley', + 'homepage' => 'http://status.net/wiki/Plugin:FacebookSSO', + 'rawdescription' => + _m('A plugin for single-sign-on with Facebook.') + ); + return true; } } diff --git a/plugins/FacebookSSO/facebooklogin.php b/plugins/FacebookSSO/facebooklogin.php index fce481fc03..bb30be1af7 100644 --- a/plugins/FacebookSSO/facebooklogin.php +++ b/plugins/FacebookSSO/facebooklogin.php @@ -20,7 +20,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * - * @category Pugin + * @category Plugin * @package StatusNet * @author Zach Copley * @copyright 2010 StatusNet, Inc. @@ -34,6 +34,7 @@ if (!defined('STATUSNET')) { class FacebookloginAction extends Action { + function handle($args) { parent::handle($args); @@ -53,7 +54,7 @@ class FacebookloginAction extends Action ); $session = $facebook->getSession(); - $me = null; + $fbuser = null; if ($session) { try { @@ -86,10 +87,11 @@ class FacebookloginAction extends Action if (!empty($user)) { - common_debug( + common_log( + LOG_INFO, sprintf( - 'Logged in Facebook user $s as user %d (%s)', - $this->fbuid, + 'Logged in Facebook user %s as user %s (%s)', + $fbuid, $user->id, $user->nickname ), @@ -150,9 +152,9 @@ class FacebookloginAction extends Action $this->elementStart('fieldset'); $attrs = array( - 'show-faces' => 'true', - 'width' => '100', - 'max-rows' => '2', + //'show-faces' => 'true', + //'max-rows' => '4', + //'width' => '600', 'perms' => 'user_location,user_website,offline_access,publish_stream' ); From 2692b5fc8400d04f25823e5bc00e3d4f98100a3b Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 3 Nov 2010 17:05:26 -0700 Subject: [PATCH 015/220] Fix for ticket #2853: fix for some unknown MIME type error cases by adjusting the PEAR error handling temporarily around MIME_Type_Extension usage. --- classes/File.php | 13 ++++++++++--- lib/mediafile.php | 7 +++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/classes/File.php b/classes/File.php index da029e39b6..c7c7658020 100644 --- a/classes/File.php +++ b/classes/File.php @@ -217,12 +217,19 @@ class File extends Memcached_DataObject static function filename($profile, $basename, $mimetype) { require_once 'MIME/Type/Extension.php'; + + // We have to temporarily disable auto handling of PEAR errors... + PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN); + $mte = new MIME_Type_Extension(); - try { - $ext = $mte->getExtension($mimetype); - } catch ( Exception $e) { + $ext = $mte->getExtension($mimetype); + if (PEAR::isError($ext)) { $ext = strtolower(preg_replace('/\W/', '', $mimetype)); } + + // Restore error handling. + PEAR::staticPopErrorHandling(); + $nickname = $profile->nickname; $datestamp = strftime('%Y%m%dT%H%M%S', time()); $random = strtolower(common_confirmation_code(32)); diff --git a/lib/mediafile.php b/lib/mediafile.php index 23338cc0e1..aad3575d72 100644 --- a/lib/mediafile.php +++ b/lib/mediafile.php @@ -278,6 +278,9 @@ class MediaFile static function getUploadedFileType($f, $originalFilename=false) { require_once 'MIME/Type.php'; require_once 'MIME/Type/Extension.php'; + + // We have to disable auto handling of PEAR errors + PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN); $mte = new MIME_Type_Extension(); $cmd = &PEAR::getStaticProperty('MIME_Type', 'fileCmd'); @@ -330,6 +333,8 @@ class MediaFile } } if ($supported === true || in_array($filetype, $supported)) { + // Restore PEAR error handlers for our DB code... + PEAR::staticPopErrorHandling(); return $filetype; } $media = MIME_Type::getMedia($filetype); @@ -344,6 +349,8 @@ class MediaFile // TRANS: %s is the file type that was denied. $hint = sprintf(_('"%s" is not a supported file type on this server.'), $filetype); } + // Restore PEAR error handlers for our DB code... + PEAR::staticPopErrorHandling(); throw new ClientException($hint); } From 4f63e3be7dc12383d4e66bdd4db25dd6fea9abba Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 3 Nov 2010 17:25:29 -0700 Subject: [PATCH 016/220] Fix for ticket #2804: bad non-cache fallback code for dupe checks of prolific posters The old code attempted to compare the value of the notice.created field against now() directly, which tends to explode in our current systems. now() comes up as the server/connection local timezone generally, while the created field is currently set as hardcoded UTC from the web servers. This would lead to breakage when we got a difference in seconds that's several hours off in either direction (depending on the local timezone). New code calculates a threshold by subtracting the number of seconds from the current UNIX timestamp and passing that in in correct format for a simple comparison. As a bonus, this should also be more efficient, as it should be able to follow the index on profile_id and created. --- classes/Notice.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index 60989f9bac..792d6e1316 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -524,10 +524,8 @@ class Notice extends Memcached_DataObject $notice = new Notice(); $notice->profile_id = $profile_id; $notice->content = $content; - if (common_config('db','type') == 'pgsql') - $notice->whereAdd('extract(epoch from now() - created) < ' . common_config('site', 'dupelimit')); - else - $notice->whereAdd('now() - created < ' . common_config('site', 'dupelimit')); + $threshold = common_sql_date(time() - common_config('site', 'dupelimit')); + $notice->whereAdd(sprintf("created > '%s'", $notice->escape($threshold))); $cnt = $notice->count(); return ($cnt == 0); From c0cce1891307ebceed448118b318bf8b527dc06e Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 4 Nov 2010 00:43:40 +0000 Subject: [PATCH 017/220] - Some reorganizing - Making the Facebook bridging work --- plugins/FacebookSSO/FacebookSSOPlugin.php | 164 +- .../{ => actions}/facebookadminpanel.php | 0 .../{ => actions}/facebooklogin.php | 0 .../{ => actions}/facebookregister.php | 0 .../{ => actions}/facebooksettings.php | 0 .../extlib/facebookapi_php5_restlib.php | 3702 +++++++++++++++++ .../extlib/jsonwrapper/JSON/JSON.php | 806 ++++ .../extlib/jsonwrapper/JSON/LICENSE | 21 + .../extlib/jsonwrapper/jsonwrapper.php | 6 + .../extlib/jsonwrapper/jsonwrapper_inner.php | 23 + 10 files changed, 4656 insertions(+), 66 deletions(-) rename plugins/FacebookSSO/{ => actions}/facebookadminpanel.php (100%) rename plugins/FacebookSSO/{ => actions}/facebooklogin.php (100%) rename plugins/FacebookSSO/{ => actions}/facebookregister.php (100%) rename plugins/FacebookSSO/{ => actions}/facebooksettings.php (100%) create mode 100644 plugins/FacebookSSO/extlib/facebookapi_php5_restlib.php create mode 100644 plugins/FacebookSSO/extlib/jsonwrapper/JSON/JSON.php create mode 100644 plugins/FacebookSSO/extlib/jsonwrapper/JSON/LICENSE create mode 100644 plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper.php create mode 100644 plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper_inner.php diff --git a/plugins/FacebookSSO/FacebookSSOPlugin.php b/plugins/FacebookSSO/FacebookSSOPlugin.php index da109e9c47..b14ef0bade 100644 --- a/plugins/FacebookSSO/FacebookSSOPlugin.php +++ b/plugins/FacebookSSO/FacebookSSOPlugin.php @@ -54,6 +54,7 @@ define("FACEBOOK_SERVICE", 2); class FacebookSSOPlugin extends Plugin { public $appId = null; // Facebook application ID + public $apikey = null; // Facebook API key (for deprecated "Old REST API") public $secret = null; // Facebook application secret public $facebook = null; // Facebook application instance public $dir = null; // Facebook SSO plugin dir @@ -68,25 +69,12 @@ class FacebookSSOPlugin extends Plugin */ function initialize() { - // Check defaults and configuration for application ID and secret - if (empty($this->appId)) { - $this->appId = common_config('facebook', 'appid'); - } + $this->facebook = Facebookclient::getFacebook( + $this->appId, + $this->apikey, + $this->secret + ); - if (empty($this->secret)) { - $this->secret = common_config('facebook', 'secret'); - } - - if (empty($this->facebook)) { - $this->facebook = new Facebook( - array( - 'appId' => $this->appId, - 'secret' => $this->secret, - 'cookie' => true - ) - ); - } - return true; } @@ -130,14 +118,21 @@ class FacebookSSOPlugin extends Plugin switch ($cls) { - case 'Facebook': + case 'Facebook': // New JavaScript SDK include_once $dir . '/extlib/facebook.php'; return false; + case 'FacebookRestClient': // Old REST lib + include_once $dir . '/extlib/facebookapi_php5_restlib.php'; + return false; case 'FacebookloginAction': case 'FacebookregisterAction': case 'FacebookadminpanelAction': case 'FacebooksettingsAction': - include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + return false; + case 'Facebookclient': + case 'Facebookqueuehandler': + include_once $dir . '/lib/' . strtolower($cls) . '.php'; return false; default: return true; @@ -145,6 +140,25 @@ class FacebookSSOPlugin extends Plugin } + /* + * Does this $action need the Facebook JavaScripts? + */ + function needsScripts($action) + { + static $needy = array( + 'FacebookloginAction', + 'FacebookregisterAction', + 'FacebookadminpanelAction', + 'FacebooksettingsAction' + ); + + if (in_array(get_class($action), $needy)) { + return true; + } else { + return false; + } + } + /** * Map URLs to actions * @@ -179,7 +193,7 @@ class FacebookSSOPlugin extends Plugin 'settings/facebook', array('action' => 'facebooksettings') ); - + } return true; @@ -268,24 +282,31 @@ class FacebookSSOPlugin extends Plugin */ function hasApplication() { - if (!empty($this->appId) && !empty($this->secret)) { - return true; - } else { - return false; + if (!empty($this->facebook)) { + + $appId = $this->facebook->getAppId(); + $secret = $this->facebook->getApiSecret(); + + if (!empty($appId) && !empty($secret)) { + return true; + } + } + + return false; } function onStartShowHeader($action) { - // output
as close to as possible - $action->element('div', array('id' => 'fb-root')); + if ($this->needsScripts($action)) { - $session = $this->facebook->getSession(); - $dir = dirname(__FILE__); + // output
as close to as possible + $action->element('div', array('id' => 'fb-root')); - // XXX: minify this - $script = <<inlineScript( - sprintf($script, - json_encode($this->appId), - json_encode($this->session) - ) - ); - + $action->inlineScript( + sprintf($script, + json_encode($this->facebook->getAppId()), + json_encode($this->facebook->getSession()) + ) + ); + } + return true; } @@ -329,35 +351,38 @@ ENDOFSCRIPT; */ function onEndLogout($action) { - $session = $this->facebook->getSession(); - $fbuser = null; - $fbuid = null; + if ($this->hasApplication()) { + $session = $this->facebook->getSession(); + $fbuser = null; + $fbuid = null; - if ($session) { - try { - $fbuid = $this->facebook->getUser(); - $fbuser = $this->facebook->api('/me'); - } catch (FacebookApiException $e) { - common_log(LOG_ERROR, $e, __FILE__); - } - } + if ($session) { + try { + $fbuid = $this->facebook->getUser(); + $fbuser = $this->facebook->api('/me'); + } catch (FacebookApiException $e) { + common_log(LOG_ERROR, $e, __FILE__); + } + } - if (!empty($fbuser)) { + if (!empty($fbuser)) { - $logoutUrl = $this->facebook->getLogoutUrl( - array('next' => common_local_url('public')) - ); + $logoutUrl = $this->facebook->getLogoutUrl( + array('next' => common_local_url('public')) + ); - common_log( - LOG_INFO, - sprintf( - "Logging user out of Facebook (fbuid = %s)", - $fbuid - ), - __FILE__ - ); + common_log( + LOG_INFO, + sprintf( + "Logging user out of Facebook (fbuid = %s)", + $fbuid + ), + __FILE__ + ); + common_debug("LOGOUT URL = $logoutUrl"); + common_redirect($logoutUrl, 303); + } - common_redirect($logoutUrl, 303); } } @@ -371,7 +396,14 @@ ENDOFSCRIPT; * @return nothing */ function onStartHtmlElement($action, $attrs) { - $attrs = array_merge($attrs, array('xmlns:fb' => 'http://www.facebook.com/2008/fbml')); + + if ($this->needsScripts($action)) { + $attrs = array_merge( + $attrs, + array('xmlns:fb' => 'http://www.facebook.com/2008/fbml') + ); + } + return true; } @@ -385,10 +417,10 @@ ENDOFSCRIPT; $versions[] = array( 'name' => 'Facebook Single-Sign-On', 'version' => STATUSNET_VERSION, - 'author' => 'Zach Copley', + 'author' => 'Craig Andrews, Zach Copley', 'homepage' => 'http://status.net/wiki/Plugin:FacebookSSO', 'rawdescription' => - _m('A plugin for single-sign-on with Facebook.') + _m('A plugin for integrating StatusNet with Facebook.') ); return true; diff --git a/plugins/FacebookSSO/facebookadminpanel.php b/plugins/FacebookSSO/actions/facebookadminpanel.php similarity index 100% rename from plugins/FacebookSSO/facebookadminpanel.php rename to plugins/FacebookSSO/actions/facebookadminpanel.php diff --git a/plugins/FacebookSSO/facebooklogin.php b/plugins/FacebookSSO/actions/facebooklogin.php similarity index 100% rename from plugins/FacebookSSO/facebooklogin.php rename to plugins/FacebookSSO/actions/facebooklogin.php diff --git a/plugins/FacebookSSO/facebookregister.php b/plugins/FacebookSSO/actions/facebookregister.php similarity index 100% rename from plugins/FacebookSSO/facebookregister.php rename to plugins/FacebookSSO/actions/facebookregister.php diff --git a/plugins/FacebookSSO/facebooksettings.php b/plugins/FacebookSSO/actions/facebooksettings.php similarity index 100% rename from plugins/FacebookSSO/facebooksettings.php rename to plugins/FacebookSSO/actions/facebooksettings.php diff --git a/plugins/FacebookSSO/extlib/facebookapi_php5_restlib.php b/plugins/FacebookSSO/extlib/facebookapi_php5_restlib.php new file mode 100644 index 0000000000..e249a326b2 --- /dev/null +++ b/plugins/FacebookSSO/extlib/facebookapi_php5_restlib.php @@ -0,0 +1,3702 @@ +secret = $secret; + $this->session_key = $session_key; + $this->api_key = $api_key; + $this->batch_mode = FacebookRestClient::BATCH_MODE_DEFAULT; + $this->last_call_id = 0; + $this->call_as_apikey = ''; + $this->use_curl_if_available = true; + $this->server_addr = + Facebook::get_facebook_url('api') . '/restserver.php'; + $this->photo_server_addr = + Facebook::get_facebook_url('api-photo') . '/restserver.php'; + + if (!empty($GLOBALS['facebook_config']['debug'])) { + $this->cur_id = 0; + ?> + +user = $uid; + } + + + /** + * Switch to use the session secret instead of the app secret, + * for desktop and unsecured environment + */ + public function use_session_secret($session_secret) { + $this->secret = $session_secret; + $this->using_session_secret = true; + } + + /** + * Normally, if the cURL library/PHP extension is available, it is used for + * HTTP transactions. This allows that behavior to be overridden, falling + * back to a vanilla-PHP implementation even if cURL is installed. + * + * @param $use_curl_if_available bool whether or not to use cURL if available + */ + public function set_use_curl_if_available($use_curl_if_available) { + $this->use_curl_if_available = $use_curl_if_available; + } + + /** + * Start a batch operation. + */ + public function begin_batch() { + if ($this->pending_batch()) { + $code = FacebookAPIErrorCodes::API_EC_BATCH_ALREADY_STARTED; + $description = FacebookAPIErrorCodes::$api_error_descriptions[$code]; + throw new FacebookRestClientException($description, $code); + } + + $this->batch_queue = array(); + $this->pending_batch = true; + } + + /* + * End current batch operation + */ + public function end_batch() { + if (!$this->pending_batch()) { + $code = FacebookAPIErrorCodes::API_EC_BATCH_NOT_STARTED; + $description = FacebookAPIErrorCodes::$api_error_descriptions[$code]; + throw new FacebookRestClientException($description, $code); + } + + $this->pending_batch = false; + + $this->execute_server_side_batch(); + $this->batch_queue = null; + } + + /** + * are we currently queueing up calls for a batch? + */ + public function pending_batch() { + return $this->pending_batch; + } + + private function execute_server_side_batch() { + $item_count = count($this->batch_queue); + $method_feed = array(); + foreach ($this->batch_queue as $batch_item) { + $method = $batch_item['m']; + $params = $batch_item['p']; + list($get, $post) = $this->finalize_params($method, $params); + $method_feed[] = $this->create_url_string(array_merge($post, $get)); + } + + $serial_only = + ($this->batch_mode == FacebookRestClient::BATCH_MODE_SERIAL_ONLY); + + $params = array('method_feed' => json_encode($method_feed), + 'serial_only' => $serial_only, + 'format' => $this->format); + $result = $this->call_method('facebook.batch.run', $params); + + if (is_array($result) && isset($result['error_code'])) { + throw new FacebookRestClientException($result['error_msg'], + $result['error_code']); + } + + for ($i = 0; $i < $item_count; $i++) { + $batch_item = $this->batch_queue[$i]; + $batch_item['p']['format'] = $this->format; + $batch_item_result = $this->convert_result($result[$i], + $batch_item['m'], + $batch_item['p']); + + if (is_array($batch_item_result) && + isset($batch_item_result['error_code'])) { + throw new FacebookRestClientException($batch_item_result['error_msg'], + $batch_item_result['error_code']); + } + $batch_item['r'] = $batch_item_result; + } + } + + public function begin_permissions_mode($permissions_apikey) { + $this->call_as_apikey = $permissions_apikey; + } + + public function end_permissions_mode() { + $this->call_as_apikey = ''; + } + + + /* + * If a page is loaded via HTTPS, then all images and static + * resources need to be printed with HTTPS urls to avoid + * mixed content warnings. If your page loads with an HTTPS + * url, then call set_use_ssl_resources to retrieve the correct + * urls. + */ + public function set_use_ssl_resources($is_ssl = true) { + $this->use_ssl_resources = $is_ssl; + } + + /** + * Returns public information for an application (as shown in the application + * directory) by either application ID, API key, or canvas page name. + * + * @param int $application_id (Optional) app id + * @param string $application_api_key (Optional) api key + * @param string $application_canvas_name (Optional) canvas name + * + * Exactly one argument must be specified, otherwise it is an error. + * + * @return array An array of public information about the application. + */ + public function application_getPublicInfo($application_id=null, + $application_api_key=null, + $application_canvas_name=null) { + return $this->call_method('facebook.application.getPublicInfo', + array('application_id' => $application_id, + 'application_api_key' => $application_api_key, + 'application_canvas_name' => $application_canvas_name)); + } + + /** + * Creates an authentication token to be used as part of the desktop login + * flow. For more information, please see + * http://wiki.developers.facebook.com/index.php/Auth.createToken. + * + * @return string An authentication token. + */ + public function auth_createToken() { + return $this->call_method('facebook.auth.createToken'); + } + + /** + * Returns the session information available after current user logs in. + * + * @param string $auth_token the token returned by auth_createToken or + * passed back to your callback_url. + * @param bool $generate_session_secret whether the session returned should + * include a session secret + * @param string $host_url the connect site URL for which the session is + * being generated. This parameter is optional, unless + * you want Facebook to determine which of several base domains + * to choose from. If this third argument isn't provided but + * there are several base domains, the first base domain is + * chosen. + * + * @return array An assoc array containing session_key, uid + */ + public function auth_getSession($auth_token, + $generate_session_secret = false, + $host_url = null) { + if (!$this->pending_batch()) { + $result = $this->call_method( + 'facebook.auth.getSession', + array('auth_token' => $auth_token, + 'generate_session_secret' => $generate_session_secret, + 'host_url' => $host_url)); + $this->session_key = $result['session_key']; + + if (!empty($result['secret']) && !$generate_session_secret) { + // desktop apps have a special secret + $this->secret = $result['secret']; + } + + return $result; + } + } + + /** + * Generates a session-specific secret. This is for integration with + * client-side API calls, such as the JS library. + * + * @return array A session secret for the current promoted session + * + * @error API_EC_PARAM_SESSION_KEY + * API_EC_PARAM_UNKNOWN + */ + public function auth_promoteSession() { + return $this->call_method('facebook.auth.promoteSession'); + } + + /** + * Expires the session that is currently being used. If this call is + * successful, no further calls to the API (which require a session) can be + * made until a valid session is created. + * + * @return bool true if session expiration was successful, false otherwise + */ + public function auth_expireSession() { + return $this->call_method('facebook.auth.expireSession'); + } + + /** + * Revokes the given extended permission that the user granted at some + * prior time (for instance, offline_access or email). If no user is + * provided, it will be revoked for the user of the current session. + * + * @param string $perm The permission to revoke + * @param int $uid The user for whom to revoke the permission. + */ + public function auth_revokeExtendedPermission($perm, $uid=null) { + return $this->call_method('facebook.auth.revokeExtendedPermission', + array('perm' => $perm, 'uid' => $uid)); + } + + /** + * Revokes the user's agreement to the Facebook Terms of Service for your + * application. If you call this method for one of your users, you will no + * longer be able to make API requests on their behalf until they again + * authorize your application. Use with care. Note that if this method is + * called without a user parameter, then it will revoke access for the + * current session's user. + * + * @param int $uid (Optional) User to revoke + * + * @return bool true if revocation succeeds, false otherwise + */ + public function auth_revokeAuthorization($uid=null) { + return $this->call_method('facebook.auth.revokeAuthorization', + array('uid' => $uid)); + } + + /** + * Get public key that is needed to verify digital signature + * an app may pass to other apps. The public key is only used by + * other apps for verification purposes. + * @param string API key of an app + * @return string The public key for the app. + */ + public function auth_getAppPublicKey($target_app_key) { + return $this->call_method('facebook.auth.getAppPublicKey', + array('target_app_key' => $target_app_key)); + } + + /** + * Get a structure that can be passed to another app + * as proof of session. The other app can verify it using public + * key of this app. + * + * @return signed public session data structure. + */ + public function auth_getSignedPublicSessionData() { + return $this->call_method('facebook.auth.getSignedPublicSessionData', + array()); + } + + /** + * Returns the number of unconnected friends that exist in this application. + * This number is determined based on the accounts registered through + * connect.registerUsers() (see below). + */ + public function connect_getUnconnectedFriendsCount() { + return $this->call_method('facebook.connect.getUnconnectedFriendsCount', + array()); + } + + /** + * This method is used to create an association between an external user + * account and a Facebook user account, as per Facebook Connect. + * + * This method takes an array of account data, including a required email_hash + * and optional account data. For each connected account, if the user exists, + * the information is added to the set of the user's connected accounts. + * If the user has already authorized the site, the connected account is added + * in the confirmed state. If the user has not yet authorized the site, the + * connected account is added in the pending state. + * + * This is designed to help Facebook Connect recognize when two Facebook + * friends are both members of a external site, but perhaps are not aware of + * it. The Connect dialog (see fb:connect-form) is used when friends can be + * identified through these email hashes. See the following url for details: + * + * http://wiki.developers.facebook.com/index.php/Connect.registerUsers + * + * @param mixed $accounts A (JSON-encoded) array of arrays, where each array + * has three properties: + * 'email_hash' (req) - public email hash of account + * 'account_id' (opt) - remote account id; + * 'account_url' (opt) - url to remote account; + * + * @return array The list of email hashes for the successfully registered + * accounts. + */ + public function connect_registerUsers($accounts) { + return $this->call_method('facebook.connect.registerUsers', + array('accounts' => $accounts)); + } + + /** + * Unregisters a set of accounts registered using connect.registerUsers. + * + * @param array $email_hashes The (JSON-encoded) list of email hashes to be + * unregistered. + * + * @return array The list of email hashes which have been successfully + * unregistered. + */ + public function connect_unregisterUsers($email_hashes) { + return $this->call_method('facebook.connect.unregisterUsers', + array('email_hashes' => $email_hashes)); + } + + /** + * Returns events according to the filters specified. + * + * @param int $uid (Optional) User associated with events. A null + * parameter will default to the session user. + * @param array/string $eids (Optional) Filter by these event + * ids. A null parameter will get all events for + * the user. (A csv list will work but is deprecated) + * @param int $start_time (Optional) Filter with this unix time as lower + * bound. A null or zero parameter indicates no + * lower bound. + * @param int $end_time (Optional) Filter with this UTC as upper bound. + * A null or zero parameter indicates no upper + * bound. + * @param string $rsvp_status (Optional) Only show events where the given uid + * has this rsvp status. This only works if you + * have specified a value for $uid. Values are as + * in events.getMembers. Null indicates to ignore + * rsvp status when filtering. + * + * @return array The events matching the query. + */ + public function &events_get($uid=null, + $eids=null, + $start_time=null, + $end_time=null, + $rsvp_status=null) { + return $this->call_method('facebook.events.get', + array('uid' => $uid, + 'eids' => $eids, + 'start_time' => $start_time, + 'end_time' => $end_time, + 'rsvp_status' => $rsvp_status)); + } + + /** + * Returns membership list data associated with an event. + * + * @param int $eid event id + * + * @return array An assoc array of four membership lists, with keys + * 'attending', 'unsure', 'declined', and 'not_replied' + */ + public function &events_getMembers($eid) { + return $this->call_method('facebook.events.getMembers', + array('eid' => $eid)); + } + + /** + * RSVPs the current user to this event. + * + * @param int $eid event id + * @param string $rsvp_status 'attending', 'unsure', or 'declined' + * + * @return bool true if successful + */ + public function &events_rsvp($eid, $rsvp_status) { + return $this->call_method('facebook.events.rsvp', + array( + 'eid' => $eid, + 'rsvp_status' => $rsvp_status)); + } + + /** + * Cancels an event. Only works for events where application is the admin. + * + * @param int $eid event id + * @param string $cancel_message (Optional) message to send to members of + * the event about why it is cancelled + * + * @return bool true if successful + */ + public function &events_cancel($eid, $cancel_message='') { + return $this->call_method('facebook.events.cancel', + array('eid' => $eid, + 'cancel_message' => $cancel_message)); + } + + /** + * Creates an event on behalf of the user is there is a session, otherwise on + * behalf of app. Successful creation guarantees app will be admin. + * + * @param assoc array $event_info json encoded event information + * @param string $file (Optional) filename of picture to set + * + * @return int event id + */ + public function events_create($event_info, $file = null) { + if ($file) { + return $this->call_upload_method('facebook.events.create', + array('event_info' => $event_info), + $file, + $this->photo_server_addr); + } else { + return $this->call_method('facebook.events.create', + array('event_info' => $event_info)); + } + } + + /** + * Invites users to an event. If a session user exists, the session user + * must have permissions to invite friends to the event and $uids must contain + * a list of friend ids. Otherwise, the event must have been + * created by the app and $uids must contain users of the app. + * This method requires the 'create_event' extended permission to + * invite people on behalf of a user. + * + * @param $eid the event id + * @param $uids an array of users to invite + * @param $personal_message a string containing the user's message + * (text only) + * + */ + public function events_invite($eid, $uids, $personal_message) { + return $this->call_method('facebook.events.invite', + array('eid' => $eid, + 'uids' => $uids, + 'personal_message' => $personal_message)); + } + + /** + * Edits an existing event. Only works for events where application is admin. + * + * @param int $eid event id + * @param assoc array $event_info json encoded event information + * @param string $file (Optional) filename of new picture to set + * + * @return bool true if successful + */ + public function events_edit($eid, $event_info, $file = null) { + if ($file) { + return $this->call_upload_method('facebook.events.edit', + array('eid' => $eid, 'event_info' => $event_info), + $file, + $this->photo_server_addr); + } else { + return $this->call_method('facebook.events.edit', + array('eid' => $eid, + 'event_info' => $event_info)); + } + } + + /** + * Fetches and re-caches the image stored at the given URL, for use in images + * published to non-canvas pages via the API (for example, to user profiles + * via profile.setFBML, or to News Feed via feed.publishUserAction). + * + * @param string $url The absolute URL from which to refresh the image. + * + * @return bool true on success + */ + public function &fbml_refreshImgSrc($url) { + return $this->call_method('facebook.fbml.refreshImgSrc', + array('url' => $url)); + } + + /** + * Fetches and re-caches the content stored at the given URL, for use in an + * fb:ref FBML tag. + * + * @param string $url The absolute URL from which to fetch content. This URL + * should be used in a fb:ref FBML tag. + * + * @return bool true on success + */ + public function &fbml_refreshRefUrl($url) { + return $this->call_method('facebook.fbml.refreshRefUrl', + array('url' => $url)); + } + + /** + * Associates a given "handle" with FBML markup so that the handle can be + * used within the fb:ref FBML tag. A handle is unique within an application + * and allows an application to publish identical FBML to many user profiles + * and do subsequent updates without having to republish FBML on behalf of + * each user. + * + * @param string $handle The handle to associate with the given FBML. + * @param string $fbml The FBML to associate with the given handle. + * + * @return bool true on success + */ + public function &fbml_setRefHandle($handle, $fbml) { + return $this->call_method('facebook.fbml.setRefHandle', + array('handle' => $handle, 'fbml' => $fbml)); + } + + /** + * Register custom tags for the application. Custom tags can be used + * to extend the set of tags available to applications in FBML + * markup. + * + * Before you call this function, + * make sure you read the full documentation at + * + * http://wiki.developers.facebook.com/index.php/Fbml.RegisterCustomTags + * + * IMPORTANT: This function overwrites the values of + * existing tags if the names match. Use this function with care because + * it may break the FBML of any application that is using the + * existing version of the tags. + * + * @param mixed $tags an array of tag objects (the full description is on the + * wiki page) + * + * @return int the number of tags that were registered + */ + public function &fbml_registerCustomTags($tags) { + $tags = json_encode($tags); + return $this->call_method('facebook.fbml.registerCustomTags', + array('tags' => $tags)); + } + + /** + * Get the custom tags for an application. If $app_id + * is not specified, the calling app's tags are returned. + * If $app_id is different from the id of the calling app, + * only the app's public tags are returned. + * The return value is an array of the same type as + * the $tags parameter of fbml_registerCustomTags(). + * + * @param int $app_id the application's id (optional) + * + * @return mixed an array containing the custom tag objects + */ + public function &fbml_getCustomTags($app_id = null) { + return $this->call_method('facebook.fbml.getCustomTags', + array('app_id' => $app_id)); + } + + + /** + * Delete custom tags the application has registered. If + * $tag_names is null, all the application's custom tags will be + * deleted. + * + * IMPORTANT: If your application has registered public tags + * that other applications may be using, don't delete those tags! + * Doing so can break the FBML ofapplications that are using them. + * + * @param array $tag_names the names of the tags to delete (optinal) + * @return bool true on success + */ + public function &fbml_deleteCustomTags($tag_names = null) { + return $this->call_method('facebook.fbml.deleteCustomTags', + array('tag_names' => json_encode($tag_names))); + } + + /** + * Gets the best translations for native strings submitted by an application + * for translation. If $locale is not specified, only native strings and their + * descriptions are returned. If $all is true, then unapproved translations + * are returned as well, otherwise only approved translations are returned. + * + * A mapping of locale codes -> language names is available at + * http://wiki.developers.facebook.com/index.php/Facebook_Locales + * + * @param string $locale the locale to get translations for, or 'all' for all + * locales, or 'en_US' for native strings + * @param bool $all whether to return all or only approved translations + * + * @return array (locale, array(native_strings, array('best translation + * available given enough votes or manual approval', approval + * status))) + * @error API_EC_PARAM + * @error API_EC_PARAM_BAD_LOCALE + */ + public function &intl_getTranslations($locale = 'en_US', $all = false) { + return $this->call_method('facebook.intl.getTranslations', + array('locale' => $locale, + 'all' => $all)); + } + + /** + * Lets you insert text strings in their native language into the Facebook + * Translations database so they can be translated. + * + * @param array $native_strings An array of maps, where each map has a 'text' + * field and a 'description' field. + * + * @return int Number of strings uploaded. + */ + public function &intl_uploadNativeStrings($native_strings) { + return $this->call_method('facebook.intl.uploadNativeStrings', + array('native_strings' => json_encode($native_strings))); + } + + /** + * This method is deprecated for calls made on behalf of users. This method + * works only for publishing stories on a Facebook Page that has installed + * your application. To publish stories to a user's profile, use + * feed.publishUserAction instead. + * + * For more details on this call, please visit the wiki page: + * + * http://wiki.developers.facebook.com/index.php/Feed.publishTemplatizedAction + */ + public function &feed_publishTemplatizedAction($title_template, + $title_data, + $body_template, + $body_data, + $body_general, + $image_1=null, + $image_1_link=null, + $image_2=null, + $image_2_link=null, + $image_3=null, + $image_3_link=null, + $image_4=null, + $image_4_link=null, + $target_ids='', + $page_actor_id=null) { + return $this->call_method('facebook.feed.publishTemplatizedAction', + array('title_template' => $title_template, + 'title_data' => $title_data, + 'body_template' => $body_template, + 'body_data' => $body_data, + 'body_general' => $body_general, + 'image_1' => $image_1, + 'image_1_link' => $image_1_link, + 'image_2' => $image_2, + 'image_2_link' => $image_2_link, + 'image_3' => $image_3, + 'image_3_link' => $image_3_link, + 'image_4' => $image_4, + 'image_4_link' => $image_4_link, + 'target_ids' => $target_ids, + 'page_actor_id' => $page_actor_id)); + } + + /** + * Registers a template bundle. Template bundles are somewhat involved, so + * it's recommended you check out the wiki for more details: + * + * http://wiki.developers.facebook.com/index.php/Feed.registerTemplateBundle + * + * @return string A template bundle id + */ + public function &feed_registerTemplateBundle($one_line_story_templates, + $short_story_templates = array(), + $full_story_template = null, + $action_links = array()) { + + $one_line_story_templates = json_encode($one_line_story_templates); + + if (!empty($short_story_templates)) { + $short_story_templates = json_encode($short_story_templates); + } + + if (isset($full_story_template)) { + $full_story_template = json_encode($full_story_template); + } + + if (isset($action_links)) { + $action_links = json_encode($action_links); + } + + return $this->call_method('facebook.feed.registerTemplateBundle', + array('one_line_story_templates' => $one_line_story_templates, + 'short_story_templates' => $short_story_templates, + 'full_story_template' => $full_story_template, + 'action_links' => $action_links)); + } + + /** + * Retrieves the full list of active template bundles registered by the + * requesting application. + * + * @return array An array of template bundles + */ + public function &feed_getRegisteredTemplateBundles() { + return $this->call_method('facebook.feed.getRegisteredTemplateBundles', + array()); + } + + /** + * Retrieves information about a specified template bundle previously + * registered by the requesting application. + * + * @param string $template_bundle_id The template bundle id + * + * @return array Template bundle + */ + public function &feed_getRegisteredTemplateBundleByID($template_bundle_id) { + return $this->call_method('facebook.feed.getRegisteredTemplateBundleByID', + array('template_bundle_id' => $template_bundle_id)); + } + + /** + * Deactivates a previously registered template bundle. + * + * @param string $template_bundle_id The template bundle id + * + * @return bool true on success + */ + public function &feed_deactivateTemplateBundleByID($template_bundle_id) { + return $this->call_method('facebook.feed.deactivateTemplateBundleByID', + array('template_bundle_id' => $template_bundle_id)); + } + + const STORY_SIZE_ONE_LINE = 1; + const STORY_SIZE_SHORT = 2; + const STORY_SIZE_FULL = 4; + + /** + * Publishes a story on behalf of the user owning the session, using the + * specified template bundle. This method requires an active session key in + * order to be called. + * + * The parameters to this method ($templata_data in particular) are somewhat + * involved. It's recommended you visit the wiki for details: + * + * http://wiki.developers.facebook.com/index.php/Feed.publishUserAction + * + * @param int $template_bundle_id A template bundle id previously registered + * @param array $template_data See wiki article for syntax + * @param array $target_ids (Optional) An array of friend uids of the + * user who shared in this action. + * @param string $body_general (Optional) Additional markup that extends + * the body of a short story. + * @param int $story_size (Optional) A story size (see above) + * @param string $user_message (Optional) A user message for a short + * story. + * + * @return bool true on success + */ + public function &feed_publishUserAction( + $template_bundle_id, $template_data, $target_ids='', $body_general='', + $story_size=FacebookRestClient::STORY_SIZE_ONE_LINE, + $user_message='') { + + if (is_array($template_data)) { + $template_data = json_encode($template_data); + } // allow client to either pass in JSON or an assoc that we JSON for them + + if (is_array($target_ids)) { + $target_ids = json_encode($target_ids); + $target_ids = trim($target_ids, "[]"); // we don't want square brackets + } + + return $this->call_method('facebook.feed.publishUserAction', + array('template_bundle_id' => $template_bundle_id, + 'template_data' => $template_data, + 'target_ids' => $target_ids, + 'body_general' => $body_general, + 'story_size' => $story_size, + 'user_message' => $user_message)); + } + + + /** + * Publish a post to the user's stream. + * + * @param $message the user's message + * @param $attachment the post's attachment (optional) + * @param $action links the post's action links (optional) + * @param $target_id the user on whose wall the post will be posted + * (optional) + * @param $uid the actor (defaults to session user) + * @return string the post id + */ + public function stream_publish( + $message, $attachment = null, $action_links = null, $target_id = null, + $uid = null) { + + return $this->call_method( + 'facebook.stream.publish', + array('message' => $message, + 'attachment' => $attachment, + 'action_links' => $action_links, + 'target_id' => $target_id, + 'uid' => $this->get_uid($uid))); + } + + /** + * Remove a post from the user's stream. + * Currently, you may only remove stories you application created. + * + * @param $post_id the post id + * @param $uid the actor (defaults to session user) + * @return bool + */ + public function stream_remove($post_id, $uid = null) { + return $this->call_method( + 'facebook.stream.remove', + array('post_id' => $post_id, + 'uid' => $this->get_uid($uid))); + } + + /** + * Add a comment to a stream post + * + * @param $post_id the post id + * @param $comment the comment text + * @param $uid the actor (defaults to session user) + * @return string the id of the created comment + */ + public function stream_addComment($post_id, $comment, $uid = null) { + return $this->call_method( + 'facebook.stream.addComment', + array('post_id' => $post_id, + 'comment' => $comment, + 'uid' => $this->get_uid($uid))); + } + + + /** + * Remove a comment from a stream post + * + * @param $comment_id the comment id + * @param $uid the actor (defaults to session user) + * @return bool + */ + public function stream_removeComment($comment_id, $uid = null) { + return $this->call_method( + 'facebook.stream.removeComment', + array('comment_id' => $comment_id, + 'uid' => $this->get_uid($uid))); + } + + /** + * Add a like to a stream post + * + * @param $post_id the post id + * @param $uid the actor (defaults to session user) + * @return bool + */ + public function stream_addLike($post_id, $uid = null) { + return $this->call_method( + 'facebook.stream.addLike', + array('post_id' => $post_id, + 'uid' => $this->get_uid($uid))); + } + + /** + * Remove a like from a stream post + * + * @param $post_id the post id + * @param $uid the actor (defaults to session user) + * @return bool + */ + public function stream_removeLike($post_id, $uid = null) { + return $this->call_method( + 'facebook.stream.removeLike', + array('post_id' => $post_id, + 'uid' => $this->get_uid($uid))); + } + + /** + * For the current user, retrieves stories generated by the user's friends + * while using this application. This can be used to easily create a + * "News Feed" like experience. + * + * @return array An array of feed story objects. + */ + public function &feed_getAppFriendStories() { + return $this->call_method('facebook.feed.getAppFriendStories'); + } + + /** + * Makes an FQL query. This is a generalized way of accessing all the data + * in the API, as an alternative to most of the other method calls. More + * info at http://wiki.developers.facebook.com/index.php/FQL + * + * @param string $query the query to evaluate + * + * @return array generalized array representing the results + */ + public function &fql_query($query) { + return $this->call_method('facebook.fql.query', + array('query' => $query)); + } + + /** + * Makes a set of FQL queries in parallel. This method takes a dictionary + * of FQL queries where the keys are names for the queries. Results from + * one query can be used within another query to fetch additional data. More + * info about FQL queries at http://wiki.developers.facebook.com/index.php/FQL + * + * @param string $queries JSON-encoded dictionary of queries to evaluate + * + * @return array generalized array representing the results + */ + public function &fql_multiquery($queries) { + return $this->call_method('facebook.fql.multiquery', + array('queries' => $queries)); + } + + /** + * Returns whether or not pairs of users are friends. + * Note that the Facebook friend relationship is symmetric. + * + * @param array/string $uids1 list of ids (id_1, id_2,...) + * of some length X (csv is deprecated) + * @param array/string $uids2 list of ids (id_A, id_B,...) + * of SAME length X (csv is deprecated) + * + * @return array An array with uid1, uid2, and bool if friends, e.g.: + * array(0 => array('uid1' => id_1, 'uid2' => id_A, 'are_friends' => 1), + * 1 => array('uid1' => id_2, 'uid2' => id_B, 'are_friends' => 0) + * ...) + * @error + * API_EC_PARAM_USER_ID_LIST + */ + public function &friends_areFriends($uids1, $uids2) { + return $this->call_method('facebook.friends.areFriends', + array('uids1' => $uids1, + 'uids2' => $uids2)); + } + + /** + * Returns the friends of the current session user. + * + * @param int $flid (Optional) Only return friends on this friend list. + * @param int $uid (Optional) Return friends for this user. + * + * @return array An array of friends + */ + public function &friends_get($flid=null, $uid = null) { + if (isset($this->friends_list)) { + return $this->friends_list; + } + $params = array(); + if (!$uid && isset($this->canvas_user)) { + $uid = $this->canvas_user; + } + if ($uid) { + $params['uid'] = $uid; + } + if ($flid) { + $params['flid'] = $flid; + } + return $this->call_method('facebook.friends.get', $params); + + } + + /** + * Returns the mutual friends between the target uid and a source uid or + * the current session user. + * + * @param int $target_uid Target uid for which mutual friends will be found. + * @param int $source_uid (optional) Source uid for which mutual friends will + * be found. If no source_uid is specified, + * source_id will default to the session + * user. + * @return array An array of friend uids + */ + public function &friends_getMutualFriends($target_uid, $source_uid = null) { + return $this->call_method('facebook.friends.getMutualFriends', + array("target_uid" => $target_uid, + "source_uid" => $source_uid)); + } + + /** + * Returns the set of friend lists for the current session user. + * + * @return array An array of friend list objects + */ + public function &friends_getLists() { + return $this->call_method('facebook.friends.getLists'); + } + + /** + * Returns the friends of the session user, who are also users + * of the calling application. + * + * @return array An array of friends also using the app + */ + public function &friends_getAppUsers() { + return $this->call_method('facebook.friends.getAppUsers'); + } + + /** + * Returns groups according to the filters specified. + * + * @param int $uid (Optional) User associated with groups. A null + * parameter will default to the session user. + * @param array/string $gids (Optional) Array of group ids to query. A null + * parameter will get all groups for the user. + * (csv is deprecated) + * + * @return array An array of group objects + */ + public function &groups_get($uid, $gids) { + return $this->call_method('facebook.groups.get', + array('uid' => $uid, + 'gids' => $gids)); + } + + /** + * Returns the membership list of a group. + * + * @param int $gid Group id + * + * @return array An array with four membership lists, with keys 'members', + * 'admins', 'officers', and 'not_replied' + */ + public function &groups_getMembers($gid) { + return $this->call_method('facebook.groups.getMembers', + array('gid' => $gid)); + } + + /** + * Returns cookies according to the filters specified. + * + * @param int $uid User for which the cookies are needed. + * @param string $name (Optional) A null parameter will get all cookies + * for the user. + * + * @return array Cookies! Nom nom nom nom nom. + */ + public function data_getCookies($uid, $name) { + return $this->call_method('facebook.data.getCookies', + array('uid' => $uid, + 'name' => $name)); + } + + /** + * Sets cookies according to the params specified. + * + * @param int $uid User for which the cookies are needed. + * @param string $name Name of the cookie + * @param string $value (Optional) if expires specified and is in the past + * @param int $expires (Optional) Expiry time + * @param string $path (Optional) Url path to associate with (default is /) + * + * @return bool true on success + */ + public function data_setCookie($uid, $name, $value, $expires, $path) { + return $this->call_method('facebook.data.setCookie', + array('uid' => $uid, + 'name' => $name, + 'value' => $value, + 'expires' => $expires, + 'path' => $path)); + } + + /** + * Retrieves links posted by the given user. + * + * @param int $uid The user whose links you wish to retrieve + * @param int $limit The maximimum number of links to retrieve + * @param array $link_ids (Optional) Array of specific link + * IDs to retrieve by this user + * + * @return array An array of links. + */ + public function &links_get($uid, $limit, $link_ids = null) { + return $this->call_method('links.get', + array('uid' => $uid, + 'limit' => $limit, + 'link_ids' => $link_ids)); + } + + /** + * Posts a link on Facebook. + * + * @param string $url URL/link you wish to post + * @param string $comment (Optional) A comment about this link + * @param int $uid (Optional) User ID that is posting this link; + * defaults to current session user + * + * @return bool + */ + public function &links_post($url, $comment='', $uid = null) { + return $this->call_method('links.post', + array('uid' => $uid, + 'url' => $url, + 'comment' => $comment)); + } + + /** + * Permissions API + */ + + /** + * Checks API-access granted by self to the specified application. + * + * @param string $permissions_apikey Other application key + * + * @return array API methods/namespaces which are allowed access + */ + public function permissions_checkGrantedApiAccess($permissions_apikey) { + return $this->call_method('facebook.permissions.checkGrantedApiAccess', + array('permissions_apikey' => $permissions_apikey)); + } + + /** + * Checks API-access granted to self by the specified application. + * + * @param string $permissions_apikey Other application key + * + * @return array API methods/namespaces which are allowed access + */ + public function permissions_checkAvailableApiAccess($permissions_apikey) { + return $this->call_method('facebook.permissions.checkAvailableApiAccess', + array('permissions_apikey' => $permissions_apikey)); + } + + /** + * Grant API-access to the specified methods/namespaces to the specified + * application. + * + * @param string $permissions_apikey Other application key + * @param array(string) $method_arr (Optional) API methods/namespaces + * allowed + * + * @return array API methods/namespaces which are allowed access + */ + public function permissions_grantApiAccess($permissions_apikey, $method_arr) { + return $this->call_method('facebook.permissions.grantApiAccess', + array('permissions_apikey' => $permissions_apikey, + 'method_arr' => $method_arr)); + } + + /** + * Revoke API-access granted to the specified application. + * + * @param string $permissions_apikey Other application key + * + * @return bool true on success + */ + public function permissions_revokeApiAccess($permissions_apikey) { + return $this->call_method('facebook.permissions.revokeApiAccess', + array('permissions_apikey' => $permissions_apikey)); + } + + /** + * Payments Order API + */ + + /** + * Set Payments properties for an app. + * + * @param properties a map from property names to values + * @return true on success + */ + public function payments_setProperties($properties) { + return $this->call_method ('facebook.payments.setProperties', + array('properties' => json_encode($properties))); + } + + public function payments_getOrderDetails($order_id) { + return json_decode($this->call_method( + 'facebook.payments.getOrderDetails', + array('order_id' => $order_id)), true); + } + + public function payments_updateOrder($order_id, $status, + $params) { + return $this->call_method('facebook.payments.updateOrder', + array('order_id' => $order_id, + 'status' => $status, + 'params' => json_encode($params))); + } + + public function payments_getOrders($status, $start_time, + $end_time, $test_mode=false) { + return json_decode($this->call_method('facebook.payments.getOrders', + array('status' => $status, + 'start_time' => $start_time, + 'end_time' => $end_time, + 'test_mode' => $test_mode)), true); + } + + /** + * Gifts API + */ + + /** + * Get Gifts associated with an app + * + * @return array of gifts + */ + public function gifts_get() { + return json_decode( + $this->call_method('facebook.gifts.get', + array()), + true + ); + } + + /* + * Update gifts stored by an app + * + * @param array containing gift_id => gift_data to be updated + * @return array containing gift_id => true/false indicating success + * in updating that gift + */ + public function gifts_update($update_array) { + return json_decode( + $this->call_method('facebook.gifts.update', + array('update_str' => json_encode($update_array)) + ), + true + ); + } + + + /** + * Creates a note with the specified title and content. + * + * @param string $title Title of the note. + * @param string $content Content of the note. + * @param int $uid (Optional) The user for whom you are creating a + * note; defaults to current session user + * + * @return int The ID of the note that was just created. + */ + public function ¬es_create($title, $content, $uid = null) { + return $this->call_method('notes.create', + array('uid' => $uid, + 'title' => $title, + 'content' => $content)); + } + + /** + * Deletes the specified note. + * + * @param int $note_id ID of the note you wish to delete + * @param int $uid (Optional) Owner of the note you wish to delete; + * defaults to current session user + * + * @return bool + */ + public function ¬es_delete($note_id, $uid = null) { + return $this->call_method('notes.delete', + array('uid' => $uid, + 'note_id' => $note_id)); + } + + /** + * Edits a note, replacing its title and contents with the title + * and contents specified. + * + * @param int $note_id ID of the note you wish to edit + * @param string $title Replacement title for the note + * @param string $content Replacement content for the note + * @param int $uid (Optional) Owner of the note you wish to edit; + * defaults to current session user + * + * @return bool + */ + public function ¬es_edit($note_id, $title, $content, $uid = null) { + return $this->call_method('notes.edit', + array('uid' => $uid, + 'note_id' => $note_id, + 'title' => $title, + 'content' => $content)); + } + + /** + * Retrieves all notes by a user. If note_ids are specified, + * retrieves only those specific notes by that user. + * + * @param int $uid User whose notes you wish to retrieve + * @param array $note_ids (Optional) List of specific note + * IDs by this user to retrieve + * + * @return array A list of all of the given user's notes, or an empty list + * if the viewer lacks permissions or if there are no visible + * notes. + */ + public function ¬es_get($uid, $note_ids = null) { + return $this->call_method('notes.get', + array('uid' => $uid, + 'note_ids' => $note_ids)); + } + + + /** + * Returns the outstanding notifications for the session user. + * + * @return array An assoc array of notification count objects for + * 'messages', 'pokes' and 'shares', a uid list of + * 'friend_requests', a gid list of 'group_invites', + * and an eid list of 'event_invites' + */ + public function ¬ifications_get() { + return $this->call_method('facebook.notifications.get'); + } + + /** + * Sends a notification to the specified users. + * + * @return A comma separated list of successful recipients + * @error + * API_EC_PARAM_USER_ID_LIST + */ + public function ¬ifications_send($to_ids, $notification, $type) { + return $this->call_method('facebook.notifications.send', + array('to_ids' => $to_ids, + 'notification' => $notification, + 'type' => $type)); + } + + /** + * Sends an email to the specified user of the application. + * + * @param array/string $recipients array of ids of the recipients (csv is deprecated) + * @param string $subject subject of the email + * @param string $text (plain text) body of the email + * @param string $fbml fbml markup for an html version of the email + * + * @return string A comma separated list of successful recipients + * @error + * API_EC_PARAM_USER_ID_LIST + */ + public function ¬ifications_sendEmail($recipients, + $subject, + $text, + $fbml) { + return $this->call_method('facebook.notifications.sendEmail', + array('recipients' => $recipients, + 'subject' => $subject, + 'text' => $text, + 'fbml' => $fbml)); + } + + /** + * Returns the requested info fields for the requested set of pages. + * + * @param array/string $page_ids an array of page ids (csv is deprecated) + * @param array/string $fields an array of strings describing the + * info fields desired (csv is deprecated) + * @param int $uid (Optional) limit results to pages of which this + * user is a fan. + * @param string type limits results to a particular type of page. + * + * @return array An array of pages + */ + public function &pages_getInfo($page_ids, $fields, $uid, $type) { + return $this->call_method('facebook.pages.getInfo', + array('page_ids' => $page_ids, + 'fields' => $fields, + 'uid' => $uid, + 'type' => $type)); + } + + /** + * Returns true if the given user is an admin for the passed page. + * + * @param int $page_id target page id + * @param int $uid (Optional) user id (defaults to the logged-in user) + * + * @return bool true on success + */ + public function &pages_isAdmin($page_id, $uid = null) { + return $this->call_method('facebook.pages.isAdmin', + array('page_id' => $page_id, + 'uid' => $uid)); + } + + /** + * Returns whether or not the given page has added the application. + * + * @param int $page_id target page id + * + * @return bool true on success + */ + public function &pages_isAppAdded($page_id) { + return $this->call_method('facebook.pages.isAppAdded', + array('page_id' => $page_id)); + } + + /** + * Returns true if logged in user is a fan for the passed page. + * + * @param int $page_id target page id + * @param int $uid user to compare. If empty, the logged in user. + * + * @return bool true on success + */ + public function &pages_isFan($page_id, $uid = null) { + return $this->call_method('facebook.pages.isFan', + array('page_id' => $page_id, + 'uid' => $uid)); + } + + /** + * Adds a tag with the given information to a photo. See the wiki for details: + * + * http://wiki.developers.facebook.com/index.php/Photos.addTag + * + * @param int $pid The ID of the photo to be tagged + * @param int $tag_uid The ID of the user being tagged. You must specify + * either the $tag_uid or the $tag_text parameter + * (unless $tags is specified). + * @param string $tag_text Some text identifying the person being tagged. + * You must specify either the $tag_uid or $tag_text + * parameter (unless $tags is specified). + * @param float $x The horizontal position of the tag, as a + * percentage from 0 to 100, from the left of the + * photo. + * @param float $y The vertical position of the tag, as a percentage + * from 0 to 100, from the top of the photo. + * @param array $tags (Optional) An array of maps, where each map + * can contain the tag_uid, tag_text, x, and y + * parameters defined above. If specified, the + * individual arguments are ignored. + * @param int $owner_uid (Optional) The user ID of the user whose photo + * you are tagging. If this parameter is not + * specified, then it defaults to the session user. + * + * @return bool true on success + */ + public function &photos_addTag($pid, + $tag_uid, + $tag_text, + $x, + $y, + $tags, + $owner_uid=0) { + return $this->call_method('facebook.photos.addTag', + array('pid' => $pid, + 'tag_uid' => $tag_uid, + 'tag_text' => $tag_text, + 'x' => $x, + 'y' => $y, + 'tags' => (is_array($tags)) ? json_encode($tags) : null, + 'owner_uid' => $this->get_uid($owner_uid))); + } + + /** + * Creates and returns a new album owned by the specified user or the current + * session user. + * + * @param string $name The name of the album. + * @param string $description (Optional) A description of the album. + * @param string $location (Optional) A description of the location. + * @param string $visible (Optional) A privacy setting for the album. + * One of 'friends', 'friends-of-friends', + * 'networks', or 'everyone'. Default 'everyone'. + * @param int $uid (Optional) User id for creating the album; if + * not specified, the session user is used. + * + * @return array An album object + */ + public function &photos_createAlbum($name, + $description='', + $location='', + $visible='', + $uid=0) { + return $this->call_method('facebook.photos.createAlbum', + array('name' => $name, + 'description' => $description, + 'location' => $location, + 'visible' => $visible, + 'uid' => $this->get_uid($uid))); + } + + /** + * Returns photos according to the filters specified. + * + * @param int $subj_id (Optional) Filter by uid of user tagged in the photos. + * @param int $aid (Optional) Filter by an album, as returned by + * photos_getAlbums. + * @param array/string $pids (Optional) Restrict to an array of pids + * (csv is deprecated) + * + * Note that at least one of these parameters needs to be specified, or an + * error is returned. + * + * @return array An array of photo objects. + */ + public function &photos_get($subj_id, $aid, $pids) { + return $this->call_method('facebook.photos.get', + array('subj_id' => $subj_id, 'aid' => $aid, 'pids' => $pids)); + } + + /** + * Returns the albums created by the given user. + * + * @param int $uid (Optional) The uid of the user whose albums you want. + * A null will return the albums of the session user. + * @param string $aids (Optional) An array of aids to restrict + * the query. (csv is deprecated) + * + * Note that at least one of the (uid, aids) parameters must be specified. + * + * @returns an array of album objects. + */ + public function &photos_getAlbums($uid, $aids) { + return $this->call_method('facebook.photos.getAlbums', + array('uid' => $uid, + 'aids' => $aids)); + } + + /** + * Returns the tags on all photos specified. + * + * @param string $pids A list of pids to query + * + * @return array An array of photo tag objects, which include pid, + * subject uid, and two floating-point numbers (xcoord, ycoord) + * for tag pixel location. + */ + public function &photos_getTags($pids) { + return $this->call_method('facebook.photos.getTags', + array('pids' => $pids)); + } + + /** + * Uploads a photo. + * + * @param string $file The location of the photo on the local filesystem. + * @param int $aid (Optional) The album into which to upload the + * photo. + * @param string $caption (Optional) A caption for the photo. + * @param int uid (Optional) The user ID of the user whose photo you + * are uploading + * + * @return array An array of user objects + */ + public function photos_upload($file, $aid=null, $caption=null, $uid=null) { + return $this->call_upload_method('facebook.photos.upload', + array('aid' => $aid, + 'caption' => $caption, + 'uid' => $uid), + $file); + } + + + /** + * Uploads a video. + * + * @param string $file The location of the video on the local filesystem. + * @param string $title (Optional) A title for the video. Titles over 65 characters in length will be truncated. + * @param string $description (Optional) A description for the video. + * + * @return array An array with the video's ID, title, description, and a link to view it on Facebook. + */ + public function video_upload($file, $title=null, $description=null) { + return $this->call_upload_method('facebook.video.upload', + array('title' => $title, + 'description' => $description), + $file, + Facebook::get_facebook_url('api-video') . '/restserver.php'); + } + + /** + * Returns an array with the video limitations imposed on the current session's + * associated user. Maximum length is measured in seconds; maximum size is + * measured in bytes. + * + * @return array Array with "length" and "size" keys + */ + public function &video_getUploadLimits() { + return $this->call_method('facebook.video.getUploadLimits'); + } + + /** + * Returns the requested info fields for the requested set of users. + * + * @param array/string $uids An array of user ids (csv is deprecated) + * @param array/string $fields An array of info field names desired (csv is deprecated) + * + * @return array An array of user objects + */ + public function &users_getInfo($uids, $fields) { + return $this->call_method('facebook.users.getInfo', + array('uids' => $uids, + 'fields' => $fields)); + } + + /** + * Returns the requested info fields for the requested set of users. A + * session key must not be specified. Only data about users that have + * authorized your application will be returned. + * + * Check the wiki for fields that can be queried through this API call. + * Data returned from here should not be used for rendering to application + * users, use users.getInfo instead, so that proper privacy rules will be + * applied. + * + * @param array/string $uids An array of user ids (csv is deprecated) + * @param array/string $fields An array of info field names desired (csv is deprecated) + * + * @return array An array of user objects + */ + public function &users_getStandardInfo($uids, $fields) { + return $this->call_method('facebook.users.getStandardInfo', + array('uids' => $uids, + 'fields' => $fields)); + } + + /** + * Returns the user corresponding to the current session object. + * + * @return integer User id + */ + public function &users_getLoggedInUser() { + return $this->call_method('facebook.users.getLoggedInUser'); + } + + /** + * Returns 1 if the user has the specified permission, 0 otherwise. + * http://wiki.developers.facebook.com/index.php/Users.hasAppPermission + * + * @return integer 1 or 0 + */ + public function &users_hasAppPermission($ext_perm, $uid=null) { + return $this->call_method('facebook.users.hasAppPermission', + array('ext_perm' => $ext_perm, 'uid' => $uid)); + } + + /** + * Returns whether or not the user corresponding to the current + * session object has the give the app basic authorization. + * + * @return boolean true if the user has authorized the app + */ + public function &users_isAppUser($uid=null) { + if ($uid === null && isset($this->is_user)) { + return $this->is_user; + } + + return $this->call_method('facebook.users.isAppUser', array('uid' => $uid)); + } + + /** + * Returns whether or not the user corresponding to the current + * session object is verified by Facebook. See the documentation + * for Users.isVerified for details. + * + * @return boolean true if the user is verified + */ + public function &users_isVerified() { + return $this->call_method('facebook.users.isVerified'); + } + + /** + * Sets the users' current status message. Message does NOT contain the + * word "is" , so make sure to include a verb. + * + * Example: setStatus("is loving the API!") + * will produce the status "Luke is loving the API!" + * + * @param string $status text-only message to set + * @param int $uid user to set for (defaults to the + * logged-in user) + * @param bool $clear whether or not to clear the status, + * instead of setting it + * @param bool $status_includes_verb if true, the word "is" will *not* be + * prepended to the status message + * + * @return boolean + */ + public function &users_setStatus($status, + $uid = null, + $clear = false, + $status_includes_verb = true) { + $args = array( + 'status' => $status, + 'uid' => $uid, + 'clear' => $clear, + 'status_includes_verb' => $status_includes_verb, + ); + return $this->call_method('facebook.users.setStatus', $args); + } + + /** + * Gets the comments for a particular xid. This is essentially a wrapper + * around the comment FQL table. + * + * @param string $xid external id associated with the comments + * + * @return array of comment objects + */ + public function &comments_get($xid) { + $args = array('xid' => $xid); + return $this->call_method('facebook.comments.get', $args); + } + + /** + * Add a comment to a particular xid on behalf of a user. If called + * without an app_secret (with session secret), this will only work + * for the session user. + * + * @param string $xid external id associated with the comments + * @param string $text text of the comment + * @param int $uid user adding the comment (def: session user) + * @param string $title optional title for the stream story + * @param string $url optional url for the stream story + * @param bool $publish_to_stream publish a feed story about this comment? + * a link will be generated to title/url in the story + * + * @return string comment_id associated with the comment + */ + public function &comments_add($xid, $text, $uid=0, $title='', $url='', + $publish_to_stream=false) { + $args = array( + 'xid' => $xid, + 'uid' => $this->get_uid($uid), + 'text' => $text, + 'title' => $title, + 'url' => $url, + 'publish_to_stream' => $publish_to_stream); + + return $this->call_method('facebook.comments.add', $args); + } + + /** + * Remove a particular comment. + * + * @param string $xid the external id associated with the comments + * @param string $comment_id id of the comment to remove (returned by + * comments.add and comments.get) + * + * @return boolean + */ + public function &comments_remove($xid, $comment_id) { + $args = array( + 'xid' => $xid, + 'comment_id' => $comment_id); + return $this->call_method('facebook.comments.remove', $args); + } + + /** + * Gets the stream on behalf of a user using a set of users. This + * call will return the latest $limit queries between $start_time + * and $end_time. + * + * @param int $viewer_id user making the call (def: session) + * @param array $source_ids users/pages to look at (def: all connections) + * @param int $start_time start time to look for stories (def: 1 day ago) + * @param int $end_time end time to look for stories (def: now) + * @param int $limit number of stories to attempt to fetch (def: 30) + * @param string $filter_key key returned by stream.getFilters to fetch + * @param array $metadata metadata to include with the return, allows + * requested metadata to be returned, such as + * profiles, albums, photo_tags + * + * @return array( + * 'posts' => array of posts, + * // if requested, the following data may be returned + * 'profiles' => array of profile metadata of users/pages in posts + * 'albums' => array of album metadata in posts + * 'photo_tags' => array of photo_tags for photos in posts + * ) + */ + public function &stream_get($viewer_id = null, + $source_ids = null, + $start_time = 0, + $end_time = 0, + $limit = 30, + $filter_key = '', + $exportable_only = false, + $metadata = null, + $post_ids = null) { + $args = array( + 'viewer_id' => $viewer_id, + 'source_ids' => $source_ids, + 'start_time' => $start_time, + 'end_time' => $end_time, + 'limit' => $limit, + 'filter_key' => $filter_key, + 'exportable_only' => $exportable_only, + 'metadata' => $metadata, + 'post_ids' => $post_ids); + return $this->call_method('facebook.stream.get', $args); + } + + /** + * Gets the filters (with relevant filter keys for stream.get) for a + * particular user. These filters are typical things like news feed, + * friend lists, networks. They can be used to filter the stream + * without complex queries to determine which ids belong in which groups. + * + * @param int $uid user to get filters for + * + * @return array of stream filter objects + */ + public function &stream_getFilters($uid = null) { + $args = array('uid' => $uid); + return $this->call_method('facebook.stream.getFilters', $args); + } + + /** + * Gets the full comments given a post_id from stream.get or the + * stream FQL table. Initially, only a set of preview comments are + * returned because some posts can have many comments. + * + * @param string $post_id id of the post to get comments for + * + * @return array of comment objects + */ + public function &stream_getComments($post_id) { + $args = array('post_id' => $post_id); + return $this->call_method('facebook.stream.getComments', $args); + } + + /** + * Sets the FBML for the profile of the user attached to this session. + * + * @param string $markup The FBML that describes the profile + * presence of this app for the user + * @param int $uid The user + * @param string $profile Profile FBML + * @param string $profile_action Profile action FBML (deprecated) + * @param string $mobile_profile Mobile profile FBML + * @param string $profile_main Main Tab profile FBML + * + * @return array A list of strings describing any compile errors for the + * submitted FBML + */ + public function profile_setFBML($markup, + $uid=null, + $profile='', + $profile_action='', + $mobile_profile='', + $profile_main='') { + return $this->call_method('facebook.profile.setFBML', + array('markup' => $markup, + 'uid' => $uid, + 'profile' => $profile, + 'profile_action' => $profile_action, + 'mobile_profile' => $mobile_profile, + 'profile_main' => $profile_main)); + } + + /** + * Gets the FBML for the profile box that is currently set for a user's + * profile (your application set the FBML previously by calling the + * profile.setFBML method). + * + * @param int $uid (Optional) User id to lookup; defaults to session. + * @param int $type (Optional) 1 for original style, 2 for profile_main boxes + * + * @return string The FBML + */ + public function &profile_getFBML($uid=null, $type=null) { + return $this->call_method('facebook.profile.getFBML', + array('uid' => $uid, + 'type' => $type)); + } + + /** + * Returns the specified user's application info section for the calling + * application. These info sections have either been set via a previous + * profile.setInfo call or by the user editing them directly. + * + * @param int $uid (Optional) User id to lookup; defaults to session. + * + * @return array Info fields for the current user. See wiki for structure: + * + * http://wiki.developers.facebook.com/index.php/Profile.getInfo + * + */ + public function &profile_getInfo($uid=null) { + return $this->call_method('facebook.profile.getInfo', + array('uid' => $uid)); + } + + /** + * Returns the options associated with the specified info field for an + * application info section. + * + * @param string $field The title of the field + * + * @return array An array of info options. + */ + public function &profile_getInfoOptions($field) { + return $this->call_method('facebook.profile.getInfoOptions', + array('field' => $field)); + } + + /** + * Configures an application info section that the specified user can install + * on the Info tab of her profile. For details on the structure of an info + * field, please see: + * + * http://wiki.developers.facebook.com/index.php/Profile.setInfo + * + * @param string $title Title / header of the info section + * @param int $type 1 for text-only, 5 for thumbnail views + * @param array $info_fields An array of info fields. See wiki for details. + * @param int $uid (Optional) + * + * @return bool true on success + */ + public function &profile_setInfo($title, $type, $info_fields, $uid=null) { + return $this->call_method('facebook.profile.setInfo', + array('uid' => $uid, + 'type' => $type, + 'title' => $title, + 'info_fields' => json_encode($info_fields))); + } + + /** + * Specifies the objects for a field for an application info section. These + * options populate the typeahead for a thumbnail. + * + * @param string $field The title of the field + * @param array $options An array of items for a thumbnail, including + * 'label', 'link', and optionally 'image', + * 'description' and 'sublabel' + * + * @return bool true on success + */ + public function profile_setInfoOptions($field, $options) { + return $this->call_method('facebook.profile.setInfoOptions', + array('field' => $field, + 'options' => json_encode($options))); + } + + ///////////////////////////////////////////////////////////////////////////// + // Data Store API + + /** + * Set a user preference. + * + * @param pref_id preference identifier (0-200) + * @param value preferece's value + * @param uid the user id (defaults to current session user) + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + * API_EC_PERMISSION_OTHER_USER + */ + public function &data_setUserPreference($pref_id, $value, $uid = null) { + return $this->call_method('facebook.data.setUserPreference', + array('pref_id' => $pref_id, + 'value' => $value, + 'uid' => $this->get_uid($uid))); + } + + /** + * Set a user's all preferences for this application. + * + * @param values preferece values in an associative arrays + * @param replace whether to replace all existing preferences or + * merge into them. + * @param uid the user id (defaults to current session user) + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + * API_EC_PERMISSION_OTHER_USER + */ + public function &data_setUserPreferences($values, + $replace = false, + $uid = null) { + return $this->call_method('facebook.data.setUserPreferences', + array('values' => json_encode($values), + 'replace' => $replace, + 'uid' => $this->get_uid($uid))); + } + + /** + * Get a user preference. + * + * @param pref_id preference identifier (0-200) + * @param uid the user id (defaults to current session user) + * @return preference's value + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + * API_EC_PERMISSION_OTHER_USER + */ + public function &data_getUserPreference($pref_id, $uid = null) { + return $this->call_method('facebook.data.getUserPreference', + array('pref_id' => $pref_id, + 'uid' => $this->get_uid($uid))); + } + + /** + * Get a user preference. + * + * @param uid the user id (defaults to current session user) + * @return preference values + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + * API_EC_PERMISSION_OTHER_USER + */ + public function &data_getUserPreferences($uid = null) { + return $this->call_method('facebook.data.getUserPreferences', + array('uid' => $this->get_uid($uid))); + } + + /** + * Create a new object type. + * + * @param name object type's name + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_ALREADY_EXISTS + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_createObjectType($name) { + return $this->call_method('facebook.data.createObjectType', + array('name' => $name)); + } + + /** + * Delete an object type. + * + * @param obj_type object type's name + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_dropObjectType($obj_type) { + return $this->call_method('facebook.data.dropObjectType', + array('obj_type' => $obj_type)); + } + + /** + * Rename an object type. + * + * @param obj_type object type's name + * @param new_name new object type's name + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_DATA_OBJECT_ALREADY_EXISTS + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_renameObjectType($obj_type, $new_name) { + return $this->call_method('facebook.data.renameObjectType', + array('obj_type' => $obj_type, + 'new_name' => $new_name)); + } + + /** + * Add a new property to an object type. + * + * @param obj_type object type's name + * @param prop_name name of the property to add + * @param prop_type 1: integer; 2: string; 3: text blob + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_ALREADY_EXISTS + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_defineObjectProperty($obj_type, + $prop_name, + $prop_type) { + return $this->call_method('facebook.data.defineObjectProperty', + array('obj_type' => $obj_type, + 'prop_name' => $prop_name, + 'prop_type' => $prop_type)); + } + + /** + * Remove a previously defined property from an object type. + * + * @param obj_type object type's name + * @param prop_name name of the property to remove + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_undefineObjectProperty($obj_type, $prop_name) { + return $this->call_method('facebook.data.undefineObjectProperty', + array('obj_type' => $obj_type, + 'prop_name' => $prop_name)); + } + + /** + * Rename a previously defined property of an object type. + * + * @param obj_type object type's name + * @param prop_name name of the property to rename + * @param new_name new name to use + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_DATA_OBJECT_ALREADY_EXISTS + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_renameObjectProperty($obj_type, $prop_name, + $new_name) { + return $this->call_method('facebook.data.renameObjectProperty', + array('obj_type' => $obj_type, + 'prop_name' => $prop_name, + 'new_name' => $new_name)); + } + + /** + * Retrieve a list of all object types that have defined for the application. + * + * @return a list of object type names + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PERMISSION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getObjectTypes() { + return $this->call_method('facebook.data.getObjectTypes'); + } + + /** + * Get definitions of all properties of an object type. + * + * @param obj_type object type's name + * @return pairs of property name and property types + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getObjectType($obj_type) { + return $this->call_method('facebook.data.getObjectType', + array('obj_type' => $obj_type)); + } + + /** + * Create a new object. + * + * @param obj_type object type's name + * @param properties (optional) properties to set initially + * @return newly created object's id + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_createObject($obj_type, $properties = null) { + return $this->call_method('facebook.data.createObject', + array('obj_type' => $obj_type, + 'properties' => json_encode($properties))); + } + + /** + * Update an existing object. + * + * @param obj_id object's id + * @param properties new properties + * @param replace true for replacing existing properties; + * false for merging + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_updateObject($obj_id, $properties, $replace = false) { + return $this->call_method('facebook.data.updateObject', + array('obj_id' => $obj_id, + 'properties' => json_encode($properties), + 'replace' => $replace)); + } + + /** + * Delete an existing object. + * + * @param obj_id object's id + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_deleteObject($obj_id) { + return $this->call_method('facebook.data.deleteObject', + array('obj_id' => $obj_id)); + } + + /** + * Delete a list of objects. + * + * @param obj_ids objects to delete + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_deleteObjects($obj_ids) { + return $this->call_method('facebook.data.deleteObjects', + array('obj_ids' => json_encode($obj_ids))); + } + + /** + * Get a single property value of an object. + * + * @param obj_id object's id + * @param prop_name individual property's name + * @return individual property's value + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getObjectProperty($obj_id, $prop_name) { + return $this->call_method('facebook.data.getObjectProperty', + array('obj_id' => $obj_id, + 'prop_name' => $prop_name)); + } + + /** + * Get properties of an object. + * + * @param obj_id object's id + * @param prop_names (optional) properties to return; null for all. + * @return specified properties of an object + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getObject($obj_id, $prop_names = null) { + return $this->call_method('facebook.data.getObject', + array('obj_id' => $obj_id, + 'prop_names' => json_encode($prop_names))); + } + + /** + * Get properties of a list of objects. + * + * @param obj_ids object ids + * @param prop_names (optional) properties to return; null for all. + * @return specified properties of an object + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getObjects($obj_ids, $prop_names = null) { + return $this->call_method('facebook.data.getObjects', + array('obj_ids' => json_encode($obj_ids), + 'prop_names' => json_encode($prop_names))); + } + + /** + * Set a single property value of an object. + * + * @param obj_id object's id + * @param prop_name individual property's name + * @param prop_value new value to set + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_setObjectProperty($obj_id, $prop_name, + $prop_value) { + return $this->call_method('facebook.data.setObjectProperty', + array('obj_id' => $obj_id, + 'prop_name' => $prop_name, + 'prop_value' => $prop_value)); + } + + /** + * Read hash value by key. + * + * @param obj_type object type's name + * @param key hash key + * @param prop_name (optional) individual property's name + * @return hash value + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getHashValue($obj_type, $key, $prop_name = null) { + return $this->call_method('facebook.data.getHashValue', + array('obj_type' => $obj_type, + 'key' => $key, + 'prop_name' => $prop_name)); + } + + /** + * Write hash value by key. + * + * @param obj_type object type's name + * @param key hash key + * @param value hash value + * @param prop_name (optional) individual property's name + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_setHashValue($obj_type, + $key, + $value, + $prop_name = null) { + return $this->call_method('facebook.data.setHashValue', + array('obj_type' => $obj_type, + 'key' => $key, + 'value' => $value, + 'prop_name' => $prop_name)); + } + + /** + * Increase a hash value by specified increment atomically. + * + * @param obj_type object type's name + * @param key hash key + * @param prop_name individual property's name + * @param increment (optional) default is 1 + * @return incremented hash value + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_incHashValue($obj_type, + $key, + $prop_name, + $increment = 1) { + return $this->call_method('facebook.data.incHashValue', + array('obj_type' => $obj_type, + 'key' => $key, + 'prop_name' => $prop_name, + 'increment' => $increment)); + } + + /** + * Remove a hash key and its values. + * + * @param obj_type object type's name + * @param key hash key + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_removeHashKey($obj_type, $key) { + return $this->call_method('facebook.data.removeHashKey', + array('obj_type' => $obj_type, + 'key' => $key)); + } + + /** + * Remove hash keys and their values. + * + * @param obj_type object type's name + * @param keys hash keys + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_removeHashKeys($obj_type, $keys) { + return $this->call_method('facebook.data.removeHashKeys', + array('obj_type' => $obj_type, + 'keys' => json_encode($keys))); + } + + /** + * Define an object association. + * + * @param name name of this association + * @param assoc_type 1: one-way 2: two-way symmetric 3: two-way asymmetric + * @param assoc_info1 needed info about first object type + * @param assoc_info2 needed info about second object type + * @param inverse (optional) name of reverse association + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_ALREADY_EXISTS + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_defineAssociation($name, $assoc_type, $assoc_info1, + $assoc_info2, $inverse = null) { + return $this->call_method('facebook.data.defineAssociation', + array('name' => $name, + 'assoc_type' => $assoc_type, + 'assoc_info1' => json_encode($assoc_info1), + 'assoc_info2' => json_encode($assoc_info2), + 'inverse' => $inverse)); + } + + /** + * Undefine an object association. + * + * @param name name of this association + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_undefineAssociation($name) { + return $this->call_method('facebook.data.undefineAssociation', + array('name' => $name)); + } + + /** + * Rename an object association or aliases. + * + * @param name name of this association + * @param new_name (optional) new name of this association + * @param new_alias1 (optional) new alias for object type 1 + * @param new_alias2 (optional) new alias for object type 2 + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_ALREADY_EXISTS + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_renameAssociation($name, $new_name, $new_alias1 = null, + $new_alias2 = null) { + return $this->call_method('facebook.data.renameAssociation', + array('name' => $name, + 'new_name' => $new_name, + 'new_alias1' => $new_alias1, + 'new_alias2' => $new_alias2)); + } + + /** + * Get definition of an object association. + * + * @param name name of this association + * @return specified association + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getAssociationDefinition($name) { + return $this->call_method('facebook.data.getAssociationDefinition', + array('name' => $name)); + } + + /** + * Get definition of all associations. + * + * @return all defined associations + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PERMISSION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getAssociationDefinitions() { + return $this->call_method('facebook.data.getAssociationDefinitions', + array()); + } + + /** + * Create or modify an association between two objects. + * + * @param name name of association + * @param obj_id1 id of first object + * @param obj_id2 id of second object + * @param data (optional) extra string data to store + * @param assoc_time (optional) extra time data; default to creation time + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_setAssociation($name, $obj_id1, $obj_id2, $data = null, + $assoc_time = null) { + return $this->call_method('facebook.data.setAssociation', + array('name' => $name, + 'obj_id1' => $obj_id1, + 'obj_id2' => $obj_id2, + 'data' => $data, + 'assoc_time' => $assoc_time)); + } + + /** + * Create or modify associations between objects. + * + * @param assocs associations to set + * @param name (optional) name of association + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_setAssociations($assocs, $name = null) { + return $this->call_method('facebook.data.setAssociations', + array('assocs' => json_encode($assocs), + 'name' => $name)); + } + + /** + * Remove an association between two objects. + * + * @param name name of association + * @param obj_id1 id of first object + * @param obj_id2 id of second object + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_removeAssociation($name, $obj_id1, $obj_id2) { + return $this->call_method('facebook.data.removeAssociation', + array('name' => $name, + 'obj_id1' => $obj_id1, + 'obj_id2' => $obj_id2)); + } + + /** + * Remove associations between objects by specifying pairs of object ids. + * + * @param assocs associations to remove + * @param name (optional) name of association + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_removeAssociations($assocs, $name = null) { + return $this->call_method('facebook.data.removeAssociations', + array('assocs' => json_encode($assocs), + 'name' => $name)); + } + + /** + * Remove associations between objects by specifying one object id. + * + * @param name name of association + * @param obj_id who's association to remove + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_removeAssociatedObjects($name, $obj_id) { + return $this->call_method('facebook.data.removeAssociatedObjects', + array('name' => $name, + 'obj_id' => $obj_id)); + } + + /** + * Retrieve a list of associated objects. + * + * @param name name of association + * @param obj_id who's association to retrieve + * @param no_data only return object ids + * @return associated objects + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getAssociatedObjects($name, $obj_id, $no_data = true) { + return $this->call_method('facebook.data.getAssociatedObjects', + array('name' => $name, + 'obj_id' => $obj_id, + 'no_data' => $no_data)); + } + + /** + * Count associated objects. + * + * @param name name of association + * @param obj_id who's association to retrieve + * @return associated object's count + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getAssociatedObjectCount($name, $obj_id) { + return $this->call_method('facebook.data.getAssociatedObjectCount', + array('name' => $name, + 'obj_id' => $obj_id)); + } + + /** + * Get a list of associated object counts. + * + * @param name name of association + * @param obj_ids whose association to retrieve + * @return associated object counts + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_DATA_OBJECT_NOT_FOUND + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_INVALID_OPERATION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getAssociatedObjectCounts($name, $obj_ids) { + return $this->call_method('facebook.data.getAssociatedObjectCounts', + array('name' => $name, + 'obj_ids' => json_encode($obj_ids))); + } + + /** + * Find all associations between two objects. + * + * @param obj_id1 id of first object + * @param obj_id2 id of second object + * @param no_data only return association names without data + * @return all associations between objects + * @error + * API_EC_DATA_DATABASE_ERROR + * API_EC_PARAM + * API_EC_PERMISSION + * API_EC_DATA_QUOTA_EXCEEDED + * API_EC_DATA_UNKNOWN_ERROR + */ + public function &data_getAssociations($obj_id1, $obj_id2, $no_data = true) { + return $this->call_method('facebook.data.getAssociations', + array('obj_id1' => $obj_id1, + 'obj_id2' => $obj_id2, + 'no_data' => $no_data)); + } + + /** + * Get the properties that you have set for an app. + * + * @param properties List of properties names to fetch + * + * @return array A map from property name to value + */ + public function admin_getAppProperties($properties) { + return json_decode( + $this->call_method('facebook.admin.getAppProperties', + array('properties' => json_encode($properties))), true); + } + + /** + * Set properties for an app. + * + * @param properties A map from property names to values + * + * @return bool true on success + */ + public function admin_setAppProperties($properties) { + return $this->call_method('facebook.admin.setAppProperties', + array('properties' => json_encode($properties))); + } + + /** + * Sets href and text for a Live Stream Box xid's via link + * + * @param string $xid xid of the Live Stream + * @param string $via_href Href for the via link + * @param string $via_text Text for the via link + * + * @return boolWhether the set was successful + */ + public function admin_setLiveStreamViaLink($xid, $via_href, $via_text) { + return $this->call_method('facebook.admin.setLiveStreamViaLink', + array('xid' => $xid, + 'via_href' => $via_href, + 'via_text' => $via_text)); + } + + /** + * Gets href and text for a Live Stream Box xid's via link + * + * @param string $xid xid of the Live Stream + * + * @return Array Associative array with keys 'via_href' and 'via_text' + * False if there was an error. + */ + public function admin_getLiveStreamViaLink($xid) { + return $this->call_method('facebook.admin.getLiveStreamViaLink', + array('xid' => $xid)); + } + + /** + * Returns the allocation limit value for a specified integration point name + * Integration point names are defined in lib/api/karma/constants.php in the + * limit_map. + * + * @param string $integration_point_name Name of an integration point + * (see developer wiki for list). + * @param int $uid Specific user to check the limit. + * + * @return int Integration point allocation value + */ + public function &admin_getAllocation($integration_point_name, $uid=null) { + return $this->call_method('facebook.admin.getAllocation', + array('integration_point_name' => $integration_point_name, + 'uid' => $uid)); + } + + /** + * Returns values for the specified metrics for the current application, in + * the given time range. The metrics are collected for fixed-length periods, + * and the times represent midnight at the end of each period. + * + * @param start_time unix time for the start of the range + * @param end_time unix time for the end of the range + * @param period number of seconds in the desired period + * @param metrics list of metrics to look up + * + * @return array A map of the names and values for those metrics + */ + public function &admin_getMetrics($start_time, $end_time, $period, $metrics) { + return $this->call_method('admin.getMetrics', + array('start_time' => $start_time, + 'end_time' => $end_time, + 'period' => $period, + 'metrics' => json_encode($metrics))); + } + + /** + * Sets application restriction info. + * + * Applications can restrict themselves to only a limited user demographic + * based on users' age and/or location or based on static predefined types + * specified by facebook for specifying diff age restriction for diff + * locations. + * + * @param array $restriction_info The age restriction settings to set. + * + * @return bool true on success + */ + public function admin_setRestrictionInfo($restriction_info = null) { + $restriction_str = null; + if (!empty($restriction_info)) { + $restriction_str = json_encode($restriction_info); + } + return $this->call_method('admin.setRestrictionInfo', + array('restriction_str' => $restriction_str)); + } + + /** + * Gets application restriction info. + * + * Applications can restrict themselves to only a limited user demographic + * based on users' age and/or location or based on static predefined types + * specified by facebook for specifying diff age restriction for diff + * locations. + * + * @return array The age restriction settings for this application. + */ + public function admin_getRestrictionInfo() { + return json_decode( + $this->call_method('admin.getRestrictionInfo'), + true); + } + + + /** + * Bans a list of users from the app. Banned users can't + * access the app's canvas page and forums. + * + * @param array $uids an array of user ids + * @return bool true on success + */ + public function admin_banUsers($uids) { + return $this->call_method( + 'admin.banUsers', array('uids' => json_encode($uids))); + } + + /** + * Unban users that have been previously banned with + * admin_banUsers(). + * + * @param array $uids an array of user ids + * @return bool true on success + */ + public function admin_unbanUsers($uids) { + return $this->call_method( + 'admin.unbanUsers', array('uids' => json_encode($uids))); + } + + /** + * Gets the list of users that have been banned from the application. + * $uids is an optional parameter that filters the result with the list + * of provided user ids. If $uids is provided, + * only banned user ids that are contained in $uids are returned. + * + * @param array $uids an array of user ids to filter by + * @return bool true on success + */ + + public function admin_getBannedUsers($uids = null) { + return $this->call_method( + 'admin.getBannedUsers', + array('uids' => $uids ? json_encode($uids) : null)); + } + + + /* UTILITY FUNCTIONS */ + + /** + * Calls the specified normal POST method with the specified parameters. + * + * @param string $method Name of the Facebook method to invoke + * @param array $params A map of param names => param values + * + * @return mixed Result of method call; this returns a reference to support + * 'delayed returns' when in a batch context. + * See: http://wiki.developers.facebook.com/index.php/Using_batching_API + */ + public function &call_method($method, $params = array()) { + if ($this->format) { + $params['format'] = $this->format; + } + if (!$this->pending_batch()) { + if ($this->call_as_apikey) { + $params['call_as_apikey'] = $this->call_as_apikey; + } + $data = $this->post_request($method, $params); + $this->rawData = $data; + $result = $this->convert_result($data, $method, $params); + if (is_array($result) && isset($result['error_code'])) { + throw new FacebookRestClientException($result['error_msg'], + $result['error_code']); + } + } + else { + $result = null; + $batch_item = array('m' => $method, 'p' => $params, 'r' => & $result); + $this->batch_queue[] = $batch_item; + } + + return $result; + } + + protected function convert_result($data, $method, $params) { + $is_xml = (empty($params['format']) || + strtolower($params['format']) != 'json'); + return ($is_xml) ? $this->convert_xml_to_result($data, $method, $params) + : json_decode($data, true); + } + + /** + * Change the response format + * + * @param string $format The response format (json, xml) + */ + public function setFormat($format) { + $this->format = $format; + return $this; + } + + /** + * get the current response serialization format + * + * @return string 'xml', 'json', or null (which means 'xml') + */ + public function getFormat() { + return $this->format; + } + + /** + * Returns the raw JSON or XML output returned by the server in the most + * recent API call. + * + * @return string + */ + public function getRawData() { + return $this->rawData; + } + + /** + * Calls the specified file-upload POST method with the specified parameters + * + * @param string $method Name of the Facebook method to invoke + * @param array $params A map of param names => param values + * @param string $file A path to the file to upload (required) + * + * @return array A dictionary representing the response. + */ + public function call_upload_method($method, $params, $file, $server_addr = null) { + if (!$this->pending_batch()) { + if (!file_exists($file)) { + $code = + FacebookAPIErrorCodes::API_EC_PARAM; + $description = FacebookAPIErrorCodes::$api_error_descriptions[$code]; + throw new FacebookRestClientException($description, $code); + } + + if ($this->format) { + $params['format'] = $this->format; + } + $data = $this->post_upload_request($method, + $params, + $file, + $server_addr); + $result = $this->convert_result($data, $method, $params); + + if (is_array($result) && isset($result['error_code'])) { + throw new FacebookRestClientException($result['error_msg'], + $result['error_code']); + } + } + else { + $code = + FacebookAPIErrorCodes::API_EC_BATCH_METHOD_NOT_ALLOWED_IN_BATCH_MODE; + $description = FacebookAPIErrorCodes::$api_error_descriptions[$code]; + throw new FacebookRestClientException($description, $code); + } + + return $result; + } + + protected function convert_xml_to_result($xml, $method, $params) { + $sxml = simplexml_load_string($xml); + $result = self::convert_simplexml_to_array($sxml); + + if (!empty($GLOBALS['facebook_config']['debug'])) { + // output the raw xml and its corresponding php object, for debugging: + print '
'; + $this->cur_id++; + print $this->cur_id . ': Called ' . $method . ', show ' . + 'Params | '. + 'XML | '. + 'SXML | '. + 'PHP'; + print ''; + print ''; + print ''; + print ''; + print '
'; + } + return $result; + } + + protected function finalize_params($method, $params) { + list($get, $post) = $this->add_standard_params($method, $params); + // we need to do this before signing the params + $this->convert_array_values_to_json($post); + $post['sig'] = Facebook::generate_sig(array_merge($get, $post), + $this->secret); + return array($get, $post); + } + + private function convert_array_values_to_json(&$params) { + foreach ($params as $key => &$val) { + if (is_array($val)) { + $val = json_encode($val); + } + } + } + + /** + * Add the generally required params to our request. + * Params method, api_key, and v should be sent over as get. + */ + private function add_standard_params($method, $params) { + $post = $params; + $get = array(); + if ($this->call_as_apikey) { + $get['call_as_apikey'] = $this->call_as_apikey; + } + if ($this->using_session_secret) { + $get['ss'] = '1'; + } + + $get['method'] = $method; + $get['session_key'] = $this->session_key; + $get['api_key'] = $this->api_key; + $post['call_id'] = microtime(true); + if ($post['call_id'] <= $this->last_call_id) { + $post['call_id'] = $this->last_call_id + 0.001; + } + $this->last_call_id = $post['call_id']; + if (isset($post['v'])) { + $get['v'] = $post['v']; + unset($post['v']); + } else { + $get['v'] = '1.0'; + } + if (isset($this->use_ssl_resources)) { + $post['return_ssl_resources'] = (bool) $this->use_ssl_resources; + } + return array($get, $post); + } + + private function create_url_string($params) { + $post_params = array(); + foreach ($params as $key => &$val) { + $post_params[] = $key.'='.urlencode($val); + } + return implode('&', $post_params); + } + + private function run_multipart_http_transaction($method, $params, $file, $server_addr) { + + // the format of this message is specified in RFC1867/RFC1341. + // we add twenty pseudo-random digits to the end of the boundary string. + $boundary = '--------------------------FbMuLtIpArT' . + sprintf("%010d", mt_rand()) . + sprintf("%010d", mt_rand()); + $content_type = 'multipart/form-data; boundary=' . $boundary; + // within the message, we prepend two extra hyphens. + $delimiter = '--' . $boundary; + $close_delimiter = $delimiter . '--'; + $content_lines = array(); + foreach ($params as $key => &$val) { + $content_lines[] = $delimiter; + $content_lines[] = 'Content-Disposition: form-data; name="' . $key . '"'; + $content_lines[] = ''; + $content_lines[] = $val; + } + // now add the file data + $content_lines[] = $delimiter; + $content_lines[] = + 'Content-Disposition: form-data; filename="' . $file . '"'; + $content_lines[] = 'Content-Type: application/octet-stream'; + $content_lines[] = ''; + $content_lines[] = file_get_contents($file); + $content_lines[] = $close_delimiter; + $content_lines[] = ''; + $content = implode("\r\n", $content_lines); + return $this->run_http_post_transaction($content_type, $content, $server_addr); + } + + public function post_request($method, $params) { + list($get, $post) = $this->finalize_params($method, $params); + $post_string = $this->create_url_string($post); + $get_string = $this->create_url_string($get); + $url_with_get = $this->server_addr . '?' . $get_string; + if ($this->use_curl_if_available && function_exists('curl_init')) { + $useragent = 'Facebook API PHP5 Client 1.1 (curl) ' . phpversion(); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url_with_get); + curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_USERAGENT, $useragent); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + $result = $this->curl_exec($ch); + curl_close($ch); + } else { + $content_type = 'application/x-www-form-urlencoded'; + $content = $post_string; + $result = $this->run_http_post_transaction($content_type, + $content, + $url_with_get); + } + return $result; + } + + /** + * execute a curl transaction -- this exists mostly so subclasses can add + * extra options and/or process the response, if they wish. + * + * @param resource $ch a curl handle + */ + protected function curl_exec($ch) { + $result = curl_exec($ch); + return $result; + } + + protected function post_upload_request($method, $params, $file, $server_addr = null) { + $server_addr = $server_addr ? $server_addr : $this->server_addr; + list($get, $post) = $this->finalize_params($method, $params); + $get_string = $this->create_url_string($get); + $url_with_get = $server_addr . '?' . $get_string; + if ($this->use_curl_if_available && function_exists('curl_init')) { + // prepending '@' causes cURL to upload the file; the key is ignored. + $post['_file'] = '@' . $file; + $useragent = 'Facebook API PHP5 Client 1.1 (curl) ' . phpversion(); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url_with_get); + // this has to come before the POSTFIELDS set! + curl_setopt($ch, CURLOPT_POST, 1); + // passing an array gets curl to use the multipart/form-data content type + curl_setopt($ch, CURLOPT_POSTFIELDS, $post); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_USERAGENT, $useragent); + $result = $this->curl_exec($ch); + curl_close($ch); + } else { + $result = $this->run_multipart_http_transaction($method, $post, + $file, $url_with_get); + } + return $result; + } + + private function run_http_post_transaction($content_type, $content, $server_addr) { + + $user_agent = 'Facebook API PHP5 Client 1.1 (non-curl) ' . phpversion(); + $content_length = strlen($content); + $context = + array('http' => + array('method' => 'POST', + 'user_agent' => $user_agent, + 'header' => 'Content-Type: ' . $content_type . "\r\n" . + 'Content-Length: ' . $content_length, + 'content' => $content)); + $context_id = stream_context_create($context); + $sock = fopen($server_addr, 'r', false, $context_id); + + $result = ''; + if ($sock) { + while (!feof($sock)) { + $result .= fgets($sock, 4096); + } + fclose($sock); + } + return $result; + } + + public static function convert_simplexml_to_array($sxml) { + $arr = array(); + if ($sxml) { + foreach ($sxml as $k => $v) { + if ($sxml['list']) { + $arr[] = self::convert_simplexml_to_array($v); + } else { + $arr[$k] = self::convert_simplexml_to_array($v); + } + } + } + if (sizeof($arr) > 0) { + return $arr; + } else { + return (string)$sxml; + } + } + + protected function get_uid($uid) { + return $uid ? $uid : $this->user; + } +} + + +class FacebookRestClientException extends Exception { +} + +// Supporting methods and values------ + +/** + * Error codes and descriptions for the Facebook API. + */ + +class FacebookAPIErrorCodes { + + const API_EC_SUCCESS = 0; + + /* + * GENERAL ERRORS + */ + const API_EC_UNKNOWN = 1; + const API_EC_SERVICE = 2; + const API_EC_METHOD = 3; + const API_EC_TOO_MANY_CALLS = 4; + const API_EC_BAD_IP = 5; + const API_EC_HOST_API = 6; + const API_EC_HOST_UP = 7; + const API_EC_SECURE = 8; + const API_EC_RATE = 9; + const API_EC_PERMISSION_DENIED = 10; + const API_EC_DEPRECATED = 11; + const API_EC_VERSION = 12; + const API_EC_INTERNAL_FQL_ERROR = 13; + const API_EC_HOST_PUP = 14; + const API_EC_SESSION_SECRET_NOT_ALLOWED = 15; + const API_EC_HOST_READONLY = 16; + + /* + * PARAMETER ERRORS + */ + const API_EC_PARAM = 100; + const API_EC_PARAM_API_KEY = 101; + const API_EC_PARAM_SESSION_KEY = 102; + const API_EC_PARAM_CALL_ID = 103; + const API_EC_PARAM_SIGNATURE = 104; + const API_EC_PARAM_TOO_MANY = 105; + const API_EC_PARAM_USER_ID = 110; + const API_EC_PARAM_USER_FIELD = 111; + const API_EC_PARAM_SOCIAL_FIELD = 112; + const API_EC_PARAM_EMAIL = 113; + const API_EC_PARAM_USER_ID_LIST = 114; + const API_EC_PARAM_FIELD_LIST = 115; + const API_EC_PARAM_ALBUM_ID = 120; + const API_EC_PARAM_PHOTO_ID = 121; + const API_EC_PARAM_FEED_PRIORITY = 130; + const API_EC_PARAM_CATEGORY = 140; + const API_EC_PARAM_SUBCATEGORY = 141; + const API_EC_PARAM_TITLE = 142; + const API_EC_PARAM_DESCRIPTION = 143; + const API_EC_PARAM_BAD_JSON = 144; + const API_EC_PARAM_BAD_EID = 150; + const API_EC_PARAM_UNKNOWN_CITY = 151; + const API_EC_PARAM_BAD_PAGE_TYPE = 152; + const API_EC_PARAM_BAD_LOCALE = 170; + const API_EC_PARAM_BLOCKED_NOTIFICATION = 180; + + /* + * USER PERMISSIONS ERRORS + */ + const API_EC_PERMISSION = 200; + const API_EC_PERMISSION_USER = 210; + const API_EC_PERMISSION_NO_DEVELOPERS = 211; + const API_EC_PERMISSION_OFFLINE_ACCESS = 212; + const API_EC_PERMISSION_ALBUM = 220; + const API_EC_PERMISSION_PHOTO = 221; + const API_EC_PERMISSION_MESSAGE = 230; + const API_EC_PERMISSION_OTHER_USER = 240; + const API_EC_PERMISSION_STATUS_UPDATE = 250; + const API_EC_PERMISSION_PHOTO_UPLOAD = 260; + const API_EC_PERMISSION_VIDEO_UPLOAD = 261; + const API_EC_PERMISSION_SMS = 270; + const API_EC_PERMISSION_CREATE_LISTING = 280; + const API_EC_PERMISSION_CREATE_NOTE = 281; + const API_EC_PERMISSION_SHARE_ITEM = 282; + const API_EC_PERMISSION_EVENT = 290; + const API_EC_PERMISSION_LARGE_FBML_TEMPLATE = 291; + const API_EC_PERMISSION_LIVEMESSAGE = 292; + const API_EC_PERMISSION_CREATE_EVENT = 296; + const API_EC_PERMISSION_RSVP_EVENT = 299; + + /* + * DATA EDIT ERRORS + */ + const API_EC_EDIT = 300; + const API_EC_EDIT_USER_DATA = 310; + const API_EC_EDIT_PHOTO = 320; + const API_EC_EDIT_ALBUM_SIZE = 321; + const API_EC_EDIT_PHOTO_TAG_SUBJECT = 322; + const API_EC_EDIT_PHOTO_TAG_PHOTO = 323; + const API_EC_EDIT_PHOTO_FILE = 324; + const API_EC_EDIT_PHOTO_PENDING_LIMIT = 325; + const API_EC_EDIT_PHOTO_TAG_LIMIT = 326; + const API_EC_EDIT_ALBUM_REORDER_PHOTO_NOT_IN_ALBUM = 327; + const API_EC_EDIT_ALBUM_REORDER_TOO_FEW_PHOTOS = 328; + + const API_EC_MALFORMED_MARKUP = 329; + const API_EC_EDIT_MARKUP = 330; + + const API_EC_EDIT_FEED_TOO_MANY_USER_CALLS = 340; + const API_EC_EDIT_FEED_TOO_MANY_USER_ACTION_CALLS = 341; + const API_EC_EDIT_FEED_TITLE_LINK = 342; + const API_EC_EDIT_FEED_TITLE_LENGTH = 343; + const API_EC_EDIT_FEED_TITLE_NAME = 344; + const API_EC_EDIT_FEED_TITLE_BLANK = 345; + const API_EC_EDIT_FEED_BODY_LENGTH = 346; + const API_EC_EDIT_FEED_PHOTO_SRC = 347; + const API_EC_EDIT_FEED_PHOTO_LINK = 348; + + const API_EC_EDIT_VIDEO_SIZE = 350; + const API_EC_EDIT_VIDEO_INVALID_FILE = 351; + const API_EC_EDIT_VIDEO_INVALID_TYPE = 352; + const API_EC_EDIT_VIDEO_FILE = 353; + + const API_EC_EDIT_FEED_TITLE_ARRAY = 360; + const API_EC_EDIT_FEED_TITLE_PARAMS = 361; + const API_EC_EDIT_FEED_BODY_ARRAY = 362; + const API_EC_EDIT_FEED_BODY_PARAMS = 363; + const API_EC_EDIT_FEED_PHOTO = 364; + const API_EC_EDIT_FEED_TEMPLATE = 365; + const API_EC_EDIT_FEED_TARGET = 366; + const API_EC_EDIT_FEED_MARKUP = 367; + + /** + * SESSION ERRORS + */ + const API_EC_SESSION_TIMED_OUT = 450; + const API_EC_SESSION_METHOD = 451; + const API_EC_SESSION_INVALID = 452; + const API_EC_SESSION_REQUIRED = 453; + const API_EC_SESSION_REQUIRED_FOR_SECRET = 454; + const API_EC_SESSION_CANNOT_USE_SESSION_SECRET = 455; + + + /** + * FQL ERRORS + */ + const FQL_EC_UNKNOWN_ERROR = 600; + const FQL_EC_PARSER = 601; // backwards compatibility + const FQL_EC_PARSER_ERROR = 601; + const FQL_EC_UNKNOWN_FIELD = 602; + const FQL_EC_UNKNOWN_TABLE = 603; + const FQL_EC_NOT_INDEXABLE = 604; // backwards compatibility + const FQL_EC_NO_INDEX = 604; + const FQL_EC_UNKNOWN_FUNCTION = 605; + const FQL_EC_INVALID_PARAM = 606; + const FQL_EC_INVALID_FIELD = 607; + const FQL_EC_INVALID_SESSION = 608; + const FQL_EC_UNSUPPORTED_APP_TYPE = 609; + const FQL_EC_SESSION_SECRET_NOT_ALLOWED = 610; + const FQL_EC_DEPRECATED_TABLE = 611; + const FQL_EC_EXTENDED_PERMISSION = 612; + const FQL_EC_RATE_LIMIT_EXCEEDED = 613; + const FQL_EC_UNRESOLVED_DEPENDENCY = 614; + const FQL_EC_INVALID_SEARCH = 615; + const FQL_EC_CONTAINS_ERROR = 616; + + const API_EC_REF_SET_FAILED = 700; + + /** + * DATA STORE API ERRORS + */ + const API_EC_DATA_UNKNOWN_ERROR = 800; + const API_EC_DATA_INVALID_OPERATION = 801; + const API_EC_DATA_QUOTA_EXCEEDED = 802; + const API_EC_DATA_OBJECT_NOT_FOUND = 803; + const API_EC_DATA_OBJECT_ALREADY_EXISTS = 804; + const API_EC_DATA_DATABASE_ERROR = 805; + const API_EC_DATA_CREATE_TEMPLATE_ERROR = 806; + const API_EC_DATA_TEMPLATE_EXISTS_ERROR = 807; + const API_EC_DATA_TEMPLATE_HANDLE_TOO_LONG = 808; + const API_EC_DATA_TEMPLATE_HANDLE_ALREADY_IN_USE = 809; + const API_EC_DATA_TOO_MANY_TEMPLATE_BUNDLES = 810; + const API_EC_DATA_MALFORMED_ACTION_LINK = 811; + const API_EC_DATA_TEMPLATE_USES_RESERVED_TOKEN = 812; + + /* + * APPLICATION INFO ERRORS + */ + const API_EC_NO_SUCH_APP = 900; + + /* + * BATCH ERRORS + */ + const API_EC_BATCH_TOO_MANY_ITEMS = 950; + const API_EC_BATCH_ALREADY_STARTED = 951; + const API_EC_BATCH_NOT_STARTED = 952; + const API_EC_BATCH_METHOD_NOT_ALLOWED_IN_BATCH_MODE = 953; + + /* + * EVENT API ERRORS + */ + const API_EC_EVENT_INVALID_TIME = 1000; + const API_EC_EVENT_NAME_LOCKED = 1001; + + /* + * INFO BOX ERRORS + */ + const API_EC_INFO_NO_INFORMATION = 1050; + const API_EC_INFO_SET_FAILED = 1051; + + /* + * LIVEMESSAGE API ERRORS + */ + const API_EC_LIVEMESSAGE_SEND_FAILED = 1100; + const API_EC_LIVEMESSAGE_EVENT_NAME_TOO_LONG = 1101; + const API_EC_LIVEMESSAGE_MESSAGE_TOO_LONG = 1102; + + /* + * PAYMENTS API ERRORS + */ + const API_EC_PAYMENTS_UNKNOWN = 1150; + const API_EC_PAYMENTS_APP_INVALID = 1151; + const API_EC_PAYMENTS_DATABASE = 1152; + const API_EC_PAYMENTS_PERMISSION_DENIED = 1153; + const API_EC_PAYMENTS_APP_NO_RESPONSE = 1154; + const API_EC_PAYMENTS_APP_ERROR_RESPONSE = 1155; + const API_EC_PAYMENTS_INVALID_ORDER = 1156; + const API_EC_PAYMENTS_INVALID_PARAM = 1157; + const API_EC_PAYMENTS_INVALID_OPERATION = 1158; + const API_EC_PAYMENTS_PAYMENT_FAILED = 1159; + const API_EC_PAYMENTS_DISABLED = 1160; + + /* + * CONNECT SESSION ERRORS + */ + const API_EC_CONNECT_FEED_DISABLED = 1300; + + /* + * Platform tag bundles errors + */ + const API_EC_TAG_BUNDLE_QUOTA = 1400; + + /* + * SHARE + */ + const API_EC_SHARE_BAD_URL = 1500; + + /* + * NOTES + */ + const API_EC_NOTE_CANNOT_MODIFY = 1600; + + /* + * COMMENTS + */ + const API_EC_COMMENTS_UNKNOWN = 1700; + const API_EC_COMMENTS_POST_TOO_LONG = 1701; + const API_EC_COMMENTS_DB_DOWN = 1702; + const API_EC_COMMENTS_INVALID_XID = 1703; + const API_EC_COMMENTS_INVALID_UID = 1704; + const API_EC_COMMENTS_INVALID_POST = 1705; + const API_EC_COMMENTS_INVALID_REMOVE = 1706; + + /* + * GIFTS + */ + const API_EC_GIFTS_UNKNOWN = 1900; + + /* + * APPLICATION MORATORIUM ERRORS + */ + const API_EC_DISABLED_ALL = 2000; + const API_EC_DISABLED_STATUS = 2001; + const API_EC_DISABLED_FEED_STORIES = 2002; + const API_EC_DISABLED_NOTIFICATIONS = 2003; + const API_EC_DISABLED_REQUESTS = 2004; + const API_EC_DISABLED_EMAIL = 2005; + + /** + * This array is no longer maintained; to view the description of an error + * code, please look at the message element of the API response or visit + * the developer wiki at http://wiki.developers.facebook.com/. + */ + public static $api_error_descriptions = array( + self::API_EC_SUCCESS => 'Success', + self::API_EC_UNKNOWN => 'An unknown error occurred', + self::API_EC_SERVICE => 'Service temporarily unavailable', + self::API_EC_METHOD => 'Unknown method', + self::API_EC_TOO_MANY_CALLS => 'Application request limit reached', + self::API_EC_BAD_IP => 'Unauthorized source IP address', + self::API_EC_PARAM => 'Invalid parameter', + self::API_EC_PARAM_API_KEY => 'Invalid API key', + self::API_EC_PARAM_SESSION_KEY => 'Session key invalid or no longer valid', + self::API_EC_PARAM_CALL_ID => 'Call_id must be greater than previous', + self::API_EC_PARAM_SIGNATURE => 'Incorrect signature', + self::API_EC_PARAM_USER_ID => 'Invalid user id', + self::API_EC_PARAM_USER_FIELD => 'Invalid user info field', + self::API_EC_PARAM_SOCIAL_FIELD => 'Invalid user field', + self::API_EC_PARAM_USER_ID_LIST => 'Invalid user id list', + self::API_EC_PARAM_FIELD_LIST => 'Invalid field list', + self::API_EC_PARAM_ALBUM_ID => 'Invalid album id', + self::API_EC_PARAM_BAD_EID => 'Invalid eid', + self::API_EC_PARAM_UNKNOWN_CITY => 'Unknown city', + self::API_EC_PERMISSION => 'Permissions error', + self::API_EC_PERMISSION_USER => 'User not visible', + self::API_EC_PERMISSION_NO_DEVELOPERS => 'Application has no developers', + self::API_EC_PERMISSION_ALBUM => 'Album not visible', + self::API_EC_PERMISSION_PHOTO => 'Photo not visible', + self::API_EC_PERMISSION_EVENT => 'Creating and modifying events required the extended permission create_event', + self::API_EC_PERMISSION_RSVP_EVENT => 'RSVPing to events required the extended permission rsvp_event', + self::API_EC_EDIT_ALBUM_SIZE => 'Album is full', + self::FQL_EC_PARSER => 'FQL: Parser Error', + self::FQL_EC_UNKNOWN_FIELD => 'FQL: Unknown Field', + self::FQL_EC_UNKNOWN_TABLE => 'FQL: Unknown Table', + self::FQL_EC_NOT_INDEXABLE => 'FQL: Statement not indexable', + self::FQL_EC_UNKNOWN_FUNCTION => 'FQL: Attempted to call unknown function', + self::FQL_EC_INVALID_PARAM => 'FQL: Invalid parameter passed in', + self::API_EC_DATA_UNKNOWN_ERROR => 'Unknown data store API error', + self::API_EC_DATA_INVALID_OPERATION => 'Invalid operation', + self::API_EC_DATA_QUOTA_EXCEEDED => 'Data store allowable quota was exceeded', + self::API_EC_DATA_OBJECT_NOT_FOUND => 'Specified object cannot be found', + self::API_EC_DATA_OBJECT_ALREADY_EXISTS => 'Specified object already exists', + self::API_EC_DATA_DATABASE_ERROR => 'A database error occurred. Please try again', + self::API_EC_BATCH_ALREADY_STARTED => 'begin_batch already called, please make sure to call end_batch first', + self::API_EC_BATCH_NOT_STARTED => 'end_batch called before begin_batch', + self::API_EC_BATCH_METHOD_NOT_ALLOWED_IN_BATCH_MODE => 'This method is not allowed in batch mode' + ); +} diff --git a/plugins/FacebookSSO/extlib/jsonwrapper/JSON/JSON.php b/plugins/FacebookSSO/extlib/jsonwrapper/JSON/JSON.php new file mode 100644 index 0000000000..0cddbddb41 --- /dev/null +++ b/plugins/FacebookSSO/extlib/jsonwrapper/JSON/JSON.php @@ -0,0 +1,806 @@ + + * @author Matt Knapp + * @author Brett Stimmerman + * @copyright 2005 Michal Migurski + * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_SLICE', 1); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_STR', 2); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_ARR', 3); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_OBJ', 4); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_CMT', 5); + +/** + * Behavior switch for Services_JSON::decode() + */ +define('SERVICES_JSON_LOOSE_TYPE', 16); + +/** + * Behavior switch for Services_JSON::decode() + */ +define('SERVICES_JSON_SUPPRESS_ERRORS', 32); + +/** + * Converts to and from JSON format. + * + * Brief example of use: + * + * + * // create a new instance of Services_JSON + * $json = new Services_JSON(); + * + * // convert a complexe value to JSON notation, and send it to the browser + * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); + * $output = $json->encode($value); + * + * print($output); + * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] + * + * // accept incoming POST data, assumed to be in JSON notation + * $input = file_get_contents('php://input', 1000000); + * $value = $json->decode($input); + * + */ +class Services_JSON +{ + /** + * constructs a new JSON instance + * + * @param int $use object behavior flags; combine with boolean-OR + * + * possible values: + * - SERVICES_JSON_LOOSE_TYPE: loose typing. + * "{...}" syntax creates associative arrays + * instead of objects in decode(). + * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. + * Values which can't be encoded (e.g. resources) + * appear as NULL instead of throwing errors. + * By default, a deeply-nested resource will + * bubble up with an error, so all return values + * from encode() should be checked with isError() + */ + function Services_JSON($use = 0) + { + $this->use = $use; + } + + /** + * convert a string from one UTF-16 char to one UTF-8 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf16 UTF-16 character + * @return string UTF-8 character + * @access private + */ + function utf162utf8($utf16) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); + } + + $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); + + switch(true) { + case ((0x7F & $bytes) == $bytes): + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x7F & $bytes); + + case (0x07FF & $bytes) == $bytes: + // return a 2-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xC0 | (($bytes >> 6) & 0x1F)) + . chr(0x80 | ($bytes & 0x3F)); + + case (0xFFFF & $bytes) == $bytes: + // return a 3-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xE0 | (($bytes >> 12) & 0x0F)) + . chr(0x80 | (($bytes >> 6) & 0x3F)) + . chr(0x80 | ($bytes & 0x3F)); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * convert a string from one UTF-8 char to one UTF-16 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf8 UTF-8 character + * @return string UTF-16 character + * @access private + */ + function utf82utf16($utf8) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + } + + switch(strlen($utf8)) { + case 1: + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; + + case 2: + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8{0}) >> 2)) + . chr((0xC0 & (ord($utf8{0}) << 6)) + | (0x3F & ord($utf8{1}))); + + case 3: + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8{0}) << 4)) + | (0x0F & (ord($utf8{1}) >> 2))) + . chr((0xC0 & (ord($utf8{1}) << 6)) + | (0x7F & ord($utf8{2}))); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + function encode($var) + { + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return (int) $var; + + case 'double': + case 'float': + return (float) $var; + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = strlen($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var{$c}); + + switch (true) { + case $ord_var_c == 0x08: + $ascii .= '\b'; + break; + case $ord_var_c == 0x09: + $ascii .= '\t'; + break; + case $ord_var_c == 0x0A: + $ascii .= '\n'; + break; + case $ord_var_c == 0x0C: + $ascii .= '\f'; + break; + case $ord_var_c == 0x0D: + $ascii .= '\r'; + break; + + case $ord_var_c == 0x22: + case $ord_var_c == 0x2F: + case $ord_var_c == 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var{$c}; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var{$c}; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, ord($var{$c + 1})); + $c += 1; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2})); + $c += 2; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3})); + $c += 3; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4})); + $c += 4; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4}), + ord($var{$c + 5})); + $c += 5; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + $properties = array_map(array($this, 'name_value'), + array_keys($var), + array_values($var)); + + foreach($properties as $property) { + if(Services_JSON::isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + } + + // treat it like a regular array + $elements = array_map(array($this, 'encode'), $var); + + foreach($elements as $element) { + if(Services_JSON::isError($element)) { + return $element; + } + } + + return '[' . join(',', $elements) . ']'; + + case 'object': + $vars = get_object_vars($var); + + $properties = array_map(array($this, 'name_value'), + array_keys($vars), + array_values($vars)); + + foreach($properties as $property) { + if(Services_JSON::isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + + default: + return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) + ? 'null' + : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); + } + } + + /** + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + function name_value($name, $value) + { + $encoded_value = $this->encode($value); + + if(Services_JSON::isError($encoded_value)) { + return $encoded_value; + } + + return $this->encode(strval($name)) . ':' . $encoded_value; + } + + /** + * reduce a string by removing leading and trailing comments and whitespace + * + * @param $str string string value to strip of comments and whitespace + * + * @return string string value stripped of comments and whitespace + * @access private + */ + function reduce_string($str) + { + $str = preg_replace(array( + + // eliminate single line comments in '// ...' form + '#^\s*//(.+)$#m', + + // eliminate multi-line comments in '/* ... */' form, at start of string + '#^\s*/\*(.+)\*/#Us', + + // eliminate multi-line comments in '/* ... */' form, at end of string + '#/\*(.+)\*/\s*$#Us' + + ), '', $str); + + // eliminate extraneous space + return trim($str); + } + + /** + * decodes a JSON string into appropriate variable + * + * @param string $str JSON-formatted string + * + * @return mixed number, boolean, string, array, or object + * corresponding to given JSON input string. + * See argument 1 to Services_JSON() above for object-output behavior. + * Note that decode() always returns strings + * in ASCII or UTF-8 format! + * @access public + */ + function decode($str) + { + $str = $this->reduce_string($str); + + switch (strtolower($str)) { + case 'true': + return true; + + case 'false': + return false; + + case 'null': + return null; + + default: + $m = array(); + + if (is_numeric($str)) { + // Lookie-loo, it's a number + + // This would work on its own, but I'm trying to be + // good about returning integers where appropriate: + // return (float)$str; + + // Return float or int, as appropriate + return ((float)$str == (integer)$str) + ? (integer)$str + : (float)$str; + + } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { + // STRINGS RETURNED IN UTF-8 FORMAT + $delim = substr($str, 0, 1); + $chrs = substr($str, 1, -1); + $utf8 = ''; + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c < $strlen_chrs; ++$c) { + + $substr_chrs_c_2 = substr($chrs, $c, 2); + $ord_chrs_c = ord($chrs{$c}); + + switch (true) { + case $substr_chrs_c_2 == '\b': + $utf8 .= chr(0x08); + ++$c; + break; + case $substr_chrs_c_2 == '\t': + $utf8 .= chr(0x09); + ++$c; + break; + case $substr_chrs_c_2 == '\n': + $utf8 .= chr(0x0A); + ++$c; + break; + case $substr_chrs_c_2 == '\f': + $utf8 .= chr(0x0C); + ++$c; + break; + case $substr_chrs_c_2 == '\r': + $utf8 .= chr(0x0D); + ++$c; + break; + + case $substr_chrs_c_2 == '\\"': + case $substr_chrs_c_2 == '\\\'': + case $substr_chrs_c_2 == '\\\\': + case $substr_chrs_c_2 == '\\/': + if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || + ($delim == "'" && $substr_chrs_c_2 != '\\"')) { + $utf8 .= $chrs{++$c}; + } + break; + + case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): + // single, escaped unicode character + $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) + . chr(hexdec(substr($chrs, ($c + 4), 2))); + $utf8 .= $this->utf162utf8($utf16); + $c += 5; + break; + + case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): + $utf8 .= $chrs{$c}; + break; + + case ($ord_chrs_c & 0xE0) == 0xC0: + // characters U-00000080 - U-000007FF, mask 110XXXXX + //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 2); + ++$c; + break; + + case ($ord_chrs_c & 0xF0) == 0xE0: + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 3); + $c += 2; + break; + + case ($ord_chrs_c & 0xF8) == 0xF0: + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 4); + $c += 3; + break; + + case ($ord_chrs_c & 0xFC) == 0xF8: + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 5); + $c += 4; + break; + + case ($ord_chrs_c & 0xFE) == 0xFC: + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 6); + $c += 5; + break; + + } + + } + + return $utf8; + + } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { + // array, or object notation + + if ($str{0} == '[') { + $stk = array(SERVICES_JSON_IN_ARR); + $arr = array(); + } else { + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = array(); + } else { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = new stdClass(); + } + } + + array_push($stk, array('what' => SERVICES_JSON_SLICE, + 'where' => 0, + 'delim' => false)); + + $chrs = substr($str, 1, -1); + $chrs = $this->reduce_string($chrs); + + if ($chrs == '') { + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } else { + return $obj; + + } + } + + //print("\nparsing {$chrs}\n"); + + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c <= $strlen_chrs; ++$c) { + + $top = end($stk); + $substr_chrs_c_2 = substr($chrs, $c, 2); + + if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { + // found a comma that is not inside a string, array, etc., + // OR we've reached the end of the character list + $slice = substr($chrs, $top['where'], ($c - $top['where'])); + array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); + //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + // we are in an array, so just push an element onto the stack + array_push($arr, $this->decode($slice)); + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + // we are in an object, so figure + // out the property name and set an + // element in an associative array, + // for now + $parts = array(); + + if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // "name":value pair + $key = $this->decode($parts[1]); + $val = $this->decode($parts[2]); + + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // name:value pair, where name is unquoted + $key = $parts[1]; + $val = $this->decode($parts[2]); + + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } + + } + + } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { + // found a quote, and we are not inside a string + array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); + //print("Found start of string at {$c}\n"); + + } elseif (($chrs{$c} == $top['delim']) && + ($top['what'] == SERVICES_JSON_IN_STR) && + ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { + // found a quote, we're in a string, and it's not escaped + // we know that it's not escaped becase there is _not_ an + // odd number of backslashes at the end of the string so far + array_pop($stk); + //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '[') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-bracket, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); + //print("Found start of array at {$c}\n"); + + } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { + // found a right-bracket, and we're in an array + array_pop($stk); + //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '{') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-brace, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); + //print("Found start of object at {$c}\n"); + + } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { + // found a right-brace, and we're in an object + array_pop($stk); + //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($substr_chrs_c_2 == '/*') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a comment start, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); + $c++; + //print("Found start of comment at {$c}\n"); + + } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { + // found a comment end, and we're in one now + array_pop($stk); + $c++; + + for ($i = $top['where']; $i <= $c; ++$i) + $chrs = substr_replace($chrs, ' ', $i, 1); + + //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } + + } + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + return $obj; + + } + + } + } + } + + /** + * @todo Ultimately, this should just call PEAR::isError() + */ + function isError($data, $code = null) + { + if (class_exists('pear')) { + return PEAR::isError($data, $code); + } elseif (is_object($data) && (get_class($data) == 'services_json_error' || + is_subclass_of($data, 'services_json_error'))) { + return true; + } + + return false; + } +} + +if (class_exists('PEAR_Error')) { + + class Services_JSON_Error extends PEAR_Error + { + function Services_JSON_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + parent::PEAR_Error($message, $code, $mode, $options, $userinfo); + } + } + +} else { + + /** + * @todo Ultimately, this class shall be descended from PEAR_Error + */ + class Services_JSON_Error + { + function Services_JSON_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + + } + } + +} + +?> diff --git a/plugins/FacebookSSO/extlib/jsonwrapper/JSON/LICENSE b/plugins/FacebookSSO/extlib/jsonwrapper/JSON/LICENSE new file mode 100644 index 0000000000..4ae6bef55d --- /dev/null +++ b/plugins/FacebookSSO/extlib/jsonwrapper/JSON/LICENSE @@ -0,0 +1,21 @@ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN +NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper.php b/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper.php new file mode 100644 index 0000000000..29509debad --- /dev/null +++ b/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper.php @@ -0,0 +1,6 @@ + diff --git a/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper_inner.php b/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper_inner.php new file mode 100644 index 0000000000..36a3f28635 --- /dev/null +++ b/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper_inner.php @@ -0,0 +1,23 @@ +encode($arg); +} + +function json_decode($arg) +{ + global $services_json; + if (!isset($services_json)) { + $services_json = new Services_JSON(); + } + return $services_json->decode($arg); +} + +?> From 6aeba0cb7cbff367d8ded309f08ff3df8ae82795 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 4 Nov 2010 18:33:39 +0100 Subject: [PATCH 018/220] i18n/L10n updates. --- classes/File.php | 26 ++++++++++++++++---------- classes/Notice.php | 2 +- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/classes/File.php b/classes/File.php index c7c7658020..16e00024a5 100644 --- a/classes/File.php +++ b/classes/File.php @@ -169,9 +169,9 @@ class File extends Memcached_DataObject if (empty($x)) { $x = File::staticGet($file_id); if (empty($x)) { - // FIXME: This could possibly be a clearer message :) + // @todo FIXME: This could possibly be a clearer message :) // TRANS: Server exception thrown when... Robin thinks something is impossible! - throw new ServerException(_("Robin thinks something is impossible.")); + throw new ServerException(_('Robin thinks something is impossible.')); } } @@ -186,8 +186,10 @@ class File extends Memcached_DataObject if ($fileSize > common_config('attachments', 'file_quota')) { // TRANS: Message given if an upload is larger than the configured maximum. // TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. - return sprintf(_('No file may be larger than %1$d bytes ' . - 'and the file you sent was %2$d bytes. Try to upload a smaller version.'), + // TRANS: %1$s is used for plural. + return sprintf(_m('No file may be larger than %1$d byte and the file you sent was %2$d bytes. Try to upload a smaller version.', + 'No file may be larger than %1$d bytes and the file you sent was %2$d bytes. Try to upload a smaller version.', + common_config('attachments', 'file_quota')), common_config('attachments', 'file_quota'), $fileSize); } @@ -197,8 +199,11 @@ class File extends Memcached_DataObject $total = $this->total + $fileSize; if ($total > common_config('attachments', 'user_quota')) { // TRANS: Message given if an upload would exceed user quota. - // TRANS: %d (number) is the user quota in bytes. - return sprintf(_('A file this large would exceed your user quota of %d bytes.'), common_config('attachments', 'user_quota')); + // TRANS: %d (number) is the user quota in bytes and is used for plural. + return sprintf(_m('A file this large would exceed your user quota of %d byte.', + 'A file this large would exceed your user quota of %d bytes.', + common_config('attachments', 'user_quota')), + common_config('attachments', 'user_quota')); } $query .= ' AND EXTRACT(month FROM file.modified) = EXTRACT(month FROM now()) and EXTRACT(year FROM file.modified) = EXTRACT(year FROM now())'; $this->query($query); @@ -206,8 +211,11 @@ class File extends Memcached_DataObject $total = $this->total + $fileSize; if ($total > common_config('attachments', 'monthly_quota')) { // TRANS: Message given id an upload would exceed a user's monthly quota. - // TRANS: $d (number) is the monthly user quota in bytes. - return sprintf(_('A file this large would exceed your monthly quota of %d bytes.'), common_config('attachments', 'monthly_quota')); + // TRANS: $d (number) is the monthly user quota in bytes and is used for plural. + return sprintf(_m('A file this large would exceed your monthly quota of %d byte.', + 'A file this large would exceed your monthly quota of %d bytes.', + common_config('attachments', 'monthly_quota')), + common_config('attachments', 'monthly_quota')); } return true; } @@ -299,9 +307,7 @@ class File extends Memcached_DataObject } $protocol = 'https'; - } else { - $path = common_config('attachments', 'path'); $server = common_config('attachments', 'server'); diff --git a/classes/Notice.php b/classes/Notice.php index 792d6e1316..eff0d32515 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -902,7 +902,7 @@ class Notice extends Memcached_DataObject { if (!is_array($group_ids)) { // TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). - throw new ServerException(_("Bad type provided to saveKnownGroups")); + throw new ServerException(_('Bad type provided to saveKnownGroups.')); } $groups = array(); From bb31c25c2d65ce44011cef6077deb91e3c5c4736 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 4 Nov 2010 19:16:19 +0100 Subject: [PATCH 019/220] * i18n/L10n updates. * translator documentation added. * superfluous whitespace removed. --- lib/designsettings.php | 56 ++++++++++++++++++++++++++---------------- lib/theme.php | 18 ++------------ 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/lib/designsettings.php b/lib/designsettings.php index 4955e92199..90296a64da 100644 --- a/lib/designsettings.php +++ b/lib/designsettings.php @@ -48,10 +48,8 @@ require_once INSTALLDIR . '/lib/webcolor.php'; * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ - class DesignSettingsAction extends AccountSettingsAction { - var $submitaction = null; /** @@ -59,9 +57,9 @@ class DesignSettingsAction extends AccountSettingsAction * * @return string Title of the page */ - function title() { + // TRANS: Page title for profile design page. return _('Profile design'); } @@ -70,9 +68,9 @@ class DesignSettingsAction extends AccountSettingsAction * * @return instructions for use */ - function getInstructions() { + // TRANS: Instructions for profile design page. return _('Customize the way your profile looks ' . 'with a background image and a colour palette of your choice.'); } @@ -84,10 +82,8 @@ class DesignSettingsAction extends AccountSettingsAction * * @return nothing */ - function showDesignForm($design) { - $this->elementStart('form', array('method' => 'post', 'enctype' => 'multipart/form-data', 'id' => 'form_settings_design', @@ -98,14 +94,18 @@ class DesignSettingsAction extends AccountSettingsAction $this->elementStart('fieldset', array('id' => 'settings_design_background-image')); + // TRANS: Fieldset legend on profile design page. $this->element('legend', null, _('Change background image')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); $this->element('label', array('for' => 'design_background-image_file'), + // TRANS: Label in form on profile design page. + // TRANS: Field contains file name on user's computer that could be that user's custom profile background image. _('Upload file')); $this->element('input', array('name' => 'design_background-image_file', 'type' => 'file', 'id' => 'design_background-image_file')); + // TRANS: Instructions for form on profile design page. $this->element('p', 'form_guide', _('You can upload your personal ' . 'background image. The maximum file size is 2MB.')); $this->element('input', array('name' => 'MAX_FILE_SIZE', @@ -115,7 +115,6 @@ class DesignSettingsAction extends AccountSettingsAction $this->elementEnd('li'); if (!empty($design->backgroundimage)) { - $this->elementStart('li', array('id' => 'design_background-image_onoff')); @@ -136,7 +135,8 @@ class DesignSettingsAction extends AccountSettingsAction $this->element('label', array('for' => 'design_background-image_on', 'class' => 'radio'), - _('On')); + // TRANS: Radio button on profile design page that will enable use of the uploaded profile image. + _m('RADIO','On')); $attrs = array('name' => 'design_background-image_onoff', 'type' => 'radio', @@ -152,12 +152,16 @@ class DesignSettingsAction extends AccountSettingsAction $this->element('label', array('for' => 'design_background-image_off', 'class' => 'radio'), - _('Off')); + // TRANS: Radio button on profile design page that will disable use of the uploaded profile image. + _m('RADIO','Off')); + // TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable + // TRANS: use of the uploaded profile image. $this->element('p', 'form_guide', _('Turn background image on or off.')); $this->elementEnd('li'); $this->elementStart('li'); $this->checkbox('design_background-image_repeat', + // TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. _('Tile background image'), ($design->disposition & BACKGROUND_TILE) ? true : false); $this->elementEnd('li'); @@ -167,14 +171,15 @@ class DesignSettingsAction extends AccountSettingsAction $this->elementEnd('fieldset'); $this->elementStart('fieldset', array('id' => 'settings_design_color')); + // TRANS: Fieldset legend on profile design page to change profile page colours. $this->element('legend', null, _('Change colours')); $this->elementStart('ul', 'form_data'); try { - $bgcolor = new WebColor($design->backgroundcolor); $this->elementStart('li'); + // TRANS: Label on profile design page for setting a profile page background colour. $this->element('label', array('for' => 'swatch-1'), _('Background')); $this->element('input', array('name' => 'design_background', 'type' => 'text', @@ -188,6 +193,7 @@ class DesignSettingsAction extends AccountSettingsAction $ccolor = new WebColor($design->contentcolor); $this->elementStart('li'); + // TRANS: Label on profile design page for setting a profile page content colour. $this->element('label', array('for' => 'swatch-2'), _('Content')); $this->element('input', array('name' => 'design_content', 'type' => 'text', @@ -201,6 +207,7 @@ class DesignSettingsAction extends AccountSettingsAction $sbcolor = new WebColor($design->sidebarcolor); $this->elementStart('li'); + // TRANS: Label on profile design page for setting a profile page sidebar colour. $this->element('label', array('for' => 'swatch-3'), _('Sidebar')); $this->element('input', array('name' => 'design_sidebar', 'type' => 'text', @@ -214,6 +221,7 @@ class DesignSettingsAction extends AccountSettingsAction $tcolor = new WebColor($design->textcolor); $this->elementStart('li'); + // TRANS: Label on profile design page for setting a profile page text colour. $this->element('label', array('for' => 'swatch-4'), _('Text')); $this->element('input', array('name' => 'design_text', 'type' => 'text', @@ -227,6 +235,7 @@ class DesignSettingsAction extends AccountSettingsAction $lcolor = new WebColor($design->linkcolor); $this->elementStart('li'); + // TRANS: Label on profile design page for setting a profile page links colour. $this->element('label', array('for' => 'swatch-5'), _('Links')); $this->element('input', array('name' => 'design_links', 'type' => 'text', @@ -244,16 +253,22 @@ class DesignSettingsAction extends AccountSettingsAction $this->elementEnd('ul'); $this->elementEnd('fieldset'); + // TRANS: Button text on profile design page to immediately reset all colour settings to default. $this->submit('defaults', _('Use defaults'), 'submit form_action-default', + // TRANS: Title for button on profile design page to reset all colour settings to default. 'defaults', _('Restore default designs')); $this->element('input', array('id' => 'settings_design_reset', 'type' => 'reset', - 'value' => 'Reset', + // TRANS: Button text on profile design page to reset all colour settings to default without saving. + 'value' => _m('BUTTON','Reset'), 'class' => 'submit form_action-primary', + // TRANS: Title for button on profile design page to reset all colour settings to default without saving. 'title' => _('Reset back to default'))); - $this->submit('save', _('Save'), 'submit form_action-secondary', + // TRANS: Button text on profile design page to save settings. + $this->submit('save', _m('BUTTON','Save'), 'submit form_action-secondary', + // TRANS: Title for button on profile design page to save settings. 'save', _('Save design')); $this->elementEnd('fieldset'); @@ -268,7 +283,6 @@ class DesignSettingsAction extends AccountSettingsAction * * @return void */ - function handlePost() { if ($_SERVER['REQUEST_METHOD'] == 'POST') { @@ -280,8 +294,10 @@ class DesignSettingsAction extends AccountSettingsAction && empty($_POST) && ($_SERVER['CONTENT_LENGTH'] > 0) ) { - $msg = _('The server was unable to handle that much POST ' . - 'data (%s bytes) due to its current configuration.'); + // TRANS: Form validation error in design settings form. POST should remain untranslated. + $msg = _m('The server was unable to handle that much POST data (%s byte) due to its current configuration.', + 'The server was unable to handle that much POST data (%s bytes) due to its current configuration.', + intval($_SERVER['CONTENT_LENGTH'])); $this->showForm(sprintf($msg, $_SERVER['CONTENT_LENGTH'])); return; @@ -301,6 +317,7 @@ class DesignSettingsAction extends AccountSettingsAction } else if ($this->arg('defaults')) { $this->restoreDefaults(); } else { + // TRANS: Unknown form validation error in design settings form. $this->showForm(_('Unexpected form submission.')); } } @@ -310,7 +327,6 @@ class DesignSettingsAction extends AccountSettingsAction * * @return void */ - function showStylesheets() { parent::showStylesheets(); @@ -322,7 +338,6 @@ class DesignSettingsAction extends AccountSettingsAction * * @return void */ - function showScripts() { parent::showScripts(); @@ -340,10 +355,8 @@ class DesignSettingsAction extends AccountSettingsAction * * @return nothing */ - function saveBackgroundImage($design) { - // Now that we have a Design ID we can add a file to the design. // XXX: This is an additional DB hit, but figured having the image // associated with the Design rather than the User was worth @@ -388,6 +401,7 @@ class DesignSettingsAction extends AccountSettingsAction if ($result === false) { common_log_db_error($design, 'UPDATE', __FILE__); + // TRANS: Error message displayed if design settings could not be saved. $this->showForm(_('Couldn\'t update your design.')); return; } @@ -399,7 +413,6 @@ class DesignSettingsAction extends AccountSettingsAction * * @return nothing */ - function restoreDefaults() { $design = $this->getWorkingDesign(); @@ -410,12 +423,13 @@ class DesignSettingsAction extends AccountSettingsAction if ($result === false) { common_log_db_error($design, 'DELETE', __FILE__); + // TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". $this->showForm(_('Couldn\'t update your design.')); return; } } + // TRANS: Success message displayed if design settings were saved after clicking "Use defaults". $this->showForm(_('Design defaults restored.'), true); } - } diff --git a/lib/theme.php b/lib/theme.php index 95b7c1de4b..5caa046c20 100644 --- a/lib/theme.php +++ b/lib/theme.php @@ -51,7 +51,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ - class Theme { var $name = null; @@ -65,14 +64,14 @@ class Theme * * @param string $name Name of the theme; defaults to config value */ - function __construct($name=null) { if (empty($name)) { $name = common_config('site', 'theme'); } if (!self::validName($name)) { - throw new ServerException("Invalid theme name."); + // TRANS: Server exception displayed if a theme name was invalid. + throw new ServerException(_('Invalid theme name.')); } $this->name = $name; @@ -95,7 +94,6 @@ class Theme $fulldir = $instroot.'/'.$name; if (file_exists($fulldir) && is_dir($fulldir)) { - $this->dir = $fulldir; $this->path = $this->relativeThemePath('theme', 'theme', $name); } @@ -113,11 +111,9 @@ class Theme * * @todo consolidate code with that for other customizable paths */ - protected function relativeThemePath($group, $fallbackSubdir, $name) { if (StatusNet::isHTTPS()) { - $sslserver = common_config($group, 'sslserver'); if (empty($sslserver)) { @@ -140,9 +136,7 @@ class Theme } $protocol = 'https'; - } else { - $path = common_config($group, 'path'); if (empty($path)) { @@ -179,7 +173,6 @@ class Theme * * @return string full pathname, like /var/www/mublog/theme/default/logo.png */ - function getFile($relative) { return $this->dir.'/'.$relative; @@ -192,7 +185,6 @@ class Theme * * @return string full URL, like 'http://example.com/theme/default/logo.png' */ - function getPath($relative) { return $this->path.'/'.$relative; @@ -258,7 +250,6 @@ class Theme * * @return string File path to the theme file */ - static function file($relative, $name=null) { $theme = new Theme($name); @@ -273,7 +264,6 @@ class Theme * * @return string URL of the file */ - static function path($relative, $name=null) { $theme = new Theme($name); @@ -285,7 +275,6 @@ class Theme * * @return array list of available theme names */ - static function listAvailable() { $local = self::subdirsOf(self::localRoot()); @@ -305,7 +294,6 @@ class Theme * * @return array relative filenames of subdirs, or empty array */ - protected static function subdirsOf($dir) { $subdirs = array(); @@ -330,7 +318,6 @@ class Theme * * @return string local root dir for themes */ - protected static function localRoot() { $basedir = common_config('local', 'dir'); @@ -347,7 +334,6 @@ class Theme * * @return string root dir for StatusNet themes */ - protected static function installRoot() { $instroot = common_config('theme', 'dir'); From ca6d7f104242d22f87254f8b33e5bf4a686ec57d Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Fri, 5 Nov 2010 01:25:50 +0100 Subject: [PATCH 020/220] Localisation updates from http://translatewiki.net. --- locale/af/LC_MESSAGES/statusnet.po | 280 +++++++------ locale/ar/LC_MESSAGES/statusnet.po | 293 +++++++------ locale/arz/LC_MESSAGES/statusnet.po | 294 +++++++------ locale/bg/LC_MESSAGES/statusnet.po | 281 +++++++------ locale/br/LC_MESSAGES/statusnet.po | 280 +++++++------ locale/ca/LC_MESSAGES/statusnet.po | 303 ++++++++------ locale/cs/LC_MESSAGES/statusnet.po | 304 ++++++++------ locale/de/LC_MESSAGES/statusnet.po | 374 +++++++++-------- locale/en_GB/LC_MESSAGES/statusnet.po | 290 +++++++------ locale/eo/LC_MESSAGES/statusnet.po | 298 +++++++------ locale/es/LC_MESSAGES/statusnet.po | 301 ++++++++------ locale/fa/LC_MESSAGES/statusnet.po | 289 +++++++------ locale/fi/LC_MESSAGES/statusnet.po | 284 +++++++------ locale/fr/LC_MESSAGES/statusnet.po | 303 ++++++++------ locale/ga/LC_MESSAGES/statusnet.po | 286 +++++++------ locale/gl/LC_MESSAGES/statusnet.po | 303 ++++++++------ locale/hsb/LC_MESSAGES/statusnet.po | 283 +++++++------ locale/hu/LC_MESSAGES/statusnet.po | 287 +++++++------ locale/ia/LC_MESSAGES/statusnet.po | 381 +++++++++-------- locale/is/LC_MESSAGES/statusnet.po | 278 +++++++------ locale/it/LC_MESSAGES/statusnet.po | 303 ++++++++------ locale/ja/LC_MESSAGES/statusnet.po | 291 +++++++------ locale/ka/LC_MESSAGES/statusnet.po | 291 +++++++------ locale/ko/LC_MESSAGES/statusnet.po | 288 +++++++------ locale/mk/LC_MESSAGES/statusnet.po | 376 +++++++++-------- locale/nb/LC_MESSAGES/statusnet.po | 290 +++++++------ locale/nl/LC_MESSAGES/statusnet.po | 390 ++++++++++-------- locale/nn/LC_MESSAGES/statusnet.po | 278 +++++++------ locale/pl/LC_MESSAGES/statusnet.po | 384 +++++++++-------- locale/pt/LC_MESSAGES/statusnet.po | 302 ++++++++------ locale/pt_BR/LC_MESSAGES/statusnet.po | 337 ++++++++------- locale/ru/LC_MESSAGES/statusnet.po | 307 ++++++++------ locale/statusnet.pot | 254 +++++++----- locale/sv/LC_MESSAGES/statusnet.po | 301 ++++++++------ locale/te/LC_MESSAGES/statusnet.po | 279 +++++++------ locale/tr/LC_MESSAGES/statusnet.po | 283 +++++++------ locale/uk/LC_MESSAGES/statusnet.po | 390 ++++++++++-------- locale/zh_CN/LC_MESSAGES/statusnet.po | 293 +++++++------ .../GroupFavorited/locale/GroupFavorited.pot | 6 +- .../locale/br/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/de/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/es/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/fr/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/ia/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/mk/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/nl/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/ru/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/tl/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/uk/LC_MESSAGES/GroupFavorited.po | 12 +- .../locale/br/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/de/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/fi/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/fr/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/gl/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/ia/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/mk/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/nb/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/nl/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/ru/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/ta/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/tl/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/uk/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/zh_CN/LC_MESSAGES/Mapstraction.po | 14 +- .../locale/pl/LC_MESSAGES/NoticeTitle.po | 33 ++ .../locale/uk/LC_MESSAGES/Realtime.po | 59 +++ .../TwitterBridge/locale/TwitterBridge.pot | 26 +- .../locale/fr/LC_MESSAGES/TwitterBridge.po | 32 +- .../locale/ia/LC_MESSAGES/TwitterBridge.po | 32 +- .../locale/mk/LC_MESSAGES/TwitterBridge.po | 32 +- .../locale/nl/LC_MESSAGES/TwitterBridge.po | 32 +- .../locale/tr/LC_MESSAGES/TwitterBridge.po | 32 +- .../locale/uk/LC_MESSAGES/TwitterBridge.po | 32 +- .../locale/zh_CN/LC_MESSAGES/TwitterBridge.po | 32 +- plugins/UserFlag/locale/UserFlag.pot | 16 +- .../locale/fr/LC_MESSAGES/UserFlag.po | 25 +- .../locale/ia/LC_MESSAGES/UserFlag.po | 25 +- .../locale/mk/LC_MESSAGES/UserFlag.po | 25 +- .../locale/nl/LC_MESSAGES/UserFlag.po | 25 +- .../locale/pt/LC_MESSAGES/UserFlag.po | 25 +- .../locale/uk/LC_MESSAGES/UserFlag.po | 25 +- 80 files changed, 7105 insertions(+), 5354 deletions(-) create mode 100644 plugins/NoticeTitle/locale/pl/LC_MESSAGES/NoticeTitle.po create mode 100644 plugins/Realtime/locale/uk/LC_MESSAGES/Realtime.po diff --git a/locale/af/LC_MESSAGES/statusnet.po b/locale/af/LC_MESSAGES/statusnet.po index c99ac3b54a..2c8d9e4acc 100644 --- a/locale/af/LC_MESSAGES/statusnet.po +++ b/locale/af/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:52:57+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:02+0000\n" "Language-Team: Afrikaans \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: af\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -84,12 +84,14 @@ msgstr "Stoor toegangsinstellings" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Stoor" @@ -157,7 +159,7 @@ msgstr "%1$s en vriende, bladsy %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s en vriende" @@ -325,11 +327,13 @@ msgstr "Kon nie die profiel stoor nie." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -742,7 +746,7 @@ msgstr "" #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" @@ -763,12 +767,13 @@ msgstr "" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Die vorm is onverwags ingestuur." @@ -815,7 +820,7 @@ msgstr "Gebruiker" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1079,7 +1084,7 @@ msgstr "Die aanhangsel bestaan nie." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Geen gebruikersnaam nie." @@ -1096,7 +1101,7 @@ msgstr "Ongeldige grootte." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1270,7 +1275,7 @@ msgstr "" #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Die groep bestaan nie." @@ -1631,12 +1636,14 @@ msgstr "Werf se tema" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Verander die agtergrond-prent" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Agtergrond" @@ -1648,42 +1655,50 @@ msgid "" msgstr "" #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Aan" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Af" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 #, fuzzy msgid "Turn background image on or off." msgstr "Verander die agtergrond-prent" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 #, fuzzy msgid "Tile background image" msgstr "Verander die agtergrond-prent" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Verander kleure" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Inhoud" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Kantstrook" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Skakels" @@ -1695,16 +1710,19 @@ msgstr "Gevorderd" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Gebruik verstekwaardes" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 #, fuzzy msgid "Restore default designs" msgstr "Gebruik verstekwaardes" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Stel terug na standaard" @@ -1712,11 +1730,12 @@ msgstr "Stel terug na standaard" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Stoor" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Stoor ontwerp" @@ -1853,7 +1872,7 @@ msgstr "Dit was nie moontlik om die groep by te werk nie." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Dit was nie moontlik om die aliasse te skep nie." @@ -2136,7 +2155,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s se gunsteling kennisgewings" @@ -2321,8 +2340,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 #, fuzzy msgid "Couldn't update your design." msgstr "Dit was nie moontlik om u ontwerp by te werk nie." @@ -3225,25 +3246,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Hierdie gebruiker het nie 'n profiel nie." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Status van %1$s op %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 #, fuzzy msgid "Not a supported data format." @@ -3743,7 +3764,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Volledige naam" @@ -3784,7 +3805,7 @@ msgstr "Bio" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4352,7 +4373,7 @@ msgid "Repeated!" msgstr "Herhaal!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, fuzzy, php-format msgid "Replies to %s" msgstr "Herhalings van %s" @@ -4493,7 +4514,7 @@ msgid "Description" msgstr "Beskrywing" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistieke" @@ -4605,95 +4626,95 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s groep" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Groep %1$s, bladsy %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Groepsprofiel" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nota" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Aliasse" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Groepsaksies" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Voer vir vriende van %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Voer vir vriende van %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "Voer vir vriende van %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Vriend van 'n vriend vir die groep %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Lede" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(geen)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Alle lede" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Geskep" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4703,7 +4724,7 @@ msgstr "Lede" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4716,7 +4737,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4726,7 +4747,7 @@ msgid "" msgstr "" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administrateurs" @@ -5500,7 +5521,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profiel" @@ -5663,12 +5684,14 @@ msgstr "Kan nie die avatar-URL \"%s\" lees nie." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Kan nie die avatar-URL \"%s\" lees nie." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 #, fuzzy msgid "Profile design" msgstr "Profiel" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5787,29 +5810,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "Ongeldige grootte." @@ -5942,31 +5974,31 @@ msgid "Problem saving notice." msgstr "" #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "" #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Kon nie die profiel stoor nie." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6070,24 +6102,24 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Kon nie die groep skep nie." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 #, fuzzy msgid "Could not set group URI." msgstr "Kon nie die groep skep nie." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 #, fuzzy msgid "Could not set group membership." msgstr "Kon nie die groep skep nie." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 #, fuzzy msgid "Could not save local group info." msgstr "Kon nie die profiel stoor nie." @@ -6502,7 +6534,7 @@ msgid "User configuration" msgstr "SMS-bevestiging" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Gebruiker" @@ -7196,24 +7228,42 @@ msgstr "Skrap applikasie" msgid "Database error" msgstr "Databasisfout" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 #, fuzzy msgid "Upload file" msgstr "Oplaai" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" -#: 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 "" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Aan" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Af" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Herstel" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "" @@ -7662,7 +7712,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "Hierdie kennisgewing is nie 'n gunsteling nie!" @@ -7672,7 +7722,7 @@ msgstr "Hierdie kennisgewing is nie 'n gunsteling nie!" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7694,7 +7744,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7704,7 +7754,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "" @@ -7715,7 +7765,7 @@ msgstr "" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7836,7 +7886,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7845,7 +7895,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -7992,31 +8042,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Kon nie e-posbevestiging verwyder nie." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Persoonlik" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Antwoorde" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Gunstelinge" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "U inkomende boodskappe" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 #, fuzzy msgid "Your sent messages" msgstr "U inkomende boodskappe" @@ -8225,6 +8275,12 @@ msgstr "" msgid "None" msgstr "Geen" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Ongeldige grootte." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8481,17 +8537,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Die naam is te lank (maksimum 255 karakters)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Die organisasienaam is te lang (maksimum 255 karakters)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Die kennisgewing is te lank. Gebruik maksimum %d karakters." - -#~ msgid " tagged %s" -#~ msgstr "met die etiket %s" diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po index 1f34cd9dcd..890b988261 100644 --- a/locale/ar/LC_MESSAGES/statusnet.po +++ b/locale/ar/LC_MESSAGES/statusnet.po @@ -11,19 +11,19 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:52:58+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:04+0000\n" "Language-Team: Arabic \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ar\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ( (n == 1) ? 1 : ( (n == " "2) ? 2 : ( (n%100 >= 3 && n%100 <= 10) ? 3 : ( (n%100 >= 11 && n%100 <= " "99) ? 4 : 5 ) ) ) );\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -88,12 +88,14 @@ msgstr "حفظ إعدادت الوصول" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "احفظ" @@ -161,7 +163,7 @@ msgstr "%1$s والأصدقاء, الصفحة %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s والأصدقاء" @@ -329,11 +331,13 @@ msgstr "لم يمكن حفظ الملف." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -761,7 +765,7 @@ msgstr "لا تملك تصريحًا." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" @@ -783,12 +787,13 @@ msgstr "خطأ في قاعدة البيانات أثناء حذف مستخدم #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "" @@ -835,7 +840,7 @@ msgstr "الحساب" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1107,7 +1112,7 @@ msgstr "لا مرفق كهذا." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "لا اسم مستعار." @@ -1124,7 +1129,7 @@ msgstr "حجم غير صالح." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "أفتار" @@ -1297,7 +1302,7 @@ msgstr "فشل حفظ معلومات المنع." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "لا مجموعة كهذه." @@ -1656,12 +1661,14 @@ msgstr "سمة مخصصة" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "تغيير صورة الخلفية" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "الخلفية" @@ -1673,41 +1680,49 @@ msgid "" msgstr "بإمكانك رفع صورة خلفية للموقع. أقصى حجم للملف هو %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "مكّن" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "عطّل" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "مكّن صورة الخلفية أو عطّلها." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 #, fuzzy msgid "Tile background image" msgstr "تغيير صورة الخلفية" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "تغيير الألوان" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "المحتوى" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "الشريط الجانبي" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "النص" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "وصلات" @@ -1719,15 +1734,18 @@ msgstr "متقدم" msgid "Custom CSS" msgstr "CSS مخصصة" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "استخدم المبدئيات" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "استعد التصميمات المبدئية" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "ارجع إلى المبدئي" @@ -1735,11 +1753,12 @@ msgstr "ارجع إلى المبدئي" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "أرسل" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "احفظ التصميم" @@ -1878,7 +1897,7 @@ msgstr "تعذر تحديث المجموعة." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "تعذّر إنشاء الكنى." @@ -2157,7 +2176,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "إشعارات %s المُفضلة" @@ -2335,8 +2354,10 @@ msgid "" "palette of your choice." msgstr "خصّص أسلوب عرض ملفك بصورة خلفية ومخطط ألوان من اختيارك." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "تعذّر تحديث تصميمك." @@ -3251,25 +3272,25 @@ msgstr "" msgid "Notice has no profile." msgstr "ليس للمستخدم ملف شخصي." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "حالة %1$s في يوم %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "نوع المحتوى " #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "ليس نسق بيانات مدعوم." @@ -3763,7 +3784,7 @@ msgstr "1-64 حرفًا إنجليزيًا أو رقمًا بدون نقاط أ #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "الاسم الكامل" @@ -3809,7 +3830,7 @@ msgstr "السيرة" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4366,7 +4387,7 @@ msgid "Repeated!" msgstr "مكرر!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "الردود على %s" @@ -4502,7 +4523,7 @@ msgid "Description" msgstr "الوصف" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "إحصاءات" @@ -4615,96 +4636,96 @@ msgid "This is a way to share what you like." msgstr "إنها إحدى وسائل مشاركة ما تحب." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "مجموعة %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "مجموعة %1$s، الصفحة %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "ملف المجموعة الشخصي" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "مسار" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "ملاحظة" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "الكنى" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 #, fuzzy msgid "Group actions" msgstr "تصرفات المستخدم" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "مجموعة %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "الأعضاء" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(لا شيء)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "جميع الأعضاء" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "أنشئت" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4714,7 +4735,7 @@ msgstr "الأعضاء" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4732,7 +4753,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4745,7 +4766,7 @@ msgstr "" "(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "الإداريون" @@ -5511,7 +5532,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "الملف الشخصي" @@ -5668,11 +5689,13 @@ msgstr "" msgid "Wrong image type for avatar URL ‘%s’." msgstr "" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "تصميم الملف الشخصي" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5792,29 +5815,50 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "حجم غير صالح." @@ -5942,32 +5986,32 @@ msgid "Problem saving notice." msgstr "مشكلة أثناء حفظ الإشعار." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "مشكلة أثناء حفظ الإشعار." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "تعذر تحديث المجموعة المحلية." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "آر تي @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6064,22 +6108,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "تعذّر إنشاء المجموعة." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "تعذّر إنشاء المجموعة." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "تعذّر ضبط عضوية المجموعة." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "تعذر تحديث المجموعة المحلية." @@ -6489,7 +6533,7 @@ msgid "User configuration" msgstr "ضبط المستخدم" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "المستخدم" @@ -7227,23 +7271,41 @@ msgstr "تطبيقات OAuth" msgid "Database error" msgstr "خطأ قاعدة بيانات" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "ارفع ملفًا" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "تستطيع رفع صورتك الشخصية. أقصى حجم للملف هو 2 م.ب." -#: 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 "" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "مكّن" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "عطّل" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "أعد الضبط" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "استعيدت مبدئيات التصميم." @@ -7727,7 +7789,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "لقد أضاف %s (@%s) إشعارك إلى مفضلاته" @@ -7737,7 +7799,7 @@ msgstr "لقد أضاف %s (@%s) إشعارك إلى مفضلاته" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7759,7 +7821,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7769,7 +7831,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "لقد أرسل %s (@%s) إشعارًا إليك" @@ -7780,7 +7842,7 @@ msgstr "لقد أرسل %s (@%s) إشعارًا إليك" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7902,7 +7964,7 @@ msgstr "لم يمكن تحديد نوع MIME للملف." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7911,7 +7973,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8051,31 +8113,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "تعذّر إدراج اشتراك جديد." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "شخصية" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "الردود" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "المفضلات" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "صندوق الوارد" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "رسائلك الواردة" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "صندوق الصادر" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "رسائلك المُرسلة" @@ -8273,6 +8335,12 @@ msgstr "" msgid "None" msgstr "لا شيء" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "حجم غير صالح." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8548,18 +8616,3 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "الاسم طويل جدا (الأقصى 255 حرفا)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "المنظمة طويلة جدا (الأقصى 255 حرفا)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "هذه طويلة جدًا. أطول حجم للإشعار %d حرفًا." - -#, fuzzy -#~ msgid " tagged %s" -#~ msgstr "الإشعارات الموسومة ب%s" diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po index 1121420906..180c5aded3 100644 --- a/locale/arz/LC_MESSAGES/statusnet.po +++ b/locale/arz/LC_MESSAGES/statusnet.po @@ -11,19 +11,19 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:52:59+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:05+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 (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: arz\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -91,12 +91,14 @@ msgstr "اذف إعدادت الموقع" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 #, fuzzy msgctxt "BUTTON" msgid "Save" @@ -165,7 +167,7 @@ msgstr "%1$s و الصحاب, صفحه %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s والأصدقاء" @@ -333,11 +335,13 @@ msgstr "لم يمكن حفظ الملف." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -766,7 +770,7 @@ msgstr "لا تملك تصريحًا." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" @@ -788,12 +792,13 @@ msgstr "خطأ قاعده البيانات أثناء إدخال المستخد #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "" @@ -840,7 +845,7 @@ msgstr "الحساب" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1115,7 +1120,7 @@ msgstr "لا مرفق كهذا." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "لا اسم مستعار." @@ -1132,7 +1137,7 @@ msgstr "حجم غير صالح." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "أفتار" @@ -1307,7 +1312,7 @@ msgstr "فشل حفظ معلومات المنع." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "لا مجموعه كهذه." @@ -1670,12 +1675,14 @@ msgstr "سمه الموقع" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "تغيير صوره الخلفية" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "الخلفية" @@ -1687,41 +1694,49 @@ msgid "" msgstr "تستطيع رفع صورتك الشخصيه. أقصى حجم للملف هو 2 م.ب." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "مكّن" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "عطّل" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "مكّن صوره الخلفيه أو عطّلها." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 #, fuzzy msgid "Tile background image" msgstr "تغيير صوره الخلفية" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "تغيير الألوان" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "المحتوى" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "الشريط الجانبي" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "النص" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "وصلات" @@ -1733,15 +1748,18 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "استخدم المبدئيات" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "استعد التصميمات المبدئية" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "ارجع إلى المبدئي" @@ -1749,11 +1767,12 @@ msgstr "ارجع إلى المبدئي" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "أرسل" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "احفظ التصميم" @@ -1894,7 +1913,7 @@ msgstr "تعذر تحديث المجموعه." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "تعذّر إنشاء الكنى." @@ -2181,7 +2200,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "إشعارات %s المُفضلة" @@ -2362,8 +2381,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "تعذّر تحديث تصميمك." @@ -3279,25 +3300,25 @@ msgstr "" msgid "Notice has no profile." msgstr "ليس للمستخدم ملف شخصى." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, fuzzy, php-format msgid "%1$s's status on %2$s" msgstr "%1$s ساب جروپ %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "نوع المحتوى " #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr " مش نظام بيانات مدعوم." @@ -3789,7 +3810,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "الاسم الكامل" @@ -3834,7 +3855,7 @@ msgstr "السيرة" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4391,7 +4412,7 @@ msgid "Repeated!" msgstr "مكرر!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "الردود على %s" @@ -4528,7 +4549,7 @@ msgid "Description" msgstr "الوصف" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "إحصاءات" @@ -4643,96 +4664,96 @@ msgid "This is a way to share what you like." msgstr "إنها إحدى وسائل مشاركه ما تحب." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "مجموعه %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s اعضاء الجروپ, صفحه %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "ملف المجموعه الشخصي" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "مسار" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "ملاحظة" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "الكنى" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 #, fuzzy msgid "Group actions" msgstr "تصرفات المستخدم" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "مجموعه %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "الأعضاء" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(لا شيء)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "جميع الأعضاء" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "أنشئ" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4742,7 +4763,7 @@ msgstr "الأعضاء" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4759,7 +4780,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4771,7 +4792,7 @@ msgstr "" "blogging) المبنيه على البرنامج الحر [StatusNet](http://status.net/)." #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "الإداريون" @@ -5546,7 +5567,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "الملف الشخصي" @@ -5703,11 +5724,13 @@ msgstr "" msgid "Wrong image type for avatar URL ‘%s’." msgstr "" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "تصميم الملف الشخصي" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5826,29 +5849,50 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "حجم غير صالح." @@ -5977,32 +6021,32 @@ msgid "Problem saving notice." msgstr "مشكله أثناء حفظ الإشعار." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "مشكله أثناء حفظ الإشعار." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "تعذّر حفظ الاشتراك." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "آر تى @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6098,22 +6142,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "تعذّر إنشاء المجموعه." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "تعذّر إنشاء المجموعه." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "تعذّر ضبط عضويه المجموعه." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 #, fuzzy msgid "Could not save local group info." msgstr "تعذّر حفظ الاشتراك." @@ -6541,7 +6585,7 @@ msgid "User configuration" msgstr "ضبط المسارات" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "المستخدم" @@ -7249,23 +7293,41 @@ msgstr "OAuth applications" msgid "Database error" msgstr "خطأ قاعده بيانات" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "ارفع ملفًا" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "تستطيع رفع صورتك الشخصيه. أقصى حجم للملف هو 2 م.ب." -#: 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 "" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "مكّن" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "عطّل" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "أعد الضبط" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "استعيدت مبدئيات التصميم." @@ -7729,7 +7791,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "أرسل لى بريدًا إلكرتونيًا عندما يضيف أحدهم إشعارى مفضله." @@ -7739,7 +7801,7 @@ msgstr "أرسل لى بريدًا إلكرتونيًا عندما يضيف أح #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7761,7 +7823,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7771,7 +7833,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "" @@ -7782,7 +7844,7 @@ msgstr "" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7903,7 +7965,7 @@ msgstr "مش نافع يتحدد نوع الـMIME بتاع الفايل." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7912,7 +7974,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8053,31 +8115,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "تعذّر إدراج اشتراك جديد." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "شخصية" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "الردود" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "المفضلات" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "صندوق الوارد" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "رسائلك الواردة" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "صندوق الصادر" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "رسائلك المُرسلة" @@ -8276,6 +8338,12 @@ msgstr "" msgid "None" msgstr "لا شيء" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "حجم غير صالح." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8553,19 +8621,3 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "الاسم طويل جدا (اكتر حاجه 255 رمز)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "المنظمه طويله جدا (اكتر حاجه 255 رمز)." - -#, fuzzy -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "هذا الملف كبير جدًا. إن أقصى حجم للملفات هو %d." - -#, fuzzy -#~ msgid " tagged %s" -#~ msgstr "الإشعارات الموسومه ب%s" diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po index f3029d880b..bf36d818c8 100644 --- a/locale/bg/LC_MESSAGES/statusnet.po +++ b/locale/bg/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:00+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:06+0000\n" "Language-Team: Bulgarian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: bg\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -85,12 +85,14 @@ msgstr "Запазване настройките за достъп" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Запазване" @@ -158,7 +160,7 @@ msgstr "%1$s и приятели, страница %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s и приятели" @@ -324,11 +326,13 @@ msgstr "Грешка при запазване на профила." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -744,7 +748,7 @@ msgstr "Не сте абонирани за никого." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Имаше проблем със сесията ви в сайта. Моля, опитайте отново!" @@ -766,12 +770,13 @@ msgstr "Грешка в базата от данни — отговор при #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Неочаквано изпращане на форма." @@ -818,7 +823,7 @@ msgstr "Сметка" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1079,7 +1084,7 @@ msgstr "Няма прикачени файлове." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Няма псевдоним." @@ -1096,7 +1101,7 @@ msgstr "Неправилен размер." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Аватар" @@ -1270,7 +1275,7 @@ msgstr "Грешка при записване данните за блокир #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Няма такава група" @@ -1633,12 +1638,14 @@ msgstr "Нова бележка" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Смяна на изображението за фон" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Фон" @@ -1652,42 +1659,50 @@ msgstr "" "2MB." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Вкл." #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Изкл." -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 #, fuzzy msgid "Turn background image on or off." msgstr "Смяна на изображението за фон" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 #, fuzzy msgid "Tile background image" msgstr "Смяна на изображението за фон" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Смяна на цветовете" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Съдържание" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Страничен панел" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Текст" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Лиценз" @@ -1699,15 +1714,18 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "" @@ -1715,11 +1733,12 @@ msgstr "" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Запазване" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 #, fuzzy msgid "Save design" msgstr "Запазване настройките на сайта" @@ -1864,7 +1883,7 @@ msgstr "Грешка при обновяване на групата." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 #, fuzzy msgid "Could not create aliases." msgstr "Грешка при отбелязване като любима." @@ -2148,7 +2167,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Любими бележки на %s" @@ -2330,8 +2349,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 #, fuzzy msgid "Couldn't update your design." msgstr "Грешка при обновяване на потребителя." @@ -3282,25 +3303,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Потребителят няма профил." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Бележка на %1$s от %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "вид съдържание " #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Неподдържан формат на данните" @@ -3793,7 +3814,7 @@ msgstr "От 1 до 64 малки букви или цифри, без пунк #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Пълно име" @@ -3835,7 +3856,7 @@ msgstr "За мен" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4407,7 +4428,7 @@ msgid "Repeated!" msgstr "Повторено!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Отговори на %s" @@ -4541,7 +4562,7 @@ msgid "Description" msgstr "Описание" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Статистики" @@ -4651,96 +4672,96 @@ msgid "This is a way to share what you like." msgstr "Така можете да споделите какво харесвате." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Група %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s, страница %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Профил на групата" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Бележка" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Псевдоними" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 #, fuzzy msgid "Group actions" msgstr "Потребителски действия" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Емисия с бележки на %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Емисия с бележки на %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Емисия с бележки на %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Изходяща кутия за %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Членове" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Без)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Всички членове" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Създадена на" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4750,7 +4771,7 @@ msgstr "Членове" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4763,7 +4784,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4773,7 +4794,7 @@ msgid "" msgstr "" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Администратори" @@ -5534,7 +5555,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Профил" @@ -5705,12 +5726,14 @@ msgstr "Грешка при четене адреса на аватара '%s'" msgid "Wrong image type for avatar URL ‘%s’." msgstr "Грешен вид изображение за '%s'" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 #, fuzzy msgid "Profile design" msgstr "Настройки на профила" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5828,29 +5851,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "Неправилен размер." @@ -5987,32 +6019,32 @@ msgid "Problem saving notice." msgstr "Проблем при записване на бележката." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "Проблем при записване на бележката." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Грешка при запазване на етикетите." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6111,22 +6143,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Грешка при създаване на групата." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Грешка при създаване на групата." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Грешка при създаване на групата." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Грешка при запазване на етикетите." @@ -6544,7 +6576,7 @@ msgid "User configuration" msgstr "Настройка на пътищата" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Потребител" @@ -7234,10 +7266,13 @@ msgstr "Изтриване на приложението" msgid "Database error" msgstr "Грешка в базата от данни" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Качване на файл" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7245,14 +7280,29 @@ msgstr "" "Можете да качите лично изображение за фон. Максималната големина на файла е " "2MB." -#: 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 "" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Вкл." -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Изкл." + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Обновяване" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "" @@ -7702,7 +7752,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) отбеляза бележката ви като любима" @@ -7712,7 +7762,7 @@ msgstr "%s (@%s) отбеляза бележката ви като любима" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7734,7 +7784,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7744,7 +7794,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) отбеляза бележката ви като любима" @@ -7755,7 +7805,7 @@ msgstr "%s (@%s) отбеляза бележката ви като любима" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7874,7 +7924,7 @@ msgstr "Грешка при изтриване на любима бележка. #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7883,7 +7933,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8024,31 +8074,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Грешка при добавяне на нов абонамент." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Лично" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Отговори" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Любими" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Входящи" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Получените от вас съобщения" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Изходящи" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Изпратените от вас съобщения" @@ -8249,6 +8299,12 @@ msgstr "" msgid "None" msgstr "Без" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Неправилен размер." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8502,18 +8558,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Пълното име е твърде дълго (макс. 255 знака)" - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Името на организацията е твърде дълго (макс. 255 знака)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Твърде дълго. Може да е най-много %d знака." - -#, fuzzy -#~ msgid " tagged %s" -#~ msgstr "Бележки с етикет %s" diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po index a3f61932ee..17d5db60b0 100644 --- a/locale/br/LC_MESSAGES/statusnet.po +++ b/locale/br/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:01+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:07+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -86,12 +86,14 @@ msgstr "Enrollañ an arventennoù moned" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Enrollañ" @@ -159,7 +161,7 @@ msgstr "%1$s hag e vignoned, pajenn %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s hag e vignoned" @@ -329,11 +331,13 @@ msgstr "Diposubl eo enrollañ ar profil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -745,7 +749,7 @@ msgstr "N'oc'h ket aotreet." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Ur gudenn 'zo bet gant ho jedaouer dalc'h. Mar plij adklaskit." @@ -767,12 +771,13 @@ msgstr "Ur fazi 'zo bet en ur ensoc'hañ an avatar" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Kinnig ar furmskrid dic'hortoz." @@ -819,7 +824,7 @@ msgstr "Kont" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1082,7 +1087,7 @@ msgstr "N'eo ket bet kavet ar restr stag." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Lesanv ebet." @@ -1099,7 +1104,7 @@ msgstr "Ment direizh." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1272,7 +1277,7 @@ msgstr "Diposubl eo enrollañ an titouroù stankañ." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "N'eus ket eus ar strollad-se." @@ -1629,12 +1634,14 @@ msgstr "Dodenn personelaet" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Kemmañ ar skeudenn foñs" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Background" @@ -1646,40 +1653,48 @@ msgid "" msgstr "" #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Gweredekaet" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Diweredekaet" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Gweredekaat pe diweredekaat ar skeudenn foñs." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Adober gant ar skeudenn drekleur" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Kemmañ al livioù" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Endalc'h" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Barenn kostez" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Testenn" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Liammoù" @@ -1691,15 +1706,18 @@ msgstr "Araokaet" msgid "Custom CSS" msgstr "CSS personelaet" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Implijout an talvoudoù dre ziouer" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Adlakaat an neuz dre ziouer." -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Adlakaat an arventennoù dre ziouer" @@ -1707,11 +1725,12 @@ msgstr "Adlakaat an arventennoù dre ziouer" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Enrollañ" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Enrollañ an design" @@ -1847,7 +1866,7 @@ msgstr "Diposubl eo hizivaat ar strollad." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Diposubl eo krouiñ an aliasoù." @@ -2129,7 +2148,7 @@ msgstr "" "gentañ da embann un dra !" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Alioù pennrollet eus %s" @@ -2309,8 +2328,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Diposubl eo hizivaat ho design." @@ -3227,25 +3248,25 @@ msgstr "" msgid "Notice has no profile." msgstr "N'en deus ket an ali a profil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Statud %1$s war %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "seurt an danvez " #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 #, fuzzy msgid "Not a supported data format." @@ -3745,7 +3766,7 @@ msgstr "1 da 64 lizherenn vihan pe sifr, hep poentaouiñ nag esaouenn" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Anv klok" @@ -3787,7 +3808,7 @@ msgstr "Buhezskrid" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4351,7 +4372,7 @@ msgid "Repeated!" msgstr "Adlavaret !" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Respontoù da %s" @@ -4486,7 +4507,7 @@ msgid "Description" msgstr "Deskrivadur" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Stadegoù" @@ -4595,95 +4616,95 @@ msgid "This is a way to share what you like." msgstr "Un doare eo evit kevranañ ar pezh a blij deoc'h." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "strollad %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Strollad %1$s, pajenn %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Profil ar strollad" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Notenn" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Aliasoù" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Obererezh ar strollad" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Neudenn alioù ar strollad %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Neudenn alioù ar strollad %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Neudenn alioù ar strollad %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Mignon ur mignon evit ar strollad %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Izili" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Hini ebet)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "An holl izili" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Krouet" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4693,7 +4714,7 @@ msgstr "Izili" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4708,7 +4729,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4720,7 +4741,7 @@ msgstr "" "Microblog) diazezet war ar meziant frank [StatusNet](http://status.net/)." #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Merourien" @@ -5497,7 +5518,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5656,11 +5677,13 @@ msgstr "Dibosupl eo lenn URL an avatar \"%s\"." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Seurt skeudenn direizh evit URL an avatar \"%s\"." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Design ar profil" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5778,29 +5801,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "Ment direizh." @@ -5929,31 +5961,31 @@ msgid "Problem saving notice." msgstr "Ur gudenn 'zo bet pa veze enrollet an ali." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Ur gudenn 'zo bet pa veze enrollet boest degemer ar strollad." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Dibosupl eo enrollañ titouroù ar strollad lec'hel." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6048,22 +6080,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Dibosupl eo krouiñ ar strollad." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Dibosupl eo termeniñ URI ar strollad." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Dibosupl eo en em enskrivañ d'ar strollad." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Dibosupl eo enrollañ titouroù ar strollad lec'hel." @@ -6466,7 +6498,7 @@ msgid "User configuration" msgstr "Kefluniadur an implijer" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Implijer" @@ -7150,23 +7182,41 @@ msgstr "Poeladoù kevreet." msgid "Database error" msgstr "Fazi bank roadennoù" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Enporzhiañ ar restr" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" -#: 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 "" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Gweredekaet" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Diweredekaet" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Adderaouekaat" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 #, fuzzy msgid "Design defaults restored." msgstr "Enrollet eo bet an arventennoù design." @@ -7611,7 +7661,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "Kas din ur postel pa lak unan bennak unan eus va alioù evel pennroll." @@ -7621,7 +7671,7 @@ msgstr "Kas din ur postel pa lak unan bennak unan eus va alioù evel pennroll." #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7643,7 +7693,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7656,7 +7706,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) en deus kaset deoc'h ur c'hemenn" @@ -7667,7 +7717,7 @@ msgstr "%s (@%s) en deus kaset deoc'h ur c'hemenn" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7791,7 +7841,7 @@ msgstr "Diposubl eo termeniñ an implijer mammenn." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7800,7 +7850,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -7941,31 +7991,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Dibosupl eo dilemel ar c'houmanant." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Hiniennel" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Respontoù" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Pennrolloù" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Boest resev" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Ar gemennadennoù ho peus resevet" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Boest kas" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Ar c'hemenadennoù kaset ganeoc'h" @@ -8167,6 +8217,12 @@ msgstr "" msgid "None" msgstr "Hini ebet" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Ment direizh." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8422,17 +8478,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Re hir eo an anv (255 arouezenn d'ar muiañ)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Re hir eo an aozadur (255 arouezenn d'ar muiañ)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Re hir eo ! Ment hirañ an ali a zo a %d arouezenn." - -#~ msgid " tagged %s" -#~ msgstr " merket %s" diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po index 80f1e85970..3ea16fe4ee 100644 --- a/locale/ca/LC_MESSAGES/statusnet.po +++ b/locale/ca/LC_MESSAGES/statusnet.po @@ -14,17 +14,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:08+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:08+0000\n" "Language-Team: Catalan \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ca\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -91,12 +91,14 @@ msgstr "Desa els paràmetres d'accés" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Desa" @@ -164,7 +166,7 @@ msgstr "%1$s i amics, pàgina %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s i amics" @@ -340,11 +342,13 @@ msgstr "No s'ha pogut desar el perfil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -757,7 +761,7 @@ msgstr "No esteu autoritzat." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" "Sembla que hi ha hagut un problema amb la teva sessió. Prova-ho de nou, si " @@ -781,12 +785,13 @@ msgstr "Error de la base de dades en inserir l'usuari de l'aplicació OAuth." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Enviament de formulari inesperat." @@ -839,7 +844,7 @@ msgstr "Compte" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1101,7 +1106,7 @@ msgstr "No existeix l'adjunció." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Cap sobrenom." @@ -1118,7 +1123,7 @@ msgstr "La mida no és vàlida." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1297,7 +1302,7 @@ msgstr "No s'ha pogut desar la informació del bloc." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "No s'ha trobat el grup." @@ -1659,12 +1664,14 @@ msgstr "Tema personalitzat" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Podeu pujar un tema personalitzat de l'StatusNet amb un arxiu ZIP." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Canvia la imatge de fons" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Fons" @@ -1677,40 +1684,48 @@ msgstr "" "Podeu pujar una imatge de fons per al lloc. La mida màxima de fitxer és %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Activada" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Desactivada" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Activa o desactiva la imatge de fons." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Posa en mosaic la imatge de fons" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Canvia els colors" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Contingut" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Barra lateral" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Enllaços" @@ -1722,15 +1737,18 @@ msgstr "Avançat" msgid "Custom CSS" msgstr "CSS personalitzat" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Utilitza els paràmetres per defecte" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Restaura els dissenys per defecte" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Torna a restaurar al valor per defecte" @@ -1738,11 +1756,12 @@ msgstr "Torna a restaurar al valor per defecte" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Desa" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Desa el disseny" @@ -1877,7 +1896,7 @@ msgstr "No s'ha pogut actualitzar el grup." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "No s'han pogut crear els àlies." @@ -2165,7 +2184,7 @@ msgstr "" "afegir un avís als vostres preferits!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Avisos preferits de %s" @@ -2343,8 +2362,10 @@ msgstr "" "Personalitzeu l'aspecte del vostre grup amb una imatge de fons i una paleta " "de colors de la vostra elecció." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "No s'ha pogut actualitzar el vostre disseny." @@ -3312,25 +3333,25 @@ msgstr "" msgid "Notice has no profile." msgstr "L'avís no té cap perfil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "estat de %1$s a %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "El tipus de contingut %s no està permès." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Si us plau, només URL %s sobre HTTP pla." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Format de data no suportat." @@ -3831,7 +3852,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nom complet" @@ -3873,7 +3894,7 @@ msgstr "Biografia" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4464,7 +4485,7 @@ msgid "Repeated!" msgstr "Repetit!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Respostes a %s" @@ -4601,7 +4622,7 @@ msgid "Description" msgstr "Descripció" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Estadístiques" @@ -4717,95 +4738,95 @@ msgid "This is a way to share what you like." msgstr "És una forma de compartir allò que us agrada." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s grup" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "grup %1$s, pàgina %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Perfil del grup" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Avisos" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Àlies" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Accions del grup" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Canal d'avisos del grup %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Canal d'avisos del grup %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Canal d'avisos del grup %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Safata de sortida per %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Membres" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Cap)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Tots els membres" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "S'ha creat" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4815,7 +4836,7 @@ msgstr "Membres" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4834,7 +4855,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4848,7 +4869,7 @@ msgstr "" "curts sobre llur vida i interessos. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administradors" @@ -5639,7 +5660,7 @@ msgstr "La subscripció per defecte no és vàlida: «%1$s» no és cap usuari." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Perfil" @@ -5803,11 +5824,13 @@ msgstr "No es pot llegir l'URL de l'avatar «%s»." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Tipus d'imatge incorrecta per a l'URL de l'avatar «%s»." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Disseny del perfil" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5939,33 +5962,46 @@ msgstr "El Robin pensa que quelcom és impossible." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Cap fitxer pot ser major de %1$d bytes i el fitxer que heu enviat era de %2" +"$d bytes. Proveu de pujar una versió de mida menor." +msgstr[1] "" "Cap fitxer pot ser major de %1$d bytes i el fitxer que heu enviat era de %2" "$d bytes. Proveu de pujar una versió de mida menor." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Un fitxer d'aquesta mida excediria la vostra quota d'usuari de %d bytes." +msgstr[1] "" "Un fitxer d'aquesta mida excediria la vostra quota d'usuari de %d bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +"Un fitxer d'aquesta mida excediria la vostra quota mensual de %d bytes." +msgstr[1] "" "Un fitxer d'aquesta mida excediria la vostra quota mensual de %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "El nom del fitxer no és vàlid." @@ -6095,31 +6131,32 @@ msgid "Problem saving notice." msgstr "S'ha produït un problema en desar l'avís." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "S'ha proporcionat un tipus incorrecte per a saveKnownGroups" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "S'ha produït un problema en desar la safata d'entrada del grup." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "No s'ha pogut desar la resposta de %1$d, %2$d." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6216,22 +6253,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "No s'ha pogut crear el grup." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "No es pot definir l'URI del grup." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "No s'ha pogut establir la pertinença d'aquest grup." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "No s'ha pogut desar la informació del grup local." @@ -6643,7 +6680,7 @@ msgid "User configuration" msgstr "Configuració de l'usuari" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Usuari" @@ -7359,10 +7396,13 @@ msgstr "Aplicacions de connexió autoritzades" msgid "Database error" msgstr "Error de la base de dades" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Puja un fitxer" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7370,16 +7410,29 @@ msgstr "" "Podeu pujar la vostra imatge de fons personal. La mida màxima del fitxer és " "2MB." -#: 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 "" -"El servidor no ha pogut gestionar tantes dades POST (%s bytes) a causa de la " -"configuració actual." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Activada" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Desactivada" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Reinicialitza" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "S'han restaurat els paràmetres de disseny per defecte." @@ -7880,7 +7933,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) ha afegit el vostre avís com a preferit" @@ -7890,7 +7943,7 @@ msgstr "%s (@%s) ha afegit el vostre avís com a preferit" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7928,7 +7981,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7941,7 +7994,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) us ha enviat un avís a la vostra atenció" @@ -7952,7 +8005,7 @@ msgstr "%s (@%s) us ha enviat un avís a la vostra atenció" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8103,7 +8156,7 @@ msgstr "No s'ha pogut determinar el tipus MIME del fitxer." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8114,7 +8167,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "«%s» no és un tipus de fitxer compatible en aquest servidor." @@ -8255,31 +8308,31 @@ msgstr "Avís duplicat." msgid "Couldn't insert new subscription." msgstr "No s'ha pogut inserir una nova subscripció." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Personal" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Respostes" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Preferits" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Safata d'entrada" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Els teus missatges rebuts" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Safata de sortida" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Els teus missatges enviats" @@ -8477,6 +8530,12 @@ msgstr "Núvol d'etiquetes personals" msgid "None" msgstr "Cap" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "El nom del fitxer no és vàlid." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "El servidor no pot gestionar la pujada de temes si no pot tractar ZIP." @@ -8728,23 +8787,9 @@ msgid_plural "%d entries in backup." msgstr[0] "%d entrades a la còpia de seguretat." msgstr[1] "%d entrades a la còpia de seguretat." -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "El nom és massa llarg (màx. 255 caràcters)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "El camp organització és massa llarg (màx. 255 caràcters)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Massa llarg. La longitud màxima és de %d caràcters." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "La mida màxima de l'avís és %d caràcters, incloent l'URL de l'adjunt." - -#~ msgid " tagged %s" -#~ msgstr " etiquetats amb %s" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "Fitxer de còpia de seguretat de l'usuari %s (%s)" +#~ "El servidor no ha pogut gestionar tantes dades POST (%s bytes) a causa de " +#~ "la configuració actual." diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po index c99c634a64..93561c0884 100644 --- a/locale/cs/LC_MESSAGES/statusnet.po +++ b/locale/cs/LC_MESSAGES/statusnet.po @@ -11,18 +11,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:09+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:09+0000\n" "Language-Team: Czech \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: cs\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n >= 2 && n <= 4) ? 1 : " "2 );\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -87,12 +87,14 @@ msgstr "uložit nastavení přístupu" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Uložit" @@ -160,7 +162,7 @@ msgstr "%1$s a přátelé, strana %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s a přátelé" @@ -335,11 +337,13 @@ msgstr "Nepodařilo se uložit profil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -754,7 +758,7 @@ msgstr "Nejste autorizován." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Nastal problém s vaším session tokenem. Zkuste to znovu, prosím." @@ -776,12 +780,13 @@ msgstr "Chyba databáze při vkládání uživatele aplikace OAuth." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Nečekaný požadavek." @@ -834,7 +839,7 @@ msgstr "Účet" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1099,7 +1104,7 @@ msgstr "Žádná taková příloha." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Žádná přezdívka." @@ -1116,7 +1121,7 @@ msgstr "Neplatná velikost" #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1292,7 +1297,7 @@ msgstr "Nepodařilo se uložit blokování." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Žádný takový uživatel." @@ -1657,12 +1662,14 @@ msgstr "Vlastní téma" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Můžete nahrát vlastní StatusNet téma jako .ZIP archiv." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Změnit obrázek na pozadí" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Pozadí" @@ -1675,40 +1682,48 @@ msgstr "" "Můžete nahrát obrázek na pozadí stránek. Maximální velikost souboru je %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "zap." #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "vyp." -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Zapněte nebů vypněte obrázek na pozadí." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Dlaždicovat obrázek na pozadí" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Změnit barvy" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Obsah" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Boční panel" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Odkazy" @@ -1720,15 +1735,18 @@ msgstr "Rozšířené" msgid "Custom CSS" msgstr "Vlastní CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Použít výchozí" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Obnovit výchozí vzhledy" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Reset zpět do výchozího" @@ -1736,11 +1754,12 @@ msgstr "Reset zpět do výchozího" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Uložit" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Uložit vzhled" @@ -1876,7 +1895,7 @@ msgstr "Nelze aktualizovat skupinu." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Nelze vytvořit aliasy." @@ -2162,7 +2181,7 @@ msgstr "" "oznámení k oblíbeným!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "oblíbená oznámení uživatele %s" @@ -2340,8 +2359,10 @@ msgstr "" "Přizpůsobit vzhled skupiny obrázkem na pozadí a barevnou paletou vašeho " "výběru." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Nelze uložit vzhled." @@ -3298,25 +3319,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Uživatel nemá profil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "status %1 na %2" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Typ obsahu %s není podporován." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Only %s URLs over plain HTTP please." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Nepodporovaný formát dat." @@ -3815,7 +3836,7 @@ msgstr "1-64 znaků nebo čísel, bez teček, čárek a mezer" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Celé jméno" @@ -3858,7 +3879,7 @@ msgstr "O mě" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4437,7 +4458,7 @@ msgid "Repeated!" msgstr "Opakované!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Odpovědi na %s" @@ -4575,7 +4596,7 @@ msgid "Description" msgstr "Popis" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistiky" @@ -4691,95 +4712,95 @@ msgid "This is a way to share what you like." msgstr "Toto je způsob, jak sdílet to, co se vám líbí." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "skupina %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "skupina %1$s, str. %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Profil skupiny" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Poznámka" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Aliasy" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Akce skupiny" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Feed sdělení skupiny %s (RSS 1.0" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Feed sdělení skupiny %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Feed sdělení skupiny %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF pro skupinu %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Členové" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(nic)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Všichni členové" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Vytvořeno" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4789,7 +4810,7 @@ msgstr "Členové" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4807,7 +4828,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4821,7 +4842,7 @@ msgstr "" "životě a zájmech. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Adminové" @@ -5600,7 +5621,7 @@ msgstr "Neplatné výchozí přihlášení: '%1$s' není uživatel." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5763,11 +5784,13 @@ msgstr "Nelze načíst avatara z URL '%s'" msgid "Wrong image type for avatar URL ‘%s’." msgstr "Špatný typ obrázku na URL '%s'" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Vzhled profilu" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5900,31 +5923,47 @@ msgstr "Robin si myslí, že je něco nemožné." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Žádný soubor nesmí být větší než %1$d bajtů a soubor, který jste poslal měl %" +"2$d bajtů. Zkuste nahrát menší verzi." +msgstr[1] "" +"Žádný soubor nesmí být větší než %1$d bajtů a soubor, který jste poslal měl %" +"2$d bajtů. Zkuste nahrát menší verzi." +msgstr[2] "" "Žádný soubor nesmí být větší než %1$d bajtů a soubor, který jste poslal měl %" "2$d bajtů. Zkuste nahrát menší verzi." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "Takto velký soubor by překročil vaši uživatelskou kvótu %d bajtů." +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "Takto velký soubor by překročil vaši uživatelskou kvótu %d bajtů." +msgstr[1] "Takto velký soubor by překročil vaši uživatelskou kvótu %d bajtů." +msgstr[2] "Takto velký soubor by překročil vaši uživatelskou kvótu %d bajtů." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Takto velký soubor by překročil vaši měsíční kvótu %d bajtů." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "Takto velký soubor by překročil vaši měsíční kvótu %d bajtů." +msgstr[1] "Takto velký soubor by překročil vaši měsíční kvótu %d bajtů." +msgstr[2] "Takto velký soubor by překročil vaši měsíční kvótu %d bajtů." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Neplatné jméno souboru." @@ -6053,31 +6092,32 @@ msgid "Problem saving notice." msgstr "Problém při ukládání sdělení" #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "saveKnownGroups obdrželo špatný typ." #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problém při ukládání skupinového inboxu" #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Nelze uložit místní info skupiny." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6172,22 +6212,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Nelze vytvořit skupinu." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Nelze nastavit URI skupiny." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Nelze nastavit členství ve skupině." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Nelze uložit místní info skupiny." @@ -6592,7 +6632,7 @@ msgid "User configuration" msgstr "Akce uživatele" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Uživatel" @@ -7307,10 +7347,13 @@ msgstr "Autorizované propojené aplikace" msgid "Database error" msgstr "Chyba databáze" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Nahrát soubor" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7318,16 +7361,29 @@ msgstr "" "Můžete nahrát váš osobní obrázek na pozadí. Maximální velikost souboru je 2 " "MB." -#: 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 "" -"Server nebyl schopen zpracovat tolik POST dat (%s bytů) vzhledem k jeho " -"aktuální konfiguraci." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "zap." -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "vyp." + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Reset" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Obnoveno výchozí nastavení vzhledu." @@ -7831,7 +7887,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) přidal vaše oznámení jako oblíbené" @@ -7841,7 +7897,7 @@ msgstr "%s (@%s) přidal vaše oznámení jako oblíbené" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7880,7 +7936,7 @@ msgstr "" " %6$s \n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7893,7 +7949,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) poslal oznámení žádající o vaši pozornost" @@ -7904,7 +7960,7 @@ msgstr "%s (@%s) poslal oznámení žádající o vaši pozornost" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8052,7 +8108,7 @@ msgstr "Nelze určit typ MIME souboru." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8061,7 +8117,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8202,31 +8258,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Nelze vložit odebírání" -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Osobní" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Odpovědi" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Oblíbené" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Doručená pošta" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Vaše příchozí zprávy" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Odeslaná pošta" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Vaše odeslané zprávy" @@ -8424,6 +8480,12 @@ msgstr "Mrak štítků kterými jsou uživatelé označeni" msgid "None" msgstr "Nic" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Neplatné jméno souboru." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "Tento server nemůže zpracovat nahrání tématu bez podpory ZIP." @@ -8682,19 +8744,9 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Jméno je moc dlouhé (maximální délka je 255 znaků)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Organizace je příliš dlouhá (max 255 znaků)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Je to příliš dlouhé. Maximální délka sdělení je %d znaků" - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "Maximální délka notice je %d znaků včetně přiložené URL." - -#~ msgid " tagged %s" -#~ msgstr "označen %s" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "Server nebyl schopen zpracovat tolik POST dat (%s bytů) vzhledem k jeho " +#~ "aktuální konfiguraci." diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po index 27edfc5594..63416a8ba4 100644 --- a/locale/de/LC_MESSAGES/statusnet.po +++ b/locale/de/LC_MESSAGES/statusnet.po @@ -19,17 +19,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:10+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:10+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -95,12 +95,14 @@ msgstr "Zugangs-Einstellungen speichern" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Speichern" @@ -168,7 +170,7 @@ msgstr "%1$s und Freunde, Seite% 2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s und Freunde" @@ -344,11 +346,13 @@ msgstr "Konnte Profil nicht speichern." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -761,7 +765,7 @@ msgstr "Du bist nicht autorisiert." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Es gab ein Problem mit deinem Sitzungstoken. Bitte versuche es erneut." @@ -783,12 +787,13 @@ msgstr "Datenbankfehler beim Einfügen des OAuth-Programm-Benutzers." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Unerwartete Formulareingabe." @@ -840,7 +845,7 @@ msgstr "Profil" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1111,7 +1116,7 @@ msgstr "Kein solcher Anhang." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Kein Benutzername." @@ -1128,7 +1133,7 @@ msgstr "Ungültige Größe." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1303,7 +1308,7 @@ msgstr "Konnte Blockierungsdaten nicht speichern." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Keine derartige Gruppe." @@ -1660,12 +1665,14 @@ msgstr "Angepasster Skin" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Du kannst ein angepasstes StatusNet-Theme als .ZIP-Archiv hochladen." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Hintergrundbild ändern" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Hintergrund" @@ -1679,40 +1686,48 @@ msgstr "" "Dateigröße beträgt %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "An" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Aus" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Hintergrundbild ein- oder ausschalten." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Hintergrundbild kacheln" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Farben ändern" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Inhalt" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Seitenleiste" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Links" @@ -1724,15 +1739,18 @@ msgstr "Erweitert" msgid "Custom CSS" msgstr "Eigene CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Standardeinstellungen benutzen" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Standard-Design wiederherstellen" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Standard wiederherstellen" @@ -1740,11 +1758,12 @@ msgstr "Standard wiederherstellen" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Speichern" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Design speichern" @@ -1789,7 +1808,6 @@ msgstr "Name ist erforderlich." #. TRANS: Validation error shown when providing too long a name in the "Edit application" form. #: actions/editapplication.php:188 actions/newapplication.php:169 -#, fuzzy msgid "Name is too long (maximum 255 characters)." msgstr "Der Name ist zu lang (maximal 255 Zeichen)." @@ -1880,7 +1898,7 @@ msgstr "Konnte Gruppe nicht aktualisieren." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Konnte keinen Favoriten erstellen." @@ -2170,7 +2188,7 @@ msgstr "" "bist der erste der eine Nachricht favorisiert!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%ss favorisierte Nachrichten" @@ -2350,8 +2368,10 @@ msgstr "" "Stelle ein wie die Gruppenseite aussehen soll. Hintergrundbild und " "Farbpalette frei wählbar." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Konnte dein Design nicht aktualisieren." @@ -2748,7 +2768,7 @@ msgstr[1] "Du hast diese Benutzer bereits abonniert:" #. TRANS: Used as list item for already subscribed users (%1$s is nickname, %2$s is e-mail address). #. TRANS: Used as list item for already registered people (%1$s is nickname, %2$s is e-mail address). #: actions/invite.php:145 actions/invite.php:159 -#, fuzzy, php-format +#, php-format msgctxt "INVITE" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2938,7 +2958,6 @@ msgstr "" "wählst." #: actions/licenseadminpanel.php:156 -#, fuzzy msgid "Invalid license title. Maximum length is 255 characters." msgstr "Ungültiger Lizenztitel. Die maximale Länge liegt bei 255 Zeichen." @@ -3320,25 +3339,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Nachricht hat kein Profil" -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Status von %1$s auf %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Content-Typ %s wird nicht untersützt." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Bitte nur %s URLs über einfaches HTTP." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Kein unterstütztes Datenformat." @@ -3389,9 +3408,8 @@ msgstr "Profil-Designs anzeigen oder verstecken." #. TRANS: Form validation error for form "Other settings" in user profile. #: actions/othersettings.php:162 -#, fuzzy msgid "URL shortening service is too long (maximum 50 characters)." -msgstr "URL-Auto-Kürzungs-Dienst ist zu lang (max. 50 Zeichen)." +msgstr "URL-Auto-Kürzungs-Dienst ist zu lang (maximal 50 Zeichen)." #: actions/otp.php:69 msgid "No user ID specified." @@ -3820,7 +3838,7 @@ msgstr "1-64 Kleinbuchstaben oder Zahlen, keine Satz- oder Leerzeichen." #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Bürgerlicher Name" @@ -3863,7 +3881,7 @@ msgstr "Biografie" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4207,9 +4225,8 @@ msgid "Unexpected password reset." msgstr "Unerwarteter Passwortreset." #: actions/recoverpassword.php:365 -#, fuzzy msgid "Password must be 6 characters or more." -msgstr "Passwort muss mehr als 6 Zeichen enthalten" +msgstr "Passwort muss mehr als 6 Zeichen enthalten." #: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." @@ -4455,7 +4472,7 @@ msgid "Repeated!" msgstr "Wiederholt!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Antworten an %s" @@ -4593,7 +4610,7 @@ msgid "Description" msgstr "Beschreibung" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistik" @@ -4710,94 +4727,94 @@ msgid "This is a way to share what you like." msgstr "Dies ist ein Weg, Dinge zu teilen, die dir gefallen." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s-Gruppe" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s Gruppe, Seite %d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Gruppenprofil" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nachricht" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Pseudonyme" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Gruppenaktionen" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Nachrichtenfeed der Gruppe %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Nachrichtenfeed der Gruppe %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Nachrichtenfeed der Gruppe %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Postausgang von %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Mitglieder" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Kein)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Alle Mitglieder" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 msgctxt "LABEL" msgid "Created" msgstr "Erstellt" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 msgctxt "LABEL" msgid "Members" msgstr "Mitglieder" @@ -4806,7 +4823,7 @@ msgstr "Mitglieder" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4824,7 +4841,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4838,7 +4855,7 @@ msgstr "" "Nachrichten über ihr Leben und Interessen. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Admins" @@ -4925,11 +4942,10 @@ msgstr "FOAF von %s" #. TRANS: First sentence of empty list message for a stream. $1%s is a user nickname. #: actions/showstream.php:211 -#, fuzzy, php-format +#, php-format msgid "This is the timeline for %1$s, but %1$s hasn't posted anything yet." msgstr "" -"Dies ist die Zeitleiste von %1$s und Freunden, aber bisher hat niemand etwas " -"gepostet." +"Dies ist die Zeitleiste von %1$s, aber bisher hat %1$s noch nichts gepostet." #. TRANS: Second sentence of empty list message for a stream for the user themselves. #: actions/showstream.php:217 @@ -5127,7 +5143,7 @@ msgstr "Seitenbenachrichtigung" #: actions/sitenoticeadminpanel.php:179 #, fuzzy msgid "Site-wide notice text (255 characters maximum; HTML allowed)" -msgstr "Systembenachrichtigung (max. 255 Zeichen; HTML erlaubt)" +msgstr "Systembenachrichtigung (maximal 255 Zeichen; HTML erlaubt)" #. TRANS: Title for button to save site notice in admin panel. #: actions/sitenoticeadminpanel.php:201 @@ -5613,7 +5629,6 @@ msgstr "Das Zeichenlimit der Biografie muss numerisch sein!" #. TRANS: Form validation error in user admin panel when welcome text is too long. #: actions/useradminpanel.php:154 -#, fuzzy msgid "Invalid welcome text. Maximum length is 255 characters." msgstr "Willkommens-Nachricht ungültig. Maximale Länge sind 255 Zeichen." @@ -5626,7 +5641,7 @@ msgstr "Ungültiges Abonnement: „%1$s“ ist kein Benutzer" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5652,7 +5667,6 @@ msgstr "Neue Benutzer empfangen" #. TRANS: Tooltip in user admin panel for setting new user welcome text. #: actions/useradminpanel.php:238 -#, fuzzy msgid "Welcome text for new users (maximum 255 characters)." msgstr "Willkommens-Nachricht für neue Benutzer (maximal 255 Zeichen)." @@ -5790,11 +5804,13 @@ msgstr "Konnte Avatar-URL nicht öffnen „%s“" msgid "Wrong image type for avatar URL ‘%s’." msgstr "Falscher Bildtyp für „%s“" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Profil-Design-Einstellungen" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5927,33 +5943,46 @@ msgstr "Robin denkt, dass etwas unmöglich ist." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Keine Datei darf größer als %d Bytes sein und die Datei die du verschicken " +"wolltest war %d Bytes groß. Bitte eine kleinere Version hochladen." +msgstr[1] "" "Keine Datei darf größer als %d Bytes sein und die Datei die du verschicken " "wolltest war %d Bytes groß. Bitte eine kleinere Version hochladen." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "Eine Datei dieser Größe überschreitet deine User Quota von %d Byte." +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "Eine Datei dieser Größe überschreitet deine User Quota von %d Byte." +msgstr[1] "Eine Datei dieser Größe überschreitet deine User Quota von %d Byte." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +"Eine Datei dieser Größe würde deine monatliche Quota von %d Byte " +"überschreiten." +msgstr[1] "" "Eine Datei dieser Größe würde deine monatliche Quota von %d Byte " "überschreiten." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Ungültiger Dateiname." @@ -6083,33 +6112,34 @@ msgid "Problem saving notice." msgstr "Problem bei Speichern der Nachricht." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "" "Der Methode saveKnownGroups wurde ein schlechter Wert zur Verfügung gestellt" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problem bei Speichern der Nachricht." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Konnte Antwort auf %1$d, %2$d nicht speichern." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 -#, fuzzy, php-format +#: classes/Profile.php:164 classes/User_group.php:247 +#, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6208,22 +6238,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Konnte Gruppe nicht erstellen." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Konnte die Gruppen-URI nicht setzen." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Konnte Gruppenmitgliedschaft nicht setzen." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Konnte die lokale Gruppen Information nicht speichern." @@ -6632,7 +6662,7 @@ msgid "User configuration" msgstr "Benutzereinstellung" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Benutzer" @@ -6984,7 +7014,7 @@ msgstr "%1$s hat die Gruppe %2$s verlassen." #. TRANS: Whois output. #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL. #: lib/command.php:426 -#, fuzzy, php-format +#, php-format msgctxt "WHOIS" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -7031,11 +7061,11 @@ msgstr "" #. TRANS: Message given if content is too long. %1$sd is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:488 -#, fuzzy, php-format +#, php-format msgid "Message too long - maximum is %1$d character, you sent %2$d." msgid_plural "Message too long - maximum is %1$d characters, you sent %2$d." msgstr[0] "" -"Nachricht zu lang - maximal %1$d Zeichen erlaubt, du hast %2$d gesendet." +"Nachricht zu lang - maximal ein Zeichen erlaubt, du hast %2$d gesendet." msgstr[1] "" "Nachricht zu lang - maximal %1$d Zeichen erlaubt, du hast %2$d gesendet." @@ -7059,13 +7089,13 @@ msgstr "Fehler beim Wiederholen der Nachricht" #. TRANS: Message given if content of a notice for a reply is too long. %1$d is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:591 -#, fuzzy, php-format +#, php-format msgid "Notice too long - maximum is %1$d character, you sent %2$d." msgid_plural "Notice too long - maximum is %1$d characters, you sent %2$d." msgstr[0] "" -"Nachricht zu lange - maximal %1$d Zeichen erlaubt, du hast %2$ gesendet" +"Nachricht zu lang - maximal ein Zeichen erlaubt, du hast %2$d gesendet." msgstr[1] "" -"Nachricht zu lange - maximal %1$d Zeichen erlaubt, du hast %2$ gesendet" +"Nachricht zu lang - maximal %1$d Zeichen erlaubt, du hast %2$d gesendet." #. TRANS: Text shown having sent a reply to a notice successfully. #. TRANS: %s is the nickname of the user of the notice the reply was sent to. @@ -7341,10 +7371,13 @@ msgstr "Programme mit Zugriffserlaubnis" msgid "Database error" msgstr "Datenbankfehler." -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Datei hochladen" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7352,16 +7385,29 @@ msgstr "" "Du kannst dein persönliches Hintergrundbild hochladen. Die maximale " "Dateigröße ist 2MB." -#: 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 "" -"Der Server kann so große POST Abfragen (%s bytes) aufgrund der Konfiguration " -"nicht verarbeiten." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "An" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Aus" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Zurücksetzen" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Standard-Design wieder hergestellt." @@ -7428,29 +7474,27 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 Kleinbuchstaben oder Zahlen, keine Satz- oder Leerzeichen" #: lib/groupeditform.php:163 -#, fuzzy msgid "URL of the homepage or blog of the group or topic." -msgstr "Adresse der Homepage oder Blogs der Gruppe oder des Themas" +msgstr "Adresse der Homepage oder Blogs der Gruppe oder des Themas." #: lib/groupeditform.php:168 msgid "Describe the group or topic" msgstr "Beschreibe die Gruppe oder das Thema" #: lib/groupeditform.php:170 -#, fuzzy, php-format +#, php-format msgid "Describe the group or topic in %d character or less" msgid_plural "Describe the group or topic in %d characters or less" -msgstr[0] "Beschreibe die Gruppe oder das Thema in %d Zeichen" +msgstr[0] "Beschreibe die Gruppe oder das Thema in einem Zeichen" msgstr[1] "Beschreibe die Gruppe oder das Thema in %d Zeichen" #: lib/groupeditform.php:182 -#, fuzzy msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." -msgstr "Ort der Gruppe, optional, beispielsweise „Stadt, Region, Land“" +msgstr "Ort der Gruppe, optional, beispielsweise „Stadt, Region, Land“." #: lib/groupeditform.php:190 -#, fuzzy, php-format +#, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " "alias allowed." @@ -7458,11 +7502,11 @@ msgid_plural "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " "aliases allowed." msgstr[0] "" -"Zusätzliche Spitznamen für die Gruppe, Komma oder Leerzeichen getrennt, max %" -"d" +"Zusätzliche Spitznamen für die Gruppe, Komma oder Leerzeichen getrennt, " +"maximal einer." msgstr[1] "" -"Zusätzliche Spitznamen für die Gruppe, Komma oder Leerzeichen getrennt, max %" -"d" +"Zusätzliche Spitznamen für die Gruppe, Komma oder Leerzeichen getrennt, " +"maximal %d." #. TRANS: Menu item in the group navigation page. #: lib/groupnav.php:86 @@ -7866,7 +7910,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%1$s (@%2$s) hat deine Nachricht als Favorit gespeichert" @@ -7876,7 +7920,7 @@ msgstr "%1$s (@%2$s) hat deine Nachricht als Favorit gespeichert" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7908,7 +7952,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7921,7 +7965,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "" @@ -7934,7 +7978,7 @@ msgstr "" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8085,7 +8129,7 @@ msgstr "Konnte den MIME-Typ nicht feststellen." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8096,7 +8140,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "„%s“ ist kein unterstütztes Dateiformat auf diesem Server." @@ -8237,31 +8281,31 @@ msgstr "Doppelte Nachricht." msgid "Couldn't insert new subscription." msgstr "Konnte neues Abonnement nicht eintragen." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Meine Zeitleiste" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Antworten" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favoriten" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Posteingang" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Deine eingehenden Nachrichten" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Postausgang" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Deine gesendeten Nachrichten" @@ -8355,9 +8399,8 @@ msgstr "Widerrufe die „%s“-Rolle von diesem Benutzer" #. TRANS: Client error on action trying to visit a non-existing page. #: lib/router.php:847 -#, fuzzy msgid "Page not found." -msgstr "API-Methode nicht gefunden." +msgstr "Seite nicht gefunden." #: lib/sandboxform.php:67 msgid "Sandbox" @@ -8459,6 +8502,12 @@ msgstr "Personen-Tag, wie markiert wurde" msgid "None" msgstr "Nichts" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Ungültiger Dateiname." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "Dieser Server kann nicht mit Theme-Uploads ohne ZIP-Support umgehen." @@ -8478,12 +8527,16 @@ msgid "Invalid theme: bad directory structure." msgstr "Ungültiger Theme: schlechte Ordner-Struktur." #: lib/themeuploader.php:166 -#, fuzzy, php-format +#, php-format msgid "Uploaded theme is too large; must be less than %d byte uncompressed." msgid_plural "" "Uploaded theme is too large; must be less than %d bytes uncompressed." -msgstr[0] "Der hochgeladene Theme ist zu groß; er muss unter %d Bytes sein." -msgstr[1] "Der hochgeladene Theme ist zu groß; er muss unter %d Bytes sein." +msgstr[0] "" +"Der hochgeladene Theme ist zu groß; er muss unkomprimiert unter einem Byte " +"sein." +msgstr[1] "" +"Der hochgeladene Theme ist zu groß; er muss unkomprimiert unter %d Bytes " +"sein." #: lib/themeuploader.php:179 msgid "Invalid theme archive: missing file css/display.css" @@ -8516,7 +8569,6 @@ msgstr "Top-Schreiber" #. TRANS: Title for the form to unblock a user. #: lib/unblockform.php:67 -#, fuzzy msgctxt "TITLE" msgid "Unblock" msgstr "Freigeben" @@ -8702,29 +8754,15 @@ msgstr "Keine Benutzer-ID angegeben" #. TRANS: Commandline script output. %d is the number of entries in the activity stream in backup; used for plural. #: scripts/restoreuser.php:98 -#, fuzzy, php-format +#, php-format msgid "%d entry in backup." msgid_plural "%d entries in backup." -msgstr[0] "%d Einträge im Backup." +msgstr[0] "Ein Eintrag im Backup." msgstr[1] "%d Einträge im Backup." -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Der Name ist zu lang (maximal 255 Zeichen)." - -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Die angegebene Organisation ist zu lang (maximal 255 Zeichen)." - -#~ msgid "That's too long. Max notice size is %d chars." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "Das war zu lang. Die Länge einer Nachricht ist auf %d Zeichen beschränkt." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "" -#~ "Die maximale Größe von Nachrichten ist %d Zeichen, inklusive der URL der " -#~ "Anhänge" - -#~ msgid " tagged %s" -#~ msgstr "Nachrichten, die mit %s getagt sind" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "Backup-Datei des Benutzers %s (%s)" +#~ "Der Server kann so große POST Abfragen (%s bytes) aufgrund der " +#~ "Konfiguration nicht verarbeiten." diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po index c36341dc6f..740a9de724 100644 --- a/locale/en_GB/LC_MESSAGES/statusnet.po +++ b/locale/en_GB/LC_MESSAGES/statusnet.po @@ -13,17 +13,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:12+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:11+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 (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: en-gb\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -88,12 +88,14 @@ msgstr "Save access settings" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Save" @@ -161,7 +163,7 @@ msgstr "%1$s and friends, page %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s and friends" @@ -336,11 +338,13 @@ msgstr "Could not save profile." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -747,7 +751,7 @@ msgstr "You are not authorised." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "There was a problem with your session token. Try again, please." @@ -769,12 +773,13 @@ msgstr "Database error inserting OAuth application user." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Unexpected form submission." @@ -827,7 +832,7 @@ msgstr "Account" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1087,7 +1092,7 @@ msgstr "No such attachment." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "No nickname." @@ -1104,7 +1109,7 @@ msgstr "Invalid size." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1280,7 +1285,7 @@ msgstr "Failed to save block information." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "No such group." @@ -1639,12 +1644,14 @@ msgstr "Custom theme" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Change background image" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Background" @@ -1658,40 +1665,48 @@ msgstr "" "$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "On" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Off" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Turn background image on or off." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Tile background image" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Change colours" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Content" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Sidebar" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Links" @@ -1703,15 +1718,18 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Use defaults" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Restore default designs" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Reset back to default" @@ -1719,11 +1737,12 @@ msgstr "Reset back to default" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Save" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Save design" @@ -1859,7 +1878,7 @@ msgstr "Could not update group." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Could not create aliases." @@ -2143,7 +2162,7 @@ msgstr "" "notice to your favourites!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s's favourite notices" @@ -2322,8 +2341,10 @@ msgstr "" "Customise the way your group looks with a background image and a colour " "palette of your choice." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Couldn't update your design." @@ -3275,25 +3296,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Notice has no profile." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s's status on %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Content type %s not supported." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Not a supported data format." @@ -3780,7 +3801,7 @@ msgstr "1-64 lowercase letters or numbers, no punctuation or spaces" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Full name" @@ -3822,7 +3843,7 @@ msgstr "Bio" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4398,7 +4419,7 @@ msgid "Repeated!" msgstr "Repeated!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Replies to %s" @@ -4534,7 +4555,7 @@ msgid "Description" msgstr "Description" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistics" @@ -4648,95 +4669,95 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s group" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s group, page %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Group profile" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Note" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Group actions" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Notice feed for %s group (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Notice feed for %s group (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Notice feed for %s group (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF for %s group" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Members" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(None)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "All members" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Created" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4746,7 +4767,7 @@ msgstr "Members" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4764,7 +4785,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4778,7 +4799,7 @@ msgstr "" "their life and interests. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Admins" @@ -5542,7 +5563,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profile" @@ -5706,11 +5727,13 @@ msgstr "Can’t read avatar URL ‘%s’." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Wrong image type for avatar URL ‘%s’." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Profile design" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5840,29 +5863,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Invalid filename." @@ -5990,31 +6022,31 @@ msgid "Problem saving notice." msgstr "Problem saving notice." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problem saving group inbox." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Could not save reply for %1$d, %2$d." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6109,22 +6141,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Could not create group." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Could not set group URI." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Could not set group membership." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Could not save local group info." @@ -6529,7 +6561,7 @@ msgid "User configuration" msgstr "User configuration" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "User" @@ -7225,26 +7257,42 @@ msgstr "Authorised connected applications" msgid "Database error" msgstr "" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Upload file" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" "You can upload your personal background image. The maximum file size is 2MB." -#: 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 "" -"The server was unable to handle that much POST data (%s bytes) due to its " -"current configuration." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "On" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Off" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Reset" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Design defaults restored." @@ -7702,7 +7750,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) added your notice as a favorite" @@ -7712,7 +7760,7 @@ msgstr "%s (@%s) added your notice as a favorite" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7734,7 +7782,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7744,7 +7792,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) sent a notice to your attention" @@ -7755,7 +7803,7 @@ msgstr "%s (@%s) sent a notice to your attention" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7874,7 +7922,7 @@ msgstr "Could not determine file's MIME type." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7883,7 +7931,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8022,31 +8070,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Couldn't insert new subscription." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Personal" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Replies" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favourites" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Inbox" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Your incoming messages" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Outbox" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Your sent messages" @@ -8244,6 +8292,12 @@ msgstr "" msgid "None" msgstr "None" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Invalid filename." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8489,19 +8543,9 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Name is too long (max 255 chars)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Organisation is too long (max 255 chars)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "That's too long. Max notice size is %d chars." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "Max notice size is %d chars, including attachment URL." - -#~ msgid " tagged %s" -#~ msgstr " tagged %s" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." diff --git a/locale/eo/LC_MESSAGES/statusnet.po b/locale/eo/LC_MESSAGES/statusnet.po index 10bb52471b..a324ca412b 100644 --- a/locale/eo/LC_MESSAGES/statusnet.po +++ b/locale/eo/LC_MESSAGES/statusnet.po @@ -15,17 +15,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:13+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:12+0000\n" "Language-Team: Esperanto \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: eo\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -90,12 +90,14 @@ msgstr "Konservu atingan agordon" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Konservu" @@ -163,7 +165,7 @@ msgstr "%1$s kaj amikoj, paĝo %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s kaj amikoj" @@ -338,11 +340,13 @@ msgstr "Malsukcesis konservi la profilon." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -750,7 +754,7 @@ msgstr "Vi ne estas rajtigita." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Estis problemo pri via seanco. Bonvolu provi refoje." @@ -772,12 +776,13 @@ msgstr "Datumbaza eraro enigi la uzanton de *OAuth-aplikaĵo." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Neatendita formo-sendo." @@ -829,7 +834,7 @@ msgstr "Konto" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1094,7 +1099,7 @@ msgstr "Ne estas tiu aldonaĵo." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Neniu kromnomo." @@ -1111,7 +1116,7 @@ msgstr "Grando nevalida." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Vizaĝbildo" @@ -1286,7 +1291,7 @@ msgstr "Eraris konservi blokado-informon." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Ne estas tiu grupo." @@ -1650,12 +1655,14 @@ msgstr "Propra desegno" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Vi povas alŝuti propran StatusNet-desegnon kiel .zip-dosiero" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Ŝanĝi fonbildon" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Fono" @@ -1667,40 +1674,48 @@ msgid "" msgstr "Vi povas alŝuti fonbildon por la retejo. Dosiero-grandlimo estas %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "En" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "For" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Aktivigi aŭ senaktivigi fonbildon" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Ripeti la fonbildon" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Ŝanĝi kolorojn" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Enhavo" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Flanka strio" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Teksto" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Ligiloj" @@ -1712,15 +1727,18 @@ msgstr "Speciala" msgid "Custom CSS" msgstr "Propra CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Uzu defaŭlton" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Restaŭri defaŭltajn desegnojn" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Redefaŭltiĝi" @@ -1728,11 +1746,12 @@ msgstr "Redefaŭltiĝi" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Konservi" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Savi desegnon" @@ -1868,7 +1887,7 @@ msgstr "Malsukcesis ĝisdatigi grupon." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Malsukcesis krei alinomon." @@ -2151,7 +2170,7 @@ msgstr "" "sia ŝatolisto!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Ŝatataj avizoj de %s" @@ -2327,8 +2346,10 @@ msgid "" "palette of your choice." msgstr "Agordi kiel aspektu via grupo, per elekto de fonbildo kaj koloraro." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Malsukcesis ĝisdatigi vian desegnon." @@ -3275,25 +3296,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Avizo sen profilo" -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Stato de %1$s ĉe %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Enhavtipo %s ne subteniĝas." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Bonvolu, nur %s-URL per plata HTTP." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Datumformato ne subteniĝas." @@ -3774,7 +3795,7 @@ msgstr "1-64 minusklaj literoj aŭ ciferoj, neniu interpunkcio aŭ spaco" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Plena nomo" @@ -3816,7 +3837,7 @@ msgstr "Biografio" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4392,7 +4413,7 @@ msgid "Repeated!" msgstr "Ripetita!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Respondoj al %s" @@ -4530,7 +4551,7 @@ msgid "Description" msgstr "Priskribo" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistiko" @@ -4644,95 +4665,95 @@ msgid "This is a way to share what you like." msgstr "Tiel vi povas diskonigi vian ŝataton." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Grupo %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Grupo %1$s, paĝo %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Grupa profilo" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Noto" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Alnomo" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Grupaj agoj" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Avizofluo de grupo %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Avizofluo de grupo %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Avizofluo de grupo %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Foramiko de grupo %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Grupanoj" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(nenio)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Ĉiuj grupanoj" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Kreita" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4742,7 +4763,7 @@ msgstr "Grupanoj" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4759,7 +4780,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4773,7 +4794,7 @@ msgstr "" "siaj vivoj kaj ŝatokupoj. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administrantoj" @@ -5543,7 +5564,7 @@ msgstr "Nevalida defaŭlta abono: '%1$s' ne estas uzanto." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profilo" @@ -5704,11 +5725,13 @@ msgstr "Malsukcesis legi vizaĝbildan URL ‘%s’." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Malĝusta bildotipo por vizaĝbilda URL ‘%s'." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Profila desegno" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5837,31 +5860,42 @@ msgstr "Robin pensas ke io neeblas." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Grandlimo por sendota dosiero estas %1$d bajtoj, tamen tio, kion vi volis " +"sendi grandas %2$d bajtojn. Provu per versio pli malgranda." +msgstr[1] "" "Grandlimo por sendota dosiero estas %1$d bajtoj, tamen tio, kion vi volis " "sendi grandas %2$d bajtojn. Provu per versio pli malgranda." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "Dosiero tiel granda superos vian uzantan kvoton kun %d bajtoj." +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "Dosiero tiel granda superos vian uzantan kvoton kun %d bajtoj." +msgstr[1] "Dosiero tiel granda superos vian uzantan kvoton kun %d bajtoj." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Dosiero tiel granda superos vian monatan kvoton kun %d bajtoj." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "Dosiero tiel granda superos vian monatan kvoton kun %d bajtoj." +msgstr[1] "Dosiero tiel granda superos vian monatan kvoton kun %d bajtoj." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Nevalida dosiernomo." @@ -5988,31 +6022,32 @@ msgid "Problem saving notice." msgstr "Malsukcesis konservi avizon." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Fuŝa tipo donita al saveKnownGroups" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Malsukcesis konservi grupan alvenkeston." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Malsukcesis lokan grupan informon." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6107,22 +6142,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Malsukcesis krei grupon." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Malsukcesis ĝisdatigi grupan URI." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Malsukcesis ĝisdatigi grupan anecon." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Malsukcesis lokan grupan informon." @@ -6530,7 +6565,7 @@ msgid "User configuration" msgstr "Uzanta agordo" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Uzanto" @@ -7241,26 +7276,42 @@ msgstr "Konektitaj aplikaĵoj rajtigitaj" msgid "Database error" msgstr "Datumbaza eraro" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Alŝuti dosieron" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" "Vi povas alŝuti vian propran fonbildon. La dosiera grandlimo estas 2MB." -#: 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 "" -"La servilo ne povis trakti tiom da POST-datumo (% bajtoj) pro ĝia nuna " -"agordo." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "En" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "For" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Restarigi" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Desegnaj defaŭltoj konserviĝas." @@ -7760,7 +7811,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) ŝatis vian avizon" @@ -7770,7 +7821,7 @@ msgstr "%s (@%s) ŝatis vian avizon" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7808,7 +7859,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7821,7 +7872,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) afiŝis avizon al vi" @@ -7832,7 +7883,7 @@ msgstr "%s (@%s) afiŝis avizon al vi" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7980,7 +8031,7 @@ msgstr "Malsukcesis decidi dosieran MIME-tipon." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7991,7 +8042,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "\"%s\" ne estas subtenata tipo ĉe tiu ĉi servilo." @@ -8132,31 +8183,31 @@ msgstr "Refoja avizo." msgid "Couldn't insert new subscription." msgstr "Eraris enmeti novan abonon." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Persona" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Respondoj" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Ŝatolisto" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Alvenkesto" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Viaj alvenaj mesaĝoj" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Elirkesto" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Viaj senditaj mesaĝoj" @@ -8355,6 +8406,12 @@ msgstr "" msgid "None" msgstr "Nenio" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Nevalida dosiernomo." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "Ĉi tiu servilo ne povas disponi desegnan alŝuton sen ZIP-a subteno." @@ -8605,20 +8662,9 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "La nomo estas tro longa (maksimume 255 literoj)" - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Organizonomo estas tro longa (maksimume 255 literoj)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Tro longas. Longlimo por avizo estas %d signoj." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "Longlimo por avizo estas %d signoj, enkalkulante ankaŭ la retadresojn." - -#~ msgid " tagged %s" -#~ msgstr " Etikedigita %s" +#~ "La servilo ne povis trakti tiom da POST-datumo (% bajtoj) pro ĝia nuna " +#~ "agordo." diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po index 6a9a3fcb43..37d9a68120 100644 --- a/locale/es/LC_MESSAGES/statusnet.po +++ b/locale/es/LC_MESSAGES/statusnet.po @@ -16,17 +16,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:14+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:13+0000\n" "Language-Team: Spanish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: es\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -91,12 +91,14 @@ msgstr "Guardar la configuración de acceso" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Guardar" @@ -164,7 +166,7 @@ msgstr "%1$s y sus amistades, página %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s y sus amistades" @@ -340,11 +342,13 @@ msgstr "No se pudo guardar el perfil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -755,7 +759,7 @@ msgstr "No estás autorizado." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" "Hubo un problema con tu clave de sesión. Por favor, intenta nuevamente." @@ -778,12 +782,13 @@ msgstr "Error de base de datos al insertar usuario de la aplicación OAuth." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Envío de formulario inesperado." @@ -836,7 +841,7 @@ msgstr "Cuenta" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1100,7 +1105,7 @@ msgstr "No existe tal archivo adjunto." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Ningún nombre de usuario." @@ -1117,7 +1122,7 @@ msgstr "Tamaño inválido." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Imagen" @@ -1293,7 +1298,7 @@ msgstr "No se guardó información de bloqueo." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "No existe ese grupo." @@ -1660,12 +1665,14 @@ msgstr "Personalizar tema" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Puedes subir un tema personalizado StatusNet como un archivo .ZIP." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Cambiar la imagen de fondo" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Fondo" @@ -1679,40 +1686,48 @@ msgstr "" "es %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Activar" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Desactivar" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Activar o desactivar la imagen de fondo." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Imagen de fondo en mosaico" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Cambiar colores" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Contenido" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Barra lateral" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Vínculos" @@ -1724,15 +1739,18 @@ msgstr "Avanzado" msgid "Custom CSS" msgstr "Personalizar CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Utilizar los valores predeterminados" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Restaurar los diseños predeterminados" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Volver a los valores predeterminados" @@ -1740,11 +1758,12 @@ msgstr "Volver a los valores predeterminados" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Guardar" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Guardar el diseño" @@ -1880,7 +1899,7 @@ msgstr "No se pudo actualizar el grupo." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "No fue posible crear alias." @@ -2169,7 +2188,7 @@ msgstr "" "persona en añadir un mensaje a tus favoritos?" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Mensajes favoritos de %s" @@ -2350,8 +2369,10 @@ msgstr "" "Personaliza el aspecto de tu grupo con una imagen de fondo y la paleta de " "colores que prefieras." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "No fue posible actualizar tu diseño." @@ -3313,25 +3334,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Mensaje sin perfil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "estado de %1$s en %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Tipo de contenido %s no compatible." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Solamente %s URL sobre HTTP simples, por favor." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "No es un formato de datos compatible." @@ -3832,7 +3853,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nombre completo" @@ -3874,7 +3895,7 @@ msgstr "Biografía" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4472,7 +4493,7 @@ msgid "Repeated!" msgstr "¡Repetido!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Respuestas a %s" @@ -4610,7 +4631,7 @@ msgid "Description" msgstr "Descripción" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Estadísticas" @@ -4726,95 +4747,95 @@ msgid "This is a way to share what you like." msgstr "Esta es una manera de compartir lo que te gusta." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Grupo %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "grupo %1$s, página %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Perfil del grupo" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nota" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Alias" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Acciones del grupo" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Canal de mensajes del grupo %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Canal de mensajes del grupo %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Canal de mensajes del grupo %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Amistades de amistades del grupo %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Miembros" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ninguno)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Todos los miembros" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Creado" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4824,7 +4845,7 @@ msgstr "Miembros" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4843,7 +4864,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4857,7 +4878,7 @@ msgstr "" "comparten mensajes cortos acerca de su vida e intereses. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administradores" @@ -5646,7 +5667,7 @@ msgstr "Suscripción predeterminada inválida : '%1$s' no es un usuario" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Perfil" @@ -5810,11 +5831,13 @@ msgstr "No se puede leer la URL de la imagen ‘%s’." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Tipo de imagen incorrecto para la URL de imagen ‘%s’." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Diseño del perfil" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5946,32 +5969,46 @@ msgstr " Robin piensa que algo es imposible." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Ningún archivopuede ser de tamaño mayor a %1$d bytes y el archivo que " +"enviaste es de %2$d bytes. Trata de subir una versión más pequeña." +msgstr[1] "" "Ningún archivopuede ser de tamaño mayor a %1$d bytes y el archivo que " "enviaste es de %2$d bytes. Trata de subir una versión más pequeña." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Un archivo tan grande podría sobrepasar tu cuota de usuario de %d bytes." +msgstr[1] "" "Un archivo tan grande podría sobrepasar tu cuota de usuario de %d bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Un archivo tan grande podría sobrepasar tu cuota mensual de %d bytes." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +"Un archivo tan grande podría sobrepasar tu cuota mensual de %d bytes." +msgstr[1] "" +"Un archivo tan grande podría sobrepasar tu cuota mensual de %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Nombre de archivo inválido." @@ -6100,31 +6137,32 @@ msgid "Problem saving notice." msgstr "Hubo un problema al guardar el mensaje." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Mal tipo proveído a saveKnownGroups" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Hubo un problema al guarda la bandeja de entrada del grupo." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "No se ha podido guardar la información del grupo local." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6221,22 +6259,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "No se pudo crear grupo." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "No se pudo configurar el URI del grupo." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "No se pudo configurar la membresía del grupo." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "No se ha podido guardar la información del grupo local." @@ -6648,7 +6686,7 @@ msgid "User configuration" msgstr "Configuración de usuario" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Usuario" @@ -7363,10 +7401,13 @@ msgstr "Aplicaciones conectadas autorizadas" msgid "Database error" msgstr "Error de la base de datos" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Subir archivo" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7374,16 +7415,29 @@ msgstr "" "Puedes subir tu imagen de fondo personal. El tamaño de archivo máximo " "permitido es 2 MB." -#: 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 "" -"El servidor no ha podido manejar tanta información del tipo POST (% de " -"bytes) a causa de su configuración actual." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Activar" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Desactivar" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Restablecer" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Diseño predeterminado restaurado." @@ -7888,7 +7942,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) agregó tu mensaje a los favoritos" @@ -7898,7 +7952,7 @@ msgstr "%s (@%s) agregó tu mensaje a los favoritos" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7936,7 +7990,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7949,7 +8003,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) ha enviado un aviso a tu atención" @@ -7960,7 +8014,7 @@ msgstr "%s (@%s) ha enviado un aviso a tu atención" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8110,7 +8164,7 @@ msgstr "No se pudo determinar tipo MIME del archivo" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8121,7 +8175,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "\"%s\" no es un tipo de archivo compatible en este servidor." @@ -8262,31 +8316,31 @@ msgstr "Mensaje duplicado." msgid "Couldn't insert new subscription." msgstr "No se pudo insertar una nueva suscripción." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Personal" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Respuestas" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favoritos" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Bandeja de Entrada" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Mensajes entrantes" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Bandeja de Salida" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Mensajes enviados" @@ -8484,6 +8538,12 @@ msgstr "Nube de etiquetas de personas etiquetadas" msgid "None" msgstr "Ninguno" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Nombre de archivo inválido." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "Este servidor no puede manejar cargas de temas sin soporte ZIP." @@ -8736,20 +8796,9 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "El nombre es muy largo (máx. 255 carac.)" - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "El texto de organización es muy largo (máx. 255 caracteres)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "El mensaje es muy largo. El tamaño máximo es de %d caracteres." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "El tamaño máximo del mensaje es %d caracteres, incluyendo el URL adjunto." - -#~ msgid " tagged %s" -#~ msgstr "%s etiquetados" +#~ "El servidor no ha podido manejar tanta información del tipo POST (% de " +#~ "bytes) a causa de su configuración actual." diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po index bc2d2b2754..4471ed91a2 100644 --- a/locale/fa/LC_MESSAGES/statusnet.po +++ b/locale/fa/LC_MESSAGES/statusnet.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:16+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:14+0000\n" "Last-Translator: Ahmad Sufi Mahmudi\n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" @@ -23,9 +23,9 @@ msgstr "" "X-Language-Code: fa\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -90,12 +90,14 @@ msgstr "ذخیرهٔ تنظیمات دسترسی" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "ذخیره" @@ -163,7 +165,7 @@ msgstr "%1$s و دوستان، صفحهٔ %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s و دوستان" @@ -336,11 +338,13 @@ msgstr "نمی‌توان نمایه را ذخیره کرد." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -743,7 +747,7 @@ msgstr "شما شناسایی نشده اید." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "مشکلی در دریافت نشست شما وجود دارد. لطفا بعدا سعی کنید." @@ -765,12 +769,13 @@ msgstr "هنگام افزودن کاربر برنامهٔ OAuth در پایگا #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "ارسال غیر قابل انتظار فرم." @@ -825,7 +830,7 @@ msgstr "حساب کاربری" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1086,7 +1091,7 @@ msgstr "چنین پیوستی وجود ندارد." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "لقبی وجود ندارد." @@ -1103,7 +1108,7 @@ msgstr "اندازه نادرست است." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "چهره" @@ -1282,7 +1287,7 @@ msgstr "ذخیرهٔ ردیف اطلاعات شکست خورد." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "چنین گروهی وجود ندارد." @@ -1650,12 +1655,14 @@ msgstr "" "شما می‌توانید یک پوستهٔ اختصاصی StatusNet را به‌عنوان یک آرشیو .ZIP بارگذاری " "کنید." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "تغییر تصویر پیش‌زمینه" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "پیش‌زمینه" @@ -1669,40 +1676,48 @@ msgstr "" "پرونده %1 $s است." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "روشن" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "خاموش" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "تصویر پیش‌زمینه را فعال یا غیرفعال کنید." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "تصویر پیش‌زمینهٔ موزاییکی" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "تغییر رنگ‌ها" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "محتوا" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "ستون کناری" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "متن" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "پیوندها" @@ -1714,15 +1729,18 @@ msgstr "پیشرفته" msgid "Custom CSS" msgstr "CSS اختصاصی" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "استفاده‌کردن از پیش‌فرض‌ها" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "بازگرداندن طرح‌های پیش‌فرض" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "برگشت به حالت پیش گزیده" @@ -1730,11 +1748,12 @@ msgstr "برگشت به حالت پیش گزیده" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "ذخیره‌کردن" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "ذخیره‌کردن طرح" @@ -1872,7 +1891,7 @@ msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "نمی‌توان نام‌های مستعار را ساخت." @@ -2160,7 +2179,7 @@ msgstr "" "باشید که یک پیام را به برگزیده‌هایش اضافه می‌کند!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "پیام‌های برگزیدهٔ %s" @@ -2337,8 +2356,10 @@ msgid "" "palette of your choice." msgstr "ظاهر گروه را تغییر دهید تا شما را راضی کند." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "نمی‌توان ظاهر را به روز کرد." @@ -3283,25 +3304,25 @@ msgstr "" msgid "Notice has no profile." msgstr "این پیام نمایه‌ای ندارد." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "وضعیت %1$s در %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "نوع محتوای %s پشتیبانی نشده است." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "لطفا تنها از نشانی‌های اینترنتی %s از راه HTTP ساده استفاده کنید." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "یک قالب دادهٔ پشتیبانی‌شده نیست." @@ -3800,7 +3821,7 @@ msgstr "۱-۶۴ کاراکتر کوچک یا اعداد، بدون نقطه گذ #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "نام‌کامل" @@ -3841,7 +3862,7 @@ msgstr "شرح‌حال" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4421,7 +4442,7 @@ msgid "Repeated!" msgstr "تکرار شد!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "پاسخ‌های به %s" @@ -4560,7 +4581,7 @@ msgid "Description" msgstr "توصیف" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "آمار" @@ -4676,95 +4697,95 @@ msgid "This is a way to share what you like." msgstr "این یک راه است برای به اشتراک گذاشتن آنچه که دوست دارید." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "گروه %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "گروه %1$s، صفحهٔ %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "نمایهٔ گروه" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "نشانی اینترنتی" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "یادداشت" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "نام های مستعار" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "اعمال گروه" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "خوراک پیام برای گروه %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "خوراک پیام برای گروه %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "خوراک پیام برای گروه %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF برای گروه %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "اعضا" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "هیچ" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "همهٔ اعضا" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "ساخته شد" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4774,7 +4795,7 @@ msgstr "اعضا" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4793,7 +4814,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4808,7 +4829,7 @@ msgstr "" "می‌گذارند. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "مدیران" @@ -5590,7 +5611,7 @@ msgstr "اشتراک پیش‌فرض نامعتبر است: «%1$s» کاربر #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "نمایه" @@ -5748,11 +5769,13 @@ msgstr "نمی‌توان نشانی اینترنتی چهره را خواند« msgid "Wrong image type for avatar URL ‘%s’." msgstr "نوع تصویر برای نشانی اینترنتی چهره نادرست است «%s»." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "طراحی نمایه" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5883,34 +5906,40 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" "هیچ پرونده‌ای نباید بزرگ‌تر از %d بایت باشد و پرونده‌ای که شما فرستادید %d بایت " "بود. بارگذاری یک نسخهٔ کوچک‌تر را امتحان کنید." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" "یک پرونده با این حجم زیاد می‌تواند از سهمیهٔ کاربری شما از %d بایت بگذرد." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" "یک پرونده با این حجم زیاد می‌تواند از سهمیهٔ کاربری ماهانهٔ شما از %d بایت " "بگذرد." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "نام‌پرونده نادرست است." @@ -6040,31 +6069,31 @@ msgid "Problem saving notice." msgstr "هنگام ذخیرهٔ پیام مشکلی ایجاد شد." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "هنگام ذخیرهٔ صندوق ورودی گروه مشکلی رخ داد." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "نمی‌توان اطلاعات گروه محلی را ذخیره کرد." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6161,23 +6190,23 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "نمیتوان گروه را تشکیل داد" #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 #, fuzzy msgid "Could not set group URI." msgstr "نمیتوان گروه را تشکیل داد" #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "نمی‌توان عضویت گروه را تعیین کرد." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "نمی‌توان اطلاعات گروه محلی را ذخیره کرد." @@ -6583,7 +6612,7 @@ msgid "User configuration" msgstr "پیکربندی کاربر" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "کاربر" @@ -7292,10 +7321,13 @@ msgstr "برنامه‌های وصل‌شدهٔ مجاز" msgid "Database error" msgstr "خطای پایگاه داده" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "بارگذاری پرونده" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7303,15 +7335,29 @@ msgstr "" "شما می‌توانید تصویر پیش‌زمینهٔ شخصی خود را بارگذاری کنید. بیشینهٔ اندازهٔ پرونده " "۲ مگابایت است." -#: 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 "" -"به دلیل تنظبمات، سرور نمی‌تواند این مقدار اطلاعات (%s بایت( را دریافت کند." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "روشن" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "خاموش" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "بازنشاندن" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "پیش‌فرض‌های طراحی برگردانده شدند." @@ -7804,7 +7850,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "پیام شما را به برگزیده‌های خود اضافه کرد %s (@%s)" @@ -7814,7 +7860,7 @@ msgstr "پیام شما را به برگزیده‌های خود اضافه کر #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7856,7 +7902,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7869,7 +7915,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) به توجه شما یک پیام فرستاد" @@ -7880,7 +7926,7 @@ msgstr "%s (@%s) به توجه شما یک پیام فرستاد" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8022,7 +8068,7 @@ msgstr "نمی‌توان فرمت پرونده را تعیین کرد." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8031,7 +8077,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8173,31 +8219,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "نمی‌توان اشتراک تازه‌ای افزود." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "شخصی" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "پاسخ ها" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "برگزیده‌ها" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "صندوق دریافتی" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "پیام های وارد شونده ی شما" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "صندوق خروجی" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "پیام‌های فرستاده شدهٔ شما" @@ -8398,6 +8444,12 @@ msgstr "" msgid "None" msgstr "هیچ" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "نام‌پرونده نادرست است." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8642,19 +8694,8 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "نام خیلی طولانی است (حداکثر ۲۵۵ نویسه)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "نام سازمان خیلی طولانی است (حداکثر ۲۵۵ نویسه)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "این خیلی طولانی است. بیشینهٔ طول پیام %d نویسه است." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "بیشینهٔ طول پیام %d نویسه که شامل نشانی اینترنتی پیوست هم هست." - -#~ msgid " tagged %s" -#~ msgstr " برچسب‌گذاری‌شده %s" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "به دلیل تنظبمات، سرور نمی‌تواند این مقدار اطلاعات (%s بایت( را دریافت کند." diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po index 01b4a4bccb..0fbdc4ed94 100644 --- a/locale/fi/LC_MESSAGES/statusnet.po +++ b/locale/fi/LC_MESSAGES/statusnet.po @@ -14,17 +14,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:17+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:15+0000\n" "Language-Team: Finnish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fi\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -95,12 +95,14 @@ msgstr "Profiilikuva-asetukset" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Tallenna" @@ -168,7 +170,7 @@ msgstr "%s ja kaverit" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s ja kaverit" @@ -340,11 +342,13 @@ msgstr "Profiilin tallennus epäonnistui." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -757,7 +761,7 @@ msgstr "Sinulla ei ole valtuutusta tähän." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" "Istuntosi avaimen kanssa oli ongelmia. Olisitko ystävällinen ja kokeilisit " @@ -782,12 +786,13 @@ msgstr "Tietokantavirhe tallennettaessa risutagiä: %s" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Odottamaton lomakkeen lähetys." @@ -834,7 +839,7 @@ msgstr "Käyttäjätili" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1098,7 +1103,7 @@ msgstr "Liitettä ei ole." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Tunnusta ei ole." @@ -1115,7 +1120,7 @@ msgstr "Koko ei kelpaa." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Kuva" @@ -1290,7 +1295,7 @@ msgstr "Käyttäjän estotiedon tallennus epäonnistui." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Tuota ryhmää ei ole." @@ -1658,12 +1663,14 @@ msgstr "Palvelun ilmoitus" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Vaihda tautakuva" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Tausta" @@ -1675,43 +1682,51 @@ msgid "" msgstr "Voit ladata ryhmälle logokuvan. Maksimikoko on %s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "On" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Off" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 #, fuzzy msgid "Turn background image on or off." msgstr "Vaihda tautakuva" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 #, fuzzy msgid "Tile background image" msgstr "Vaihda tautakuva" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Vaihda väriä" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Sisältö" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 #, fuzzy msgid "Sidebar" msgstr "Haku" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Teksti" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Linkit" @@ -1723,16 +1738,19 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Käytä oletusasetuksia" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 #, fuzzy msgid "Restore default designs" msgstr "Käytä oletusasetuksia" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 #, fuzzy msgid "Reset back to default" msgstr "Käytä oletusasetuksia" @@ -1741,11 +1759,12 @@ msgstr "Käytä oletusasetuksia" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Tallenna" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 #, fuzzy msgid "Save design" msgstr "Ryhmän ulkoasu" @@ -1892,7 +1911,7 @@ msgstr "Ei voitu päivittää ryhmää." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Ei voitu lisätä aliasta." @@ -2180,7 +2199,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Käyttäjän %s suosikkipäivitykset" @@ -2362,8 +2381,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Ei voitu päivittää sinun sivusi ulkoasua." @@ -3326,25 +3347,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Käyttäjällä ei ole profiilia." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Käyttäjän %1$s päivitys %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "Yhdistä" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Tuo ei ole tuettu tietomuoto." @@ -3854,7 +3875,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Koko nimi" @@ -3896,7 +3917,7 @@ msgstr "Tietoja" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4489,7 +4510,7 @@ msgid "Repeated!" msgstr "Luotu" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Vastaukset käyttäjälle %s" @@ -4634,7 +4655,7 @@ msgid "Description" msgstr "Kuvaus" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Tilastot" @@ -4742,76 +4763,76 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Ryhmä %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Ryhmät, sivu %d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Ryhmän profiili" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Huomaa" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Aliakset" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Ryhmän toiminnot" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Syöte ryhmän %s päivityksille (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Syöte ryhmän %s päivityksille (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Syöte ryhmän %s päivityksille (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Käyttäjän %s lähetetyt viestit" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Jäsenet" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 #, fuzzy @@ -4819,19 +4840,19 @@ msgid "(None)" msgstr "(Tyhjä)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Kaikki jäsenet" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Luotu" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4841,7 +4862,7 @@ msgstr "Jäsenet" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4854,7 +4875,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4866,7 +4887,7 @@ msgstr "" "(http://en.wikipedia.org/wiki/Micro-blogging)" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Ylläpitäjät" @@ -5648,7 +5669,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profiili" @@ -5822,12 +5843,14 @@ msgstr "Kuvan URL-osoitetta '%s' ei voi avata." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Kuvan '%s' tyyppi on väärä" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 #, fuzzy msgid "Profile design" msgstr "Profiiliasetukset" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5946,29 +5969,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "Koko ei kelpaa." @@ -6104,32 +6136,32 @@ msgid "Problem saving notice." msgstr "Ongelma päivityksen tallentamisessa." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "Ongelma päivityksen tallentamisessa." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Tilausta ei onnistuttu tallentamaan." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6228,22 +6260,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Ryhmän luonti ei onnistunut." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Ryhmän luonti ei onnistunut." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Ryhmän jäsenyystietoja ei voitu asettaa." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 #, fuzzy msgid "Could not save local group info." msgstr "Tilausta ei onnistuttu tallentamaan." @@ -6672,7 +6704,7 @@ msgid "User configuration" msgstr "SMS vahvistus" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Käyttäjä" @@ -7360,25 +7392,43 @@ msgstr "" msgid "Database error" msgstr "Tietokantavirhe" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 #, fuzzy msgid "Upload file" msgstr "Lataa" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 #, fuzzy msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Voit ladata oman profiilikuvasi. Maksimikoko on %s." -#: lib/designsettings.php:283 -#, php-format -msgid "" -"The server was unable to handle that much POST data (%s bytes) due to its " -"current configuration." -msgstr "" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "On" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Off" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Vaihda" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 #, fuzzy msgid "Design defaults restored." msgstr "Ulkoasuasetukset tallennettu." @@ -7842,7 +7892,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "Lähetä sähköpostia, jos joku lisää päivitykseni suosikiksi." @@ -7852,7 +7902,7 @@ msgstr "Lähetä sähköpostia, jos joku lisää päivitykseni suosikiksi." #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7874,7 +7924,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7884,7 +7934,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "" @@ -7895,7 +7945,7 @@ msgstr "" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8015,7 +8065,7 @@ msgstr "Ei voitu poistaa suosikkia." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8024,7 +8074,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8170,31 +8220,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Ei voitu lisätä uutta tilausta." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Omat" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Vastaukset" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Suosikit" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Saapuneet" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Sinulle saapuneet viestit" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Lähetetyt" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Lähettämäsi viestit" @@ -8403,6 +8453,12 @@ msgstr "" msgid "None" msgstr "Ei mitään" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Koko ei kelpaa." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8655,21 +8711,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Koko nimi on liian pitkä (max 255 merkkiä)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Kotipaikka on liian pitkä (max 255 merkkiä)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Päivitys on liian pitkä. Maksimipituus on %d merkkiä." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "Maksimikoko päivitykselle on %d merkkiä, mukaan lukien URL-osoite." - -#, fuzzy -#~ msgid " tagged %s" -#~ msgstr "Päivitykset joilla on tagi %s" diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po index ed36d7e2a3..6c5f783137 100644 --- a/locale/fr/LC_MESSAGES/statusnet.po +++ b/locale/fr/LC_MESSAGES/statusnet.po @@ -20,17 +20,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:18+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:23+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -95,12 +95,14 @@ msgstr "Sauvegarder les paramètres d’accès" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Enregistrer" @@ -168,7 +170,7 @@ msgstr "%1$s et ses amis, page %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s et ses amis" @@ -345,11 +347,13 @@ msgstr "Impossible d’enregistrer le profil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -758,7 +762,7 @@ msgstr "Le jeton de requête a déjà été autorisé." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" "Un problème est survenu avec votre jeton de session. Veuillez essayer à " @@ -783,12 +787,13 @@ msgstr "" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Soumission de formulaire inattendue." @@ -843,7 +848,7 @@ msgstr "Compte" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1112,7 +1117,7 @@ msgstr "Pièce jointe non trouvée." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Aucun pseudo." @@ -1129,7 +1134,7 @@ msgstr "Taille incorrecte." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1307,7 +1312,7 @@ msgstr "Impossible d’enregistrer les informations de blocage." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Aucun groupe trouvé." @@ -1668,12 +1673,14 @@ msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" "Vous pouvez importer un thème StatusNet personnalisé dans une archive .ZIP." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Changer l’image d’arrière plan" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Arrière plan" @@ -1687,40 +1694,48 @@ msgstr "" "maximale du fichier est de %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Activé" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Désactivé" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Activer ou désactiver l’image d’arrière plan." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Répéter l’image d’arrière plan" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Modifier les couleurs" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Contenu" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Barre latérale" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Texte" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Liens" @@ -1732,15 +1747,18 @@ msgstr "Avancé" msgid "Custom CSS" msgstr "CSS personnalisé" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Utiliser les valeurs par défaut" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Restaurer les conceptions par défaut" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Revenir aux valeurs par défaut" @@ -1748,11 +1766,12 @@ msgstr "Revenir aux valeurs par défaut" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Enregistrer" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Sauvegarder la conception" @@ -1887,7 +1906,7 @@ msgstr "Impossible de mettre à jour le groupe." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Impossible de créer les alias." @@ -2174,7 +2193,7 @@ msgstr "" "premier à ajouter un avis à vos favoris !" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Avis favoris de %s" @@ -2354,8 +2373,10 @@ msgstr "" "Personnalisez l’apparence de votre groupe avec une image d’arrière plan et " "une palette de couleurs de votre choix" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Impossible de mettre à jour votre conception." @@ -3334,25 +3355,25 @@ msgstr "" msgid "Notice has no profile." msgstr "L’avis n’a pas de profil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Statut de %1$s sur %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Type de contenu %s non supporté." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Veuillez n'utiliser que des URL HTTP complètes en %s." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Format de données non supporté." @@ -3834,7 +3855,7 @@ msgstr "1 à 64 lettres minuscules ou chiffres, sans ponctuation ni espaces." #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nom complet" @@ -3876,7 +3897,7 @@ msgstr "Bio" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4471,7 +4492,7 @@ msgid "Repeated!" msgstr "Repris !" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Réponses à %s" @@ -4612,7 +4633,7 @@ msgid "Description" msgstr "Description" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistiques" @@ -4729,95 +4750,95 @@ msgid "This is a way to share what you like." msgstr "C’est un moyen de partager ce que vous aimez." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Groupe %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Groupe %1$s, page %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Profil du groupe" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Note" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Alias" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Actions du groupe" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Fil des avis du groupe %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Fil des avis du groupe %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Fil des avis du groupe %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "ami d’un ami pour le groupe %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Membres" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(aucun)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Tous les membres" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Créé" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4827,7 +4848,7 @@ msgstr "Membres" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4846,7 +4867,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4860,7 +4881,7 @@ msgstr "" "messages courts à propos de leur vie et leurs intérêts. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administrateurs" @@ -5653,7 +5674,7 @@ msgstr "Abonnement par défaut invalide : « %1$s » n’est pas un utilisateur. #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5820,11 +5841,13 @@ msgstr "Impossible de lire l’URL de l’avatar « %s »." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Format d’image invalide pour l’URL de l’avatar « %s »." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Conception de profil" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5958,31 +5981,44 @@ msgstr "Robin pense que quelque chose est impossible." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Un fichier ne peut pas peser plus de %1$d octets et le fichier que vous avez " +"envoyé pesait %2$d octets. Essayez d’importer une version moins lourde." +msgstr[1] "" "Un fichier ne peut pas peser plus de %1$d octets et le fichier que vous avez " "envoyé pesait %2$d octets. Essayez d’importer une version moins lourde." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "Un fichier aussi gros dépasserai votre quota utilisateur de %d octets." +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Un fichier aussi gros dépasserai votre quota utilisateur de %d octets." +msgstr[1] "" +"Un fichier aussi gros dépasserai votre quota utilisateur de %d octets." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Un fichier aussi gros dépasserai votre quota mensuel de %d octets." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "Un fichier aussi gros dépasserai votre quota mensuel de %d octets." +msgstr[1] "Un fichier aussi gros dépasserai votre quota mensuel de %d octets." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Nom de fichier non valide." @@ -6111,31 +6147,32 @@ msgid "Problem saving notice." msgstr "Problème lors de l’enregistrement de l’avis." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Le type renseigné pour saveKnownGroups n’est pas valable" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problème lors de l’enregistrement de la boîte de réception du groupe." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Impossible d’enregistrer la réponse à %1$d, %2$d." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6234,22 +6271,22 @@ msgid "Single-user mode code called when not enabled." msgstr "Code en mode mono-utilisateur appelé quand ce n’est pas autorisé." #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Impossible de créer le groupe." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Impossible de définir l'URI du groupe." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Impossible d’établir l’inscription au groupe." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Impossible d’enregistrer les informations du groupe local." @@ -6659,7 +6696,7 @@ msgid "User configuration" msgstr "Configuration utilisateur" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Utilisateur" @@ -7381,10 +7418,13 @@ msgstr "Applications autorisées connectées" msgid "Database error" msgstr "Erreur de la base de données" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Importer un fichier" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7392,16 +7432,29 @@ msgstr "" "Vous pouvez importer votre image d’arrière plan personnelle. La taille " "maximale du fichier est de 2 Mo." -#: 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 "" -"Le serveur n’a pas pu gérer autant de données de POST (%s octets) en raison " -"de sa configuration actuelle." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Activé" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Désactivé" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Réinitialiser" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Les paramètre par défaut de la conception ont été restaurés." @@ -7908,7 +7961,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%1$s (@%2$s) a ajouté votre avis à ses favoris" @@ -7918,7 +7971,7 @@ msgstr "%1$s (@%2$s) a ajouté votre avis à ses favoris" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7957,7 +8010,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7970,7 +8023,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%1$s (@%2$s) a envoyé un avis à vote attention" @@ -7981,7 +8034,7 @@ msgstr "%1$s (@%2$s) a envoyé un avis à vote attention" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8130,7 +8183,7 @@ msgstr "Impossible de déterminer le type MIME du fichier." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8141,7 +8194,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "« %s » n’est pas un type de fichier supporté sur ce serveur." @@ -8282,31 +8335,31 @@ msgstr "Avis en doublon." msgid "Couldn't insert new subscription." msgstr "Impossible d’insérer un nouvel abonnement." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Personnel" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Réponses" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favoris" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Boîte de réception" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Vos messages reçus" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Boîte d’envoi" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Vos messages envoyés" @@ -8503,6 +8556,12 @@ msgstr "Nuage de marques pour une personne" msgid "None" msgstr "Aucun" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Nom de fichier non valide." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8764,23 +8823,9 @@ msgid_plural "%d entries in backup." msgstr[0] "%d entrées dans la sauvegarde." msgstr[1] "%d entrées dans la sauvegarde." -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Le nom est trop long (limité à 255 caractères maximum)." - -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "L’organisation est trop longue (limitée à 255 caractères maximum)." - -#~ msgid "That's too long. Max notice size is %d chars." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "C’est trop long ! La taille maximale de l’avis est de %d caractères." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "" -#~ "La taille maximale de l’avis est de %d caractères, en incluant l’URL de " -#~ "la pièce jointe." - -#~ msgid " tagged %s" -#~ msgstr " marqué %s" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "Fichier de sauvegarde pour l’utilisateur %s (%s)" +#~ "Le serveur n’a pas pu gérer autant de données de POST (%s octets) en " +#~ "raison de sa configuration actuelle." diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po index b05f9aba22..53d56befbc 100644 --- a/locale/ga/LC_MESSAGES/statusnet.po +++ b/locale/ga/LC_MESSAGES/statusnet.po @@ -9,18 +9,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:19+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:25+0000\n" "Language-Team: Irish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ga\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=5; plural=(n == 1) ? 0 : ( (n == 2) ? 1 : ( (n < 7) ? " "2 : ( (n < 11) ? 3 : 4 ) ) );\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -91,12 +91,14 @@ msgstr "Configuracións de Twitter" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 #, fuzzy msgctxt "BUTTON" msgid "Save" @@ -166,7 +168,7 @@ msgstr "%s e amigos" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s e amigos" @@ -336,11 +338,13 @@ msgstr "Non se puido gardar o perfil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -769,7 +773,7 @@ msgstr "Non estás suscrito a ese perfil" #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..." @@ -792,12 +796,13 @@ msgstr "Erro ó inserir o hashtag na BD: %s" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Envio de formulario non esperada." @@ -844,7 +849,7 @@ msgstr "Sobre" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1115,7 +1120,7 @@ msgstr "Non existe a etiqueta." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Sen alcume." @@ -1132,7 +1137,7 @@ msgstr "Tamaño inválido." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1313,7 +1318,7 @@ msgstr "Erro ao gardar información de bloqueo." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 #, fuzzy msgid "No such group." @@ -1693,12 +1698,14 @@ msgstr "Novo chío" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "" @@ -1710,43 +1717,51 @@ msgid "" msgstr "Podes actualizar a túa información do perfil persoal aquí" #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 #, fuzzy msgid "Change colours" msgstr "Cambiar contrasinal" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 #, fuzzy msgid "Content" msgstr "Conectar" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 #, fuzzy msgid "Sidebar" msgstr "Buscar" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Inicio de sesión" @@ -1758,15 +1773,18 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "" @@ -1774,11 +1792,12 @@ msgstr "" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Gardar" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "" @@ -1926,7 +1945,7 @@ msgstr "Non se puido actualizar o usuario." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 #, fuzzy msgid "Could not create aliases." msgstr "Non se puido crear o favorito." @@ -2216,7 +2235,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Chíos favoritos de %s" @@ -2405,8 +2424,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 #, fuzzy msgid "Couldn't update your design." msgstr "Non se puido actualizar o usuario." @@ -3383,25 +3404,25 @@ msgstr "" msgid "Notice has no profile." msgstr "O usuario non ten perfil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Estado de %1$s en %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "Conectar" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Non é un formato de datos soportado." @@ -3905,7 +3926,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nome completo" @@ -3951,7 +3972,7 @@ msgstr "Bio" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4552,7 +4573,7 @@ msgid "Repeated!" msgstr "Crear" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Replies to %s" @@ -4692,7 +4713,7 @@ msgid "Description" msgstr "Subscricións" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Estatísticas" @@ -4800,79 +4821,79 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, fuzzy, php-format msgid "%1$s group, page %2$d" msgstr "Tódalas subscricións" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "O usuario non ten perfil." #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 #, fuzzy msgid "Note" msgstr "Chíos" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 #, fuzzy msgid "Group actions" msgstr "Outras opcions" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Fonte para os amigos de %s" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Fonte para os amigos de %s" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "Fonte de chíos para %s" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "Band. Saída para %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 #, fuzzy msgid "Members" msgstr "Membro dende" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 #, fuzzy @@ -4880,19 +4901,19 @@ msgid "(None)" msgstr "(nada)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Destacado" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4902,7 +4923,7 @@ msgstr "Membro dende" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4919,7 +4940,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4933,7 +4954,7 @@ msgstr "" "chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "" @@ -5715,7 +5736,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Perfil" @@ -5891,12 +5912,14 @@ msgstr "Non se pode ler a URL do avatar de '%s'" msgid "Wrong image type for avatar URL ‘%s’." msgstr "Tipo de imaxe incorrecto para '%s'" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 #, fuzzy msgid "Profile design" msgstr "Configuración de perfil" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -6015,29 +6038,47 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "Tamaño inválido." @@ -6175,32 +6216,32 @@ msgid "Problem saving notice." msgstr "Aconteceu un erro ó gardar o chío." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "Aconteceu un erro ó gardar o chío." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Non se pode gardar a subscrición." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6299,24 +6340,24 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 #, fuzzy msgid "Could not create group." msgstr "Non se puido crear o favorito." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Non se poden gardar as etiquetas." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 #, fuzzy msgid "Could not set group membership." msgstr "Non se pode gardar a subscrición." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 #, fuzzy msgid "Could not save local group info." msgstr "Non se pode gardar a subscrición." @@ -6754,7 +6795,7 @@ msgid "User configuration" msgstr "Confirmación de SMS" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Usuario" @@ -7495,25 +7536,41 @@ msgstr "" msgid "Database error" msgstr "" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 #, fuzzy msgid "Upload file" msgstr "Subir" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 #, fuzzy msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Podes actualizar a túa información do perfil persoal aquí" -#: lib/designsettings.php:283 -#, php-format -msgid "" -"The server was unable to handle that much POST data (%s bytes) due to its " -"current configuration." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +msgctxt "RADIO" +msgid "On" msgstr "" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +msgctxt "RADIO" +msgid "Off" +msgstr "" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Restaurar" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "" @@ -8023,7 +8080,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "Enviar un correo cando alguen enganda un chío meu coma favorito." @@ -8033,7 +8090,7 @@ msgstr "Enviar un correo cando alguen enganda un chío meu coma favorito." #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, fuzzy, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -8067,7 +8124,7 @@ msgstr "" "%5$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -8077,7 +8134,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "" @@ -8088,7 +8145,7 @@ msgstr "" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8208,7 +8265,7 @@ msgstr "Non se puido eliminar o favorito." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8217,7 +8274,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8369,31 +8426,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Non se puido inserir a nova subscrición." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Persoal" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Respostas" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favoritos" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Band. Entrada" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "As túas mensaxes entrantes" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Band. Saída" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "As túas mensaxes enviadas" @@ -8609,6 +8666,12 @@ msgstr "" msgid "None" msgstr "No" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Tamaño inválido." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8890,18 +8953,3 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "O nome completo é demasiado longo (max 255 car)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "A localización é demasiado longa (max 255 car.)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Podes actualizar a túa información do perfil persoal aquí" - -#, fuzzy -#~ msgid " tagged %s" -#~ msgstr "Chíos tagueados con %s" diff --git a/locale/gl/LC_MESSAGES/statusnet.po b/locale/gl/LC_MESSAGES/statusnet.po index a5e70638f2..f293534848 100644 --- a/locale/gl/LC_MESSAGES/statusnet.po +++ b/locale/gl/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:20+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:26+0000\n" "Language-Team: Galician \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: gl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -86,12 +86,14 @@ msgstr "Gardar a configuración de acceso" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Gardar" @@ -159,7 +161,7 @@ msgstr "%1$s e amigos, páxina %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s e amigos" @@ -335,11 +337,13 @@ msgstr "Non se puido gardar o perfil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -753,7 +757,7 @@ msgstr "Non está autorizado." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Houbo un erro co seu pase. Inténteo de novo." @@ -777,12 +781,13 @@ msgstr "" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Envío de formulario inesperado." @@ -835,7 +840,7 @@ msgstr "Conta" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1102,7 +1107,7 @@ msgstr "Non existe tal dato adxunto." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Sen alcume." @@ -1119,7 +1124,7 @@ msgstr "Tamaño non válido." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1297,7 +1302,7 @@ msgstr "Non se puido gardar a información do bloqueo." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Non existe tal grupo." @@ -1664,12 +1669,14 @@ msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" "Pode cargar como arquivo .ZIP un tema visual personalizado para StatusNet" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Cambiar a imaxe de fondo" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Fondo" @@ -1683,40 +1690,48 @@ msgstr "" "ficheiro é de %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Activado" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Desactivado" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Activar ou desactivar a imaxe de fondo." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Imaxe de fondo en mosaico" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Cambiar as cores" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Contido" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Barra lateral" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Ligazóns" @@ -1728,15 +1743,18 @@ msgstr "Avanzado" msgid "Custom CSS" msgstr "CSS personalizado" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Utilizar os valores por defecto" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Restaurar o deseño por defecto" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Volver ao deseño por defecto" @@ -1744,11 +1762,12 @@ msgstr "Volver ao deseño por defecto" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Gardar" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Gardar o deseño" @@ -1884,7 +1903,7 @@ msgstr "Non se puido actualizar o grupo." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Non se puideron crear os pseudónimos." @@ -2175,7 +2194,7 @@ msgstr "" "engadir unha nota aos seus favoritos?" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Notas favoritas de %s" @@ -2354,8 +2373,10 @@ msgstr "" "Personaliza o aspecto do grupo cunha imaxe de fondo e unha paleta de cores " "da súa escolla." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Non se puido actualizar o seu deseño." @@ -3319,25 +3340,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Non hai perfil para a nota." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Estado de %1$s en %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Non se soporta o tipo de contido %s." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Só %s enderezos URL sobre HTTP simple." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Non se soporta ese formato de datos." @@ -3840,7 +3861,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nome completo" @@ -3882,7 +3903,7 @@ msgstr "Biografía" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4480,7 +4501,7 @@ msgid "Repeated!" msgstr "Repetida!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Respostas a %s" @@ -4618,7 +4639,7 @@ msgid "Description" msgstr "Descrición" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Estatísticas" @@ -4736,95 +4757,95 @@ msgid "This is a way to share what you like." msgstr "Isto é un modo de compartir o que lle gusta." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Grupo %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Grupo %1$s, páxina %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Perfil do grupo" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nota" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Pseudónimos" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Accións do grupo" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Fonte de novas das notas do grupo %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Fonte de novas das notas do grupo %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Fonte de novas das notas do grupo %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Amigo dun amigo para o grupo %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Membros" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ningún)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Todos os membros" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Creado" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4834,7 +4855,7 @@ msgstr "Membros" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4853,7 +4874,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4867,7 +4888,7 @@ msgstr "" "seus membros comparten mensaxes curtas sobre as súas vidas e intereses. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administradores" @@ -5656,7 +5677,7 @@ msgstr "Subscrición por defecto incorrecta. \"%1$s\" non é un usuario." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Perfil" @@ -5820,11 +5841,13 @@ msgstr "Non se puido ler o URL do avatar, \"%s\"." msgid "Wrong image type for avatar URL ‘%s’." msgstr "O tipo de imaxe do URL do avatar, \"%s\", é incorrecto." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Deseño do perfil" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5956,32 +5979,44 @@ msgstr "Robin pensa que algo é imposible." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Ningún ficheiro pode superar os %1$d bytes e o que enviou ocupaba %2$d. " +"Probe a subir un ficheiro máis pequeno." +msgstr[1] "" "Ningún ficheiro pode superar os %1$d bytes e o que enviou ocupaba %2$d. " "Probe a subir un ficheiro máis pequeno." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Un ficheiro deste tamaño excedería a súa cota de usuario, que é de %d bytes." +msgstr[1] "" "Un ficheiro deste tamaño excedería a súa cota de usuario, que é de %d bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Un ficheiro deste tamaño excedería a súa cota mensual de %d bytes." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "Un ficheiro deste tamaño excedería a súa cota mensual de %d bytes." +msgstr[1] "Un ficheiro deste tamaño excedería a súa cota mensual de %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Nome de ficheiro incorrecto." @@ -6110,31 +6145,32 @@ msgid "Problem saving notice." msgstr "Houbo un problema ao gardar a nota." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "O tipo dado para saveKnownGroups era incorrecto" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Houbo un problema ao gardar a caixa de entrada do grupo." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Non se puido gardar a resposta a %1$d, %2$d." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6231,22 +6267,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Non se puido crear o grupo." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Non se puido establecer o URI do grupo." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Non se puido establecer a pertenza ao grupo." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Non se puido gardar a información do grupo local." @@ -6657,7 +6693,7 @@ msgid "User configuration" msgstr "Configuración do usuario" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Usuario" @@ -7375,10 +7411,13 @@ msgstr "Aplicacións conectadas autorizadas" msgid "Database error" msgstr "Houbo un erro na base de datos" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Cargar un ficheiro" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7386,16 +7425,29 @@ msgstr "" "Pode cargar a súa imaxe de fondo persoal. O ficheiro non pode ocupar máis de " "2MB." -#: 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 "" -"O servidor non puido manexar tantos datos POST (%s bytes) por mor da súa " -"configuración actual." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Activado" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Desactivado" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Restablecer" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Restableceuse o deseño por defecto." @@ -7901,7 +7953,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) marcou a súa nota como favorita" @@ -7911,7 +7963,7 @@ msgstr "%s (@%s) marcou a súa nota como favorita" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7950,7 +8002,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7963,7 +8015,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) enviou unha nota á súa atención" @@ -7974,7 +8026,7 @@ msgstr "%s (@%s) enviou unha nota á súa atención" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8121,7 +8173,7 @@ msgstr "Non se puido determinar o tipo MIME do ficheiro." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8132,7 +8184,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "Neste servidor non se soporta o tipo de ficheiro \"%s\"." @@ -8273,31 +8325,31 @@ msgstr "Nota duplicada." msgid "Couldn't insert new subscription." msgstr "Non se puido inserir unha subscrición nova." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Persoal" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Respostas" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favoritas" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Caixa de entrada" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "As mensaxes recibidas" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Caixa de saída" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "As mensaxes enviadas" @@ -8495,6 +8547,12 @@ msgstr "Nube de etiquetas que lle puxo a outras persoas" msgid "None" msgstr "Ningún" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Nome de ficheiro incorrecto." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8750,24 +8808,9 @@ msgid_plural "%d entries in backup." msgstr[0] "%d entradas na reserva." msgstr[1] "%d entradas na reserva." -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "O nome é longo de máis (o límite é de 255 caracteres)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "A organización é longa de máis (o límite é de 255 caracteres)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Iso é longo de máis. A nota non pode exceder os %d caracteres." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "A lonxitude máxima das notas é de %d caracteres, incluído o URL do dato " -#~ "adxunto." - -#~ msgid " tagged %s" -#~ msgstr " etiquetouse %s" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "Ficheiro de reserva para o usuario %s (%s)" +#~ "O servidor non puido manexar tantos datos POST (%s bytes) por mor da súa " +#~ "configuración actual." diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po index e801adbc6d..4c67f0235e 100644 --- a/locale/hsb/LC_MESSAGES/statusnet.po +++ b/locale/hsb/LC_MESSAGES/statusnet.po @@ -11,18 +11,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:22+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:28+0000\n" "Language-Team: Upper Sorbian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hsb\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || " "n%100==4) ? 2 : 3)\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -87,12 +87,14 @@ msgstr "Přistupne nastajenja składować" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Składować" @@ -160,7 +162,7 @@ msgstr "%1$s a přećeljo, strona %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s a přećeljo" @@ -326,11 +328,13 @@ msgstr "Profil njeje so składować dał." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -747,7 +751,7 @@ msgstr "Njejsy awtorizowany." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" @@ -769,12 +773,13 @@ msgstr "Zmylk datoweje banki při zasunjenju wužiwarja OAuth-aplikacije." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Njewočakowane wotpósłanje formulara." @@ -821,7 +826,7 @@ msgstr "Konto" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1089,7 +1094,7 @@ msgstr "Přiwěšk njeeksistuje." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Žane přimjeno." @@ -1106,7 +1111,7 @@ msgstr "Njepłaćiwa wulkosć." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Awatar" @@ -1281,7 +1286,7 @@ msgstr "Njeje móžno, sydłowu zdźělenku składować." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Skupina njeeksistuje." @@ -1638,12 +1643,14 @@ msgstr "Swójski šat" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Móžeš swójski šat StatusNet jako .ZIP-archiw nahrać." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Pozadkowy wobraz změnić" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Pozadk" @@ -1656,42 +1663,50 @@ msgstr "" "Móžeš pozadkowy wobraz za sydło nahrać. Maksimalna datajowa wulkosć je %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Zapinjeny" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Wupinjeny" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 #, fuzzy msgid "Turn background image on or off." msgstr "Pozadkowy wobraz změnić" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 #, fuzzy msgid "Tile background image" msgstr "Pozadkowy wobraz změnić" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Barby změnić" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Wobsah" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Bóčnica" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Wotkazy" @@ -1703,15 +1718,18 @@ msgstr "Rozšěrjeny" msgid "Custom CSS" msgstr "Swójski CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Standardne hódnoty wužiwać" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Standardne designy wobnowić" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Na standard wróćo stajić" @@ -1719,11 +1737,12 @@ msgstr "Na standard wróćo stajić" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Składować" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Design składować" @@ -1861,7 +1880,7 @@ msgstr "Skupina njeje so dała aktualizować." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Aliasy njejsu so dali wutworić." @@ -2140,7 +2159,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, fuzzy, php-format msgid "%s's favorite notices" msgstr "Preferowane zdźělenki wot %1$s, strona %2$d" @@ -2314,8 +2333,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Twój design njeda so aktualizować." @@ -3227,25 +3248,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Zdźělenka nima profil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, fuzzy, php-format msgid "%1$s's status on %2$s" msgstr "%1$s je skupinu %2$s wopušćił" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Wobsahowy typ %s so njepodpěruje." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Njeje podpěrany datowy format." @@ -3743,7 +3764,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Dospołne mjeno" @@ -3787,7 +3808,7 @@ msgstr "Biografija" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4337,7 +4358,7 @@ msgid "Repeated!" msgstr "Wospjetowany!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, fuzzy, php-format msgid "Replies to %s" msgstr "Wotmołwy" @@ -4471,7 +4492,7 @@ msgid "Description" msgstr "Wopisanje" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistika" @@ -4579,96 +4600,96 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "skupina %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s skupina, strona %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Skupinski profil" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 #, fuzzy msgid "Note" msgstr "Žadyn" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Aliasy" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Skupinske akcije" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Powěsćowy kanal za %1$s je %2$s (RSS 1.0) markěrował" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Powěsćowy kanal za %1$s je %2$s (RSS 1.0) markěrował" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "Powěsćowy kanal za %1$s je %2$s (RSS 1.0) markěrował" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "FOAF za %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Čłonojo" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Žadyn)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Wšitcy čłonojo" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Wutworjeny" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4678,7 +4699,7 @@ msgstr "Čłonojo" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4691,7 +4712,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4701,7 +4722,7 @@ msgid "" msgstr "" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administratorojo" @@ -5459,7 +5480,7 @@ msgstr "Njepłaćiwy standardny abonement: '%1$s' wužiwar njeje." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5616,12 +5637,14 @@ msgstr "Wopačny wobrazowy typ za awatarowy URL '%s'." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Wopačny wobrazowy typ za awatarowy URL '%s'." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 #, fuzzy msgid "Profile design" msgstr "Profilowe nastajenja" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5740,29 +5763,44 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Njepłaćiwe datajowe mjeno." @@ -5893,31 +5931,31 @@ msgid "Problem saving notice." msgstr "Zmylk při składowanju powěsće" #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "" #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Informacije wo lokalnej skupinje njedachu so składować." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6013,22 +6051,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Skupina njeda so wutowrić." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "URI skupiny njeda so nastajić." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Skupinske čłonstwo njeda so stajić." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Informacije wo lokalnej skupinje njedachu so składować." @@ -6438,7 +6476,7 @@ msgid "User configuration" msgstr "Wužiwarska konfiguracija" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Wužiwar" @@ -7134,10 +7172,13 @@ msgstr "Awtorizowane zwjazane aplikacije" msgid "Database error" msgstr "Zmylk w datowej bance" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Dataju nahrać" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7145,14 +7186,29 @@ msgstr "" "Móžeš swój wosobinski pozadkowy wobraz nahrać. Maksimalna datajowa wulkosć " "je 2 MB." -#: 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 "" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Zapinjeny" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Wupinjeny" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Wróćo stajić" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 #, fuzzy msgid "Design defaults restored." msgstr "Designowe nastajenja składowane." @@ -7610,7 +7666,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) je twoju zdźělenku jako faworit přidał" @@ -7620,7 +7676,7 @@ msgstr "%s (@%s) je twoju zdźělenku jako faworit přidał" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7642,7 +7698,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7655,7 +7711,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) je twoju zdźělenku jako faworit přidał" @@ -7666,7 +7722,7 @@ msgstr "%s (@%s) je twoju zdźělenku jako faworit přidał" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7787,7 +7843,7 @@ msgstr "MIME-typ dataje njeda so zwěsćić." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7796,7 +7852,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -7937,31 +7993,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Nowy abonement njeda so zasunyć." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Wosobinski" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Wotmołwy" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Fawority" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Dochadny póst" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Twoje dochadźace powěsće" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Wuchadny póst" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Twoje pósłane powěsće" @@ -8164,6 +8220,12 @@ msgstr "" msgid "None" msgstr "Žadyn" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Njepłaćiwe datajowe mjeno." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8435,14 +8497,3 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Mjeno je předołho (maks. 255 znamješkow)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Mjeno organizacije je předołho (maks. 255 znamješkow)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "To je předołho. Maksimalna wulkosć zdźělenki je %d znamješkow." diff --git a/locale/hu/LC_MESSAGES/statusnet.po b/locale/hu/LC_MESSAGES/statusnet.po index 6cdd324c78..8fb750d69b 100644 --- a/locale/hu/LC_MESSAGES/statusnet.po +++ b/locale/hu/LC_MESSAGES/statusnet.po @@ -12,13 +12,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:22+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:30+0000\n" "Language-Team: Hungarian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hu\n" "X-Message-Group: #out-statusnet-core\n" @@ -89,12 +89,14 @@ msgstr "Hozzáférések beállításainak mentése" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Mentés" @@ -162,7 +164,7 @@ msgstr "%1$s és barátai, %2$d oldal" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s és barátai" @@ -332,11 +334,13 @@ msgstr "Nem sikerült menteni a profilt." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -745,7 +749,7 @@ msgstr "Nincs jogosultságod." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Probléma volt a munkameneted tokenjével. Kérlek, próbáld újra." @@ -766,12 +770,13 @@ msgstr "" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Váratlan űrlapbeküldés." @@ -818,7 +823,7 @@ msgstr "Kontó" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1081,7 +1086,7 @@ msgstr "Nincs ilyen csatolmány." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Nincs becenév." @@ -1098,7 +1103,7 @@ msgstr "Érvénytelen méret." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1271,7 +1276,7 @@ msgstr "Nem sikerült elmenteni a blokkolási információkat." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Nincs ilyen csoport." @@ -1632,12 +1637,14 @@ msgstr "" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Háttérkép megváltoztatása" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Háttér" @@ -1649,40 +1656,48 @@ msgid "" msgstr "" #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Be" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Ki" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Háttérkép be- vagy kikapcsolása." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Háttérkép csempézése" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Színek megváltoztatása" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Tartalom" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Oldalsáv" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Szöveg" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Hivatkozások" @@ -1694,15 +1709,18 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Alapértelmezések használata" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Visszaállítás az alapértelmezettre" @@ -1710,11 +1728,12 @@ msgstr "Visszaállítás az alapértelmezettre" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Mentés" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Design mentése" @@ -1850,7 +1869,7 @@ msgstr "Nem sikerült a csoport frissítése." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Nem sikerült létrehozni az álneveket." @@ -2135,7 +2154,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s kedvenc hírei" @@ -2313,8 +2332,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Nem sikerült frissíteni a designt." @@ -3212,25 +3233,25 @@ msgstr "" msgid "Notice has no profile." msgstr "" -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Nem támogatott adatformátum." @@ -3727,7 +3748,7 @@ msgstr "1-64 kisbetű vagy számjegy, nem lehet benne írásjel vagy szóköz" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Teljes név" @@ -3771,7 +3792,7 @@ msgstr "Életrajz" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4324,7 +4345,7 @@ msgid "Repeated!" msgstr "" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "" @@ -4456,7 +4477,7 @@ msgid "Description" msgstr "Leírás" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statisztika" @@ -4563,95 +4584,95 @@ msgid "This is a way to share what you like." msgstr "Ez az egyik módja annak, hogy megoszd amit kedvelsz." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s csoport" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s csoport, %2$d. oldal" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Csoportprofil" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL-cím" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Megjegyzés" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Álnevek" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Csoport-tevékenységek" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s csoport RSS 1.0 hírcsatornája" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s csoport RSS 2.0 hírcsatornája" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s csoport Atom hírcsatornája" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF a %s csoportnak" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Tagok" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(nincs)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Összes tag" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Létrehoztuk" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4661,7 +4682,7 @@ msgstr "Tagok" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4680,7 +4701,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4690,7 +4711,7 @@ msgid "" msgstr "" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Adminisztrátorok" @@ -5439,7 +5460,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5594,11 +5615,13 @@ msgstr "" msgid "Wrong image type for avatar URL ‘%s’." msgstr "" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5716,29 +5739,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "" @@ -5863,31 +5895,31 @@ msgid "Problem saving notice." msgstr "Probléma merült fel a hír mentése közben." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "" #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Nem sikerült menteni a profilt." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -5982,22 +6014,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Nem sikerült létrehozni a csoportot." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "" #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Nem sikerült beállítani a csoporttagságot." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "" @@ -6397,7 +6429,7 @@ msgid "User configuration" msgstr "A felhasználók beállításai" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Felhasználó" @@ -7063,25 +7095,41 @@ msgstr "" msgid "Database error" msgstr "Adatbázishiba" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Fájl feltöltése" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" -#: 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 "" -"A szerver nem tudott feldolgozni ennyi POST-adatot (%s bájtot) a jelenlegi " -"konfigurációja miatt." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Be" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Ki" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Alaphelyzet" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "" @@ -7575,7 +7623,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) az általad küldött hírt hozzáadta a kedvenceihez" @@ -7585,7 +7633,7 @@ msgstr "%s (@%s) az általad küldött hírt hozzáadta a kedvenceihez" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7623,7 +7671,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7633,7 +7681,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) figyelmedbe ajánlott egy hírt" @@ -7644,7 +7692,7 @@ msgstr "%s (@%s) figyelmedbe ajánlott egy hírt" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7766,7 +7814,7 @@ msgstr "Nem sikerült a fájl MIME-típusát megállapítani." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7775,7 +7823,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -7914,31 +7962,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "" -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Személyes" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Válaszok" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Kedvencek" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "A bejövő üzeneteid" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "A küldött üzeneteid" @@ -8136,6 +8184,12 @@ msgstr "" msgid "None" msgstr "" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Érvénytelen megjegyzéstartalom." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8381,18 +8435,9 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "A név túl hosszú (max 255 karakter lehet)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "A szervezet túl hosszú (255 karakter lehet)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Az túl hosszú. Egy hír legfeljebb %d karakterből állhat." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "Egy hír legfeljebb %d karakterből állhat, a melléklet URL-jét is " -#~ "beleértve." +#~ "A szerver nem tudott feldolgozni ennyi POST-adatot (%s bájtot) a " +#~ "jelenlegi konfigurációja miatt." diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po index 73afea5a86..6a3156b96d 100644 --- a/locale/ia/LC_MESSAGES/statusnet.po +++ b/locale/ia/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:24+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:31+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -84,12 +84,14 @@ msgstr "Salveguardar configurationes de accesso" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Salveguardar" @@ -157,7 +159,7 @@ msgstr "%1$s e amicos, pagina %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s e amicos" @@ -333,11 +335,13 @@ msgstr "Non poteva salveguardar le profilo." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -742,7 +746,7 @@ msgstr "Indicio de requesta jam autorisate." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Occurreva un problema con le indicio de tu session. Per favor reproba." @@ -764,12 +768,13 @@ msgstr "" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Submission de formulario inexpectate." @@ -821,7 +826,7 @@ msgstr "Conto" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1086,7 +1091,7 @@ msgstr "Annexo non existe." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Nulle pseudonymo." @@ -1103,7 +1108,7 @@ msgstr "Dimension invalide." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1277,7 +1282,7 @@ msgstr "Falleva de salveguardar le information del blocada." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Gruppo non existe." @@ -1636,12 +1641,14 @@ msgstr "" "Es possibile incargar un apparentia personalisate de StatusNet in un " "archivo .ZIP." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Cambiar imagine de fundo" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Fundo" @@ -1655,40 +1662,48 @@ msgstr "" "file es %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Active" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Non active" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Activar o disactivar le imagine de fundo." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Tegular le imagine de fundo" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Cambiar colores" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Contento" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Barra lateral" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Ligamines" @@ -1700,15 +1715,18 @@ msgstr "Avantiate" msgid "Custom CSS" msgstr "CSS personalisate" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Usar predefinitiones" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Restaurar apparentias predefinite" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Revenir al predefinitiones" @@ -1716,11 +1734,12 @@ msgstr "Revenir al predefinitiones" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Salveguardar" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Salveguardar apparentia" @@ -1765,9 +1784,8 @@ msgstr "Le nomine es requirite." #. TRANS: Validation error shown when providing too long a name in the "Edit application" form. #: actions/editapplication.php:188 actions/newapplication.php:169 -#, fuzzy msgid "Name is too long (maximum 255 characters)." -msgstr "Le nomine es troppo longe (max. 255 characteres)." +msgstr "Le nomine es troppo longe (maximo 255 characteres)." #. TRANS: Validation error shown when providing a name for an application that already exists in the "Edit application" form. #: actions/editapplication.php:192 actions/newapplication.php:166 @@ -1855,7 +1873,7 @@ msgstr "Non poteva actualisar gruppo." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Non poteva crear aliases." @@ -2141,7 +2159,7 @@ msgstr "" "nota a tu favorites!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Notas favorite de %s" @@ -2320,8 +2338,10 @@ msgstr "" "Personalisa le apparentia de tu gruppo con un imagine de fundo e un paletta " "de colores de tu preferentia." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Non poteva actualisar tu apparentia." @@ -2716,7 +2736,7 @@ msgstr[1] "Tu es ja subscribite a iste usatores:" #. TRANS: Used as list item for already subscribed users (%1$s is nickname, %2$s is e-mail address). #. TRANS: Used as list item for already registered people (%1$s is nickname, %2$s is e-mail address). #: actions/invite.php:145 actions/invite.php:159 -#, fuzzy, php-format +#, php-format msgctxt "INVITE" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2902,7 +2922,6 @@ msgstr "" "derectos reservate\"." #: actions/licenseadminpanel.php:156 -#, fuzzy msgid "Invalid license title. Maximum length is 255 characters." msgstr "Titulo de licentia invalide. Longitude maximal es 255 characteres." @@ -3282,25 +3301,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Le nota ha nulle profilo." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Le stato de %1$s in %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Le typo de contento %s non es supportate." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Solmente le URLs %s es permittite super HTTP simple." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Formato de datos non supportate." @@ -3351,9 +3370,9 @@ msgstr "Monstrar o celar apparentias de profilo." #. TRANS: Form validation error for form "Other settings" in user profile. #: actions/othersettings.php:162 -#, fuzzy msgid "URL shortening service is too long (maximum 50 characters)." -msgstr "Le servicio de accurtamento de URL es troppo longe (max 50 chars)." +msgstr "" +"Le servicio de accurtamento de URL es troppo longe (maximo 50 characteres)." #: actions/otp.php:69 msgid "No user ID specified." @@ -3781,7 +3800,7 @@ msgstr "1-64 minusculas o numeros, sin punctuation o spatios." #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nomine complete" @@ -3822,7 +3841,7 @@ msgstr "Bio" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4162,7 +4181,6 @@ msgid "Unexpected password reset." msgstr "Reinitialisation inexpectate del contrasigno." #: actions/recoverpassword.php:365 -#, fuzzy msgid "Password must be 6 characters or more." msgstr "Le contrasigno debe haber 6 characteres o plus." @@ -4407,7 +4425,7 @@ msgid "Repeated!" msgstr "Repetite!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Responsas a %s" @@ -4545,7 +4563,7 @@ msgid "Description" msgstr "Description" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statisticas" @@ -4662,94 +4680,94 @@ msgid "This is a way to share what you like." msgstr "Isto es un modo de condivider lo que te place." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Gruppo %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Gruppo %1$s, pagina %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Profilo del gruppo" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nota" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Aliases" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Actiones del gruppo" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Syndication de notas pro le gruppo %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Syndication de notas pro le gruppo %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Syndication de notas pro le gruppo %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Amico de un amico pro le gruppo %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Membros" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Nulle)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Tote le membros" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 msgctxt "LABEL" msgid "Created" msgstr "Create" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 msgctxt "LABEL" msgid "Members" msgstr "Membros" @@ -4758,7 +4776,7 @@ msgstr "Membros" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4776,7 +4794,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4790,7 +4808,7 @@ msgstr "" "lor vita e interesses. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administratores" @@ -4824,16 +4842,16 @@ msgstr "Nota delite." #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #: actions/showstream.php:70 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s" -msgstr "%1$s, pagina %2$d" +msgstr "%1$s etiquettate con %2$s" #. TRANS: Page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$s is the hash tag, %1$d is the page number. #: actions/showstream.php:74 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s, page %3$d" -msgstr "Notas etiquettate con %1$s, pagina %2$d" +msgstr "%1$s etiquettate con %2$s, pagina %3$d" #. TRANS: Extended page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$d is the page number. @@ -4877,10 +4895,10 @@ msgstr "Amico de un amico pro %s" #. TRANS: First sentence of empty list message for a stream. $1%s is a user nickname. #: actions/showstream.php:211 -#, fuzzy, php-format +#, php-format msgid "This is the timeline for %1$s, but %1$s hasn't posted anything yet." msgstr "" -"Isto es le chronologia pro %1$s, ma %2$s non ha ancora publicate alique." +"Isto es le chronologia pro %1$s, ma %1$s non ha ancora publicate alique." #. TRANS: Second sentence of empty list message for a stream for the user themselves. #: actions/showstream.php:217 @@ -5063,7 +5081,6 @@ msgstr "Impossibile salveguardar le aviso del sito." #. TRANS: Client error displayed when a site-wide notice was longer than allowed. #: actions/sitenoticeadminpanel.php:112 -#, fuzzy msgid "Maximum length for the site-wide notice is 255 characters." msgstr "Le longitude maxime del aviso a tote le sito es 255 characteres." @@ -5074,10 +5091,9 @@ msgstr "Texto del aviso del sito" #. TRANS: Tooltip for site-wide notice text field in admin panel. #: actions/sitenoticeadminpanel.php:179 -#, fuzzy msgid "Site-wide notice text (255 characters maximum; HTML allowed)" msgstr "" -"Le texto del aviso a tote le sito (max. 255 characteres; HTML permittite)" +"Le texto del aviso a tote le sito (maximo 255 characteres; HTML permittite)" #. TRANS: Title for button to save site notice in admin panel. #: actions/sitenoticeadminpanel.php:201 @@ -5562,20 +5578,19 @@ msgstr "Limite de biographia invalide. Debe esser un numero." #. TRANS: Form validation error in user admin panel when welcome text is too long. #: actions/useradminpanel.php:154 -#, fuzzy msgid "Invalid welcome text. Maximum length is 255 characters." -msgstr "Texto de benvenita invalide. Longitude maximal es 255 characteres." +msgstr "Texto de benvenita invalide. Longitude maxime es 255 characteres." #. TRANS: Client error displayed when trying to set a non-existing user as default subscription for new #. TRANS: users in user admin panel. %1$s is the invalid nickname. #: actions/useradminpanel.php:166 -#, fuzzy, php-format +#, php-format msgid "Invalid default subscripton: '%1$s' is not a user." msgstr "Subscription predefinite invalide: '%1$s' non es usator." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profilo" @@ -5601,9 +5616,8 @@ msgstr "Message de benvenita a nove usatores" #. TRANS: Tooltip in user admin panel for setting new user welcome text. #: actions/useradminpanel.php:238 -#, fuzzy msgid "Welcome text for new users (maximum 255 characters)." -msgstr "Texto de benvenita pro nove usatores (max. 255 characteres)" +msgstr "Texto de benvenita pro nove usatores (maximo 255 characteres)." #. TRANS: Field label in user admin panel for setting default subscription for new users. #: actions/useradminpanel.php:244 @@ -5738,11 +5752,13 @@ msgstr "Non pote leger URL de avatar ‘%s’." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Typo de imagine incorrecte pro URL de avatar ‘%s’." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Apparentia del profilo" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5875,31 +5891,42 @@ msgstr "Robin pensa que alique es impossibile." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Nulle file pote esser plus grande que %1$d bytes e le file que tu inviava ha " +"%2$d bytes. Tenta incargar un version minus grande." +msgstr[1] "" "Nulle file pote esser plus grande que %1$d bytes e le file que tu inviava ha " "%2$d bytes. Tenta incargar un version minus grande." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "Un file de iste dimension excederea tu quota de usator de %d bytes." +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "Un file de iste dimension excederea tu quota de usator de %d bytes." +msgstr[1] "Un file de iste dimension excederea tu quota de usator de %d bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Un file de iste dimension excederea tu quota mensual de %d bytes." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "Un file de iste dimension excederea tu quota mensual de %d bytes." +msgstr[1] "Un file de iste dimension excederea tu quota mensual de %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Nomine de file invalide." @@ -6028,32 +6055,33 @@ msgid "Problem saving notice." msgstr "Problema salveguardar nota." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Mal typo fornite a saveKnownGroups" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problema salveguardar le cassa de entrata del gruppo." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Non poteva salveguardar le responsa pro %1$d, %2$d." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 -#, fuzzy, php-format +#: classes/Profile.php:164 classes/User_group.php:247 +#, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6149,22 +6177,22 @@ msgid "Single-user mode code called when not enabled." msgstr "Codice in modo de usator singule appellate sin esser activate." #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Non poteva crear gruppo." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Non poteva definir le URL del gruppo." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Non poteva configurar le membrato del gruppo." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Non poteva salveguardar le informationes del gruppo local." @@ -6218,7 +6246,7 @@ msgstr "Pagina sin titulo" #: lib/action.php:310 msgctxt "TOOLTIP" msgid "Show more" -msgstr "" +msgstr "Monstrar plus" #. TRANS: DT element for primary navigation menu. String is hidden in default CSS. #: lib/action.php:526 @@ -6572,7 +6600,7 @@ msgid "User configuration" msgstr "Configuration del usator" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Usator" @@ -6929,7 +6957,7 @@ msgstr "%1$s quitava le gruppo %2$s." #. TRANS: Whois output. #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL. #: lib/command.php:426 -#, fuzzy, php-format +#, php-format msgctxt "WHOIS" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6976,10 +7004,10 @@ msgstr "" #. TRANS: Message given if content is too long. %1$sd is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:488 -#, fuzzy, php-format +#, php-format msgid "Message too long - maximum is %1$d character, you sent %2$d." msgid_plural "Message too long - maximum is %1$d characters, you sent %2$d." -msgstr[0] "Message troppo longe - maximo es %1$d characteres, tu inviava %2$d." +msgstr[0] "Message troppo longe - maximo es %1$d character, tu inviava %2$d." msgstr[1] "Message troppo longe - maximo es %1$d characteres, tu inviava %2$d." #. TRANS: Error text shown sending a direct message fails with an unknown reason. @@ -7002,11 +7030,11 @@ msgstr "Error durante le repetition del nota." #. TRANS: Message given if content of a notice for a reply is too long. %1$d is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:591 -#, fuzzy, php-format +#, php-format msgid "Notice too long - maximum is %1$d character, you sent %2$d." msgid_plural "Notice too long - maximum is %1$d characters, you sent %2$d." -msgstr[0] "Nota troppo longe - maximo es %d characteres, tu inviava %d." -msgstr[1] "Nota troppo longe - maximo es %d characteres, tu inviava %d." +msgstr[0] "Nota troppo longe - maximo es %1$d character, tu inviava %2$d." +msgstr[1] "Nota troppo longe - maximo es %1$d characteres, tu inviava %2$d." #. TRANS: Text shown having sent a reply to a notice successfully. #. TRANS: %s is the nickname of the user of the notice the reply was sent to. @@ -7284,10 +7312,13 @@ msgstr "Applicationes autorisate connectite" msgid "Database error" msgstr "Error de base de datos" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Incargar file" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7295,16 +7326,29 @@ msgstr "" "Tu pote actualisar tu imagine de fundo personal. Le dimension maximal del " "file es 2MB." -#: 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 "" -"Le servitor non ha potite tractar tante datos POST (%s bytes) a causa de su " -"configuration actual." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Active" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Non active" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Reinitialisar" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Apparentia predefinite restaurate." @@ -7371,30 +7415,28 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 minusculas o numeros, sin punctuation o spatios" #: lib/groupeditform.php:163 -#, fuzzy msgid "URL of the homepage or blog of the group or topic." -msgstr "URL del pagina initial o blog del gruppo o topico" +msgstr "URL del pagina initial o blog del gruppo o topico." #: lib/groupeditform.php:168 msgid "Describe the group or topic" msgstr "Describe le gruppo o topico" #: lib/groupeditform.php:170 -#, fuzzy, php-format +#, php-format msgid "Describe the group or topic in %d character or less" msgid_plural "Describe the group or topic in %d characters or less" -msgstr[0] "Describe le gruppo o topico in %d characteres" -msgstr[1] "Describe le gruppo o topico in %d characteres" +msgstr[0] "Describe le gruppo o topico in %d character o minus" +msgstr[1] "Describe le gruppo o topico in %d characteres o minus" #: lib/groupeditform.php:182 -#, fuzzy msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "" -"Loco del gruppo, si existe, como \"Citate, Provincia (o Region), Pais\"" +"Loco del gruppo, si existe, como \"Citate, Provincia (o Region), Pais\"." #: lib/groupeditform.php:190 -#, fuzzy, php-format +#, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " "alias allowed." @@ -7402,9 +7444,10 @@ msgid_plural "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " "aliases allowed." msgstr[0] "" -"Pseudonymos additional pro le gruppo, separate per commas o spatios, max %d" +"Pseudonymo additional pro le gruppo. Solmente %d alias es permittite." msgstr[1] "" -"Pseudonymos additional pro le gruppo, separate per commas o spatios, max %d" +"Pseudonymos additional pro le gruppo, separate per commas o spatios. Un " +"maximo de %d aliases es permittite." #. TRANS: Menu item in the group navigation page. #: lib/groupnav.php:86 @@ -7804,7 +7847,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%1$s (@%2$s) ha addite tu nota como favorite" @@ -7814,7 +7857,7 @@ msgstr "%1$s (@%2$s) ha addite tu nota como favorite" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7853,7 +7896,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7866,7 +7909,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%1$s (@%2$s) ha inviate un nota a tu attention" @@ -7877,7 +7920,7 @@ msgstr "%1$s (@%2$s) ha inviate un nota a tu attention" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8025,7 +8068,7 @@ msgstr "Non poteva determinar le typo MIME del file." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8036,7 +8079,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "\"%s\" non es un typo de file supportate in iste servitor." @@ -8177,31 +8220,31 @@ msgstr "Nota duplicate." msgid "Couldn't insert new subscription." msgstr "Non poteva inserer nove subscription." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Personal" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Responsas" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favorites" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Cassa de entrata" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Tu messages recipite" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Cassa de exito" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Tu messages inviate" @@ -8398,6 +8441,12 @@ msgstr "Nube de etiquetta de personas como etiquettate" msgid "None" msgstr "Nulle" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Nomine de file invalide." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8419,12 +8468,12 @@ msgid "Invalid theme: bad directory structure." msgstr "Apparentia invalide: mal structura de directorios." #: lib/themeuploader.php:166 -#, fuzzy, php-format +#, php-format msgid "Uploaded theme is too large; must be less than %d byte uncompressed." msgid_plural "" "Uploaded theme is too large; must be less than %d bytes uncompressed." msgstr[0] "" -"Le apparentia incargate es troppo voluminose; debe occupar minus de %d bytes " +"Le apparentia incargate es troppo voluminose; debe occupar minus de %d byte " "in forma non comprimite." msgstr[1] "" "Le apparentia incargate es troppo voluminose; debe occupar minus de %d bytes " @@ -8637,7 +8686,7 @@ msgstr[1] "Message troppo longe. Maximo es %1$d characteres, tu inviava %2$d." #: scripts/restoreuser.php:61 #, php-format msgid "Getting backup from file '%s'." -msgstr "" +msgstr "Obtene copia de reserva ex file '%s'." #. TRANS: Commandline script output. #: scripts/restoreuser.php:91 @@ -8646,29 +8695,15 @@ msgstr "Nulle usator specificate; le usator de reserva es usate." #. TRANS: Commandline script output. %d is the number of entries in the activity stream in backup; used for plural. #: scripts/restoreuser.php:98 -#, fuzzy, php-format +#, php-format msgid "%d entry in backup." msgid_plural "%d entries in backup." -msgstr[0] "%d entratas in copia de reserva." +msgstr[0] "%d entrata in copia de reserva." msgstr[1] "%d entratas in copia de reserva." -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Le nomine es troppo longe (maximo 255 characteres)." - -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Le organisation es troppo longe (maximo 255 characteres)." - -#~ msgid "That's too long. Max notice size is %d chars." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "Isto es troppo longe. Le longitude maximal del notas es %d characteres." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "" -#~ "Le longitude maximal del notas es %d characteres, includente le URL " -#~ "adjungite." - -#~ msgid " tagged %s" -#~ msgstr " con etiquetta %s" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "File de copia de reserva pro le usator %s (%s)" +#~ "Le servitor non ha potite tractar tante datos POST (%s bytes) a causa de " +#~ "su configuration actual." diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po index d147593940..12ae0b7f17 100644 --- a/locale/is/LC_MESSAGES/statusnet.po +++ b/locale/is/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:25+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:32+0000\n" "Language-Team: Icelandic \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: is\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -90,12 +90,14 @@ msgstr "Stillingar fyrir mynd" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 #, fuzzy msgctxt "BUTTON" msgid "Save" @@ -165,7 +167,7 @@ msgstr "%s og vinirnir" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s og vinirnir" @@ -335,11 +337,13 @@ msgstr "Gat ekki vistað persónulega síðu." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -760,7 +764,7 @@ msgstr "Þú ert ekki áskrifandi." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Það kom upp vandamál með setutókann þinn. Vinsamlegast reyndu aftur." @@ -783,12 +787,13 @@ msgstr "Gagnagrunnsvilla við innsetningu myllumerkis: %s" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Bjóst ekki við innsendingu eyðublaðs." @@ -835,7 +840,7 @@ msgstr "Aðgangur" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1100,7 +1105,7 @@ msgstr "Ekkert þannig merki." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Ekkert stuttnefni." @@ -1117,7 +1122,7 @@ msgstr "Ótæk stærð." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Mynd" @@ -1295,7 +1300,7 @@ msgstr "Mistókst að vista upplýsingar um notendalokun" #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Enginn þannig hópur." @@ -1670,12 +1675,14 @@ msgstr "Babl vefsíðunnar" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "" @@ -1687,43 +1694,51 @@ msgid "" msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 #, fuzzy msgid "Change colours" msgstr "Breyta lykilorðinu þínu" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 #, fuzzy msgid "Content" msgstr "Tengjast" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 #, fuzzy msgid "Sidebar" msgstr "Leita" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Texti" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 #, fuzzy msgid "Links" msgstr "Innskráning" @@ -1736,15 +1751,18 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "" @@ -1752,11 +1770,12 @@ msgstr "" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Vista" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "" @@ -1900,7 +1919,7 @@ msgstr "Gat ekki uppfært hóp." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 #, fuzzy msgid "Could not create aliases." msgstr "Gat ekki búið til uppáhald." @@ -2187,7 +2206,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Uppáhaldsbabl %s" @@ -2380,8 +2399,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 #, fuzzy msgid "Couldn't update your design." msgstr "Gat ekki uppfært hóp." @@ -3349,25 +3370,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Notandi hefur enga persónulega síðu." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Staða %1$s á %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Enginn stuðningur við gagnasnið." @@ -3873,7 +3894,7 @@ msgstr "1-64 lágstafir eða tölustafir, engin greinarmerki eða bil" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Fullt nafn" @@ -3918,7 +3939,7 @@ msgstr "Lýsing" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4505,7 +4526,7 @@ msgid "Repeated!" msgstr "" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Svör við %s" @@ -4645,7 +4666,7 @@ msgid "Description" msgstr "Lýsing" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Tölfræði" @@ -4753,95 +4774,95 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s hópurinn" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Hópar, síða %d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Hópssíðan" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "Vefslóð" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Athugasemd" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Hópsaðgerðir" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "%s hópurinn" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Meðlimir" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ekkert)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Allir meðlimir" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Í sviðsljósinu" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4851,7 +4872,7 @@ msgstr "Meðlimir" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4864,7 +4885,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4874,7 +4895,7 @@ msgid "" msgstr "" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 #, fuzzy msgid "Admins" msgstr "Stjórnandi" @@ -5652,7 +5673,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Persónuleg síða" @@ -5826,12 +5847,14 @@ msgstr "Get ekki lesið slóðina fyrir myndina '%s'" msgid "Wrong image type for avatar URL ‘%s’." msgstr "Röng gerð myndar fyrir '%s'" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 #, fuzzy msgid "Profile design" msgstr "Stillingar persónulegrar síðu" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5950,29 +5973,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "Ótæk stærð." @@ -6109,32 +6141,32 @@ msgid "Problem saving notice." msgstr "Vandamál komu upp við að vista babl." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "Vandamál komu upp við að vista babl." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Gat ekki vistað áskrift." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6233,22 +6265,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Gat ekki búið til hóp." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Gat ekki búið til hóp." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Gat ekki skráð hópmeðlimi." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 #, fuzzy msgid "Could not save local group info." msgstr "Gat ekki vistað áskrift." @@ -6678,7 +6710,7 @@ msgid "User configuration" msgstr "SMS staðfesting" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Notandi" @@ -7366,25 +7398,41 @@ msgstr "" msgid "Database error" msgstr "" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 #, fuzzy msgid "Upload file" msgstr "Hlaða upp" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 #, fuzzy msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn." -#: lib/designsettings.php:283 -#, php-format -msgid "" -"The server was unable to handle that much POST data (%s bytes) due to its " -"current configuration." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +msgctxt "RADIO" +msgid "On" msgstr "" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +msgctxt "RADIO" +msgid "Off" +msgstr "" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Endurstilla" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "" @@ -7834,7 +7882,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "Senda mér tölvupóst þegar einhver setur babl í mér í uppáhald hjá sér." @@ -7844,7 +7892,7 @@ msgstr "Senda mér tölvupóst þegar einhver setur babl í mér í uppáhald hj #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7866,7 +7914,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7876,7 +7924,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "" @@ -7887,7 +7935,7 @@ msgstr "" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8008,7 +8056,7 @@ msgstr "Gat ekki eytt uppáhaldi." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8017,7 +8065,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8163,31 +8211,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Gat ekki sett inn nýja áskrift." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Persónulegt" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Svör" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Uppáhald" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Innhólf" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Mótteknu skilaboðin þín" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Úthólf" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Skilaboð sem þú hefur sent" @@ -8396,6 +8444,12 @@ msgstr "" msgid "None" msgstr "Ekkert" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Ótæk stærð." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8649,19 +8703,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Fullt nafn er of langt (í mesta lagi 255 stafir)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Staðsetning er of löng (í mesta lagi 255 stafir)." - -#, fuzzy -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn." - -#, fuzzy -#~ msgid " tagged %s" -#~ msgstr "Babl merkt með %s" diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po index 0835612290..fee72eafb1 100644 --- a/locale/it/LC_MESSAGES/statusnet.po +++ b/locale/it/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:26+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:34+0000\n" "Language-Team: Italian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: it\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -88,12 +88,14 @@ msgstr "Salva impostazioni di accesso" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Salva" @@ -161,7 +163,7 @@ msgstr "%1$s e amici, pagina %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s e amici" @@ -335,11 +337,13 @@ msgstr "Impossibile salvare il profilo." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -752,7 +756,7 @@ msgstr "Autorizzazione non presente." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" "Si è verificato un problema con il tuo token di sessione. Prova di nuovo." @@ -775,12 +779,13 @@ msgstr "Errore nel database nell'inserire l'applicazione utente OAuth." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Invio del modulo inaspettato." @@ -833,7 +838,7 @@ msgstr "Account" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1097,7 +1102,7 @@ msgstr "Nessun allegato." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Nessun soprannome." @@ -1114,7 +1119,7 @@ msgstr "Dimensione non valida." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Immagine" @@ -1291,7 +1296,7 @@ msgstr "Salvataggio delle informazioni per il blocco non riuscito." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Nessuna gruppo." @@ -1656,12 +1661,14 @@ msgstr "Tema personalizzato" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Puoi caricare un tema per StatusNet personalizzato come un file ZIP." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Modifica l'immagine di sfondo" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Sfondo" @@ -1675,40 +1682,48 @@ msgstr "" "file è di %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "On" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Off" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Abilita o disabilita l'immagine di sfondo." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Affianca l'immagine di sfondo" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Modifica colori" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Contenuto" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Barra laterale" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Testo" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Collegamenti" @@ -1720,15 +1735,18 @@ msgstr "Avanzate" msgid "Custom CSS" msgstr "CSS personalizzato" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Usa predefiniti" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Ripristina i valori predefiniti" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Reimposta i valori predefiniti" @@ -1736,11 +1754,12 @@ msgstr "Reimposta i valori predefiniti" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Salva" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Salva aspetto" @@ -1876,7 +1895,7 @@ msgstr "Impossibile aggiornare il gruppo." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Impossibile creare gli alias." @@ -2166,7 +2185,7 @@ msgstr "" "tra i tuoi preferiti!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Messaggi preferiti di %s" @@ -2345,8 +2364,10 @@ msgstr "" "Personalizza l'aspetto del tuo gruppo con un'immagine di sfondo e dei colori " "personalizzati." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Impossibile aggiornare l'aspetto." @@ -3307,25 +3328,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Il messaggio non ha un profilo." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Stato di %1$s su %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Tipo di contenuto %s non supportato." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Solo URL %s attraverso HTTP semplice." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Non è un formato di dati supportato." @@ -3827,7 +3848,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nome" @@ -3869,7 +3890,7 @@ msgstr "Biografia" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4455,7 +4476,7 @@ msgid "Repeated!" msgstr "Ripetuti!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Risposte a %s" @@ -4591,7 +4612,7 @@ msgid "Description" msgstr "Descrizione" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistiche" @@ -4706,95 +4727,95 @@ msgid "This is a way to share what you like." msgstr "Questo è un modo per condividere ciò che ti piace." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Gruppo %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Gruppi di %1$s, pagina %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Profilo del gruppo" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Nota" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Alias" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Azioni dei gruppi" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Feed dei messaggi per il gruppo %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Feed dei messaggi per il gruppo %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Feed dei messaggi per il gruppo %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF per il gruppo %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Membri" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(nessuno)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Tutti i membri" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Creato" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4804,7 +4825,7 @@ msgstr "Membri" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4823,7 +4844,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4836,7 +4857,7 @@ msgstr "" "[StatusNet](http://status.net/)." #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Amministratori" @@ -5622,7 +5643,7 @@ msgstr "Abbonamento predefinito non valido: \"%1$s\" non è un utente." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profilo" @@ -5785,11 +5806,13 @@ msgstr "Impossibile leggere l'URL \"%s\" dell'immagine." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Tipo di immagine errata per l'URL \"%s\"." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Aspetto del profilo" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5921,33 +5944,46 @@ msgstr "Si è verificato qualche cosa di impossibile." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Nessun file può superare %1$d byte e il file inviato era di %2$d byte. Prova " +"a caricarne una versione più piccola." +msgstr[1] "" "Nessun file può superare %1$d byte e il file inviato era di %2$d byte. Prova " "a caricarne una versione più piccola." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Un file di questa dimensione supererebbe la tua quota utente di %d byte." +msgstr[1] "" "Un file di questa dimensione supererebbe la tua quota utente di %d byte." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +"Un file di questa dimensione supererebbe la tua quota mensile di %d byte." +msgstr[1] "" "Un file di questa dimensione supererebbe la tua quota mensile di %d byte." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Nome file non valido." @@ -6076,31 +6112,32 @@ msgid "Problem saving notice." msgstr "Problema nel salvare il messaggio." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Fornito un tipo errato per saveKnownGroups" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problema nel salvare la casella della posta del gruppo." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Impossibile salvare le informazioni del gruppo locale." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6198,22 +6235,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Impossibile creare il gruppo." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Impossibile impostare l'URI del gruppo." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Impossibile impostare la membership al gruppo." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Impossibile salvare le informazioni del gruppo locale." @@ -6623,7 +6660,7 @@ msgid "User configuration" msgstr "Configurazione utente" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Utente" @@ -7339,10 +7376,13 @@ msgstr "Applicazioni collegate autorizzate" msgid "Database error" msgstr "Errore del database" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Carica file" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7350,16 +7390,29 @@ msgstr "" "Puoi caricare la tua immagine di sfondo. La dimensione massima del file è di " "2MB." -#: 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 "" -"Il server non è in grado di gestire tutti quei dati POST (%s byte) con la " -"configurazione attuale." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "On" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Off" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Reimposta" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Valori predefiniti ripristinati." @@ -7861,7 +7914,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) ha aggiunto il tuo messaggio tra i suoi preferiti" @@ -7871,7 +7924,7 @@ msgstr "%s (@%s) ha aggiunto il tuo messaggio tra i suoi preferiti" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7910,7 +7963,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7923,7 +7976,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) ti ha inviato un messaggio" @@ -7934,7 +7987,7 @@ msgstr "%s (@%s) ti ha inviato un messaggio" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8082,7 +8135,7 @@ msgstr "Impossibile determinare il tipo MIME del file." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8093,7 +8146,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "\"%s\" non è un tipo di file supportata su questo server." @@ -8234,31 +8287,31 @@ msgstr "Messaggio duplicato." msgid "Couldn't insert new subscription." msgstr "Impossibile inserire un nuovo abbonamento." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Personale" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Risposte" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Preferiti" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "In arrivo" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "I tuoi messaggi in arrivo" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Inviati" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "I tuoi messaggi inviati" @@ -8456,6 +8509,12 @@ msgstr "Insieme delle etichette delle persone come etichettate" msgid "None" msgstr "Nessuno" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Nome file non valido." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8707,23 +8766,9 @@ msgid_plural "%d entries in backup." msgstr[0] "%d voci nel backup." msgstr[1] "%d voci nel backup." -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Il nome è troppo lungo (max 255 caratteri)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "L'organizzazione è troppo lunga (max 255 caratteri)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Troppo lungo. Lunghezza massima %d caratteri." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "La dimensione massima di un messaggio è di %d caratteri, compreso l'URL." - -#~ msgid " tagged %s" -#~ msgstr " etichettati con %s" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "File di backup per l'utente %s (%s)" +#~ "Il server non è in grado di gestire tutti quei dati POST (%s byte) con la " +#~ "configurazione attuale." diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po index 1001c14061..79aa10f161 100644 --- a/locale/ja/LC_MESSAGES/statusnet.po +++ b/locale/ja/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:27+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:36+0000\n" "Language-Team: Japanese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ja\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -87,12 +87,14 @@ msgstr "アクセス設定の保存" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 #, fuzzy msgctxt "BUTTON" msgid "Save" @@ -161,7 +163,7 @@ msgstr "%1$s と友人、ページ %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s と友人" @@ -336,11 +338,13 @@ msgstr "プロフィールを保存できませんでした。" #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -749,7 +753,7 @@ msgstr "認証されていません。" #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "あなたのセッショントークンに問題がありました。再度お試しください。" @@ -771,12 +775,13 @@ msgstr "OAuth アプリケーションユーザの追加時DBエラー。" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "予期せぬフォーム送信です。" @@ -823,7 +828,7 @@ msgstr "アカウント" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1085,7 +1090,7 @@ msgstr "そのような添付はありません。" #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "ニックネームがありません。" @@ -1102,7 +1107,7 @@ msgstr "不正なサイズ。" #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "アバター" @@ -1281,7 +1286,7 @@ msgstr "ブロック情報の保存に失敗しました。" #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "そのようなグループはありません。" @@ -1649,12 +1654,14 @@ msgstr "サイトテーマ" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "バックグラウンドイメージの変更" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "バックグラウンド" @@ -1668,40 +1675,48 @@ msgstr "" "イズは %1$s。" #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "オン" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "オフ" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "バックグラウンドイメージのオンまたはオフ。" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "タイルバックグラウンドイメージ" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "色の変更" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "内容" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "サイドバー" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "テキスト" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "リンク" @@ -1713,15 +1728,18 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "デフォルトを使用" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "デフォルトデザインに戻す。" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "デフォルトへリセットする" @@ -1729,11 +1747,12 @@ msgstr "デフォルトへリセットする" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "保存" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "デザインの保存" @@ -1869,7 +1888,7 @@ msgstr "グループを更新できません。" #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "別名を作成できません。" @@ -2162,7 +2181,7 @@ msgstr "" "気に入りにつぶやきを加える最初になりましょう!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s のお気に入りのつぶやき" @@ -2345,8 +2364,10 @@ msgstr "" "あなたが選んだパレットの色とバックグラウンドイメージであなたのグループをカス" "タマイズしてください。" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "あなたのデザインを更新できません。" @@ -3302,25 +3323,25 @@ msgstr "" msgid "Notice has no profile." msgstr "ユーザはプロフィールをもっていません。" -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%2$s における %1$s のステータス" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "内容種別 " #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "サポートされていないデータ形式。" @@ -3820,7 +3841,7 @@ msgstr "1-64文字の、小文字アルファベットか数字で、スペー #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "フルネーム" @@ -3861,7 +3882,7 @@ msgstr "自己紹介" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4443,7 +4464,7 @@ msgid "Repeated!" msgstr "繰り返されました!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "%s への返信" @@ -4581,7 +4602,7 @@ msgid "Description" msgstr "概要" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "統計データ" @@ -4698,95 +4719,95 @@ msgid "This is a way to share what you like." msgstr "これは、あなたが好きなことを共有する方法です。" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s グループ" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s グループ、ページ %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "グループプロファイル" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "ノート" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "別名" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "グループアクション" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s グループのつぶやきフィード (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s グループのつぶやきフィード (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s グループのつぶやきフィード (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "%s グループの FOAF" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "メンバー" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(なし)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "全てのメンバー" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "作成日" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4796,7 +4817,7 @@ msgstr "メンバー" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4814,7 +4835,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4828,7 +4849,7 @@ msgstr "" "する短いメッセージを共有します。" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "管理者" @@ -5626,7 +5647,7 @@ msgstr "不正なデフォルトフォローです: '%1$s' はユーザでは #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "プロファイル" @@ -5789,11 +5810,13 @@ msgstr "アバターURL を読み取れません '%s'" msgid "Wrong image type for avatar URL ‘%s’." msgstr "アバター URL '%s' は不正な画像形式。" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "プロファイルデザイン" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5916,34 +5939,40 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" "どんなファイルも %d バイトより大きくてはいけません、そして、あなたが送った" "ファイルは %d バイトでした。より小さいバージョンをアップロードするようにして" "ください。" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" "これほど大きいファイルはあなたの%dバイトのユーザ割当てを超えているでしょう。" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" "これほど大きいファイルはあなたの%dバイトの毎月の割当てを超えているでしょう。" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "不正なサイズ。" @@ -6073,31 +6102,31 @@ msgid "Problem saving notice." msgstr "つぶやきを保存する際に問題が発生しました。" #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "グループ受信箱を保存する際に問題が発生しました。" #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "フォローを保存できません。" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6193,22 +6222,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "グループを作成できません。" #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "グループを作成できません。" #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "グループメンバーシップをセットできません。" #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 #, fuzzy msgid "Could not save local group info." msgstr "フォローを保存できません。" @@ -6625,7 +6654,7 @@ msgid "User configuration" msgstr "ユーザ設定" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "ユーザ" @@ -7302,10 +7331,13 @@ msgstr "承認された接続アプリケーション" msgid "Database error" msgstr "データベースエラー" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "ファイルアップロード" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7313,16 +7345,29 @@ msgstr "" "自分のバックグラウンド画像をアップロードできます。最大ファイルサイズは 2MB で" "す。" -#: 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 "" -"サーバーの現在の構成が理由で、大量の POST データ (%sバイト) を処理することが" -"できませんでした。" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "オン" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "オフ" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "リセット" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "デフォルトのデザインを回復。" @@ -7812,7 +7857,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) はお気に入りとしてあなたのつぶやきを加えました" @@ -7822,7 +7867,7 @@ msgstr "%s (@%s) はお気に入りとしてあなたのつぶやきを加えま #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, fuzzy, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7861,7 +7906,7 @@ msgstr "" "%6%s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7871,7 +7916,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) はあなた宛てにつぶやきを送りました" @@ -7882,7 +7927,7 @@ msgstr "%s (@%s) はあなた宛てにつぶやきを送りました" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8010,7 +8055,7 @@ msgstr "ファイルのMIMEタイプを決定できません。" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8019,7 +8064,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8165,31 +8210,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "サブスクリプションを追加できません" -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "パーソナル" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "返信" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "お気に入り" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "受信箱" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "あなたの入ってくるメッセージ" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "送信箱" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "あなたが送ったメッセージ" @@ -8387,6 +8432,12 @@ msgstr "タグ付けとしての人々タグクラウド" msgid "None" msgstr "なし" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "不正なサイズ。" + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8631,19 +8682,9 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "名前が長すぎます。(最大255字まで)" - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "組織が長すぎます。(最大255字)" - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "長すぎます。つぶやきは最大 %d 字までです。" - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "つぶやきは URL を含めて最大 %d 字までです。" - -#~ msgid " tagged %s" -#~ msgstr "タグ付けされた %s" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "サーバーの現在の構成が理由で、大量の POST データ (%sバイト) を処理すること" +#~ "ができませんでした。" diff --git a/locale/ka/LC_MESSAGES/statusnet.po b/locale/ka/LC_MESSAGES/statusnet.po index 233e1e874d..88b3651b53 100644 --- a/locale/ka/LC_MESSAGES/statusnet.po +++ b/locale/ka/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:28+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:37+0000\n" "Language-Team: Georgian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ka\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -84,12 +84,14 @@ msgstr "შეინახე შესვლის პარამეტრე #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "შეინახე" @@ -157,7 +159,7 @@ msgstr "%1$s და მეგობრები, გვერდი %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr " %s და მეგობრები" @@ -331,11 +333,13 @@ msgstr "პროფილის შენახვა ვერ მოხერ #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -737,7 +741,7 @@ msgstr "თქვენ არ ხართ ავტორიზირებუ #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" @@ -759,12 +763,13 @@ msgstr "ბაზამ დაუშვა შეცდომა OAuth აპლ #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "" @@ -811,7 +816,7 @@ msgstr "ანგარიში" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1072,7 +1077,7 @@ msgstr "ასეთი მიმაგრებული დოკუმენ #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "მეტსახელი უცნობია." @@ -1089,7 +1094,7 @@ msgstr "ზომა არასწორია." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "ავატარი" @@ -1263,7 +1268,7 @@ msgstr "დაბლოკვის შესახებ ინფორმა #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "ასეთი ჯგუფი ვერ მოიძებნა." @@ -1627,12 +1632,14 @@ msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" "თქვენ შეგიძლიათ ატვირთოთ საკუთარი StatusNet–იერსახე .ZIP არქივის სახით." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "შეცვალე ფონური სურათი" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "ფონი" @@ -1646,40 +1653,48 @@ msgstr "" "ზომაა %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "ჩართვა" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "გამორთვა" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "ჩართე ან გამორთე ფონური სურათის ფუნქცია." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "გაამრავლე ფონური სურათი" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "შეცვალე ფერები" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "შიგთავსი" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "გვერდითი პანელი" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "ტექსტი" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "ბმულები" @@ -1691,15 +1706,18 @@ msgstr "მეტი პარამეტრები" msgid "Custom CSS" msgstr "საკუთარი CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "გამოიყენე პირვანდელი მდგომარეობა" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "დააბრუნე პირვანდელი დიზაინი" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "პირვანდელის პარამეტრების დაბრუნება" @@ -1707,11 +1725,12 @@ msgstr "პირვანდელის პარამეტრების #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "შენახვა" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "შეინახე დიზაინი" @@ -1847,7 +1866,7 @@ msgstr "ჯგუფის განახლება ვერ მოხერ #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "" @@ -2134,7 +2153,7 @@ msgstr "" "[დარეგისტრირდი](%%action.register%%) და შეიტანე შეტყობინება შენს რჩეულებში!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s-ს რჩეული შეტყობინებები" @@ -2313,8 +2332,10 @@ msgstr "" "აირჩიეთ, როგორ გნებავთ გამოიყურებოდეს თქვენი ჯგუფი ფონური სურათისა და ფერთა " "პალიტრის შეცვლით." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "დიზაინის განახლება ვერ მოხერხდა." @@ -3264,25 +3285,25 @@ msgstr "" msgid "Notice has no profile." msgstr "შეტყობინებას პრფილი არ გააჩნია." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s–ის სტატუსი %2$s–ზე" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "შიგთავსის ტიპი %s არ არის მხარდაჭერილი." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "გთხოვთ გამოიყენოთ მხოლოდ %s URL–ები წმინდა HTTP მეთოდით." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "მონაცემთა ფორმატი მხარდაჭერილი არ არის." @@ -3778,7 +3799,7 @@ msgstr "1–64 პატარა ასოები ან ციფრებ #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "სრული სახელი" @@ -3819,7 +3840,7 @@ msgstr "ბიოგრაფია" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4401,7 +4422,7 @@ msgid "Repeated!" msgstr "გამეორებული!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "პასუხები %s–ს" @@ -4537,7 +4558,7 @@ msgid "Description" msgstr "აღწერა" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "სტატისტიკა" @@ -4650,95 +4671,95 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "შენიშვნა" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "წევრები" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(არცერთი)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "შექმნილია" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4748,7 +4769,7 @@ msgstr "წევრები" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4761,7 +4782,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4771,7 +4792,7 @@ msgid "" msgstr "" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "" @@ -5547,7 +5568,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "პროფილი" @@ -5711,11 +5732,13 @@ msgstr "ვერ ვკითხულობ ავატარის URL ‘%s msgid "Wrong image type for avatar URL ‘%s’." msgstr "ავატარის სურათის ფორმატი არასწორია URL ‘%s’." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "პროფილის დიზაინი" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5847,34 +5870,40 @@ msgstr "რობინი ფიქრობს რაღაც შეუძლ #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" "ფაილი არ შეიძლება იყოს %1$d ბაიტზე მეტი, თქვენ მიერ გაგზავნილი კი %2$d ბაიტი " "იყო. სცადეთ უფრო პატარა ვერსიის ატვირთვა." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" "ასეთი ზომის ფაილმა შეიძლება გადააჭარბოს თქვენთვის გამოყოფილ კვოტას, %d ბაიტს." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" "ასეთი ზომის ფაილმა შეიძლება გადააჭარბოს თქვენთვის გამოყოფილ თვიურ კვოტას, %d " "ბაიტს." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "ფაილის არასწორი სახელი." @@ -6003,31 +6032,32 @@ msgid "Problem saving notice." msgstr "პრობლემა შეტყობინების შენახვისას." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "saveKnownGroups-სათვის არასწორი ტიპია მოწოდებული" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "პრობლემა ჯგუფის ინდექსის შენახვისას." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "ჯგუფის ლოკალური ინფორმაციის დამახსოვრება ვერ მოხერხდა." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6125,22 +6155,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "ჯგუფის შექმნა ვერ მოხერხდა." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "ჯგუფის URI-ს მინიჭება ვერ მოხერხდა." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "ჯგუფის წევრობის მინიჭება ვერ მოხერხდა." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "ჯგუფის ლოკალური ინფორმაციის დამახსოვრება ვერ მოხერხდა." @@ -6546,7 +6576,7 @@ msgid "User configuration" msgstr "მომხმარებლის კონფიგურაცია" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "მომხმარებელი" @@ -7217,10 +7247,13 @@ msgstr "ავტორიზირებული შეერთებულ msgid "Database error" msgstr "მონაცემთა ბაზის შეცდომა" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "ფაილის ატვირთვა" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7228,16 +7261,29 @@ msgstr "" "თქვენ შეგიძლიათ ატვირთოთ პერსონალური ფონური სურათი. ფაილის დასაშვები ზომაა " "2მბ." -#: 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 "" -"სამწუხაროდ სერვერმა ვერ გაუძლო ამდენ POST მონაცემებს (%s ბაიტი) მიმდინარე " -"კონფიგურაციის გამო." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "ჩართვა" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "გამორთვა" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "გადაყენება" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "დიზაინის პირველადი პარამეტრები დაბრუნებულია." @@ -7734,7 +7780,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s-მა (@%s) დაამატა თქვენი შეტყობინება თავის რჩეულებში" @@ -7744,7 +7790,7 @@ msgstr "%s-მა (@%s) დაამატა თქვენი შეტყო #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7783,7 +7829,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7796,7 +7842,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s-მა (@%s) გამოაგზავნა შეტყობინება თქვენს საყურადღებოდ" @@ -7807,7 +7853,7 @@ msgstr "%s-მა (@%s) გამოაგზავნა შეტყობი #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7935,7 +7981,7 @@ msgstr "ფაილის MIME ტიპი ვერ დადგინდა. #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7944,7 +7990,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8085,31 +8131,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "ახალი გამოწერის ჩასმა ვერ მოხერხდა." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "პირადი" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "პასუხები" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "რჩეულები" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "შემომავალი წერილების ყუთი" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "თქვენი შემომავალი შეტყობინებები" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "გამავალი წერილების ყუთი" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "თქვენი გაგზავნილი წერილები" @@ -8307,6 +8353,12 @@ msgstr "მომხმარებლების სანიშნეებ msgid "None" msgstr "არაფერი" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "ფაილის არასწორი სახელი." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "ამ სერვერს არ შეუძლია თემების ატვირთვა ZIP-ის მხარდაჭერის გარეშე." @@ -8553,16 +8605,9 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "სახელი ძალიან გრძელია (არაუმეტეს 255 სიმბოლო)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "ორგანიზაცია ძალიან გრძელია (არაუმეტეს 255 სიმბოლო)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "შეტყობინების დასაძვები ზომაა %d სიმბოლო." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "შეყობინების დასაშვები ზომაა %d სიმბოლო მიმაგრებული URL-ის ჩათვლით." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "სამწუხაროდ სერვერმა ვერ გაუძლო ამდენ POST მონაცემებს (%s ბაიტი) მიმდინარე " +#~ "კონფიგურაციის გამო." diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po index 76255a186d..700532c6ad 100644 --- a/locale/ko/LC_MESSAGES/statusnet.po +++ b/locale/ko/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:29+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:38+0000\n" "Language-Team: Korean \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ko\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -86,12 +86,14 @@ msgstr "접근 설정을 저장" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "저장" @@ -159,7 +161,7 @@ msgstr "%s 및 친구들, %d 페이지" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s 및 친구들" @@ -327,11 +329,13 @@ msgstr "프로필을 저장 할 수 없습니다." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -738,7 +742,7 @@ msgstr "당신은 이 프로필에 구독되지 않고있습니다." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "세션토큰에 문제가 있습니다. 다시 시도해주십시오." @@ -760,12 +764,13 @@ msgstr "OAuth 응용 프로그램 사용자 추가 중 데이터베이스 오류 #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "잘못된 폼 제출" @@ -818,7 +823,7 @@ msgstr "계정" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1078,7 +1083,7 @@ msgstr "해당하는 첨부파일이 없습니다." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "별명이 없습니다." @@ -1095,7 +1100,7 @@ msgstr "옳지 않은 크기" #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "아바타" @@ -1270,7 +1275,7 @@ msgstr "정보차단을 저장하는데 실패했습니다." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "그러한 그룹이 없습니다." @@ -1631,12 +1636,14 @@ msgstr "사용자 지정 테마" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "배경 이미지 바꾸기" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "배경" @@ -1649,40 +1656,48 @@ msgstr "" "사이트의 배경 이미지를 업로드할 수 있습니다. 최대 파일 크기는 %1$s 입니다." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "켜기" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "끄기" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "배경 이미지를 켜거나 끈다." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "배경 이미지를 반복 나열" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "색상 변경" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "만족하는" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "가장자리 창" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "문자" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "링크" @@ -1694,15 +1709,18 @@ msgstr "고급 검색" msgid "Custom CSS" msgstr "사용자 정의 CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "기본값 사용" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "" @@ -1710,11 +1728,12 @@ msgstr "" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "저장" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "디자인 저장" @@ -1852,7 +1871,7 @@ msgstr "그룹을 업데이트 할 수 없습니다." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "관심소식을 생성할 수 없습니다." @@ -2132,7 +2151,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s 님의 좋아하는 글" @@ -2316,8 +2335,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "디자인을 수정할 수 없습니다." @@ -3249,25 +3270,25 @@ msgstr "" msgid "Notice has no profile." msgstr "이용자가 프로필을 가지고 있지 않습니다." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s의 상태 (%2$s에서)" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "연결" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "지원하는 형식의 데이터가 아닙니다." @@ -3760,7 +3781,7 @@ msgstr "1-64자 사이에 영소문자, 숫자로만 씁니다. 기호나 공백 #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "실명" @@ -3801,7 +3822,7 @@ msgstr "자기소개" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4373,7 +4394,7 @@ msgid "Repeated!" msgstr "재전송됨!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "%s에 답신" @@ -4505,7 +4526,7 @@ msgid "Description" msgstr "설명" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "통계" @@ -4614,95 +4635,95 @@ msgid "This is a way to share what you like." msgstr "좋아하는 글을 지정하면 자기가 무엇을 좋아하는지 알릴 수 있습니다." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s 그룹" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "그룹, %d페이지" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "그룹 프로필" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "설명" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "그룹 행동" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s 그룹을 위한 공지피드 (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s 그룹을 위한 공지피드 (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s 그룹을 위한 공지피드 (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "%s의 보낸쪽지함" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "회원" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(없음)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "모든 회원" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "생성됨" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4712,7 +4733,7 @@ msgstr "회원" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4725,7 +4746,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4737,7 +4758,7 @@ msgstr "" "Micro-blogging)의 사용자 그룹입니다. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 #, fuzzy msgid "Admins" msgstr "관리자" @@ -5502,7 +5523,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "프로필" @@ -5671,11 +5692,13 @@ msgstr "아바타 URL '%s'을(를) 읽어낼 수 없습니다." msgid "Wrong image type for avatar URL ‘%s’." msgstr "%S 잘못된 그림 파일 타입입니다. " -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "프로필 디자인" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5805,29 +5828,35 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 #, fuzzy msgid "Invalid filename." msgstr "옳지 않은 크기" @@ -5962,32 +5991,32 @@ msgid "Problem saving notice." msgstr "통지를 저장하는데 문제가 발생했습니다." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "통지를 저장하는데 문제가 발생했습니다." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "새 그룹을 만들 수 없습니다." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6084,22 +6113,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "새 그룹을 만들 수 없습니다." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "새 그룹을 만들 수 없습니다." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "그룹 맴버십을 세팅할 수 없습니다." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "새 그룹을 만들 수 없습니다." @@ -6510,7 +6539,7 @@ msgid "User configuration" msgstr "메일 주소 확인" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "사용자" @@ -7180,25 +7209,41 @@ msgstr "응용프로그램 삭제" msgid "Database error" msgstr "데이터베이스 오류" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "실행 실패" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "개인 아바타를 올릴 수 있습니다. 최대 파일 크기는 2MB입니다." -#: 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 "" -"현재 설정으로 인해 너무 많은 POST 데이터(%s 바이트)는 서버에서 처리할 수 없습" -"니다." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "켜기" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "끄기" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "초기화" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 #, fuzzy msgid "Design defaults restored." msgstr "메일 설정이 저장되었습니다." @@ -7640,7 +7685,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "누군가 내 글을 좋아하는 게시글로 추가했을 때, 메일을 보냅니다." @@ -7650,7 +7695,7 @@ msgstr "누군가 내 글을 좋아하는 게시글로 추가했을 때, 메일 #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7672,7 +7717,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7682,7 +7727,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "누군가 내 글을 좋아하는 게시글로 추가했을 때, 메일을 보냅니다." @@ -7693,7 +7738,7 @@ msgstr "누군가 내 글을 좋아하는 게시글로 추가했을 때, 메일 #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7813,7 +7858,7 @@ msgstr "소스 이용자를 확인할 수 없습니다." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7822,7 +7867,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -7962,31 +8007,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "예약 구독을 추가 할 수 없습니다." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "개인" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "답신" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "좋아하는 글들" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "받은 쪽지함" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "받은 메시지" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "보낸 쪽지함" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "보낸 메시지" @@ -8190,6 +8235,12 @@ msgstr "" msgid "None" msgstr "없음" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "옳지 않은 크기" + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8432,20 +8483,9 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "실명이 너무 깁니다. (최대 255글자)" - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "기관 이름이 너무 깁니다. (최대 255글자)" - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "너무 깁니다. 통지의 최대 길이는 %d 글자 입니다." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "소식의 최대 길이는 첨부 URL을 포함하여 %d 글자입니다." - -#, fuzzy -#~ msgid " tagged %s" -#~ msgstr "%s 태그된 통지" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "현재 설정으로 인해 너무 많은 POST 데이터(%s 바이트)는 서버에서 처리할 수 " +#~ "없습니다." diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po index 1b5c5fa089..5990b5d371 100644 --- a/locale/mk/LC_MESSAGES/statusnet.po +++ b/locale/mk/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:31+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:39+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -87,12 +87,14 @@ msgstr "Зачувај нагодувања на пристап" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Зачувај" @@ -160,7 +162,7 @@ msgstr "%1$s и пријателите, стр. %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s и пријатели" @@ -335,11 +337,13 @@ msgstr "Не може да се зачува профил." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -748,7 +752,7 @@ msgstr "Жетонот за барање е веќе овластен." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Се поајви проблем со Вашиот сесиски жетон. Обидете се повторно." @@ -769,12 +773,13 @@ msgstr "Грешка во базата при вметнувањето на auth #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Неочекувано поднесување на образец." @@ -826,7 +831,7 @@ msgstr "Сметка" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1090,7 +1095,7 @@ msgstr "Нема таков прилог." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Нема прекар." @@ -1107,7 +1112,7 @@ msgstr "Погрешна големина." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Аватар" @@ -1283,7 +1288,7 @@ msgstr "Не можев да ги снимам инофрмациите за б #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Нема таква група." @@ -1640,12 +1645,14 @@ msgstr "Прилагоден мотив" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Можете да подигнете свој изглед за StatusNet како .ZIP архив." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Промена на слика на позадина" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Позадина" @@ -1659,40 +1666,48 @@ msgstr "" "големина на податотеката е %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Вкл." #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Искл." -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Вклучи или исклучи позадинска слика." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Позадината во квадрати" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Промена на бои" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Содржина" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Странична лента" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Текст" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Врски" @@ -1704,15 +1719,18 @@ msgstr "Напредно" msgid "Custom CSS" msgstr "Прилагодено CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Користи по основно" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Врати основно-зададени нагодувања" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Врати по основно" @@ -1720,11 +1738,12 @@ msgstr "Врати по основно" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Зачувај" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Зачувај изглед" @@ -1769,7 +1788,6 @@ msgstr "Треба име." #. TRANS: Validation error shown when providing too long a name in the "Edit application" form. #: actions/editapplication.php:188 actions/newapplication.php:169 -#, fuzzy msgid "Name is too long (maximum 255 characters)." msgstr "Името е предолго (највеќе 255 знаци)." @@ -1859,7 +1877,7 @@ msgstr "Не можев да ја подновам групата." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Не можеше да се создадат алијаси." @@ -2148,7 +2166,7 @@ msgstr "" "ќе бендисате забелешка!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Бендисани забелешки на %s" @@ -2329,8 +2347,10 @@ msgstr "" "Прилагодете го изгледот на Вашата група со позадинска слика и палета од бои " "по Ваш избор." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Не можев да го подновам Вашиот изглед." @@ -2726,7 +2746,7 @@ msgstr[1] "Веќе сте претплатени на овие корисниц #. TRANS: Used as list item for already subscribed users (%1$s is nickname, %2$s is e-mail address). #. TRANS: Used as list item for already registered people (%1$s is nickname, %2$s is e-mail address). #: actions/invite.php:145 actions/invite.php:159 -#, fuzzy, php-format +#, php-format msgctxt "INVITE" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2911,7 +2931,6 @@ msgstr "" "Сите права задржани." #: actions/licenseadminpanel.php:156 -#, fuzzy msgid "Invalid license title. Maximum length is 255 characters." msgstr "Неважечки наслов на лиценцата. Дозволени се највеќе 255 знаци." @@ -3294,25 +3313,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Забелешката нема профил." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s статус на %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Содржините од типот %s не се поддржани." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Ве молиме користете само %s URL-адреси врз прост HTTP-код." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Ова не е поддржан формат на податотека." @@ -3363,7 +3382,6 @@ msgstr "Прикажи или сокриј профилни изгледи." #. TRANS: Form validation error for form "Other settings" in user profile. #: actions/othersettings.php:162 -#, fuzzy msgid "URL shortening service is too long (maximum 50 characters)." msgstr "Услугата за скратување на URL-адреси е предолга (највеќе до 50 знаци)." @@ -3795,7 +3813,7 @@ msgstr "1-64 мали букви или бројки, без интерпукц #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Цело име" @@ -3837,7 +3855,7 @@ msgstr "Биографија" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4181,9 +4199,8 @@ msgid "Unexpected password reset." msgstr "Неочекувано подновување на лозинката." #: actions/recoverpassword.php:365 -#, fuzzy msgid "Password must be 6 characters or more." -msgstr "Лозинката мора да биде од најмалку 6 знаци." +msgstr "Лозинката мора да има барем 6 знаци." #: actions/recoverpassword.php:369 msgid "Password and confirmation do not match." @@ -4428,7 +4445,7 @@ msgid "Repeated!" msgstr "Повторено!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Одговори испратени до %s" @@ -4566,7 +4583,7 @@ msgid "Description" msgstr "Опис" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Статистики" @@ -4684,94 +4701,94 @@ msgid "This is a way to share what you like." msgstr "Ова е начин да го споделите она што Ви се допаѓа." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Група %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Група %1$s, стр. %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Профил на група" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Забелешка" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Алијаси" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Групни дејства" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Канал со забелешки за групата %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Канал со забелешки за групата %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Канал со забелешки за групата%s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF за групата %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Членови" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Нема)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Сите членови" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 msgctxt "LABEL" msgid "Created" msgstr "Создадено" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 msgctxt "LABEL" msgid "Members" msgstr "Членови" @@ -4780,7 +4797,7 @@ msgstr "Членови" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4799,7 +4816,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4813,7 +4830,7 @@ msgstr "" "членови си разменуваат кратки пораки за нивниот живот и интереси. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Администратори" @@ -4847,16 +4864,16 @@ msgstr "Избришана забелешка" #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #: actions/showstream.php:70 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s" -msgstr "%1$s, стр. %2$d" +msgstr "%1$s го/ја означи %2$s" #. TRANS: Page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$s is the hash tag, %1$d is the page number. #: actions/showstream.php:74 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s, page %3$d" -msgstr "Забелешки означени со %1$s, стр. %2$d" +msgstr "%1$s го/ја означи %2$s, страница %3$d" #. TRANS: Extended page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$d is the page number. @@ -4900,9 +4917,9 @@ msgstr "FOAF за %s" #. TRANS: First sentence of empty list message for a stream. $1%s is a user nickname. #: actions/showstream.php:211 -#, fuzzy, php-format +#, php-format msgid "This is the timeline for %1$s, but %1$s hasn't posted anything yet." -msgstr "Ова е историјата за %1$s, но %2$s сè уште нема објавено ништо." +msgstr "Ова е хронологијата за %1$s, но %1$s сè уште нема објавено ништо." #. TRANS: Second sentence of empty list message for a stream for the user themselves. #: actions/showstream.php:217 @@ -5087,7 +5104,6 @@ msgstr "Не можам да ја зачувам објавата за мреж #. TRANS: Client error displayed when a site-wide notice was longer than allowed. #: actions/sitenoticeadminpanel.php:112 -#, fuzzy msgid "Maximum length for the site-wide notice is 255 characters." msgstr "Објавата за цело мрежно место не треба да содржи повеќе од 255 знаци." @@ -5098,11 +5114,10 @@ msgstr "Текст на објавата за мрежното место" #. TRANS: Tooltip for site-wide notice text field in admin panel. #: actions/sitenoticeadminpanel.php:179 -#, fuzzy msgid "Site-wide notice text (255 characters maximum; HTML allowed)" msgstr "" -"Текст за главна објава по цело мрежно место (највеќе до 255 знаци; дозволено " -"и HTML)" +"Текст на главната објава по цело мрежно место (највеќе до 255 знаци; " +"дозволено и HTML)" #. TRANS: Title for button to save site notice in admin panel. #: actions/sitenoticeadminpanel.php:201 @@ -5587,20 +5602,19 @@ msgstr "Неважечко ограничување за биографијат #. TRANS: Form validation error in user admin panel when welcome text is too long. #: actions/useradminpanel.php:154 -#, fuzzy msgid "Invalid welcome text. Maximum length is 255 characters." msgstr "Неважечки текст за добредојде. Дозволени се највеќе 255 знаци." #. TRANS: Client error displayed when trying to set a non-existing user as default subscription for new #. TRANS: users in user admin panel. %1$s is the invalid nickname. #: actions/useradminpanel.php:166 -#, fuzzy, php-format +#, php-format msgid "Invalid default subscripton: '%1$s' is not a user." msgstr "Неважечки опис по основно: „%1$s“ не е корисник." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Профил" @@ -5626,7 +5640,6 @@ msgstr "Добредојде за нов корисник" #. TRANS: Tooltip in user admin panel for setting new user welcome text. #: actions/useradminpanel.php:238 -#, fuzzy msgid "Welcome text for new users (maximum 255 characters)." msgstr "Текст за добредојде на нови корисници (највеќе до 255 знаци)." @@ -5764,11 +5777,13 @@ msgstr "Не можам да ја прочитам URL на аватарот „ msgid "Wrong image type for avatar URL ‘%s’." msgstr "Погрешен тип на слика за URL на аватарот „%s“." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Изглед на профилот" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5901,32 +5916,46 @@ msgstr "Робин мисли дека нешто е невозможно." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Податотеките не смеат да бидат поголеми од %d бајти, а податотеката што ја " +"испративте содржи %d бајти. Подигнете помала верзија." +msgstr[1] "" "Податотеките не смеат да бидат поголеми од %d бајти, а податотеката што ја " "испративте содржи %d бајти. Подигнете помала верзија." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Волку голема податотека ќе ја надмине Вашата корисничка квота од %d бајти." +msgstr[1] "" "Волку голема податотека ќе ја надмине Вашата корисничка квота од %d бајти." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "ВОлку голема податотека ќе ја надмине Вашата месечна квота од %d бајти" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +"ВОлку голема податотека ќе ја надмине Вашата месечна квота од %d бајти" +msgstr[1] "" +"ВОлку голема податотека ќе ја надмине Вашата месечна квота од %d бајти" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Погрешно податотечно име." @@ -6055,32 +6084,33 @@ msgid "Problem saving notice." msgstr "Проблем во зачувувањето на белешката." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "На saveKnownGroups му е уакажан грешен тип" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Проблем при зачувувањето на групното приемно сандаче." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Не можев да го зачувам одговорот за %1$d, %2$d." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 -#, fuzzy, php-format +#: classes/Profile.php:164 classes/User_group.php:247 +#, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6179,22 +6209,22 @@ msgid "Single-user mode code called when not enabled." msgstr "Повикан е еднокориснички режим, но не е овозможен." #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Не можев да ја создадам групата." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Не можев да поставам URI на групата." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Не можев да назначам членство во групата." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Не можев да ги зачувам информациите за локалните групи." @@ -6248,7 +6278,7 @@ msgstr "Страница без наслов" #: lib/action.php:310 msgctxt "TOOLTIP" msgid "Show more" -msgstr "" +msgstr "Повеќе" #. TRANS: DT element for primary navigation menu. String is hidden in default CSS. #: lib/action.php:526 @@ -6603,7 +6633,7 @@ msgid "User configuration" msgstr "Кориснички поставки" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Корисник" @@ -6957,7 +6987,7 @@ msgstr "%1$s ја напушти групата %2$s." #. TRANS: Whois output. #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL. #: lib/command.php:426 -#, fuzzy, php-format +#, php-format msgctxt "WHOIS" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -7004,13 +7034,13 @@ msgstr "" #. TRANS: Message given if content is too long. %1$sd is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:488 -#, fuzzy, php-format +#, php-format msgid "Message too long - maximum is %1$d character, you sent %2$d." msgid_plural "Message too long - maximum is %1$d characters, you sent %2$d." msgstr[0] "" -"Пораката е предолга - дозволени се највеќе %1$d знаци, а вие испративте %2$d." +"Пораката е предолга - дозволен е највеќе %1$d знак, а Вие испративте %2$d." msgstr[1] "" -"Пораката е предолга - дозволени се највеќе %1$d знаци, а вие испративте %2$d." +"Пораката е предолга - дозволени се највеќе %1$d знаци, а Вие испративте %2$d." #. TRANS: Error text shown sending a direct message fails with an unknown reason. #: lib/command.php:516 @@ -7032,12 +7062,12 @@ msgstr "Грешка при повторувањето на белешката." #. TRANS: Message given if content of a notice for a reply is too long. %1$d is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:591 -#, fuzzy, php-format +#, php-format msgid "Notice too long - maximum is %1$d character, you sent %2$d." msgid_plural "Notice too long - maximum is %1$d characters, you sent %2$d." msgstr[0] "" -"Забелешката е предолга - треба да нема повеќе од %1$d знаци, а Вие " -"испративте %2$d." +"Забелешката е предолга - треба да нема повеќе од %1$d знак, а Вие испративте " +"%2$d." msgstr[1] "" "Забелешката е предолга - треба да нема повеќе од %1$d знаци, а Вие " "испративте %2$d." @@ -7315,10 +7345,13 @@ msgstr "Овластени поврзани програми" msgid "Database error" msgstr "Грешка во базата на податоци" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Подигни податотека" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7326,16 +7359,29 @@ msgstr "" "Можете да подигнете лична позадинска слика. Максималната дозволена големина " "изнесува 2МБ." -#: 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 "" -"Опслужувачот не можеше да обработи толку многу POST-податоци (%s бајти) " -"заради неговата тековна поставеност." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Вкл." -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Искл." + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Врати одново" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Основно-зададениот изглед е вратен." @@ -7402,7 +7448,6 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 мали букви или бројки. Без интерпукциски знаци и празни места." #: lib/groupeditform.php:163 -#, fuzzy msgid "URL of the homepage or blog of the group or topic." msgstr "URL на страницата или блогот на групата или темата" @@ -7411,20 +7456,20 @@ msgid "Describe the group or topic" msgstr "Опишете ја групата или темата" #: lib/groupeditform.php:170 -#, fuzzy, php-format +#, php-format msgid "Describe the group or topic in %d character or less" msgid_plural "Describe the group or topic in %d characters or less" -msgstr[0] "Опишете ја групата или темата со %d знаци" -msgstr[1] "Опишете ја групата или темата со %d знаци" +msgstr[0] "Опишете ја групата или темата со највеќе %d знак" +msgstr[1] "Опишете ја групата или темата со највеќе %d знаци" #: lib/groupeditform.php:182 -#, fuzzy msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." -msgstr "Местоположба на групата (ако има). На пр. „Град, Сој. држава, Земја“" +msgstr "" +"Местоположба на групата (ако има). На пр. „Град, Сој. држава/област, Земја“" #: lib/groupeditform.php:190 -#, fuzzy, php-format +#, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " "alias allowed." @@ -7838,7 +7883,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%1$s (@%2$s) ја бендиса вашата забелешка" @@ -7848,7 +7893,7 @@ msgstr "%1$s (@%2$s) ја бендиса вашата забелешка" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7886,7 +7931,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7899,7 +7944,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%1$s (@%2$s) Ви испрати забелешка што сака да ја прочитате" @@ -7910,7 +7955,7 @@ msgstr "%1$s (@%2$s) Ви испрати забелешка што сака да #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8061,7 +8106,7 @@ msgstr "Не можев да го утврдам mime-типот на подат #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8072,7 +8117,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "„%s„ не е поддржан податотечен тип на овој опслужувач." @@ -8213,31 +8258,31 @@ msgstr "Дуплирана забелешка." msgid "Couldn't insert new subscription." msgstr "Не може да се внесе нова претплата." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Личен" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Одговори" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Бендисани" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Примени" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Ваши приемни пораки" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "За праќање" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Ваши испратени пораки" @@ -8434,6 +8479,12 @@ msgstr "Облак од ознаки за луѓе" msgid "None" msgstr "Без ознаки" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Погрешно податотечно име." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8454,14 +8505,14 @@ msgid "Invalid theme: bad directory structure." msgstr "Неважечки изглед: лош состав на папката." #: lib/themeuploader.php:166 -#, fuzzy, php-format +#, php-format msgid "Uploaded theme is too large; must be less than %d byte uncompressed." msgid_plural "" "Uploaded theme is too large; must be less than %d bytes uncompressed." msgstr[0] "" -"Подигнатиот изглед е преголем; мора да биде помал од %d бајти (незбиен)." +"Подигнатиот изглед е преголем; мора да биде помал од %d бајт (ненабиен)." msgstr[1] "" -"Подигнатиот изглед е преголем; мора да биде помал од %d бајти (незбиен)." +"Подигнатиот изглед е преголем; мора да биде помал од %d бајти (ненабиен)." #: lib/themeuploader.php:179 msgid "Invalid theme archive: missing file css/display.css" @@ -8671,7 +8722,7 @@ msgstr[1] "" #: scripts/restoreuser.php:61 #, php-format msgid "Getting backup from file '%s'." -msgstr "" +msgstr "Земам резерва на податотеката „%s“." #. TRANS: Commandline script output. #: scripts/restoreuser.php:91 @@ -8680,28 +8731,15 @@ msgstr "Нема назначено корисник. Ќе го употреба #. TRANS: Commandline script output. %d is the number of entries in the activity stream in backup; used for plural. #: scripts/restoreuser.php:98 -#, fuzzy, php-format +#, php-format msgid "%d entry in backup." msgid_plural "%d entries in backup." -msgstr[0] "%d резервни ставки." +msgstr[0] "%d резервна ставка." msgstr[1] "%d резервни ставки." -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Името е предолго (највеќе 255 знаци)." - -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Организацијата е предолга (дозволени се највеќе 255 знаци)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Ова е предолго. Максималната дозволена должина изнесува %d знаци." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "Максималната големина на забелешката е %d знаци, вклучувајќи ја URL-" -#~ "адресата на прилогот." - -#~ msgid " tagged %s" -#~ msgstr " означено со %s" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "Резервна податотека за корисникот %s (%s)" +#~ "Опслужувачот не можеше да обработи толку многу POST-податоци (%s бајти) " +#~ "заради неговата тековна поставеност." diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po index 00033d67e5..03dfd48f38 100644 --- a/locale/nb/LC_MESSAGES/statusnet.po +++ b/locale/nb/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:35+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:42+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 (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: no\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -85,12 +85,14 @@ msgstr "Lagre tilgangsinnstillinger" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Lagre" @@ -158,7 +160,7 @@ msgstr "%1$s og venner, side %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s og venner" @@ -333,11 +335,13 @@ msgstr "Klarte ikke å lagre profil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -748,7 +752,7 @@ msgstr "Du er ikke autorisert." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Det var et problem med din sesjons-autentisering. Prøv igjen." @@ -770,12 +774,13 @@ msgstr "Databasefeil ved innsetting av bruker i programmet OAuth." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Uventet skjemainnsending." @@ -828,7 +833,7 @@ msgstr "Konto" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1091,7 +1096,7 @@ msgstr "Ingen slike vedlegg." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Ingen kallenavn." @@ -1108,7 +1113,7 @@ msgstr "Ugyldig størrelse" #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Brukerbilde" @@ -1284,7 +1289,7 @@ msgstr "Kunne ikke lagre blokkeringsinformasjon." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Ingen slik gruppe." @@ -1651,12 +1656,14 @@ msgstr "Egendefinert tema" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Du kan laste opp et egendefinert StatusNet-tema som et .ZIP-arkiv." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Endre bakgrunnsbilde" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Bakgrunn" @@ -1669,40 +1676,48 @@ msgstr "" "Du kan laste opp et bakgrunnsbilde for nettstedet. Maks filstørrelse er %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "På" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Av" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Slå på eller av bakgrunnsbilde." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Gjenta bakgrunnsbildet" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Endre farger" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Innhold" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Sidelinje" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Lenker" @@ -1714,15 +1729,18 @@ msgstr "Avansert" msgid "Custom CSS" msgstr "Egendefinert CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Bruk standard" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Gjenopprett standardutseende" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Tilbakestill til standardverdier" @@ -1730,11 +1748,12 @@ msgstr "Tilbakestill til standardverdier" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Lagre" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Lagre utseende" @@ -1870,7 +1889,7 @@ msgstr "Kunne ikke oppdatere gruppe." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Kunne ikke opprette alias." @@ -2155,7 +2174,7 @@ msgstr "" "til å legge notisen til dine favoritter." #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s sine favorittnotiser" @@ -2334,8 +2353,10 @@ msgstr "" "Tilpass hvordan gruppen din ser ut med et bakgrunnsbilde og en fargepalett " "av ditt valg." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Kunne ikke oppdatere utseende." @@ -3284,25 +3305,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Notisen har ingen profil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s sin status på %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Innholdstypen %s støttes ikke." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Bare %s-nettadresser over vanlig HTTP." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Ikke et støttet dataformat." @@ -3800,7 +3821,7 @@ msgstr "1-64 små bokstaver eller tall, ingen punktum eller mellomrom" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Fullt navn" @@ -3842,7 +3863,7 @@ msgstr "Om meg" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4426,7 +4447,7 @@ msgid "Repeated!" msgstr "Gjentatt!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Svar til %s" @@ -4562,7 +4583,7 @@ msgid "Description" msgstr "Beskrivelse" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistikk" @@ -4680,95 +4701,95 @@ msgid "This is a way to share what you like." msgstr "Dette er en måte å dele det du liker." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s gruppe" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s gruppe, side %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Gruppeprofil" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "Nettadresse" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Merk" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Alias" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Gruppehandlinger" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Notismating for %s gruppe (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Notismating for %s gruppe (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Notismating for %s gruppe (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF for gruppen %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Medlemmer" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ingen)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Alle medlemmer" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Opprettet" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4778,7 +4799,7 @@ msgstr "Medlemmer" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4797,7 +4818,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4811,7 +4832,7 @@ msgstr "" "korte meldinger om deres liv og interesser. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administratorer" @@ -5591,7 +5612,7 @@ msgstr "Ugyldig standardabonnement: '%1$s' er ikke bruker." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5748,11 +5769,13 @@ msgstr "Kan ikke lese avatar-URL ‘%s’" msgid "Wrong image type for avatar URL ‘%s’." msgstr "Feil bildetype for avatar-URL ‘%s’." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Vis profilutseender" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 #, fuzzy msgid "" "Customize the way your profile looks with a background image and a colour " @@ -5876,29 +5899,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Ugyldig filnavn." @@ -6025,31 +6057,31 @@ msgid "Problem saving notice." msgstr "Problem ved lagring av notis." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problem ved lagring av gruppeinnboks." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Kunne ikke lagre lokal gruppeinformasjon." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6148,22 +6180,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Kunne ikke opprette gruppe." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Kunne ikke stille inn gruppe-URI." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Kunne ikke stille inn gruppemedlemskap." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Kunne ikke lagre lokal gruppeinformasjon." @@ -6574,7 +6606,7 @@ msgid "User configuration" msgstr "Brukerkonfigurasjon" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Bruker" @@ -7255,26 +7287,42 @@ msgstr "Tilkoblede program" msgid "Database error" msgstr "Databasefeil" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Last opp fil" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 #, fuzzy msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Du kan laste opp en personlig avatar. Maks filstørrelse er %s." -#: 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 "" -"Tjeneren kunne ikke håndtere så mye POST-data (%s bytes) på grunn av sitt " -"nåværende oppsett." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "På" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Av" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Nullstill" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 #, fuzzy msgid "Design defaults restored." msgstr "Utseende lagret." @@ -7774,7 +7822,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s /@%s) la din notis til som en favoritt" @@ -7784,7 +7832,7 @@ msgstr "%s /@%s) la din notis til som en favoritt" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7822,7 +7870,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7835,7 +7883,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) sendte en notis for din oppmerksomhet" @@ -7846,7 +7894,7 @@ msgstr "%s (@%s) sendte en notis for din oppmerksomhet" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7993,7 +8041,7 @@ msgstr "Kunne ikke avgjøre filens MIME-type." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8002,7 +8050,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8145,31 +8193,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Kunne ikke sette inn bekreftelseskode." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Personlig" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Svar" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favoritter" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Innboks" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Dine innkommende meldinger" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Utboks" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Dine sendte meldinger" @@ -8374,6 +8422,12 @@ msgstr "" msgid "None" msgstr "Ingen" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Ugyldig filnavn." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8626,19 +8680,9 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Navn er for langt (maks 250 tegn)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Organisasjon er for lang (maks 255 tegn)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Det er for langt. Maks notisstørrelse er %d tegn." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "Maks notisstørrelse er %d tegn, inklusive vedleggs-URL." - -#~ msgid " tagged %s" -#~ msgstr " merket %s" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "Tjeneren kunne ikke håndtere så mye POST-data (%s bytes) på grunn av sitt " +#~ "nåværende oppsett." diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po index bfee026980..28a589da5a 100644 --- a/locale/nl/LC_MESSAGES/statusnet.po +++ b/locale/nl/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:32+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:40+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -87,12 +87,14 @@ msgstr "Toegangsinstellingen opslaan" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Opslaan" @@ -160,7 +162,7 @@ msgstr "%1$s en vrienden, pagina %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s en vrienden" @@ -337,11 +339,13 @@ msgstr "Het was niet mogelijk het profiel op te slaan." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -753,7 +757,7 @@ msgstr "Het verzoektoken is al geautoriseerd." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" "Er is een probleem ontstaan met uw sessie. Probeer het nog een keer, " @@ -778,12 +782,13 @@ msgstr "" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Het formulier is onverwacht ingezonden." @@ -835,7 +840,7 @@ msgstr "Gebruikersgegevens" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1100,7 +1105,7 @@ msgstr "Deze bijlage bestaat niet." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Geen gebruikersnaam." @@ -1117,7 +1122,7 @@ msgstr "Ongeldige afmetingen." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1292,7 +1297,7 @@ msgstr "Het was niet mogelijk om de blokkadeinformatie op te slaan." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "De opgegeven groep bestaat niet." @@ -1651,12 +1656,14 @@ msgstr "Aangepaste vormgeving" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "U kunt een vormgeving voor StatusNet uploaden als ZIP-archief." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Achtergrondafbeelding wijzigen" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Achtergrond" @@ -1670,40 +1677,48 @@ msgstr "" "bestandsgrootte is %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Aan" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Uit" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Achtergrondafbeelding inschakelen of uitschakelen." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Achtergrondafbeelding naast elkaar" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Kleuren wijzigen" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Inhoud" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Menubalk" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Verwijzingen" @@ -1715,15 +1730,18 @@ msgstr "Uitgebreid" msgid "Custom CSS" msgstr "Aangepaste CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Standaardinstellingen gebruiken" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Standaardontwerp toepassen" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Standaardinstellingen toepassen" @@ -1731,11 +1749,12 @@ msgstr "Standaardinstellingen toepassen" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Opslaan" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Ontwerp opslaan" @@ -1780,7 +1799,6 @@ msgstr "Een naam is verplicht." #. TRANS: Validation error shown when providing too long a name in the "Edit application" form. #: actions/editapplication.php:188 actions/newapplication.php:169 -#, fuzzy msgid "Name is too long (maximum 255 characters)." msgstr "De naam is te lang (maximaal 255 tekens)." @@ -1870,7 +1888,7 @@ msgstr "Het was niet mogelijk de groep bij te werken." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Het was niet mogelijk de aliassen aan te maken." @@ -2159,7 +2177,7 @@ msgstr "" "voor de favorietenlijst plaatsen!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Favoriete mededelingen van %s" @@ -2344,8 +2362,10 @@ msgstr "" "De vormgeving van uw groep aanpassen met een achtergrondafbeelding en een " "kleurenpalet van uw keuze." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Het was niet mogelijk uw ontwerp bij te werken." @@ -2742,7 +2762,7 @@ msgstr[1] "U bent al geabonneerd op deze gebruikers:" #. TRANS: Used as list item for already subscribed users (%1$s is nickname, %2$s is e-mail address). #. TRANS: Used as list item for already registered people (%1$s is nickname, %2$s is e-mail address). #: actions/invite.php:145 actions/invite.php:159 -#, fuzzy, php-format +#, php-format msgctxt "INVITE" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2928,9 +2948,8 @@ msgstr "" "voorbehouden\" gebruikt." #: actions/licenseadminpanel.php:156 -#, fuzzy msgid "Invalid license title. Maximum length is 255 characters." -msgstr "Ongeldige licentienaam. De maximale lengte is 255 tekens." +msgstr "De licentienaam is ongeldig. De maximale lengte is 255 tekens." #: actions/licenseadminpanel.php:168 msgid "Invalid license URL." @@ -3313,25 +3332,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Mededeling heeft geen profiel." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Status van %1$s op %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Inhoudstype %s wordt niet ondersteund." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Alleen URL's voor %s via normale HTTP alstublieft." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Geen ondersteund gegevensformaat." @@ -3382,7 +3401,6 @@ msgstr "Profielontwerpen weergeven of verbergen" #. TRANS: Form validation error for form "Other settings" in user profile. #: actions/othersettings.php:162 -#, fuzzy msgid "URL shortening service is too long (maximum 50 characters)." msgstr "De URL voor de verkortingdienst is te lang (maximaal 50 tekens)." @@ -3812,7 +3830,7 @@ msgstr "1-64 kleine letters of cijfers, geen leestekens of spaties." #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Volledige naam" @@ -3853,7 +3871,7 @@ msgstr "Beschrijving" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4202,7 +4220,6 @@ msgid "Unexpected password reset." msgstr "Het wachtwoord is onverwacht opnieuw ingesteld." #: actions/recoverpassword.php:365 -#, fuzzy msgid "Password must be 6 characters or more." msgstr "Het wachtwoord moet uit zes of meer tekens bestaan." @@ -4446,7 +4463,7 @@ msgid "Repeated!" msgstr "Herhaald!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Antwoorden aan %s" @@ -4584,7 +4601,7 @@ msgid "Description" msgstr "Beschrijving" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistieken" @@ -4703,94 +4720,94 @@ msgid "This is a way to share what you like." msgstr "Dit is de manier om dat te delen wat u wilt." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s groep" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Groep %1$s, pagina %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Groepsprofiel" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Opmerking" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Aliassen" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Groepshandelingen" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Mededelingenfeed voor groep %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Mededelingenfeed voor groep %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Mededelingenfeed voor groep %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Vriend van een vriend voor de groep %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Leden" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(geen)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Alle leden" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 msgctxt "LABEL" msgid "Created" msgstr "Aangemaakt" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 msgctxt "LABEL" msgid "Members" msgstr "Leden" @@ -4799,7 +4816,7 @@ msgstr "Leden" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4818,7 +4835,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4832,7 +4849,7 @@ msgstr "" "over hun ervaringen en interesses. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Beheerders" @@ -4866,16 +4883,16 @@ msgstr "Deze mededeling is verwijderd." #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #: actions/showstream.php:70 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s" -msgstr "%1$s, pagina %2$d" +msgstr "%2$s gelabeld door %1$s" #. TRANS: Page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$s is the hash tag, %1$d is the page number. #: actions/showstream.php:74 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s, page %3$d" -msgstr "Mededelingen met het label %1$s, pagina %2$d" +msgstr "%2$s gelabeld door %1$s, pagina %3$d" #. TRANS: Extended page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$d is the page number. @@ -4919,10 +4936,10 @@ msgstr "Vriend van een vriend (FOAF) voor %s" #. TRANS: First sentence of empty list message for a stream. $1%s is a user nickname. #: actions/showstream.php:211 -#, fuzzy, php-format +#, php-format msgid "This is the timeline for %1$s, but %1$s hasn't posted anything yet." msgstr "" -"Dit is de tijdlijn voor %1$s, maar %2$s heeft nog geen berichten verzonden." +"Dit is de tijdlijn voor %1$s, maar %1$s heeft nog geen berichten verzonden." #. TRANS: Second sentence of empty list message for a stream for the user themselves. #: actions/showstream.php:217 @@ -5110,7 +5127,6 @@ msgstr "Het was niet mogelijk om de websitebrede mededeling op te slaan." #. TRANS: Client error displayed when a site-wide notice was longer than allowed. #: actions/sitenoticeadminpanel.php:112 -#, fuzzy msgid "Maximum length for the site-wide notice is 255 characters." msgstr "De maximale lengte voor de websitebrede aankondiging is 255 tekens." @@ -5121,10 +5137,9 @@ msgstr "Tekst voor websitebrede mededeling" #. TRANS: Tooltip for site-wide notice text field in admin panel. #: actions/sitenoticeadminpanel.php:179 -#, fuzzy msgid "Site-wide notice text (255 characters maximum; HTML allowed)" msgstr "" -"Tekst voor websitebrede aankondiging (maximaal 255 tekens - HTML is " +"Tekst voor websitebrede aankondiging (maximaal 255 tekens en HTML is " "toegestaan)" #. TRANS: Title for button to save site notice in admin panel. @@ -5614,20 +5629,19 @@ msgstr "Ongeldige beschrijvingslimiet. Het moet een getal zijn." #. TRANS: Form validation error in user admin panel when welcome text is too long. #: actions/useradminpanel.php:154 -#, fuzzy msgid "Invalid welcome text. Maximum length is 255 characters." msgstr "Ongeldige welkomsttekst. De maximale lengte is 255 tekens." #. TRANS: Client error displayed when trying to set a non-existing user as default subscription for new #. TRANS: users in user admin panel. %1$s is the invalid nickname. #: actions/useradminpanel.php:166 -#, fuzzy, php-format +#, php-format msgid "Invalid default subscripton: '%1$s' is not a user." msgstr "Ongeldig standaardabonnement: \"%1$s\" is geen gebruiker." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profiel" @@ -5653,7 +5667,6 @@ msgstr "Welkom voor nieuwe gebruikers" #. TRANS: Tooltip in user admin panel for setting new user welcome text. #: actions/useradminpanel.php:238 -#, fuzzy msgid "Welcome text for new users (maximum 255 characters)." msgstr "Welkomsttekst voor nieuwe gebruikers. Maximaal 255 tekens." @@ -5792,11 +5805,13 @@ msgstr "Het was niet mogelijk de avatar-URL \"%s\" te lezen." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Er staat een verkeerd afbeeldingsttype op de avatar-URL \"%s\"." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Profielontwerp" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5929,33 +5944,46 @@ msgstr "Robin denkt dat iets onmogelijk is." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Bestanden mogen niet groter zijn dan %1$d bytes, en uw bestand was %2$d " +"bytes. Probeer een kleinere versie te uploaden." +msgstr[1] "" "Bestanden mogen niet groter zijn dan %1$d bytes, en uw bestand was %2$d " "bytes. Probeer een kleinere versie te uploaden." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Een bestand van deze grootte overschijdt uw gebruikersquota van %d bytes." +msgstr[1] "" "Een bestand van deze grootte overschijdt uw gebruikersquota van %d bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +"Een bestand van deze grootte overschijdt uw maandelijkse quota van %d bytes." +msgstr[1] "" "Een bestand van deze grootte overschijdt uw maandelijkse quota van %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Ongeldige bestandsnaam." @@ -6089,12 +6117,13 @@ msgid "Problem saving notice." msgstr "Er is een probleem opgetreden bij het opslaan van de mededeling." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Het gegevenstype dat is opgegeven aan saveKnownGroups is onjuist" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "" "Er is een probleem opgetreden bij het opslaan van het Postvak IN van de " @@ -6102,21 +6131,21 @@ msgstr "" #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Het was niet mogelijk antwoord %1$d voor %2$d op te slaan." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 -#, fuzzy, php-format +#: classes/Profile.php:164 classes/User_group.php:247 +#, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6216,22 +6245,22 @@ msgstr "" "De \"single-user\"-modus is aangeroepen terwijl deze niet is ingeschakeld." #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Het was niet mogelijk de groep aan te maken." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Het was niet mogelijk de groeps-URI in te stellen." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Het was niet mogelijk het groepslidmaatschap in te stellen." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Het was niet mogelijk de lokale groepsinformatie op te slaan." @@ -6285,7 +6314,7 @@ msgstr "Naamloze pagina" #: lib/action.php:310 msgctxt "TOOLTIP" msgid "Show more" -msgstr "" +msgstr "Meer weergeven" #. TRANS: DT element for primary navigation menu. String is hidden in default CSS. #: lib/action.php:526 @@ -6641,7 +6670,7 @@ msgid "User configuration" msgstr "Gebruikersinstellingen" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Gebruiker" @@ -6994,7 +7023,7 @@ msgstr "%1$s heeft de groep %2$s verlaten." #. TRANS: Whois output. #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL. #: lib/command.php:426 -#, fuzzy, php-format +#, php-format msgctxt "WHOIS" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -7041,15 +7070,15 @@ msgstr "" #. TRANS: Message given if content is too long. %1$sd is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:488 -#, fuzzy, php-format +#, php-format msgid "Message too long - maximum is %1$d character, you sent %2$d." msgid_plural "Message too long - maximum is %1$d characters, you sent %2$d." msgstr[0] "" -"Het bericht te is lang. De maximale lengte is %1$d tekens. De lengte van uw " -"bericht was %2$d." +"Het bericht is te lang. Het mag maximaal %1$d teken bevatten en u hebt er %2" +"$d gebruikt." msgstr[1] "" -"Het bericht te is lang. De maximale lengte is %1$d tekens. De lengte van uw " -"bericht was %2$d." +"Het bericht is te lang. Het mag maximaal %1$d tekens bevatten en u hebt er %2" +"$d gebruikt." #. TRANS: Error text shown sending a direct message fails with an unknown reason. #: lib/command.php:516 @@ -7071,15 +7100,15 @@ msgstr "Er is een fout opgetreden bij het herhalen van de mededeling." #. TRANS: Message given if content of a notice for a reply is too long. %1$d is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:591 -#, fuzzy, php-format +#, php-format msgid "Notice too long - maximum is %1$d character, you sent %2$d." msgid_plural "Notice too long - maximum is %1$d characters, you sent %2$d." msgstr[0] "" -"De mededeling is te lang. De maximale lengte is %1$d tekens. Uw mededeling " -"bevatte %2$d tekens." +"De mededeling is te lang. Deze mag maximaal %1$d teken bevatten en u hebt er " +"%2$d gebruikt." msgstr[1] "" -"De mededeling is te lang. De maximale lengte is %1$d tekens. Uw mededeling " -"bevatte %2$d tekens." +"De mededeling is te lang. Deze mag maximaal %1$d tekens bevatten en u hebt " +"er %2$d gebruikt." #. TRANS: Text shown having sent a reply to a notice successfully. #. TRANS: %s is the nickname of the user of the notice the reply was sent to. @@ -7358,10 +7387,13 @@ msgstr "Geautoriseerde verbonden applicaties" msgid "Database error" msgstr "Databasefout" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Bestand uploaden" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7369,16 +7401,29 @@ msgstr "" "U kunt een persoonlijke achtergrondafbeelding uploaden. De maximale " "bestandsgrootte is 2 megabyte." -#: 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 "" -"De server was niet in staat zoveel POST-gegevens te verwerken (%s bytes) " -"vanwege de huidige instellingen." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Aan" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Uit" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Herstellen" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Het standaardontwerp is weer ingesteld." @@ -7445,7 +7490,6 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 kleine letters of cijfers, geen leestekens of spaties" #: lib/groupeditform.php:163 -#, fuzzy 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" @@ -7454,31 +7498,30 @@ msgid "Describe the group or topic" msgstr "Beschrijf de groep of het onderwerp" #: lib/groupeditform.php:170 -#, fuzzy, php-format +#, php-format msgid "Describe the group or topic in %d character or less" msgid_plural "Describe the group or topic in %d characters or less" -msgstr[0] "Beschrijf de groep of het onderwerp in %d tekens" -msgstr[1] "Beschrijf de groep of het onderwerp in %d tekens" +msgstr[0] "Beschrijf de group in %d teken of minder" +msgstr[1] "Beschrijf de group in %d tekens of minder" #: lib/groupeditform.php:182 -#, fuzzy msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "" "Locatie voor de groep - als relevant. Iets als \"Plaats, regio, land\"." #: lib/groupeditform.php:190 -#, fuzzy, php-format +#, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " "alias allowed." msgid_plural "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " "aliases allowed." -msgstr[0] "" -"Extra namen voor de groep, gescheiden door komma's of spaties. Maximaal %d." +msgstr[0] "Extra bijnaam voor de groep. Maximaal %d alias toegestaan." msgstr[1] "" -"Extra namen voor de groep, gescheiden door komma's of spaties. Maximaal %d." +"Extra bijnamen voor de groep, gescheiden met komma's of spaties. Maximaal %d " +"aliasen toegestaan." #. TRANS: Menu item in the group navigation page. #: lib/groupnav.php:86 @@ -7880,7 +7923,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%1$s (@%2$s) heeft uw mededeling als favoriet toegevoegd" @@ -7890,7 +7933,7 @@ msgstr "%1$s (@%2$s) heeft uw mededeling als favoriet toegevoegd" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7929,7 +7972,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7942,7 +7985,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%1$s (@%2$s) heeft u een mededeling gestuurd" @@ -7953,7 +7996,7 @@ msgstr "%1$s (@%2$s) heeft u een mededeling gestuurd" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8103,7 +8146,7 @@ msgstr "Het was niet mogelijk het MIME-type van het bestand te bepalen." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8114,7 +8157,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "\"%s\" is geen ondersteund bestandstype op deze server." @@ -8255,31 +8298,31 @@ msgstr "Dubbele mededeling." msgid "Couldn't insert new subscription." msgstr "Kon nieuw abonnement niet toevoegen." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Persoonlijk" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Antwoorden" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favorieten" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Postvak IN" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Uw inkomende berichten" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Postvak UIT" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Uw verzonden berichten" @@ -8476,6 +8519,12 @@ msgstr "Gebruikerslabelwolk" msgid "None" msgstr "Geen" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Ongeldige bestandsnaam." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8497,16 +8546,16 @@ msgid "Invalid theme: bad directory structure." msgstr "Ongeldige vormgeving: de mappenstructuur is onjuist." #: lib/themeuploader.php:166 -#, fuzzy, php-format +#, php-format msgid "Uploaded theme is too large; must be less than %d byte uncompressed." msgid_plural "" "Uploaded theme is too large; must be less than %d bytes uncompressed." msgstr[0] "" -"De toegevoegde vormgeving is te groot. Deze moet uitgepakt kleiner zijn dan %" -"d bytes." +"De geüploade vormgeving is te groot; deze moet omgecomprimeerd kleiner zijn " +"dan %d byte." msgstr[1] "" -"De toegevoegde vormgeving is te groot. Deze moet uitgepakt kleiner zijn dan %" -"d bytes." +"De geüploade vormgeving is te groot; deze moet omgecomprimeerd kleiner zijn " +"dan %d bytes." #: lib/themeuploader.php:179 msgid "Invalid theme archive: missing file css/display.css" @@ -8722,7 +8771,7 @@ msgstr[1] "" #: scripts/restoreuser.php:61 #, php-format msgid "Getting backup from file '%s'." -msgstr "" +msgstr "De back-up wordt uit het bestand \"%s\" geladen." #. TRANS: Commandline script output. #: scripts/restoreuser.php:91 @@ -8731,28 +8780,15 @@ msgstr "Geen gebruiker opgegeven; de back-upgebruiker wordt gebruikt." #. TRANS: Commandline script output. %d is the number of entries in the activity stream in backup; used for plural. #: scripts/restoreuser.php:98 -#, fuzzy, php-format +#, php-format msgid "%d entry in backup." msgid_plural "%d entries in backup." -msgstr[0] "%d regels in de back-up." -msgstr[1] "%d regels in de back-up." +msgstr[0] "%d element in de back-up." +msgstr[1] "%d elementen in de back-up." -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "De naam is te lang (maximaal 255 tekens)." - -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "De organisatienaam is te lang (maximaal 255 tekens)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "De mededeling is te lang. Gebruik maximaal %d tekens." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "De maximale mededelingenlengte is %d tekens, inclusief de URL voor de " -#~ "bijlage." - -#~ msgid " tagged %s" -#~ msgstr " met het label %s" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "Back-upbestand voor gebruiker %s (%s)" +#~ "De server was niet in staat zoveel POST-gegevens te verwerken (%s bytes) " +#~ "vanwege de huidige instellingen." diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po index 3a3110bbf8..bc874821c0 100644 --- a/locale/nn/LC_MESSAGES/statusnet.po +++ b/locale/nn/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:34+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:41+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 (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nn\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -92,12 +92,14 @@ msgstr "Avatar-innstillingar" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 #, fuzzy msgctxt "BUTTON" msgid "Save" @@ -167,7 +169,7 @@ msgstr "%s med vener" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s med vener" @@ -337,11 +339,13 @@ msgstr "Kan ikkje lagra profil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -758,7 +762,7 @@ msgstr "Du tingar ikkje oppdateringar til den profilen." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Der var eit problem med sesjonen din. Vennlegst prøv på nytt." @@ -781,12 +785,13 @@ msgstr "databasefeil ved innsetjing av skigardmerkelapp (#merkelapp): %s" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Uventa skjemasending." @@ -833,7 +838,7 @@ msgstr "Konto" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1098,7 +1103,7 @@ msgstr "Dette emneord finst ikkje." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Ingen kallenamn." @@ -1115,7 +1120,7 @@ msgstr "Ugyldig storleik." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Brukarbilete" @@ -1292,7 +1297,7 @@ msgstr "Lagring av informasjon feila." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Denne gruppa finst ikkje." @@ -1669,12 +1674,14 @@ msgstr "Statusmelding" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "" @@ -1686,42 +1693,50 @@ msgid "" msgstr "Du kan lasta opp ein logo for gruppa." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 #, fuzzy msgid "Change colours" msgstr "Endra passordet ditt" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Innhald" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 #, fuzzy msgid "Sidebar" msgstr "Søk" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 #, fuzzy msgid "Links" msgstr "Logg inn" @@ -1734,15 +1749,18 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "" @@ -1750,11 +1768,12 @@ msgstr "" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Lagra" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "" @@ -1898,7 +1917,7 @@ msgstr "Kann ikkje oppdatera gruppa." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 #, fuzzy msgid "Could not create aliases." msgstr "Kunne ikkje lagre favoritt." @@ -2184,7 +2203,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s's favoritt meldingar" @@ -2375,8 +2394,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 #, fuzzy msgid "Couldn't update your design." msgstr "Kan ikkje oppdatera brukar." @@ -3329,25 +3350,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Brukaren har inga profil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s sin status på %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "Kopla til" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Ikkje eit støtta dataformat." @@ -3851,7 +3872,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Fullt namn" @@ -3894,7 +3915,7 @@ msgstr "Om meg" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4481,7 +4502,7 @@ msgid "Repeated!" msgstr "Lag" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Svar til %s" @@ -4621,7 +4642,7 @@ msgid "Description" msgstr "Beskriving" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistikk" @@ -4729,95 +4750,95 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s gruppe" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Grupper, side %d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Gruppe profil" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Merknad" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Gruppe handlingar" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Straum for vener av %s" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Straum for vener av %s" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Notisstraum for %s" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "Utboks for %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Medlemmar" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ingen)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Alle medlemmar" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Framheva" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4827,7 +4848,7 @@ msgstr "Medlemmar" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4840,7 +4861,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4852,7 +4873,7 @@ msgstr "" "wikipedia.org/wiki/Micro-blogging)-teneste" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 #, fuzzy msgid "Admins" msgstr "Administrator" @@ -5629,7 +5650,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5802,12 +5823,14 @@ msgstr "Kan ikkje lesa brukarbilete-URL «%s»" msgid "Wrong image type for avatar URL ‘%s’." msgstr "Feil biletetype for '%s'" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 #, fuzzy msgid "Profile design" msgstr "Profilinnstillingar" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5928,29 +5951,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Ugyldig filnamn." @@ -6084,32 +6116,32 @@ msgid "Problem saving notice." msgstr "Eit problem oppstod ved lagring av notis." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "Eit problem oppstod ved lagring av notis." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Kunne ikkje lagra abonnement." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6208,22 +6240,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Kunne ikkje laga gruppa." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Kunne ikkje laga gruppa." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Kunne ikkje bli med i gruppa." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 #, fuzzy msgid "Could not save local group info." msgstr "Kunne ikkje lagra abonnement." @@ -6652,7 +6684,7 @@ msgid "User configuration" msgstr "SMS bekreftelse" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Brukar" @@ -7335,23 +7367,39 @@ msgstr "" msgid "Database error" msgstr "" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Last opp fil" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Du kan lasta opp ein logo for gruppa." -#: lib/designsettings.php:283 -#, php-format -msgid "" -"The server was unable to handle that much POST data (%s bytes) due to its " -"current configuration." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +msgctxt "RADIO" +msgid "On" msgstr "" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +msgctxt "RADIO" +msgid "Off" +msgstr "" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Avbryt" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "" @@ -7806,7 +7854,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "" @@ -7817,7 +7865,7 @@ msgstr "" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7839,7 +7887,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7849,7 +7897,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "" @@ -7860,7 +7908,7 @@ msgstr "" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7980,7 +8028,7 @@ msgstr "Kunne ikkje slette favoritt." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7989,7 +8037,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8135,31 +8183,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Kan ikkje leggja til ny tinging." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Personleg" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Svar" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favorittar" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Innboks" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Dine innkomande meldinger" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Utboks" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Dine sende meldingar" @@ -8368,6 +8416,12 @@ msgstr "" msgid "None" msgstr "Ingen" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Ugyldig filnamn." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8620,19 +8674,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Ditt fulle namn er for langt (maksimalt 255 teikn)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Plassering er for lang (maksimalt 255 teikn)." - -#, fuzzy -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Du kan lasta opp ein logo for gruppa." - -#, fuzzy -#~ msgid " tagged %s" -#~ msgstr "Notisar merka med %s" diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po index 499657993e..388e04527a 100644 --- a/locale/pl/LC_MESSAGES/statusnet.po +++ b/locale/pl/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:36+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:43+0000\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" @@ -20,11 +20,11 @@ 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 (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pl\n" "X-Message-Group: #out-statusnet-core\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -89,12 +89,14 @@ msgstr "Zapisz ustawienia dostępu" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Zapisz" @@ -162,7 +164,7 @@ msgstr "%1$s i przyjaciele, strona %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "Użytkownik %s i przyjaciele" @@ -337,11 +339,13 @@ msgstr "Nie można zapisać profilu." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -754,7 +758,7 @@ msgstr "Token żądania został już upoważniony." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Wystąpił problem z tokenem sesji. Spróbuj ponownie." @@ -775,12 +779,13 @@ msgstr "Błąd bazy danych podczas wprowadzania oauth_token_association." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Nieoczekiwane wysłanie formularza." @@ -832,7 +837,7 @@ msgstr "Konto" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1097,7 +1102,7 @@ msgstr "Nie ma takiego załącznika." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Brak pseudonimu." @@ -1114,7 +1119,7 @@ msgstr "Nieprawidłowy rozmiar." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Awatar" @@ -1287,7 +1292,7 @@ msgstr "Zapisanie informacji o blokadzie nie powiodło się." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Nie ma takiej grupy." @@ -1643,12 +1648,14 @@ msgstr "Własny motyw" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Można wysłać własny motyw witryny StatusNet jako archiwum zip." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Zmień obraz tła" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Tło" @@ -1660,40 +1667,48 @@ msgid "" msgstr "Można wysłać obraz tła dla witryny. Maksymalny rozmiar pliku to %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Włączone" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Wyłączone" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Włącz lub wyłącz obraz tła." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Kafelkowy obraz tła" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Zmień kolory" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Treść" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Panel boczny" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Odnośniki" @@ -1705,15 +1720,18 @@ msgstr "Zaawansowane" msgid "Custom CSS" msgstr "Własny plik CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Użycie domyślnych" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Przywróć domyślny wygląd" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Przywróć domyślne ustawienia" @@ -1721,11 +1739,12 @@ msgstr "Przywróć domyślne ustawienia" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Zapisz" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Zapisz wygląd" @@ -1770,7 +1789,6 @@ msgstr "Nazwa jest wymagana." #. TRANS: Validation error shown when providing too long a name in the "Edit application" form. #: actions/editapplication.php:188 actions/newapplication.php:169 -#, fuzzy msgid "Name is too long (maximum 255 characters)." msgstr "Nazwa jest za długa (maksymalnie 255 znaków)." @@ -1860,7 +1878,7 @@ msgstr "Nie można zaktualizować grupy." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Nie można utworzyć aliasów." @@ -2147,7 +2165,7 @@ msgstr "" "pierwszym, który doda wpis do ulubionych." #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Ulubione wpisy użytkownika %s" @@ -2324,8 +2342,10 @@ msgid "" "palette of your choice." msgstr "Dostosuj wygląd grupy za pomocą wybranego obrazu tła i palety kolorów." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Nie można zaktualizować wyglądu." @@ -2718,7 +2738,7 @@ msgstr[2] "Jesteś już subskrybowany do tych użytkowników:" #. TRANS: Used as list item for already subscribed users (%1$s is nickname, %2$s is e-mail address). #. TRANS: Used as list item for already registered people (%1$s is nickname, %2$s is e-mail address). #: actions/invite.php:145 actions/invite.php:159 -#, fuzzy, php-format +#, php-format msgctxt "INVITE" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2908,7 +2928,6 @@ msgstr "" "zastrzeżone\"." #: actions/licenseadminpanel.php:156 -#, fuzzy msgid "Invalid license title. Maximum length is 255 characters." msgstr "Nieprawidłowy tytuł licencji. Maksymalna długość to 255 znaków." @@ -3288,25 +3307,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Wpis nie posiada profilu." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Stan użytkownika %1$s na %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Typ zawartości %s jest nieobsługiwany." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Dozwolone są tylko adresy URL %s przez zwykły protokół HTTP." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "To nie jest obsługiwany format danych." @@ -3357,7 +3376,6 @@ msgstr "Wyświetl lub ukryj ustawienia wyglądu profilu." #. TRANS: Form validation error for form "Other settings" in user profile. #: actions/othersettings.php:162 -#, fuzzy msgid "URL shortening service is too long (maximum 50 characters)." msgstr "Adres URL usługi skracania jest za długi (maksymalnie 50 znaków)." @@ -3787,7 +3805,7 @@ msgstr "1-64 małe litery lub liczby, bez spacji i znaków przestankowych." #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Imię i nazwisko" @@ -3829,7 +3847,7 @@ msgstr "O mnie" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4170,7 +4188,6 @@ msgid "Unexpected password reset." msgstr "Nieoczekiwane przywrócenie hasła." #: actions/recoverpassword.php:365 -#, fuzzy msgid "Password must be 6 characters or more." msgstr "Hasło musi mieć sześć lub więcej znaków." @@ -4414,7 +4431,7 @@ msgid "Repeated!" msgstr "Powtórzono." #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Odpowiedzi na %s" @@ -4552,7 +4569,7 @@ msgid "Description" msgstr "Opis" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statystyki" @@ -4669,94 +4686,94 @@ msgid "This is a way to share what you like." msgstr "To jest sposób na współdzielenie tego, co chcesz." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Grupa %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Grupa %1$s, strona %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Profil grupy" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "Adres URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Wpis" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Aliasy" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Działania grupy" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Kanał wpisów dla grupy %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Kanał wpisów dla grupy %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Kanał wpisów dla grupy %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF dla grupy %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Członkowie" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Brak)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Wszyscy członkowie" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 msgctxt "LABEL" msgid "Created" msgstr "Utworzono" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 msgctxt "LABEL" msgid "Members" msgstr "Członkowie" @@ -4765,7 +4782,7 @@ msgstr "Członkowie" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4784,7 +4801,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4798,7 +4815,7 @@ msgstr "" "krótkimi wiadomościami o swoim życiu i zainteresowaniach. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administratorzy" @@ -4832,16 +4849,16 @@ msgstr "Usunięto wpis." #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #: actions/showstream.php:70 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s" -msgstr "%1$s, strona %2$d" +msgstr "%1$s nadał etykietę %2$s" #. TRANS: Page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$s is the hash tag, %1$d is the page number. #: actions/showstream.php:74 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s, page %3$d" -msgstr "Wpisy ze znacznikiem %1$s, strona %2$d" +msgstr "%1$s nadał etykietę %2$s, strona %3$d" #. TRANS: Extended page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$d is the page number. @@ -4885,10 +4902,10 @@ msgstr "FOAF dla %s" #. TRANS: First sentence of empty list message for a stream. $1%s is a user nickname. #: actions/showstream.php:211 -#, fuzzy, php-format +#, php-format msgid "This is the timeline for %1$s, but %1$s hasn't posted anything yet." msgstr "" -"To jest oś czasu dla użytkownika %1$s, ale %2$s nie nic jeszcze nie wysłał." +"To jest oś czasu dla użytkownika %1$s, ale %1$s nie nic jeszcze nie wysłał." #. TRANS: Second sentence of empty list message for a stream for the user themselves. #: actions/showstream.php:217 @@ -5071,7 +5088,6 @@ msgstr "Nie można zapisać wpisu witryny." #. TRANS: Client error displayed when a site-wide notice was longer than allowed. #: actions/sitenoticeadminpanel.php:112 -#, fuzzy msgid "Maximum length for the site-wide notice is 255 characters." msgstr "Maksymalna długość wpisu witryny to 255 znaków." @@ -5082,7 +5098,6 @@ msgstr "Tekst wpisu witryny" #. TRANS: Tooltip for site-wide notice text field in admin panel. #: actions/sitenoticeadminpanel.php:179 -#, fuzzy msgid "Site-wide notice text (255 characters maximum; HTML allowed)" msgstr "" "Tekst wpisu witryny (maksymalnie 255 znaków, można używać znaczników HTML)" @@ -5572,20 +5587,19 @@ msgstr "Nieprawidłowe ograniczenie informacji o sobie. Musi być liczbowa." #. TRANS: Form validation error in user admin panel when welcome text is too long. #: actions/useradminpanel.php:154 -#, fuzzy msgid "Invalid welcome text. Maximum length is 255 characters." msgstr "Nieprawidłowy tekst powitania. Maksymalna długość to 255 znaków." #. TRANS: Client error displayed when trying to set a non-existing user as default subscription for new #. TRANS: users in user admin panel. %1$s is the invalid nickname. #: actions/useradminpanel.php:166 -#, fuzzy, php-format +#, php-format msgid "Invalid default subscripton: '%1$s' is not a user." msgstr "Nieprawidłowa domyślna subskrypcja: \"%1$s\" nie jest użytkownikiem." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5611,7 +5625,6 @@ msgstr "Powitanie nowego użytkownika" #. TRANS: Tooltip in user admin panel for setting new user welcome text. #: actions/useradminpanel.php:238 -#, fuzzy msgid "Welcome text for new users (maximum 255 characters)." msgstr "Tekst powitania nowych użytkowników (maksymalnie 255 znaków)." @@ -5747,11 +5760,13 @@ msgstr "Nie można odczytać adresu URL awatara \"%s\"." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Błędny typ obrazu dla adresu URL awatara \"%s\"." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Wygląd profilu" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5884,34 +5899,56 @@ msgstr "Robin sądzi, że coś jest niemożliwe." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Żaden plik nie może być większy niż %1$d bajty, a wysłany plik miał %2$d " +"bajty. Proszę spróbować wysłać mniejszą wersję." +msgstr[1] "" +"Żaden plik nie może być większy niż %1$d bajty, a wysłany plik miał %2$d " +"bajty. Proszę spróbować wysłać mniejszą wersję." +msgstr[2] "" "Żaden plik nie może być większy niż %1$d bajty, a wysłany plik miał %2$d " "bajty. Proszę spróbować wysłać mniejszą wersję." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Plik tej wielkości przekroczyłby przydział użytkownika wynoszący %d bajty." +msgstr[1] "" +"Plik tej wielkości przekroczyłby przydział użytkownika wynoszący %d bajty." +msgstr[2] "" "Plik tej wielkości przekroczyłby przydział użytkownika wynoszący %d bajty." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +"Plik tej wielkości przekroczyłby miesięczny przydział użytkownika wynoszący %" +"d bajty." +msgstr[1] "" +"Plik tej wielkości przekroczyłby miesięczny przydział użytkownika wynoszący %" +"d bajty." +msgstr[2] "" "Plik tej wielkości przekroczyłby miesięczny przydział użytkownika wynoszący %" "d bajty." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Nieprawidłowa nazwa pliku." @@ -6040,32 +6077,33 @@ msgid "Problem saving notice." msgstr "Problem podczas zapisywania wpisu." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Podano błędne dane do saveKnownGroups" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Nie można zapisać odpowiedzi na %1$d, %2$d." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 -#, fuzzy, php-format +#: classes/Profile.php:164 classes/User_group.php:247 +#, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6161,22 +6199,22 @@ msgid "Single-user mode code called when not enabled." msgstr "Wywołano kod pojedynczego użytkownika, kiedy nie był włączony." #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Nie można utworzyć grupy." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Nie można ustawić adresu URI grupy." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Nie można ustawić członkostwa w grupie." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Nie można zapisać informacji o lokalnej grupie." @@ -6230,7 +6268,7 @@ msgstr "Strona bez nazwy" #: lib/action.php:310 msgctxt "TOOLTIP" msgid "Show more" -msgstr "" +msgstr "Wyświetl więcej" #. TRANS: DT element for primary navigation menu. String is hidden in default CSS. #: lib/action.php:526 @@ -6587,7 +6625,7 @@ msgid "User configuration" msgstr "Konfiguracja użytkownika" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Użytkownik" @@ -6940,7 +6978,7 @@ msgstr "Użytkownik %1$s opuścił grupę %2$s." #. TRANS: Whois output. #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL. #: lib/command.php:426 -#, fuzzy, php-format +#, php-format msgctxt "WHOIS" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6987,11 +7025,11 @@ msgstr "" #. TRANS: Message given if content is too long. %1$sd is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:488 -#, fuzzy, php-format +#, php-format msgid "Message too long - maximum is %1$d character, you sent %2$d." msgid_plural "Message too long - maximum is %1$d characters, you sent %2$d." -msgstr[0] "Wiadomość jest za długa - maksymalnie %1$d znaków, wysłano %2$d." -msgstr[1] "Wiadomość jest za długa - maksymalnie %1$d znaków, wysłano %2$d." +msgstr[0] "Wiadomość jest za długa - maksymalnie %1$d znak, wysłano %2$d." +msgstr[1] "Wiadomość jest za długa - maksymalnie %1$d znaki, wysłano %2$d." msgstr[2] "Wiadomość jest za długa - maksymalnie %1$d znaków, wysłano %2$d." #. TRANS: Error text shown sending a direct message fails with an unknown reason. @@ -7014,11 +7052,11 @@ msgstr "Błąd podczas powtarzania wpisu." #. TRANS: Message given if content of a notice for a reply is too long. %1$d is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:591 -#, fuzzy, php-format +#, php-format msgid "Notice too long - maximum is %1$d character, you sent %2$d." msgid_plural "Notice too long - maximum is %1$d characters, you sent %2$d." -msgstr[0] "Wpis jest za długi - maksymalnie %1$d znaków, wysłano %2$d." -msgstr[1] "Wpis jest za długi - maksymalnie %1$d znaków, wysłano %2$d." +msgstr[0] "Wpis jest za długi - maksymalnie %1$d znak, wysłano %2$d." +msgstr[1] "Wpis jest za długi - maksymalnie %1$d znaki, wysłano %2$d." msgstr[2] "Wpis jest za długi - maksymalnie %1$d znaków, wysłano %2$d." #. TRANS: Text shown having sent a reply to a notice successfully. @@ -7301,25 +7339,41 @@ msgstr "Upoważnione połączone aplikacje" msgid "Database error" msgstr "Błąd bazy danych" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Wyślij plik" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Można wysłać osobisty obraz tła. Maksymalny rozmiar pliku to 2 MB." -#: lib/designsettings.php:283 -#, php-format -msgid "" -"The server was unable to handle that much POST data (%s bytes) due to its " -"current configuration." -msgstr "" -"Serwer nie może obsłużyć aż tyle danych POST (%s bajty) z powodu bieżącej " -"konfiguracji." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Włączone" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Wyłączone" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Przywróć" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Przywrócono domyślny wygląd." @@ -7386,32 +7440,30 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces" msgstr "1-64 małe litery lub liczby, bez spacji i znaków przestankowych" #: lib/groupeditform.php:163 -#, fuzzy msgid "URL of the homepage or blog of the group or topic." -msgstr "Adres URL strony domowej lub bloga grupy, albo temat" +msgstr "Adres URL strony domowej lub bloga grupy, albo temat." #: lib/groupeditform.php:168 msgid "Describe the group or topic" msgstr "Opisz grupę lub temat" #: lib/groupeditform.php:170 -#, fuzzy, php-format +#, php-format msgid "Describe the group or topic in %d character or less" msgid_plural "Describe the group or topic in %d characters or less" -msgstr[0] "Opisz grupę lub temat w %d znakach" +msgstr[0] "Opisz grupę lub temat w %d znaku" msgstr[1] "Opisz grupę lub temat w %d znakach" msgstr[2] "Opisz grupę lub temat w %d znakach" #: lib/groupeditform.php:182 -#, fuzzy msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "" "Położenie grupy, jeśli istnieje, np. \"miasto, województwo (lub region), kraj" -"\"" +"\"." #: lib/groupeditform.php:190 -#, fuzzy, php-format +#, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " "alias allowed." @@ -7420,13 +7472,13 @@ msgid_plural "" "aliases allowed." msgstr[0] "" "Dodatkowe pseudonimy grupy, oddzielone przecinkami lub spacjami, maksymalnie " -"%d" +"%d." msgstr[1] "" "Dodatkowe pseudonimy grupy, oddzielone przecinkami lub spacjami, maksymalnie " -"%d" +"%d." msgstr[2] "" "Dodatkowe pseudonimy grupy, oddzielone przecinkami lub spacjami, maksymalnie " -"%d" +"%d." #. TRANS: Menu item in the group navigation page. #: lib/groupnav.php:86 @@ -7830,7 +7882,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "Użytkownik %1$s (@%2$s) dodał twój wpis jako ulubiony" @@ -7840,7 +7892,7 @@ msgstr "Użytkownik %1$s (@%2$s) dodał twój wpis jako ulubiony" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7879,7 +7931,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7892,7 +7944,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "Użytkownik %1$s (@%2$s) wysłał wpis wymagający twojej uwagi" @@ -7903,7 +7955,7 @@ msgstr "Użytkownik %1$s (@%2$s) wysłał wpis wymagający twojej uwagi" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8049,7 +8101,7 @@ msgstr "Nie można określić typu MIME pliku." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8060,7 +8112,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "\"%s\" nie jest obsługiwanym typem pliku na tym serwerze." @@ -8201,31 +8253,31 @@ msgstr "Podwójny wpis." msgid "Couldn't insert new subscription." msgstr "Nie można wprowadzić nowej subskrypcji." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Osobiste" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Odpowiedzi" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Ulubione" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Odebrane" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Wiadomości przychodzące" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Wysłane" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Wysłane wiadomości" @@ -8422,6 +8474,12 @@ msgstr "Chmura znaczników osób ze znacznikami" msgid "None" msgstr "Brak" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Nieprawidłowa nazwa pliku." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8442,15 +8500,15 @@ msgid "Invalid theme: bad directory structure." msgstr "Nieprawidłowy motyw: błędna struktura katalogów." #: lib/themeuploader.php:166 -#, fuzzy, php-format +#, php-format msgid "Uploaded theme is too large; must be less than %d byte uncompressed." msgid_plural "" "Uploaded theme is too large; must be less than %d bytes uncompressed." msgstr[0] "" -"Wysłany motyw jest za duży, musi być mniejszy niż %d bajtów po " +"Wysłany motyw jest za duży, musi być mniejszy niż %d bajt po " "zdekompresowaniu." msgstr[1] "" -"Wysłany motyw jest za duży, musi być mniejszy niż %d bajtów po " +"Wysłany motyw jest za duży, musi być mniejszy niż %d bajty po " "zdekompresowaniu." msgstr[2] "" "Wysłany motyw jest za duży, musi być mniejszy niż %d bajtów po " @@ -8671,7 +8729,7 @@ msgstr[2] "Wiadomość jest za długa. Maksymalnie %1$d znaków, wysłano %2$d." #: scripts/restoreuser.php:61 #, php-format msgid "Getting backup from file '%s'." -msgstr "" +msgstr "Pobieranie kopii zapasowej z pliku \"%s\"." #. TRANS: Commandline script output. #: scripts/restoreuser.php:91 @@ -8680,28 +8738,16 @@ msgstr "Nie podano użytkownika; używanie użytkownika zapasowego." #. TRANS: Commandline script output. %d is the number of entries in the activity stream in backup; used for plural. #: scripts/restoreuser.php:98 -#, fuzzy, php-format +#, php-format msgid "%d entry in backup." msgid_plural "%d entries in backup." -msgstr[0] "%d wpisów w kopii zapasowej." -msgstr[1] "%d wpisów w kopii zapasowej." +msgstr[0] "%d wpis w kopii zapasowej." +msgstr[1] "%d wpisy w kopii zapasowej." msgstr[2] "%d wpisów w kopii zapasowej." -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Nazwa jest za długa (maksymalnie 255 znaków)." - -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Organizacja jest za długa (maksymalnie 255 znaków)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Wpis jest za długi. Maksymalna długość wynosi %d znaków." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "Maksymalny rozmiar wpisu wynosi %d znaków, w tym adres URL załącznika." - -#~ msgid " tagged %s" -#~ msgstr " ze znacznikiem %s" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "Plik kopii zapasowej dla użytkownika %s (%s)" +#~ "Serwer nie może obsłużyć aż tyle danych POST (%s bajty) z powodu bieżącej " +#~ "konfiguracji." diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po index 2c04b685dd..2a7347ba2f 100644 --- a/locale/pt/LC_MESSAGES/statusnet.po +++ b/locale/pt/LC_MESSAGES/statusnet.po @@ -14,17 +14,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:38+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:45+0000\n" "Language-Team: Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -89,12 +89,14 @@ msgstr "Gravar configurações de acesso" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Gravar" @@ -162,7 +164,7 @@ msgstr "%1$s e amigos, página %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s e amigos" @@ -336,11 +338,13 @@ msgstr "Não foi possível gravar o perfil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -751,7 +755,7 @@ msgstr "Não tem autorização." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Ocorreu um problema com a sua sessão. Por favor, tente novamente." @@ -773,12 +777,13 @@ msgstr "Erro na base de dados ao inserir o utilizador da aplicação OAuth." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Envio inesperado de formulário." @@ -831,7 +836,7 @@ msgstr "Conta" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1094,7 +1099,7 @@ msgstr "Anexo não foi encontrado." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Nome de utilizador não definido." @@ -1111,7 +1116,7 @@ msgstr "Tamanho inválido." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1287,7 +1292,7 @@ msgstr "Não foi possível gravar informação do bloqueio." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Grupo não foi encontrado." @@ -1655,12 +1660,14 @@ msgstr "" "Pode fazer o upload de um tema personalizado para o StatusNet, na forma de " "um arquivo .ZIP." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Alterar imagem de fundo" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Fundo" @@ -1674,40 +1681,48 @@ msgstr "" "é %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Ligar" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Desligar" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Ligar ou desligar a imagem de fundo." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Repetir imagem de fundo em mosaico" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Alterar cores" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Conteúdo" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Barra" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Links" @@ -1719,15 +1734,18 @@ msgstr "Avançado" msgid "Custom CSS" msgstr "CSS personalizado" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Usar predefinições" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Repor estilos predefinidos" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Repor predefinição" @@ -1735,11 +1753,12 @@ msgstr "Repor predefinição" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Gravar" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Gravar o estilo" @@ -1875,7 +1894,7 @@ msgstr "Não foi possível actualizar o grupo." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Não foi possível criar os nomes alternativos." @@ -2165,7 +2184,7 @@ msgstr "" "uma nota às favoritas!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Notas favoritas de %s" @@ -2344,8 +2363,10 @@ msgstr "" "Personalize o aspecto do seu grupo com uma imagem de fundo e uma paleta de " "cores à sua escolha." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Não foi possível actualizar o estilo." @@ -3302,25 +3323,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Nota não tem perfil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Estado de %1$s em %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "O tipo de conteúdo %s não é suportado." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Só URLs %s sobre HTTP simples, por favor." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Formato de dados não suportado." @@ -3820,7 +3841,7 @@ msgstr "1-64 letras minúsculas ou números, sem pontuação ou espaços" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nome completo" @@ -3862,7 +3883,7 @@ msgstr "Biografia" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4454,7 +4475,7 @@ msgid "Repeated!" msgstr "Repetida!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Respostas a %s" @@ -4591,7 +4612,7 @@ msgid "Description" msgstr "Descrição" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Estatísticas" @@ -4709,95 +4730,95 @@ msgid "This is a way to share what you like." msgstr "Esta é uma forma de partilhar aquilo de que gosta." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Grupo %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Grupo %1$s, página %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Perfil do grupo" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Anotação" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Nomes alternativos" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Acções do grupo" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Fonte de notas do grupo %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Fonte de notas do grupo %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Fonte de notas do grupo %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF do grupo %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Membros" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Nenhum)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Todos os membros" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Criado" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4807,7 +4828,7 @@ msgstr "Membros" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4826,7 +4847,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4840,7 +4861,7 @@ msgstr "" "grupo partilham mensagens curtas acerca das suas vidas e interesses. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Gestores" @@ -5624,7 +5645,7 @@ msgstr "Subscrição predefinida é inválida: '%1$s' não é utilizador." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Perfil" @@ -5788,11 +5809,13 @@ msgstr "Não é possível ler a URL do avatar ‘%s’." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Tipo de imagem incorrecto para o avatar da URL ‘%s’." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Estilo do perfil" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5923,32 +5946,46 @@ msgstr "o Robin acha que algo é impossível." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Nenhum ficheiro pode ter mais de %1$d bytes e o que enviou tinha %2$d bytes. " +"Tente enviar uma versão mais pequena." +msgstr[1] "" "Nenhum ficheiro pode ter mais de %1$d bytes e o que enviou tinha %2$d bytes. " "Tente enviar uma versão mais pequena." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Um ficheiro desta dimensão excederia a sua quota de utilizador de %d bytes." +msgstr[1] "" "Um ficheiro desta dimensão excederia a sua quota de utilizador de %d bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Um ficheiro desta dimensão excederia a sua quota mensal de %d bytes." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +"Um ficheiro desta dimensão excederia a sua quota mensal de %d bytes." +msgstr[1] "" +"Um ficheiro desta dimensão excederia a sua quota mensal de %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Nome de ficheiro inválido." @@ -6077,31 +6114,32 @@ msgid "Problem saving notice." msgstr "Problema na gravação da nota." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "O tipo fornecido ao método saveKnownGroups é incorrecto" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problema na gravação da caixa de entrada do grupo." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Não foi possível gravar a informação do grupo local." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6199,22 +6237,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Não foi possível criar o grupo." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Não foi possível configurar a URI do grupo." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Não foi possível configurar membros do grupo." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Não foi possível gravar a informação do grupo local." @@ -6627,7 +6665,7 @@ msgid "User configuration" msgstr "Configuração do utilizador" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Utilizador" @@ -7334,10 +7372,13 @@ msgstr "Aplicações ligadas autorizadas" msgid "Database error" msgstr "Erro de base de dados" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Carregar ficheiro" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7345,16 +7386,29 @@ msgstr "" "Pode carregar uma imagem de fundo pessoal. O tamanho máximo do ficheiro é " "2MB." -#: 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 "" -"O servidor não conseguiu processar tantos dados POST (%s bytes) devido à sua " -"configuração actual." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Ligar" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Desligar" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Reiniciar" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Predefinições do estilo repostas" @@ -7854,7 +7908,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) adicionou a sua nota às favoritas." @@ -7864,7 +7918,7 @@ msgstr "%s (@%s) adicionou a sua nota às favoritas." #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7902,7 +7956,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7915,7 +7969,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) enviou uma nota à sua atenção" @@ -7926,7 +7980,7 @@ msgstr "%s (@%s) enviou uma nota à sua atenção" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8075,7 +8129,7 @@ msgstr "Não foi possível determinar o tipo MIME do ficheiro." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8086,7 +8140,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "\"%s\" não é um tipo de ficheiro suportado neste servidor." @@ -8227,31 +8281,31 @@ msgstr "Nota duplicada." msgid "Couldn't insert new subscription." msgstr "Não foi possível inserir nova subscrição." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Pessoal" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Respostas" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favoritas" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Recebidas" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Mensagens recebidas" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Enviadas" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Mensagens enviadas" @@ -8449,6 +8503,12 @@ msgstr "Nuvem da sua categorização das pessoas" msgid "None" msgstr "Nenhum" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Nome de ficheiro inválido." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8702,19 +8762,9 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Nome é demasiado longo (máx. 255 caracteres)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Organização é demasiado longa (máx. 255 caracteres)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Demasiado longo. Tamanho máx. das notas é %d caracteres." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "Tamanho máx. das notas é %d caracteres, incluindo a URL do anexo." - -#~ msgid " tagged %s" -#~ msgstr " categorizou %s" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "O servidor não conseguiu processar tantos dados POST (%s bytes) devido à " +#~ "sua configuração actual." diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po index 4b84ec3ab6..bb8b030dc5 100644 --- a/locale/pt_BR/LC_MESSAGES/statusnet.po +++ b/locale/pt_BR/LC_MESSAGES/statusnet.po @@ -15,18 +15,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:46+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 (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt-br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -91,12 +91,14 @@ msgstr "Salvar as configurações de acesso" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Salvar" @@ -164,7 +166,7 @@ msgstr "%1$s e amigos, pág. %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s e amigos" @@ -340,11 +342,13 @@ msgstr "Não foi possível salvar o perfil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -611,10 +615,10 @@ msgstr "A localização é muito extensa (máx. 255 caracteres)." #. TRANS: %d is the maximum number of allowed aliases. #: actions/apigroupcreate.php:255 actions/editgroup.php:236 #: actions/newgroup.php:172 -#, fuzzy, php-format +#, php-format msgid "Too many aliases! Maximum %d allowed." msgid_plural "Too many aliases! Maximum %d allowed." -msgstr[0] "Muitos apelidos! O máximo são %d." +msgstr[0] "Muitos apelidos! O máximo é %d." msgstr[1] "Muitos apelidos! O máximo são %d." #. TRANS: Client error shown when providing an invalid alias during group creation. @@ -722,9 +726,8 @@ msgstr "O upload falhou." #. TRANS: Client error given from the OAuth API when the request token or verifier is invalid. #: actions/apioauthaccesstoken.php:101 -#, fuzzy msgid "Invalid request token or verifier." -msgstr "O token de autenticação especificado é inválido." +msgstr "O token ou o verificador solicitado é inválido." #. TRANS: Client error given when no oauth_token was passed to the OAuth API. #: actions/apioauthauthorize.php:107 @@ -733,15 +736,13 @@ msgstr "Não foi fornecido nenhum parâmetro oauth_token" #. TRANS: Client error given when an invalid request token was passed to the OAuth API. #: actions/apioauthauthorize.php:115 actions/apioauthauthorize.php:129 -#, fuzzy msgid "Invalid request token." -msgstr "Token inválido." +msgstr "O token solicitado é inválido." #. TRANS: Client error given when an invalid request token was passed to the OAuth API. #: actions/apioauthauthorize.php:121 -#, fuzzy msgid "Request token already authorized." -msgstr "Você não está autorizado." +msgstr "O token solicitado já foi autorizado." #. TRANS: Form validation error in API OAuth authorisation because of an invalid session token. #: actions/apioauthauthorize.php:147 actions/avatarsettings.php:280 @@ -758,7 +759,7 @@ msgstr "Você não está autorizado." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" "Ocorreu um problema com o seu token de sessão. Tente novamente, por favor." @@ -770,10 +771,8 @@ msgstr "Nome de usuário e/ou senha inválido(s)!" #. TRANS: Server error displayed when a database action fails. #: actions/apioauthauthorize.php:217 -#, fuzzy msgid "Database error inserting oauth_token_association." -msgstr "" -"Erro no banco de dados durante a inserção do usuário da aplicativo OAuth." +msgstr "Erro no banco de dados durante a inserção de oauth_token_association." #. TRANS: Client error given on when invalid data was passed through a form in the OAuth API. #. TRANS: Unexpected validation error on avatar upload form. @@ -782,12 +781,13 @@ msgstr "" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Submissão inesperada de formulário." @@ -804,16 +804,15 @@ msgstr "Permitir ou negar o acesso" #. TRANS: User notification of external application requesting account access. #. TRANS: %3$s is the access type requested, %4$s is the StatusNet sitename. #: actions/apioauthauthorize.php:425 -#, fuzzy, php-format +#, php-format msgid "" "An application would like the ability to %3$s your %4$s " "account data. You should only give access to your %4$s account to third " "parties you trust." msgstr "" -"A aplicação %1$s por %2$s solicita a " -"permissão para %3$s os dados da sua conta %4$s. Você deve " -"fornecer acesso à sua conta %4$s somente para terceiros nos quais você " -"confia." +"Uma aplicação solicitou permissão para %3$s os dados da sua " +"conta %4$s. Você deve fornecer acesso à sua conta %4$s somente para " +"terceiros nos quais você confia." #. TRANS: User notification of external application requesting account access. #. TRANS: %1$s is the application name requesting access, %2$s is the organisation behind the application, @@ -832,7 +831,6 @@ msgstr "" #. TRANS: Fieldset legend. #: actions/apioauthauthorize.php:455 -#, fuzzy msgctxt "LEGEND" msgid "Account" msgstr "Conta" @@ -842,7 +840,7 @@ msgstr "Conta" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -870,29 +868,26 @@ msgstr "Cancelar" #. TRANS: Button text that when clicked will allow access to an account by an external application. #: actions/apioauthauthorize.php:485 -#, fuzzy msgctxt "BUTTON" msgid "Allow" msgstr "Permitir" #. TRANS: Form instructions. #: actions/apioauthauthorize.php:502 -#, fuzzy msgid "Authorize access to your account information." -msgstr "Permitir ou negar o acesso às informações da sua conta." +msgstr "Autoriza o acesso às informações da sua conta." #. TRANS: Header for user notification after revoking OAuth access to an application. #: actions/apioauthauthorize.php:594 -#, fuzzy msgid "Authorization canceled." -msgstr "A confirmação do mensageiro instantâneo foi cancelada." +msgstr "A autorização foi cancelada." #. TRANS: User notification after revoking OAuth access to an application. #. TRANS: %s is an OAuth token. #: actions/apioauthauthorize.php:598 -#, fuzzy, php-format +#, php-format msgid "The request token %s has been revoked." -msgstr "O token %s solicitado foi negado e revogado." +msgstr "O token %s solicitado foi revogado." #. TRANS: Title of the page notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. #: actions/apioauthauthorize.php:621 @@ -1104,7 +1099,7 @@ msgstr "Este anexo não existe." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Nenhuma identificação." @@ -1121,7 +1116,7 @@ msgstr "Tamanho inválido." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1299,7 +1294,7 @@ msgstr "Não foi possível salvar a informação de bloqueio." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Esse grupo não existe." @@ -1667,12 +1662,14 @@ msgstr "" "Você pode enviar um tema personalizado para o StatusNet, na forma de um " "arquivo .zip." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Alterar imagem do fundo" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Fundo" @@ -1686,40 +1683,48 @@ msgstr "" "arquivo é de %1 $s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Ativado" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Desativado" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Ativar/desativar a imagem de fundo." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Ladrilhar a imagem de fundo" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Alterar a cor" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Conteúdo" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Barra lateral" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Links" @@ -1731,15 +1736,18 @@ msgstr "Avançado" msgid "Custom CSS" msgstr "CSS personalizado" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Usar o padrão|" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Restaura a aparência padrão" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Restaura de volta ao padrão" @@ -1747,11 +1755,12 @@ msgstr "Restaura de volta ao padrão" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Salvar" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Salvar a aparência" @@ -1887,7 +1896,7 @@ msgstr "Não foi possível atualizar o grupo." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Não foi possível criar os apelidos." @@ -2178,7 +2187,7 @@ msgstr "" "primeiro a adicionar uma mensagem aos favoritos?" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Mensagens favoritas de %s" @@ -2358,8 +2367,10 @@ msgstr "" "Personalize a aparência do grupo com uma imagem de fundo e uma paleta de " "cores à sua escolha." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Não foi possível atualizar a aparência." @@ -3324,25 +3335,25 @@ msgstr "" msgid "Notice has no profile." msgstr "A mensagem não está associada a nenhum perfil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Mensagem de %1$s no %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "O tipo de conteúdo %s não é suportado." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Por favor, somente URLs %s sobre HTTP puro." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Não é um formato de dados suportado." @@ -3843,7 +3854,7 @@ msgstr "1-64 letras minúsculas ou números, sem pontuações ou espaços" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Nome completo" @@ -3885,7 +3896,7 @@ msgstr "Descrição" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4476,7 +4487,7 @@ msgid "Repeated!" msgstr "Repetida!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Respostas para %s" @@ -4614,7 +4625,7 @@ msgid "Description" msgstr "Descrição" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Estatísticas" @@ -4730,95 +4741,95 @@ msgid "This is a way to share what you like." msgstr "Esta é uma forma de compartilhar o que você gosta." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Grupo %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Grupo %1$s, pág. %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Perfil do grupo" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "Site" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Mensagem" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Apelidos" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Ações do grupo" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Fonte de mensagens do grupo %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Fonte de mensagens do grupo %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Fonte de mensagens do grupo %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF para o grupo %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Membros" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Nenhum)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Todos os membros" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Criado" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4828,7 +4839,7 @@ msgstr "Membros" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4847,7 +4858,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4861,7 +4872,7 @@ msgstr "" "sobre suas vidas e interesses. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administradores" @@ -5646,7 +5657,7 @@ msgstr "Assinatura padrão inválida: '%1$s' não é um usuário." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Perfil" @@ -5810,11 +5821,13 @@ msgstr "Não é possível ler a URL '%s' do avatar." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Tipo de imagem errado para a URL '%s' do avatar." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Aparência do perfil" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5948,31 +5961,42 @@ msgstr "o Robin acha que algo é impossível." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Nenhum arquivo pode ter mais de %1$d bytes e o que você enviou tinha %2$d " +"bytes. Tente enviar uma versão mais pequena." +msgstr[1] "" "Nenhum arquivo pode ter mais de %1$d bytes e o que você enviou tinha %2$d " "bytes. Tente enviar uma versão mais pequena." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "Um arquivo deste tamanho excederá a sua conta de %d bytes." +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "Um arquivo deste tamanho excederá a sua conta de %d bytes." +msgstr[1] "Um arquivo deste tamanho excederá a sua conta de %d bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Um arquivo deste tamanho excederá a sua conta mensal de %d bytes." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "Um arquivo deste tamanho excederá a sua conta mensal de %d bytes." +msgstr[1] "Um arquivo deste tamanho excederá a sua conta mensal de %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Nome de arquivo inválido." @@ -6101,31 +6125,32 @@ msgid "Problem saving notice." msgstr "Problema no salvamento da mensagem." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "O tipo fornecido ao método saveKnownGroups é incorreto" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problema no salvamento das mensagens recebidas do grupo." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Não foi possível salvar a informação do grupo local." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6222,22 +6247,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Não foi possível criar o grupo." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Não foi possível definir a URI do grupo." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Não foi possível configurar a associação ao grupo." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Não foi possível salvar a informação do grupo local." @@ -6646,7 +6671,7 @@ msgid "User configuration" msgstr "Configuração do usuário" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Usuário" @@ -7365,26 +7390,42 @@ msgstr "Aplicações autorizadas conectadas" msgid "Database error" msgstr "Erro no banco de dados" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Enviar arquivo" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" "Você pode enviar sua imagem de fundo. O tamanho máximo do arquivo é de 2Mb." -#: 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 "" -"O servidor não conseguiu manipular a quantidade de dados do POST (%s bytes) " -"devido à sua configuração atual." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Ativado" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Desativado" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Restaurar" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "A aparência padrão foi restaurada." @@ -7887,7 +7928,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) marcou sua mensagem como favorita" @@ -7897,7 +7938,7 @@ msgstr "%s (@%s) marcou sua mensagem como favorita" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7935,7 +7976,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7948,7 +7989,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) enviou uma mensagem citando você" @@ -7959,7 +8000,7 @@ msgstr "%s (@%s) enviou uma mensagem citando você" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8110,7 +8151,7 @@ msgstr "Não foi possível determinar o tipo MIME do arquivo." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8121,7 +8162,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "\"%s\" não é um tipo de arquivo suportado neste servidor." @@ -8262,31 +8303,31 @@ msgstr "Nota duplicada." msgid "Couldn't insert new subscription." msgstr "Não foi possível inserir a nova assinatura." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Pessoal" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Respostas" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favoritos" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Recebidas" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Suas mensagens recebidas" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Enviadas" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Suas mensagens enviadas" @@ -8484,6 +8525,12 @@ msgstr "Nuvem de etiquetas pessoais definidas pelos outros usuário" msgid "None" msgstr "Nenhuma" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Nome de arquivo inválido." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8737,19 +8784,9 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "O nome é muito extenso (máx. 255 caracteres)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "A organização é muito extensa (máx. 255 caracteres)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Está muito extenso. O tamanho máximo é de %d caracteres." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "O tamanho máximo da mensagem é de %d caracteres" - -#~ msgid " tagged %s" -#~ msgstr " etiquetada %s" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "O servidor não conseguiu manipular a quantidade de dados do POST (%s " +#~ "bytes) devido à sua configuração atual." diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po index 17a86e3738..57cc4c46ac 100644 --- a/locale/ru/LC_MESSAGES/statusnet.po +++ b/locale/ru/LC_MESSAGES/statusnet.po @@ -14,18 +14,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:42+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:47+0000\n" "Language-Team: Russian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -91,12 +91,14 @@ msgstr "Сохранить настройки доступа" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Сохранить" @@ -164,7 +166,7 @@ msgstr "%1$s и друзья, страница %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s и друзья" @@ -338,11 +340,13 @@ msgstr "Не удаётся сохранить профиль." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -761,7 +765,7 @@ msgstr "Вы не авторизованы." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Проблема с вашим ключом сессии. Пожалуйста, попробуйте ещё раз." @@ -783,12 +787,13 @@ msgstr "Ошибка базы данных при добавлении поль #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Нетиповое подтверждение формы." @@ -842,7 +847,7 @@ msgstr "Аккаунт" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1104,7 +1109,7 @@ msgstr "Нет такого вложения." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Нет имени." @@ -1121,7 +1126,7 @@ msgstr "Неверный размер." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Аватара" @@ -1298,7 +1303,7 @@ msgstr "Не удаётся сохранить информацию о блок #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Нет такой группы." @@ -1662,12 +1667,14 @@ msgstr "Особая тема" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Вы можете загрузить особую тему StatusNet в виде ZIP-архива." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Изменение фонового изображения" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Фон" @@ -1681,40 +1688,48 @@ msgstr "" "составляет %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Включить" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Отключить" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Включить или отключить показ фонового изображения." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Растянуть фоновое изображение" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Изменение цветовой гаммы" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Содержание" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Боковая панель" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Текст" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Ссылки" @@ -1726,15 +1741,18 @@ msgstr "Расширенный" msgid "Custom CSS" msgstr "Особый CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Использовать значения по умолчанию" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Восстановить оформление по умолчанию" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Восстановить значения по умолчанию" @@ -1742,11 +1760,12 @@ msgstr "Восстановить значения по умолчанию" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Сохранить" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Сохранить оформление" @@ -1882,7 +1901,7 @@ msgstr "Не удаётся обновить информацию о групп #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Не удаётся создать алиасы." @@ -2178,7 +2197,7 @@ msgstr "" "запись в число любимых?" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Любимые записи %s" @@ -2357,8 +2376,10 @@ msgstr "" "Настройте внешний вид группы, установив фоновое изображение и цветовую гамму " "на ваш выбор." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Не удаётся обновить ваше оформление." @@ -3323,25 +3344,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Уведомление не имеет профиля." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "Статус %1$s на %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Тип содержимого %s не поддерживается." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Только %s URL в простом HTTP, пожалуйста." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Неподдерживаемый формат данных." @@ -3836,7 +3857,7 @@ msgstr "1-64 латинских строчных буквы или цифры, #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Полное имя" @@ -3879,7 +3900,7 @@ msgstr "Биография" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4464,7 +4485,7 @@ msgid "Repeated!" msgstr "Повторено!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Ответы для %s" @@ -4603,7 +4624,7 @@ msgid "Description" msgstr "Описание" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Статистика" @@ -4720,95 +4741,95 @@ msgid "This is a way to share what you like." msgstr "Это способ поделиться тем, что вам нравится." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Группа %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Группа %1$s, страница %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Профиль группы" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Запись" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Алиасы" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Действия группы" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Лента записей группы %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Лента записей группы %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Лента записей группы %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF для группы %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Участники" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(пока ничего нет)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Все участники" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Создано" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4818,7 +4839,7 @@ msgstr "Участники" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4837,7 +4858,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4851,7 +4872,7 @@ msgstr "" "короткими сообщениями о своей жизни и интересах. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Администраторы" @@ -5641,7 +5662,7 @@ msgstr "Неверная подписка по умолчанию: «%1$s» не #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Профиль" @@ -5803,11 +5824,13 @@ msgstr "Не удаётся прочитать URL аватары «%s»" msgid "Wrong image type for avatar URL ‘%s’." msgstr "Неверный тип изображения для URL аватары «%s»." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Оформление профиля" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5940,31 +5963,50 @@ msgstr "Робин считает, что это невозможно." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Файл не может быть больше %1$d байт, тогда как отправленный вами файл " +"содержал %2$d байт. Попробуйте загрузить меньшую версию." +msgstr[1] "" +"Файл не может быть больше %1$d байт, тогда как отправленный вами файл " +"содержал %2$d байт. Попробуйте загрузить меньшую версию." +msgstr[2] "" "Файл не может быть больше %1$d байт, тогда как отправленный вами файл " "содержал %2$d байт. Попробуйте загрузить меньшую версию." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "Файл такого размера превысит вашу пользовательскую квоту в %d байта." +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +"Файл такого размера превысит вашу пользовательскую квоту в %d байта." +msgstr[1] "" +"Файл такого размера превысит вашу пользовательскую квоту в %d байта." +msgstr[2] "" +"Файл такого размера превысит вашу пользовательскую квоту в %d байта." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Файл такого размера превысит вашу месячную квоту в %d байта." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "Файл такого размера превысит вашу месячную квоту в %d байта." +msgstr[1] "Файл такого размера превысит вашу месячную квоту в %d байта." +msgstr[2] "Файл такого размера превысит вашу месячную квоту в %d байта." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Неверное имя файла." @@ -6093,31 +6135,32 @@ msgid "Problem saving notice." msgstr "Проблемы с сохранением записи." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Для saveKnownGroups указан неверный тип" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Проблемы с сохранением входящих сообщений группы." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Не удаётся сохранить информацию о локальной группе." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6215,22 +6258,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Не удаётся создать группу." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Не удаётся назначить URI группы." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Не удаётся назначить членство в группе." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Не удаётся сохранить информацию о локальной группе." @@ -6639,7 +6682,7 @@ msgid "User configuration" msgstr "Конфигурация пользователя" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Пользователь" @@ -7363,10 +7406,13 @@ msgstr "Авторизованные соединённые приложения msgid "Database error" msgstr "Ошибка базы данных" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Загрузить файл" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7374,16 +7420,29 @@ msgstr "" "Вы можете загрузить собственное фоновое изображение. Максимальный размер " "файла составляет 2МБ." -#: 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 "" -"Сервер не смог обработать столько POST-данных (%s байт) из-за текущей " -"конфигурации." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Включить" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Отключить" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Сбросить" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Оформление по умолчанию восстановлено." @@ -7892,7 +7951,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) добавил вашу запись в число своих любимых" @@ -7902,7 +7961,7 @@ msgstr "%s (@%s) добавил вашу запись в число своих #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7940,7 +7999,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7953,7 +8012,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) отправил запись для вашего внимания" @@ -7964,7 +8023,7 @@ msgstr "%s (@%s) отправил запись для вашего вниман #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8111,7 +8170,7 @@ msgstr "Не удаётся определить mime-тип файла." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8120,7 +8179,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8261,31 +8320,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Не удаётся вставить новую подписку." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Личное" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Ответы" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Любимое" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Входящие" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Ваши входящие сообщения" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Исходящие" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Ваши исходящие сообщения" @@ -8483,6 +8542,12 @@ msgstr "Облако тегов людей" msgid "None" msgstr "Нет тегов" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Неверное имя файла." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "Этот сервер не может обработать загруженные темы без поддержки ZIP." @@ -8749,19 +8814,9 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Имя слишком длинное (не больше 255 знаков)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Слишком длинное название организации (максимум 255 знаков)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Слишком длинная запись. Максимальная длина — %d знаков." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "Максимальная длина записи — %d символов, включая URL вложения." - -#~ msgid " tagged %s" -#~ msgstr " с тегом %s" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "Сервер не смог обработать столько POST-данных (%s байт) из-за текущей " +#~ "конфигурации." diff --git a/locale/statusnet.pot b/locale/statusnet.pot index ed52e7f84e..0baa50c926 100644 --- a/locale/statusnet.pot +++ b/locale/statusnet.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -80,12 +80,14 @@ msgstr "" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "" @@ -153,7 +155,7 @@ msgstr "" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "" @@ -319,11 +321,13 @@ msgstr "" #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -722,7 +726,7 @@ msgstr "" #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" @@ -743,12 +747,13 @@ msgstr "" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "" @@ -794,7 +799,7 @@ msgstr "" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1050,7 +1055,7 @@ msgstr "" #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "" @@ -1067,7 +1072,7 @@ msgstr "" #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "" @@ -1237,7 +1242,7 @@ msgstr "" #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "" @@ -1584,12 +1589,14 @@ msgstr "" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "" @@ -1601,40 +1608,48 @@ msgid "" msgstr "" #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "" @@ -1646,15 +1661,18 @@ msgstr "" msgid "Custom CSS" msgstr "" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "" @@ -1662,11 +1680,12 @@ msgstr "" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "" @@ -1800,7 +1819,7 @@ msgstr "" #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "" @@ -2075,7 +2094,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "" @@ -2249,8 +2268,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "" @@ -3131,25 +3152,25 @@ msgstr "" msgid "Notice has no profile." msgstr "" -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "" @@ -3622,7 +3643,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "" @@ -3663,7 +3684,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4198,7 +4219,7 @@ msgid "Repeated!" msgstr "" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "" @@ -4330,7 +4351,7 @@ msgid "Description" msgstr "" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "" @@ -4437,94 +4458,94 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 msgctxt "LABEL" msgid "Created" msgstr "" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 msgctxt "LABEL" msgid "Members" msgstr "" @@ -4533,7 +4554,7 @@ msgstr "" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4546,7 +4567,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4556,7 +4577,7 @@ msgid "" msgstr "" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "" @@ -5296,7 +5317,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "" @@ -5450,11 +5471,13 @@ msgstr "" msgid "Wrong image type for avatar URL ‘%s’." msgstr "" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5572,29 +5595,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "" @@ -5719,31 +5751,31 @@ msgid "Problem saving notice." msgstr "" #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "" #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -5838,22 +5870,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "" #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "" #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "" #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "" @@ -6253,7 +6285,7 @@ msgid "User configuration" msgstr "" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "" @@ -6906,23 +6938,38 @@ msgstr "" msgid "Database error" msgstr "" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" -#: lib/designsettings.php:283 -#, php-format -msgid "" -"The server was unable to handle that much POST data (%s bytes) due to its " -"current configuration." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +msgctxt "RADIO" +msgid "On" msgstr "" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +msgctxt "RADIO" +msgid "Off" +msgstr "" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +msgctxt "BUTTON" +msgid "Reset" +msgstr "" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "" @@ -7359,7 +7406,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "" @@ -7369,7 +7416,7 @@ msgstr "" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7391,7 +7438,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7401,7 +7448,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "" @@ -7412,7 +7459,7 @@ msgstr "" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7531,7 +7578,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7540,7 +7587,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -7679,31 +7726,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "" -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "" @@ -7900,6 +7947,11 @@ msgstr "" msgid "None" msgstr "" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +msgid "Invalid theme name." +msgstr "" + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po index 9cc6991dc6..88ff10436c 100644 --- a/locale/sv/LC_MESSAGES/statusnet.po +++ b/locale/sv/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:43+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:48+0000\n" "Language-Team: Swedish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -87,12 +87,14 @@ msgstr "Spara inställningar för åtkomst" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Spara" @@ -160,7 +162,7 @@ msgstr "%1$s och vänner, sida %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s och vänner" @@ -332,11 +334,13 @@ msgstr "Kunde inte spara profil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -748,7 +752,7 @@ msgstr "Du har inte tillstånd." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Det var ett problem med din sessions-token. Var vänlig försök igen." @@ -770,12 +774,13 @@ msgstr "Databasfel vid infogning av OAuth-applikationsanvändare." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Oväntat inskick av formulär." @@ -828,7 +833,7 @@ msgstr "Konto" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1090,7 +1095,7 @@ msgstr "Ingen sådan bilaga." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Inget smeknamn." @@ -1107,7 +1112,7 @@ msgstr "Ogiltig storlek." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1284,7 +1289,7 @@ msgstr "Misslyckades att spara blockeringsinformation." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Ingen sådan grupp." @@ -1651,12 +1656,14 @@ msgstr "Anpassat tema" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Du kan ladda upp ett eget StatusNet-tema som ett .ZIP-arkiv." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Ändra bakgrundsbild" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Bakgrund" @@ -1670,40 +1677,48 @@ msgstr "" "filstorleken är %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "På" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Av" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Sätt på eller stäng av bakgrundsbild." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Upprepa bakgrundsbild" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Byt färger" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Innehåll" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Sidofält" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Länkar" @@ -1715,15 +1730,18 @@ msgstr "Avancerat" msgid "Custom CSS" msgstr "Anpassad CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Använd standardvärden" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Återställ standardutseende" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Återställ till standardvärde" @@ -1731,11 +1749,12 @@ msgstr "Återställ till standardvärde" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Spara" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Spara utseende" @@ -1871,7 +1890,7 @@ msgstr "Kunde inte uppdatera grupp." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Kunde inte skapa alias." @@ -2158,7 +2177,7 @@ msgstr "" "att lägga en notis till dina favoriter!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%ss favoritnotiser" @@ -2336,8 +2355,10 @@ msgid "" msgstr "" "Anpassa hur din grupp ser ut genom att välja bakgrundbild och färgpalett." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Kunde inte uppdatera dina utseendeinställningar." @@ -3297,25 +3318,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Notisen har ingen profil." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$ss status den %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Innehållstyp %s stödjs inte." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "Endast %s-webbadresser över vanlig HTTP." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Ett dataformat som inte stödjs" @@ -3813,7 +3834,7 @@ msgstr "1-64 små bokstäver eller nummer, inga punkter eller mellanslag" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Fullständigt namn" @@ -3855,7 +3876,7 @@ msgstr "Biografi" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4445,7 +4466,7 @@ msgid "Repeated!" msgstr "Upprepad!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Svarat till %s" @@ -4581,7 +4602,7 @@ msgid "Description" msgstr "Beskrivning" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Statistik" @@ -4698,95 +4719,95 @@ msgid "This is a way to share what you like." msgstr "Detta är ett sätt att dela med av det du gillar." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s grupp" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s grupp, sida %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Grupprofil" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Notis" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Alias" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Åtgärder för grupp" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Flöde av notiser för %s grupp (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Flöde av notiser för %s grupp (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Flöde av notiser för %s grupp (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF för %s grupp" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Medlemmar" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Ingen)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Alla medlemmar" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Skapad" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4796,7 +4817,7 @@ msgstr "Medlemmar" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4814,7 +4835,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4828,7 +4849,7 @@ msgstr "" "sina liv och intressen. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Administratörer" @@ -5610,7 +5631,7 @@ msgstr "Ogiltig standardprenumeration: '%1$s' är inte användare." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5776,11 +5797,13 @@ msgstr "Kan inte läsa avatar-URL '%s'." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Fel bildtyp för avatar-URL '%s'." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Profilutseende" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5912,31 +5935,44 @@ msgstr "Robin tycker att något är omöjligt" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Ingen fil får vara större än %1$d byte och filen du skickade var %2$d byte. " +"Prova att ladda upp en mindre version." +msgstr[1] "" "Ingen fil får vara större än %1$d byte och filen du skickade var %2$d byte. " "Prova att ladda upp en mindre version." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "En så här stor fil skulle överskrida din användarkvot på %d byte." +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "En så här stor fil skulle överskrida din användarkvot på %d byte." +msgstr[1] "En så här stor fil skulle överskrida din användarkvot på %d byte." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "En sådan här stor fil skulle överskrida din månatliga kvot på %d byte." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +"En sådan här stor fil skulle överskrida din månatliga kvot på %d byte." +msgstr[1] "" +"En sådan här stor fil skulle överskrida din månatliga kvot på %d byte." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Ogiltigt filnamn." @@ -6065,31 +6101,32 @@ msgid "Problem saving notice." msgstr "Problem med att spara notis." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Dålig typ tillhandahållen saveKnownGroups" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Problem med att spara gruppinkorg." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Kunde inte spara lokal gruppinformation." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6184,22 +6221,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Kunde inte skapa grupp." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Kunde inte ställa in grupp-URI." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Kunde inte ställa in gruppmedlemskap." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Kunde inte spara lokal gruppinformation." @@ -6605,7 +6642,7 @@ msgid "User configuration" msgstr "Konfiguration av användare" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Användare" @@ -7315,10 +7352,13 @@ msgstr "Tillåt anslutna applikationer" msgid "Database error" msgstr "Databasfel" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Ladda upp fil" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7326,16 +7366,29 @@ msgstr "" "Du kan ladda upp din personliga bakgrundbild. Den maximala filstorleken är " "2MB." -#: 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 "" -"Servern kunde inte hantera så mycket POST-data (%s byte) på grund av sin " -"nuvarande konfiguration." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "På" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Av" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Återställ" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Standardvärden för utseende återställda." @@ -7834,7 +7887,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) lade till din notis som en favorit" @@ -7844,7 +7897,7 @@ msgstr "%s (@%s) lade till din notis som en favorit" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7882,7 +7935,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7895,7 +7948,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) skickade en notis för din uppmärksamhet" @@ -7906,7 +7959,7 @@ msgstr "%s (@%s) skickade en notis för din uppmärksamhet" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8054,7 +8107,7 @@ msgstr "Kunde inte fastställa filens MIME-typ." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8065,7 +8118,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "%s är en filtyp som saknar stöd på denna server." @@ -8206,31 +8259,31 @@ msgstr "Duplicera notis." msgid "Couldn't insert new subscription." msgstr "Kunde inte infoga ny prenumeration." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Personligt" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Svar" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Favoriter" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Inkorg" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Dina inkommande meddelanden" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Utkorg" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Dina skickade meddelanden" @@ -8428,6 +8481,12 @@ msgstr "Taggmoln för person, såsom taggats" msgid "None" msgstr "Ingen" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Ogiltigt filnamn." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "Denna server kan inte hantera temauppladdningar utan ZIP-stöd." @@ -8678,19 +8737,9 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Namnet är för långt (max 255 tecken)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Organisation är för lång (max 255 tecken)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Det är för långt. Maximal notisstorlek är %d tecken." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "Maximal notisstorlek är %d tecken, inklusive webbadress för bilaga." - -#~ msgid " tagged %s" -#~ msgstr "taggade %s" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "" +#~ "Servern kunde inte hantera så mycket POST-data (%s byte) på grund av sin " +#~ "nuvarande konfiguration." diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po index 5057577d14..320dbdec0a 100644 --- a/locale/te/LC_MESSAGES/statusnet.po +++ b/locale/te/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:45+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:49+0000\n" "Language-Team: Telugu \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -85,12 +85,14 @@ msgstr "అందుబాటు అమరికలను భద్రపరచ #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "భద్రపరచు" @@ -158,7 +160,7 @@ msgstr "%1$s మరియు మిత్రులు, పేజీ %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s మరియు మిత్రులు" @@ -328,11 +330,13 @@ msgstr "ప్రొఫైలుని భద్రపరచలేకున్ #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -739,7 +743,7 @@ msgstr "మీకు అధీకరణ లేదు." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" @@ -761,12 +765,13 @@ msgstr "అవతారాన్ని పెట్టడంలో పొరప #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "" @@ -812,7 +817,7 @@ msgstr "ఖాతా" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1073,7 +1078,7 @@ msgstr "అటువంటి జోడింపు లేదు." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "పేరు" @@ -1090,7 +1095,7 @@ msgstr "తప్పుడు పరిమాణం." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "అవతారం" @@ -1266,7 +1271,7 @@ msgstr "నిరోధపు సమాచారాన్ని భద్రప #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "అటువంటి గుంపు లేదు." @@ -1627,12 +1632,14 @@ msgstr "సైటు అలంకారం" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "నేపథ్య చిత్రాన్ని మార్చు" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "నేపథ్యం" @@ -1644,42 +1651,50 @@ msgid "" msgstr "సైటుకి మీరు నేపథ్యపు చిత్రాన్ని ఎక్కించవచ్చు. గరిష్ఠ ఫైలు పరిమాణం %1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "ఆన్" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "ఆఫ్" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 #, fuzzy msgid "Turn background image on or off." msgstr "నేపథ్య చిత్రాన్ని మార్చు" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 #, fuzzy msgid "Tile background image" msgstr "నేపథ్య చిత్రాన్ని మార్చు" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "రంగులను మార్చు" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "విషయం" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "పక్కపట్టీ" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "పాఠ్యం" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "లంకెలు" @@ -1691,16 +1706,19 @@ msgstr "ఉన్నత" msgid "Custom CSS" msgstr "ప్రత్యేక CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "అప్రమేయాలని ఉపయోగించు" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 #, fuzzy msgid "Restore default designs" msgstr "అప్రమేయాలని ఉపయోగించు" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 #, fuzzy msgid "Reset back to default" msgstr "అప్రమేయాలని ఉపయోగించు" @@ -1709,11 +1727,12 @@ msgstr "అప్రమేయాలని ఉపయోగించు" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "భద్రపరచు" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "రూపురేఖలని భద్రపరచు" @@ -1851,7 +1870,7 @@ msgstr "గుంపుని తాజాకరించలేకున్న #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "మారుపేర్లని సృష్టించలేకపోయాం." @@ -2141,7 +2160,7 @@ msgid "" msgstr "[ఒక ఖాతాని నమోదుచేసుకుని](%%action.register%%) మీరే మొదట వ్రాసేవారు ఎందుకు కాకూడదు!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%sకి ఇష్టమైన నోటీసులు" @@ -2321,8 +2340,10 @@ msgid "" "palette of your choice." msgstr "నేపథ్య చిత్రం మరియు రంగుల ఎంపికతో మీ గుంపు ఎలా కనిపించాలో మలచుకోండి." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "మీ రూపురేఖలని తాజాకరించలేకపోయాం." @@ -3254,25 +3275,25 @@ msgstr "" msgid "Notice has no profile." msgstr "నోటీసుకి ప్రొఫైలు లేదు." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%2$sలో %1$s యొక్క స్థితి" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "విషయ రకం " #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "" @@ -3771,7 +3792,7 @@ msgstr "1-64 చిన్నబడి అక్షరాలు లేదా అ #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "పూర్తి పేరు" @@ -3813,7 +3834,7 @@ msgstr "స్వపరిచయం" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4389,7 +4410,7 @@ msgid "Repeated!" msgstr "పునరావృతించారు!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "%sకి స్పందనలు" @@ -4527,7 +4548,7 @@ msgid "Description" msgstr "వివరణ" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "గణాంకాలు" @@ -4639,95 +4660,95 @@ msgid "This is a way to share what you like." msgstr "మీకు నచ్చినవి పంచుకోడానికి ఇదొక మార్గం." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s గుంపు" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s గుంపు , %2$dవ పేజీ" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "గుంపు ప్రొఫైలు" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "గమనిక" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "మారుపేర్లు" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "గుంపు చర్యలు" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s కొరకు స్పందనల ఫీడు (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s కొరకు స్పందనల ఫీడు (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s కొరకు స్పందనల ఫీడు (ఆటమ్)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "%s గుంపు" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "సభ్యులు" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(ఏమీలేదు)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "అందరు సభ్యులూ" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "సృష్టితం" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4737,7 +4758,7 @@ msgstr "సభ్యులు" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4756,7 +4777,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, fuzzy, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4772,7 +4793,7 @@ msgstr "" "doc.help%%%%))" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "నిర్వాహకులు" @@ -5549,7 +5570,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "ప్రొఫైలు" @@ -5705,11 +5726,13 @@ msgstr "'%s' అనే అవతారపు URL తప్పు" msgid "Wrong image type for avatar URL ‘%s’." msgstr "'%s' కొరకు తప్పుడు బొమ్మ రకం" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "ఫ్రొఫైలు రూపురేఖలు" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 #, fuzzy msgid "" "Customize the way your profile looks with a background image and a colour " @@ -5829,29 +5852,38 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" +msgstr[1] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "తప్పుడు దస్త్రపుపేరు.." @@ -5979,32 +6011,32 @@ msgid "Problem saving notice." msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "స్థానిక గుంపుని తాజాకరించలేకున్నాం." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6101,22 +6133,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "గుంపుని సృష్టించలేకపోయాం." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "గుంపుని సృష్టించలేకపోయాం." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "గుంపు సభ్యత్వాన్ని అమర్చలేకపోయాం." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "స్థానిక గుంపుని తాజాకరించలేకున్నాం." @@ -6525,7 +6557,7 @@ msgid "User configuration" msgstr "వాడుకరి స్వరూపణం" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "వాడుకరి" @@ -7204,23 +7236,41 @@ msgstr "అధీకృత అనుసంధాన ఉపకరణాలు" msgid "Database error" msgstr "" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "ఫైలుని ఎక్కించు" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "మీ వ్యక్తిగత నేపథ్యపు చిత్రాన్ని మీరు ఎక్కించవచ్చు. గరిష్ఠ ఫైలు పరిమాణం 2మెబై." -#: 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 "" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "ఆన్" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "ఆఫ్" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "రీసెట్" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "" @@ -7708,7 +7758,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%1$s (@%2$s) మీ నోటీసుని ఇష్టపడ్డారు" @@ -7718,7 +7768,7 @@ msgstr "%1$s (@%2$s) మీ నోటీసుని ఇష్టపడ్డా #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7756,7 +7806,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7769,7 +7819,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%1$s (@%2$s) మీ దృష్టికి ఒక నోటిసుని పంపించారు" @@ -7780,7 +7830,7 @@ msgstr "%1$s (@%2$s) మీ దృష్టికి ఒక నోటిసు #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7925,7 +7975,7 @@ msgstr "ఇష్టాంశాన్ని తొలగించలేకప #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7934,7 +7984,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8079,31 +8129,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "కొత్త చందాని చేర్చలేకపోయాం." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "వ్యక్తిగత" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "స్పందనలు" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "ఇష్టాంశాలు" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "వచ్చినవి" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "మీకు వచ్చిన సందేశాలు" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "పంపినవి" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "మీరు పంపిన సందేశాలు" @@ -8303,6 +8353,12 @@ msgstr "" msgid "None" msgstr "ఏమీలేదు" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "తప్పుడు దస్త్రపుపేరు.." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8550,16 +8606,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "పేరు చాలా పెద్దగా ఉంది (గరిష్ఠంగా 255 అక్షరాలు)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "సంస్థ పేరు మరీ పెద్దగా ఉంది (255 అక్షరాలు గరిష్ఠం)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "అది చాలా పొడవుంది. గరిష్ఠ నోటీసు పరిమాణం %d అక్షరాలు." - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "గరిష్ఠ నోటీసు పొడవు %d అక్షరాలు, జోడింపు URLని కలుపుకుని." diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po index a99fd9bc4a..50ec083e64 100644 --- a/locale/tr/LC_MESSAGES/statusnet.po +++ b/locale/tr/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:46+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:50+0000\n" "Language-Team: Turkish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -87,12 +87,14 @@ msgstr "Erişim ayarlarını kaydet" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Kaydet" @@ -160,7 +162,7 @@ msgstr "%1$s ve arkadaşları, sayfa %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s ve arkadaşları" @@ -340,11 +342,13 @@ msgstr "Profil kaydedilemedi." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -749,7 +753,7 @@ msgstr "Takip talebine izin verildi" #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "Oturum belirtecinizde bir sorun var. Lütfen, tekrar deneyin." @@ -771,12 +775,13 @@ msgstr "OAuth uygulama kullanıcısı eklerken veritabanı hatası." #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Beklenmeğen form girdisi." @@ -831,7 +836,7 @@ msgstr "Hesap" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1093,7 +1098,7 @@ msgstr "Böyle bir durum mesajı yok." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Takma ad yok" @@ -1110,7 +1115,7 @@ msgstr "Geçersiz büyüklük." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Avatar" @@ -1289,7 +1294,7 @@ msgstr "Engelleme bilgisinin kaydedilmesi başarısızlığa uğradı." #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Böyle bir kullanıcı yok." @@ -1656,12 +1661,14 @@ msgstr "Özel tema" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Özel bir StatusNet temasını .ZIP arşivi olarak yükleyebilirsiniz." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Arkaplan resmini değiştir" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Arkaplan" @@ -1675,40 +1682,48 @@ msgstr "" "$s'dir." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Açık" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Kapalı" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Arkaplan resmini açın ya da kapatın." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Arkaplan resmini döşe" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Renkleri değiştir" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "İçerik" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Kenar Çubuğu" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Metin" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Bağlantılar" @@ -1720,15 +1735,18 @@ msgstr "Gelişmiş" msgid "Custom CSS" msgstr "Özel CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "Öntanımlıları kullan" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Öntanımlıya geri dön" @@ -1736,11 +1754,12 @@ msgstr "Öntanımlıya geri dön" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Kaydet" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Dizaynı kaydet" @@ -1876,7 +1895,7 @@ msgstr "Grup güncellenemedi." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Kullanıcı güncellenemedi." @@ -2167,7 +2186,7 @@ msgid "" msgstr "" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s kullanıcısının favori durum mesajları" @@ -2346,8 +2365,10 @@ msgid "" "palette of your choice." msgstr "" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 #, fuzzy msgid "Couldn't update your design." msgstr "Kullanıcı güncellenemedi." @@ -3263,25 +3284,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Kullanıcının profili yok." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s'in %2$s'deki durum mesajları " #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, fuzzy, php-format msgid "Content type %s not supported." msgstr "Bağlan" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Desteklenen bir veri biçimi değil." @@ -3783,7 +3804,7 @@ msgstr "" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Tam İsim" @@ -3826,7 +3847,7 @@ msgstr "Hakkında" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4397,7 +4418,7 @@ msgid "Repeated!" msgstr "Yarat" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "%s için cevaplar" @@ -4535,7 +4556,7 @@ msgid "Description" msgstr "Tanım" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "İstatistikler" @@ -4643,95 +4664,95 @@ msgid "This is a way to share what you like." msgstr "" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, fuzzy, php-format msgid "%1$s group, page %2$d" msgstr "Bütün abonelikler" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Kullanıcının profili yok." #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "Bağlantı" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Not" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Diğerisimler" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s için durum RSS beslemesi" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, fuzzy, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s için durum RSS beslemesi" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, fuzzy, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s için durum RSS beslemesi" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, fuzzy, php-format msgid "FOAF for %s group" msgstr "%s için durum RSS beslemesi" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Üyeler" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Yok)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Tüm üyeler" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Oluşturuldu" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4741,7 +4762,7 @@ msgstr "Üyeler" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4754,7 +4775,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4764,7 +4785,7 @@ msgid "" msgstr "" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Yöneticiler" @@ -5543,7 +5564,7 @@ msgstr "" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Profil" @@ -5705,12 +5726,14 @@ msgstr "Avatar URLi '%s' okunamıyor" msgid "Wrong image type for avatar URL ‘%s’." msgstr "%s için yanlış resim türü" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 #, fuzzy msgid "Profile design" msgstr "Profil ayarları" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5828,29 +5851,35 @@ msgstr "" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 #, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 #, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 #, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Geçersiz dosya ismi." @@ -5982,32 +6011,32 @@ msgid "Problem saving notice." msgstr "Durum mesajını kaydederken hata oluştu." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 #, fuzzy msgid "Problem saving group inbox." msgstr "Durum mesajını kaydederken hata oluştu." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, fuzzy, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Profil kaydedilemedi." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6104,22 +6133,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Kullanıcı güncellenemedi." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Profil kaydedilemedi." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Kullanıcı güncellenemedi." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Profil kaydedilemedi." @@ -6530,7 +6559,7 @@ msgid "User configuration" msgstr "Onay kodu yok." #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Kullanıcı" @@ -7201,11 +7230,14 @@ msgstr "" msgid "Database error" msgstr "" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 #, fuzzy msgid "Upload file" msgstr "Yükle" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 #, fuzzy msgid "" @@ -7213,16 +7245,29 @@ msgid "" msgstr "" "Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?" -#: 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 "" -"Sunucu, şu anki yapılandırması dolayısıyla bu kadar çok POST verisiyle (%s " -"bytes) başa çıkamıyor." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Açık" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Kapalı" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Sıfırla" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "" @@ -7673,7 +7718,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%1$s %2$s'da durumunuzu takip ediyor" @@ -7683,7 +7728,7 @@ msgstr "%1$s %2$s'da durumunuzu takip ediyor" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7705,7 +7750,7 @@ msgid "" msgstr "" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7715,7 +7760,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "" @@ -7726,7 +7771,7 @@ msgstr "" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7849,7 +7894,7 @@ msgstr "Kullanıcı güncellenemedi." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7858,7 +7903,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -8005,31 +8050,31 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "Yeni abonelik eklenemedi." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Kişisel" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Cevaplar" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "" @@ -8238,6 +8283,12 @@ msgstr "" msgid "None" msgstr "" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Geçersiz dosya ismi." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -8485,17 +8536,9 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "İsim çok uzun (maksimum: 255 karakter)." - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Organizasyon çok uzun (maksimum 255 karakter)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Bu çok uzun. Maksimum durum mesajı boyutu %d karakterdir." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "Maksimum durum mesajı boyutu, eklenti bağlantıları dahil %d karakterdir." +#~ "Sunucu, şu anki yapılandırması dolayısıyla bu kadar çok POST verisiyle (%" +#~ "s bytes) başa çıkamıyor." diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po index 370d97736c..f32b088655 100644 --- a/locale/uk/LC_MESSAGES/statusnet.po +++ b/locale/uk/LC_MESSAGES/statusnet.po @@ -12,18 +12,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:51+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -90,12 +90,14 @@ msgstr "Зберегти параметри доступу" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "Зберегти" @@ -163,7 +165,7 @@ msgstr "%1$s та друзі, сторінка %2$d" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s з друзями" @@ -336,11 +338,13 @@ msgstr "Не вдалося зберегти профіль." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -754,7 +758,7 @@ msgstr "Токен запиту вже авторизовано." #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "" "Виникли певні проблеми з токеном поточної сесії. Спробуйте знов, будь ласка." @@ -776,12 +780,13 @@ msgstr "Помилка бази даних при додаванні парам #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "Несподіване представлення форми." @@ -834,7 +839,7 @@ msgstr "Акаунт" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1102,7 +1107,7 @@ msgstr "Такого вкладення немає." #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "Немає імені." @@ -1119,7 +1124,7 @@ msgstr "Недійсний розмір." #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "Аватара" @@ -1292,7 +1297,7 @@ msgstr "Збереження інформації про блокування з #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "Такої спільноти не існує." @@ -1647,12 +1652,14 @@ msgstr "Своя тема" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "Ви можете завантажити свою тему для сайту StatusNet як .ZIP архів." -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "Змінити фонове зображення" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "Фон" @@ -1666,40 +1673,48 @@ msgstr "" "%1$s." #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "Увімк." #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "Вимк." -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "Увімкнути або вимкнути фонове зображення." -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "Замостити фон" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "Змінити кольори" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "Зміст" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "Сайдбар" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "Текст" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "Посилання" @@ -1711,15 +1726,18 @@ msgstr "Додатково" msgid "Custom CSS" msgstr "Свій CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "За замовч." -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "Оновити налаштування за замовчуванням" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "Повернутись до початкових налаштувань" @@ -1727,11 +1745,12 @@ msgstr "Повернутись до початкових налаштувань" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "Зберегти" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "Зберегти дизайн" @@ -1776,9 +1795,8 @@ msgstr "Потрібне ім’я." #. TRANS: Validation error shown when providing too long a name in the "Edit application" form. #: actions/editapplication.php:188 actions/newapplication.php:169 -#, fuzzy msgid "Name is too long (maximum 255 characters)." -msgstr "Ім’я задовге (не більше 255 знаків)." +msgstr "Ім’я надто довге (не більше 255 знаків)." #. TRANS: Validation error shown when providing a name for an application that already exists in the "Edit application" form. #: actions/editapplication.php:192 actions/newapplication.php:166 @@ -1868,7 +1886,7 @@ msgstr "Не вдалося оновити спільноту." #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "Неможна призначити додаткові імена." @@ -2152,7 +2170,7 @@ msgstr "" "дописи до улюблених!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "Обрані дописи %s" @@ -2332,8 +2350,10 @@ msgstr "" "Налаштуйте вигляд сторінки спільноти, використовуючи фонове зображення і " "кольори на свій смак." +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "Не вдалося оновити дизайн." @@ -2730,7 +2750,7 @@ msgstr[2] "Ви вже підписані до цих користувачів:" #. TRANS: Used as list item for already subscribed users (%1$s is nickname, %2$s is e-mail address). #. TRANS: Used as list item for already registered people (%1$s is nickname, %2$s is e-mail address). #: actions/invite.php:145 actions/invite.php:159 -#, fuzzy, php-format +#, php-format msgctxt "INVITE" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2921,9 +2941,8 @@ msgstr "" "використовувати варіант «Всі права захищені»." #: actions/licenseadminpanel.php:156 -#, fuzzy msgid "Invalid license title. Maximum length is 255 characters." -msgstr "Помилковий назва ліцензії. Максимальна довжина — 255 символів." +msgstr "Помилкова назва ліцензії. Максимальна довжина — 255 символів." #: actions/licenseadminpanel.php:168 msgid "Invalid license URL." @@ -3304,25 +3323,25 @@ msgstr "" msgid "Notice has no profile." msgstr "Допис не має профілю." -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s має статус на %2$s" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "Тип змісту %s не підтримується." #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "URL-адреса %s лише в простому HTTP, будь ласка." #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "Такий формат даних не підтримується." @@ -3373,9 +3392,8 @@ msgstr "Показувати або приховувати дизайни сто #. TRANS: Form validation error for form "Other settings" in user profile. #: actions/othersettings.php:162 -#, fuzzy msgid "URL shortening service is too long (maximum 50 characters)." -msgstr "Сервіс скорочення URL-адрес надто довгий (50 знаків максимум)." +msgstr "Сервіс скорочення URL-адрес надто довгий (50 символів максимум)." #: actions/otp.php:69 msgid "No user ID specified." @@ -3802,7 +3820,7 @@ msgstr "1-64 рядкових літер і цифр, ніякої пункту #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "Повне ім’я" @@ -3844,7 +3862,7 @@ msgstr "Про себе" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4186,7 +4204,6 @@ msgid "Unexpected password reset." msgstr "Несподіване скидання паролю." #: actions/recoverpassword.php:365 -#, fuzzy msgid "Password must be 6 characters or more." msgstr "Пароль має складатись з 6-ти або більше знаків." @@ -4429,7 +4446,7 @@ msgid "Repeated!" msgstr "Повторено!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "Відповіді до %s" @@ -4567,7 +4584,7 @@ msgid "Description" msgstr "Опис" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "Статистика" @@ -4684,94 +4701,94 @@ msgid "This is a way to share what you like." msgstr "Це спосіб поділитись з усіма тим, що вам подобається." #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "Спільнота %s" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "Спільнота %1$s, сторінка %2$d" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "Профіль спільноти" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "Зауваження" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "Додаткові імена" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "Дії спільноти" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "Стрічка дописів спільноти %s (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "Стрічка дописів спільноти %s (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "Стрічка дописів спільноти %s (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "FOAF спільноти %s" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "Учасники" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Пусто)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "Всі учасники" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 msgctxt "LABEL" msgid "Created" msgstr "Створено" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 msgctxt "LABEL" msgid "Members" msgstr "Учасники" @@ -4780,7 +4797,7 @@ msgstr "Учасники" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4799,7 +4816,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4813,7 +4830,7 @@ msgstr "" "спільноти роблять короткі дописи про своє життя та інтереси. " #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "Адміни" @@ -4847,16 +4864,16 @@ msgstr "Допис видалено." #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #: actions/showstream.php:70 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s" -msgstr "%1$s, сторінка %2$d" +msgstr "Дописи %1$s позначені теґом %2$s" #. TRANS: Page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$s is the hash tag, %1$d is the page number. #: actions/showstream.php:74 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s, page %3$d" -msgstr "Дописи з теґом %1$s, сторінка %2$d" +msgstr "Дописи %1$s позначені теґом %2$s, сторінка %3$d" #. TRANS: Extended page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$d is the page number. @@ -4900,9 +4917,9 @@ msgstr "FOAF для %s" #. TRANS: First sentence of empty list message for a stream. $1%s is a user nickname. #: actions/showstream.php:211 -#, fuzzy, php-format +#, php-format msgid "This is the timeline for %1$s, but %1$s hasn't posted anything yet." -msgstr "Це стрічка дописів %1$s, але %2$s ще нічого не написав." +msgstr "Це стрічка дописів %1$s, але %1$s ще нічого не написав." #. TRANS: Second sentence of empty list message for a stream for the user themselves. #: actions/showstream.php:217 @@ -5087,7 +5104,6 @@ msgstr "Не вдається зберегти повідомлення сайт #. TRANS: Client error displayed when a site-wide notice was longer than allowed. #: actions/sitenoticeadminpanel.php:112 -#, fuzzy msgid "Maximum length for the site-wide notice is 255 characters." msgstr "Максимальна довжина повідомлення сайту становить 255 символів." @@ -5098,7 +5114,6 @@ msgstr "Текст повідомлення" #. TRANS: Tooltip for site-wide notice text field in admin panel. #: actions/sitenoticeadminpanel.php:179 -#, fuzzy msgid "Site-wide notice text (255 characters maximum; HTML allowed)" msgstr "" "Текст повідомлення сайту (255 символів максимум; деякий HTML дозволено)" @@ -5583,20 +5598,19 @@ msgstr "Помилкове обмеження біо. Це мають бути #. TRANS: Form validation error in user admin panel when welcome text is too long. #: actions/useradminpanel.php:154 -#, fuzzy msgid "Invalid welcome text. Maximum length is 255 characters." msgstr "Помилковий текст привітання. Максимальна довжина — 255 символів." #. TRANS: Client error displayed when trying to set a non-existing user as default subscription for new #. TRANS: users in user admin panel. %1$s is the invalid nickname. #: actions/useradminpanel.php:166 -#, fuzzy, php-format +#, php-format msgid "Invalid default subscripton: '%1$s' is not a user." msgstr "Помилкова підписка за замовчуванням: «%1$s» не є користувачем." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "Профіль" @@ -5622,9 +5636,8 @@ msgstr "Привітання нового користувача" #. TRANS: Tooltip in user admin panel for setting new user welcome text. #: actions/useradminpanel.php:238 -#, fuzzy msgid "Welcome text for new users (maximum 255 characters)." -msgstr "Текст привітання нових користувачів (255 знаків)." +msgstr "Текст привітання нових користувачів (не більше 255 символів)." #. TRANS: Field label in user admin panel for setting default subscription for new users. #: actions/useradminpanel.php:244 @@ -5761,11 +5774,13 @@ msgstr "Не можна прочитати URL аватари «%s»." msgid "Wrong image type for avatar URL ‘%s’." msgstr "Неправильний тип зображення для URL-адреси аватари «%s»." -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "Дизайн профілю" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5899,31 +5914,47 @@ msgstr "Робін вважає, що це неможливо." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" +"Ні, файл не може бути більшим за %1$d байтів, а те, що ви хочете надіслати, " +"важить %2$d байтів. Спробуйте завантажити меншу версію." +msgstr[1] "" +"Ні, файл не може бути більшим за %1$d байтів, а те, що ви хочете надіслати, " +"важить %2$d байтів. Спробуйте завантажити меншу версію." +msgstr[2] "" "Ні, файл не може бути більшим за %1$d байтів, а те, що ви хочете надіслати, " "важить %2$d байтів. Спробуйте завантажити меншу версію." #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "Розміри цього файлу перевищують вашу квоту на %d байтів." +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "Розміри цього файлу перевищують вашу квоту на %d байтів." +msgstr[1] "Розміри цього файлу перевищують вашу квоту на %d байтів." +msgstr[2] "Розміри цього файлу перевищують вашу квоту на %d байтів." #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "Розміри цього файлу перевищують вашу місячну квоту на %d байтів." +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "Розміри цього файлу перевищують вашу місячну квоту на %d байтів." +msgstr[1] "Розміри цього файлу перевищують вашу місячну квоту на %d байтів." +msgstr[2] "Розміри цього файлу перевищують вашу місячну квоту на %d байтів." #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "Невірне ім’я файлу." @@ -6052,32 +6083,33 @@ msgid "Problem saving notice." msgstr "Проблема при збереженні допису." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "Задається невірний тип для saveKnownGroups" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "Проблема при збереженні вхідних дописів спільноти." #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "Не вдалося зберегти відповідь для %1$d, %2$d." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 -#, fuzzy, php-format +#: classes/Profile.php:164 classes/User_group.php:247 +#, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6172,22 +6204,22 @@ msgid "Single-user mode code called when not enabled." msgstr "Код для однокористувацького режиму називається, коли не ввімкнуто." #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "Не вдалося створити нову спільноту." #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "Не вдалося встановити URI спільноти." #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "Не вдалося встановити членство." #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "Не вдалося зберегти інформацію про локальну спільноту." @@ -6241,7 +6273,7 @@ msgstr "Сторінка без заголовку" #: lib/action.php:310 msgctxt "TOOLTIP" msgid "Show more" -msgstr "" +msgstr "Розгорнути" #. TRANS: DT element for primary navigation menu. String is hidden in default CSS. #: lib/action.php:526 @@ -6594,7 +6626,7 @@ msgid "User configuration" msgstr "Конфігурація користувача" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "Користувач" @@ -6947,7 +6979,7 @@ msgstr "%1$s залишив спільноту %2$s." #. TRANS: Whois output. #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL. #: lib/command.php:426 -#, fuzzy, php-format +#, php-format msgctxt "WHOIS" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6994,11 +7026,11 @@ msgstr "" #. TRANS: Message given if content is too long. %1$sd is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:488 -#, fuzzy, php-format +#, php-format msgid "Message too long - maximum is %1$d character, you sent %2$d." msgid_plural "Message too long - maximum is %1$d characters, you sent %2$d." msgstr[0] "" -"Повідомлення надто довге, максимум становить %1$d символів, натомість ви " +"Повідомлення надто довге, максимум становить %1$d символ, натомість ви " "надсилаєте %2$d." msgstr[1] "" "Повідомлення надто довге, максимум становить %1$d символів, натомість ви " @@ -7027,15 +7059,15 @@ msgstr "Помилка при повторенні допису." #. TRANS: Message given if content of a notice for a reply is too long. %1$d is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. #: lib/command.php:591 -#, fuzzy, php-format +#, php-format msgid "Notice too long - maximum is %1$d character, you sent %2$d." msgid_plural "Notice too long - maximum is %1$d characters, you sent %2$d." msgstr[0] "" -"Допис надто довгий, максимум становить %1$d символів, а ви надсилаєте %2$d." +"Допис надто довгий, максимум становить %1$d символ, ви надсилаєте %2$d." msgstr[1] "" -"Допис надто довгий, максимум становить %1$d символів, а ви надсилаєте %2$d." +"Допис надто довгий, максимум становить %1$d символів, ви надсилаєте %2$d." msgstr[2] "" -"Допис надто довгий, максимум становить %1$d символів, а ви надсилаєте %2$d." +"Допис надто довгий, максимум становить %1$d символів, ви надсилаєте %2$d." #. TRANS: Text shown having sent a reply to a notice successfully. #. TRANS: %s is the nickname of the user of the notice the reply was sent to. @@ -7312,10 +7344,13 @@ msgstr "Авторизовані під’єднані додатки" msgid "Database error" msgstr "Помилка бази даних" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "Завантажити файл" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." @@ -7323,16 +7358,29 @@ msgstr "" "Ви можете завантажити власне фонове зображення. Максимальний розмір файлу " "становить 2Мб." -#: 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 "" -"Сервер нездатен обробити таку кількість даних (%s байтів) за поточної " -"конфігурації." +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "Увімк." -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "Вимк." + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "Скинути" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "Дизайн за замовчуванням відновлено." @@ -7400,30 +7448,29 @@ msgstr "" "1-64 літери нижнього регістру і цифри, ніякої пунктуації або інтервалів" #: lib/groupeditform.php:163 -#, fuzzy msgid "URL of the homepage or blog of the group or topic." -msgstr "URL-адреса веб-сторінки або тематичного блоґу сільноти" +msgstr "URL-адреса веб-сторінки або тематичного блоґу спільноти" #: lib/groupeditform.php:168 msgid "Describe the group or topic" msgstr "Опишіть спільноту або тему" #: lib/groupeditform.php:170 -#, fuzzy, php-format +#, php-format msgid "Describe the group or topic in %d character or less" msgid_plural "Describe the group or topic in %d characters or less" -msgstr[0] "Опишіть спільноту або тему, вкладаючись у %d знаків" +msgstr[0] "Опишіть спільноту або тему, вкладаючись у %d знак" msgstr[1] "Опишіть спільноту або тему, вкладаючись у %d знаків" msgstr[2] "Опишіть спільноту або тему, вкладаючись у %d знаків" #: lib/groupeditform.php:182 -#, fuzzy msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." -msgstr "Розташування спільноти, на кшталт «Місто, область (або регіон), країна»" +msgstr "" +"Розташування спільноти, на кшталт «Місто, область (або регіон), країна»." #: lib/groupeditform.php:190 -#, fuzzy, php-format +#, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " "alias allowed." @@ -7432,13 +7479,13 @@ msgid_plural "" "aliases allowed." msgstr[0] "" "Додаткові імена для спільноти, відокремлювати комами або пробілами, максимум " -"— %d імені" +"— %d ім’я." msgstr[1] "" "Додаткові імена для спільноти, відокремлювати комами або пробілами, максимум " -"— %d імені" +"— %d імені." msgstr[2] "" "Додаткові імена для спільноти, відокремлювати комами або пробілами, максимум " -"— %d імені" +"— %d імен." #. TRANS: Menu item in the group navigation page. #: lib/groupnav.php:86 @@ -7843,7 +7890,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%1$s (@%2$s) додав(ла) ваш допис обраних" @@ -7853,7 +7900,7 @@ msgstr "%1$s (@%2$s) додав(ла) ваш допис обраних" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7891,7 +7938,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7904,7 +7951,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%1$s (@%2$s) пропонує до вашої уваги наступний допис" @@ -7915,7 +7962,7 @@ msgstr "%1$s (@%2$s) пропонує до вашої уваги наступн #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -8063,7 +8110,7 @@ msgstr "Не вдається визначити MIME-тип файлу." #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8074,7 +8121,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "Тип файлів «%s» тепер не підтримується на даному сервері." @@ -8215,31 +8262,31 @@ msgstr "Дублікат допису." msgid "Couldn't insert new subscription." msgstr "Не вдалося додати нову підписку." -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "Особисте" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "Відповіді" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "Обрані" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "Вхідні" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "Ваші вхідні повідомлення" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "Вихідні" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "Надіслані вами повідомлення" @@ -8436,6 +8483,12 @@ msgstr "Хмарка теґів (якими ви позначили корист msgid "None" msgstr "Пусто" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "Невірне ім’я файлу." + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "Цей сервер не може опрацювати завантаження теми без підтримки ZIP." @@ -8455,18 +8508,18 @@ msgid "Invalid theme: bad directory structure." msgstr "Невірна тема: хибна структура каталогів." #: lib/themeuploader.php:166 -#, fuzzy, php-format +#, php-format msgid "Uploaded theme is too large; must be less than %d byte uncompressed." msgid_plural "" "Uploaded theme is too large; must be less than %d bytes uncompressed." msgstr[0] "" -"Тема, що її було завантажено, надто велика; без компресії розмір має " -"становити менше ніж %d байтів." +"Тема, що її було завантажено, надто велика; без компресії її розмір має " +"становити менше ніж %d байт." msgstr[1] "" -"Тема, що її було завантажено, надто велика; без компресії розмір має " +"Тема, що її було завантажено, надто велика; без компресії її розмір має " "становити менше ніж %d байтів." msgstr[2] "" -"Тема, що її було завантажено, надто велика; без компресії розмір має " +"Тема, що її було завантажено, надто велика; без компресії її розмір має " "становити менше ніж %d байтів." #: lib/themeuploader.php:179 @@ -8688,7 +8741,7 @@ msgstr[2] "" #: scripts/restoreuser.php:61 #, php-format msgid "Getting backup from file '%s'." -msgstr "" +msgstr "Отримання резервної копії файлу «%s»." #. TRANS: Commandline script output. #: scripts/restoreuser.php:91 @@ -8699,29 +8752,16 @@ msgstr "" #. TRANS: Commandline script output. %d is the number of entries in the activity stream in backup; used for plural. #: scripts/restoreuser.php:98 -#, fuzzy, php-format +#, php-format msgid "%d entry in backup." msgid_plural "%d entries in backup." -msgstr[0] "У резервному файлі збережено %d дописів." +msgstr[0] "У резервному файлі збережено %d допис." msgstr[1] "У резервному файлі збережено %d дописів." msgstr[2] "У резервному файлі збережено %d дописів." -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "Ім’я надто довге (не більше 255 символів)." - -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "Назва організації надто довга (не більше 255 знаків)." - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "Надто довго. Максимальний розмір допису — %d знаків." - -#~ msgid "Max notice size is %d chars, including attachment URL." +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." #~ msgstr "" -#~ "Максимальна довжина допису становить %d знаків, включно з URL-адресою " -#~ "вкладення." - -#~ msgid " tagged %s" -#~ msgstr " позначено з %s" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "Резервна копія файлів користувача %s (%s)" +#~ "Сервер нездатен обробити таку кількість даних (%s байтів) за поточної " +#~ "конфігурації." diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po index bd61cabda6..2ea284a880 100644 --- a/locale/zh_CN/LC_MESSAGES/statusnet.po +++ b/locale/zh_CN/LC_MESSAGES/statusnet.po @@ -14,18 +14,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-02 22:51+0000\n" -"PO-Revision-Date: 2010-11-02 22:53:48+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:27:52+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 (r75875); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-10-30 23:42:01+0000\n" +"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -90,12 +90,14 @@ msgstr "保存访问设置" #. TRANS: Save button for settings for a profile in a subscriptions list. #. TRANS: Button text to save user settings in user admin panel. #. TRANS: Button label in the "Edit application" form. +#. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/emailsettings.php:228 #: actions/imsettings.php:187 actions/othersettings.php:134 #: actions/pathsadminpanel.php:512 actions/profilesettings.php:201 #: actions/sitenoticeadminpanel.php:197 actions/smssettings.php:209 #: actions/subscriptions.php:246 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/groupeditform.php:207 +#: lib/applicationeditform.php:355 lib/designsettings.php:270 +#: lib/groupeditform.php:207 msgctxt "BUTTON" msgid "Save" msgstr "保存" @@ -163,7 +165,7 @@ msgstr "%1$s 和好友,第%2$d页" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:191 actions/allrss.php:115 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:100 +#: lib/personalgroupnav.php:103 #, php-format msgid "%s and friends" msgstr "%s 和好友们" @@ -334,11 +336,13 @@ msgstr "无法保存个人信息。" #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. +#. TRANS: Form validation error in design settings form. POST should remain untranslated. #: actions/apiaccountupdateprofilebackgroundimage.php:108 #: actions/apiaccountupdateprofileimage.php:95 actions/apimediaupload.php:81 #: actions/apistatusesupdate.php:210 actions/avatarsettings.php:269 #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 +#: lib/designsettings.php:298 #, fuzzy, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " @@ -739,7 +743,7 @@ msgstr "你没有被授权。" #: actions/repeat.php:83 actions/smssettings.php:256 actions/subedit.php:40 #: actions/subscribe.php:86 actions/tagother.php:166 #: actions/unsubscribe.php:69 actions/userauthorization.php:52 -#: lib/designsettings.php:294 +#: lib/designsettings.php:310 msgid "There was a problem with your session token. Try again, please." msgstr "你的 session 出现了一个问题,请重试。" @@ -761,12 +765,13 @@ msgstr "插入 OAuth 应用用户时数据库出错。" #. TRANS: Message given submitting a form with an unknown action in IM settings. #. TRANS: Client error when submitting a form with unexpected information. #. TRANS: Message given submitting a form with an unknown action in SMS settings. +#. TRANS: Unknown form validation error in design settings form. #: actions/apioauthauthorize.php:294 actions/avatarsettings.php:294 #: actions/designadminpanel.php:104 actions/editapplication.php:144 #: actions/emailsettings.php:290 actions/grouplogo.php:322 #: actions/imsettings.php:245 actions/newapplication.php:125 #: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44 -#: actions/smssettings.php:277 lib/designsettings.php:304 +#: actions/smssettings.php:277 lib/designsettings.php:321 msgid "Unexpected form submission." msgstr "未预料的表单提交。" @@ -817,7 +822,7 @@ msgstr "帐号" #. TRANS: Label for group nickname (dt). Text hidden by default. #: actions/apioauthauthorize.php:459 actions/login.php:252 #: actions/profilesettings.php:110 actions/register.php:433 -#: actions/showgroup.php:245 actions/tagother.php:94 +#: actions/showgroup.php:240 actions/tagother.php:94 #: actions/userauthorization.php:145 lib/groupeditform.php:152 #: lib/userprofile.php:132 msgid "Nickname" @@ -1077,7 +1082,7 @@ msgstr "没有这个附件。" #: actions/avatarbynickname.php:60 actions/blockedfromgroup.php:73 #: actions/editgroup.php:85 actions/groupdesignsettings.php:84 #: actions/grouplogo.php:86 actions/groupmembers.php:76 -#: actions/grouprss.php:91 actions/showgroup.php:121 +#: actions/grouprss.php:91 actions/showgroup.php:116 msgid "No nickname." msgstr "没有昵称。" @@ -1094,7 +1099,7 @@ msgstr "大小不正确。" #. TRANS: Title for avatar upload page. #. TRANS: Label for group avatar (dt). Text hidden by default. #. TRANS: Link description in user account settings menu. -#: actions/avatarsettings.php:66 actions/showgroup.php:229 +#: actions/avatarsettings.php:66 actions/showgroup.php:224 #: lib/accountsettingsaction.php:113 msgid "Avatar" msgstr "头像" @@ -1269,7 +1274,7 @@ msgstr "保存屏蔽信息失败。" #: actions/groupunblock.php:88 actions/joingroup.php:82 #: actions/joingroup.php:93 actions/leavegroup.php:82 #: actions/leavegroup.php:93 actions/makeadmin.php:86 -#: actions/showgroup.php:139 actions/showgroup.php:148 lib/command.php:168 +#: actions/showgroup.php:134 actions/showgroup.php:143 lib/command.php:168 #: lib/command.php:380 msgid "No such group." msgstr "没有这个组。" @@ -1630,12 +1635,14 @@ msgstr "自定义主题" msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgstr "你可以上传一个 .ZIP 压缩文件作为一个自定义的 StatusNet 主题" -#: actions/designadminpanel.php:512 lib/designsettings.php:101 +#. TRANS: Fieldset legend on profile design page. +#: actions/designadminpanel.php:512 lib/designsettings.php:98 msgid "Change background image" msgstr "更换背景图像" +#. TRANS: Label on profile design page for setting a profile page background colour. #: actions/designadminpanel.php:517 actions/designadminpanel.php:600 -#: lib/designsettings.php:178 +#: lib/designsettings.php:183 msgid "Background" msgstr "背景" @@ -1647,40 +1654,48 @@ msgid "" msgstr "你可以为网站上传一个背景图像。文件大小限制在%1$s以下。" #. TRANS: Used as radio button label to add a background image. -#: actions/designadminpanel.php:553 lib/designsettings.php:139 +#: actions/designadminpanel.php:553 msgid "On" msgstr "打开" #. TRANS: Used as radio button label to not add a background image. -#: actions/designadminpanel.php:570 lib/designsettings.php:155 +#: actions/designadminpanel.php:570 msgid "Off" msgstr "关闭" -#: actions/designadminpanel.php:571 lib/designsettings.php:156 +#. TRANS: Form guide for a set of radio buttons on the profile design page that will enable or disable +#. TRANS: use of the uploaded profile image. +#: actions/designadminpanel.php:571 lib/designsettings.php:159 msgid "Turn background image on or off." msgstr "打开或关闭背景图片" -#: actions/designadminpanel.php:576 lib/designsettings.php:161 +#. TRANS: Checkbox label on profile design page that will cause the profile image to be tiled. +#: actions/designadminpanel.php:576 lib/designsettings.php:165 msgid "Tile background image" msgstr "平铺背景图片" -#: actions/designadminpanel.php:590 lib/designsettings.php:170 +#. TRANS: Fieldset legend on profile design page to change profile page colours. +#: actions/designadminpanel.php:590 lib/designsettings.php:175 msgid "Change colours" msgstr "改变颜色" -#: actions/designadminpanel.php:613 lib/designsettings.php:191 +#. TRANS: Label on profile design page for setting a profile page content colour. +#: actions/designadminpanel.php:613 lib/designsettings.php:197 msgid "Content" msgstr "内容" -#: actions/designadminpanel.php:626 lib/designsettings.php:204 +#. TRANS: Label on profile design page for setting a profile page sidebar colour. +#: actions/designadminpanel.php:626 lib/designsettings.php:211 msgid "Sidebar" msgstr "边栏" -#: actions/designadminpanel.php:639 lib/designsettings.php:217 +#. TRANS: Label on profile design page for setting a profile page text colour. +#: actions/designadminpanel.php:639 lib/designsettings.php:225 msgid "Text" msgstr "文字" -#: actions/designadminpanel.php:652 lib/designsettings.php:230 +#. TRANS: Label on profile design page for setting a profile page links colour. +#: actions/designadminpanel.php:652 lib/designsettings.php:239 msgid "Links" msgstr "链接" @@ -1692,15 +1707,18 @@ msgstr "高级" msgid "Custom CSS" msgstr "自定义CSS" -#: actions/designadminpanel.php:702 lib/designsettings.php:247 +#. TRANS: Button text on profile design page to immediately reset all colour settings to default. +#: actions/designadminpanel.php:702 lib/designsettings.php:257 msgid "Use defaults" msgstr "使用默认值" -#: actions/designadminpanel.php:703 lib/designsettings.php:248 +#. TRANS: Title for button on profile design page to reset all colour settings to default. +#: actions/designadminpanel.php:703 lib/designsettings.php:259 msgid "Restore default designs" msgstr "恢复默认外观" -#: actions/designadminpanel.php:709 lib/designsettings.php:254 +#. TRANS: Title for button on profile design page to reset all colour settings to default without saving. +#: actions/designadminpanel.php:709 lib/designsettings.php:267 msgid "Reset back to default" msgstr "重置到默认" @@ -1708,11 +1726,12 @@ msgstr "重置到默认" #: actions/designadminpanel.php:711 actions/licenseadminpanel.php:319 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 #: actions/snapshotadminpanel.php:245 actions/tagother.php:154 -#: lib/applicationeditform.php:357 lib/designsettings.php:256 +#: lib/applicationeditform.php:357 msgid "Save" msgstr "保存" -#: actions/designadminpanel.php:712 lib/designsettings.php:257 +#. TRANS: Title for button on profile design page to save settings. +#: actions/designadminpanel.php:712 lib/designsettings.php:272 msgid "Save design" msgstr "保存外观" @@ -1848,7 +1867,7 @@ msgstr "无法更新小组" #. TRANS: Server error displayed when group aliases could not be added. #. TRANS: Server exception thrown when creating group aliases failed. -#: actions/editgroup.php:288 classes/User_group.php:513 +#: actions/editgroup.php:288 classes/User_group.php:529 msgid "Could not create aliases." msgstr "无法创建别名。" @@ -2127,7 +2146,7 @@ msgid "" msgstr "现在就[注册一个账户](%%action.register%%)并成为第一个添加收藏的人!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 -#: lib/personalgroupnav.php:115 +#: lib/personalgroupnav.php:118 #, php-format msgid "%s's favorite notices" msgstr "%s收藏的消息" @@ -2303,8 +2322,10 @@ msgid "" "palette of your choice." msgstr "通过背景图片和颜色板来自定义你的小组的外观。" +#. TRANS: Error message displayed if design settings could not be saved. +#. TRANS: Error message displayed if design settings could not be saved after clicking "Use defaults". #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186 -#: lib/designsettings.php:391 lib/designsettings.php:413 +#: lib/designsettings.php:405 lib/designsettings.php:427 msgid "Couldn't update your design." msgstr "无法更新你的外观。" @@ -3232,25 +3253,25 @@ msgstr "" msgid "Notice has no profile." msgstr "消息没有对应用户。" -#: actions/oembed.php:87 actions/shownotice.php:176 +#: actions/oembed.php:83 actions/shownotice.php:172 #, php-format msgid "%1$s's status on %2$s" msgstr "%1$s在%2$s时发的消息" #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') -#: actions/oembed.php:159 +#: actions/oembed.php:155 #, php-format msgid "Content type %s not supported." msgstr "%s内容类型不被支持。" #. TRANS: Error message displaying attachments. %s is the site's base URL. -#: actions/oembed.php:163 +#: actions/oembed.php:159 #, php-format msgid "Only %s URLs over plain HTTP please." msgstr "请只用HTTP明文的%sURLs的地址。" #. TRANS: Client error on an API request with an unsupported data format. -#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1200 +#: actions/oembed.php:180 actions/oembed.php:199 lib/apiaction.php:1200 #: lib/apiaction.php:1227 lib/apiaction.php:1356 msgid "Not a supported data format." msgstr "不支持的数据格式。" @@ -3745,7 +3766,7 @@ msgstr "1 到 64 个小写字母或数字,不包含标点或空格" #. TRANS: Field label in form for profile settings. #. TRANS: Label for full group name (dt). Text hidden by default. #: actions/profilesettings.php:117 actions/register.php:457 -#: actions/showgroup.php:257 actions/tagother.php:104 +#: actions/showgroup.php:252 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:150 msgid "Full name" msgstr "全名" @@ -3786,7 +3807,7 @@ msgstr "自述" #. TRANS: Field label in form for profile settings. #. TRANS: Label for group location (dt). Text hidden by default. #: actions/profilesettings.php:149 actions/register.php:485 -#: actions/showgroup.php:267 actions/tagother.php:112 +#: actions/showgroup.php:262 actions/tagother.php:112 #: actions/userauthorization.php:166 lib/groupeditform.php:180 #: lib/userprofile.php:165 msgid "Location" @@ -4346,7 +4367,7 @@ msgid "Repeated!" msgstr "已转发!" #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:105 +#: lib/personalgroupnav.php:108 #, php-format msgid "Replies to %s" msgstr "对 %s 的回复" @@ -4481,7 +4502,7 @@ msgid "Description" msgstr "描述" #. TRANS: Header for group statistics on a group page (h2). -#: actions/showapplication.php:192 actions/showgroup.php:453 +#: actions/showapplication.php:192 actions/showgroup.php:448 #: lib/profileaction.php:187 msgid "Statistics" msgstr "统计" @@ -4592,95 +4613,95 @@ msgid "This is a way to share what you like." msgstr "这是一种分享你喜欢的内容的方式。" #. TRANS: Page title for first group page. %s is a group name. -#: actions/showgroup.php:80 +#: actions/showgroup.php:75 #, php-format msgid "%s group" msgstr "%s 小组" #. TRANS: Page title for any but first group page. #. TRANS: %1$s is a group name, $2$s is a page number. -#: actions/showgroup.php:84 +#: actions/showgroup.php:79 #, php-format msgid "%1$s group, page %2$d" msgstr "%1$s小组,第%2$d页" #. TRANS: Group profile header (h2). Text hidden by default. -#: actions/showgroup.php:225 +#: actions/showgroup.php:220 msgid "Group profile" msgstr "小组资料" #. TRANS: Label for group URL (dt). Text hidden by default. -#: actions/showgroup.php:275 actions/tagother.php:118 +#: actions/showgroup.php:270 actions/tagother.php:118 #: actions/userauthorization.php:175 lib/userprofile.php:178 msgid "URL" msgstr "URL 互联网地址" #. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:287 actions/tagother.php:128 +#: actions/showgroup.php:282 actions/tagother.php:128 #: actions/userauthorization.php:187 lib/userprofile.php:195 msgid "Note" msgstr "注释" #. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:298 lib/groupeditform.php:187 +#: actions/showgroup.php:293 lib/groupeditform.php:187 msgid "Aliases" msgstr "别名" #. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:309 +#: actions/showgroup.php:304 msgid "Group actions" msgstr "小组动作" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:350 +#: actions/showgroup.php:345 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "%s小组的消息聚合 (RSS 1.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:357 +#: actions/showgroup.php:352 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "%s小组的消息聚合 (RSS 2.0)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:364 +#: actions/showgroup.php:359 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "%s小组的消息聚合 (Atom)" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:370 +#: actions/showgroup.php:365 #, php-format msgid "FOAF for %s group" msgstr "%s 的发件箱" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:407 +#: actions/showgroup.php:402 msgid "Members" msgstr "小组成员" #. TRANS: Description for mini list of group members on a group page when the group has no members. -#: actions/showgroup.php:413 lib/profileaction.php:117 +#: actions/showgroup.php:408 lib/profileaction.php:117 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71 msgid "(None)" msgstr "(无)" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:422 +#: actions/showgroup.php:417 msgid "All members" msgstr "所有成员" #. TRANS: Label for creation date in statistics on group page. -#: actions/showgroup.php:458 +#: actions/showgroup.php:453 #, fuzzy msgctxt "LABEL" msgid "Created" msgstr "建立" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:466 +#: actions/showgroup.php:461 #, fuzzy msgctxt "LABEL" msgid "Members" @@ -4690,7 +4711,7 @@ msgstr "小组成员" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:481 +#: actions/showgroup.php:476 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4708,7 +4729,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:491 +#: actions/showgroup.php:486 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -4722,7 +4743,7 @@ msgstr "" "趣的消息。" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:520 +#: actions/showgroup.php:515 msgid "Admins" msgstr "管理员" @@ -5485,7 +5506,7 @@ msgstr "无效的默认关注:“%1$s”不是一个用户。" #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 -#: lib/personalgroupnav.php:109 +#: lib/personalgroupnav.php:112 msgid "Profile" msgstr "个人信息" @@ -5644,11 +5665,13 @@ msgstr "无法读取头像 URL '%s'。" msgid "Wrong image type for avatar URL ‘%s’." msgstr "头像 URL ‘%s’ 图像格式错误。" -#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +#. TRANS: Page title for profile design page. +#: actions/userdesignsettings.php:76 lib/designsettings.php:63 msgid "Profile design" msgstr "个人页面外观" -#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +#. TRANS: Instructions for profile design page. +#: actions/userdesignsettings.php:87 lib/designsettings.php:74 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." @@ -5771,30 +5794,36 @@ msgstr "麦子认为卖烧麦是份很令人愉快的工作。" #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. -#: classes/File.php:189 -#, php-format +#. TRANS: %1$s is used for plural. +#: classes/File.php:190 +#, fuzzy, php-format msgid "" +"No file may be larger than %1$d byte and the file you sent was %2$d bytes. " +"Try to upload a smaller version." +msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." -msgstr "" +msgstr[0] "" "不能有文件大于%1$d字节,你上传的文件是%2$d字节。换一个小点的版本试一下。" #. TRANS: Message given if an upload would exceed user quota. -#. TRANS: %d (number) is the user quota in bytes. -#: classes/File.php:201 -#, php-format -msgid "A file this large would exceed your user quota of %d bytes." -msgstr "这么大的文件会超过你%d字节的用户配额。" +#. TRANS: %d (number) is the user quota in bytes and is used for plural. +#: classes/File.php:203 +#, fuzzy, php-format +msgid "A file this large would exceed your user quota of %d byte." +msgid_plural "A file this large would exceed your user quota of %d bytes." +msgstr[0] "这么大的文件会超过你%d字节的用户配额。" #. TRANS: Message given id an upload would exceed a user's monthly quota. -#. TRANS: $d (number) is the monthly user quota in bytes. -#: classes/File.php:210 -#, php-format -msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "这么大的文件会超过你%d字节的每月配额。" +#. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. +#: classes/File.php:215 +#, fuzzy, php-format +msgid "A file this large would exceed your monthly quota of %d byte." +msgid_plural "A file this large would exceed your monthly quota of %d bytes." +msgstr[0] "这么大的文件会超过你%d字节的每月配额。" #. TRANS: Client exception thrown if a file upload does not have a valid name. -#: classes/File.php:247 classes/File.php:262 +#: classes/File.php:262 classes/File.php:277 msgid "Invalid filename." msgstr "无效的文件名。" @@ -5919,31 +5948,32 @@ msgid "Problem saving notice." msgstr "保存消息时出错。" #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:907 -msgid "Bad type provided to saveKnownGroups" +#: classes/Notice.php:905 +#, fuzzy +msgid "Bad type provided to saveKnownGroups." msgstr "对 saveKnownGroups 提供的类型无效" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1006 +#: classes/Notice.php:1004 msgid "Problem saving group inbox." msgstr "保存小组收件箱时出错。" #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1120 +#: classes/Notice.php:1118 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "无法保存回复,%1$d 对 %2$d。" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1822 +#: classes/Notice.php:1820 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:164 +#: classes/Profile.php:164 classes/User_group.php:247 #, fuzzy, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6038,22 +6068,22 @@ msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Server exception thrown when creating a group failed. -#: classes/User_group.php:495 +#: classes/User_group.php:511 msgid "Could not create group." msgstr "无法创建小组。" #. TRANS: Server exception thrown when updating a group URI failed. -#: classes/User_group.php:505 +#: classes/User_group.php:521 msgid "Could not set group URI." msgstr "无法设置小组 URI。" #. TRANS: Server exception thrown when setting group membership failed. -#: classes/User_group.php:528 +#: classes/User_group.php:544 msgid "Could not set group membership." msgstr "无法设置小组成员。" #. TRANS: Server exception thrown when saving local group information failed. -#: classes/User_group.php:543 +#: classes/User_group.php:559 msgid "Could not save local group info." msgstr "无法保存本地小组信息。" @@ -6457,7 +6487,7 @@ msgid "User configuration" msgstr "用户配置" #. TRANS: Menu item for site administration -#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:115 +#: lib/adminpanelaction.php:355 lib/personalgroupnav.php:118 msgid "User" msgstr "用户" @@ -7150,23 +7180,41 @@ msgstr "被授权已连接的应用" msgid "Database error" msgstr "数据库错误" -#: lib/designsettings.php:105 +#. TRANS: Label in form on profile design page. +#. TRANS: Field contains file name on user's computer that could be that user's custom profile background image. +#: lib/designsettings.php:104 msgid "Upload file" msgstr "上传文件" +#. TRANS: Instructions for form on profile design page. #: lib/designsettings.php:109 msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "你可以上传你的个人页面背景。文件最大 2MB。" -#: 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 "服务器当前的设置无法处理这么多的 POST 数据(%s bytes)。" +#. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. +#: lib/designsettings.php:139 +#, fuzzy +msgctxt "RADIO" +msgid "On" +msgstr "打开" -#: lib/designsettings.php:418 +#. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. +#: lib/designsettings.php:156 +#, fuzzy +msgctxt "RADIO" +msgid "Off" +msgstr "关闭" + +#. TRANS: Button text on profile design page to reset all colour settings to default without saving. +#: lib/designsettings.php:264 +#, fuzzy +msgctxt "BUTTON" +msgid "Reset" +msgstr "重置" + +#. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". +#: lib/designsettings.php:433 msgid "Design defaults restored." msgstr "默认外观已恢复。" @@ -7657,7 +7705,7 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:603 +#: lib/mail.php:607 #, fuzzy, php-format msgid "%1$s (@%2$s) added your notice as a favorite" msgstr "%s (@%s) 收藏了你的消息" @@ -7667,7 +7715,7 @@ msgstr "%s (@%s) 收藏了你的消息" #. TRANS: %3$s is a URL to the faved notice, %4$s is the faved notice text, #. TRANS: %5$s is a URL to all faves of the adding user, %6$s is the StatusNet sitename, #. TRANS: %7$s is the adding user's nickname. -#: lib/mail.php:610 +#: lib/mail.php:614 #, php-format msgid "" "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" @@ -7705,7 +7753,7 @@ msgstr "" "%6$s\n" #. TRANS: Line in @-reply notification e-mail. %s is conversation URL. -#: lib/mail.php:668 +#: lib/mail.php:672 #, php-format msgid "" "The full conversation can be read here:\n" @@ -7718,7 +7766,7 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#: lib/mail.php:676 +#: lib/mail.php:680 #, fuzzy, php-format msgid "%1$s (@%2$s) sent a notice to your attention" msgstr "%s (@%s) 给你发送了一条消息" @@ -7729,7 +7777,7 @@ msgstr "%s (@%s) 给你发送了一条消息" #. TRANS: %5$s is a URL to the full conversion if it exists (otherwise empty), #. TRANS: %6$s is a URL to reply to the notice, %7$s is a URL to all @-replied for the addressed user, #. TRANS: %8$s is a URL to the addressed user's e-mail settings, %9$s is the sender's nickname. -#: lib/mail.php:684 +#: lib/mail.php:688 #, php-format msgid "" "%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" @@ -7872,7 +7920,7 @@ msgstr "无法判断文件的 MIME 类型。" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:340 +#: lib/mediafile.php:345 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -7881,7 +7929,7 @@ msgstr "此服务器不支持 “%1$s” 的文件格式,试下使用其他的 #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:345 +#: lib/mediafile.php:350 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "这个服务器不支持 %s 的文件格式。" @@ -8020,31 +8068,31 @@ msgstr "复制消息。" msgid "Couldn't insert new subscription." msgstr "无法添加新的关注。" -#: lib/personalgroupnav.php:99 +#: lib/personalgroupnav.php:102 msgid "Personal" msgstr "我的主页" -#: lib/personalgroupnav.php:104 +#: lib/personalgroupnav.php:107 msgid "Replies" msgstr "回复" -#: lib/personalgroupnav.php:114 +#: lib/personalgroupnav.php:117 msgid "Favorites" msgstr "收藏夹" -#: lib/personalgroupnav.php:125 +#: lib/personalgroupnav.php:128 msgid "Inbox" msgstr "收件箱" -#: lib/personalgroupnav.php:126 +#: lib/personalgroupnav.php:129 msgid "Your incoming messages" msgstr "你收到的私信" -#: lib/personalgroupnav.php:130 +#: lib/personalgroupnav.php:133 msgid "Outbox" msgstr "发件箱" -#: lib/personalgroupnav.php:131 +#: lib/personalgroupnav.php:134 msgid "Your sent messages" msgstr "你发送的私信" @@ -8242,6 +8290,12 @@ msgstr "被添加标签的用户标签云" msgid "None" msgstr "无" +#. TRANS: Server exception displayed if a theme name was invalid. +#: lib/theme.php:74 +#, fuzzy +msgid "Invalid theme name." +msgstr "无效的文件名。" + #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." msgstr "服务器不支持 ZIP,无法处理上传的主题。" @@ -8481,22 +8535,7 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "备份中有 %d 个条目。" -#, fuzzy -#~ msgid "Name is too long (maximum 255 chars)." -#~ msgstr "名称过长(不能超过255个字符)。" - -#, fuzzy -#~ msgid "Organization is too long (maximum 255 chars)." -#~ msgstr "组织名称过长(不能超过255个字符)。" - -#~ msgid "That's too long. Max notice size is %d chars." -#~ msgstr "太长了。最长的消息长度是%d个字符。" - -#~ msgid "Max notice size is %d chars, including attachment URL." -#~ msgstr "每条消息最长%d字符,包括附件的链接 URL。" - -#~ msgid " tagged %s" -#~ msgstr "带%s标签的" - -#~ msgid "Backup file for user %s (%s)" -#~ msgstr "用户 %s (%s) 的备份文件" +#~ msgid "" +#~ "The server was unable to handle that much POST data (%s bytes) due to its " +#~ "current configuration." +#~ msgstr "服务器当前的设置无法处理这么多的 POST 数据(%s bytes)。" diff --git a/plugins/GroupFavorited/locale/GroupFavorited.pot b/plugins/GroupFavorited/locale/GroupFavorited.pot index c6c2f11145..041126fad6 100644 --- a/plugins/GroupFavorited/locale/GroupFavorited.pot +++ b/plugins/GroupFavorited/locale/GroupFavorited.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,13 +17,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "" diff --git a/plugins/GroupFavorited/locale/br/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/br/LC_MESSAGES/GroupFavorited.po index 7362f0505a..6ca70c83f9 100644 --- a/plugins/GroupFavorited/locale/br/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/br/LC_MESSAGES/GroupFavorited.po @@ -9,26 +9,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "" diff --git a/plugins/GroupFavorited/locale/de/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/de/LC_MESSAGES/GroupFavorited.po index c820c89e15..cc8988658f 100644 --- a/plugins/GroupFavorited/locale/de/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/de/LC_MESSAGES/GroupFavorited.po @@ -10,26 +10,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "Beliebte Beiträge in der %s-Gruppe" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "Beliebte Beiträge in der %1$s-Gruppe, Seite %2$d" diff --git a/plugins/GroupFavorited/locale/es/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/es/LC_MESSAGES/GroupFavorited.po index 6af511ae6a..3b3419d5a7 100644 --- a/plugins/GroupFavorited/locale/es/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/es/LC_MESSAGES/GroupFavorited.po @@ -9,26 +9,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: Spanish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: es\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "Mensajes populares en el grupo %s" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "Mensajes populares en el grupo %1$s, página %2$d" diff --git a/plugins/GroupFavorited/locale/fr/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/fr/LC_MESSAGES/GroupFavorited.po index 9cfb10efc8..3facce5732 100644 --- a/plugins/GroupFavorited/locale/fr/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/fr/LC_MESSAGES/GroupFavorited.po @@ -9,26 +9,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "Messages populaires dans le groupe %s" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "Messages populaires dans le groupe %1$s, page %2$d" diff --git a/plugins/GroupFavorited/locale/ia/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/ia/LC_MESSAGES/GroupFavorited.po index 03eb3e3da4..f1e424cd16 100644 --- a/plugins/GroupFavorited/locale/ia/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/ia/LC_MESSAGES/GroupFavorited.po @@ -9,26 +9,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "Messages popular in gruppo %s" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "Messages popular in gruppo %1$s, pagina %2$d" diff --git a/plugins/GroupFavorited/locale/mk/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/mk/LC_MESSAGES/GroupFavorited.po index 1d1a43a0d0..5aada9eca5 100644 --- a/plugins/GroupFavorited/locale/mk/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/mk/LC_MESSAGES/GroupFavorited.po @@ -9,26 +9,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "Популарни објави во групата %s" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "Популарни објави во групата %1$s, страница %2$d" diff --git a/plugins/GroupFavorited/locale/nl/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/nl/LC_MESSAGES/GroupFavorited.po index 1d8a2b57ec..bf56698779 100644 --- a/plugins/GroupFavorited/locale/nl/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/nl/LC_MESSAGES/GroupFavorited.po @@ -10,26 +10,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "Populaire berichten in de groep %s" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "Populaire berichten in de groep %1$s, pagina %2$d" diff --git a/plugins/GroupFavorited/locale/ru/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/ru/LC_MESSAGES/GroupFavorited.po index 63e84c4532..1cb4433d81 100644 --- a/plugins/GroupFavorited/locale/ru/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/ru/LC_MESSAGES/GroupFavorited.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: Russian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" @@ -23,13 +23,13 @@ msgstr "" "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "Популярные сообщения в группе %s" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "" diff --git a/plugins/GroupFavorited/locale/tl/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/tl/LC_MESSAGES/GroupFavorited.po index 31a1077bd1..4091155de5 100644 --- a/plugins/GroupFavorited/locale/tl/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/tl/LC_MESSAGES/GroupFavorited.po @@ -9,26 +9,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: Tagalog \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tl\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "Tanyag na mga pagpapaskila sa loob ng pangkat na %s" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "Tanyag na mga pagpapaskila sa loob ng pangkat na %1$s, pahina %2$d" diff --git a/plugins/GroupFavorited/locale/uk/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/uk/LC_MESSAGES/GroupFavorited.po index d0a44340a8..143c0cae84 100644 --- a/plugins/GroupFavorited/locale/uk/LC_MESSAGES/GroupFavorited.po +++ b/plugins/GroupFavorited/locale/uk/LC_MESSAGES/GroupFavorited.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - GroupFavorited\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:41+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:28+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-plugin-groupfavorited\n" @@ -23,13 +23,13 @@ msgstr "" "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" #. TRANS: %s is a group name. -#: groupfavoritedaction.php:53 +#: groupfavoritedaction.php:48 #, php-format msgid "Popular posts in %s group" msgstr "Популярні повідомлення спільноти %s" #. TRANS: %1$s is a group name, %2$s is a group number. -#: groupfavoritedaction.php:56 +#: groupfavoritedaction.php:51 #, php-format msgid "Popular posts in %1$s group, page %2$d" msgstr "Популярні повідомлення спільноти %1$s, сторінка %2$d" diff --git a/plugins/Mapstraction/locale/br/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/br/LC_MESSAGES/Mapstraction.po index 6552915b9e..6dd726870d 100644 --- a/plugins/Mapstraction/locale/br/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/br/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:46+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -46,19 +46,19 @@ msgstr "An implijer-mañ n'eus profil ebet dezhañ." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "Kartenn mignoned %s" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, fuzzy, php-format msgid "%1$s friends map, page %2$d" msgstr "%s gartenn, pajenn %d" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "%s gartenn, pajenn %d" diff --git a/plugins/Mapstraction/locale/de/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/de/LC_MESSAGES/Mapstraction.po index 0299a5d153..22c3e84eee 100644 --- a/plugins/Mapstraction/locale/de/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/de/LC_MESSAGES/Mapstraction.po @@ -10,13 +10,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:46+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -49,19 +49,19 @@ msgstr "Benutzer hat kein Profil." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "Karte der Freunde von %s" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "Karte der Freunde von %1$s, Seite %2$d" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "%s-Karte, Seite %d" diff --git a/plugins/Mapstraction/locale/fi/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/fi/LC_MESSAGES/Mapstraction.po index 8e6007152c..9d84ece5a3 100644 --- a/plugins/Mapstraction/locale/fi/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/fi/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Finnish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fi\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -46,19 +46,19 @@ msgstr "Käyttäjällä ei ole profiilia." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "Kartta käyttäjän %s ystävistä" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, fuzzy, php-format msgid "%1$s friends map, page %2$d" msgstr "Kartta käyttäjän %s ystävistä" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "" diff --git a/plugins/Mapstraction/locale/fr/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/fr/LC_MESSAGES/Mapstraction.po index a75da34ec6..3999170555 100644 --- a/plugins/Mapstraction/locale/fr/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/fr/LC_MESSAGES/Mapstraction.po @@ -10,13 +10,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -49,19 +49,19 @@ msgstr "Aucun profil ne correspond à cet utilisateur." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "Carte des amis de %s" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "Carte des amis de %1$s, page %2$d" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "Carte %s, page %d" diff --git a/plugins/Mapstraction/locale/gl/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/gl/LC_MESSAGES/Mapstraction.po index 5df0d1404a..ec66764bc9 100644 --- a/plugins/Mapstraction/locale/gl/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/gl/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Galician \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: gl\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -46,19 +46,19 @@ msgstr "O usuario non ten perfil." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "" diff --git a/plugins/Mapstraction/locale/ia/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/ia/LC_MESSAGES/Mapstraction.po index 72249a6548..7deba8963b 100644 --- a/plugins/Mapstraction/locale/ia/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/ia/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -48,19 +48,19 @@ msgstr "Le usator non ha un profilo." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "Mappa del amicos de %s" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "Mappa de amicos de %1$s, pagina %2$d" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "Mappa de %s, pagina %d" diff --git a/plugins/Mapstraction/locale/mk/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/mk/LC_MESSAGES/Mapstraction.po index cf7be70ab9..33562d597a 100644 --- a/plugins/Mapstraction/locale/mk/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/mk/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -48,19 +48,19 @@ msgstr "Корисникот нема профил." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "Карта на пријатели на %s" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "Карта на пријатели на %1$s, страница %2$d" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "Карта на %s, стр. %d" diff --git a/plugins/Mapstraction/locale/nb/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/nb/LC_MESSAGES/Mapstraction.po index b478de888e..68b2d02eca 100644 --- a/plugins/Mapstraction/locale/nb/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/nb/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Norwegian (bokmål)‬ \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: no\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -48,19 +48,19 @@ msgstr "Bruker har ingen profil." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "%s vennekart" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "%1$s vennekart, side %2$d" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "%s kart, side %d" diff --git a/plugins/Mapstraction/locale/nl/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/nl/LC_MESSAGES/Mapstraction.po index fdc68490e6..f68e24ea9e 100644 --- a/plugins/Mapstraction/locale/nl/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/nl/LC_MESSAGES/Mapstraction.po @@ -10,13 +10,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -49,19 +49,19 @@ msgstr "Deze gebruiker heeft geen profiel." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "Kaart van %s en vrienden" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "Kaart van vrienden van %1$s, pagina %2$d" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "Kaart van %s, pagina %d" diff --git a/plugins/Mapstraction/locale/ru/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/ru/LC_MESSAGES/Mapstraction.po index 93ad72cc32..97dbedf6e1 100644 --- a/plugins/Mapstraction/locale/ru/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/ru/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Russian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -47,19 +47,19 @@ msgstr "У пользователя нет профиля." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "Карта друзей: %s" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, fuzzy, php-format msgid "%1$s friends map, page %2$d" msgstr "Карта друзей: %s" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "" diff --git a/plugins/Mapstraction/locale/ta/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/ta/LC_MESSAGES/Mapstraction.po index 3011173480..fbeb8efac4 100644 --- a/plugins/Mapstraction/locale/ta/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/ta/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Tamil \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ta\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -46,19 +46,19 @@ msgstr "" #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "" diff --git a/plugins/Mapstraction/locale/tl/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/tl/LC_MESSAGES/Mapstraction.po index 49d27836b6..bec287a2a2 100644 --- a/plugins/Mapstraction/locale/tl/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/tl/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Tagalog \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tl\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -48,19 +48,19 @@ msgstr "Walang balangkas ang tagagamit." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "%s na mapa ng mga kaibigan" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr " %1$s mapa ng mga kaibigan, pahina %2$d" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "%s na mapa, pahina %d" diff --git a/plugins/Mapstraction/locale/uk/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/uk/LC_MESSAGES/Mapstraction.po index 9a43d791e5..9a928759a9 100644 --- a/plugins/Mapstraction/locale/uk/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/uk/LC_MESSAGES/Mapstraction.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -49,19 +49,19 @@ msgstr "Користувач не має профілю." #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "Мапа друзів %s." #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "Мапа друзів %1$s, сторінка %2$d" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "Мапа друзів %s, сторінка %d" diff --git a/plugins/Mapstraction/locale/zh_CN/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/zh_CN/LC_MESSAGES/Mapstraction.po index 47f07d1597..15358a1aa3 100644 --- a/plugins/Mapstraction/locale/zh_CN/LC_MESSAGES/Mapstraction.po +++ b/plugins/Mapstraction/locale/zh_CN/LC_MESSAGES/Mapstraction.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Mapstraction\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:47+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:33+0000\n" "Language-Team: Simplified Chinese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:52+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: #out-statusnet-plugin-mapstraction\n" @@ -49,19 +49,19 @@ msgstr "用户没有个人信息。" #. TRANS: Page title. #. TRANS: %s is a user nickname. -#: allmap.php:74 +#: allmap.php:69 #, php-format msgid "%s friends map" msgstr "%s 好友地图" #. TRANS: Page title. #. TRANS: %1$s is a user nickname, %2$d is a page number. -#: allmap.php:80 +#: allmap.php:75 #, php-format msgid "%1$s friends map, page %2$d" msgstr "%1$s 好友地图,第 %2$d 页。" -#: usermap.php:73 +#: usermap.php:68 #, php-format msgid "%s map, page %d" msgstr "%s 地图,第 %d 页" diff --git a/plugins/NoticeTitle/locale/pl/LC_MESSAGES/NoticeTitle.po b/plugins/NoticeTitle/locale/pl/LC_MESSAGES/NoticeTitle.po new file mode 100644 index 0000000000..64b208fa5c --- /dev/null +++ b/plugins/NoticeTitle/locale/pl/LC_MESSAGES/NoticeTitle.po @@ -0,0 +1,33 @@ +# Translation of StatusNet - NoticeTitle to Polish (Polski) +# Expored from translatewiki.net +# +# Author: Raven +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - NoticeTitle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:28:38+0000\n" +"Language-Team: Polish \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-29 16:13:51+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: pl\n" +"X-Message-Group: #out-statusnet-plugin-noticetitle\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && " +"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" + +#: NoticeTitlePlugin.php:132 +msgid "Adds optional titles to notices." +msgstr "" + +#. TRANS: Page title. %1$s is the title, %2$s is the site name. +#: NoticeTitlePlugin.php:309 +#, php-format +msgid "%1$s - %2$s" +msgstr "%1$s - %2$s" diff --git a/plugins/Realtime/locale/uk/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/uk/LC_MESSAGES/Realtime.po new file mode 100644 index 0000000000..f15b29127e --- /dev/null +++ b/plugins/Realtime/locale/uk/LC_MESSAGES/Realtime.po @@ -0,0 +1,59 @@ +# Translation of StatusNet - Realtime to Ukrainian (Українська) +# Expored from translatewiki.net +# +# Author: Boogie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Realtime\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:00+0000\n" +"Language-Team: Ukrainian \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-11-02 23:07:29+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: uk\n" +"X-Message-Group: #out-statusnet-plugin-realtime\n" +"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " +"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" + +#. TRANS: Text label for realtime view "play" button, usually replaced by an icon. +#: RealtimePlugin.php:339 +msgctxt "BUTTON" +msgid "Play" +msgstr "Оновлювати" + +#. TRANS: Tooltip for realtime view "play" button. +#: RealtimePlugin.php:341 +msgctxt "TOOLTIP" +msgid "Play" +msgstr "Оновлювати" + +#. TRANS: Text label for realtime view "pause" button +#: RealtimePlugin.php:343 +msgctxt "BUTTON" +msgid "Pause" +msgstr "Пауза" + +#. TRANS: Tooltip for realtime view "pause" button +#: RealtimePlugin.php:345 +msgctxt "TOOLTIP" +msgid "Pause" +msgstr "Пауза" + +#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon. +#: RealtimePlugin.php:347 +msgctxt "BUTTON" +msgid "Pop up" +msgstr "Окреме вікно" + +#. TRANS: Tooltip for realtime view "popup" button. +#: RealtimePlugin.php:349 +msgctxt "TOOLTIP" +msgid "Pop up in a window" +msgstr "Стрічка окремим вікном" diff --git a/plugins/TwitterBridge/locale/TwitterBridge.pot b/plugins/TwitterBridge/locale/TwitterBridge.pot index 2fc96dfe2a..61a1b6fb15 100644 --- a/plugins/TwitterBridge/locale/TwitterBridge.pot +++ b/plugins/TwitterBridge/locale/TwitterBridge.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,6 +16,13 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" +#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. +#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. +#: twitterimport.php:113 +#, php-format +msgid "RT @%1$s %2$s" +msgstr "" + #: twitter.php:349 msgid "Your Twitter bridge has been disabled." msgstr "" @@ -37,7 +44,7 @@ msgid "" msgstr "" #: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174 -#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52 +#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52 msgid "Twitter" msgstr "" @@ -49,11 +56,11 @@ msgstr "" msgid "Twitter integration options" msgstr "" -#: TwitterBridgePlugin.php:292 +#: TwitterBridgePlugin.php:303 msgid "Twitter bridge configuration" msgstr "" -#: TwitterBridgePlugin.php:316 +#: TwitterBridgePlugin.php:327 msgid "" "The Twitter \"bridge\" plugin allows integration of a StatusNet instance " "with Twitter." @@ -354,17 +361,10 @@ msgstr "" msgid "Twitter account disconnected." msgstr "" -#: twittersettings.php:283 twittersettings.php:293 +#: twittersettings.php:283 twittersettings.php:294 msgid "Couldn't save Twitter preferences." msgstr "" -#: twittersettings.php:297 +#: twittersettings.php:302 msgid "Twitter preferences saved." msgstr "" - -#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. -#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: daemons/twitterstatusfetcher.php:264 -#, php-format -msgid "RT @%1$s %2$s" -msgstr "" diff --git a/plugins/TwitterBridge/locale/fr/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/fr/LC_MESSAGES/TwitterBridge.po index 988b2577df..0192705db0 100644 --- a/plugins/TwitterBridge/locale/fr/LC_MESSAGES/TwitterBridge.po +++ b/plugins/TwitterBridge/locale/fr/LC_MESSAGES/TwitterBridge.po @@ -10,18 +10,25 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - TwitterBridge\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:52+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:18+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:11+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-plugin-twitterbridge\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. +#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. +#: twitterimport.php:113 +#, php-format +msgid "RT @%1$s %2$s" +msgstr "RT @%1$s %2$s" + #: twitter.php:349 msgid "Your Twitter bridge has been disabled." msgstr "Votre passerelle Twitter a été désactivée." @@ -55,7 +62,7 @@ msgstr "" "%3$s" #: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174 -#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52 +#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52 msgid "Twitter" msgstr "Twitter" @@ -67,11 +74,11 @@ msgstr "Se connecter ou s’inscrire via Twitter" msgid "Twitter integration options" msgstr "Options d’intégration de Twitter" -#: TwitterBridgePlugin.php:292 +#: TwitterBridgePlugin.php:303 msgid "Twitter bridge configuration" msgstr "Configuration de la passerelle Twitter" -#: TwitterBridgePlugin.php:316 +#: TwitterBridgePlugin.php:327 msgid "" "The Twitter \"bridge\" plugin allows integration of a StatusNet instance " "with Twitter." @@ -399,17 +406,10 @@ msgstr "Impossible de supprimer l’utilisateur Twitter." msgid "Twitter account disconnected." msgstr "Compte Twitter déconnecté." -#: twittersettings.php:283 twittersettings.php:293 +#: twittersettings.php:283 twittersettings.php:294 msgid "Couldn't save Twitter preferences." msgstr "Impossible de sauvegarder les préférences Twitter." -#: twittersettings.php:297 +#: twittersettings.php:302 msgid "Twitter preferences saved." msgstr "Préférences Twitter enregistrées." - -#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. -#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: daemons/twitterstatusfetcher.php:264 -#, php-format -msgid "RT @%1$s %2$s" -msgstr "RT @%1$s %2$s" diff --git a/plugins/TwitterBridge/locale/ia/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/ia/LC_MESSAGES/TwitterBridge.po index c655e8e9c8..de5b00c85c 100644 --- a/plugins/TwitterBridge/locale/ia/LC_MESSAGES/TwitterBridge.po +++ b/plugins/TwitterBridge/locale/ia/LC_MESSAGES/TwitterBridge.po @@ -9,18 +9,25 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - TwitterBridge\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:52+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:18+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:11+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-twitterbridge\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. +#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. +#: twitterimport.php:113 +#, php-format +msgid "RT @%1$s %2$s" +msgstr "RT @%1$s %2$s" + #: twitter.php:349 msgid "Your Twitter bridge has been disabled." msgstr "Tu ponte a Twitter ha essite disactivate." @@ -53,7 +60,7 @@ msgstr "" "%3$s" #: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174 -#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52 +#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52 msgid "Twitter" msgstr "Twitter" @@ -65,11 +72,11 @@ msgstr "Aperir session o crear conto usante Twitter" msgid "Twitter integration options" msgstr "Optiones de integration de Twitter" -#: TwitterBridgePlugin.php:292 +#: TwitterBridgePlugin.php:303 msgid "Twitter bridge configuration" msgstr "Configuration del ponte a Twitter" -#: TwitterBridgePlugin.php:316 +#: TwitterBridgePlugin.php:327 msgid "" "The Twitter \"bridge\" plugin allows integration of a StatusNet instance " "with Twitter." @@ -388,17 +395,10 @@ msgstr "Non poteva remover le usator de Twitter." msgid "Twitter account disconnected." msgstr "Conto de Twitter disconnectite." -#: twittersettings.php:283 twittersettings.php:293 +#: twittersettings.php:283 twittersettings.php:294 msgid "Couldn't save Twitter preferences." msgstr "Non poteva salveguardar le preferentias de Twitter." -#: twittersettings.php:297 +#: twittersettings.php:302 msgid "Twitter preferences saved." msgstr "Preferentias de Twitter salveguardate." - -#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. -#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: daemons/twitterstatusfetcher.php:264 -#, php-format -msgid "RT @%1$s %2$s" -msgstr "RT @%1$s %2$s" diff --git a/plugins/TwitterBridge/locale/mk/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/mk/LC_MESSAGES/TwitterBridge.po index 88f3a2eb2e..31f166286f 100644 --- a/plugins/TwitterBridge/locale/mk/LC_MESSAGES/TwitterBridge.po +++ b/plugins/TwitterBridge/locale/mk/LC_MESSAGES/TwitterBridge.po @@ -9,18 +9,25 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - TwitterBridge\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:52+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:21+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:11+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-twitterbridge\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" +#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. +#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. +#: twitterimport.php:113 +#, php-format +msgid "RT @%1$s %2$s" +msgstr "RT @%1$s %2$s" + #: twitter.php:349 msgid "Your Twitter bridge has been disabled." msgstr "Вашиот мост до Twitter е оневозможен." @@ -53,7 +60,7 @@ msgstr "" "%3$s" #: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174 -#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52 +#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52 msgid "Twitter" msgstr "Twitter" @@ -65,11 +72,11 @@ msgstr "Најава или регистрација со Twitter" msgid "Twitter integration options" msgstr "Нагодувања за обединување со Twitter" -#: TwitterBridgePlugin.php:292 +#: TwitterBridgePlugin.php:303 msgid "Twitter bridge configuration" msgstr "Нагодувања за мостот до Twitter" -#: TwitterBridgePlugin.php:316 +#: TwitterBridgePlugin.php:327 msgid "" "The Twitter \"bridge\" plugin allows integration of a StatusNet instance " "with Twitter." @@ -391,17 +398,10 @@ msgstr "Не можев да го отстранам корисникот на T msgid "Twitter account disconnected." msgstr "Врската со сметката на Twitter е прекината." -#: twittersettings.php:283 twittersettings.php:293 +#: twittersettings.php:283 twittersettings.php:294 msgid "Couldn't save Twitter preferences." msgstr "Не можев да ги зачувам нагодувањата за Twitter." -#: twittersettings.php:297 +#: twittersettings.php:302 msgid "Twitter preferences saved." msgstr "Нагодувањата за Twitter се зачувани." - -#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. -#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: daemons/twitterstatusfetcher.php:264 -#, php-format -msgid "RT @%1$s %2$s" -msgstr "RT @%1$s %2$s" diff --git a/plugins/TwitterBridge/locale/nl/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/nl/LC_MESSAGES/TwitterBridge.po index 8e152f4054..38d1e54728 100644 --- a/plugins/TwitterBridge/locale/nl/LC_MESSAGES/TwitterBridge.po +++ b/plugins/TwitterBridge/locale/nl/LC_MESSAGES/TwitterBridge.po @@ -9,18 +9,25 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - TwitterBridge\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:52+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:21+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:11+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-twitterbridge\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. +#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. +#: twitterimport.php:113 +#, php-format +msgid "RT @%1$s %2$s" +msgstr "RT @%1$s %2$s" + #: twitter.php:349 msgid "Your Twitter bridge has been disabled." msgstr "Uw koppeling naar Twitter is uitgeschakeld." @@ -55,7 +62,7 @@ msgstr "" "%3$s" #: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174 -#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52 +#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52 msgid "Twitter" msgstr "Twitter" @@ -67,11 +74,11 @@ msgstr "Aanmelden of registreren via Twitter" msgid "Twitter integration options" msgstr "Opties voor Twitterintegratie" -#: TwitterBridgePlugin.php:292 +#: TwitterBridgePlugin.php:303 msgid "Twitter bridge configuration" msgstr "Instellingen voor Twitterkoppeling" -#: TwitterBridgePlugin.php:316 +#: TwitterBridgePlugin.php:327 msgid "" "The Twitter \"bridge\" plugin allows integration of a StatusNet instance " "with Twitter." @@ -398,17 +405,10 @@ msgstr "Het was niet mogelijk de Twittergebruiker te verwijderen." msgid "Twitter account disconnected." msgstr "De Twittergebruiker is ontkoppeld." -#: twittersettings.php:283 twittersettings.php:293 +#: twittersettings.php:283 twittersettings.php:294 msgid "Couldn't save Twitter preferences." msgstr "Het was niet mogelijk de Twittervoorkeuren op te slaan." -#: twittersettings.php:297 +#: twittersettings.php:302 msgid "Twitter preferences saved." msgstr "De Twitterinstellingen zijn opgeslagen." - -#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. -#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: daemons/twitterstatusfetcher.php:264 -#, php-format -msgid "RT @%1$s %2$s" -msgstr "RT @%1$s %2$s" diff --git a/plugins/TwitterBridge/locale/tr/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/tr/LC_MESSAGES/TwitterBridge.po index 76e7e8ecb3..3d25b37157 100644 --- a/plugins/TwitterBridge/locale/tr/LC_MESSAGES/TwitterBridge.po +++ b/plugins/TwitterBridge/locale/tr/LC_MESSAGES/TwitterBridge.po @@ -9,18 +9,25 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - TwitterBridge\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:52+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:21+0000\n" "Language-Team: Turkish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:11+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tr\n" "X-Message-Group: #out-statusnet-plugin-twitterbridge\n" "Plural-Forms: nplurals=1; plural=0;\n" +#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. +#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. +#: twitterimport.php:113 +#, php-format +msgid "RT @%1$s %2$s" +msgstr "" + #: twitter.php:349 msgid "Your Twitter bridge has been disabled." msgstr "" @@ -42,7 +49,7 @@ msgid "" msgstr "" #: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174 -#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52 +#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52 msgid "Twitter" msgstr "Twitter" @@ -54,11 +61,11 @@ msgstr "" msgid "Twitter integration options" msgstr "Twitter entegrasyon seçenekleri" -#: TwitterBridgePlugin.php:292 +#: TwitterBridgePlugin.php:303 msgid "Twitter bridge configuration" msgstr "Twitter köprü yapılandırması" -#: TwitterBridgePlugin.php:316 +#: TwitterBridgePlugin.php:327 msgid "" "The Twitter \"bridge\" plugin allows integration of a StatusNet instance " "with Twitter." @@ -372,17 +379,10 @@ msgstr "Twitter kullanıcısı silinemedi." msgid "Twitter account disconnected." msgstr "Twitter hesabı bağlantısı kesildi." -#: twittersettings.php:283 twittersettings.php:293 +#: twittersettings.php:283 twittersettings.php:294 msgid "Couldn't save Twitter preferences." msgstr "Twitter tercihleri kaydedilemedi." -#: twittersettings.php:297 +#: twittersettings.php:302 msgid "Twitter preferences saved." msgstr "Twitter tercihleriniz kaydedildi." - -#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. -#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: daemons/twitterstatusfetcher.php:264 -#, php-format -msgid "RT @%1$s %2$s" -msgstr "" diff --git a/plugins/TwitterBridge/locale/uk/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/uk/LC_MESSAGES/TwitterBridge.po index 2ee15e69bf..2eb66a5147 100644 --- a/plugins/TwitterBridge/locale/uk/LC_MESSAGES/TwitterBridge.po +++ b/plugins/TwitterBridge/locale/uk/LC_MESSAGES/TwitterBridge.po @@ -9,19 +9,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - TwitterBridge\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:52+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:21+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:11+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-plugin-twitterbridge\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" +#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. +#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. +#: twitterimport.php:113 +#, php-format +msgid "RT @%1$s %2$s" +msgstr "RT @%1$s %2$s" + #: twitter.php:349 msgid "Your Twitter bridge has been disabled." msgstr "Ваш місток до Twitter було відключено." @@ -55,7 +62,7 @@ msgstr "" "%3$s" #: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174 -#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52 +#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52 msgid "Twitter" msgstr "Twitter" @@ -67,11 +74,11 @@ msgstr "Увійти або зареєструватись з Twitter" msgid "Twitter integration options" msgstr "Параметри інтеграції з Twitter" -#: TwitterBridgePlugin.php:292 +#: TwitterBridgePlugin.php:303 msgid "Twitter bridge configuration" msgstr "Налаштування містка з Twitter" -#: TwitterBridgePlugin.php:316 +#: TwitterBridgePlugin.php:327 msgid "" "The Twitter \"bridge\" plugin allows integration of a StatusNet instance " "with Twitter." @@ -394,17 +401,10 @@ msgstr "Не вдається видалити користувача Twitter." msgid "Twitter account disconnected." msgstr "Акаунт Twitter від’єднано." -#: twittersettings.php:283 twittersettings.php:293 +#: twittersettings.php:283 twittersettings.php:294 msgid "Couldn't save Twitter preferences." msgstr "Не можу зберегти налаштування Twitter." -#: twittersettings.php:297 +#: twittersettings.php:302 msgid "Twitter preferences saved." msgstr "Налаштування Twitter збережено." - -#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. -#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: daemons/twitterstatusfetcher.php:264 -#, php-format -msgid "RT @%1$s %2$s" -msgstr "RT @%1$s %2$s" diff --git a/plugins/TwitterBridge/locale/zh_CN/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/zh_CN/LC_MESSAGES/TwitterBridge.po index 54804a7284..9208a4954a 100644 --- a/plugins/TwitterBridge/locale/zh_CN/LC_MESSAGES/TwitterBridge.po +++ b/plugins/TwitterBridge/locale/zh_CN/LC_MESSAGES/TwitterBridge.po @@ -9,19 +9,26 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - TwitterBridge\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:53+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:22+0000\n" "Language-Team: Simplified Chinese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:11+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: #out-statusnet-plugin-twitterbridge\n" "Plural-Forms: nplurals=1; plural=0;\n" +#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. +#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. +#: twitterimport.php:113 +#, php-format +msgid "RT @%1$s %2$s" +msgstr "RT @%1$s %2$s" + #: twitter.php:349 msgid "Your Twitter bridge has been disabled." msgstr "你的 Twitter bridge 已被禁用。" @@ -52,7 +59,7 @@ msgstr "" "%3$s" #: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174 -#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52 +#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52 msgid "Twitter" msgstr "Twitter" @@ -64,11 +71,11 @@ msgstr "使用 Twitter 登录或注册" msgid "Twitter integration options" msgstr "Twitter 整合选项" -#: TwitterBridgePlugin.php:292 +#: TwitterBridgePlugin.php:303 msgid "Twitter bridge configuration" msgstr "Twitter bridge 设置" -#: TwitterBridgePlugin.php:316 +#: TwitterBridgePlugin.php:327 msgid "" "The Twitter \"bridge\" plugin allows integration of a StatusNet instance " "with Twitter." @@ -376,17 +383,10 @@ msgstr "无法删除 Twitter 用户。" msgid "Twitter account disconnected." msgstr "已取消 Twitter 帐号关联。" -#: twittersettings.php:283 twittersettings.php:293 +#: twittersettings.php:283 twittersettings.php:294 msgid "Couldn't save Twitter preferences." msgstr "无法保存 Twitter 参数设置。" -#: twittersettings.php:297 +#: twittersettings.php:302 msgid "Twitter preferences saved." msgstr "已保存 Twitter 参数设置。" - -#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. -#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: daemons/twitterstatusfetcher.php:264 -#, php-format -msgid "RT @%1$s %2$s" -msgstr "RT @%1$s %2$s" diff --git a/plugins/UserFlag/locale/UserFlag.pot b/plugins/UserFlag/locale/UserFlag.pot index decb06d047..c70c7988ee 100644 --- a/plugins/UserFlag/locale/UserFlag.pot +++ b/plugins/UserFlag/locale/UserFlag.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -44,23 +44,19 @@ msgstr[1] "" msgid "Flagged by %s" msgstr "" -#. TRANS: Client error when setting flag that has already been set for a profile. -#: flagprofile.php:66 -msgid "Flag already exists." -msgstr "" - #. TRANS: AJAX form title for a flagged profile. -#: flagprofile.php:126 +#: flagprofile.php:125 msgid "Flagged for review" msgstr "" #. TRANS: Body text for AJAX form when a profile has been flagged for review. -#: flagprofile.php:130 +#. TRANS: Message added to a profile if it has been flagged for review. +#: flagprofile.php:129 UserFlagPlugin.php:173 msgid "Flagged" msgstr "" #. TRANS: Plugin description. -#: UserFlagPlugin.php:292 +#: UserFlagPlugin.php:294 msgid "" "This plugin allows flagging of profiles for review and reviewing flagged " "profiles." @@ -93,7 +89,7 @@ msgid "Flag profile for review." msgstr "" #. TRANS: Server exception. -#: User_flag_profile.php:145 +#: User_flag_profile.php:160 #, php-format msgid "Couldn't flag profile \"%d\" for review." msgstr "" diff --git a/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po index 277ce5650e..c92e4e4660 100644 --- a/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:54+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -48,23 +48,19 @@ msgstr[1] "Marqué par %1$s et %2$d autres" msgid "Flagged by %s" msgstr "Marqué par %s" -#. TRANS: Client error when setting flag that has already been set for a profile. -#: flagprofile.php:66 -msgid "Flag already exists." -msgstr "Déjà marqué." - #. TRANS: AJAX form title for a flagged profile. -#: flagprofile.php:126 +#: flagprofile.php:125 msgid "Flagged for review" msgstr "Marqué pour vérification" #. TRANS: Body text for AJAX form when a profile has been flagged for review. -#: flagprofile.php:130 +#. TRANS: Message added to a profile if it has been flagged for review. +#: flagprofile.php:129 UserFlagPlugin.php:173 msgid "Flagged" msgstr "Marqué" #. TRANS: Plugin description. -#: UserFlagPlugin.php:292 +#: UserFlagPlugin.php:294 msgid "" "This plugin allows flagging of profiles for review and reviewing flagged " "profiles." @@ -99,7 +95,7 @@ msgid "Flag profile for review." msgstr "Marquer le profil pour vérification." #. TRANS: Server exception. -#: User_flag_profile.php:145 +#: User_flag_profile.php:160 #, php-format msgid "Couldn't flag profile \"%d\" for review." msgstr "Impossible de marquer le profil « %d » pour vérification." @@ -112,3 +108,6 @@ msgstr "Effacer" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Effacer tous les marquages" + +#~ msgid "Flag already exists." +#~ msgstr "Déjà marqué." diff --git a/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po index d58458b052..2d422bf377 100644 --- a/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:54+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -48,23 +48,19 @@ msgstr[1] "Marcate per %1$s e %2$d alteres" msgid "Flagged by %s" msgstr "Marcate per %s" -#. TRANS: Client error when setting flag that has already been set for a profile. -#: flagprofile.php:66 -msgid "Flag already exists." -msgstr "Le marca ja existe." - #. TRANS: AJAX form title for a flagged profile. -#: flagprofile.php:126 +#: flagprofile.php:125 msgid "Flagged for review" msgstr "Marcate pro revision" #. TRANS: Body text for AJAX form when a profile has been flagged for review. -#: flagprofile.php:130 +#. TRANS: Message added to a profile if it has been flagged for review. +#: flagprofile.php:129 UserFlagPlugin.php:173 msgid "Flagged" msgstr "Marcate" #. TRANS: Plugin description. -#: UserFlagPlugin.php:292 +#: UserFlagPlugin.php:294 msgid "" "This plugin allows flagging of profiles for review and reviewing flagged " "profiles." @@ -98,7 +94,7 @@ msgid "Flag profile for review." msgstr "Marcar profilo pro revision." #. TRANS: Server exception. -#: User_flag_profile.php:145 +#: User_flag_profile.php:160 #, php-format msgid "Couldn't flag profile \"%d\" for review." msgstr "Non poteva marcar profilo \"%d\" pro revision." @@ -111,3 +107,6 @@ msgstr "Rader" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Rader tote le marcas" + +#~ msgid "Flag already exists." +#~ msgstr "Le marca ja existe." diff --git a/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po index ab9c1b2e4f..8faa4d58e7 100644 --- a/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:54+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -48,23 +48,19 @@ msgstr[1] "Означено од %1$s и уште %2$d други" msgid "Flagged by %s" msgstr "Означено од %s" -#. TRANS: Client error when setting flag that has already been set for a profile. -#: flagprofile.php:66 -msgid "Flag already exists." -msgstr "Ознаката веќе постои." - #. TRANS: AJAX form title for a flagged profile. -#: flagprofile.php:126 +#: flagprofile.php:125 msgid "Flagged for review" msgstr "Означено за преглед" #. TRANS: Body text for AJAX form when a profile has been flagged for review. -#: flagprofile.php:130 +#. TRANS: Message added to a profile if it has been flagged for review. +#: flagprofile.php:129 UserFlagPlugin.php:173 msgid "Flagged" msgstr "Означено" #. TRANS: Plugin description. -#: UserFlagPlugin.php:292 +#: UserFlagPlugin.php:294 msgid "" "This plugin allows flagging of profiles for review and reviewing flagged " "profiles." @@ -99,7 +95,7 @@ msgid "Flag profile for review." msgstr "Означи профил за преглед." #. TRANS: Server exception. -#: User_flag_profile.php:145 +#: User_flag_profile.php:160 #, php-format msgid "Couldn't flag profile \"%d\" for review." msgstr "Не можев да го означам профилот „%d“ за преглед." @@ -112,3 +108,6 @@ msgstr "Отстрани" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Отстрани ги сите ознаки" + +#~ msgid "Flag already exists." +#~ msgstr "Ознаката веќе постои." diff --git a/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po index 115b63433a..7cb9016a24 100644 --- a/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:54+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -48,23 +48,19 @@ msgstr[1] "Gemarkeerd door %1$s en %2$d anderen" msgid "Flagged by %s" msgstr "Gemarkeerd door %s" -#. TRANS: Client error when setting flag that has already been set for a profile. -#: flagprofile.php:66 -msgid "Flag already exists." -msgstr "De markering bestaat al." - #. TRANS: AJAX form title for a flagged profile. -#: flagprofile.php:126 +#: flagprofile.php:125 msgid "Flagged for review" msgstr "Gemarkeerd voor controle" #. TRANS: Body text for AJAX form when a profile has been flagged for review. -#: flagprofile.php:130 +#. TRANS: Message added to a profile if it has been flagged for review. +#: flagprofile.php:129 UserFlagPlugin.php:173 msgid "Flagged" msgstr "Gemarkeerd" #. TRANS: Plugin description. -#: UserFlagPlugin.php:292 +#: UserFlagPlugin.php:294 msgid "" "This plugin allows flagging of profiles for review and reviewing flagged " "profiles." @@ -100,7 +96,7 @@ msgid "Flag profile for review." msgstr "Profiel voor controle markeren" #. TRANS: Server exception. -#: User_flag_profile.php:145 +#: User_flag_profile.php:160 #, php-format msgid "Couldn't flag profile \"%d\" for review." msgstr "Het was niet mogelijk het profiel \"%d\" voor controle te markeren." @@ -113,3 +109,6 @@ msgstr "Wissen" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Alle markeringen wissen" + +#~ msgid "Flag already exists." +#~ msgstr "De markering bestaat al." diff --git a/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po index c476cf2f7c..2e1802c65d 100644 --- a/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:54+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" "Language-Team: Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -48,23 +48,19 @@ msgstr[1] "Sinalizado por %1$s e mais %2$d pessoas" msgid "Flagged by %s" msgstr "Sinalizado por %s" -#. TRANS: Client error when setting flag that has already been set for a profile. -#: flagprofile.php:66 -msgid "Flag already exists." -msgstr "Já existe uma sinalização." - #. TRANS: AJAX form title for a flagged profile. -#: flagprofile.php:126 +#: flagprofile.php:125 msgid "Flagged for review" msgstr "Sinalizado para análise" #. TRANS: Body text for AJAX form when a profile has been flagged for review. -#: flagprofile.php:130 +#. TRANS: Message added to a profile if it has been flagged for review. +#: flagprofile.php:129 UserFlagPlugin.php:173 msgid "Flagged" msgstr "Sinalizado" #. TRANS: Plugin description. -#: UserFlagPlugin.php:292 +#: UserFlagPlugin.php:294 msgid "" "This plugin allows flagging of profiles for review and reviewing flagged " "profiles." @@ -99,7 +95,7 @@ msgid "Flag profile for review." msgstr "Sinalizar perfil para análise." #. TRANS: Server exception. -#: User_flag_profile.php:145 +#: User_flag_profile.php:160 #, php-format msgid "Couldn't flag profile \"%d\" for review." msgstr "Não foi possível sinalizar o perfil \"%d\" para análise." @@ -112,3 +108,6 @@ msgstr "Limpar" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Limpar todas as sinalizações" + +#~ msgid "Flag already exists." +#~ msgstr "Já existe uma sinalização." diff --git a/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po index c6dd6e40d7..c2a57b66ac 100644 --- a/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:54+0000\n" +"POT-Creation-Date: 2010-11-04 18:25+0000\n" +"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -50,23 +50,19 @@ msgstr[2] "Відмічено %1$s та ще %2$d користувачами" msgid "Flagged by %s" msgstr "Відмічено %s" -#. TRANS: Client error when setting flag that has already been set for a profile. -#: flagprofile.php:66 -msgid "Flag already exists." -msgstr "Відмітка вже стоїть." - #. TRANS: AJAX form title for a flagged profile. -#: flagprofile.php:126 +#: flagprofile.php:125 msgid "Flagged for review" msgstr "Відмічені для розгляду" #. TRANS: Body text for AJAX form when a profile has been flagged for review. -#: flagprofile.php:130 +#. TRANS: Message added to a profile if it has been flagged for review. +#: flagprofile.php:129 UserFlagPlugin.php:173 msgid "Flagged" msgstr "Відмічені" #. TRANS: Plugin description. -#: UserFlagPlugin.php:292 +#: UserFlagPlugin.php:294 msgid "" "This plugin allows flagging of profiles for review and reviewing flagged " "profiles." @@ -101,7 +97,7 @@ msgid "Flag profile for review." msgstr "Відмітити профіль для розгляду." #. TRANS: Server exception. -#: User_flag_profile.php:145 +#: User_flag_profile.php:160 #, php-format msgid "Couldn't flag profile \"%d\" for review." msgstr "Не вдалося відмітити профіль «%d» для розгляду." @@ -114,3 +110,6 @@ msgstr "Зняти" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Зняти всі позначки" + +#~ msgid "Flag already exists." +#~ msgstr "Відмітка вже стоїть." From 035081a803b005b8a2410c6936eac4027fda493c Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Fri, 5 Nov 2010 06:34:06 +0000 Subject: [PATCH 021/220] Much more reliable Facebook SSO --- plugins/FacebookSSO/FacebookSSOPlugin.php | 62 +- ...okregister.php => facebookfinishlogin.php} | 50 +- plugins/FacebookSSO/actions/facebooklogin.php | 125 ++-- plugins/FacebookSSO/images/login-button.png | Bin 0 -> 1661 bytes plugins/FacebookSSO/lib/facebookclient.php | 640 ++++++++++++++++++ .../FacebookSSO/lib/facebookqueuehandler.php | 63 ++ 6 files changed, 806 insertions(+), 134 deletions(-) rename plugins/FacebookSSO/actions/{facebookregister.php => facebookfinishlogin.php} (93%) create mode 100644 plugins/FacebookSSO/images/login-button.png create mode 100644 plugins/FacebookSSO/lib/facebookclient.php create mode 100644 plugins/FacebookSSO/lib/facebookqueuehandler.php diff --git a/plugins/FacebookSSO/FacebookSSOPlugin.php b/plugins/FacebookSSO/FacebookSSOPlugin.php index b14ef0bade..a726b2facc 100644 --- a/plugins/FacebookSSO/FacebookSSOPlugin.php +++ b/plugins/FacebookSSO/FacebookSSOPlugin.php @@ -125,7 +125,7 @@ class FacebookSSOPlugin extends Plugin include_once $dir . '/extlib/facebookapi_php5_restlib.php'; return false; case 'FacebookloginAction': - case 'FacebookregisterAction': + case 'FacebookfinishloginAction': case 'FacebookadminpanelAction': case 'FacebooksettingsAction': include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; @@ -146,15 +146,17 @@ class FacebookSSOPlugin extends Plugin function needsScripts($action) { static $needy = array( - 'FacebookloginAction', - 'FacebookregisterAction', + //'FacebookloginAction', + 'FacebookfinishloginAction', 'FacebookadminpanelAction', 'FacebooksettingsAction' ); if (in_array(get_class($action), $needy)) { + common_debug("needs scripts!"); return true; } else { + common_debug("doesn't need scripts!"); return false; } } @@ -185,8 +187,8 @@ class FacebookSSOPlugin extends Plugin array('action' => 'facebooklogin') ); $m->connect( - 'main/facebookregister', - array('action' => 'facebookregister') + 'main/facebookfinishlogin', + array('action' => 'facebookfinishlogin') ); $m->connect( @@ -297,51 +299,43 @@ class FacebookSSOPlugin extends Plugin } function onStartShowHeader($action) + { + // output
as close to as possible + $action->element('div', array('id' => 'fb-root')); + return true; + } + + function onEndShowScripts($action) { if ($this->needsScripts($action)) { - // output
as close to as possible - $action->element('div', array('id' => 'fb-root')); - - $dir = dirname(__FILE__); + $action->script('https://connect.facebook.net/en_US/all.js'); $script = <<inlineScript( sprintf($script, json_encode($this->facebook->getAppId()), - json_encode($this->facebook->getSession()) + json_encode($this->facebook->getSession()), + common_local_url('facebookfinishlogin') ) ); } - - return true; } /* diff --git a/plugins/FacebookSSO/actions/facebookregister.php b/plugins/FacebookSSO/actions/facebookfinishlogin.php similarity index 93% rename from plugins/FacebookSSO/actions/facebookregister.php rename to plugins/FacebookSSO/actions/facebookfinishlogin.php index e21deff880..16f7cff500 100644 --- a/plugins/FacebookSSO/actions/facebookregister.php +++ b/plugins/FacebookSSO/actions/facebookfinishlogin.php @@ -2,7 +2,7 @@ /** * StatusNet, the distributed open-source microblogging tool * - * Register a local user and connect it to a Facebook account + * Login or register a local user based on a Facebook user * * PHP version 5 * @@ -31,7 +31,7 @@ if (!defined('STATUSNET')) { exit(1); } -class FacebookregisterAction extends Action +class FacebookfinishloginAction extends Action { private $facebook = null; // Facebook client @@ -220,7 +220,7 @@ class FacebookregisterAction extends Action $this->elementStart('form', array('method' => 'post', 'id' => 'form_settings_facebook_connect', 'class' => 'form_settings', - 'action' => common_local_url('facebookregister'))); + 'action' => common_local_url('facebookfinishlogin'))); $this->elementStart('fieldset', array('id' => 'settings_facebook_connect_options')); // TRANS: Legend. $this->element('legend', null, _m('Connection options')); @@ -428,27 +428,46 @@ class FacebookregisterAction extends Action return; } - common_debug('Facebook Connect Plugin - ' . - "Connected Facebook user $this->fbuid to local user $user->id"); + common_debug( + sprintf( + 'Connected Facebook user %s to local user %d', + $this->fbuid, + $user->id + ), + __FILE__ + ); // Return to Facebook connection settings tab - common_redirect(common_local_url('FBConnectSettings'), 303); + common_redirect(common_local_url('facebookfinishlogin'), 303); } function tryLogin() { - common_debug('Facebook Connect Plugin - ' . - "Trying login for Facebook user $this->fbuid."); + common_debug( + sprintf( + 'Trying login for Facebook user %s', + $this->fbuid + ), + __FILE__ + ); - $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_CONNECT_SERVICE); + $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_SERVICE); if (!empty($flink)) { $user = $flink->getUser(); if (!empty($user)) { - common_debug('Facebook Connect Plugin - ' . - "Logged in Facebook user $flink->foreign_id as user $user->id ($user->nickname)"); + common_log( + LOG_INFO, + sprintf( + 'Logged in Facebook user %s as user %d (%s)', + $this->fbuid, + $user->nickname, + $user->id + ), + __FILE__ + ); common_set_user($user); common_real_login(true); @@ -457,8 +476,13 @@ class FacebookregisterAction extends Action } else { - common_debug('Facebook Connect Plugin - ' . - "No flink found for fbuid: $this->fbuid - new user"); + common_debug( + sprintf( + 'No flink found for fbuid: %s - new user', + $this->fbuid + ), + __FILE__ + ); $this->showForm(null, $this->bestNewNickname()); } diff --git a/plugins/FacebookSSO/actions/facebooklogin.php b/plugins/FacebookSSO/actions/facebooklogin.php index bb30be1af7..08c237fe6e 100644 --- a/plugins/FacebookSSO/actions/facebooklogin.php +++ b/plugins/FacebookSSO/actions/facebooklogin.php @@ -40,90 +40,10 @@ class FacebookloginAction extends Action parent::handle($args); if (common_is_real_login()) { - $this->clientError(_m('Already logged in.')); - } else { - - $facebook = new Facebook( - array( - 'appId' => common_config('facebook', 'appid'), - 'secret' => common_config('facebook', 'secret'), - 'cookie' => true, - ) - ); - - $session = $facebook->getSession(); - $fbuser = null; - - if ($session) { - try { - $fbuid = $facebook->getUser(); - $fbuser = $facebook->api('/me'); - } catch (FacebookApiException $e) { - common_log(LOG_ERROR, $e); - } - } - - if (!empty($fbuser)) { - common_debug("Found a valid Facebook user", __FILE__); - - // Check to see if we have a foreign link already - $flink = Foreign_link::getByForeignId($fbuid, FACEBOOK_SERVICE); - - if (empty($flink)) { - - // See if the user would like to register a new local - // account - common_redirect( - common_local_url('facebookregister'), - 303 - ); - - } else { - - // Log our user in! - $user = $flink->getUser(); - - if (!empty($user)) { - - common_log( - LOG_INFO, - sprintf( - 'Logged in Facebook user %s as user %s (%s)', - $fbuid, - $user->id, - $user->nickname - ), - __FILE__ - ); - - common_set_user($user); - common_real_login(true); - $this->goHome($user->nickname); - } - } - - } + $this->showPage(); } - - $this->showPage(); - } - - function goHome($nickname) - { - $url = common_get_returnto(); - if ($url) { - // We don't have to return to it again - common_set_returnto(null); - } else { - $url = common_local_url( - 'all', - array('nickname' => $nickname) - ); - } - - common_redirect($url, 303); } function getInstructions() @@ -151,14 +71,45 @@ class FacebookloginAction extends Action $this->elementStart('fieldset'); - $attrs = array( - //'show-faces' => 'true', - //'max-rows' => '4', - //'width' => '600', - 'perms' => 'user_location,user_website,offline_access,publish_stream' + $facebook = Facebookclient::getFacebook(); + + // Degrade to plain link if JavaScript is not available + $this->elementStart( + 'a', + array( + 'href' => $facebook->getLoginUrl( + array( + 'next' => common_local_url('facebookfinishlogin'), + 'cancel' => common_local_url('facebooklogin') + ) + ), + 'id' => 'facebook_button' + ) ); - $this->element('fb:login-button', $attrs); + $attrs = array( + 'src' => common_path( + 'plugins/FacebookSSO/images/login-button.png', + true + ), + 'alt' => 'Login with Facebook', + 'title' => 'Login with Facebook' + ); + + $this->element('img', $attrs); + + $this->elementEnd('a'); + + /* + $this->element('div', array('id' => 'fb-root')); + $this->script( + sprintf( + 'http://connect.facebook.net/en_US/all.js#appId=%s&xfbml=1', + common_config('facebook', 'appid') + ) + ); + $this->element('fb:facepile', array('max-rows' => '2', 'width' =>'300')); + */ $this->elementEnd('fieldset'); } diff --git a/plugins/FacebookSSO/images/login-button.png b/plugins/FacebookSSO/images/login-button.png new file mode 100644 index 0000000000000000000000000000000000000000..4e7766bcad5c627ba0969f9df4a4adffb0eaf2c7 GIT binary patch literal 1661 zcmV-@27>vCP)~SM{{Fzm+-P{L-{bAc&f#u-uXKa6 zae%RMfwJ%M_RG-Xw7b=GgR;-n%u(;Eyvd`-6^KyZ)%FyD}+2^RS&Ze);=IQZkd#%{q>34>-<>>Hhdabp* z*8Tnd`1$*pq{oYwzqr5G^!54B*5$0U(fRuP=j!rpe6H;7^qQo|#LC{w(c zaDT9mn!#sxtV>*!YI?2c>+-I)(xtA=>+bY|kGrO?&bq+SSzeXyyr(2||Q z(%0sChqlbpV{@s&#@u9dse+HXNm`O(bE#x?s!3UrVRET}jk;lRsYzLpVR5J=G;fb7(31cF z17b-;K~#9!)sFXf3}F<8vFzQfNJtP2`8J4z*bu#Jh>&csL=T@Hy)Ds8L|@S&x``5X zjoy2k=)ITKTlD@PxRd$jOfbq%HlB0lyYIPk&wHL+IhouVMh2-hw<7@mQK7}=wMT#0#P|Z&T&E(*z zEQq+Ado!BAdp ztPm0sLNtJi8cWVhRQ^gWv{L1;Dpg6f>R~l%)*`j*)FqbidgUs~iuEHJkjNm?uu+sH zoJ3n=^r+U@Y;KahplO7ySwlja*NJV>vTl%}Rcrjwrfs{p_N-bNsMbMWUR9$EP{7<# z*#+R!DSzkCF3^>7-MYs^584xYQLcBNzR-_K^oIchVUWG+V9J?kS;LS7Jm7{78_o($ z@$sQ_#K=*x(R4J789CN(T;jm-20MkMA`@UDt7ZcmCQTke85(L+epH(Z)2Q7sJX% zyK+4y^~TLorxH(yaO*aN8%0*l1~%M*yP^!Lxl~Y14jHcRxpyC*2lj{kps?%rJbJ9P zed2OG#c}_c3wi!RUOr~k%J>0P%Tz%%Ib>vN@X~6q`M=8iSD@N!6@XQ8c=J{Z@6dN| z{~f5dPX*QF@cx7QLA8%6s3wQ^pWM$c)INW4KdAOKhmz|XdC@~$IWWJf00000NkvXX Hu0mjfITyzy literal 0 HcmV?d00001 diff --git a/plugins/FacebookSSO/lib/facebookclient.php b/plugins/FacebookSSO/lib/facebookclient.php new file mode 100644 index 0000000000..a0549a1d01 --- /dev/null +++ b/plugins/FacebookSSO/lib/facebookclient.php @@ -0,0 +1,640 @@ +. + * + * @category Plugin + * @package StatusNet + * @author Craig Andrews + * @author Zach Copley + * @copyright 2009-2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Class for communication with Facebook + * + * @category Plugin + * @package StatusNet + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ +class Facebookclient +{ + protected $facebook = null; // Facebook Graph client obj + protected $flink = null; // Foreign_link StatusNet -> Facebook + protected $notice = null; // The user's notice + protected $user = null; // Sender of the notice + protected $oldRestClient = null; // Old REST API client + + function __constructor($notice) + { + $this->facebook = self::getFacebook(); + $this->notice = $notice; + + $this->flink = Foreign_link::getByUserID( + $notice->profile_id, + FACEBOOK_SERVICE + ); + + $this->user = $this->flink->getUser(); + + $this->oldRestClient = self::getOldRestClient(); + } + + /* + * Get and instance of the old REST API client for sending notices from + * users with Facebook links that pre-exist the Graph API + */ + static function getOldRestClient() + { + $apikey = common_config('facebook', 'apikey'); + $secret = common_config('facebook', 'secret'); + + // If there's no app key and secret set in the local config, look + // for a global one + if (empty($apikey) || empty($secret)) { + $apikey = common_config('facebook', 'global_apikey'); + $secret = common_config('facebook', 'global_secret'); + } + + return new FacebookRestClient($apikey, $secret, null); + } + + /* + * Get an instance of the Facebook Graph SDK object + * + * @param string $appId Application + * @param string $secret Facebook API secret + * + * @return Facebook A Facebook SDK obj + */ + static function getFacebook($appId = null, $secret = null) + { + // Check defaults and configuration for application ID and secret + if (empty($appId)) { + $appId = common_config('facebook', 'appid'); + } + + if (empty($secret)) { + $secret = common_config('facebook', 'secret'); + } + + // If there's no app ID and secret set in the local config, look + // for a global one + if (empty($appId) || empty($secret)) { + $appId = common_config('facebook', 'global_appid'); + $secret = common_config('facebook', 'global_secret'); + } + + return new Facebook( + array( + 'appId' => $appId, + 'secret' => $secret, + 'cookie' => true + ) + ); + } + + /* + * Broadcast a notice to Facebook + * + * @param Notice $notice the notice to send + */ + static function facebookBroadcastNotice($notice) + { + $client = new Facebookclient($notice); + $client->sendNotice(); + } + + /* + * Should the notice go to Facebook? + */ + function isFacebookBound() { + + if (empty($this->flink)) { + common_log( + LOG_WARN, + sprintf( + "No Foreign_link to Facebook for the author of notice %d.", + $this->notice->id + ), + __FILE__ + ); + return false; + } + + // Avoid a loop + if ($this->notice->source == 'Facebook') { + common_log( + LOG_INFO, + sprintf( + 'Skipping notice %d because its source is Facebook.', + $this->notice->id + ), + __FILE__ + ); + return false; + } + + // If the user does not want to broadcast to Facebook, move along + if (!($this->flink->noticesync & FOREIGN_NOTICE_SEND == FOREIGN_NOTICE_SEND)) { + common_log( + LOG_INFO, + sprintf( + 'Skipping notice %d because user has FOREIGN_NOTICE_SEND bit off.', + $this->notice->id + ), + __FILE__ + ); + return false; + } + + // If it's not a reply, or if the user WANTS to send @-replies, + // then, yeah, it can go to Facebook. + if (!preg_match('/@[a-zA-Z0-9_]{1,15}\b/u', $this->notice->content) || + ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY)) { + return true; + } + + return false; + } + + /* + * Determine whether we should send this notice using the Graph API or the + * old REST API and then dispatch + */ + function sendNotice() + { + // If there's nothing in the credentials field try to send via + // the Old Rest API + + if (empty($this->flink->credentials)) { + $this->sendOldRest(); + } else { + + // Otherwise we most likely have an access token + $this->sendGraph(); + } + } + + /* + * Send a notice to Facebook using the Graph API + */ + function sendGraph() + { + common_debug("Send notice via Graph API", __FILE__); + } + + /* + * Send a notice to Facebook using the deprecated Old REST API. We need this + * for backwards compatibility. Users who signed up for Facebook bridging + * using the old Facebook Canvas application do not have an OAuth 2.0 + * access token. + */ + function sendOldRest() + { + if (isFacebookBound()) { + + try { + + $canPublish = $this->checkPermission('publish_stream'); + $canUpdate = $this->checkPermission('status_update'); + + // Post to Facebook + if ($notice->hasAttachments() && $canPublish == 1) { + $this->restPublishStream(); + } elseif ($canUpdate == 1 || $canPublish == 1) { + $this->restStatusUpdate(); + } else { + + $msg = 'Not sending notice %d to Facebook because user %s ' + . '(%d), fbuid %s, does not have \'status_update\' ' + . 'or \'publish_stream\' permission.'; + + common_log( + LOG_WARNING, + sprintf( + $msg, + $this->notice->id, + $this->user->nickname, + $this->user->id, + $this->flink->foreign_id + ), + __FILE__ + ); + } + + } catch (FacebookRestClientException $e) { + return $this->handleFacebookError($e); + } + } + + return true; + } + + /* + * Query Facebook to to see if a user has permission + * + * + * + * @param $permission the permission to check for - must be either + * public_stream or status_update + * + * @return boolean result + */ + function checkPermission($permission) + { + + if (!in_array($permission, array('publish_stream', 'status_update'))) { + throw new ServerExpception("No such permission!"); + } + + $fbuid = $this->flink->foreign_link; + + common_debug( + sprintf( + 'Checking for %s permission for user %s (%d), fbuid %s', + $permission, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + + // NOTE: $this->oldRestClient->users_hasAppPermission() has been + // returning bogus results, so we're using FQL to check for + // permissions + + $fql = sprintf( + "SELECT %s FROM permissions WHERE uid = %s", + $permission, + $fbuid + ); + + $result = $this->oldRestClient->fql_query($fql); + + $hasPermission = 0; + + if (isset($result[0][$permission])) { + $canPublish = $result[0][$permission]; + } + + if ($hasPermission == 1) { + + common_debug( + sprintf( + '%s (%d), fbuid %s has %s permission', + $permission, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + + return true; + + } else { + + $logMsg = '%s (%d), fbuid $fbuid does NOT have %s permission.' + . 'Facebook returned: %s'; + + common_debug( + sprintf( + $logMsg, + $this->user->nickname, + $this->user->id, + $permission, + $fbuid, + var_export($result, true) + ), + __FILE__ + ); + + return false; + + } + + } + + function handleFacebookError($e) + { + $fbuid = $this->flink->foreign_id; + $code = $e->getCode(); + $errmsg = $e->getMessage(); + + // XXX: Check for any others? + switch($code) { + case 100: // Invalid parameter + $msg = 'Facebook claims notice %d was posted with an invalid ' + . 'parameter (error code 100 - %s) Notice details: ' + . '[nickname=%s, user id=%d, fbuid=%d, content="%s"]. ' + . 'Dequeing.'; + common_log( + LOG_ERR, sprintf( + $msg, + $this->notice->id, + $errmsg, + $this->user->nickname, + $this->user->id, + $fbuid, + $this->notice->content + ), + __FILE__ + ); + return true; + break; + case 200: // Permissions error + case 250: // Updating status requires the extended permission status_update + $this->disconnect(); + return true; // dequeue + break; + case 341: // Feed action request limit reached + $msg = '%s (userid=%d, fbuid=%d) has exceeded his/her limit ' + . 'for posting notices to Facebook today. Dequeuing ' + . 'notice %d'; + common_log( + LOG_INFO, sprintf( + $msg, + $user->nickname, + $user->id, + $fbuid, + $this->notice->id + ), + __FILE__ + ); + // @fixme: We want to rety at a later time when the throttling has expired + // instead of just giving up. + return true; + break; + default: + $msg = 'Facebook returned an error we don\'t know how to deal with ' + . 'when posting notice %d. Error code: %d, error message: "%s"' + . ' Notice details: [nickname=%s, user id=%d, fbuid=%d, ' + . 'notice content="%s"]. Dequeing.'; + common_log( + LOG_ERR, sprintf( + $msg, + $this->notice->id, + $code, + $errmsg, + $this->user->nickname, + $this->user->id, + $fbuid, + $this->notice->content + ), + __FILE__ + ); + return true; // dequeue + break; + } + } + + function restStatusUpdate() + { + $fbuid = $this->flink->foreign_id; + + common_debug( + sprintf( + "Attempting to post notice %d as a status update for %s (%d), fbuid %s", + $this->notice->id, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + + $result = $this->oldRestClient->users_setStatus( + $this->notice->content, + $fbuid, + false, + true + ); + + common_log( + LOG_INFO, + sprintf( + "Posted notice %s as a status update for %s (%d), fbuid %s", + $this->notice->id, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + } + + function restPublishStream() + { + $fbuid = $this->flink->foreign_id; + + common_debug( + sprintf( + 'Attempting to post notice %d as stream item with attachment for ' + . '%s (%d) fbuid %s', + $this->notice->id, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + + $fbattachment = format_attachments($notice->attachments()); + + $this->oldRestClient->stream_publish( + $this->notice->content, + $fbattachment, + null, + null, + $fbuid + ); + + common_log( + LOG_INFO, + sprintf( + 'Posted notice %d as a stream item with attachment for %s ' + . '(%d), fbuid %s', + $this->notice->id, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + + } + + function format_attachments($attachments) + { + $fbattachment = array(); + $fbattachment['media'] = array(); + + foreach($attachments as $attachment) + { + if($enclosure = $attachment->getEnclosure()){ + $fbmedia = get_fbmedia_for_attachment($enclosure); + }else{ + $fbmedia = get_fbmedia_for_attachment($attachment); + } + if($fbmedia){ + $fbattachment['media'][]=$fbmedia; + }else{ + $fbattachment['name'] = ($attachment->title ? + $attachment->title : $attachment->url); + $fbattachment['href'] = $attachment->url; + } + } + if(count($fbattachment['media'])>0){ + unset($fbattachment['name']); + unset($fbattachment['href']); + } + return $fbattachment; + } + + /** + * given an File objects, returns an associative array suitable for Facebook media + */ + function get_fbmedia_for_attachment($attachment) + { + $fbmedia = array(); + + if (strncmp($attachment->mimetype, 'image/', strlen('image/')) == 0) { + $fbmedia['type'] = 'image'; + $fbmedia['src'] = $attachment->url; + $fbmedia['href'] = $attachment->url; + } else if ($attachment->mimetype == 'audio/mpeg') { + $fbmedia['type'] = 'mp3'; + $fbmedia['src'] = $attachment->url; + }else if ($attachment->mimetype == 'application/x-shockwave-flash') { + $fbmedia['type'] = 'flash'; + + // http://wiki.developers.facebook.com/index.php/Attachment_%28Streams%29 + // says that imgsrc is required... but we have no value to put in it + // $fbmedia['imgsrc']=''; + + $fbmedia['swfsrc'] = $attachment->url; + }else{ + return false; + } + return $fbmedia; + } + + function disconnect() + { + $fbuid = $this->flink->foreign_link; + + common_log( + LOG_INFO, + sprintf( + 'Removing Facebook link for %s (%d), fbuid %s', + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + + $result = $flink->delete(); + + if (empty($result)) { + common_log( + LOG_ERR, + sprintf( + 'Could not remove Facebook link for %s (%d), fbuid %s', + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + common_log_db_error($flink, 'DELETE', __FILE__); + } + + // Notify the user that we are removing their Facebook link + + $result = $this->mailFacebookDisconnect(); + + if (!$result) { + + $msg = 'Unable to send email to notify %s (%d), fbuid %s ' + . 'about his/her Facebook link being removed.'; + + common_log( + LOG_WARNING, + sprintf( + $msg, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + } + } + + /** + * Send a mail message to notify a user that her Facebook link + * has been terminated. + * + * @return boolean success flag + */ + function mailFacebookDisconnect() + { + $profile = $user->getProfile(); + + $siteName = common_config('site', 'name'); + + common_switch_locale($user->language); + + $subject = sprintf( + _m('Your Facebook connection has been removed'), + $siteName + ); + + $msg = <<user->nickname, + $siteName + ); + + common_switch_locale(); + + return mail_to_user($this->user, $subject, $body); + } + +} diff --git a/plugins/FacebookSSO/lib/facebookqueuehandler.php b/plugins/FacebookSSO/lib/facebookqueuehandler.php new file mode 100644 index 0000000000..af96d35c49 --- /dev/null +++ b/plugins/FacebookSSO/lib/facebookqueuehandler.php @@ -0,0 +1,63 @@ +. + * + * @category Plugin + * @package StatusNet + * @author Zach Copley + * @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 . '/plugins/Facebook/facebookutil.php'; + +class FacebookQueueHandler extends QueueHandler +{ + function transport() + { + return 'facebook'; + } + + function handle($notice) + { + if ($this->_isLocal($notice)) { + return facebookBroadcastNotice($notice); + } + return true; + } + + /** + * Determine whether the notice was locally created + * + * @param Notice $notice the notice + * + * @return boolean locality + */ + function _isLocal($notice) + { + return ($notice->is_local == Notice::LOCAL_PUBLIC || + $notice->is_local == Notice::LOCAL_NONPUBLIC); + } +} From 91e8e6f3858b2a69de041f9915c18bfb11d756fb Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Sat, 6 Nov 2010 00:54:34 +0100 Subject: [PATCH 022/220] Fix typo. Spotted by EugeneZelenko. --- plugins/Adsense/AdsensePlugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Adsense/AdsensePlugin.php b/plugins/Adsense/AdsensePlugin.php index 3d733e1509..1965f95eab 100644 --- a/plugins/Adsense/AdsensePlugin.php +++ b/plugins/Adsense/AdsensePlugin.php @@ -206,7 +206,7 @@ class AdsensePlugin extends UAPPlugin 'author' => 'Evan Prodromou', 'homepage' => 'http://status.net/wiki/Plugin:Adsense', 'rawdescription' => - _m('Plugin to add Google Adsense to StatusNet sites.')); + _m('Plugin to add Google AdSense to StatusNet sites.')); return true; } } From 7aa24cbc67a859ed1e2abd84306883088ff5f116 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Sun, 7 Nov 2010 22:04:44 +0100 Subject: [PATCH 023/220] Localisation updates from http://translatewiki.net --- locale/br/LC_MESSAGES/statusnet.po | 55 ++-- locale/ca/LC_MESSAGES/statusnet.po | 15 +- locale/cs/LC_MESSAGES/statusnet.po | 15 +- locale/de/LC_MESSAGES/statusnet.po | 284 ++++++++---------- locale/en_GB/LC_MESSAGES/statusnet.po | 15 +- locale/eo/LC_MESSAGES/statusnet.po | 15 +- locale/es/LC_MESSAGES/statusnet.po | 15 +- locale/fa/LC_MESSAGES/statusnet.po | 14 +- locale/fr/LC_MESSAGES/statusnet.po | 15 +- locale/gl/LC_MESSAGES/statusnet.po | 17 +- locale/hu/LC_MESSAGES/statusnet.po | 15 +- locale/ia/LC_MESSAGES/statusnet.po | 38 +-- locale/it/LC_MESSAGES/statusnet.po | 15 +- locale/ja/LC_MESSAGES/statusnet.po | 15 +- locale/ka/LC_MESSAGES/statusnet.po | 15 +- locale/ko/LC_MESSAGES/statusnet.po | 15 +- locale/mk/LC_MESSAGES/statusnet.po | 47 ++- locale/nb/LC_MESSAGES/statusnet.po | 119 +++----- locale/nl/LC_MESSAGES/statusnet.po | 41 +-- locale/pl/LC_MESSAGES/statusnet.po | 44 +-- locale/pt/LC_MESSAGES/statusnet.po | 15 +- locale/pt_BR/LC_MESSAGES/statusnet.po | 45 ++- locale/ru/LC_MESSAGES/statusnet.po | 15 +- locale/sv/LC_MESSAGES/statusnet.po | 15 +- locale/te/LC_MESSAGES/statusnet.po | 59 ++-- locale/tr/LC_MESSAGES/statusnet.po | 21 +- locale/uk/LC_MESSAGES/statusnet.po | 50 ++- locale/zh_CN/LC_MESSAGES/statusnet.po | 13 +- plugins/Adsense/locale/Adsense.pot | 4 +- .../Adsense/locale/br/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/de/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/es/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/fr/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/gl/LC_MESSAGES/Adsense.po | 10 +- .../Adsense/locale/ia/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/it/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/ka/LC_MESSAGES/Adsense.po | 10 +- .../Adsense/locale/mk/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/nl/LC_MESSAGES/Adsense.po | 11 +- .../locale/pt_BR/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/ru/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/sv/LC_MESSAGES/Adsense.po | 10 +- .../Adsense/locale/tl/LC_MESSAGES/Adsense.po | 11 +- .../Adsense/locale/uk/LC_MESSAGES/Adsense.po | 11 +- .../locale/zh_CN/LC_MESSAGES/Adsense.po | 11 +- .../locale/nb/LC_MESSAGES/BitlyUrl.po | 10 +- .../Disqus/locale/br/LC_MESSAGES/Disqus.po | 12 +- .../Sample/locale/br/LC_MESSAGES/Sample.po | 20 +- .../Sitemap/locale/br/LC_MESSAGES/Sitemap.po | 11 +- .../locale/fr/LC_MESSAGES/UserFlag.po | 11 +- .../locale/ia/LC_MESSAGES/UserFlag.po | 11 +- .../locale/mk/LC_MESSAGES/UserFlag.po | 11 +- .../locale/nl/LC_MESSAGES/UserFlag.po | 11 +- .../locale/pt/LC_MESSAGES/UserFlag.po | 11 +- .../locale/uk/LC_MESSAGES/UserFlag.po | 11 +- 55 files changed, 549 insertions(+), 804 deletions(-) diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po index 17d5db60b0..d89f3ae7d0 100644 --- a/locale/br/LC_MESSAGES/statusnet.po +++ b/locale/br/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:07+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:04+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -42,7 +42,8 @@ msgstr "Enskrivadur" #. TRANS: Checkbox instructions for admin setting "Private". #: actions/accessadminpanel.php:155 msgid "Prohibit anonymous users (not logged in) from viewing site?" -msgstr "Nac'h ouzh an implijerien dizanv (nann-luget) da welet al lec'hienn ?" +msgstr "" +"Nac'h ouzh an implijerien dizanv (nann-kevreet) da welet al lec'hienn ?" #. TRANS: Checkbox label for prohibiting anonymous users from viewing site. #: actions/accessadminpanel.php:157 @@ -814,7 +815,6 @@ msgstr "" #. TRANS: Fieldset legend. #: actions/apioauthauthorize.php:455 -#, fuzzy msgctxt "LEGEND" msgid "Account" msgstr "Kont" @@ -852,22 +852,19 @@ msgstr "Nullañ" #. TRANS: Button text that when clicked will allow access to an account by an external application. #: actions/apioauthauthorize.php:485 -#, fuzzy msgctxt "BUTTON" msgid "Allow" msgstr "Aotreañ" #. TRANS: Form instructions. #: actions/apioauthauthorize.php:502 -#, fuzzy msgid "Authorize access to your account information." -msgstr "Aotreañ pe nac'hañ ar moned da ditouroù ho kont." +msgstr "Aotreañ ar moned da ditouroù ho kont." #. TRANS: Header for user notification after revoking OAuth access to an application. #: actions/apioauthauthorize.php:594 -#, fuzzy msgid "Authorization canceled." -msgstr "Nullet eo bet kadarnadenn ar bostelerezh prim." +msgstr "Nullet eo bet aotre." #. TRANS: User notification after revoking OAuth access to an application. #. TRANS: %s is an OAuth token. @@ -878,9 +875,8 @@ msgstr "" #. TRANS: Title of the page notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. #: actions/apioauthauthorize.php:621 -#, fuzzy msgid "You have successfully authorized the application" -msgstr "N'oc'h ket aotreet." +msgstr "Aotreet ho peus ar poellad." #. TRANS: Message notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. #: actions/apioauthauthorize.php:625 @@ -892,9 +888,9 @@ msgstr "" #. TRANS: Title of the page notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. #: actions/apioauthauthorize.php:632 -#, fuzzy, php-format +#, php-format msgid "You have successfully authorized %s" -msgstr "N'oc'h ket aotreet." +msgstr "Aotreet ho peus %s" #. TRANS: Message notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. @@ -1146,21 +1142,18 @@ msgstr "Rakwelet" #. TRANS: Button on avatar upload page to delete current avatar. #: actions/avatarsettings.php:155 -#, fuzzy msgctxt "BUTTON" msgid "Delete" -msgstr "Diverkañ" +msgstr "Dilemel" #. TRANS: Button on avatar upload page to upload an avatar. #: actions/avatarsettings.php:173 -#, fuzzy msgctxt "BUTTON" msgid "Upload" msgstr "Enporzhiañ" #. TRANS: Button on avatar upload crop form to confirm a selected crop as avatar. #: actions/avatarsettings.php:243 -#, fuzzy msgctxt "BUTTON" msgid "Crop" msgstr "Adframmañ" @@ -1309,7 +1302,6 @@ msgstr "Distankañ implijer ar strollad" #. TRANS: Button text for unblocking a user from a group. #: actions/blockedfromgroup.php:323 -#, fuzzy msgctxt "BUTTON" msgid "Unblock" msgstr "Distankañ" @@ -1483,9 +1475,8 @@ msgstr "%1$s en deus kuitaet ar strollad %2$s" #. TRANS: Title of delete group page. #. TRANS: Form legend for deleting a group. #: actions/deletegroup.php:176 actions/deletegroup.php:202 -#, fuzzy msgid "Delete group" -msgstr "Diverkañ an implijer" +msgstr "Dilemel ar strollad" #. TRANS: Warning in form for deleleting a group. #: actions/deletegroup.php:206 @@ -1519,7 +1510,7 @@ msgstr "Diverkañ an implijer-mañ" #: lib/adminpanelaction.php:71 lib/profileformaction.php:64 #: lib/settingsaction.php:72 msgid "Not logged in." -msgstr "Nann-luget." +msgstr "Nann-kevreet." #. TRANS: Error message displayed trying to delete a notice that was not made by the current user. #: actions/deletenotice.php:78 @@ -1610,9 +1601,8 @@ msgid "Site logo" msgstr "Logo al lec'hienn" #: actions/designadminpanel.php:457 -#, fuzzy msgid "SSL logo" -msgstr "Logo al lec'hienn" +msgstr "Logo SSL" #: actions/designadminpanel.php:469 msgid "Change theme" @@ -2684,15 +2674,14 @@ msgstr "Rankout a reoc'h bezañ luget evit pediñ implijerien all e %s." #. TRANS: Form validation message when providing an e-mail address that does not validate. #. TRANS: %s is an invalid e-mail address. #: actions/invite.php:77 -#, fuzzy, php-format +#, php-format msgid "Invalid email address: %s." -msgstr "Fall eo ar postel : %s" +msgstr "Fall eo ar postel : %s." #. TRANS: Page title when invitations have been sent. #: actions/invite.php:116 -#, fuzzy msgid "Invitations sent" -msgstr "Pedadenn(où) kaset" +msgstr "Pedadennoù kaset" #. TRANS: Page title when inviting potential users. #: actions/invite.php:119 @@ -4698,14 +4687,12 @@ msgstr "An holl izili" #. TRANS: Label for creation date in statistics on group page. #: actions/showgroup.php:453 -#, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Krouet" #. TRANS: Label for member count in statistics on group page. #: actions/showgroup.php:461 -#, fuzzy msgctxt "LABEL" msgid "Members" msgstr "Izili" @@ -6678,7 +6665,7 @@ msgstr "Nullañ" #: lib/applicationlist.php:247 msgid " by " -msgstr "" +msgstr "gant " #. TRANS: Application access type #: lib/applicationlist.php:260 @@ -6943,7 +6930,7 @@ msgstr[1] "" #: lib/command.php:604 #, php-format msgid "Reply to %s sent." -msgstr "" +msgstr "Respont kaset da %s." #. TRANS: Error text shown when a reply to a notice fails with an unknown reason. #: lib/command.php:607 @@ -7248,7 +7235,7 @@ msgstr "Mignon ur mignon (FOAF)" #. TRANS: Header for feed links (h2). #: lib/feedlist.php:66 msgid "Feeds" -msgstr "" +msgstr "Lanvioù" #: lib/galleryaction.php:121 msgid "Filter tags" diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po index 3ea16fe4ee..649450559c 100644 --- a/locale/ca/LC_MESSAGES/statusnet.po +++ b/locale/ca/LC_MESSAGES/statusnet.po @@ -14,17 +14,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:08+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:06+0000\n" "Language-Team: Catalan \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ca\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8786,10 +8786,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "%d entrades a la còpia de seguretat." msgstr[1] "%d entrades a la còpia de seguretat." - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "El servidor no ha pogut gestionar tantes dades POST (%s bytes) a causa de " -#~ "la configuració actual." diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po index 93561c0884..a0d6ba507a 100644 --- a/locale/cs/LC_MESSAGES/statusnet.po +++ b/locale/cs/LC_MESSAGES/statusnet.po @@ -11,18 +11,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:08+0000\n" "Language-Team: Czech \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: cs\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n >= 2 && n <= 4) ? 1 : " "2 );\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8743,10 +8743,3 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" msgstr[2] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Server nebyl schopen zpracovat tolik POST dat (%s bytů) vzhledem k jeho " -#~ "aktuální konfiguraci." diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po index 63416a8ba4..154820a883 100644 --- a/locale/de/LC_MESSAGES/statusnet.po +++ b/locale/de/LC_MESSAGES/statusnet.po @@ -19,17 +19,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:10+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:09+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -746,9 +746,8 @@ msgstr "Ungültiges Token." #. TRANS: Client error given when an invalid request token was passed to the OAuth API. #: actions/apioauthauthorize.php:121 -#, fuzzy msgid "Request token already authorized." -msgstr "Du bist nicht autorisiert." +msgstr "Anfrage-Token bereits autorisiert." #. TRANS: Form validation error in API OAuth authorisation because of an invalid session token. #: actions/apioauthauthorize.php:147 actions/avatarsettings.php:280 @@ -896,26 +895,24 @@ msgstr "Die Anfrage %s wurde gesperrt und widerrufen." #. TRANS: Title of the page notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. #: actions/apioauthauthorize.php:621 -#, fuzzy msgid "You have successfully authorized the application" -msgstr "Du hast %s erfolgreich authorisiert." +msgstr "Du hast das Programm erfolgreich autorisiert." #. TRANS: Message notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. #: actions/apioauthauthorize.php:625 -#, fuzzy msgid "" "Please return to the application and enter the following security code to " "complete the process." msgstr "" -"Bitte kehre nach %s zurück und geben den folgenden Sicherheitscode ein, um " -"den Vorgang abzuschließen." +"Bitte kehre zum Programm zurück und gebe den folgenden Sicherheitscode ein, " +"um den Vorgang abzuschließen." #. TRANS: Title of the page notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. #: actions/apioauthauthorize.php:632 -#, fuzzy, php-format +#, php-format msgid "You have successfully authorized %s" -msgstr "Du hast %s erfolgreich authorisiert." +msgstr "Du hast %s erfolgreich autorisiert." #. TRANS: Message notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. @@ -1030,9 +1027,9 @@ msgstr "%1$s Aktualisierung in den Favoriten von %2$s / %2$s." #. TRANS: Server error displayed when generating an Atom feed fails. #. TRANS: %s is the error. #: actions/apitimelinegroup.php:138 -#, fuzzy, php-format +#, php-format msgid "Could not generate feed for group - %s" -msgstr "Konnte %s-Gruppe nicht löschen." +msgstr "Konnte keinen Gruppen-Feed erstellen - %s" #. TRANS: Title for timeline of most recent mentions of a user. #. TRANS: %1$s is the StatusNet sitename, %2$s is a user nickname. @@ -1063,7 +1060,6 @@ msgstr "%s Nachrichten von allen!" #. TRANS: Server error displayed calling unimplemented API method for 'retweeted by me'. #: actions/apitimelineretweetedbyme.php:71 -#, fuzzy msgid "Unimplemented." msgstr "Nicht unterstützte Methode." @@ -1085,14 +1081,14 @@ msgstr "Antworten von %s" #: actions/apitimelinetag.php:101 actions/tag.php:67 #, php-format msgid "Notices tagged with %s" -msgstr "Nachrichten, die mit %s getagt sind" +msgstr "Mit „%s“ getaggte Nachrichten" #. TRANS: Subtitle for timeline with lastest notices with a given tag. #. TRANS: %1$s is the tag, $2$s is the StatusNet sitename. #: actions/apitimelinetag.php:105 actions/tagrss.php:65 #, php-format msgid "Updates tagged with %1$s on %2$s!" -msgstr "Aktualisierungen mit %1$s getagt auf %2$s!" +msgstr "Mit „%1$s“ getaggte Nachrichten auf „%2$s“!" #. TRANS: Server error for unfinished API method showTrends. #: actions/apitrends.php:85 @@ -3794,12 +3790,12 @@ msgstr "Suche nach anderen Benutzern" #: actions/peopletag.php:68 #, php-format msgid "Not a valid people tag: %s." -msgstr "Ungültiger Personen-Tag: %s." +msgstr "Ungültiger Personen-Tag: „%s“." #: actions/peopletag.php:142 #, php-format msgid "Users self-tagged with %1$s - page %2$d" -msgstr "Benutzer die sich selbst mit %1$s getagged haben - Seite %2$d" +msgstr "Benutzer, die sich selbst mit „%1$s“ getaggt haben - Seite %2$d" #: actions/postnotice.php:95 msgid "Invalid notice content." @@ -3902,15 +3898,15 @@ msgstr "Teile meine aktuelle Position, wenn ich Nachrichten sende" #: actions/tagother.php:209 lib/subscriptionlist.php:106 #: lib/subscriptionlist.php:108 lib/userprofile.php:210 msgid "Tags" -msgstr "Stichwörter" +msgstr "Tags" #. TRANS: Tooltip for field label in form for profile settings. #: actions/profilesettings.php:168 msgid "" "Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated" msgstr "" -"Stichwörter über dich selbst (Buchstaben, Zahlen, -, ., und _) durch Kommas " -"oder Leerzeichen getrennt" +"Tags über dich selbst (Buchstaben, Zahlen, -, ., und _) durch Kommas oder " +"Leerzeichen getrennt" #. TRANS: Dropdownlist label in form for profile settings. #: actions/profilesettings.php:173 @@ -4073,14 +4069,14 @@ msgstr "" #. TRANS: Title for public tag cloud. #: actions/publictagcloud.php:57 msgid "Public tag cloud" -msgstr "Öffentliche Stichwort-Wolke" +msgstr "Öffentliche Tag-Wolke" #. TRANS: Instructions (more used like an explanation/header). #. TRANS: %s is the StatusNet sitename. #: actions/publictagcloud.php:65 #, php-format msgid "These are most popular recent tags on %s" -msgstr "Das sind die beliebtesten Stichwörter auf %s" +msgstr "Das sind die beliebtesten Tags auf „%s“" #. TRANS: This message contains a Markdown URL. The link description is between #. TRANS: square brackets, and the link between parentheses. Do not separate "](" @@ -4089,8 +4085,8 @@ msgstr "Das sind die beliebtesten Stichwörter auf %s" #, 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 Stichwort [hashtag](%%doc." -"tags%%) gepostet." +"Bis jetzt hat noch niemand eine Nachricht mit dem Tag „[hashtag](%%doc.tags%" +"%)“ gepostet." #. TRANS: Message shown to a logged in user for the public tag cloud #. TRANS: while no tags exist yet. "One" refers to the non-existing hashtag. @@ -4114,7 +4110,7 @@ msgstr "" #: actions/publictagcloud.php:146 msgid "Tag cloud" -msgstr "Stichwort-Wolke" +msgstr "Tag-Wolke" #: actions/recoverpassword.php:36 msgid "You are already logged in!" @@ -4889,16 +4885,16 @@ msgstr "Nachricht gelöscht." #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #: actions/showstream.php:70 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s" -msgstr "%1$s, Seite %2$d" +msgstr "Von „%1$s“ mit „%2$s“ getaggte Nachrichten" #. TRANS: Page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$s is the hash tag, %1$d is the page number. #: actions/showstream.php:74 -#, fuzzy, php-format +#, php-format msgid "%1$s tagged %2$s, page %3$d" -msgstr "Mit %1$s gekennzeichnete Nachrichten, Seite %2$d" +msgstr "Von „%1$s“ mit „%2$s“ getaggte Nachrichten, Seite %3$d" #. TRANS: Extended page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$d is the page number. @@ -4912,7 +4908,7 @@ msgstr "%1$s, Seite %2$d" #: actions/showstream.php:127 #, php-format msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)" -msgstr "Nachrichtenfeed für %1$s tagged %2$s (RSS 1.0)" +msgstr "Feed aller von „%1$s“ mit „%2$s“ getaggten Nachrichten (RSS 1.0)" #. TRANS: Title for link to notice feed. #. TRANS: %s is a user nickname. @@ -5130,7 +5126,6 @@ msgstr "Konnte Seitenbenachrichtigung nicht speichern" #. TRANS: Client error displayed when a site-wide notice was longer than allowed. #: actions/sitenoticeadminpanel.php:112 -#, fuzzy msgid "Maximum length for the site-wide notice is 255 characters." msgstr "Maximale Länge von Systembenachrichtigungen ist 255 Zeichen." @@ -5141,7 +5136,6 @@ msgstr "Seitenbenachrichtigung" #. TRANS: Tooltip for site-wide notice text field in admin panel. #: actions/sitenoticeadminpanel.php:179 -#, fuzzy msgid "Site-wide notice text (255 characters maximum; HTML allowed)" msgstr "Systembenachrichtigung (maximal 255 Zeichen; HTML erlaubt)" @@ -5515,22 +5509,22 @@ msgstr "SMS" #: actions/tag.php:69 #, php-format msgid "Notices tagged with %1$s, page %2$d" -msgstr "Mit %1$s gekennzeichnete Nachrichten, Seite %2$d" +msgstr "Mit „%1$s“ getaggte Nachrichten, Seite %2$d" #: actions/tag.php:87 #, php-format msgid "Notice feed for tag %s (RSS 1.0)" -msgstr "Nachrichten Feed für Tag %s (RSS 1.0)" +msgstr "Nachrichten-Feed des Tags „%s“ (RSS 1.0)" #: actions/tag.php:93 #, php-format msgid "Notice feed for tag %s (RSS 2.0)" -msgstr "Nachrichten Feed für Tag %s (RSS 2.0)" +msgstr "Nachrichten-Feed des Tag „%s“ (RSS 2.0)" #: actions/tag.php:99 #, php-format msgid "Notice feed for tag %s (Atom)" -msgstr "Nachrichten Feed für Tag %s (Atom)" +msgstr "Nachrichten-Feed des Tags „%s“ (Atom)" #: actions/tagother.php:39 msgid "No ID argument." @@ -5539,7 +5533,7 @@ msgstr "Kein ID-Argument." #: actions/tagother.php:65 #, php-format msgid "Tag %s" -msgstr "Tag %s" +msgstr "Tag „%s“" #: actions/tagother.php:77 lib/userprofile.php:76 msgid "User profile" @@ -5559,8 +5553,8 @@ msgid "" "Tags for this user (letters, numbers, -, ., and _), comma- or space- " "separated" msgstr "" -"Stichwörter für diesen Benutzer (Buchstaben, Nummer, -, ., und _), durch " -"Komma oder Leerzeichen getrennt" +"Tags dieses Benutzers (Buchstaben, Nummer, -, ., und _), durch Komma oder " +"Leerzeichen getrennt" #: actions/tagother.php:193 msgid "" @@ -5571,17 +5565,17 @@ msgstr "" #: actions/tagother.php:200 msgid "Could not save tags." -msgstr "Konnte Stichwörter nicht speichern." +msgstr "Konnte Tags nicht speichern." #: actions/tagother.php:236 msgid "Use this form to add tags to your subscribers or subscriptions." msgstr "" -"Benutze dieses Formular, um Tags zu deinen Abonnenten oder Abonnements " +"Benutze dieses Formular, um Tags deinen Abonnenten oder Abonnements " "hinzuzufügen." #: actions/tagrss.php:35 msgid "No such tag." -msgstr "Stichwort nicht vorhanden." +msgstr "Tag nicht vorhanden." #: actions/unblock.php:59 msgid "You haven't blocked that user." @@ -5635,9 +5629,9 @@ msgstr "Willkommens-Nachricht ungültig. Maximale Länge sind 255 Zeichen." #. TRANS: Client error displayed when trying to set a non-existing user as default subscription for new #. TRANS: users in user admin panel. %1$s is the invalid nickname. #: actions/useradminpanel.php:166 -#, fuzzy, php-format +#, php-format msgid "Invalid default subscripton: '%1$s' is not a user." -msgstr "Ungültiges Abonnement: „%1$s“ ist kein Benutzer" +msgstr "Ungültiges Standard-Abonnement: „%1$s“ ist kein Benutzer." #. TRANS: Link description in user account settings menu. #: actions/useradminpanel.php:215 lib/accountsettingsaction.php:106 @@ -5945,7 +5939,7 @@ msgstr "Robin denkt, dass etwas unmöglich ist." #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. #. TRANS: %1$s is used for plural. #: classes/File.php:190 -#, fuzzy, php-format +#, php-format msgid "" "No file may be larger than %1$d byte and the file you sent was %2$d bytes. " "Try to upload a smaller version." @@ -5953,32 +5947,34 @@ msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." msgstr[0] "" -"Keine Datei darf größer als %d Bytes sein und die Datei die du verschicken " -"wolltest war %d Bytes groß. Bitte eine kleinere Version hochladen." +"Keine Datei darf größer als ein Byte sein und die Datei die du verschicken " +"wolltest war %2$d Bytes groß. Bitte eine kleinere Version hochladen." msgstr[1] "" -"Keine Datei darf größer als %d Bytes sein und die Datei die du verschicken " -"wolltest war %d Bytes groß. Bitte eine kleinere Version hochladen." +"Keine Datei darf größer als %1$d Bytes sein und die Datei die du verschicken " +"wolltest war %2$d Bytes groß. Bitte eine kleinere Version hochladen." #. TRANS: Message given if an upload would exceed user quota. #. TRANS: %d (number) is the user quota in bytes and is used for plural. #: classes/File.php:203 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your user quota of %d byte." msgid_plural "A file this large would exceed your user quota of %d bytes." -msgstr[0] "Eine Datei dieser Größe überschreitet deine User Quota von %d Byte." -msgstr[1] "Eine Datei dieser Größe überschreitet deine User Quota von %d Byte." +msgstr[0] "" +"Eine Datei dieser Größe überschreitet deine User Quota von einem Byte." +msgstr[1] "" +"Eine Datei dieser Größe überschreitet deine User Quota von %d Bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. #. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. #: classes/File.php:215 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your monthly quota of %d byte." msgid_plural "A file this large would exceed your monthly quota of %d bytes." msgstr[0] "" -"Eine Datei dieser Größe würde deine monatliche Quota von %d Byte " +"Eine Datei dieser Größe würde deine monatliche Quota von einem Byte " "überschreiten." msgstr[1] "" -"Eine Datei dieser Größe würde deine monatliche Quota von %d Byte " +"Eine Datei dieser Größe würde deine monatliche Quota von %d Bytes " "überschreiten." #. TRANS: Client exception thrown if a file upload does not have a valid name. @@ -6011,9 +6007,9 @@ msgstr "Profil-ID %s ist ungültig." #. TRANS: Exception thrown providing an invalid group ID. #. TRANS: %s is the invalid group ID. #: classes/Group_member.php:89 -#, fuzzy, php-format +#, php-format msgid "Group ID %s is invalid." -msgstr "Fehler beim Speichern des Benutzers, ungültig." +msgstr "Gruppen-ID %s ist ungültig." #. TRANS: Activity title. #: classes/Group_member.php:113 lib/joinform.php:114 @@ -6113,10 +6109,10 @@ msgstr "Problem bei Speichern der Nachricht." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). #: classes/Notice.php:905 -#, fuzzy msgid "Bad type provided to saveKnownGroups." msgstr "" -"Der Methode saveKnownGroups wurde ein schlechter Wert zur Verfügung gestellt" +"Der Methode „saveKnownGroups“ wurde ein schlechter Typ zur Verfügung " +"gestellt." #. TRANS: Server exception thrown when an update for a group inbox fails. #: classes/Notice.php:1004 @@ -6170,7 +6166,7 @@ msgstr "Benutzer hat kein Profil." #. TRANS: Exception thrown when a tag cannot be saved. #: classes/Status_network.php:338 msgid "Unable to save tag." -msgstr "Konnte Seitenbenachrichtigung nicht speichern." +msgstr "Konnte Tag nicht speichern." #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing. #: classes/Subscription.php:75 lib/oauthstore.php:482 @@ -6189,7 +6185,6 @@ msgstr "Dieser Benutzer hat dich blockiert." #. TRANS: Exception thrown when trying to unsibscribe without a subscription. #: classes/Subscription.php:171 -#, fuzzy msgid "Not subscribed!" msgstr "Nicht abonniert!" @@ -6307,7 +6302,7 @@ msgstr "Seite ohne Titel" #: lib/action.php:310 msgctxt "TOOLTIP" msgid "Show more" -msgstr "" +msgstr "Mehr anzeigen" #. TRANS: DT element for primary navigation menu. String is hidden in default CSS. #: lib/action.php:526 @@ -6730,7 +6725,7 @@ msgstr "Anonymer Zugang konnte nicht erstellt werden" #. TRANS: Server error displayed when trying to create an anynymous OAuth application. #: lib/apioauthstore.php:69 msgid "Could not create anonymous OAuth application." -msgstr "Anonyme OAuth Anwendung konnte nicht erstellt werden." +msgstr "Anonyme OAuth-Anwendung konnte nicht erstellt werden." #. TRANS: Exception thrown when no token association could be found. #: lib/apioauthstore.php:151 @@ -6767,11 +6762,11 @@ msgstr "Programmsymbol" #. TRANS: Form input field instructions. #. TRANS: %d is the number of available characters for the description. #: lib/applicationeditform.php:201 -#, fuzzy, php-format +#, php-format msgid "Describe your application in %d character" msgid_plural "Describe your application in %d characters" -msgstr[0] "Beschreibe dein Programm in %d Zeichen" -msgstr[1] "Beschreibe dein Programm in %d Zeichen" +msgstr[0] "Beschreibe dein Programm in einem Zeichen." +msgstr[1] "Beschreibe dein Programm in %d Zeichen." #. TRANS: Form input field instructions. #: lib/applicationeditform.php:205 @@ -6865,7 +6860,7 @@ msgstr "Genehmigte %1$s - „%2$s“ Zugriff." #: lib/applicationlist.php:282 #, php-format msgid "Access token starting with: %s" -msgstr "Zugriffstoken beginnend mit %s" +msgstr "Zugriffstoken beginnend mit „%s“" #. TRANS: Button label #: lib/applicationlist.php:298 @@ -6890,24 +6885,22 @@ msgstr "Anbieter" #. TRANS: Title. #: lib/attachmentnoticesection.php:67 msgid "Notices where this attachment appears" -msgstr "Nachrichten in denen dieser Anhang erscheint" +msgstr "Nachrichten, in denen dieser Anhang erscheint" #. TRANS: Title. #: lib/attachmenttagcloudsection.php:48 msgid "Tags for this attachment" -msgstr "Stichworte für diesen Anhang" +msgstr "Tags dieses Anhangs" #. TRANS: Exception thrown when a password change fails. #: lib/authenticationplugin.php:221 lib/authenticationplugin.php:227 -#, fuzzy msgid "Password changing failed." -msgstr "Passwort konnte nicht geändert werden" +msgstr "Passwort konnte nicht geändert werden." #. TRANS: Exception thrown when a password change attempt fails because it is not allowed. #: lib/authenticationplugin.php:238 -#, fuzzy msgid "Password changing is not allowed." -msgstr "Passwort kann nicht geändert werden" +msgstr "Passwort kann nicht geändert werden." #. TRANS: Title for the form to block a user. #: lib/blockform.php:68 @@ -6921,7 +6914,6 @@ msgstr "Befehl-Ergebnisse" #. TRANS: Title for command results. #: lib/channel.php:194 -#, fuzzy msgid "AJAX error" msgstr "Ajax-Fehler" @@ -6938,27 +6930,27 @@ msgstr "Befehl fehlgeschlagen" #. TRANS: Command exception text shown when a notice ID is requested that does not exist. #: lib/command.php:82 lib/command.php:106 msgid "Notice with that id does not exist." -msgstr "Nachricht mit dieser ID existiert nicht" +msgstr "Nachricht mit dieser ID existiert nicht." #. TRANS: Command exception text shown when a last user notice is requested and it does not exist. #. TRANS: Error text shown when a last user notice is requested and it does not exist. #: lib/command.php:99 lib/command.php:630 msgid "User has no last notice." -msgstr "Benutzer hat keine letzte Nachricht" +msgstr "Benutzer hat keine letzte Nachricht." #. TRANS: Message given requesting a profile for a non-existing user. #. TRANS: %s is the nickname of the user for which the profile could not be found. #: lib/command.php:128 #, php-format msgid "Could not find a user with nickname %s." -msgstr "Konnte keinen Benutzer mit dem Namen %s finden" +msgstr "Konnte keinen Benutzer mit dem Namen „%s“ finden." #. TRANS: Message given getting a non-existing user. #. TRANS: %s is the nickname of the user that could not be found. #: lib/command.php:148 #, php-format msgid "Could not find a local user with nickname %s." -msgstr "Konnte keinen lokalen Benutzer mit dem Nick %s finden" +msgstr "Konnte keinen lokalen Benutzer mit dem Namen „%s“ finden." #. TRANS: Error text shown when an unimplemented command is given. #: lib/command.php:183 @@ -6968,14 +6960,14 @@ msgstr "Leider ist dieser Befehl noch nicht implementiert." #. TRANS: Command exception text shown when a user tries to nudge themselves. #: lib/command.php:229 msgid "It does not make a lot of sense to nudge yourself!" -msgstr "Es macht keinen Sinn dich selbst anzustupsen!" +msgstr "Es macht keinen Sinn, dich selbst anzustupsen!" #. TRANS: Message given having nudged another user. #. TRANS: %s is the nickname of the user that was nudged. #: lib/command.php:238 #, php-format msgid "Nudge sent to %s." -msgstr "Stups an %s abgeschickt" +msgstr "Stups an „%s“ abgeschickt." #. TRANS: User statistics text. #. TRANS: %1$s is the number of other user the user is subscribed to. @@ -7002,14 +6994,14 @@ msgstr "Nachricht als Favorit markiert." #: lib/command.php:357 #, php-format msgid "%1$s joined group %2$s." -msgstr "%1$s ist der Gruppe %2$s beigetreten." +msgstr "%1$s ist der Gruppe „%2$s“ beigetreten." #. TRANS: Message given having removed a user from a group. #. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group. #: lib/command.php:405 #, php-format msgid "%1$s left group %2$s." -msgstr "%1$s hat die Gruppe %2$s verlassen." +msgstr "%1$s hat die Gruppe „%2$s“ verlassen." #. TRANS: Whois output. #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL. @@ -7072,19 +7064,19 @@ msgstr[1] "" #. TRANS: Error text shown sending a direct message fails with an unknown reason. #: lib/command.php:516 msgid "Error sending direct message." -msgstr "Fehler beim Senden der Nachricht" +msgstr "Fehler beim Senden der Nachricht." #. TRANS: Message given having repeated a notice from another user. #. TRANS: %s is the name of the user for which the notice was repeated. #: lib/command.php:553 #, php-format msgid "Notice from %s repeated." -msgstr "Nachricht von %s wiederholt." +msgstr "Nachricht von „%s“ wiederholt." #. TRANS: Error text shown when repeating a notice fails with an unknown reason. #: lib/command.php:556 msgid "Error repeating notice." -msgstr "Fehler beim Wiederholen der Nachricht" +msgstr "Fehler beim Wiederholen der Nachricht." #. TRANS: Message given if content of a notice for a reply is too long. %1$d is used for plural. #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters. @@ -7102,7 +7094,7 @@ msgstr[1] "" #: lib/command.php:604 #, php-format msgid "Reply to %s sent." -msgstr "Antwort an %s gesendet" +msgstr "Antwort an „%s“ gesendet" #. TRANS: Error text shown when a reply to a notice fails with an unknown reason. #: lib/command.php:607 @@ -7112,7 +7104,7 @@ msgstr "Problem beim Speichern der Nachricht." #. TRANS: Error text shown when no username was provided when issuing a subscribe command. #: lib/command.php:654 msgid "Specify the name of the user to subscribe to." -msgstr "Gib den Namen des Benutzers an, den du abonnieren möchtest" +msgstr "Gib den Namen des Benutzers an, den du abonnieren möchtest." #. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command. #: lib/command.php:663 @@ -7124,7 +7116,7 @@ msgstr "OMB-Profile können nicht mit einem Kommando abonniert werden." #: lib/command.php:671 #, php-format msgid "Subscribed to %s." -msgstr "%s abboniert" +msgstr "%s abboniert." #. TRANS: Error text shown when no username was provided when issuing an unsubscribe command. #. TRANS: Error text shown when no username was provided when issuing the command. @@ -7137,7 +7129,7 @@ msgstr "Gib den Namen des Benutzers ein, den du nicht mehr abonnieren möchtest" #: lib/command.php:703 #, php-format msgid "Unsubscribed from %s." -msgstr "Abgemeldet von %s." +msgstr "%s abbestellt." #. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented. #. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented. @@ -7168,7 +7160,7 @@ msgstr "Konnte Benachrichtigung nicht aktivieren." #. TRANS: Error text shown when issuing the login command while login is disabled. #: lib/command.php:770 msgid "Login command is disabled." -msgstr "Die Anmeldung ist deaktiviert" +msgstr "Die Anmeldung ist deaktiviert." #. TRANS: Text shown after issuing the login command successfully. #. TRANS: %s is a logon link.. @@ -7210,8 +7202,8 @@ msgstr "Niemand hat dich abonniert." #: lib/command.php:862 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" -msgstr[0] "Die Gegenseite konnte dich nicht abonnieren." -msgstr[1] "Die Gegenseite konnte dich nicht abonnieren." +msgstr[0] "Diese Person abonniert dich:" +msgstr[1] "Diese Personen abonnieren dich:" #. TRANS: Text shown after requesting groups a user is subscribed to without having #. TRANS: any group subscriptions. @@ -7323,7 +7315,7 @@ msgstr "Ich habe an folgenden Stellen nach Konfigurationsdateien gesucht:" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #: lib/common.php:142 msgid "You may wish to run the installer to fix this." -msgstr "Bitte die Installation erneut starten um das Problem zu beheben." +msgstr "Bitte die Installation erneut starten, um das Problem zu beheben." #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #. TRANS: The text is link text that leads to the installer page. @@ -7333,7 +7325,6 @@ msgstr "Zur Installation gehen." #. TRANS: Menu item for Instant Messaging settings. #: lib/connectsettingsaction.php:106 -#, fuzzy msgctxt "MENU" msgid "IM" msgstr "IM" @@ -7345,7 +7336,6 @@ msgstr "Aktualisierungen via Instant Messenger (IM)" #. TRANS: Menu item for Short Message Service settings. #: lib/connectsettingsaction.php:113 -#, fuzzy msgctxt "MENU" msgid "SMS" msgstr "SMS" @@ -7357,7 +7347,6 @@ msgstr "Aktualisierungen via SMS" #. TRANS: Menu item for OuAth connection settings. #: lib/connectsettingsaction.php:120 -#, fuzzy msgctxt "MENU" msgid "Connections" msgstr "Verbindungen" @@ -7383,25 +7372,22 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" "Du kannst dein persönliches Hintergrundbild hochladen. Die maximale " -"Dateigröße ist 2MB." +"Dateigröße ist 2 MB." #. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. #: lib/designsettings.php:139 -#, fuzzy msgctxt "RADIO" msgid "On" msgstr "An" #. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. #: lib/designsettings.php:156 -#, fuzzy msgctxt "RADIO" msgid "Off" msgstr "Aus" #. TRANS: Button text on profile design page to reset all colour settings to default without saving. #: lib/designsettings.php:264 -#, fuzzy msgctxt "BUTTON" msgid "Reset" msgstr "Zurücksetzen" @@ -7442,7 +7428,7 @@ msgstr "Feeds" #: lib/galleryaction.php:121 msgid "Filter tags" -msgstr "Stichworte filtern" +msgstr "Tags filtern" #: lib/galleryaction.php:131 msgid "All" @@ -7450,15 +7436,15 @@ msgstr "Alle" #: lib/galleryaction.php:139 msgid "Select tag to filter" -msgstr "Wähle ein Stichwort, um die Liste einzuschränken" +msgstr "Wähle ein Tag, um die Liste einzuschränken" #: lib/galleryaction.php:140 msgid "Tag" -msgstr "Stichwort" +msgstr "Tag" #: lib/galleryaction.php:141 msgid "Choose a tag to narrow list" -msgstr "Wähle ein Stichwort, um die Liste einzuschränken" +msgstr "Wähle ein Tag, um die Liste einzuschränken" #: lib/galleryaction.php:143 msgid "Go" @@ -7595,7 +7581,7 @@ msgstr "Gruppen mit den meisten Beiträgen" #: lib/grouptagcloudsection.php:57 #, php-format msgid "Tags in %s group's notices" -msgstr "Stichworte in den Nachrichten der Gruppe %s" +msgstr "Tags in den Nachrichten der Gruppe „%s“" #. TRANS: Client exception 406 #: lib/htmloutputter.php:104 @@ -7611,7 +7597,7 @@ msgstr "Bildformat wird nicht unterstützt." #: lib/imagefile.php:90 #, php-format msgid "That file is too big. The maximum file size is %s." -msgstr "Du kannst ein Logo für deine Gruppe hochladen." +msgstr "Diese Datei ist zu groß. Die maximale Dateigröße ist %s." #: lib/imagefile.php:95 msgid "Partial upload." @@ -7639,16 +7625,16 @@ msgstr "Unbekannter Dateityp" #, php-format msgid "%dMB" msgid_plural "%dMB" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d MB" +msgstr[1] "%d MB" #. TRANS: Number of kilobytes. %d is the number. #: lib/imagefile.php:252 #, php-format msgid "%dkB" msgid_plural "%dkB" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d KB" +msgstr[1] "%d KB" #. TRANS: Number of bytes. %d is the number. #: lib/imagefile.php:255 @@ -7706,7 +7692,7 @@ msgid "" msgstr "" "Hallo %1$s,\n" "\n" -"jemand hat diese E-Mail-Adresse gerade auf %2$s eingegeben.\n" +"jemand hat diese E-Mail-Adresse gerade auf „%2$s“ eingegeben.\n" "\n" "Falls du es warst und du deinen Eintrag bestätigen möchtest, benutze\n" "bitte diese URL:\n" @@ -7723,7 +7709,7 @@ msgstr "" #: lib/mail.php:246 #, php-format msgid "%1$s is now listening to your notices on %2$s." -msgstr "%1$s hat deine Nachrichten auf %2$s abonniert." +msgstr "%1$s hat deine Nachrichten auf „%2$s“ abonniert." #. TRANS: This is a paragraph in a new-subscriber e-mail. #. TRANS: %s is a URL where the subscriber can be reported as abusive. @@ -7733,7 +7719,7 @@ msgid "" "If you believe this account is being used abusively, you can block them from " "your subscribers list and report as spam to site administrators at %s" msgstr "" -"Wenn du dir sicher bist, das dieses Benutzerkonto missbräuchlich benutzt " +"Wenn du dir sicher bist, dass dieses Benutzerkonto missbräuchlich benutzt " "wurde, kannst du das Benutzerkonto von deiner Liste der Abonnenten sperren " "und es den Seitenadministratoren unter %s als Spam melden." @@ -7780,7 +7766,7 @@ msgstr "Biografie: %s" #: lib/mail.php:315 #, php-format msgid "New email address for posting to %s" -msgstr "Neue E-Mail-Adresse um auf %s zu schreiben" +msgstr "Neue E-Mail-Adresse, um auf „%s“ zu schreiben" #. TRANS: Body of notification mail for new posting email address. #. TRANS: %1$s is the StatusNet sitename, %2$s is the e-mail address to send @@ -7797,7 +7783,7 @@ msgid "" "Faithfully yours,\n" "%1$s" msgstr "" -"Du hast eine neue Adresse zum Hinzufügen von Nachrichten auf %1$s.\n" +"Du hast eine neue Adresse zum Hinzufügen von Nachrichten auf „%1$s“.\n" "\n" "Schicke eine E-Mail an %2$s, um eine neue Nachricht hinzuzufügen.\n" "\n" @@ -7832,7 +7818,7 @@ msgstr "" #: lib/mail.php:493 #, php-format msgid "You've been nudged by %s" -msgstr "Du wurdest von %s angestupst" +msgstr "Du wurdest von „%s“ angestupst" #. TRANS: Body for 'nudge' notification email. #. TRANS: %1$s is the nuding user's long name, $2$s is the nudging user's nickname, @@ -7852,7 +7838,7 @@ msgid "" "With kind regards,\n" "%4$s\n" msgstr "" -"%1$s (%2$s) fragt sicht, was du zur Zeit wohl so machst und lädt dich ein, " +"%1$s (%2$s) fragt sich, was du zur Zeit wohl so machst und lädt dich ein, " "etwas Neues zu posten.\n" "\n" "Lass von dir hören :)\n" @@ -7869,7 +7855,7 @@ msgstr "" #: lib/mail.php:547 #, php-format msgid "New private message from %s" -msgstr "Neue private Nachricht von %s" +msgstr "Neue private Nachricht von „%s“" #. TRANS: Body for direct-message notification email. #. TRANS: %1$s is the sending user's long name, %2$s is the sending user's nickname, @@ -8004,7 +7990,7 @@ msgid "" "\n" "P.S. You can turn off these email notifications here: %8$s\n" msgstr "" -"%1$s (@%9$s) hat dir gerade eine Nachricht (eine '@-Antwort') auf %2$s " +"%1$s (@%9$s) hat dir gerade eine Nachricht (eine „@-Antwort“) auf „%2$s“ " "gesendet.\n" "\n" "Die Nachricht findest du hier:\n" @@ -8038,7 +8024,7 @@ msgid "" "users in conversation. People can send you messages for your eyes only." msgstr "" "Du hast keine privaten Nachrichten. Du kannst anderen private Nachrichten " -"schicken, um sie in eine Konversation zu verwickeln. Andere Leute können Dir " +"schicken, um sie in eine Konversation zu verwickeln. Andere Leute können dir " "Nachrichten schicken, die nur du sehen kannst." #: lib/mailbox.php:228 lib/noticelist.php:516 @@ -8059,12 +8045,12 @@ msgstr "Sorry, das ist nicht deine Adresse für eingehende E-Mails." #: lib/mailhandler.php:50 msgid "Sorry, no incoming email allowed." -msgstr "Sorry, keinen eingehenden E-Mails gestattet." +msgstr "Sorry, keine eingehenden E-Mails gestattet." #: lib/mailhandler.php:229 #, php-format msgid "Unsupported message type: %s" -msgstr "Nachrichten-Typ %s wird nicht unterstützt." +msgstr "Nachrichten-Typ „%s“ wird nicht unterstützt." #. TRANS: Client exception thrown when a database error was thrown during a file upload operation. #: lib/mediafile.php:99 lib/mediafile.php:125 @@ -8312,12 +8298,12 @@ msgstr "Deine gesendeten Nachrichten" #: lib/personaltagcloudsection.php:56 #, php-format msgid "Tags in %s's notices" -msgstr "Stichworte in den Nachrichten von %s" +msgstr "Tags in den Nachrichten von „%s“" #. TRANS: Displayed as version information for a plugin if no version information was found. #: lib/plugin.php:121 msgid "Unknown" -msgstr "Unbekannter Befehl" +msgstr "Unbekannt" #: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82 msgid "Subscriptions" @@ -8366,7 +8352,7 @@ msgstr "Benutzer-Gruppen" #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85 msgid "Recent tags" -msgstr "Aktuelle Stichworte" +msgstr "Aktuelle Tags" #: lib/publicgroupnav.php:88 msgid "Featured" @@ -8378,7 +8364,7 @@ msgstr "Beliebte Beiträge" #: lib/redirectingaction.php:95 msgid "No return-to arguments." -msgstr "Kein Rückkehr Argument." +msgstr "Kein Rückkehr-Argument." #: lib/repeatform.php:107 msgid "Repeat this notice?" @@ -8419,7 +8405,7 @@ msgstr "Website durchsuchen" #. TRANS: for searching can be entered. #: lib/searchaction.php:128 msgid "Keyword(s)" -msgstr "Suchbegriff" +msgstr "Suchbegriffe" #. TRANS: Button text for searching site. #: lib/searchaction.php:130 @@ -8442,7 +8428,7 @@ msgstr "Finde Leute auf dieser Seite" #: lib/searchgroupnav.php:83 msgid "Find content of notices" -msgstr "Durchsuche den Inhalt der Notices" +msgstr "Durchsuche den Inhalt der Nachrichten" #: lib/searchgroupnav.php:85 msgid "Find groups on this site" @@ -8467,17 +8453,17 @@ msgstr "Benutzer verstummen lassen" #: lib/subgroupnav.php:83 #, php-format msgid "People %s subscribes to" -msgstr "Leute, die %s abonniert hat" +msgstr "Leute, die „%s“ abonniert hat" #: lib/subgroupnav.php:91 #, php-format msgid "People subscribed to %s" -msgstr "Leute, die %s abonniert haben" +msgstr "Leute, die „%s“ abonniert haben" #: lib/subgroupnav.php:99 #, php-format msgid "Groups %s is a member of" -msgstr "Gruppen in denen %s Mitglied ist" +msgstr "Gruppen, in denen „%s“ Mitglied ist" #: lib/subgroupnav.php:105 msgid "Invite" @@ -8486,7 +8472,7 @@ msgstr "Einladen" #: lib/subgroupnav.php:106 #, php-format msgid "Invite friends and colleagues to join you on %s" -msgstr "Lade Freunde und Kollegen ein dir auf %s zu folgen" +msgstr "Lade Freunde und Kollegen ein, dir auf „%s“ zu folgen" #: lib/subscriberspeopleselftagcloudsection.php:48 #: lib/subscriptionspeopleselftagcloudsection.php:48 @@ -8510,7 +8496,8 @@ msgstr "Ungültiger Dateiname." #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." -msgstr "Dieser Server kann nicht mit Theme-Uploads ohne ZIP-Support umgehen." +msgstr "" +"Dieser Server kann nicht mit Theme-Uploads ohne ZIP-Unterstützung umgehen." #: lib/themeuploader.php:58 lib/themeuploader.php:61 msgid "The theme file is missing or the upload failed." @@ -8591,7 +8578,7 @@ msgstr "Benutzer freigeben" #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137 msgid "Unsubscribe from this user" -msgstr "Lösche dein Abonnement von diesem Benutzer" +msgstr "Abonnement von diesem Benutzer abbestellen" #: lib/unsubscribeform.php:137 msgid "Unsubscribe" @@ -8602,7 +8589,7 @@ msgstr "Abbestellen" #: lib/usernoprofileexception.php:60 #, php-format msgid "User %1$s (%2$d) has no profile record." -msgstr "Benutzer %1$s (%2$d) hat kein Profil." +msgstr "Benutzer „%1$s“ (%2$d) hat kein Profil." #: lib/userprofile.php:117 msgid "Edit Avatar" @@ -8626,7 +8613,7 @@ msgstr "Bearbeiten" #: lib/userprofile.php:287 msgid "Send a direct message to this user" -msgstr "Direkte Nachricht an Benutzer verschickt" +msgstr "Direkte Nachricht an Benutzer versenden" #: lib/userprofile.php:288 msgid "Message" @@ -8710,25 +8697,27 @@ msgstr[1] "vor ca. %d Monaten" #. TRANS: Used in notices to indicate when the notice was made compared to now. #: lib/util.php:1206 msgid "about a year ago" -msgstr "vor einem Jahr" +msgstr "vor ca. einem Jahr" #: lib/webcolor.php:80 #, php-format msgid "%s is not a valid color!" -msgstr "%s ist keine gültige Farbe!" +msgstr "„%s“ ist keine gültige Farbe!" #. TRANS: Validation error for a web colour. #. TRANS: %s is the provided (invalid) text for colour. #: lib/webcolor.php:120 #, php-format msgid "%s is not a valid color! Use 3 or 6 hex characters." -msgstr "%s ist keine gültige Farbe! Verwende 3 oder 6 Hex-Zeichen." +msgstr "„%s“ ist keine gültige Farbe! Verwende 3 oder 6 Hex-Zeichen." #. TRANS: %s is the URL to the StatusNet site's Instant Messaging settings. #: lib/xmppmanager.php:285 #, php-format msgid "Unknown user. Go to %s to add your address to your account" msgstr "" +"Unbekannter Benutzer. Gehe zu %s, um deine Adresse deinem Benutzerkonto " +"hinzuzufügen." #. TRANS: Response to XMPP source when it sent too long a message. #. TRANS: %1$d the maximum number of allowed characters (used for plural), %2$d is the sent number. @@ -8745,12 +8734,12 @@ msgstr[1] "" #: scripts/restoreuser.php:61 #, php-format msgid "Getting backup from file '%s'." -msgstr "" +msgstr "Hole Backup von der Datei „%s“." #. TRANS: Commandline script output. #: scripts/restoreuser.php:91 msgid "No user specified; using backup user." -msgstr "Keine Benutzer-ID angegeben" +msgstr "Kein Benutzer angegeben; hole Backup-Benutzer." #. TRANS: Commandline script output. %d is the number of entries in the activity stream in backup; used for plural. #: scripts/restoreuser.php:98 @@ -8759,10 +8748,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "Ein Eintrag im Backup." msgstr[1] "%d Einträge im Backup." - -#~ 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." diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po index 740a9de724..032eff49fb 100644 --- a/locale/en_GB/LC_MESSAGES/statusnet.po +++ b/locale/en_GB/LC_MESSAGES/statusnet.po @@ -13,17 +13,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:11+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:10+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 (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: en-gb\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8542,10 +8542,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." diff --git a/locale/eo/LC_MESSAGES/statusnet.po b/locale/eo/LC_MESSAGES/statusnet.po index a324ca412b..5804eab035 100644 --- a/locale/eo/LC_MESSAGES/statusnet.po +++ b/locale/eo/LC_MESSAGES/statusnet.po @@ -15,17 +15,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:12+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:11+0000\n" "Language-Team: Esperanto \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: eo\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8661,10 +8661,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "La servilo ne povis trakti tiom da POST-datumo (% bajtoj) pro ĝia nuna " -#~ "agordo." diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po index 37d9a68120..43affca45f 100644 --- a/locale/es/LC_MESSAGES/statusnet.po +++ b/locale/es/LC_MESSAGES/statusnet.po @@ -16,17 +16,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:13+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:13+0000\n" "Language-Team: Spanish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: es\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8795,10 +8795,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "El servidor no ha podido manejar tanta información del tipo POST (% de " -#~ "bytes) a causa de su configuración actual." diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po index 4471ed91a2..22d8cd6f48 100644 --- a/locale/fa/LC_MESSAGES/statusnet.po +++ b/locale/fa/LC_MESSAGES/statusnet.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:14+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:14+0000\n" "Last-Translator: Ahmad Sufi Mahmudi\n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" @@ -23,9 +23,9 @@ msgstr "" "X-Language-Code: fa\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8693,9 +8693,3 @@ msgstr "هیچ شناسهٔ کاربری مشخص نشده است." msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "به دلیل تنظبمات، سرور نمی‌تواند این مقدار اطلاعات (%s بایت( را دریافت کند." diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po index 6c5f783137..7e283b69b6 100644 --- a/locale/fr/LC_MESSAGES/statusnet.po +++ b/locale/fr/LC_MESSAGES/statusnet.po @@ -20,17 +20,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:23+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:17+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8822,10 +8822,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "%d entrées dans la sauvegarde." msgstr[1] "%d entrées dans la sauvegarde." - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Le serveur n’a pas pu gérer autant de données de POST (%s octets) en " -#~ "raison de sa configuration actuelle." diff --git a/locale/gl/LC_MESSAGES/statusnet.po b/locale/gl/LC_MESSAGES/statusnet.po index f293534848..dcaaae0ac2 100644 --- a/locale/gl/LC_MESSAGES/statusnet.po +++ b/locale/gl/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:26+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:19+0000\n" "Language-Team: Galician \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: gl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1650,7 +1650,7 @@ msgstr "Logo do sitio" #: actions/designadminpanel.php:469 msgid "Change theme" -msgstr "Cambar o tema visual" +msgstr "Cambiar o tema visual" #: actions/designadminpanel.php:486 msgid "Site theme" @@ -8807,10 +8807,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "%d entradas na reserva." msgstr[1] "%d entradas na reserva." - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "O servidor non puido manexar tantos datos POST (%s bytes) por mor da súa " -#~ "configuración actual." diff --git a/locale/hu/LC_MESSAGES/statusnet.po b/locale/hu/LC_MESSAGES/statusnet.po index 8fb750d69b..dd208a3cf1 100644 --- a/locale/hu/LC_MESSAGES/statusnet.po +++ b/locale/hu/LC_MESSAGES/statusnet.po @@ -12,13 +12,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:30+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:22+0000\n" "Language-Team: Hungarian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hu\n" "X-Message-Group: #out-statusnet-core\n" @@ -8434,10 +8434,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "A szerver nem tudott feldolgozni ennyi POST-adatot (%s bájtot) a " -#~ "jelenlegi konfigurációja miatt." diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po index 6a3156b96d..57146163c1 100644 --- a/locale/ia/LC_MESSAGES/statusnet.po +++ b/locale/ia/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:31+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:23+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -5893,7 +5893,7 @@ msgstr "Robin pensa que alique es impossibile." #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. #. TRANS: %1$s is used for plural. #: classes/File.php:190 -#, fuzzy, php-format +#, php-format msgid "" "No file may be larger than %1$d byte and the file you sent was %2$d bytes. " "Try to upload a smaller version." @@ -5901,8 +5901,8 @@ msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." msgstr[0] "" -"Nulle file pote esser plus grande que %1$d bytes e le file que tu inviava ha " -"%2$d bytes. Tenta incargar un version minus grande." +"Nulle file pote esser plus grande que %1$d byte e le file que tu inviava ha %" +"2$d bytes. Tenta incargar un version minus grande." msgstr[1] "" "Nulle file pote esser plus grande que %1$d bytes e le file que tu inviava ha " "%2$d bytes. Tenta incargar un version minus grande." @@ -5910,19 +5910,19 @@ msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. #. TRANS: %d (number) is the user quota in bytes and is used for plural. #: classes/File.php:203 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your user quota of %d byte." msgid_plural "A file this large would exceed your user quota of %d bytes." -msgstr[0] "Un file de iste dimension excederea tu quota de usator de %d bytes." +msgstr[0] "Un file de iste dimension excederea tu quota de usator de %d byte." msgstr[1] "Un file de iste dimension excederea tu quota de usator de %d bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. #. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. #: classes/File.php:215 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your monthly quota of %d byte." msgid_plural "A file this large would exceed your monthly quota of %d bytes." -msgstr[0] "Un file de iste dimension excederea tu quota mensual de %d bytes." +msgstr[0] "Un file de iste dimension excederea tu quota mensual de %d byte." msgstr[1] "Un file de iste dimension excederea tu quota mensual de %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. @@ -6056,9 +6056,8 @@ msgstr "Problema salveguardar nota." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). #: classes/Notice.php:905 -#, fuzzy msgid "Bad type provided to saveKnownGroups." -msgstr "Mal typo fornite a saveKnownGroups" +msgstr "Mal typo fornite a saveKnownGroups." #. TRANS: Server exception thrown when an update for a group inbox fails. #: classes/Notice.php:1004 @@ -7328,21 +7327,18 @@ msgstr "" #. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. #: lib/designsettings.php:139 -#, fuzzy msgctxt "RADIO" msgid "On" msgstr "Active" #. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. #: lib/designsettings.php:156 -#, fuzzy msgctxt "RADIO" msgid "Off" msgstr "Non active" #. TRANS: Button text on profile design page to reset all colour settings to default without saving. #: lib/designsettings.php:264 -#, fuzzy msgctxt "BUTTON" msgid "Reset" msgstr "Reinitialisar" @@ -8443,9 +8439,8 @@ msgstr "Nulle" #. TRANS: Server exception displayed if a theme name was invalid. #: lib/theme.php:74 -#, fuzzy msgid "Invalid theme name." -msgstr "Nomine de file invalide." +msgstr "Nomine de apparentia invalide." #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." @@ -8700,10 +8695,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "%d entrata in copia de reserva." msgstr[1] "%d entratas in copia de reserva." - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Le servitor non ha potite tractar tante datos POST (%s bytes) a causa de " -#~ "su configuration actual." diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po index fee72eafb1..9f0d435c23 100644 --- a/locale/it/LC_MESSAGES/statusnet.po +++ b/locale/it/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:34+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:25+0000\n" "Language-Team: Italian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: it\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8765,10 +8765,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "%d voci nel backup." msgstr[1] "%d voci nel backup." - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Il server non è in grado di gestire tutti quei dati POST (%s byte) con la " -#~ "configurazione attuale." diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po index 79aa10f161..c2cdd77822 100644 --- a/locale/ja/LC_MESSAGES/statusnet.po +++ b/locale/ja/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:36+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:26+0000\n" "Language-Team: Japanese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ja\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8681,10 +8681,3 @@ msgstr "ユーザIDの記述がありません。" msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "サーバーの現在の構成が理由で、大量の POST データ (%sバイト) を処理すること" -#~ "ができませんでした。" diff --git a/locale/ka/LC_MESSAGES/statusnet.po b/locale/ka/LC_MESSAGES/statusnet.po index 88b3651b53..f0ee6af879 100644 --- a/locale/ka/LC_MESSAGES/statusnet.po +++ b/locale/ka/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:37+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:27+0000\n" "Language-Team: Georgian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ka\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8604,10 +8604,3 @@ msgstr "მომხმარებლის ID მითითებული msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "სამწუხაროდ სერვერმა ვერ გაუძლო ამდენ POST მონაცემებს (%s ბაიტი) მიმდინარე " -#~ "კონფიგურაციის გამო." diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po index 700532c6ad..3595f51613 100644 --- a/locale/ko/LC_MESSAGES/statusnet.po +++ b/locale/ko/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:38+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:30+0000\n" "Language-Team: Korean \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ko\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8482,10 +8482,3 @@ msgstr "프로필을 지정하지 않았습니다." msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "현재 설정으로 인해 너무 많은 POST 데이터(%s 바이트)는 서버에서 처리할 수 " -#~ "없습니다." diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po index 5990b5d371..6182db1ecb 100644 --- a/locale/mk/LC_MESSAGES/statusnet.po +++ b/locale/mk/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:39+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:32+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -5918,7 +5918,7 @@ msgstr "Робин мисли дека нешто е невозможно." #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. #. TRANS: %1$s is used for plural. #: classes/File.php:190 -#, fuzzy, php-format +#, php-format msgid "" "No file may be larger than %1$d byte and the file you sent was %2$d bytes. " "Try to upload a smaller version." @@ -5926,33 +5926,34 @@ msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." msgstr[0] "" -"Податотеките не смеат да бидат поголеми од %d бајти, а податотеката што ја " -"испративте содржи %d бајти. Подигнете помала верзија." +"Податотеките не смеат да бидат поголеми од %1$d бајт, а вие испративте " +"податотека од %2$d бајти. Подигнете помала верзија." msgstr[1] "" -"Податотеките не смеат да бидат поголеми од %d бајти, а податотеката што ја " -"испративте содржи %d бајти. Подигнете помала верзија." +"Податотеките не смеат да бидат поголеми од %1$d бајти, а вие испративте " +"податотека од %2$d бајти. Подигнете помала верзија." #. TRANS: Message given if an upload would exceed user quota. #. TRANS: %d (number) is the user quota in bytes and is used for plural. #: classes/File.php:203 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your user quota of %d byte." msgid_plural "A file this large would exceed your user quota of %d bytes." msgstr[0] "" -"Волку голема податотека ќе ја надмине Вашата корисничка квота од %d бајти." +"Волку голема податотека ќе го надмине Вашето корисничко следување од %d бајт." msgstr[1] "" -"Волку голема податотека ќе ја надмине Вашата корисничка квота од %d бајти." +"Волку голема податотека ќе го надмине Вашето корисничко следување од %d " +"бајти." #. TRANS: Message given id an upload would exceed a user's monthly quota. #. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. #: classes/File.php:215 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your monthly quota of %d byte." msgid_plural "A file this large would exceed your monthly quota of %d bytes." msgstr[0] "" -"ВОлку голема податотека ќе ја надмине Вашата месечна квота од %d бајти" +"Волку голема податотека ќе го надмине Вашето месечно следување од %d бајт" msgstr[1] "" -"ВОлку голема податотека ќе ја надмине Вашата месечна квота од %d бајти" +"Волку голема податотека ќе го надмине Вашето месечно следување од %d бајти" #. TRANS: Client exception thrown if a file upload does not have a valid name. #: classes/File.php:262 classes/File.php:277 @@ -6085,9 +6086,8 @@ msgstr "Проблем во зачувувањето на белешката." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). #: classes/Notice.php:905 -#, fuzzy msgid "Bad type provided to saveKnownGroups." -msgstr "На saveKnownGroups му е уакажан грешен тип" +msgstr "На saveKnownGroups му е укажан погрешен тип." #. TRANS: Server exception thrown when an update for a group inbox fails. #: classes/Notice.php:1004 @@ -7361,21 +7361,18 @@ msgstr "" #. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. #: lib/designsettings.php:139 -#, fuzzy msgctxt "RADIO" msgid "On" msgstr "Вкл." #. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. #: lib/designsettings.php:156 -#, fuzzy msgctxt "RADIO" msgid "Off" msgstr "Искл." #. TRANS: Button text on profile design page to reset all colour settings to default without saving. #: lib/designsettings.php:264 -#, fuzzy msgctxt "BUTTON" msgid "Reset" msgstr "Врати одново" @@ -8481,9 +8478,8 @@ msgstr "Без ознаки" #. TRANS: Server exception displayed if a theme name was invalid. #: lib/theme.php:74 -#, fuzzy msgid "Invalid theme name." -msgstr "Погрешно податотечно име." +msgstr "Неважечко име за изгледот." #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." @@ -8736,10 +8732,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "%d резервна ставка." msgstr[1] "%d резервни ставки." - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Опслужувачот не можеше да обработи толку многу POST-податоци (%s бајти) " -#~ "заради неговата тековна поставеност." diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po index 03dfd48f38..75c0754871 100644 --- a/locale/nb/LC_MESSAGES/statusnet.po +++ b/locale/nb/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:42+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:37+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 (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: no\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -342,7 +342,7 @@ msgstr "Klarte ikke å lagre profil." #: actions/designadminpanel.php:125 actions/editapplication.php:121 #: actions/newapplication.php:104 actions/newnotice.php:95 #: lib/designsettings.php:298 -#, fuzzy, php-format +#, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " "current configuration." @@ -350,11 +350,11 @@ msgid_plural "" "The server was unable to handle that much POST data (%s bytes) due to its " "current configuration." msgstr[0] "" -"Tjeneren kunne ikke håndtere så mye POST-data (%s bytes) på grunn av sitt " -"nåværende oppsett." +"Tjeneren kunne ikke håndtere så mye POST-data (%s byte) på grunn av sin " +"gjeldende konfigurasjon." msgstr[1] "" -"Tjeneren kunne ikke håndtere så mye POST-data (%s bytes) på grunn av sitt " -"nåværende oppsett." +"Tjeneren kunne ikke håndtere så mye POST-data (%s bytes) på grunn av sin " +"gjeldende konfigurasjon." #. TRANS: Client error displayed when saving design settings fails because of an empty id. #. TRANS: Client error displayed when saving design settings fails because of an empty result. @@ -427,7 +427,7 @@ msgstr "Ingen meldingstekst!" #. TRANS: Form validation error displayed when message content is too long. #. TRANS: %d is the maximum number of characters for a message. #: actions/apidirectmessagenew.php:127 actions/newmessage.php:152 -#, fuzzy, php-format +#, php-format msgid "That's too long. Maximum message size is %d character." msgid_plural "That's too long. Maximum message size is %d characters." msgstr[0] "Dette er for langt. Meldingen kan bare være %d tegn lang." @@ -445,7 +445,6 @@ msgstr "Kan ikke sende direktemeldinger til brukere du ikke er venn med." #. TRANS: Client error displayed trying to direct message self (403). #: actions/apidirectmessagenew.php:154 -#, fuzzy msgid "" "Do not send a message to yourself; just say it to yourself quietly instead." msgstr "" @@ -565,9 +564,8 @@ msgstr "Hjemmesiden er ikke en gyldig URL." #: actions/apigroupcreate.php:210 actions/editgroup.php:211 #: actions/newgroup.php:147 actions/profilesettings.php:256 #: actions/register.php:227 -#, fuzzy msgid "Full name is too long (maximum 255 characters)." -msgstr "Beklager, navnet er for langt (max 250 tegn)." +msgstr "Fullt navn er for langt (maks 255 tegn)." #. TRANS: Client error shown when providing too long a description during group creation. #. TRANS: %d is the maximum number of allowed characters. @@ -580,7 +578,7 @@ msgstr "Beklager, navnet er for langt (max 250 tegn)." #: actions/apigroupcreate.php:220 actions/editapplication.php:201 #: actions/editgroup.php:216 actions/newapplication.php:178 #: actions/newgroup.php:152 -#, fuzzy, php-format +#, php-format msgid "Description is too long (maximum %d character)." msgid_plural "Description is too long (maximum %d characters)." msgstr[0] "Beskrivelsen er for lang (maks %d tegn)." @@ -593,9 +591,8 @@ msgstr[1] "Beskrivelsen er for lang (maks %d tegn)." #: actions/apigroupcreate.php:234 actions/editgroup.php:223 #: actions/newgroup.php:159 actions/profilesettings.php:269 #: actions/register.php:236 -#, fuzzy msgid "Location is too long (maximum 255 characters)." -msgstr "Plassering er for lang (maks 255 tegn)." +msgstr "Plasseringen er for lang (maks 255 tegn)." #. TRANS: Client error shown when providing too many aliases during group creation. #. TRANS: %d is the maximum number of allowed aliases. @@ -605,11 +602,11 @@ msgstr "Plassering er for lang (maks 255 tegn)." #. TRANS: %d is the maximum number of allowed aliases. #: actions/apigroupcreate.php:255 actions/editgroup.php:236 #: actions/newgroup.php:172 -#, fuzzy, php-format +#, php-format msgid "Too many aliases! Maximum %d allowed." msgid_plural "Too many aliases! Maximum %d allowed." -msgstr[0] "For mange alias! Maksimum %d." -msgstr[1] "For mange alias! Maksimum %d." +msgstr[0] "For mange alias. Maks %d er tillatt." +msgstr[1] "For mange alias. Maks %d er tillatt." #. TRANS: Client error shown when providing an invalid alias during group creation. #. TRANS: %s is the invalid alias. @@ -763,9 +760,8 @@ msgstr "Ugyldig kallenavn / passord!" #. TRANS: Server error displayed when a database action fails. #: actions/apioauthauthorize.php:217 -#, fuzzy msgid "Database error inserting oauth_token_association." -msgstr "Databasefeil ved innsetting av bruker i programmet OAuth." +msgstr "Databasefeil ved innsetting av oauth_token_association." #. TRANS: Client error given on when invalid data was passed through a form in the OAuth API. #. TRANS: Unexpected validation error on avatar upload form. @@ -797,15 +793,15 @@ msgstr "Tillat eller nekt tilgang" #. TRANS: User notification of external application requesting account access. #. TRANS: %3$s is the access type requested, %4$s is the StatusNet sitename. #: actions/apioauthauthorize.php:425 -#, fuzzy, php-format +#, php-format msgid "" "An application would like the ability to %3$s your %4$s " "account data. You should only give access to your %4$s account to third " "parties you trust." msgstr "" -"Programmet %1$s av %2$s ønsker å kunne " -"%3$s dine %4$s-kontodata. Du bør bare gi tilgang til din %4" -"$s-konto til tredjeparter du stoler på." +"Et program ønsker muligheten til å %3$s dine %4$s-" +"kontodata. Du bør kun gi tilgang til din %4$s-konto til tredjeparter du " +"stoler på." #. TRANS: User notification of external application requesting account access. #. TRANS: %1$s is the application name requesting access, %2$s is the organisation behind the application, @@ -823,7 +819,6 @@ msgstr "" #. TRANS: Fieldset legend. #: actions/apioauthauthorize.php:455 -#, fuzzy msgctxt "LEGEND" msgid "Account" msgstr "Konto" @@ -861,22 +856,19 @@ msgstr "Avbryt" #. TRANS: Button text that when clicked will allow access to an account by an external application. #: actions/apioauthauthorize.php:485 -#, fuzzy msgctxt "BUTTON" msgid "Allow" msgstr "Tillat" #. TRANS: Form instructions. #: actions/apioauthauthorize.php:502 -#, fuzzy msgid "Authorize access to your account information." -msgstr "Tillat eller nekt tilgang til din kontoinformasjon." +msgstr "Autoriser tilgang til din kontoinformasjon." #. TRANS: Header for user notification after revoking OAuth access to an application. #: actions/apioauthauthorize.php:594 -#, fuzzy msgid "Authorization canceled." -msgstr "Direktemeldingsbekreftelse avbrutt." +msgstr "Autorisasjon kansellert." #. TRANS: User notification after revoking OAuth access to an application. #. TRANS: %s is an OAuth token. @@ -887,9 +879,8 @@ msgstr "" #. TRANS: Title of the page notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. #: actions/apioauthauthorize.php:621 -#, fuzzy msgid "You have successfully authorized the application" -msgstr "Du er ikke autorisert." +msgstr "Du har autorisert programmet" #. TRANS: Message notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. #: actions/apioauthauthorize.php:625 @@ -897,13 +888,15 @@ msgid "" "Please return to the application and enter the following security code to " "complete the process." msgstr "" +"Gå tilbake til programmet og skriv inn følgende sikkerhetskode for å " +"fullføre prosessen." #. TRANS: Title of the page notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. #: actions/apioauthauthorize.php:632 -#, fuzzy, php-format +#, php-format msgid "You have successfully authorized %s" -msgstr "Du er ikke autorisert." +msgstr "Du har autorisert %s" #. TRANS: Message notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. @@ -913,6 +906,8 @@ msgid "" "Please return to %s and enter the following security code to complete the " "process." msgstr "" +"Gå tilbake til %s og skriv inn følgende sikkerhetskode for å fullføre " +"prosessen." #. TRANS: Client error displayed trying to delete a status not using POST or DELETE. #. TRANS: POST and DELETE should not be translated. @@ -958,13 +953,13 @@ msgstr "Ingen status med den ID-en funnet." #. TRANS: Client error displayed when the parameter "status" is missing. #: actions/apistatusesupdate.php:221 msgid "Client must provide a 'status' parameter with a value." -msgstr "" +msgstr "Klienten må angi en 'status'-parameter med en verdi." #. TRANS: Client error displayed when the parameter "status" is missing. #. TRANS: %d is the maximum number of character for a notice. #: actions/apistatusesupdate.php:244 actions/newnotice.php:161 #: lib/mailhandler.php:60 -#, fuzzy, php-format +#, php-format msgid "That's too long. Maximum notice size is %d character." msgid_plural "That's too long. Maximum notice size is %d characters." msgstr[0] "Det er for langt. Maks notisstørrelse er %d tegn." @@ -972,14 +967,13 @@ msgstr[1] "Det er for langt. Maks notisstørrelse er %d tegn." #. TRANS: Client error displayed when replying to a non-existing notice. #: actions/apistatusesupdate.php:284 -#, fuzzy msgid "Parent notice not found." -msgstr "API-metode ikke funnet!" +msgstr "Foreldrenotis ikke funnet." #. TRANS: Client error displayed exceeding the maximum notice length. #. TRANS: %d is the maximum lenth for a notice. #: actions/apistatusesupdate.php:308 actions/newnotice.php:184 -#, fuzzy, php-format +#, php-format msgid "Maximum notice size is %d character, including attachment URL." msgid_plural "Maximum notice size is %d characters, including attachment URL." msgstr[0] "Maks notisstørrelse er %d tegn, inklusive vedleggs-URL." @@ -1002,16 +996,16 @@ msgstr "%1$s / Favoritter fra %2$s" #. TRANS: %1$s is the StatusNet sitename, %2$s is a user's full name, #. TRANS: %3$s is a user nickname. #: actions/apitimelinefavorites.php:120 -#, fuzzy, php-format +#, php-format msgid "%1$s updates favorited by %2$s / %3$s." -msgstr "%1$s oppdateringer markert som favoritt av %2$s / %2$s." +msgstr "%1$s-oppdateringer markert som favoritt av %2$s / %3$s." #. TRANS: Server error displayed when generating an Atom feed fails. #. TRANS: %s is the error. #: actions/apitimelinegroup.php:138 -#, fuzzy, php-format +#, php-format msgid "Could not generate feed for group - %s" -msgstr "Kunne ikke oppdatere gruppe." +msgstr "Kunne ikke generere mating for gruppe - %s" #. TRANS: Title for timeline of most recent mentions of a user. #. TRANS: %1$s is the StatusNet sitename, %2$s is a user nickname. @@ -1042,9 +1036,8 @@ msgstr "%s oppdateringer fra alle sammen!" #. TRANS: Server error displayed calling unimplemented API method for 'retweeted by me'. #: actions/apitimelineretweetedbyme.php:71 -#, fuzzy msgid "Unimplemented." -msgstr "Ikke-implementert metode." +msgstr "Ikke-implementert." #. TRANS: Title for Atom feed "repeated to me". %s is the user nickname. #: actions/apitimelineretweetedtome.php:108 @@ -1080,9 +1073,8 @@ msgstr "API-metode under utvikling." #. TRANS: Client error displayed when requesting user information for a non-existing user. #: actions/apiusershow.php:94 -#, fuzzy msgid "User not found." -msgstr "API-metode ikke funnet!" +msgstr "Bruker ikke funnet." #. TRANS: Client error displayed trying to get a non-existing attachment. #: actions/attachment.php:73 @@ -1155,21 +1147,18 @@ msgstr "Forhåndsvis" #. TRANS: Button on avatar upload page to delete current avatar. #: actions/avatarsettings.php:155 -#, fuzzy msgctxt "BUTTON" msgid "Delete" msgstr "Slett" #. TRANS: Button on avatar upload page to upload an avatar. #: actions/avatarsettings.php:173 -#, fuzzy msgctxt "BUTTON" msgid "Upload" msgstr "Last opp" #. TRANS: Button on avatar upload crop form to confirm a selected crop as avatar. #: actions/avatarsettings.php:243 -#, fuzzy msgctxt "BUTTON" msgid "Crop" msgstr "Beskjær" @@ -1320,7 +1309,6 @@ msgstr "Opphev blokkering av bruker fra gruppe" #. TRANS: Button text for unblocking a user from a group. #: actions/blockedfromgroup.php:323 -#, fuzzy msgctxt "BUTTON" msgid "Unblock" msgstr "Opphev blokkering" @@ -1384,9 +1372,8 @@ msgstr "Klarte ikke å oppdatere bruker." #. TRANS: Server error displayed when an address confirmation code deletion from the #. TRANS: database fails in the contact address confirmation action. #: actions/confirmaddress.php:132 -#, fuzzy msgid "Could not delete address confirmation." -msgstr "Kunne ikke slette direktemeldingsbekreftelse." +msgstr "Kunne ikke slette adressebekreftelse." #. TRANS: Title for the contact address confirmation action. #: actions/confirmaddress.php:150 @@ -1465,9 +1452,8 @@ msgstr "Slett dette programmet" #. TRANS: Client error when trying to delete group while not logged in. #: actions/deletegroup.php:64 -#, fuzzy msgid "You must be logged in to delete a group." -msgstr "Du må være innlogget for å forlate en gruppe." +msgstr "Du må være innlogget for å slette en gruppe." #. TRANS: Client error when trying to delete a group without providing a nickname or ID for the group. #: actions/deletegroup.php:94 actions/joingroup.php:88 @@ -1477,30 +1463,28 @@ msgstr "ngen kallenavn eller ID." #. TRANS: Client error when trying to delete a group without having the rights to delete it. #: actions/deletegroup.php:107 -#, fuzzy msgid "You are not allowed to delete this group." -msgstr "Du er ikke et medlem av denne gruppen." +msgstr "Du har ikke tillatelse til å slette denne gruppen." #. TRANS: Server error displayed if a group could not be deleted. #. TRANS: %s is the name of the group that could not be deleted. #: actions/deletegroup.php:150 -#, fuzzy, php-format +#, php-format msgid "Could not delete group %s." -msgstr "Kunne ikke oppdatere gruppe." +msgstr "Kunne ikke slette gruppen %s." #. TRANS: Message given after deleting a group. #. TRANS: %s is the deleted group's name. #: actions/deletegroup.php:159 -#, fuzzy, php-format +#, php-format msgid "Deleted group %s" -msgstr "%1$s forlot gruppe %2$s" +msgstr "Slettet gruppen %s" #. TRANS: Title of delete group page. #. TRANS: Form legend for deleting a group. #: actions/deletegroup.php:176 actions/deletegroup.php:202 -#, fuzzy msgid "Delete group" -msgstr "Slett bruker" +msgstr "Slett gruppe" #. TRANS: Warning in form for deleleting a group. #: actions/deletegroup.php:206 @@ -8679,10 +8663,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Tjeneren kunne ikke håndtere så mye POST-data (%s bytes) på grunn av sitt " -#~ "nåværende oppsett." diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po index 28a589da5a..80636ebd88 100644 --- a/locale/nl/LC_MESSAGES/statusnet.po +++ b/locale/nl/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:40+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27: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 (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3452,7 +3452,7 @@ msgstr "Wachtwoord wijzigen" #: actions/passwordsettings.php:104 msgid "Old password" -msgstr "Oud wachtwoord" +msgstr "Huidige wachtwoord" #: actions/passwordsettings.php:108 actions/recoverpassword.php:235 msgid "New password" @@ -5946,7 +5946,7 @@ msgstr "Robin denkt dat iets onmogelijk is." #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. #. TRANS: %1$s is used for plural. #: classes/File.php:190 -#, fuzzy, php-format +#, php-format msgid "" "No file may be larger than %1$d byte and the file you sent was %2$d bytes. " "Try to upload a smaller version." @@ -5954,7 +5954,7 @@ msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." msgstr[0] "" -"Bestanden mogen niet groter zijn dan %1$d bytes, en uw bestand was %2$d " +"Bestanden mogen niet groter zijn dan %1$d byte, en uw bestand was %2$d " "bytes. Probeer een kleinere versie te uploaden." msgstr[1] "" "Bestanden mogen niet groter zijn dan %1$d bytes, en uw bestand was %2$d " @@ -5963,24 +5963,23 @@ msgstr[1] "" #. TRANS: Message given if an upload would exceed user quota. #. TRANS: %d (number) is the user quota in bytes and is used for plural. #: classes/File.php:203 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your user quota of %d byte." msgid_plural "A file this large would exceed your user quota of %d bytes." msgstr[0] "" -"Een bestand van deze grootte overschijdt uw gebruikersquota van %d bytes." msgstr[1] "" -"Een bestand van deze grootte overschijdt uw gebruikersquota van %d bytes." #. TRANS: Message given id an upload would exceed a user's monthly quota. #. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. #: classes/File.php:215 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your monthly quota of %d byte." msgid_plural "A file this large would exceed your monthly quota of %d bytes." msgstr[0] "" -"Een bestand van deze grootte overschijdt uw maandelijkse quota van %d bytes." +"Een bestand van deze grootte overschrijdt uw maandelijkse quotum van %d byte." msgstr[1] "" -"Een bestand van deze grootte overschijdt uw maandelijkse quota van %d bytes." +"Een bestand van deze grootte overschrijdt uw maandelijkse quotum van %d " +"bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. #: classes/File.php:262 classes/File.php:277 @@ -6118,7 +6117,6 @@ msgstr "Er is een probleem opgetreden bij het opslaan van de mededeling." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). #: classes/Notice.php:905 -#, fuzzy msgid "Bad type provided to saveKnownGroups." msgstr "Het gegevenstype dat is opgegeven aan saveKnownGroups is onjuist" @@ -7403,24 +7401,21 @@ msgstr "" #. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. #: lib/designsettings.php:139 -#, fuzzy msgctxt "RADIO" msgid "On" msgstr "Aan" #. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. #: lib/designsettings.php:156 -#, fuzzy msgctxt "RADIO" msgid "Off" msgstr "Uit" #. TRANS: Button text on profile design page to reset all colour settings to default without saving. #: lib/designsettings.php:264 -#, fuzzy msgctxt "BUTTON" msgid "Reset" -msgstr "Herstellen" +msgstr "Opnieuw instellen" #. TRANS: Success message displayed if design settings were saved after clicking "Use defaults". #: lib/designsettings.php:433 @@ -8521,9 +8516,8 @@ msgstr "Geen" #. TRANS: Server exception displayed if a theme name was invalid. #: lib/theme.php:74 -#, fuzzy msgid "Invalid theme name." -msgstr "Ongeldige bestandsnaam." +msgstr "Ongeldige naam voor vormgeving." #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." @@ -8785,10 +8779,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "%d element in de back-up." msgstr[1] "%d elementen in de back-up." - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "De server was niet in staat zoveel POST-gegevens te verwerken (%s bytes) " -#~ "vanwege de huidige instellingen." diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po index 388e04527a..d5fcfd8a69 100644 --- a/locale/pl/LC_MESSAGES/statusnet.po +++ b/locale/pl/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:43+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:39+0000\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" @@ -20,11 +20,11 @@ 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 (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pl\n" "X-Message-Group: #out-statusnet-core\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -5901,7 +5901,7 @@ msgstr "Robin sądzi, że coś jest niemożliwe." #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. #. TRANS: %1$s is used for plural. #: classes/File.php:190 -#, fuzzy, php-format +#, php-format msgid "" "No file may be larger than %1$d byte and the file you sent was %2$d bytes. " "Try to upload a smaller version." @@ -5909,43 +5909,43 @@ msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." msgstr[0] "" -"Żaden plik nie może być większy niż %1$d bajty, a wysłany plik miał %2$d " +"Żaden plik nie może być większy niż %1$d bajt, a wysłany plik miał %2$d " "bajty. Proszę spróbować wysłać mniejszą wersję." msgstr[1] "" "Żaden plik nie może być większy niż %1$d bajty, a wysłany plik miał %2$d " "bajty. Proszę spróbować wysłać mniejszą wersję." msgstr[2] "" -"Żaden plik nie może być większy niż %1$d bajty, a wysłany plik miał %2$d " -"bajty. Proszę spróbować wysłać mniejszą wersję." +"Żaden plik nie może być większy niż %1$d bajtów, a wysłany plik miał %2$d " +"bajtów. Proszę spróbować wysłać mniejszą wersję." #. TRANS: Message given if an upload would exceed user quota. #. TRANS: %d (number) is the user quota in bytes and is used for plural. #: classes/File.php:203 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your user quota of %d byte." msgid_plural "A file this large would exceed your user quota of %d bytes." msgstr[0] "" -"Plik tej wielkości przekroczyłby przydział użytkownika wynoszący %d bajty." +"Plik tej wielkości przekroczyłby przydział użytkownika wynoszący %d bajt." msgstr[1] "" "Plik tej wielkości przekroczyłby przydział użytkownika wynoszący %d bajty." msgstr[2] "" -"Plik tej wielkości przekroczyłby przydział użytkownika wynoszący %d bajty." +"Plik tej wielkości przekroczyłby przydział użytkownika wynoszący %d bajtów." #. TRANS: Message given id an upload would exceed a user's monthly quota. #. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. #: classes/File.php:215 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your monthly quota of %d byte." msgid_plural "A file this large would exceed your monthly quota of %d bytes." msgstr[0] "" "Plik tej wielkości przekroczyłby miesięczny przydział użytkownika wynoszący %" -"d bajty." +"d bajt." msgstr[1] "" "Plik tej wielkości przekroczyłby miesięczny przydział użytkownika wynoszący %" "d bajty." msgstr[2] "" "Plik tej wielkości przekroczyłby miesięczny przydział użytkownika wynoszący %" -"d bajty." +"d bajtów." #. TRANS: Client exception thrown if a file upload does not have a valid name. #: classes/File.php:262 classes/File.php:277 @@ -6078,9 +6078,8 @@ msgstr "Problem podczas zapisywania wpisu." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). #: classes/Notice.php:905 -#, fuzzy msgid "Bad type provided to saveKnownGroups." -msgstr "Podano błędne dane do saveKnownGroups" +msgstr "Podano błędne dane do saveKnownGroups." #. TRANS: Server exception thrown when an update for a group inbox fails. #: classes/Notice.php:1004 @@ -7353,21 +7352,18 @@ msgstr "Można wysłać osobisty obraz tła. Maksymalny rozmiar pliku to 2 MB." #. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. #: lib/designsettings.php:139 -#, fuzzy msgctxt "RADIO" msgid "On" msgstr "Włączone" #. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. #: lib/designsettings.php:156 -#, fuzzy msgctxt "RADIO" msgid "Off" msgstr "Wyłączone" #. TRANS: Button text on profile design page to reset all colour settings to default without saving. #: lib/designsettings.php:264 -#, fuzzy msgctxt "BUTTON" msgid "Reset" msgstr "Przywróć" @@ -8476,9 +8472,8 @@ msgstr "Brak" #. TRANS: Server exception displayed if a theme name was invalid. #: lib/theme.php:74 -#, fuzzy msgid "Invalid theme name." -msgstr "Nieprawidłowa nazwa pliku." +msgstr "Nieprawidłowa nazwa motywu." #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." @@ -8744,10 +8739,3 @@ msgid_plural "%d entries in backup." msgstr[0] "%d wpis w kopii zapasowej." msgstr[1] "%d wpisy w kopii zapasowej." msgstr[2] "%d wpisów w kopii zapasowej." - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Serwer nie może obsłużyć aż tyle danych POST (%s bajty) z powodu bieżącej " -#~ "konfiguracji." diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po index 2a7347ba2f..be733fbc98 100644 --- a/locale/pt/LC_MESSAGES/statusnet.po +++ b/locale/pt/LC_MESSAGES/statusnet.po @@ -14,17 +14,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:45+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:41+0000\n" "Language-Team: Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8761,10 +8761,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "O servidor não conseguiu processar tantos dados POST (%s bytes) devido à " -#~ "sua configuração actual." diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po index bb8b030dc5..1c9ebc43d9 100644 --- a/locale/pt_BR/LC_MESSAGES/statusnet.po +++ b/locale/pt_BR/LC_MESSAGES/statusnet.po @@ -15,18 +15,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:46+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:42+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 (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt-br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -891,9 +891,8 @@ msgstr "O token %s solicitado foi revogado." #. TRANS: Title of the page notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. #: actions/apioauthauthorize.php:621 -#, fuzzy msgid "You have successfully authorized the application" -msgstr "Você não está autorizado." +msgstr "A aplicação foi autorizada com sucesso" #. TRANS: Message notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. #: actions/apioauthauthorize.php:625 @@ -901,13 +900,15 @@ msgid "" "Please return to the application and enter the following security code to " "complete the process." msgstr "" +"Por favor, retorne à aplicação e digite o seguinte código de segurança para " +"completar o processo." #. TRANS: Title of the page notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. #: actions/apioauthauthorize.php:632 -#, fuzzy, php-format +#, php-format msgid "You have successfully authorized %s" -msgstr "Você não está autorizado." +msgstr "A aplicação %s foi autorizada com sucesso" #. TRANS: Message notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. @@ -917,6 +918,8 @@ msgid "" "Please return to %s and enter the following security code to complete the " "process." msgstr "" +"Por favor, retorne a %s e digite o seguinte código de segurança para " +"completar o processo." #. TRANS: Client error displayed trying to delete a status not using POST or DELETE. #. TRANS: POST and DELETE should not be translated. @@ -968,25 +971,24 @@ msgstr "O cliente tem de fornecer um parâmetro 'status' com um valor." #. TRANS: %d is the maximum number of character for a notice. #: actions/apistatusesupdate.php:244 actions/newnotice.php:161 #: lib/mailhandler.php:60 -#, fuzzy, php-format +#, php-format msgid "That's too long. Maximum notice size is %d character." msgid_plural "That's too long. Maximum notice size is %d characters." -msgstr[0] "Está muito extenso. O tamanho máximo é de %d caracteres." +msgstr[0] "Está muito extenso. O tamanho máximo é de %d caractere." msgstr[1] "Está muito extenso. O tamanho máximo é de %d caracteres." #. TRANS: Client error displayed when replying to a non-existing notice. #: actions/apistatusesupdate.php:284 -#, fuzzy msgid "Parent notice not found." -msgstr "O método da API não foi encontrado!" +msgstr "A mensagem pai não foi encontrada." #. TRANS: Client error displayed exceeding the maximum notice length. #. TRANS: %d is the maximum lenth for a notice. #: actions/apistatusesupdate.php:308 actions/newnotice.php:184 -#, fuzzy, php-format +#, php-format msgid "Maximum notice size is %d character, including attachment URL." msgid_plural "Maximum notice size is %d characters, including attachment URL." -msgstr[0] "O tamanho máximo da mensagem é de %d caracteres" +msgstr[0] "O tamanho máximo da mensagem é de %d caractere" msgstr[1] "O tamanho máximo da mensagem é de %d caracteres" #. TRANS: Client error displayed when requesting profiles of followers in an unsupported format. @@ -1006,16 +1008,16 @@ msgstr "%1$s / Favoritas de %2$s" #. TRANS: %1$s is the StatusNet sitename, %2$s is a user's full name, #. TRANS: %3$s is a user nickname. #: actions/apitimelinefavorites.php:120 -#, fuzzy, php-format +#, php-format msgid "%1$s updates favorited by %2$s / %3$s." -msgstr "%1$s marcadas como favoritas por %2$s / %2$s." +msgstr "Mensagens de %1$s marcadas como favoritas por %2$s / %3$s." #. TRANS: Server error displayed when generating an Atom feed fails. #. TRANS: %s is the error. #: actions/apitimelinegroup.php:138 -#, fuzzy, php-format +#, php-format msgid "Could not generate feed for group - %s" -msgstr "Não foi possível atualizar o grupo." +msgstr "Não foi possível gerar a fonte de notícias para o grupo - %s" #. TRANS: Title for timeline of most recent mentions of a user. #. TRANS: %1$s is the StatusNet sitename, %2$s is a user nickname. @@ -8783,10 +8785,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "O servidor não conseguiu manipular a quantidade de dados do POST (%s " -#~ "bytes) devido à sua configuração atual." diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po index 57cc4c46ac..41389a7b3e 100644 --- a/locale/ru/LC_MESSAGES/statusnet.po +++ b/locale/ru/LC_MESSAGES/statusnet.po @@ -14,18 +14,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:47+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:43+0000\n" "Language-Team: Russian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8813,10 +8813,3 @@ msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" msgstr[2] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Сервер не смог обработать столько POST-данных (%s байт) из-за текущей " -#~ "конфигурации." diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po index 88ff10436c..6143b31d97 100644 --- a/locale/sv/LC_MESSAGES/statusnet.po +++ b/locale/sv/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:48+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:44+0000\n" "Language-Team: Swedish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8736,10 +8736,3 @@ msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" msgstr[1] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Servern kunde inte hantera så mycket POST-data (%s byte) på grund av sin " -#~ "nuvarande konfiguration." diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po index 320dbdec0a..7329fcf2de 100644 --- a/locale/te/LC_MESSAGES/statusnet.po +++ b/locale/te/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:49+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:45+0000\n" "Language-Team: Telugu \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1138,21 +1138,18 @@ msgstr "మునుజూపు" #. TRANS: Button on avatar upload page to delete current avatar. #: actions/avatarsettings.php:155 -#, fuzzy msgctxt "BUTTON" msgid "Delete" msgstr "తొలగించు" #. TRANS: Button on avatar upload page to upload an avatar. #: actions/avatarsettings.php:173 -#, fuzzy msgctxt "BUTTON" msgid "Upload" -msgstr "ఎగుమతించు" +msgstr "ఎక్కించు" #. TRANS: Button on avatar upload crop form to confirm a selected crop as avatar. #: actions/avatarsettings.php:243 -#, fuzzy msgctxt "BUTTON" msgid "Crop" msgstr "కత్తిరించు" @@ -1445,9 +1442,8 @@ msgstr "ఈ ఉపకరణాన్ని తొలగించు" #. TRANS: Client error when trying to delete group while not logged in. #: actions/deletegroup.php:64 -#, fuzzy msgid "You must be logged in to delete a group." -msgstr "గుంపుని వదిలివెళ్ళడానికి మీరు ప్రవేశించి ఉండాలి." +msgstr "గుంపుని తొలగించడానికి మీరు ప్రవేశించి ఉండాలి." #. TRANS: Client error when trying to delete a group without providing a nickname or ID for the group. #: actions/deletegroup.php:94 actions/joingroup.php:88 @@ -1457,23 +1453,22 @@ msgstr "Jabber ID లేదు." #. TRANS: Client error when trying to delete a group without having the rights to delete it. #: actions/deletegroup.php:107 -#, fuzzy msgid "You are not allowed to delete this group." -msgstr "మీరు ఈ గుంపులో సభ్యులు కాదు." +msgstr "ఈ గుంపును తొలగించడానికి మీకు అనుమతి లేదు." #. TRANS: Server error displayed if a group could not be deleted. #. TRANS: %s is the name of the group that could not be deleted. #: actions/deletegroup.php:150 -#, fuzzy, php-format +#, php-format msgid "Could not delete group %s." -msgstr "గుంపుని తాజాకరించలేకున్నాం." +msgstr "%s గుంపుని తొలగించలేకున్నాం." #. TRANS: Message given after deleting a group. #. TRANS: %s is the deleted group's name. #: actions/deletegroup.php:159 -#, fuzzy, php-format +#, php-format msgid "Deleted group %s" -msgstr "%2$s గుంపు నుండి %1$s వైదొలిగారు" +msgstr "%s గుంపుని తొలగించాం" #. TRANS: Title of delete group page. #. TRANS: Form legend for deleting a group. @@ -1589,9 +1584,8 @@ msgid "Invalid logo URL." msgstr "చిహ్నపు URL చెల్లదు." #: actions/designadminpanel.php:340 -#, fuzzy msgid "Invalid SSL logo URL." -msgstr "చిహ్నపు URL చెల్లదు." +msgstr "SSL చిహ్నపు URL చెల్లదు." #: actions/designadminpanel.php:344 #, php-format @@ -1607,9 +1601,8 @@ msgid "Site logo" msgstr "సైటు చిహ్నం" #: actions/designadminpanel.php:457 -#, fuzzy msgid "SSL logo" -msgstr "సైటు చిహ్నం" +msgstr "SSL చిహ్నం" #: actions/designadminpanel.php:469 msgid "Change theme" @@ -1986,7 +1979,7 @@ msgstr "%s (@%s) మీ నోటీసుని ఇష్టపడ్డార #. TRANS: Checkbox label in e-mail preferences form. #: actions/emailsettings.php:197 msgid "Send me email when someone sends me a private message." -msgstr "" +msgstr "ఎవరైనా నాకు అంతరంగిక సందేశాన్ని పంపించినప్పుడు నాకు ఈమెయిలుని పంపించు" #. TRANS: Checkbox label in e-mail preferences form. #: actions/emailsettings.php:203 @@ -2727,7 +2720,7 @@ msgstr[1] "మీరు ఇప్పటికే ఈ వాడుకరులక #. TRANS: Used as list item for already subscribed users (%1$s is nickname, %2$s is e-mail address). #. TRANS: Used as list item for already registered people (%1$s is nickname, %2$s is e-mail address). #: actions/invite.php:145 actions/invite.php:159 -#, fuzzy, php-format +#, php-format msgctxt "INVITE" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -2927,7 +2920,7 @@ msgstr "" #: actions/licenseadminpanel.php:239 msgid "License selection" -msgstr "" +msgstr "లైసెన్సు ఎంపిక" #: actions/licenseadminpanel.php:245 msgid "Private" @@ -4749,7 +4742,6 @@ msgstr "సృష్టితం" #. TRANS: Label for member count in statistics on group page. #: actions/showgroup.php:461 -#, fuzzy msgctxt "LABEL" msgid "Members" msgstr "సభ్యులు" @@ -5548,7 +5540,7 @@ msgstr "వాడుకరి" #. TRANS: Instruction for user admin panel. #: actions/useradminpanel.php:69 msgid "User settings for this StatusNet site" -msgstr "" +msgstr "ఈ స్టేటస్‌నెట్ సైటుకి వాడుకరి అమరికలు" #. TRANS: Form validation error in user admin panel when a non-numeric character limit was set. #: actions/useradminpanel.php:147 @@ -5835,9 +5827,9 @@ msgstr "ఇష్టపడు" #. TRANS: Ntofication given when a user marks a notice as favorite. #. TRANS: %1$s is a user nickname or full name, %2$s is a notice URI. #: classes/Fave.php:151 -#, fuzzy, php-format +#, php-format msgid "%1$s marked notice %2$s as a favorite." -msgstr "%s (@%s) మీ నోటీసుని ఇష్టపడ్డారు" +msgstr "%2$s నోటీసుని %1$s ఇష్టాంశంగా గుర్తించారు." #. TRANS: Server exception thrown when a URL cannot be processed. #: classes/File.php:142 @@ -6037,7 +6029,7 @@ msgstr "RT @%1$s %2$s" #. TRANS: Full name of a profile or group followed by nickname in parens #: classes/Profile.php:164 classes/User_group.php:247 -#, fuzzy, php-format +#, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" @@ -6203,7 +6195,7 @@ msgstr "శీర్షికలేని పేజీ" #: lib/action.php:310 msgctxt "TOOLTIP" msgid "Show more" -msgstr "" +msgstr "మరింత చూపించు" #. TRANS: DT element for primary navigation menu. String is hidden in default CSS. #: lib/action.php:526 @@ -7083,7 +7075,7 @@ msgstr "ఈ లంకెని ఒకేసారి ఉపయోగించగ #: lib/command.php:812 #, php-format msgid "Unsubscribed %s." -msgstr "" +msgstr "%sని చందా విరమింపజేసారు." #. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions. #: lib/command.php:830 @@ -7285,11 +7277,11 @@ msgstr "ఈ నోటీసుని పునరావృతించు" #: lib/feed.php:84 msgid "RSS 1.0" -msgstr "" +msgstr "RSS 1.0" #: lib/feed.php:86 msgid "RSS 2.0" -msgstr "" +msgstr "RSS 2.0" #: lib/feed.php:88 msgid "Atom" @@ -8415,10 +8407,9 @@ msgstr "" #. TRANS: Title for the form to unblock a user. #: lib/unblockform.php:67 -#, fuzzy msgctxt "TITLE" msgid "Unblock" -msgstr "నిరోధాన్ని ఎత్తివేయి" +msgstr "నిరోధపు ఎత్తివేత" #: lib/unsandboxform.php:69 msgid "Unsandbox" diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po index 50ec083e64..5e83b9863d 100644 --- a/locale/tr/LC_MESSAGES/statusnet.po +++ b/locale/tr/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:50+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:46+0000\n" "Language-Team: Turkish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -826,7 +826,6 @@ msgstr "" #. TRANS: Fieldset legend. #: actions/apioauthauthorize.php:455 -#, fuzzy msgctxt "LEGEND" msgid "Account" msgstr "Hesap" @@ -1159,7 +1158,6 @@ msgstr "Önizleme" #. TRANS: Button on avatar upload page to delete current avatar. #: actions/avatarsettings.php:155 -#, fuzzy msgctxt "BUTTON" msgid "Delete" msgstr "Sil" @@ -1173,7 +1171,6 @@ msgstr "Yükle" #. TRANS: Button on avatar upload crop form to confirm a selected crop as avatar. #: actions/avatarsettings.php:243 -#, fuzzy msgctxt "BUTTON" msgid "Crop" msgstr "Kırp" @@ -1637,9 +1634,8 @@ msgid "Site logo" msgstr "Site logosu" #: actions/designadminpanel.php:457 -#, fuzzy msgid "SSL logo" -msgstr "Site logosu" +msgstr "SSL logosu" #: actions/designadminpanel.php:469 msgid "Change theme" @@ -8535,10 +8531,3 @@ msgstr "Yeni durum mesajı" msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Sunucu, şu anki yapılandırması dolayısıyla bu kadar çok POST verisiyle (%" -#~ "s bytes) başa çıkamıyor." diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po index f32b088655..8021630273 100644 --- a/locale/uk/LC_MESSAGES/statusnet.po +++ b/locale/uk/LC_MESSAGES/statusnet.po @@ -12,18 +12,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:51+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:47+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -5916,7 +5916,7 @@ msgstr "Робін вважає, що це неможливо." #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. #. TRANS: %1$s is used for plural. #: classes/File.php:190 -#, fuzzy, php-format +#, php-format msgid "" "No file may be larger than %1$d byte and the file you sent was %2$d bytes. " "Try to upload a smaller version." @@ -5924,34 +5924,34 @@ msgid_plural "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." msgstr[0] "" -"Ні, файл не може бути більшим за %1$d байтів, а те, що ви хочете надіслати, " -"важить %2$d байтів. Спробуйте завантажити меншу версію." +"Файл не може бути більшим за %1$d байт, а те, що ви хочете надіслати, важить " +"%2$d байтів. Спробуйте завантажити меншу версію." msgstr[1] "" -"Ні, файл не може бути більшим за %1$d байтів, а те, що ви хочете надіслати, " +"Файл не може бути більшим за %1$d байтів, а те, що ви хочете надіслати, " "важить %2$d байтів. Спробуйте завантажити меншу версію." msgstr[2] "" -"Ні, файл не може бути більшим за %1$d байтів, а те, що ви хочете надіслати, " +"Файл не може бути більшим за %1$d байтів, а те, що ви хочете надіслати, " "важить %2$d байтів. Спробуйте завантажити меншу версію." #. TRANS: Message given if an upload would exceed user quota. #. TRANS: %d (number) is the user quota in bytes and is used for plural. #: classes/File.php:203 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your user quota of %d byte." msgid_plural "A file this large would exceed your user quota of %d bytes." -msgstr[0] "Розміри цього файлу перевищують вашу квоту на %d байтів." -msgstr[1] "Розміри цього файлу перевищують вашу квоту на %d байтів." -msgstr[2] "Розміри цього файлу перевищують вашу квоту на %d байтів." +msgstr[0] "Розміри цього файлу перевищують вашу квоту у %d байт." +msgstr[1] "Розміри цього файлу перевищують вашу квоту у %d байтів." +msgstr[2] "Розміри цього файлу перевищують вашу квоту у %d байтів." #. TRANS: Message given id an upload would exceed a user's monthly quota. #. TRANS: $d (number) is the monthly user quota in bytes and is used for plural. #: classes/File.php:215 -#, fuzzy, php-format +#, php-format msgid "A file this large would exceed your monthly quota of %d byte." msgid_plural "A file this large would exceed your monthly quota of %d bytes." -msgstr[0] "Розміри цього файлу перевищують вашу місячну квоту на %d байтів." -msgstr[1] "Розміри цього файлу перевищують вашу місячну квоту на %d байтів." -msgstr[2] "Розміри цього файлу перевищують вашу місячну квоту на %d байтів." +msgstr[0] "Розміри цього файлу перевищують вашу місячну квоту у %d байт." +msgstr[1] "Розміри цього файлу перевищують вашу місячну квоту у %d байтів." +msgstr[2] "Розміри цього файлу перевищують вашу місячну квоту у %d байтів." #. TRANS: Client exception thrown if a file upload does not have a valid name. #: classes/File.php:262 classes/File.php:277 @@ -6084,9 +6084,8 @@ msgstr "Проблема при збереженні допису." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). #: classes/Notice.php:905 -#, fuzzy msgid "Bad type provided to saveKnownGroups." -msgstr "Задається невірний тип для saveKnownGroups" +msgstr "Вказано невірний тип для saveKnownGroups." #. TRANS: Server exception thrown when an update for a group inbox fails. #: classes/Notice.php:1004 @@ -7360,21 +7359,18 @@ msgstr "" #. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. #: lib/designsettings.php:139 -#, fuzzy msgctxt "RADIO" msgid "On" msgstr "Увімк." #. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. #: lib/designsettings.php:156 -#, fuzzy msgctxt "RADIO" msgid "Off" msgstr "Вимк." #. TRANS: Button text on profile design page to reset all colour settings to default without saving. #: lib/designsettings.php:264 -#, fuzzy msgctxt "BUTTON" msgid "Reset" msgstr "Скинути" @@ -8485,9 +8481,8 @@ msgstr "Пусто" #. TRANS: Server exception displayed if a theme name was invalid. #: lib/theme.php:74 -#, fuzzy msgid "Invalid theme name." -msgstr "Невірне ім’я файлу." +msgstr "Невірне назва теми." #: lib/themeuploader.php:50 msgid "This server cannot handle theme uploads without ZIP support." @@ -8758,10 +8753,3 @@ msgid_plural "%d entries in backup." msgstr[0] "У резервному файлі збережено %d допис." msgstr[1] "У резервному файлі збережено %d дописів." msgstr[2] "У резервному файлі збережено %d дописів." - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "" -#~ "Сервер нездатен обробити таку кількість даних (%s байтів) за поточної " -#~ "конфігурації." diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po index 2ea284a880..8a027120df 100644 --- a/locale/zh_CN/LC_MESSAGES/statusnet.po +++ b/locale/zh_CN/LC_MESSAGES/statusnet.po @@ -14,18 +14,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:27:52+0000\n" +"POT-Creation-Date: 2010-11-07 20:24+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:48+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 (r76004); Translate extension (2010-09-17)\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2010-11-02 23:22:49+0000\n" +"X-POT-Import-Date: 2010-11-05 00:36:07+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -8534,8 +8534,3 @@ msgstr "没有用户被指定;使用备份用户。" msgid "%d entry in backup." msgid_plural "%d entries in backup." msgstr[0] "备份中有 %d 个条目。" - -#~ msgid "" -#~ "The server was unable to handle that much POST data (%s bytes) due to its " -#~ "current configuration." -#~ msgstr "服务器当前的设置无法处理这么多的 POST 数据(%s bytes)。" diff --git a/plugins/Adsense/locale/Adsense.pot b/plugins/Adsense/locale/Adsense.pot index 2f5e4af2f8..77db7e7d8c 100644 --- a/plugins/Adsense/locale/Adsense.pot +++ b/plugins/Adsense/locale/Adsense.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -27,7 +27,7 @@ msgid "AdSense" msgstr "" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "" #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po index c572f9b271..87c864a69d 100644 --- a/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Plugin evit ouzhpennañ Google Adsense da lec'hiennoù StatusNet." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po index e7ddaa32e9..e6c880a6e3 100644 --- a/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Plugin, das Google Adsense auf StatusNet-Websites hinzufügt." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po index 5a2fcfb255..1232b8293e 100644 --- a/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Spanish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: es\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Extensión para añadir Google Adsense a sitios StatusNet." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po index 17b56a00aa..e73c99a46a 100644 --- a/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po @@ -10,13 +10,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -33,7 +33,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Greffon pour ajouter Google Adsense aux sites StatusNet." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po index e906670ea2..2efd29f966 100644 --- a/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Galician \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: gl\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,7 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "" #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po index 1f8a73ea20..ef9250d000 100644 --- a/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Plug-in pro adder Google Adsense a sitos StatusNet." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po index e8addce834..004fe05594 100644 --- a/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Italian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: it\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Plugin per aggiungere Google Adsense ai siti StatusNet" #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po index d3ccee66ef..ee971e6d12 100644 --- a/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Georgian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ka\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,7 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "" #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po index 44fe432aaf..ef9b949e4d 100644 --- a/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Приклучок за додавање на Google AdSense во мреж. места со StatusNet." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po index c4854ad3f8..9c722cc956 100644 --- a/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Plug-in om Google AdSense toe te voegen aan Statusnetsites." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po index 66ffa6b7ac..649287cebd 100644 --- a/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-30 23:18+0000\n" -"PO-Revision-Date: 2010-10-30 23:20:58+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Brazilian Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-29 16:11:50+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75708); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt-br\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -34,7 +34,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Plugin para adicionar Google Adsense aos sites StatusNet." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po index 85bb316a61..3a359a3a96 100644 --- a/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po @@ -10,13 +10,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Russian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -34,7 +34,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Плагин для добавления Google Adsense на сайты StatusNet." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po index 031b795032..f8e3d83bc6 100644 --- a/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Swedish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,7 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "" #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po index ad5ed1ad26..db5d3445b0 100644 --- a/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:50+0000\n" "Language-Team: Tagalog \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tl\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -32,7 +32,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "" "Pampasak upang maidagdag ang Adsense ng Google sa mga sityo ng StatusNet." diff --git a/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po index f15de57c98..fe9ee49848 100644 --- a/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:51+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -33,7 +33,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "Додаток для відображення Google Adsense на сторінці сайту StatusNet." #: adsenseadminpanel.php:52 diff --git a/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po index 9bc76e4160..0bdb9880d4 100644 --- a/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po +++ b/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Adsense\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:09+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:51+0000\n" "Language-Team: Simplified Chinese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: #out-statusnet-plugin-adsense\n" @@ -34,7 +34,8 @@ msgid "AdSense" msgstr "AdSense" #: AdsensePlugin.php:209 -msgid "Plugin to add Google Adsense to StatusNet sites." +#, fuzzy +msgid "Plugin to add Google AdSense to StatusNet sites." msgstr "添加 Google Adsense 到 StatusNet 网站的插件。" #: adsenseadminpanel.php:52 diff --git a/plugins/BitlyUrl/locale/nb/LC_MESSAGES/BitlyUrl.po b/plugins/BitlyUrl/locale/nb/LC_MESSAGES/BitlyUrl.po index de00fc1cab..4298ae85e3 100644 --- a/plugins/BitlyUrl/locale/nb/LC_MESSAGES/BitlyUrl.po +++ b/plugins/BitlyUrl/locale/nb/LC_MESSAGES/BitlyUrl.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - BitlyUrl\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:16+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:27:56+0000\n" "Language-Team: Norwegian (bokmål)‬ \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:11:53+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: no\n" "X-Message-Group: #out-statusnet-plugin-bitlyurl\n" @@ -23,7 +23,7 @@ msgstr "" #: BitlyUrlPlugin.php:48 msgid "You must specify a serviceUrl for bit.ly shortening." -msgstr "" +msgstr "Du må angi en serviceUrl for bit.ly-forkortelse." #: BitlyUrlPlugin.php:171 #, php-format diff --git a/plugins/Disqus/locale/br/LC_MESSAGES/Disqus.po b/plugins/Disqus/locale/br/LC_MESSAGES/Disqus.po index caafa7ba82..d647fe3f6f 100644 --- a/plugins/Disqus/locale/br/LC_MESSAGES/Disqus.po +++ b/plugins/Disqus/locale/br/LC_MESSAGES/Disqus.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Disqus\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:46:26+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:28:06+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:29:07+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:12:43+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-plugin-disqus\n" @@ -27,10 +27,12 @@ msgid "" "Please enable JavaScript to view the [comments powered by Disqus](http://" "disqus.com/?ref_noscript=%s)." msgstr "" +"Mar plij gweredekait JavaScript evit gwelet an [evezhiadennoù enlusket gant " +"Disqus] (http://disqus.com/?ref_noscript=%s)." #: DisqusPlugin.php:149 msgid "Comments powered by " -msgstr "" +msgstr "Evezhiadennoù enlusket gant " #: DisqusPlugin.php:201 msgid "Comments" diff --git a/plugins/Sample/locale/br/LC_MESSAGES/Sample.po b/plugins/Sample/locale/br/LC_MESSAGES/Sample.po index 2ac1405de0..0702b07c3f 100644 --- a/plugins/Sample/locale/br/LC_MESSAGES/Sample.po +++ b/plugins/Sample/locale/br/LC_MESSAGES/Sample.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Sample\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:31+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:29:05+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-20 17:58:22+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:01+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-plugin-sample\n" @@ -26,14 +26,14 @@ msgstr "" #: User_greeting_count.php:164 #, php-format msgid "Could not save new greeting count for %d." -msgstr "" +msgstr "Dibosupl eo enrollañ ar gont degemer nevez evit an implijer %d." #. TRANS: Exception thrown when the user greeting count could not be saved in the database. #. TRANS: %d is a user ID (number). #: User_greeting_count.php:177 #, php-format msgid "Could not increment greeting count for %d." -msgstr "" +msgstr "Dibosupl eo inkremantañ ar gont degemer nevez evit an implijer %d." #: SamplePlugin.php:259 hello.php:111 msgid "Hello" @@ -41,11 +41,13 @@ msgstr "Demat" #: SamplePlugin.php:259 msgid "A warm greeting" -msgstr "" +msgstr "Un degemer tomm" #: SamplePlugin.php:270 msgid "A sample plugin to show basics of development for new hackers." msgstr "" +"Ur skouer a lugant evit diskouez an diazezoù diorren evit ar c'hoderien " +"nevez." #: hello.php:113 #, php-format @@ -65,5 +67,5 @@ msgstr "Demat, %s" #, php-format msgid "I have greeted you %d time." msgid_plural "I have greeted you %d times." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "ur" +msgstr[1] "%d" diff --git a/plugins/Sitemap/locale/br/LC_MESSAGES/Sitemap.po b/plugins/Sitemap/locale/br/LC_MESSAGES/Sitemap.po index 02dea72ee5..73ebd322f9 100644 --- a/plugins/Sitemap/locale/br/LC_MESSAGES/Sitemap.po +++ b/plugins/Sitemap/locale/br/LC_MESSAGES/Sitemap.po @@ -2,6 +2,7 @@ # Expored from translatewiki.net # # Author: Fulup +# Author: Y-M D # -- # This file is distributed under the same license as the StatusNet package. # @@ -9,13 +10,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Sitemap\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-27 23:43+0000\n" -"PO-Revision-Date: 2010-10-27 23:47:40+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:29:07+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-18 20:34:11+0000\n" -"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-10-29 16:14:04+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-plugin-sitemap\n" @@ -54,7 +55,7 @@ msgstr "" #. TRANS: Field label. #: sitemapadminpanel.php:183 msgid "Bing key" -msgstr "" +msgstr "Alc'hwez Bing" #. TRANS: Title for field label. #: sitemapadminpanel.php:185 diff --git a/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po index c92e4e4660..f2c84969af 100644 --- a/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:29:20+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -108,6 +108,3 @@ msgstr "Effacer" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Effacer tous les marquages" - -#~ msgid "Flag already exists." -#~ msgstr "Déjà marqué." diff --git a/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po index 2d422bf377..2917da7320 100644 --- a/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:29:20+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -107,6 +107,3 @@ msgstr "Rader" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Rader tote le marcas" - -#~ msgid "Flag already exists." -#~ msgstr "Le marca ja existe." diff --git a/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po index 8faa4d58e7..8d934141e9 100644 --- a/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:29:20+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -108,6 +108,3 @@ msgstr "Отстрани" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Отстрани ги сите ознаки" - -#~ msgid "Flag already exists." -#~ msgstr "Ознаката веќе постои." diff --git a/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po index 7cb9016a24..766776a9e1 100644 --- a/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:29:20+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -109,6 +109,3 @@ msgstr "Wissen" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Alle markeringen wissen" - -#~ msgid "Flag already exists." -#~ msgstr "De markering bestaat al." diff --git a/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po index 2e1802c65d..ea71be24e2 100644 --- a/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:29:20+0000\n" "Language-Team: Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -108,6 +108,3 @@ msgstr "Limpar" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Limpar todas as sinalizações" - -#~ msgid "Flag already exists." -#~ msgstr "Já existe uma sinalização." diff --git a/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po index c2a57b66ac..ae0e9b03fe 100644 --- a/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po +++ b/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - UserFlag\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-04 18:25+0000\n" -"PO-Revision-Date: 2010-11-04 18:29:23+0000\n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:29:20+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n" -"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-plugin-userflag\n" @@ -110,6 +110,3 @@ msgstr "Зняти" #: clearflagform.php:88 msgid "Clear all flags" msgstr "Зняти всі позначки" - -#~ msgid "Flag already exists." -#~ msgstr "Відмітка вже стоїть." From 66e34a28f734f4356e850ec9856431c37d307b7b Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Sun, 7 Nov 2010 22:31:02 +0100 Subject: [PATCH 024/220] screen_name -> nick names. Spotted by The Evil IP address. --- actions/apifriendshipsexists.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/apifriendshipsexists.php b/actions/apifriendshipsexists.php index c8766633b6..43b1daf4fc 100644 --- a/actions/apifriendshipsexists.php +++ b/actions/apifriendshipsexists.php @@ -85,7 +85,7 @@ class ApiFriendshipsExistsAction extends ApiPrivateAuthAction if (empty($this->profile_a) || empty($this->profile_b)) { $this->clientError( // TRANS: Client error displayed when supplying invalid parameters to an API call checking if a friendship exists. - _('Two valid IDs or screen_names must be supplied.'), + _('Two valid IDs or nick names must be supplied.'), 400, $this->format ); From f5b037c169b9564e66270951020df4d96a1711b8 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Sun, 7 Nov 2010 22:32:52 +0100 Subject: [PATCH 025/220] Update translator documentation. --- actions/apioauthauthorize.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/apioauthauthorize.php b/actions/apioauthauthorize.php index b2c0de719a..d76ae060f2 100644 --- a/actions/apioauthauthorize.php +++ b/actions/apioauthauthorize.php @@ -421,7 +421,7 @@ class ApiOauthAuthorizeAction extends Action if ($this->app->name == 'anonymous') { // Special message for the anonymous app and consumer. // TRANS: User notification of external application requesting account access. - // TRANS: %3$s is the access type requested, %4$s is the StatusNet sitename. + // TRANS: %3$s is the access type requested (read-write or read-only), %4$s is the StatusNet sitename. $msg = _('An application would like the ability ' . 'to %3$s your %4$s account data. ' . 'You should only give access to your %4$s account ' . From f8b2ec4b5338e8a50dcc89d552e839c42a5d7640 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Sun, 7 Nov 2010 22:33:23 +0100 Subject: [PATCH 026/220] Localisation updates from http://translatewiki.net. --- plugins/Comet/locale/br/LC_MESSAGES/Comet.po | 28 +++++ .../locale/ja/LC_MESSAGES/Memcached.po | 29 +++++ plugins/OpenX/locale/br/LC_MESSAGES/OpenX.po | 109 ++++++++++++++++++ .../locale/af/LC_MESSAGES/Realtime.po | 58 ++++++++++ .../locale/br/LC_MESSAGES/Realtime.po | 58 ++++++++++ .../locale/tr/LC_MESSAGES/Realtime.po | 58 ++++++++++ .../locale/br/LC_MESSAGES/TabFocus.po | 32 +++++ 7 files changed, 372 insertions(+) create mode 100644 plugins/Comet/locale/br/LC_MESSAGES/Comet.po create mode 100644 plugins/Memcached/locale/ja/LC_MESSAGES/Memcached.po create mode 100644 plugins/OpenX/locale/br/LC_MESSAGES/OpenX.po create mode 100644 plugins/Realtime/locale/af/LC_MESSAGES/Realtime.po create mode 100644 plugins/Realtime/locale/br/LC_MESSAGES/Realtime.po create mode 100644 plugins/Realtime/locale/tr/LC_MESSAGES/Realtime.po create mode 100644 plugins/TabFocus/locale/br/LC_MESSAGES/TabFocus.po diff --git a/plugins/Comet/locale/br/LC_MESSAGES/Comet.po b/plugins/Comet/locale/br/LC_MESSAGES/Comet.po new file mode 100644 index 0000000000..70093d6137 --- /dev/null +++ b/plugins/Comet/locale/br/LC_MESSAGES/Comet.po @@ -0,0 +1,28 @@ +# Translation of StatusNet - Comet to Breton (Brezhoneg) +# Expored from translatewiki.net +# +# Author: Y-M D +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Comet\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:28:04+0000\n" +"Language-Team: Breton \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-29 16:12:39+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: br\n" +"X-Message-Group: #out-statusnet-plugin-comet\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: CometPlugin.php:114 +msgid "Plugin to do \"real time\" updates using Comet/Bayeux." +msgstr "" +"Un astenn evit ober hizivadennoù \"war ar prim\" en ur implijout Comet/" +"Bayeux." diff --git a/plugins/Memcached/locale/ja/LC_MESSAGES/Memcached.po b/plugins/Memcached/locale/ja/LC_MESSAGES/Memcached.po new file mode 100644 index 0000000000..fea6080bc1 --- /dev/null +++ b/plugins/Memcached/locale/ja/LC_MESSAGES/Memcached.po @@ -0,0 +1,29 @@ +# Translation of StatusNet - Memcached to Japanese (日本語) +# Expored from translatewiki.net +# +# Author: Iwai.masaharu +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcached\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:28:31+0000\n" +"Language-Team: Japanese \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-29 16:12:53+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: ja\n" +"X-Message-Group: #out-statusnet-plugin-memcached\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: MemcachedPlugin.php:218 +msgid "" +"Use Memcached to cache query results." +msgstr "" +"クエリー結果のキャッシュに Memcached を" +"使う" diff --git a/plugins/OpenX/locale/br/LC_MESSAGES/OpenX.po b/plugins/OpenX/locale/br/LC_MESSAGES/OpenX.po new file mode 100644 index 0000000000..c0f138fa02 --- /dev/null +++ b/plugins/OpenX/locale/br/LC_MESSAGES/OpenX.po @@ -0,0 +1,109 @@ +# Translation of StatusNet - OpenX to Breton (Brezhoneg) +# Expored from translatewiki.net +# +# Author: Y-M D +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - OpenX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:28:45+0000\n" +"Language-Team: Breton \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-29 16:13:54+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: br\n" +"X-Message-Group: #out-statusnet-plugin-openx\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. TRANS: Menu item title/tooltip +#: OpenXPlugin.php:201 +msgid "OpenX configuration" +msgstr "Kefluniadur OpenX" + +#. TRANS: Menu item for site administration +#: OpenXPlugin.php:203 +msgid "OpenX" +msgstr "OpenX" + +#. TRANS: Plugin description. +#: OpenXPlugin.php:224 +msgid "Plugin for OpenX Ad Server." +msgstr "" + +#. TRANS: Page title for OpenX admin panel. +#: openxadminpanel.php:53 +msgctxt "TITLE" +msgid "OpenX" +msgstr "OpenX" + +#. TRANS: Instructions for OpenX admin panel. +#: openxadminpanel.php:64 +msgid "OpenX settings for this StatusNet site" +msgstr "Arventennoù OpenX evit al lec'hienn StatusNet-mañ." + +#. TRANS: Form label in OpenX admin panel. +#: openxadminpanel.php:167 +msgid "Ad script URL" +msgstr "" + +#. TRANS: Tooltip for form label in OpenX admin panel. +#: openxadminpanel.php:169 +msgid "Script URL" +msgstr "" + +#. TRANS: Form label in OpenX admin panel. Refers to advertisement format. +#: openxadminpanel.php:175 +msgid "Medium rectangle" +msgstr "" + +#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format. +#: openxadminpanel.php:177 +msgid "Medium rectangle zone" +msgstr "" + +#. TRANS: Form label in OpenX admin panel. Refers to advertisement format. +#: openxadminpanel.php:183 +msgid "Rectangle" +msgstr "Skouergornek" + +#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format. +#: openxadminpanel.php:185 +msgid "Rectangle zone" +msgstr "" + +#. TRANS: Form label in OpenX admin panel. Refers to advertisement format. +#: openxadminpanel.php:191 +msgid "Leaderboard" +msgstr "" + +#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format. +#: openxadminpanel.php:193 +msgid "Leaderboard zone" +msgstr "" + +#. TRANS: Form label in OpenX admin panel. Refers to advertisement format. +#: openxadminpanel.php:199 +msgid "Skyscraper" +msgstr "Giton a-serzh" + +#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format. +#: openxadminpanel.php:201 +msgid "Wide skyscraper zone" +msgstr "" + +#. TRANS: Submit button text in OpenX admin panel. +#: openxadminpanel.php:216 +msgctxt "BUTTON" +msgid "Save" +msgstr "Enrollañ" + +#. TRANS: Submit button title in OpenX admin panel. +#: openxadminpanel.php:220 +msgid "Save OpenX settings" +msgstr "" diff --git a/plugins/Realtime/locale/af/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/af/LC_MESSAGES/Realtime.po new file mode 100644 index 0000000000..81614a28e7 --- /dev/null +++ b/plugins/Realtime/locale/af/LC_MESSAGES/Realtime.po @@ -0,0 +1,58 @@ +# Translation of StatusNet - Realtime to Afrikaans (Afrikaans) +# Expored from translatewiki.net +# +# Author: Naudefj +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Realtime\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:28:59+0000\n" +"Language-Team: Afrikaans \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-11-05 00:29:27+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: af\n" +"X-Message-Group: #out-statusnet-plugin-realtime\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANS: Text label for realtime view "play" button, usually replaced by an icon. +#: RealtimePlugin.php:339 +msgctxt "BUTTON" +msgid "Play" +msgstr "Speel" + +#. TRANS: Tooltip for realtime view "play" button. +#: RealtimePlugin.php:341 +msgctxt "TOOLTIP" +msgid "Play" +msgstr "Speel" + +#. TRANS: Text label for realtime view "pause" button +#: RealtimePlugin.php:343 +msgctxt "BUTTON" +msgid "Pause" +msgstr "Wag" + +#. TRANS: Tooltip for realtime view "pause" button +#: RealtimePlugin.php:345 +msgctxt "TOOLTIP" +msgid "Pause" +msgstr "Wag" + +#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon. +#: RealtimePlugin.php:347 +msgctxt "BUTTON" +msgid "Pop up" +msgstr "Pop-up" + +#. TRANS: Tooltip for realtime view "popup" button. +#: RealtimePlugin.php:349 +msgctxt "TOOLTIP" +msgid "Pop up in a window" +msgstr "Wys in 'n venstertjie" diff --git a/plugins/Realtime/locale/br/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/br/LC_MESSAGES/Realtime.po new file mode 100644 index 0000000000..d30b98ec51 --- /dev/null +++ b/plugins/Realtime/locale/br/LC_MESSAGES/Realtime.po @@ -0,0 +1,58 @@ +# Translation of StatusNet - Realtime to Breton (Brezhoneg) +# Expored from translatewiki.net +# +# Author: Y-M D +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Realtime\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:28:59+0000\n" +"Language-Team: Breton \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-11-05 00:29:27+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: br\n" +"X-Message-Group: #out-statusnet-plugin-realtime\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. TRANS: Text label for realtime view "play" button, usually replaced by an icon. +#: RealtimePlugin.php:339 +msgctxt "BUTTON" +msgid "Play" +msgstr "Lenn" + +#. TRANS: Tooltip for realtime view "play" button. +#: RealtimePlugin.php:341 +msgctxt "TOOLTIP" +msgid "Play" +msgstr "Lenn" + +#. TRANS: Text label for realtime view "pause" button +#: RealtimePlugin.php:343 +msgctxt "BUTTON" +msgid "Pause" +msgstr "Ehan" + +#. TRANS: Tooltip for realtime view "pause" button +#: RealtimePlugin.php:345 +msgctxt "TOOLTIP" +msgid "Pause" +msgstr "Ehan" + +#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon. +#: RealtimePlugin.php:347 +msgctxt "BUTTON" +msgid "Pop up" +msgstr "" + +#. TRANS: Tooltip for realtime view "popup" button. +#: RealtimePlugin.php:349 +msgctxt "TOOLTIP" +msgid "Pop up in a window" +msgstr "" diff --git a/plugins/Realtime/locale/tr/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/tr/LC_MESSAGES/Realtime.po new file mode 100644 index 0000000000..fb235468a5 --- /dev/null +++ b/plugins/Realtime/locale/tr/LC_MESSAGES/Realtime.po @@ -0,0 +1,58 @@ +# Translation of StatusNet - Realtime to Turkish (Türkçe) +# Expored from translatewiki.net +# +# Author: Maidis +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Realtime\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:28:59+0000\n" +"Language-Team: Turkish \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-11-05 00:29:27+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: tr\n" +"X-Message-Group: #out-statusnet-plugin-realtime\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. TRANS: Text label for realtime view "play" button, usually replaced by an icon. +#: RealtimePlugin.php:339 +msgctxt "BUTTON" +msgid "Play" +msgstr "Oynat" + +#. TRANS: Tooltip for realtime view "play" button. +#: RealtimePlugin.php:341 +msgctxt "TOOLTIP" +msgid "Play" +msgstr "Oynat" + +#. TRANS: Text label for realtime view "pause" button +#: RealtimePlugin.php:343 +msgctxt "BUTTON" +msgid "Pause" +msgstr "Duraklat" + +#. TRANS: Tooltip for realtime view "pause" button +#: RealtimePlugin.php:345 +msgctxt "TOOLTIP" +msgid "Pause" +msgstr "Duraklat" + +#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon. +#: RealtimePlugin.php:347 +msgctxt "BUTTON" +msgid "Pop up" +msgstr "" + +#. TRANS: Tooltip for realtime view "popup" button. +#: RealtimePlugin.php:349 +msgctxt "TOOLTIP" +msgid "Pop up in a window" +msgstr "" diff --git a/plugins/TabFocus/locale/br/LC_MESSAGES/TabFocus.po b/plugins/TabFocus/locale/br/LC_MESSAGES/TabFocus.po new file mode 100644 index 0000000000..b9b454898d --- /dev/null +++ b/plugins/TabFocus/locale/br/LC_MESSAGES/TabFocus.po @@ -0,0 +1,32 @@ +# Translation of StatusNet - TabFocus to Breton (Brezhoneg) +# Expored from translatewiki.net +# +# Author: Y-M D +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - TabFocus\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-07 20:25+0000\n" +"PO-Revision-Date: 2010-11-07 20:29:11+0000\n" +"Language-Team: Breton \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-29 16:14:08+0000\n" +"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: br\n" +"X-Message-Group: #out-statusnet-plugin-tabfocus\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: TabFocusPlugin.php:54 +msgid "" +"TabFocus changes the notice form behavior so that, while in the text area, " +"pressing the tab key focuses the \"Send\" button, matching the behavior of " +"Twitter." +msgstr "" +"TabFocus a gemm emzalc'h ar furmskrid kemennoù evit ma vefe kaset ar fokus " +"war ar bouton \"Kas\" pa bouezer war a stokell taolennata adalek ar zonenn " +"testenn, ar pezh a glot gant emzalc'h Twitter." From e4076648d12a0246623d74c1bfc932e7ac09b8b8 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 8 Nov 2010 10:26:33 -0500 Subject: [PATCH 027/220] fix documentation for parameters to menu events --- EVENTS.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/EVENTS.txt b/EVENTS.txt index 8e730945a4..675ac5437e 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -118,16 +118,16 @@ EndShowHTML: Showing after the html element - $action: the current action StartPublicGroupNav: Showing the public group nav menu -- $action: the current action +- $menu: the menu widget; use $menu->action for output EndPublicGroupNav: At the end of the public group nav menu -- $action: the current action +- $menu: the menu widget; use $menu->action for output StartSubGroupNav: Showing the subscriptions group nav menu -- $action: the current action +- $menu: the menu widget; use $menu->action for output EndSubGroupNav: At the end of the subscriptions group nav menu -- $action: the current action +- $menu: the menu widget; use $menu->action for output StartInitializeRouter: Before the router instance has been initialized; good place to add routes - $m: the Net_URL_Mapper that has just been set up From 35931e3a0e3b78f222e8aa6eb02e71ca7a3b8410 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 8 Nov 2010 10:36:19 -0500 Subject: [PATCH 028/220] first steps for email summary --- plugins/EmailSummary/EmailSummaryPlugin.php | 119 +++++++++++++ plugins/EmailSummary/Email_summary_status.php | 167 ++++++++++++++++++ 2 files changed, 286 insertions(+) create mode 100644 plugins/EmailSummary/EmailSummaryPlugin.php create mode 100644 plugins/EmailSummary/Email_summary_status.php diff --git a/plugins/EmailSummary/EmailSummaryPlugin.php b/plugins/EmailSummary/EmailSummaryPlugin.php new file mode 100644 index 0000000000..dd72329f88 --- /dev/null +++ b/plugins/EmailSummary/EmailSummaryPlugin.php @@ -0,0 +1,119 @@ +. + * + * @category Sample + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Plugin for sending email summaries to users + * + * @category Email + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class EmailSummaryPlugin extends Plugin +{ + /** + * Database schema setup + * + * @return boolean hook value + */ + + function onCheckSchema() + { + $schema = Schema::get(); + + // For storing user-submitted flags on profiles + + $schema->ensureTable('email_summary_status', + array(new ColumnDef('user_id', 'integer', null, + false, 'PRI'), + new ColumnDef('send_summary', 'tinyint', null, + false, null, 1), + new ColumnDef('last_summary', 'datetime', null, + true), + new ColumnDef('created', 'datetime', null, + false), + new ColumnDef('modified', 'datetime', null, + false), + ) + ); + return true; + } + + /** + * Load related modules when needed + * + * @param string $cls Name of the class to be loaded + * + * @return boolean hook value; true means continue processing, false means stop. + * + */ + + function onAutoload($cls) + { + $dir = dirname(__FILE__); + + switch ($cls) + { + case 'Email_summary_status': + include_once $dir . '/'.$cls.'.php'; + return false; + default: + return true; + } + } + + /** + * Version info for this plugin + * + * @param array &$versions array of version data + * + * @return boolean hook value; true means continue processing, false means stop. + * + */ + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'EmailSummary', + 'version' => STATUSNET_VERSION, + 'author' => 'Evan Prodromou', + 'homepage' => 'http://status.net/wiki/Plugin:EmailSummary', + 'rawdescription' => + _m('Send an email summary of the inbox to users.')); + return true; + } +} diff --git a/plugins/EmailSummary/Email_summary_status.php b/plugins/EmailSummary/Email_summary_status.php new file mode 100644 index 0000000000..a0462fd04c --- /dev/null +++ b/plugins/EmailSummary/Email_summary_status.php @@ -0,0 +1,167 @@ + + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2010, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +require_once INSTALLDIR . '/classes/Memcached_DataObject.php'; + +/** + * Data class for email summaries + * + * Email summary information for users + * + * @category Action + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * @see DB_DataObject + */ + +class Email_summary_status extends Memcached_DataObject +{ + public $__table = 'email_summary_status'; // table name + public $user_id; // int(4) primary_key not_null + public $send_summary; // tinyint not_null + public $last_summary; // int(4) primary_key not_null + public $created; // int(4) primary_key not_null + public $modified; // int(4) primary_key not_null + + /** + * Get an instance by key + * + * @param string $k Key to use to lookup (usually 'user_id' for this class) + * @param mixed $v Value to lookup + * + * @return Email_summary_status object found, or null for no hits + * + */ + function staticGet($k, $v=null) + { + return Memcached_DataObject::staticGet('email_summary_status', $k, $v); + } + + /** + * return table definition for DB_DataObject + * + * DB_DataObject needs to know something about the table to manipulate + * instances. This method provides all the DB_DataObject needs to know. + * + * @return array array of column definitions + */ + + function table() + { + return array('user_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, + 'send_summary' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, + 'last_summary' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, + 'created' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, + 'modified' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME); + } + + /** + * return key definitions for DB_DataObject + * + * @return array list of key field names + */ + + function keys() + { + return array_keys($this->keyTypes()); + } + + /** + * return key definitions for Memcached_DataObject + * + * Our caching system uses the same key definitions, but uses a different + * method to get them. This key information is used to store and clear + * cached data, so be sure to list any key that will be used for static + * lookups. + * + * @return array associative array of key definitions, field name to type: + * 'K' for primary key: for compound keys, add an entry for each component; + * 'U' for unique keys: compound keys are not well supported here. + */ + function keyTypes() + { + return array('user_id' => 'K'); + } + + /** + * Magic formula for non-autoincrementing integer primary keys + * + * @return array magic three-false array that stops auto-incrementing. + */ + + function sequenceKey() + { + return array(false, false, false); + } + + /** + * Helper function + * + * @param integer $user_id ID of the user to get a count for + * + * @return int flag for whether to send this user a summary email + */ + + static function getSendSummary($user_id) + { + $ess = Email_summary_status::staticGet('user_id', $user_id); + + if (!empty($ess)) { + return $ess->send_summary; + } else { + return 1; + } + } + + /** + * Get email summary status for a user + * + * @param integer $user_id ID of the user to get a count for + * + * @return Email_summary_status instance for this user, with count already incremented. + */ + + static function getLastSummary($user_id) + { + $ess = Email_summary_status::staticGet('user_id', $user_id); + + if (!empty($ess)) { + return $ess->last_summary; + } else { + return 1; + } + } +} From 719b480eaaa3459497c008839606a96cc8f368e1 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 8 Nov 2010 13:08:59 -0500 Subject: [PATCH 029/220] use subclassing to change notice list output for single notice --- actions/shownotice.php | 26 ++++++++++++++++++++++++++ lib/noticelist.php | 7 ++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/actions/shownotice.php b/actions/shownotice.php index 7cc6c54243..b7e61a1375 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -331,6 +331,32 @@ class SingleNoticeItem extends DoFollowListItem $this->showEnd(); } + /** + * show the avatar of the notice's author + * + * We use the larger size for single notice page. + * + * @return void + */ + + function showAvatar() + { + $avatar_size = AVATAR_PROFILE_SIZE; + + $avatar = $this->profile->getAvatar($avatar_size); + + $this->out->element('img', array('src' => ($avatar) ? + $avatar->displayUrl() : + Avatar::defaultImage($avatar_size), + 'class' => 'avatar photo', + 'width' => $avatar_size, + 'height' => $avatar_size, + 'alt' => + ($this->profile->fullname) ? + $this->profile->fullname : + $this->profile->nickname)); + } + function showNoticeAttachments() { $al = new AttachmentList($this->notice, $this->out); $al->show(); diff --git a/lib/noticelist.php b/lib/noticelist.php index bdf2530b34..6f82c9269b 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -327,11 +327,8 @@ class NoticeListItem extends Widget function showAvatar() { - if ('shownotice' === $this->out->trimmed('action')) { - $avatar_size = AVATAR_PROFILE_SIZE; - } else { - $avatar_size = AVATAR_STREAM_SIZE; - } + $avatar_size = AVATAR_STREAM_SIZE; + $avatar = $this->profile->getAvatar($avatar_size); $this->out->element('img', array('src' => ($avatar) ? From 797059340e304a707dda5596f30651ffc727f3c3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 8 Nov 2010 13:10:09 -0500 Subject: [PATCH 030/220] Complete email summary sending system Added the necessary classes to send email summaries. First, added a script to run on a daily basis. Second, added a queue handler for sending email summaries for users, and another to queue summaries for all users on the site. Fixed up the email_summary_status table to store the last-sent notice id, rather than a datetime (since we don't support 'since' parameters anymore). Finally, made the plugin class load the right modules when needed. --- plugins/EmailSummary/EmailSummaryPlugin.php | 21 ++- plugins/EmailSummary/Email_summary_status.php | 18 +- plugins/EmailSummary/sendemailsummary.php | 47 +++++ .../EmailSummary/siteemailsummaryhandler.php | 96 ++++++++++ .../EmailSummary/useremailsummaryhandler.php | 172 ++++++++++++++++++ 5 files changed, 344 insertions(+), 10 deletions(-) create mode 100644 plugins/EmailSummary/sendemailsummary.php create mode 100644 plugins/EmailSummary/siteemailsummaryhandler.php create mode 100644 plugins/EmailSummary/useremailsummaryhandler.php diff --git a/plugins/EmailSummary/EmailSummaryPlugin.php b/plugins/EmailSummary/EmailSummaryPlugin.php index dd72329f88..03577bb4a7 100644 --- a/plugins/EmailSummary/EmailSummaryPlugin.php +++ b/plugins/EmailSummary/EmailSummaryPlugin.php @@ -63,7 +63,7 @@ class EmailSummaryPlugin extends Plugin false, 'PRI'), new ColumnDef('send_summary', 'tinyint', null, false, null, 1), - new ColumnDef('last_summary', 'datetime', null, + new ColumnDef('last_summary_id', 'integer', null, true), new ColumnDef('created', 'datetime', null, false), @@ -89,6 +89,10 @@ class EmailSummaryPlugin extends Plugin switch ($cls) { + case 'SiteEmailSummaryHandler': + case 'UserEmailSummaryHandler': + include_once $dir . '/'.strtolower($cls).'.php'; + return false; case 'Email_summary_status': include_once $dir . '/'.$cls.'.php'; return false; @@ -116,4 +120,19 @@ class EmailSummaryPlugin extends Plugin _m('Send an email summary of the inbox to users.')); return true; } + + /** + * Register our queue handlers + * + * @param QueueManager $qm Current queue manager + * + * @return boolean hook value + */ + + function onEndInitializeQueueManager($qm) + { + $qm->connect('sitesum', 'SiteEmailSummaryHandler'); + $qm->connect('usersum', 'UserEmailSummaryHandler'); + return true; + } } diff --git a/plugins/EmailSummary/Email_summary_status.php b/plugins/EmailSummary/Email_summary_status.php index a0462fd04c..5b5b231e34 100644 --- a/plugins/EmailSummary/Email_summary_status.php +++ b/plugins/EmailSummary/Email_summary_status.php @@ -52,9 +52,9 @@ class Email_summary_status extends Memcached_DataObject public $__table = 'email_summary_status'; // table name public $user_id; // int(4) primary_key not_null public $send_summary; // tinyint not_null - public $last_summary; // int(4) primary_key not_null - public $created; // int(4) primary_key not_null - public $modified; // int(4) primary_key not_null + public $last_summary_id; // int(4) null + public $created; // datetime not_null + public $modified; // datetime not_null /** * Get an instance by key @@ -83,9 +83,9 @@ class Email_summary_status extends Memcached_DataObject { return array('user_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, 'send_summary' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, - 'last_summary' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, - 'created' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, - 'modified' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME); + 'last_summary_id' => DB_DATAOBJECT_INT, + 'created' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL, + 'modified' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL); } /** @@ -154,14 +154,14 @@ class Email_summary_status extends Memcached_DataObject * @return Email_summary_status instance for this user, with count already incremented. */ - static function getLastSummary($user_id) + static function getLastSummaryID($user_id) { $ess = Email_summary_status::staticGet('user_id', $user_id); if (!empty($ess)) { - return $ess->last_summary; + return $ess->last_summary_id; } else { - return 1; + return null; } } } diff --git a/plugins/EmailSummary/sendemailsummary.php b/plugins/EmailSummary/sendemailsummary.php new file mode 100644 index 0000000000..37bfdcfbd1 --- /dev/null +++ b/plugins/EmailSummary/sendemailsummary.php @@ -0,0 +1,47 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..')); + +$shortoptions = 'i:n:a'; +$longoptions = array('id=', 'nickname=', 'all'); + +$helptext = <<enqueue($user->id, 'usersum'); +} catch (NoUserArgumentException $nuae) { + $qm->enqueue(null, 'sitesum'); +} diff --git a/plugins/EmailSummary/siteemailsummaryhandler.php b/plugins/EmailSummary/siteemailsummaryhandler.php new file mode 100644 index 0000000000..595c3267a1 --- /dev/null +++ b/plugins/EmailSummary/siteemailsummaryhandler.php @@ -0,0 +1,96 @@ +. + * + * @category Sample + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * + * Handler for queue items of type 'sitesum', sends email summaries + * to all users on the site. + * + * @category Email + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class SiteEmailSummaryHandler extends QueueHandler +{ + + /** + * Return transport keyword which identifies items this queue handler + * services; must be defined for all subclasses. + * + * Must be 8 characters or less to fit in the queue_item database. + * ex "email", "jabber", "sms", "irc", ... + * + * @return string + */ + + function transport() + { + return 'sitesum'; + } + + /** + * Handle the site + * + * @param mixed $object + * @return boolean true on success, false on failure + */ + + function handle($object) + { + $qm = QueueManager::get(); + + try { + // Enqueue a summary for all users + + $user = new User(); + $user->find(); + + while ($user->fetch()) { + try { + $qm->enqueue($user->id, 'usersum'); + } catch (Exception $e) { + common_log(LOG_WARNING, $e->getMessage()); + continue; + } + } + } catch (Exception $e) { + common_log(LOG_WARNING, $e->getMessage()); + } + + return true; + } +} + diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php new file mode 100644 index 0000000000..f3151bd476 --- /dev/null +++ b/plugins/EmailSummary/useremailsummaryhandler.php @@ -0,0 +1,172 @@ +. + * + * @category Sample + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Handler for queue items of type 'usersum', sends an email summaries + * to a particular user. + * + * @category Email + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class UserEmailSummaryHandler extends QueueHandler +{ + // Maximum number of notices to include by default. This is probably too much. + + const MAX_NOTICES = 200; + + /** + * Return transport keyword which identifies items this queue handler + * services; must be defined for all subclasses. + * + * Must be 8 characters or less to fit in the queue_item database. + * ex "email", "jabber", "sms", "irc", ... + * + * @return string + */ + + function transport() + { + return 'sitesum'; + } + + /** + * Send a summary email to the user + * + * @param mixed $object + * @return boolean true on success, false on failure + */ + + function handle($user_id) + { + // Skip if they've asked not to get summaries + + $ess = Email_summary_status::staticGet('user_id', $user_id); + + if (!empty($ess) && !$ess->send_summary) { + common_log(LOG_INFO, sprintf('Not sending email summary for user %s by request.', $user_id)); + return true; + } + + $since_id = null; + + if (!empty($ess)) { + $since_id = $ess->last_summary_id; + } + + $user = User::staticGet('id', $user_id); + + if (empty($user)) { + common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no such user.', $user_id)); + return true; + } + + if (empty($user->email)) { + common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no email address.', $user_id)); + return true; + } + + $profile = $user->getProfile(); + + if (empty($profile)) { + common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no profile.', $user_id)); + return true; + } + + $notice = $user->ownFriendsTimeline(0, self::MAX_NOTICES, $since_id); + + if (empty($notice) || $notice->N == 0) { + common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no notices.', $user_id)); + return true; + } + + // XXX: This is risky fingerpoken in der objektvars, but I didn't feel like + // figuring out a better way. -ESP + + $new_top = null; + + if ($notice instanceof ArrayWrapper) { + $new_top = $notice->_items[0]->id; + } + + $out = new XMLStringer(); + + $out->raw(sprintf(_('

Recent updates from %1s for %2s:

'), + common_config('site', 'name'), + $profile->getBestName())); + + $nl = new NoticeList($notice, $out); + + // Outputs to the string + + $nl->show(); + + $out->raw(sprintf(_('

change your email settings for %2s

'), + common_local_url('emailsettings'), + common_config('site', 'name'))); + + $body = $out->getString(); + + // FIXME: do something for people who don't like HTML email + + mail_to_user($user, _('Updates from your network'), $body, + array('Content-Type', 'text/html; charset=UTF-8')); + + if (empty($ess)) { + + $ess = new Email_summary_status(); + + $ess->user_id = $user_id; + $ess->created = common_sql_now(); + $ess->last_summary_id = $new_top; + $ess->modified = common_sql_now(); + + $ess->insert(); + + } else { + + $orig = clone($ess); + + $ess->last_summary_id = $new_top; + $ess->modified = common_sql_now(); + + $ess->update(); + } + + return true; + } +} + From 883f7a6c0b1464f6723e51bf99d06641a612f968 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 8 Nov 2010 13:27:54 -0800 Subject: [PATCH 031/220] Avoid marking files as attachments that are not locally uploaded, unless they're really oembedable. HTML-y things now excluded properly. --- classes/File.php | 3 +++ lib/util.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/classes/File.php b/classes/File.php index 16e00024a5..d71403e649 100644 --- a/classes/File.php +++ b/classes/File.php @@ -352,6 +352,9 @@ class File extends Memcached_DataObject $mimetype = substr($mimetype,0,$semicolon); } if(in_array($mimetype,$notEnclosureMimeTypes)){ + // Never treat HTML as an enclosure type! + return false; + } else { $oembed = File_oembed::staticGet('file_id',$this->id); if($oembed){ $mimetype = strtolower($oembed->mimetype); diff --git a/lib/util.php b/lib/util.php index 8f2a9f1738..e6b62f750f 100644 --- a/lib/util.php +++ b/lib/util.php @@ -877,7 +877,7 @@ function common_linkify($url) { } if (!empty($f)) { - if ($f->getEnclosure() || File_oembed::staticGet('file_id',$f->id)) { + if ($f->getEnclosure()) { $is_attachment = true; $attachment_id = $f->id; From 32321de5e048ee50417a6d91b651180c28a801b1 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 8 Nov 2010 14:20:23 -0800 Subject: [PATCH 032/220] Some initial testing w/ thumb gen --- js/util.js | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/js/util.js b/js/util.js index 1be3f30535..a4eb0fc284 100644 --- a/js/util.js +++ b/js/util.js @@ -428,30 +428,15 @@ var SN = { // StatusNet }).attr('title', SN.msg('showmore_tooltip')); } else { - $.fn.jOverlay.options = { - method : 'GET', - data : '', - url : '', - color : '#000', - opacity : '0.6', - zIndex : 9999, - center : false, - imgLoading : $('address .url')[0].href+'theme/base/images/illustrations/illu_progress_loading-01.gif', - bgClickToClose : true, - success : function() { - $('#jOverlayContent').append(''); - $('#jOverlayContent button').click($.closeOverlay); - }, - timeout : 0, - autoHide : true, - css : {'max-width':'542px', 'top':'5%', 'left':'32.5%'} - }; + //imgLoading : $('address .url')[0].href+'theme/base/images/illustrations/illu_progress_loading-01.gif', - notice.find('a.attachment').click(function() { + notice.find('a.attachment').each(function() { var attachId = ($(this).attr('id').substring('attachment'.length + 1)); if (attachId) { - $().jOverlay({url: $('address .url')[0].href+'attachment/' + attachId + '/ajax'}); - return false; + var thumbUrl = $('address .url')[0].href+'attachment/' + attachId + '/thumb'; + var thumb = $('
Thumb:
'); + thumb.find('img').attr('src', thumbUrl).last(); + notice.append(thumb); } }); From 0a56523461ec2b7abce652d18129c043eddb6394 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 8 Nov 2010 17:22:16 -0500 Subject: [PATCH 033/220] Fixup headers for HTML email --- plugins/EmailSummary/useremailsummaryhandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php index f3151bd476..4bbbb861c0 100644 --- a/plugins/EmailSummary/useremailsummaryhandler.php +++ b/plugins/EmailSummary/useremailsummaryhandler.php @@ -143,7 +143,7 @@ class UserEmailSummaryHandler extends QueueHandler // FIXME: do something for people who don't like HTML email mail_to_user($user, _('Updates from your network'), $body, - array('Content-Type', 'text/html; charset=UTF-8')); + array('Content-Type' => 'text/html; charset=UTF-8')); if (empty($ess)) { From 37407d8c7751b1966f41484678e7695157a460c3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 8 Nov 2010 17:31:21 -0500 Subject: [PATCH 034/220] stylesheet for outgoing email --- .../EmailSummary/useremailsummaryhandler.php | 292 ++++++++++++++++++ 1 file changed, 292 insertions(+) diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php index 4bbbb861c0..9ef56a20d4 100644 --- a/plugins/EmailSummary/useremailsummaryhandler.php +++ b/plugins/EmailSummary/useremailsummaryhandler.php @@ -124,6 +124,8 @@ class UserEmailSummaryHandler extends QueueHandler $out = new XMLStringer(); + $out->raw(''); + $out->raw(sprintf(_('

Recent updates from %1s for %2s:

'), common_config('site', 'name'), $profile->getBestName())); @@ -168,5 +170,295 @@ class UserEmailSummaryHandler extends QueueHandler return true; } + + function stylesheet() + { + $ss = << Date: Mon, 8 Nov 2010 18:14:13 -0500 Subject: [PATCH 035/220] change to a table for HTML output --- .../EmailSummary/useremailsummaryhandler.php | 350 +++--------------- 1 file changed, 54 insertions(+), 296 deletions(-) diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php index 9ef56a20d4..1ac1eaedbe 100644 --- a/plugins/EmailSummary/useremailsummaryhandler.php +++ b/plugins/EmailSummary/useremailsummaryhandler.php @@ -124,17 +124,66 @@ class UserEmailSummaryHandler extends QueueHandler $out = new XMLStringer(); - $out->raw(''); - $out->raw(sprintf(_('

Recent updates from %1s for %2s:

'), common_config('site', 'name'), $profile->getBestName())); - $nl = new NoticeList($notice, $out); - // Outputs to the string + $out->elementStart('table', array('width' => '100%', 'style' => 'border: none')); - $nl->show(); + while ($notice->fetch()) { + + $profile = Profile::staticGet('id', $notice->profile_id); + + if (empty($profile)) { + continue; + } + + $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); + + $out->elementStart('tr'); + $out->elementStart('td'); + $out->element('img', array('src' => ($avatar) ? + $avatar->displayUrl() : + Avatar::defaultImage($avatar_size), + 'class' => 'avatar photo', + 'width' => $avatar_size, + 'height' => $avatar_size, + 'alt' => $profile->getBestName())); + $out->elementEnd('td'); + $out->elementStart('td'); + $out->element('a', array('href' => $profile->profileurl), + $profile->nickname); + $out->text(' '); + $out->raw($notice->rendered); + $out->element('br'); // yeah, you know it. I just wrote a
in the middle of my table layout. + $noticeurl = $notice->bestUrl(); + // above should always return an URL + assert(!empty($noticeurl)); + $out->elementStart('a', array('rel' => 'bookmark', + 'class' => 'timestamp', + 'href' => $noticeurl)); + $dt = common_date_iso8601($notice->created); + $out->element('abbr', array('class' => 'published', + 'title' => $dt), + common_date_string($notice->created)); + $out->elementEnd('a'); + if ($notice->hasConversation()) { + $conv = Conversation::staticGet('id', $notice->conversation); + $convurl = $conv->uri; + if (!empty($convurl)) { + $out->text(' '); + $out->element('a', + array('href' => $convurl.'#notice-'.$notice->id, + 'class' => 'response'), + _('in context')); + } + } + $out->elementEnd('td'); + $out->elementEnd('tr'); + } + + $out->elementEnd('table'); $out->raw(sprintf(_('

change your email settings for %2s

'), common_local_url('emailsettings'), @@ -170,295 +219,4 @@ class UserEmailSummaryHandler extends QueueHandler return true; } - - function stylesheet() - { - $ss = << Date: Mon, 8 Nov 2010 15:32:41 -0800 Subject: [PATCH 036/220] doomy doom doom --- actions/shownotice.php | 5 --- js/util.js | 8 +++-- lib/attachmentlist.php | 64 +++++++++++++++++++++++++++----------- lib/noticelist.php | 6 ++++ theme/base/css/display.css | 20 +++++++++--- 5 files changed, 73 insertions(+), 30 deletions(-) diff --git a/actions/shownotice.php b/actions/shownotice.php index b7e61a1375..7a11787b66 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -356,9 +356,4 @@ class SingleNoticeItem extends DoFollowListItem $this->profile->fullname : $this->profile->nickname)); } - - function showNoticeAttachments() { - $al = new AttachmentList($this->notice, $this->out); - $al->show(); - } } diff --git a/js/util.js b/js/util.js index a4eb0fc284..15fb163103 100644 --- a/js/util.js +++ b/js/util.js @@ -431,16 +431,19 @@ var SN = { // StatusNet //imgLoading : $('address .url')[0].href+'theme/base/images/illustrations/illu_progress_loading-01.gif', notice.find('a.attachment').each(function() { + /* var attachId = ($(this).attr('id').substring('attachment'.length + 1)); if (attachId) { var thumbUrl = $('address .url')[0].href+'attachment/' + attachId + '/thumb'; - var thumb = $('
Thumb:
'); + var thumb = $('
Thumb:
'); thumb.find('img').attr('src', thumbUrl).last(); - notice.append(thumb); + notice.find('.entry-title .entry-content').append(thumb); } + */ }); if ($('#shownotice').length == 0) { + /* var t; notice.find('a.thumbnail').hover( function() { @@ -465,6 +468,7 @@ var SN = { // StatusNet $(this).closest('.entry-title').removeClass('ov'); } ); + */ } } }, diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php index f6b09fb491..f29d32ada3 100644 --- a/lib/attachmentlist.php +++ b/lib/attachmentlist.php @@ -181,9 +181,11 @@ class AttachmentListItem extends Widget */ function show() { - $this->showStart(); - $this->showNoticeAttachment(); - $this->showEnd(); + if ($this->attachment->isEnclosure()) { + $this->showStart(); + $this->showNoticeAttachment(); + $this->showEnd(); + } } function linkAttr() { @@ -203,9 +205,44 @@ class AttachmentListItem extends Widget } function showRepresentation() { + $thumb = $this->getThumbInfo(); + if ($thumb) { + $thumb = $this->sizeThumb($thumb); + $this->out->element('img', array('alt' => '', 'src' => $thumb->url, 'width' => $thumb->width, 'height' => $thumb->height)); + } + } + + function getThumbInfo() + { $thumbnail = File_thumbnail::staticGet('file_id', $this->attachment->id); - if (!empty($thumbnail)) { - $this->out->element('img', array('alt' => '', 'src' => $thumbnail->url, 'width' => $thumbnail->width, 'height' => $thumbnail->height)); + if ($thumbnail) { + return $thumbnail; + } else { + switch ($this->attachment->mimetype) { + case 'image/gif': + case 'image/png': + case 'image/jpg': + case 'image/jpeg': + $thumb = (object)array(); + $thumb->url = $this->attachment->url; + $thumb->width = 100; + $thumb->height = 75; // @fixme + return $thumb; + } + } + return false; + } + + function sizeThumb($thumbnail) { + $maxWidth = 100; + $maxHeight = 75; + if ($thumbnail->width > $maxWidth) { + $thumb = clone($thumbnail); + $thumb->width = $maxWidth; + $thumb->height = intval($thumbnail->height * $maxWidth / $thumbnail->width); + return $thumb; + } else { + return $thumbnail; } } @@ -234,6 +271,9 @@ class AttachmentListItem extends Widget } } +/** + * used for one-off attachment action + */ class Attachment extends AttachmentListItem { function showLink() { @@ -414,18 +454,4 @@ class Attachment extends AttachmentListItem return $scrubbed; } - - function showFallback() - { - // If we don't know how to display an attachment inline, we probably - // shouldn't have gotten to this point. - // - // But, here we are... displaying details on a file or remote URL - // either on the main view or in an ajax-loaded lightbox. As a lesser - // of several evils, we'll try redirecting to the actual target via - // client-side JS. - - common_log(LOG_ERR, "Empty or unknown type for file id {$this->attachment->id}; falling back to client-side redirect."); - $this->out->raw(''); - } } diff --git a/lib/noticelist.php b/lib/noticelist.php index 6f82c9269b..fb5db2374c 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -208,6 +208,7 @@ class NoticeListItem extends Widget $this->showStart(); if (Event::handle('StartShowNoticeItem', array($this))) { $this->showNotice(); + $this->showNoticeAttachments(); $this->showNoticeInfo(); $this->showNoticeOptions(); Event::handle('EndShowNoticeItem', array($this)); @@ -383,6 +384,11 @@ class NoticeListItem extends Widget $this->out->elementEnd('p'); } + function showNoticeAttachments() { + $al = new AttachmentList($this->notice, $this->out); + $al->show(); + } + /** * show the link to the main page for the notice * diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 7ac66095a8..29f7d0ae0d 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -1150,7 +1150,8 @@ border-radius:4px; -webkit-border-radius:4px; } -.notice div.entry-content { +.notice div.entry-content, +.notice dl.entry-content { clear:left; float:left; font-size:0.95em; @@ -1325,6 +1326,7 @@ margin-left:4px; .notice .attachment.more { padding-left:0; } +/* .notice .attachment img { position:absolute; top:18px; @@ -1334,20 +1336,30 @@ z-index:99; #shownotice .notice .attachment img { position:static; } +*/ -#attachments { + +/* Small inline attachment list */ +#attachments ol li { + list-style-type: none; +} +#attachments dt { + display: none; +} + +#shownotice #attachments { clear:both; float:left; width:100%; margin-top:18px; } -#attachments dt { +#shownotice #attachments dt { font-weight:bold; font-size:1.3em; margin-bottom:4px; } -#attachments ol li { +#shownotice #attachments ol li { margin-bottom:18px; list-style-type:decimal; float:left; From a2994e3aa232106f39a6c36c9176608467b8822e Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 8 Nov 2010 15:50:06 -0800 Subject: [PATCH 037/220] Testing... using photo info for temp thumbnails --- classes/File.php | 7 +++---- lib/attachmentlist.php | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/classes/File.php b/classes/File.php index d71403e649..e3b922d13b 100644 --- a/classes/File.php +++ b/classes/File.php @@ -352,11 +352,10 @@ class File extends Memcached_DataObject $mimetype = substr($mimetype,0,$semicolon); } if(in_array($mimetype,$notEnclosureMimeTypes)){ - // Never treat HTML as an enclosure type! - return false; - } else { + // Never treat generic HTML links as an enclosure type! + // But if we have oEmbed info, we'll consider it golden. $oembed = File_oembed::staticGet('file_id',$this->id); - if($oembed){ + if($oembed && in_array($oembed->type, array('photo', 'video'))){ $mimetype = strtolower($oembed->mimetype); $semicolon = strpos($mimetype,';'); if($semicolon){ diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php index f29d32ada3..8e6ad038a3 100644 --- a/lib/attachmentlist.php +++ b/lib/attachmentlist.php @@ -212,19 +212,30 @@ class AttachmentListItem extends Widget } } + /** + * Pull a thumbnail image reference for the given file. + * In order we check: + * 1) file_thumbnail table (thumbnails found via oEmbed) + * 2) image URL from direct dereference or oEmbed 'photo' type URL + * 3) ??? + * + * @return mixed object with (url, width, height) properties, or false + */ function getThumbInfo() { $thumbnail = File_thumbnail::staticGet('file_id', $this->attachment->id); if ($thumbnail) { return $thumbnail; - } else { - switch ($this->attachment->mimetype) { + } + $enc = $this->attachment->getEnclosure(); + if ($enc) { + switch ($enc->mimetype) { case 'image/gif': case 'image/png': case 'image/jpg': case 'image/jpeg': $thumb = (object)array(); - $thumb->url = $this->attachment->url; + $thumb->url = $enc->url; $thumb->width = 100; $thumb->height = 75; // @fixme return $thumb; From dc497ed090d94561db195983a4346a2f66503422 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 8 Nov 2010 16:51:31 -0800 Subject: [PATCH 038/220] Break out ImageFile->resizeTo() from ImageFile->resize(); allows resizing images to non-square sizes and to arbitrary destinations. Will be used for creating thumbnails as well as the originala use of cropping/sizing avatars. --- lib/imagefile.php | 103 +++++++++++++++++++++++++++++++--------------- 1 file changed, 69 insertions(+), 34 deletions(-) diff --git a/lib/imagefile.php b/lib/imagefile.php index b70fd248e1..159deead61 100644 --- a/lib/imagefile.php +++ b/lib/imagefile.php @@ -115,10 +115,46 @@ class ImageFile return new ImageFile(null, $_FILES[$param]['tmp_name']); } + /** + * Compat interface for old code generating avatar thumbnails... + * Saves the scaled file directly into the avatar area. + * + * @param int $size target width & height -- must be square + * @param int $x (default 0) upper-left corner to crop from + * @param int $y (default 0) upper-left corner to crop from + * @param int $w (default full) width of image area to crop + * @param int $h (default full) height of image area to crop + * @return string filename + */ function resize($size, $x = 0, $y = 0, $w = null, $h = null) + { + $targetType = $this->preferredType($this->type); + $outname = Avatar::filename($this->id, + image_type_to_extension($targetType), + $size, + common_timestamp()); + $outpath = Avatar::path($outname); + $this->resizeTo($outpath, $size, $size, $x, $y, $w, $h); + return $outname; + } + + /** + * Create and save a thumbnail image. + * + * @param string $outpath + * @param int $width target width + * @param int $height target height + * @param int $x (default 0) upper-left corner to crop from + * @param int $y (default 0) upper-left corner to crop from + * @param int $w (default full) width of image area to crop + * @param int $h (default full) height of image area to crop + * @return string full local filesystem filename + */ + function resizeTo($outpath, $width, $height, $x=0, $y=0, $w=null, $h=null) { $w = ($w === null) ? $this->width:$w; $h = ($h === null) ? $this->height:$h; + $targetType = $this->preferredType($this->type); if (!file_exists($this->filepath)) { throw new Exception(_('Lost our file.')); @@ -126,20 +162,16 @@ class ImageFile } // Don't crop/scale if it isn't necessary - if ($size === $this->width - && $size === $this->height + if ($width === $this->width + && $height === $this->height && $x === 0 && $y === 0 && $w === $this->width - && $h === $this->height) { + && $h === $this->height + && $this->type == $targetType) { - $outname = Avatar::filename($this->id, - image_type_to_extension($this->type), - $size, - common_timestamp()); - $outpath = Avatar::path($outname); @copy($this->filepath, $outpath); - return $outname; + return $outpath; } switch ($this->type) { @@ -166,7 +198,7 @@ class ImageFile return; } - $image_dest = imagecreatetruecolor($size, $size); + $image_dest = imagecreatetruecolor($width, $height); if ($this->type == IMAGETYPE_GIF || $this->type == IMAGETYPE_PNG || $this->type == IMAGETYPE_BMP) { @@ -189,30 +221,9 @@ class ImageFile } } - imagecopyresampled($image_dest, $image_src, 0, 0, $x, $y, $size, $size, $w, $h); + imagecopyresampled($image_dest, $image_src, 0, 0, $x, $y, $width, $height, $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; - } - - $outname = Avatar::filename($this->id, - image_type_to_extension($this->type), - $size, - common_timestamp()); - - $outpath = Avatar::path($outname); - - switch ($this->type) { + switch ($targetType) { case IMAGETYPE_GIF: imagegif($image_dest, $outpath); break; @@ -230,7 +241,31 @@ class ImageFile imagedestroy($image_src); imagedestroy($image_dest); - return $outname; + return $outpath; + } + + /** + * Several obscure file types should be normalized to PNG on resize. + * + * @param int $type + * @return int + */ + function preferredType($type) + { + if($type == IMAGETYPE_BMP) { + //we don't want to save BMP... it's an inefficient, rare, antiquated format + //save png instead + return IMAGETYPE_PNG; + } else if($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 + return IMAGETYPE_PNG; + } else if($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 + return IMAGETYPE_PNG; + } + return $type; } function unlink() From cd236efe127c3f696b8a78c5ff66a08b24230a4e Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 9 Nov 2010 00:56:53 +0000 Subject: [PATCH 039/220] - Still send notices to Facebook from existing Facebook app users - Turns out we don't need the old REST lib to use the old REST API (removed) --- plugins/FacebookSSO/FacebookSSOPlugin.php | 35 +- .../actions/facebookadminpanel.php | 4 +- .../extlib/facebookapi_php5_restlib.php | 3702 ----------------- .../extlib/jsonwrapper/JSON/JSON.php | 806 ---- .../extlib/jsonwrapper/JSON/LICENSE | 21 - .../extlib/jsonwrapper/jsonwrapper.php | 6 - .../extlib/jsonwrapper/jsonwrapper_inner.php | 23 - plugins/FacebookSSO/lib/facebookclient.php | 279 +- .../FacebookSSO/lib/facebookqueuehandler.php | 4 +- 9 files changed, 210 insertions(+), 4670 deletions(-) delete mode 100644 plugins/FacebookSSO/extlib/facebookapi_php5_restlib.php delete mode 100644 plugins/FacebookSSO/extlib/jsonwrapper/JSON/JSON.php delete mode 100644 plugins/FacebookSSO/extlib/jsonwrapper/JSON/LICENSE delete mode 100644 plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper.php delete mode 100644 plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper_inner.php diff --git a/plugins/FacebookSSO/FacebookSSOPlugin.php b/plugins/FacebookSSO/FacebookSSOPlugin.php index a726b2facc..a094f2957f 100644 --- a/plugins/FacebookSSO/FacebookSSOPlugin.php +++ b/plugins/FacebookSSO/FacebookSSOPlugin.php @@ -131,7 +131,7 @@ class FacebookSSOPlugin extends Plugin include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; case 'Facebookclient': - case 'Facebookqueuehandler': + case 'FacebookQueueHandler': include_once $dir . '/lib/' . strtolower($cls) . '.php'; return false; default: @@ -146,7 +146,7 @@ class FacebookSSOPlugin extends Plugin function needsScripts($action) { static $needy = array( - //'FacebookloginAction', + 'FacebookloginAction', 'FacebookfinishloginAction', 'FacebookadminpanelAction', 'FacebooksettingsAction' @@ -401,6 +401,37 @@ ENDOFSCRIPT; return true; } + /** + * Add a Facebook queue item for each notice + * + * @param Notice $notice the notice + * @param array &$transports the list of transports (queues) + * + * @return boolean hook return + */ + function onStartEnqueueNotice($notice, &$transports) + { + if (self::hasApplication() && $notice->isLocal()) { + array_push($transports, 'facebook'); + } + return true; + } + + /** + * Register Facebook notice queue handler + * + * @param QueueManager $manager + * + * @return boolean hook return + */ + function onEndInitializeQueueManager($manager) + { + if (self::hasApplication()) { + $manager->connect('facebook', 'FacebookQueueHandler'); + } + return true; + } + /* * Add version info for this plugin * diff --git a/plugins/FacebookSSO/actions/facebookadminpanel.php b/plugins/FacebookSSO/actions/facebookadminpanel.php index b76b035cd0..61b5441848 100644 --- a/plugins/FacebookSSO/actions/facebookadminpanel.php +++ b/plugins/FacebookSSO/actions/facebookadminpanel.php @@ -82,7 +82,7 @@ class FacebookadminpanelAction extends AdminPanelAction function saveSettings() { static $settings = array( - 'facebook' => array('appid', 'secret'), + 'facebook' => array('appid', 'secret'), ); $values = array(); @@ -116,7 +116,7 @@ class FacebookadminpanelAction extends AdminPanelAction function validate(&$values) { - // appId and secret (can't be too long) + // appId, key and secret (can't be too long) if (mb_strlen($values['facebook']['appid']) > 255) { $this->clientError( diff --git a/plugins/FacebookSSO/extlib/facebookapi_php5_restlib.php b/plugins/FacebookSSO/extlib/facebookapi_php5_restlib.php deleted file mode 100644 index e249a326b2..0000000000 --- a/plugins/FacebookSSO/extlib/facebookapi_php5_restlib.php +++ /dev/null @@ -1,3702 +0,0 @@ -secret = $secret; - $this->session_key = $session_key; - $this->api_key = $api_key; - $this->batch_mode = FacebookRestClient::BATCH_MODE_DEFAULT; - $this->last_call_id = 0; - $this->call_as_apikey = ''; - $this->use_curl_if_available = true; - $this->server_addr = - Facebook::get_facebook_url('api') . '/restserver.php'; - $this->photo_server_addr = - Facebook::get_facebook_url('api-photo') . '/restserver.php'; - - if (!empty($GLOBALS['facebook_config']['debug'])) { - $this->cur_id = 0; - ?> - -user = $uid; - } - - - /** - * Switch to use the session secret instead of the app secret, - * for desktop and unsecured environment - */ - public function use_session_secret($session_secret) { - $this->secret = $session_secret; - $this->using_session_secret = true; - } - - /** - * Normally, if the cURL library/PHP extension is available, it is used for - * HTTP transactions. This allows that behavior to be overridden, falling - * back to a vanilla-PHP implementation even if cURL is installed. - * - * @param $use_curl_if_available bool whether or not to use cURL if available - */ - public function set_use_curl_if_available($use_curl_if_available) { - $this->use_curl_if_available = $use_curl_if_available; - } - - /** - * Start a batch operation. - */ - public function begin_batch() { - if ($this->pending_batch()) { - $code = FacebookAPIErrorCodes::API_EC_BATCH_ALREADY_STARTED; - $description = FacebookAPIErrorCodes::$api_error_descriptions[$code]; - throw new FacebookRestClientException($description, $code); - } - - $this->batch_queue = array(); - $this->pending_batch = true; - } - - /* - * End current batch operation - */ - public function end_batch() { - if (!$this->pending_batch()) { - $code = FacebookAPIErrorCodes::API_EC_BATCH_NOT_STARTED; - $description = FacebookAPIErrorCodes::$api_error_descriptions[$code]; - throw new FacebookRestClientException($description, $code); - } - - $this->pending_batch = false; - - $this->execute_server_side_batch(); - $this->batch_queue = null; - } - - /** - * are we currently queueing up calls for a batch? - */ - public function pending_batch() { - return $this->pending_batch; - } - - private function execute_server_side_batch() { - $item_count = count($this->batch_queue); - $method_feed = array(); - foreach ($this->batch_queue as $batch_item) { - $method = $batch_item['m']; - $params = $batch_item['p']; - list($get, $post) = $this->finalize_params($method, $params); - $method_feed[] = $this->create_url_string(array_merge($post, $get)); - } - - $serial_only = - ($this->batch_mode == FacebookRestClient::BATCH_MODE_SERIAL_ONLY); - - $params = array('method_feed' => json_encode($method_feed), - 'serial_only' => $serial_only, - 'format' => $this->format); - $result = $this->call_method('facebook.batch.run', $params); - - if (is_array($result) && isset($result['error_code'])) { - throw new FacebookRestClientException($result['error_msg'], - $result['error_code']); - } - - for ($i = 0; $i < $item_count; $i++) { - $batch_item = $this->batch_queue[$i]; - $batch_item['p']['format'] = $this->format; - $batch_item_result = $this->convert_result($result[$i], - $batch_item['m'], - $batch_item['p']); - - if (is_array($batch_item_result) && - isset($batch_item_result['error_code'])) { - throw new FacebookRestClientException($batch_item_result['error_msg'], - $batch_item_result['error_code']); - } - $batch_item['r'] = $batch_item_result; - } - } - - public function begin_permissions_mode($permissions_apikey) { - $this->call_as_apikey = $permissions_apikey; - } - - public function end_permissions_mode() { - $this->call_as_apikey = ''; - } - - - /* - * If a page is loaded via HTTPS, then all images and static - * resources need to be printed with HTTPS urls to avoid - * mixed content warnings. If your page loads with an HTTPS - * url, then call set_use_ssl_resources to retrieve the correct - * urls. - */ - public function set_use_ssl_resources($is_ssl = true) { - $this->use_ssl_resources = $is_ssl; - } - - /** - * Returns public information for an application (as shown in the application - * directory) by either application ID, API key, or canvas page name. - * - * @param int $application_id (Optional) app id - * @param string $application_api_key (Optional) api key - * @param string $application_canvas_name (Optional) canvas name - * - * Exactly one argument must be specified, otherwise it is an error. - * - * @return array An array of public information about the application. - */ - public function application_getPublicInfo($application_id=null, - $application_api_key=null, - $application_canvas_name=null) { - return $this->call_method('facebook.application.getPublicInfo', - array('application_id' => $application_id, - 'application_api_key' => $application_api_key, - 'application_canvas_name' => $application_canvas_name)); - } - - /** - * Creates an authentication token to be used as part of the desktop login - * flow. For more information, please see - * http://wiki.developers.facebook.com/index.php/Auth.createToken. - * - * @return string An authentication token. - */ - public function auth_createToken() { - return $this->call_method('facebook.auth.createToken'); - } - - /** - * Returns the session information available after current user logs in. - * - * @param string $auth_token the token returned by auth_createToken or - * passed back to your callback_url. - * @param bool $generate_session_secret whether the session returned should - * include a session secret - * @param string $host_url the connect site URL for which the session is - * being generated. This parameter is optional, unless - * you want Facebook to determine which of several base domains - * to choose from. If this third argument isn't provided but - * there are several base domains, the first base domain is - * chosen. - * - * @return array An assoc array containing session_key, uid - */ - public function auth_getSession($auth_token, - $generate_session_secret = false, - $host_url = null) { - if (!$this->pending_batch()) { - $result = $this->call_method( - 'facebook.auth.getSession', - array('auth_token' => $auth_token, - 'generate_session_secret' => $generate_session_secret, - 'host_url' => $host_url)); - $this->session_key = $result['session_key']; - - if (!empty($result['secret']) && !$generate_session_secret) { - // desktop apps have a special secret - $this->secret = $result['secret']; - } - - return $result; - } - } - - /** - * Generates a session-specific secret. This is for integration with - * client-side API calls, such as the JS library. - * - * @return array A session secret for the current promoted session - * - * @error API_EC_PARAM_SESSION_KEY - * API_EC_PARAM_UNKNOWN - */ - public function auth_promoteSession() { - return $this->call_method('facebook.auth.promoteSession'); - } - - /** - * Expires the session that is currently being used. If this call is - * successful, no further calls to the API (which require a session) can be - * made until a valid session is created. - * - * @return bool true if session expiration was successful, false otherwise - */ - public function auth_expireSession() { - return $this->call_method('facebook.auth.expireSession'); - } - - /** - * Revokes the given extended permission that the user granted at some - * prior time (for instance, offline_access or email). If no user is - * provided, it will be revoked for the user of the current session. - * - * @param string $perm The permission to revoke - * @param int $uid The user for whom to revoke the permission. - */ - public function auth_revokeExtendedPermission($perm, $uid=null) { - return $this->call_method('facebook.auth.revokeExtendedPermission', - array('perm' => $perm, 'uid' => $uid)); - } - - /** - * Revokes the user's agreement to the Facebook Terms of Service for your - * application. If you call this method for one of your users, you will no - * longer be able to make API requests on their behalf until they again - * authorize your application. Use with care. Note that if this method is - * called without a user parameter, then it will revoke access for the - * current session's user. - * - * @param int $uid (Optional) User to revoke - * - * @return bool true if revocation succeeds, false otherwise - */ - public function auth_revokeAuthorization($uid=null) { - return $this->call_method('facebook.auth.revokeAuthorization', - array('uid' => $uid)); - } - - /** - * Get public key that is needed to verify digital signature - * an app may pass to other apps. The public key is only used by - * other apps for verification purposes. - * @param string API key of an app - * @return string The public key for the app. - */ - public function auth_getAppPublicKey($target_app_key) { - return $this->call_method('facebook.auth.getAppPublicKey', - array('target_app_key' => $target_app_key)); - } - - /** - * Get a structure that can be passed to another app - * as proof of session. The other app can verify it using public - * key of this app. - * - * @return signed public session data structure. - */ - public function auth_getSignedPublicSessionData() { - return $this->call_method('facebook.auth.getSignedPublicSessionData', - array()); - } - - /** - * Returns the number of unconnected friends that exist in this application. - * This number is determined based on the accounts registered through - * connect.registerUsers() (see below). - */ - public function connect_getUnconnectedFriendsCount() { - return $this->call_method('facebook.connect.getUnconnectedFriendsCount', - array()); - } - - /** - * This method is used to create an association between an external user - * account and a Facebook user account, as per Facebook Connect. - * - * This method takes an array of account data, including a required email_hash - * and optional account data. For each connected account, if the user exists, - * the information is added to the set of the user's connected accounts. - * If the user has already authorized the site, the connected account is added - * in the confirmed state. If the user has not yet authorized the site, the - * connected account is added in the pending state. - * - * This is designed to help Facebook Connect recognize when two Facebook - * friends are both members of a external site, but perhaps are not aware of - * it. The Connect dialog (see fb:connect-form) is used when friends can be - * identified through these email hashes. See the following url for details: - * - * http://wiki.developers.facebook.com/index.php/Connect.registerUsers - * - * @param mixed $accounts A (JSON-encoded) array of arrays, where each array - * has three properties: - * 'email_hash' (req) - public email hash of account - * 'account_id' (opt) - remote account id; - * 'account_url' (opt) - url to remote account; - * - * @return array The list of email hashes for the successfully registered - * accounts. - */ - public function connect_registerUsers($accounts) { - return $this->call_method('facebook.connect.registerUsers', - array('accounts' => $accounts)); - } - - /** - * Unregisters a set of accounts registered using connect.registerUsers. - * - * @param array $email_hashes The (JSON-encoded) list of email hashes to be - * unregistered. - * - * @return array The list of email hashes which have been successfully - * unregistered. - */ - public function connect_unregisterUsers($email_hashes) { - return $this->call_method('facebook.connect.unregisterUsers', - array('email_hashes' => $email_hashes)); - } - - /** - * Returns events according to the filters specified. - * - * @param int $uid (Optional) User associated with events. A null - * parameter will default to the session user. - * @param array/string $eids (Optional) Filter by these event - * ids. A null parameter will get all events for - * the user. (A csv list will work but is deprecated) - * @param int $start_time (Optional) Filter with this unix time as lower - * bound. A null or zero parameter indicates no - * lower bound. - * @param int $end_time (Optional) Filter with this UTC as upper bound. - * A null or zero parameter indicates no upper - * bound. - * @param string $rsvp_status (Optional) Only show events where the given uid - * has this rsvp status. This only works if you - * have specified a value for $uid. Values are as - * in events.getMembers. Null indicates to ignore - * rsvp status when filtering. - * - * @return array The events matching the query. - */ - public function &events_get($uid=null, - $eids=null, - $start_time=null, - $end_time=null, - $rsvp_status=null) { - return $this->call_method('facebook.events.get', - array('uid' => $uid, - 'eids' => $eids, - 'start_time' => $start_time, - 'end_time' => $end_time, - 'rsvp_status' => $rsvp_status)); - } - - /** - * Returns membership list data associated with an event. - * - * @param int $eid event id - * - * @return array An assoc array of four membership lists, with keys - * 'attending', 'unsure', 'declined', and 'not_replied' - */ - public function &events_getMembers($eid) { - return $this->call_method('facebook.events.getMembers', - array('eid' => $eid)); - } - - /** - * RSVPs the current user to this event. - * - * @param int $eid event id - * @param string $rsvp_status 'attending', 'unsure', or 'declined' - * - * @return bool true if successful - */ - public function &events_rsvp($eid, $rsvp_status) { - return $this->call_method('facebook.events.rsvp', - array( - 'eid' => $eid, - 'rsvp_status' => $rsvp_status)); - } - - /** - * Cancels an event. Only works for events where application is the admin. - * - * @param int $eid event id - * @param string $cancel_message (Optional) message to send to members of - * the event about why it is cancelled - * - * @return bool true if successful - */ - public function &events_cancel($eid, $cancel_message='') { - return $this->call_method('facebook.events.cancel', - array('eid' => $eid, - 'cancel_message' => $cancel_message)); - } - - /** - * Creates an event on behalf of the user is there is a session, otherwise on - * behalf of app. Successful creation guarantees app will be admin. - * - * @param assoc array $event_info json encoded event information - * @param string $file (Optional) filename of picture to set - * - * @return int event id - */ - public function events_create($event_info, $file = null) { - if ($file) { - return $this->call_upload_method('facebook.events.create', - array('event_info' => $event_info), - $file, - $this->photo_server_addr); - } else { - return $this->call_method('facebook.events.create', - array('event_info' => $event_info)); - } - } - - /** - * Invites users to an event. If a session user exists, the session user - * must have permissions to invite friends to the event and $uids must contain - * a list of friend ids. Otherwise, the event must have been - * created by the app and $uids must contain users of the app. - * This method requires the 'create_event' extended permission to - * invite people on behalf of a user. - * - * @param $eid the event id - * @param $uids an array of users to invite - * @param $personal_message a string containing the user's message - * (text only) - * - */ - public function events_invite($eid, $uids, $personal_message) { - return $this->call_method('facebook.events.invite', - array('eid' => $eid, - 'uids' => $uids, - 'personal_message' => $personal_message)); - } - - /** - * Edits an existing event. Only works for events where application is admin. - * - * @param int $eid event id - * @param assoc array $event_info json encoded event information - * @param string $file (Optional) filename of new picture to set - * - * @return bool true if successful - */ - public function events_edit($eid, $event_info, $file = null) { - if ($file) { - return $this->call_upload_method('facebook.events.edit', - array('eid' => $eid, 'event_info' => $event_info), - $file, - $this->photo_server_addr); - } else { - return $this->call_method('facebook.events.edit', - array('eid' => $eid, - 'event_info' => $event_info)); - } - } - - /** - * Fetches and re-caches the image stored at the given URL, for use in images - * published to non-canvas pages via the API (for example, to user profiles - * via profile.setFBML, or to News Feed via feed.publishUserAction). - * - * @param string $url The absolute URL from which to refresh the image. - * - * @return bool true on success - */ - public function &fbml_refreshImgSrc($url) { - return $this->call_method('facebook.fbml.refreshImgSrc', - array('url' => $url)); - } - - /** - * Fetches and re-caches the content stored at the given URL, for use in an - * fb:ref FBML tag. - * - * @param string $url The absolute URL from which to fetch content. This URL - * should be used in a fb:ref FBML tag. - * - * @return bool true on success - */ - public function &fbml_refreshRefUrl($url) { - return $this->call_method('facebook.fbml.refreshRefUrl', - array('url' => $url)); - } - - /** - * Associates a given "handle" with FBML markup so that the handle can be - * used within the fb:ref FBML tag. A handle is unique within an application - * and allows an application to publish identical FBML to many user profiles - * and do subsequent updates without having to republish FBML on behalf of - * each user. - * - * @param string $handle The handle to associate with the given FBML. - * @param string $fbml The FBML to associate with the given handle. - * - * @return bool true on success - */ - public function &fbml_setRefHandle($handle, $fbml) { - return $this->call_method('facebook.fbml.setRefHandle', - array('handle' => $handle, 'fbml' => $fbml)); - } - - /** - * Register custom tags for the application. Custom tags can be used - * to extend the set of tags available to applications in FBML - * markup. - * - * Before you call this function, - * make sure you read the full documentation at - * - * http://wiki.developers.facebook.com/index.php/Fbml.RegisterCustomTags - * - * IMPORTANT: This function overwrites the values of - * existing tags if the names match. Use this function with care because - * it may break the FBML of any application that is using the - * existing version of the tags. - * - * @param mixed $tags an array of tag objects (the full description is on the - * wiki page) - * - * @return int the number of tags that were registered - */ - public function &fbml_registerCustomTags($tags) { - $tags = json_encode($tags); - return $this->call_method('facebook.fbml.registerCustomTags', - array('tags' => $tags)); - } - - /** - * Get the custom tags for an application. If $app_id - * is not specified, the calling app's tags are returned. - * If $app_id is different from the id of the calling app, - * only the app's public tags are returned. - * The return value is an array of the same type as - * the $tags parameter of fbml_registerCustomTags(). - * - * @param int $app_id the application's id (optional) - * - * @return mixed an array containing the custom tag objects - */ - public function &fbml_getCustomTags($app_id = null) { - return $this->call_method('facebook.fbml.getCustomTags', - array('app_id' => $app_id)); - } - - - /** - * Delete custom tags the application has registered. If - * $tag_names is null, all the application's custom tags will be - * deleted. - * - * IMPORTANT: If your application has registered public tags - * that other applications may be using, don't delete those tags! - * Doing so can break the FBML ofapplications that are using them. - * - * @param array $tag_names the names of the tags to delete (optinal) - * @return bool true on success - */ - public function &fbml_deleteCustomTags($tag_names = null) { - return $this->call_method('facebook.fbml.deleteCustomTags', - array('tag_names' => json_encode($tag_names))); - } - - /** - * Gets the best translations for native strings submitted by an application - * for translation. If $locale is not specified, only native strings and their - * descriptions are returned. If $all is true, then unapproved translations - * are returned as well, otherwise only approved translations are returned. - * - * A mapping of locale codes -> language names is available at - * http://wiki.developers.facebook.com/index.php/Facebook_Locales - * - * @param string $locale the locale to get translations for, or 'all' for all - * locales, or 'en_US' for native strings - * @param bool $all whether to return all or only approved translations - * - * @return array (locale, array(native_strings, array('best translation - * available given enough votes or manual approval', approval - * status))) - * @error API_EC_PARAM - * @error API_EC_PARAM_BAD_LOCALE - */ - public function &intl_getTranslations($locale = 'en_US', $all = false) { - return $this->call_method('facebook.intl.getTranslations', - array('locale' => $locale, - 'all' => $all)); - } - - /** - * Lets you insert text strings in their native language into the Facebook - * Translations database so they can be translated. - * - * @param array $native_strings An array of maps, where each map has a 'text' - * field and a 'description' field. - * - * @return int Number of strings uploaded. - */ - public function &intl_uploadNativeStrings($native_strings) { - return $this->call_method('facebook.intl.uploadNativeStrings', - array('native_strings' => json_encode($native_strings))); - } - - /** - * This method is deprecated for calls made on behalf of users. This method - * works only for publishing stories on a Facebook Page that has installed - * your application. To publish stories to a user's profile, use - * feed.publishUserAction instead. - * - * For more details on this call, please visit the wiki page: - * - * http://wiki.developers.facebook.com/index.php/Feed.publishTemplatizedAction - */ - public function &feed_publishTemplatizedAction($title_template, - $title_data, - $body_template, - $body_data, - $body_general, - $image_1=null, - $image_1_link=null, - $image_2=null, - $image_2_link=null, - $image_3=null, - $image_3_link=null, - $image_4=null, - $image_4_link=null, - $target_ids='', - $page_actor_id=null) { - return $this->call_method('facebook.feed.publishTemplatizedAction', - array('title_template' => $title_template, - 'title_data' => $title_data, - 'body_template' => $body_template, - 'body_data' => $body_data, - 'body_general' => $body_general, - 'image_1' => $image_1, - 'image_1_link' => $image_1_link, - 'image_2' => $image_2, - 'image_2_link' => $image_2_link, - 'image_3' => $image_3, - 'image_3_link' => $image_3_link, - 'image_4' => $image_4, - 'image_4_link' => $image_4_link, - 'target_ids' => $target_ids, - 'page_actor_id' => $page_actor_id)); - } - - /** - * Registers a template bundle. Template bundles are somewhat involved, so - * it's recommended you check out the wiki for more details: - * - * http://wiki.developers.facebook.com/index.php/Feed.registerTemplateBundle - * - * @return string A template bundle id - */ - public function &feed_registerTemplateBundle($one_line_story_templates, - $short_story_templates = array(), - $full_story_template = null, - $action_links = array()) { - - $one_line_story_templates = json_encode($one_line_story_templates); - - if (!empty($short_story_templates)) { - $short_story_templates = json_encode($short_story_templates); - } - - if (isset($full_story_template)) { - $full_story_template = json_encode($full_story_template); - } - - if (isset($action_links)) { - $action_links = json_encode($action_links); - } - - return $this->call_method('facebook.feed.registerTemplateBundle', - array('one_line_story_templates' => $one_line_story_templates, - 'short_story_templates' => $short_story_templates, - 'full_story_template' => $full_story_template, - 'action_links' => $action_links)); - } - - /** - * Retrieves the full list of active template bundles registered by the - * requesting application. - * - * @return array An array of template bundles - */ - public function &feed_getRegisteredTemplateBundles() { - return $this->call_method('facebook.feed.getRegisteredTemplateBundles', - array()); - } - - /** - * Retrieves information about a specified template bundle previously - * registered by the requesting application. - * - * @param string $template_bundle_id The template bundle id - * - * @return array Template bundle - */ - public function &feed_getRegisteredTemplateBundleByID($template_bundle_id) { - return $this->call_method('facebook.feed.getRegisteredTemplateBundleByID', - array('template_bundle_id' => $template_bundle_id)); - } - - /** - * Deactivates a previously registered template bundle. - * - * @param string $template_bundle_id The template bundle id - * - * @return bool true on success - */ - public function &feed_deactivateTemplateBundleByID($template_bundle_id) { - return $this->call_method('facebook.feed.deactivateTemplateBundleByID', - array('template_bundle_id' => $template_bundle_id)); - } - - const STORY_SIZE_ONE_LINE = 1; - const STORY_SIZE_SHORT = 2; - const STORY_SIZE_FULL = 4; - - /** - * Publishes a story on behalf of the user owning the session, using the - * specified template bundle. This method requires an active session key in - * order to be called. - * - * The parameters to this method ($templata_data in particular) are somewhat - * involved. It's recommended you visit the wiki for details: - * - * http://wiki.developers.facebook.com/index.php/Feed.publishUserAction - * - * @param int $template_bundle_id A template bundle id previously registered - * @param array $template_data See wiki article for syntax - * @param array $target_ids (Optional) An array of friend uids of the - * user who shared in this action. - * @param string $body_general (Optional) Additional markup that extends - * the body of a short story. - * @param int $story_size (Optional) A story size (see above) - * @param string $user_message (Optional) A user message for a short - * story. - * - * @return bool true on success - */ - public function &feed_publishUserAction( - $template_bundle_id, $template_data, $target_ids='', $body_general='', - $story_size=FacebookRestClient::STORY_SIZE_ONE_LINE, - $user_message='') { - - if (is_array($template_data)) { - $template_data = json_encode($template_data); - } // allow client to either pass in JSON or an assoc that we JSON for them - - if (is_array($target_ids)) { - $target_ids = json_encode($target_ids); - $target_ids = trim($target_ids, "[]"); // we don't want square brackets - } - - return $this->call_method('facebook.feed.publishUserAction', - array('template_bundle_id' => $template_bundle_id, - 'template_data' => $template_data, - 'target_ids' => $target_ids, - 'body_general' => $body_general, - 'story_size' => $story_size, - 'user_message' => $user_message)); - } - - - /** - * Publish a post to the user's stream. - * - * @param $message the user's message - * @param $attachment the post's attachment (optional) - * @param $action links the post's action links (optional) - * @param $target_id the user on whose wall the post will be posted - * (optional) - * @param $uid the actor (defaults to session user) - * @return string the post id - */ - public function stream_publish( - $message, $attachment = null, $action_links = null, $target_id = null, - $uid = null) { - - return $this->call_method( - 'facebook.stream.publish', - array('message' => $message, - 'attachment' => $attachment, - 'action_links' => $action_links, - 'target_id' => $target_id, - 'uid' => $this->get_uid($uid))); - } - - /** - * Remove a post from the user's stream. - * Currently, you may only remove stories you application created. - * - * @param $post_id the post id - * @param $uid the actor (defaults to session user) - * @return bool - */ - public function stream_remove($post_id, $uid = null) { - return $this->call_method( - 'facebook.stream.remove', - array('post_id' => $post_id, - 'uid' => $this->get_uid($uid))); - } - - /** - * Add a comment to a stream post - * - * @param $post_id the post id - * @param $comment the comment text - * @param $uid the actor (defaults to session user) - * @return string the id of the created comment - */ - public function stream_addComment($post_id, $comment, $uid = null) { - return $this->call_method( - 'facebook.stream.addComment', - array('post_id' => $post_id, - 'comment' => $comment, - 'uid' => $this->get_uid($uid))); - } - - - /** - * Remove a comment from a stream post - * - * @param $comment_id the comment id - * @param $uid the actor (defaults to session user) - * @return bool - */ - public function stream_removeComment($comment_id, $uid = null) { - return $this->call_method( - 'facebook.stream.removeComment', - array('comment_id' => $comment_id, - 'uid' => $this->get_uid($uid))); - } - - /** - * Add a like to a stream post - * - * @param $post_id the post id - * @param $uid the actor (defaults to session user) - * @return bool - */ - public function stream_addLike($post_id, $uid = null) { - return $this->call_method( - 'facebook.stream.addLike', - array('post_id' => $post_id, - 'uid' => $this->get_uid($uid))); - } - - /** - * Remove a like from a stream post - * - * @param $post_id the post id - * @param $uid the actor (defaults to session user) - * @return bool - */ - public function stream_removeLike($post_id, $uid = null) { - return $this->call_method( - 'facebook.stream.removeLike', - array('post_id' => $post_id, - 'uid' => $this->get_uid($uid))); - } - - /** - * For the current user, retrieves stories generated by the user's friends - * while using this application. This can be used to easily create a - * "News Feed" like experience. - * - * @return array An array of feed story objects. - */ - public function &feed_getAppFriendStories() { - return $this->call_method('facebook.feed.getAppFriendStories'); - } - - /** - * Makes an FQL query. This is a generalized way of accessing all the data - * in the API, as an alternative to most of the other method calls. More - * info at http://wiki.developers.facebook.com/index.php/FQL - * - * @param string $query the query to evaluate - * - * @return array generalized array representing the results - */ - public function &fql_query($query) { - return $this->call_method('facebook.fql.query', - array('query' => $query)); - } - - /** - * Makes a set of FQL queries in parallel. This method takes a dictionary - * of FQL queries where the keys are names for the queries. Results from - * one query can be used within another query to fetch additional data. More - * info about FQL queries at http://wiki.developers.facebook.com/index.php/FQL - * - * @param string $queries JSON-encoded dictionary of queries to evaluate - * - * @return array generalized array representing the results - */ - public function &fql_multiquery($queries) { - return $this->call_method('facebook.fql.multiquery', - array('queries' => $queries)); - } - - /** - * Returns whether or not pairs of users are friends. - * Note that the Facebook friend relationship is symmetric. - * - * @param array/string $uids1 list of ids (id_1, id_2,...) - * of some length X (csv is deprecated) - * @param array/string $uids2 list of ids (id_A, id_B,...) - * of SAME length X (csv is deprecated) - * - * @return array An array with uid1, uid2, and bool if friends, e.g.: - * array(0 => array('uid1' => id_1, 'uid2' => id_A, 'are_friends' => 1), - * 1 => array('uid1' => id_2, 'uid2' => id_B, 'are_friends' => 0) - * ...) - * @error - * API_EC_PARAM_USER_ID_LIST - */ - public function &friends_areFriends($uids1, $uids2) { - return $this->call_method('facebook.friends.areFriends', - array('uids1' => $uids1, - 'uids2' => $uids2)); - } - - /** - * Returns the friends of the current session user. - * - * @param int $flid (Optional) Only return friends on this friend list. - * @param int $uid (Optional) Return friends for this user. - * - * @return array An array of friends - */ - public function &friends_get($flid=null, $uid = null) { - if (isset($this->friends_list)) { - return $this->friends_list; - } - $params = array(); - if (!$uid && isset($this->canvas_user)) { - $uid = $this->canvas_user; - } - if ($uid) { - $params['uid'] = $uid; - } - if ($flid) { - $params['flid'] = $flid; - } - return $this->call_method('facebook.friends.get', $params); - - } - - /** - * Returns the mutual friends between the target uid and a source uid or - * the current session user. - * - * @param int $target_uid Target uid for which mutual friends will be found. - * @param int $source_uid (optional) Source uid for which mutual friends will - * be found. If no source_uid is specified, - * source_id will default to the session - * user. - * @return array An array of friend uids - */ - public function &friends_getMutualFriends($target_uid, $source_uid = null) { - return $this->call_method('facebook.friends.getMutualFriends', - array("target_uid" => $target_uid, - "source_uid" => $source_uid)); - } - - /** - * Returns the set of friend lists for the current session user. - * - * @return array An array of friend list objects - */ - public function &friends_getLists() { - return $this->call_method('facebook.friends.getLists'); - } - - /** - * Returns the friends of the session user, who are also users - * of the calling application. - * - * @return array An array of friends also using the app - */ - public function &friends_getAppUsers() { - return $this->call_method('facebook.friends.getAppUsers'); - } - - /** - * Returns groups according to the filters specified. - * - * @param int $uid (Optional) User associated with groups. A null - * parameter will default to the session user. - * @param array/string $gids (Optional) Array of group ids to query. A null - * parameter will get all groups for the user. - * (csv is deprecated) - * - * @return array An array of group objects - */ - public function &groups_get($uid, $gids) { - return $this->call_method('facebook.groups.get', - array('uid' => $uid, - 'gids' => $gids)); - } - - /** - * Returns the membership list of a group. - * - * @param int $gid Group id - * - * @return array An array with four membership lists, with keys 'members', - * 'admins', 'officers', and 'not_replied' - */ - public function &groups_getMembers($gid) { - return $this->call_method('facebook.groups.getMembers', - array('gid' => $gid)); - } - - /** - * Returns cookies according to the filters specified. - * - * @param int $uid User for which the cookies are needed. - * @param string $name (Optional) A null parameter will get all cookies - * for the user. - * - * @return array Cookies! Nom nom nom nom nom. - */ - public function data_getCookies($uid, $name) { - return $this->call_method('facebook.data.getCookies', - array('uid' => $uid, - 'name' => $name)); - } - - /** - * Sets cookies according to the params specified. - * - * @param int $uid User for which the cookies are needed. - * @param string $name Name of the cookie - * @param string $value (Optional) if expires specified and is in the past - * @param int $expires (Optional) Expiry time - * @param string $path (Optional) Url path to associate with (default is /) - * - * @return bool true on success - */ - public function data_setCookie($uid, $name, $value, $expires, $path) { - return $this->call_method('facebook.data.setCookie', - array('uid' => $uid, - 'name' => $name, - 'value' => $value, - 'expires' => $expires, - 'path' => $path)); - } - - /** - * Retrieves links posted by the given user. - * - * @param int $uid The user whose links you wish to retrieve - * @param int $limit The maximimum number of links to retrieve - * @param array $link_ids (Optional) Array of specific link - * IDs to retrieve by this user - * - * @return array An array of links. - */ - public function &links_get($uid, $limit, $link_ids = null) { - return $this->call_method('links.get', - array('uid' => $uid, - 'limit' => $limit, - 'link_ids' => $link_ids)); - } - - /** - * Posts a link on Facebook. - * - * @param string $url URL/link you wish to post - * @param string $comment (Optional) A comment about this link - * @param int $uid (Optional) User ID that is posting this link; - * defaults to current session user - * - * @return bool - */ - public function &links_post($url, $comment='', $uid = null) { - return $this->call_method('links.post', - array('uid' => $uid, - 'url' => $url, - 'comment' => $comment)); - } - - /** - * Permissions API - */ - - /** - * Checks API-access granted by self to the specified application. - * - * @param string $permissions_apikey Other application key - * - * @return array API methods/namespaces which are allowed access - */ - public function permissions_checkGrantedApiAccess($permissions_apikey) { - return $this->call_method('facebook.permissions.checkGrantedApiAccess', - array('permissions_apikey' => $permissions_apikey)); - } - - /** - * Checks API-access granted to self by the specified application. - * - * @param string $permissions_apikey Other application key - * - * @return array API methods/namespaces which are allowed access - */ - public function permissions_checkAvailableApiAccess($permissions_apikey) { - return $this->call_method('facebook.permissions.checkAvailableApiAccess', - array('permissions_apikey' => $permissions_apikey)); - } - - /** - * Grant API-access to the specified methods/namespaces to the specified - * application. - * - * @param string $permissions_apikey Other application key - * @param array(string) $method_arr (Optional) API methods/namespaces - * allowed - * - * @return array API methods/namespaces which are allowed access - */ - public function permissions_grantApiAccess($permissions_apikey, $method_arr) { - return $this->call_method('facebook.permissions.grantApiAccess', - array('permissions_apikey' => $permissions_apikey, - 'method_arr' => $method_arr)); - } - - /** - * Revoke API-access granted to the specified application. - * - * @param string $permissions_apikey Other application key - * - * @return bool true on success - */ - public function permissions_revokeApiAccess($permissions_apikey) { - return $this->call_method('facebook.permissions.revokeApiAccess', - array('permissions_apikey' => $permissions_apikey)); - } - - /** - * Payments Order API - */ - - /** - * Set Payments properties for an app. - * - * @param properties a map from property names to values - * @return true on success - */ - public function payments_setProperties($properties) { - return $this->call_method ('facebook.payments.setProperties', - array('properties' => json_encode($properties))); - } - - public function payments_getOrderDetails($order_id) { - return json_decode($this->call_method( - 'facebook.payments.getOrderDetails', - array('order_id' => $order_id)), true); - } - - public function payments_updateOrder($order_id, $status, - $params) { - return $this->call_method('facebook.payments.updateOrder', - array('order_id' => $order_id, - 'status' => $status, - 'params' => json_encode($params))); - } - - public function payments_getOrders($status, $start_time, - $end_time, $test_mode=false) { - return json_decode($this->call_method('facebook.payments.getOrders', - array('status' => $status, - 'start_time' => $start_time, - 'end_time' => $end_time, - 'test_mode' => $test_mode)), true); - } - - /** - * Gifts API - */ - - /** - * Get Gifts associated with an app - * - * @return array of gifts - */ - public function gifts_get() { - return json_decode( - $this->call_method('facebook.gifts.get', - array()), - true - ); - } - - /* - * Update gifts stored by an app - * - * @param array containing gift_id => gift_data to be updated - * @return array containing gift_id => true/false indicating success - * in updating that gift - */ - public function gifts_update($update_array) { - return json_decode( - $this->call_method('facebook.gifts.update', - array('update_str' => json_encode($update_array)) - ), - true - ); - } - - - /** - * Creates a note with the specified title and content. - * - * @param string $title Title of the note. - * @param string $content Content of the note. - * @param int $uid (Optional) The user for whom you are creating a - * note; defaults to current session user - * - * @return int The ID of the note that was just created. - */ - public function ¬es_create($title, $content, $uid = null) { - return $this->call_method('notes.create', - array('uid' => $uid, - 'title' => $title, - 'content' => $content)); - } - - /** - * Deletes the specified note. - * - * @param int $note_id ID of the note you wish to delete - * @param int $uid (Optional) Owner of the note you wish to delete; - * defaults to current session user - * - * @return bool - */ - public function ¬es_delete($note_id, $uid = null) { - return $this->call_method('notes.delete', - array('uid' => $uid, - 'note_id' => $note_id)); - } - - /** - * Edits a note, replacing its title and contents with the title - * and contents specified. - * - * @param int $note_id ID of the note you wish to edit - * @param string $title Replacement title for the note - * @param string $content Replacement content for the note - * @param int $uid (Optional) Owner of the note you wish to edit; - * defaults to current session user - * - * @return bool - */ - public function ¬es_edit($note_id, $title, $content, $uid = null) { - return $this->call_method('notes.edit', - array('uid' => $uid, - 'note_id' => $note_id, - 'title' => $title, - 'content' => $content)); - } - - /** - * Retrieves all notes by a user. If note_ids are specified, - * retrieves only those specific notes by that user. - * - * @param int $uid User whose notes you wish to retrieve - * @param array $note_ids (Optional) List of specific note - * IDs by this user to retrieve - * - * @return array A list of all of the given user's notes, or an empty list - * if the viewer lacks permissions or if there are no visible - * notes. - */ - public function ¬es_get($uid, $note_ids = null) { - return $this->call_method('notes.get', - array('uid' => $uid, - 'note_ids' => $note_ids)); - } - - - /** - * Returns the outstanding notifications for the session user. - * - * @return array An assoc array of notification count objects for - * 'messages', 'pokes' and 'shares', a uid list of - * 'friend_requests', a gid list of 'group_invites', - * and an eid list of 'event_invites' - */ - public function ¬ifications_get() { - return $this->call_method('facebook.notifications.get'); - } - - /** - * Sends a notification to the specified users. - * - * @return A comma separated list of successful recipients - * @error - * API_EC_PARAM_USER_ID_LIST - */ - public function ¬ifications_send($to_ids, $notification, $type) { - return $this->call_method('facebook.notifications.send', - array('to_ids' => $to_ids, - 'notification' => $notification, - 'type' => $type)); - } - - /** - * Sends an email to the specified user of the application. - * - * @param array/string $recipients array of ids of the recipients (csv is deprecated) - * @param string $subject subject of the email - * @param string $text (plain text) body of the email - * @param string $fbml fbml markup for an html version of the email - * - * @return string A comma separated list of successful recipients - * @error - * API_EC_PARAM_USER_ID_LIST - */ - public function ¬ifications_sendEmail($recipients, - $subject, - $text, - $fbml) { - return $this->call_method('facebook.notifications.sendEmail', - array('recipients' => $recipients, - 'subject' => $subject, - 'text' => $text, - 'fbml' => $fbml)); - } - - /** - * Returns the requested info fields for the requested set of pages. - * - * @param array/string $page_ids an array of page ids (csv is deprecated) - * @param array/string $fields an array of strings describing the - * info fields desired (csv is deprecated) - * @param int $uid (Optional) limit results to pages of which this - * user is a fan. - * @param string type limits results to a particular type of page. - * - * @return array An array of pages - */ - public function &pages_getInfo($page_ids, $fields, $uid, $type) { - return $this->call_method('facebook.pages.getInfo', - array('page_ids' => $page_ids, - 'fields' => $fields, - 'uid' => $uid, - 'type' => $type)); - } - - /** - * Returns true if the given user is an admin for the passed page. - * - * @param int $page_id target page id - * @param int $uid (Optional) user id (defaults to the logged-in user) - * - * @return bool true on success - */ - public function &pages_isAdmin($page_id, $uid = null) { - return $this->call_method('facebook.pages.isAdmin', - array('page_id' => $page_id, - 'uid' => $uid)); - } - - /** - * Returns whether or not the given page has added the application. - * - * @param int $page_id target page id - * - * @return bool true on success - */ - public function &pages_isAppAdded($page_id) { - return $this->call_method('facebook.pages.isAppAdded', - array('page_id' => $page_id)); - } - - /** - * Returns true if logged in user is a fan for the passed page. - * - * @param int $page_id target page id - * @param int $uid user to compare. If empty, the logged in user. - * - * @return bool true on success - */ - public function &pages_isFan($page_id, $uid = null) { - return $this->call_method('facebook.pages.isFan', - array('page_id' => $page_id, - 'uid' => $uid)); - } - - /** - * Adds a tag with the given information to a photo. See the wiki for details: - * - * http://wiki.developers.facebook.com/index.php/Photos.addTag - * - * @param int $pid The ID of the photo to be tagged - * @param int $tag_uid The ID of the user being tagged. You must specify - * either the $tag_uid or the $tag_text parameter - * (unless $tags is specified). - * @param string $tag_text Some text identifying the person being tagged. - * You must specify either the $tag_uid or $tag_text - * parameter (unless $tags is specified). - * @param float $x The horizontal position of the tag, as a - * percentage from 0 to 100, from the left of the - * photo. - * @param float $y The vertical position of the tag, as a percentage - * from 0 to 100, from the top of the photo. - * @param array $tags (Optional) An array of maps, where each map - * can contain the tag_uid, tag_text, x, and y - * parameters defined above. If specified, the - * individual arguments are ignored. - * @param int $owner_uid (Optional) The user ID of the user whose photo - * you are tagging. If this parameter is not - * specified, then it defaults to the session user. - * - * @return bool true on success - */ - public function &photos_addTag($pid, - $tag_uid, - $tag_text, - $x, - $y, - $tags, - $owner_uid=0) { - return $this->call_method('facebook.photos.addTag', - array('pid' => $pid, - 'tag_uid' => $tag_uid, - 'tag_text' => $tag_text, - 'x' => $x, - 'y' => $y, - 'tags' => (is_array($tags)) ? json_encode($tags) : null, - 'owner_uid' => $this->get_uid($owner_uid))); - } - - /** - * Creates and returns a new album owned by the specified user or the current - * session user. - * - * @param string $name The name of the album. - * @param string $description (Optional) A description of the album. - * @param string $location (Optional) A description of the location. - * @param string $visible (Optional) A privacy setting for the album. - * One of 'friends', 'friends-of-friends', - * 'networks', or 'everyone'. Default 'everyone'. - * @param int $uid (Optional) User id for creating the album; if - * not specified, the session user is used. - * - * @return array An album object - */ - public function &photos_createAlbum($name, - $description='', - $location='', - $visible='', - $uid=0) { - return $this->call_method('facebook.photos.createAlbum', - array('name' => $name, - 'description' => $description, - 'location' => $location, - 'visible' => $visible, - 'uid' => $this->get_uid($uid))); - } - - /** - * Returns photos according to the filters specified. - * - * @param int $subj_id (Optional) Filter by uid of user tagged in the photos. - * @param int $aid (Optional) Filter by an album, as returned by - * photos_getAlbums. - * @param array/string $pids (Optional) Restrict to an array of pids - * (csv is deprecated) - * - * Note that at least one of these parameters needs to be specified, or an - * error is returned. - * - * @return array An array of photo objects. - */ - public function &photos_get($subj_id, $aid, $pids) { - return $this->call_method('facebook.photos.get', - array('subj_id' => $subj_id, 'aid' => $aid, 'pids' => $pids)); - } - - /** - * Returns the albums created by the given user. - * - * @param int $uid (Optional) The uid of the user whose albums you want. - * A null will return the albums of the session user. - * @param string $aids (Optional) An array of aids to restrict - * the query. (csv is deprecated) - * - * Note that at least one of the (uid, aids) parameters must be specified. - * - * @returns an array of album objects. - */ - public function &photos_getAlbums($uid, $aids) { - return $this->call_method('facebook.photos.getAlbums', - array('uid' => $uid, - 'aids' => $aids)); - } - - /** - * Returns the tags on all photos specified. - * - * @param string $pids A list of pids to query - * - * @return array An array of photo tag objects, which include pid, - * subject uid, and two floating-point numbers (xcoord, ycoord) - * for tag pixel location. - */ - public function &photos_getTags($pids) { - return $this->call_method('facebook.photos.getTags', - array('pids' => $pids)); - } - - /** - * Uploads a photo. - * - * @param string $file The location of the photo on the local filesystem. - * @param int $aid (Optional) The album into which to upload the - * photo. - * @param string $caption (Optional) A caption for the photo. - * @param int uid (Optional) The user ID of the user whose photo you - * are uploading - * - * @return array An array of user objects - */ - public function photos_upload($file, $aid=null, $caption=null, $uid=null) { - return $this->call_upload_method('facebook.photos.upload', - array('aid' => $aid, - 'caption' => $caption, - 'uid' => $uid), - $file); - } - - - /** - * Uploads a video. - * - * @param string $file The location of the video on the local filesystem. - * @param string $title (Optional) A title for the video. Titles over 65 characters in length will be truncated. - * @param string $description (Optional) A description for the video. - * - * @return array An array with the video's ID, title, description, and a link to view it on Facebook. - */ - public function video_upload($file, $title=null, $description=null) { - return $this->call_upload_method('facebook.video.upload', - array('title' => $title, - 'description' => $description), - $file, - Facebook::get_facebook_url('api-video') . '/restserver.php'); - } - - /** - * Returns an array with the video limitations imposed on the current session's - * associated user. Maximum length is measured in seconds; maximum size is - * measured in bytes. - * - * @return array Array with "length" and "size" keys - */ - public function &video_getUploadLimits() { - return $this->call_method('facebook.video.getUploadLimits'); - } - - /** - * Returns the requested info fields for the requested set of users. - * - * @param array/string $uids An array of user ids (csv is deprecated) - * @param array/string $fields An array of info field names desired (csv is deprecated) - * - * @return array An array of user objects - */ - public function &users_getInfo($uids, $fields) { - return $this->call_method('facebook.users.getInfo', - array('uids' => $uids, - 'fields' => $fields)); - } - - /** - * Returns the requested info fields for the requested set of users. A - * session key must not be specified. Only data about users that have - * authorized your application will be returned. - * - * Check the wiki for fields that can be queried through this API call. - * Data returned from here should not be used for rendering to application - * users, use users.getInfo instead, so that proper privacy rules will be - * applied. - * - * @param array/string $uids An array of user ids (csv is deprecated) - * @param array/string $fields An array of info field names desired (csv is deprecated) - * - * @return array An array of user objects - */ - public function &users_getStandardInfo($uids, $fields) { - return $this->call_method('facebook.users.getStandardInfo', - array('uids' => $uids, - 'fields' => $fields)); - } - - /** - * Returns the user corresponding to the current session object. - * - * @return integer User id - */ - public function &users_getLoggedInUser() { - return $this->call_method('facebook.users.getLoggedInUser'); - } - - /** - * Returns 1 if the user has the specified permission, 0 otherwise. - * http://wiki.developers.facebook.com/index.php/Users.hasAppPermission - * - * @return integer 1 or 0 - */ - public function &users_hasAppPermission($ext_perm, $uid=null) { - return $this->call_method('facebook.users.hasAppPermission', - array('ext_perm' => $ext_perm, 'uid' => $uid)); - } - - /** - * Returns whether or not the user corresponding to the current - * session object has the give the app basic authorization. - * - * @return boolean true if the user has authorized the app - */ - public function &users_isAppUser($uid=null) { - if ($uid === null && isset($this->is_user)) { - return $this->is_user; - } - - return $this->call_method('facebook.users.isAppUser', array('uid' => $uid)); - } - - /** - * Returns whether or not the user corresponding to the current - * session object is verified by Facebook. See the documentation - * for Users.isVerified for details. - * - * @return boolean true if the user is verified - */ - public function &users_isVerified() { - return $this->call_method('facebook.users.isVerified'); - } - - /** - * Sets the users' current status message. Message does NOT contain the - * word "is" , so make sure to include a verb. - * - * Example: setStatus("is loving the API!") - * will produce the status "Luke is loving the API!" - * - * @param string $status text-only message to set - * @param int $uid user to set for (defaults to the - * logged-in user) - * @param bool $clear whether or not to clear the status, - * instead of setting it - * @param bool $status_includes_verb if true, the word "is" will *not* be - * prepended to the status message - * - * @return boolean - */ - public function &users_setStatus($status, - $uid = null, - $clear = false, - $status_includes_verb = true) { - $args = array( - 'status' => $status, - 'uid' => $uid, - 'clear' => $clear, - 'status_includes_verb' => $status_includes_verb, - ); - return $this->call_method('facebook.users.setStatus', $args); - } - - /** - * Gets the comments for a particular xid. This is essentially a wrapper - * around the comment FQL table. - * - * @param string $xid external id associated with the comments - * - * @return array of comment objects - */ - public function &comments_get($xid) { - $args = array('xid' => $xid); - return $this->call_method('facebook.comments.get', $args); - } - - /** - * Add a comment to a particular xid on behalf of a user. If called - * without an app_secret (with session secret), this will only work - * for the session user. - * - * @param string $xid external id associated with the comments - * @param string $text text of the comment - * @param int $uid user adding the comment (def: session user) - * @param string $title optional title for the stream story - * @param string $url optional url for the stream story - * @param bool $publish_to_stream publish a feed story about this comment? - * a link will be generated to title/url in the story - * - * @return string comment_id associated with the comment - */ - public function &comments_add($xid, $text, $uid=0, $title='', $url='', - $publish_to_stream=false) { - $args = array( - 'xid' => $xid, - 'uid' => $this->get_uid($uid), - 'text' => $text, - 'title' => $title, - 'url' => $url, - 'publish_to_stream' => $publish_to_stream); - - return $this->call_method('facebook.comments.add', $args); - } - - /** - * Remove a particular comment. - * - * @param string $xid the external id associated with the comments - * @param string $comment_id id of the comment to remove (returned by - * comments.add and comments.get) - * - * @return boolean - */ - public function &comments_remove($xid, $comment_id) { - $args = array( - 'xid' => $xid, - 'comment_id' => $comment_id); - return $this->call_method('facebook.comments.remove', $args); - } - - /** - * Gets the stream on behalf of a user using a set of users. This - * call will return the latest $limit queries between $start_time - * and $end_time. - * - * @param int $viewer_id user making the call (def: session) - * @param array $source_ids users/pages to look at (def: all connections) - * @param int $start_time start time to look for stories (def: 1 day ago) - * @param int $end_time end time to look for stories (def: now) - * @param int $limit number of stories to attempt to fetch (def: 30) - * @param string $filter_key key returned by stream.getFilters to fetch - * @param array $metadata metadata to include with the return, allows - * requested metadata to be returned, such as - * profiles, albums, photo_tags - * - * @return array( - * 'posts' => array of posts, - * // if requested, the following data may be returned - * 'profiles' => array of profile metadata of users/pages in posts - * 'albums' => array of album metadata in posts - * 'photo_tags' => array of photo_tags for photos in posts - * ) - */ - public function &stream_get($viewer_id = null, - $source_ids = null, - $start_time = 0, - $end_time = 0, - $limit = 30, - $filter_key = '', - $exportable_only = false, - $metadata = null, - $post_ids = null) { - $args = array( - 'viewer_id' => $viewer_id, - 'source_ids' => $source_ids, - 'start_time' => $start_time, - 'end_time' => $end_time, - 'limit' => $limit, - 'filter_key' => $filter_key, - 'exportable_only' => $exportable_only, - 'metadata' => $metadata, - 'post_ids' => $post_ids); - return $this->call_method('facebook.stream.get', $args); - } - - /** - * Gets the filters (with relevant filter keys for stream.get) for a - * particular user. These filters are typical things like news feed, - * friend lists, networks. They can be used to filter the stream - * without complex queries to determine which ids belong in which groups. - * - * @param int $uid user to get filters for - * - * @return array of stream filter objects - */ - public function &stream_getFilters($uid = null) { - $args = array('uid' => $uid); - return $this->call_method('facebook.stream.getFilters', $args); - } - - /** - * Gets the full comments given a post_id from stream.get or the - * stream FQL table. Initially, only a set of preview comments are - * returned because some posts can have many comments. - * - * @param string $post_id id of the post to get comments for - * - * @return array of comment objects - */ - public function &stream_getComments($post_id) { - $args = array('post_id' => $post_id); - return $this->call_method('facebook.stream.getComments', $args); - } - - /** - * Sets the FBML for the profile of the user attached to this session. - * - * @param string $markup The FBML that describes the profile - * presence of this app for the user - * @param int $uid The user - * @param string $profile Profile FBML - * @param string $profile_action Profile action FBML (deprecated) - * @param string $mobile_profile Mobile profile FBML - * @param string $profile_main Main Tab profile FBML - * - * @return array A list of strings describing any compile errors for the - * submitted FBML - */ - public function profile_setFBML($markup, - $uid=null, - $profile='', - $profile_action='', - $mobile_profile='', - $profile_main='') { - return $this->call_method('facebook.profile.setFBML', - array('markup' => $markup, - 'uid' => $uid, - 'profile' => $profile, - 'profile_action' => $profile_action, - 'mobile_profile' => $mobile_profile, - 'profile_main' => $profile_main)); - } - - /** - * Gets the FBML for the profile box that is currently set for a user's - * profile (your application set the FBML previously by calling the - * profile.setFBML method). - * - * @param int $uid (Optional) User id to lookup; defaults to session. - * @param int $type (Optional) 1 for original style, 2 for profile_main boxes - * - * @return string The FBML - */ - public function &profile_getFBML($uid=null, $type=null) { - return $this->call_method('facebook.profile.getFBML', - array('uid' => $uid, - 'type' => $type)); - } - - /** - * Returns the specified user's application info section for the calling - * application. These info sections have either been set via a previous - * profile.setInfo call or by the user editing them directly. - * - * @param int $uid (Optional) User id to lookup; defaults to session. - * - * @return array Info fields for the current user. See wiki for structure: - * - * http://wiki.developers.facebook.com/index.php/Profile.getInfo - * - */ - public function &profile_getInfo($uid=null) { - return $this->call_method('facebook.profile.getInfo', - array('uid' => $uid)); - } - - /** - * Returns the options associated with the specified info field for an - * application info section. - * - * @param string $field The title of the field - * - * @return array An array of info options. - */ - public function &profile_getInfoOptions($field) { - return $this->call_method('facebook.profile.getInfoOptions', - array('field' => $field)); - } - - /** - * Configures an application info section that the specified user can install - * on the Info tab of her profile. For details on the structure of an info - * field, please see: - * - * http://wiki.developers.facebook.com/index.php/Profile.setInfo - * - * @param string $title Title / header of the info section - * @param int $type 1 for text-only, 5 for thumbnail views - * @param array $info_fields An array of info fields. See wiki for details. - * @param int $uid (Optional) - * - * @return bool true on success - */ - public function &profile_setInfo($title, $type, $info_fields, $uid=null) { - return $this->call_method('facebook.profile.setInfo', - array('uid' => $uid, - 'type' => $type, - 'title' => $title, - 'info_fields' => json_encode($info_fields))); - } - - /** - * Specifies the objects for a field for an application info section. These - * options populate the typeahead for a thumbnail. - * - * @param string $field The title of the field - * @param array $options An array of items for a thumbnail, including - * 'label', 'link', and optionally 'image', - * 'description' and 'sublabel' - * - * @return bool true on success - */ - public function profile_setInfoOptions($field, $options) { - return $this->call_method('facebook.profile.setInfoOptions', - array('field' => $field, - 'options' => json_encode($options))); - } - - ///////////////////////////////////////////////////////////////////////////// - // Data Store API - - /** - * Set a user preference. - * - * @param pref_id preference identifier (0-200) - * @param value preferece's value - * @param uid the user id (defaults to current session user) - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - * API_EC_PERMISSION_OTHER_USER - */ - public function &data_setUserPreference($pref_id, $value, $uid = null) { - return $this->call_method('facebook.data.setUserPreference', - array('pref_id' => $pref_id, - 'value' => $value, - 'uid' => $this->get_uid($uid))); - } - - /** - * Set a user's all preferences for this application. - * - * @param values preferece values in an associative arrays - * @param replace whether to replace all existing preferences or - * merge into them. - * @param uid the user id (defaults to current session user) - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - * API_EC_PERMISSION_OTHER_USER - */ - public function &data_setUserPreferences($values, - $replace = false, - $uid = null) { - return $this->call_method('facebook.data.setUserPreferences', - array('values' => json_encode($values), - 'replace' => $replace, - 'uid' => $this->get_uid($uid))); - } - - /** - * Get a user preference. - * - * @param pref_id preference identifier (0-200) - * @param uid the user id (defaults to current session user) - * @return preference's value - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - * API_EC_PERMISSION_OTHER_USER - */ - public function &data_getUserPreference($pref_id, $uid = null) { - return $this->call_method('facebook.data.getUserPreference', - array('pref_id' => $pref_id, - 'uid' => $this->get_uid($uid))); - } - - /** - * Get a user preference. - * - * @param uid the user id (defaults to current session user) - * @return preference values - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - * API_EC_PERMISSION_OTHER_USER - */ - public function &data_getUserPreferences($uid = null) { - return $this->call_method('facebook.data.getUserPreferences', - array('uid' => $this->get_uid($uid))); - } - - /** - * Create a new object type. - * - * @param name object type's name - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_ALREADY_EXISTS - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_createObjectType($name) { - return $this->call_method('facebook.data.createObjectType', - array('name' => $name)); - } - - /** - * Delete an object type. - * - * @param obj_type object type's name - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_dropObjectType($obj_type) { - return $this->call_method('facebook.data.dropObjectType', - array('obj_type' => $obj_type)); - } - - /** - * Rename an object type. - * - * @param obj_type object type's name - * @param new_name new object type's name - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_DATA_OBJECT_ALREADY_EXISTS - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_renameObjectType($obj_type, $new_name) { - return $this->call_method('facebook.data.renameObjectType', - array('obj_type' => $obj_type, - 'new_name' => $new_name)); - } - - /** - * Add a new property to an object type. - * - * @param obj_type object type's name - * @param prop_name name of the property to add - * @param prop_type 1: integer; 2: string; 3: text blob - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_ALREADY_EXISTS - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_defineObjectProperty($obj_type, - $prop_name, - $prop_type) { - return $this->call_method('facebook.data.defineObjectProperty', - array('obj_type' => $obj_type, - 'prop_name' => $prop_name, - 'prop_type' => $prop_type)); - } - - /** - * Remove a previously defined property from an object type. - * - * @param obj_type object type's name - * @param prop_name name of the property to remove - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_undefineObjectProperty($obj_type, $prop_name) { - return $this->call_method('facebook.data.undefineObjectProperty', - array('obj_type' => $obj_type, - 'prop_name' => $prop_name)); - } - - /** - * Rename a previously defined property of an object type. - * - * @param obj_type object type's name - * @param prop_name name of the property to rename - * @param new_name new name to use - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_DATA_OBJECT_ALREADY_EXISTS - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_renameObjectProperty($obj_type, $prop_name, - $new_name) { - return $this->call_method('facebook.data.renameObjectProperty', - array('obj_type' => $obj_type, - 'prop_name' => $prop_name, - 'new_name' => $new_name)); - } - - /** - * Retrieve a list of all object types that have defined for the application. - * - * @return a list of object type names - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PERMISSION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getObjectTypes() { - return $this->call_method('facebook.data.getObjectTypes'); - } - - /** - * Get definitions of all properties of an object type. - * - * @param obj_type object type's name - * @return pairs of property name and property types - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getObjectType($obj_type) { - return $this->call_method('facebook.data.getObjectType', - array('obj_type' => $obj_type)); - } - - /** - * Create a new object. - * - * @param obj_type object type's name - * @param properties (optional) properties to set initially - * @return newly created object's id - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_createObject($obj_type, $properties = null) { - return $this->call_method('facebook.data.createObject', - array('obj_type' => $obj_type, - 'properties' => json_encode($properties))); - } - - /** - * Update an existing object. - * - * @param obj_id object's id - * @param properties new properties - * @param replace true for replacing existing properties; - * false for merging - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_updateObject($obj_id, $properties, $replace = false) { - return $this->call_method('facebook.data.updateObject', - array('obj_id' => $obj_id, - 'properties' => json_encode($properties), - 'replace' => $replace)); - } - - /** - * Delete an existing object. - * - * @param obj_id object's id - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_deleteObject($obj_id) { - return $this->call_method('facebook.data.deleteObject', - array('obj_id' => $obj_id)); - } - - /** - * Delete a list of objects. - * - * @param obj_ids objects to delete - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_deleteObjects($obj_ids) { - return $this->call_method('facebook.data.deleteObjects', - array('obj_ids' => json_encode($obj_ids))); - } - - /** - * Get a single property value of an object. - * - * @param obj_id object's id - * @param prop_name individual property's name - * @return individual property's value - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getObjectProperty($obj_id, $prop_name) { - return $this->call_method('facebook.data.getObjectProperty', - array('obj_id' => $obj_id, - 'prop_name' => $prop_name)); - } - - /** - * Get properties of an object. - * - * @param obj_id object's id - * @param prop_names (optional) properties to return; null for all. - * @return specified properties of an object - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getObject($obj_id, $prop_names = null) { - return $this->call_method('facebook.data.getObject', - array('obj_id' => $obj_id, - 'prop_names' => json_encode($prop_names))); - } - - /** - * Get properties of a list of objects. - * - * @param obj_ids object ids - * @param prop_names (optional) properties to return; null for all. - * @return specified properties of an object - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getObjects($obj_ids, $prop_names = null) { - return $this->call_method('facebook.data.getObjects', - array('obj_ids' => json_encode($obj_ids), - 'prop_names' => json_encode($prop_names))); - } - - /** - * Set a single property value of an object. - * - * @param obj_id object's id - * @param prop_name individual property's name - * @param prop_value new value to set - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_setObjectProperty($obj_id, $prop_name, - $prop_value) { - return $this->call_method('facebook.data.setObjectProperty', - array('obj_id' => $obj_id, - 'prop_name' => $prop_name, - 'prop_value' => $prop_value)); - } - - /** - * Read hash value by key. - * - * @param obj_type object type's name - * @param key hash key - * @param prop_name (optional) individual property's name - * @return hash value - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getHashValue($obj_type, $key, $prop_name = null) { - return $this->call_method('facebook.data.getHashValue', - array('obj_type' => $obj_type, - 'key' => $key, - 'prop_name' => $prop_name)); - } - - /** - * Write hash value by key. - * - * @param obj_type object type's name - * @param key hash key - * @param value hash value - * @param prop_name (optional) individual property's name - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_setHashValue($obj_type, - $key, - $value, - $prop_name = null) { - return $this->call_method('facebook.data.setHashValue', - array('obj_type' => $obj_type, - 'key' => $key, - 'value' => $value, - 'prop_name' => $prop_name)); - } - - /** - * Increase a hash value by specified increment atomically. - * - * @param obj_type object type's name - * @param key hash key - * @param prop_name individual property's name - * @param increment (optional) default is 1 - * @return incremented hash value - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_incHashValue($obj_type, - $key, - $prop_name, - $increment = 1) { - return $this->call_method('facebook.data.incHashValue', - array('obj_type' => $obj_type, - 'key' => $key, - 'prop_name' => $prop_name, - 'increment' => $increment)); - } - - /** - * Remove a hash key and its values. - * - * @param obj_type object type's name - * @param key hash key - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_removeHashKey($obj_type, $key) { - return $this->call_method('facebook.data.removeHashKey', - array('obj_type' => $obj_type, - 'key' => $key)); - } - - /** - * Remove hash keys and their values. - * - * @param obj_type object type's name - * @param keys hash keys - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_removeHashKeys($obj_type, $keys) { - return $this->call_method('facebook.data.removeHashKeys', - array('obj_type' => $obj_type, - 'keys' => json_encode($keys))); - } - - /** - * Define an object association. - * - * @param name name of this association - * @param assoc_type 1: one-way 2: two-way symmetric 3: two-way asymmetric - * @param assoc_info1 needed info about first object type - * @param assoc_info2 needed info about second object type - * @param inverse (optional) name of reverse association - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_ALREADY_EXISTS - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_defineAssociation($name, $assoc_type, $assoc_info1, - $assoc_info2, $inverse = null) { - return $this->call_method('facebook.data.defineAssociation', - array('name' => $name, - 'assoc_type' => $assoc_type, - 'assoc_info1' => json_encode($assoc_info1), - 'assoc_info2' => json_encode($assoc_info2), - 'inverse' => $inverse)); - } - - /** - * Undefine an object association. - * - * @param name name of this association - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_undefineAssociation($name) { - return $this->call_method('facebook.data.undefineAssociation', - array('name' => $name)); - } - - /** - * Rename an object association or aliases. - * - * @param name name of this association - * @param new_name (optional) new name of this association - * @param new_alias1 (optional) new alias for object type 1 - * @param new_alias2 (optional) new alias for object type 2 - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_ALREADY_EXISTS - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_renameAssociation($name, $new_name, $new_alias1 = null, - $new_alias2 = null) { - return $this->call_method('facebook.data.renameAssociation', - array('name' => $name, - 'new_name' => $new_name, - 'new_alias1' => $new_alias1, - 'new_alias2' => $new_alias2)); - } - - /** - * Get definition of an object association. - * - * @param name name of this association - * @return specified association - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getAssociationDefinition($name) { - return $this->call_method('facebook.data.getAssociationDefinition', - array('name' => $name)); - } - - /** - * Get definition of all associations. - * - * @return all defined associations - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PERMISSION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getAssociationDefinitions() { - return $this->call_method('facebook.data.getAssociationDefinitions', - array()); - } - - /** - * Create or modify an association between two objects. - * - * @param name name of association - * @param obj_id1 id of first object - * @param obj_id2 id of second object - * @param data (optional) extra string data to store - * @param assoc_time (optional) extra time data; default to creation time - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_setAssociation($name, $obj_id1, $obj_id2, $data = null, - $assoc_time = null) { - return $this->call_method('facebook.data.setAssociation', - array('name' => $name, - 'obj_id1' => $obj_id1, - 'obj_id2' => $obj_id2, - 'data' => $data, - 'assoc_time' => $assoc_time)); - } - - /** - * Create or modify associations between objects. - * - * @param assocs associations to set - * @param name (optional) name of association - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_setAssociations($assocs, $name = null) { - return $this->call_method('facebook.data.setAssociations', - array('assocs' => json_encode($assocs), - 'name' => $name)); - } - - /** - * Remove an association between two objects. - * - * @param name name of association - * @param obj_id1 id of first object - * @param obj_id2 id of second object - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_removeAssociation($name, $obj_id1, $obj_id2) { - return $this->call_method('facebook.data.removeAssociation', - array('name' => $name, - 'obj_id1' => $obj_id1, - 'obj_id2' => $obj_id2)); - } - - /** - * Remove associations between objects by specifying pairs of object ids. - * - * @param assocs associations to remove - * @param name (optional) name of association - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_removeAssociations($assocs, $name = null) { - return $this->call_method('facebook.data.removeAssociations', - array('assocs' => json_encode($assocs), - 'name' => $name)); - } - - /** - * Remove associations between objects by specifying one object id. - * - * @param name name of association - * @param obj_id who's association to remove - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_removeAssociatedObjects($name, $obj_id) { - return $this->call_method('facebook.data.removeAssociatedObjects', - array('name' => $name, - 'obj_id' => $obj_id)); - } - - /** - * Retrieve a list of associated objects. - * - * @param name name of association - * @param obj_id who's association to retrieve - * @param no_data only return object ids - * @return associated objects - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getAssociatedObjects($name, $obj_id, $no_data = true) { - return $this->call_method('facebook.data.getAssociatedObjects', - array('name' => $name, - 'obj_id' => $obj_id, - 'no_data' => $no_data)); - } - - /** - * Count associated objects. - * - * @param name name of association - * @param obj_id who's association to retrieve - * @return associated object's count - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getAssociatedObjectCount($name, $obj_id) { - return $this->call_method('facebook.data.getAssociatedObjectCount', - array('name' => $name, - 'obj_id' => $obj_id)); - } - - /** - * Get a list of associated object counts. - * - * @param name name of association - * @param obj_ids whose association to retrieve - * @return associated object counts - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_DATA_OBJECT_NOT_FOUND - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_INVALID_OPERATION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getAssociatedObjectCounts($name, $obj_ids) { - return $this->call_method('facebook.data.getAssociatedObjectCounts', - array('name' => $name, - 'obj_ids' => json_encode($obj_ids))); - } - - /** - * Find all associations between two objects. - * - * @param obj_id1 id of first object - * @param obj_id2 id of second object - * @param no_data only return association names without data - * @return all associations between objects - * @error - * API_EC_DATA_DATABASE_ERROR - * API_EC_PARAM - * API_EC_PERMISSION - * API_EC_DATA_QUOTA_EXCEEDED - * API_EC_DATA_UNKNOWN_ERROR - */ - public function &data_getAssociations($obj_id1, $obj_id2, $no_data = true) { - return $this->call_method('facebook.data.getAssociations', - array('obj_id1' => $obj_id1, - 'obj_id2' => $obj_id2, - 'no_data' => $no_data)); - } - - /** - * Get the properties that you have set for an app. - * - * @param properties List of properties names to fetch - * - * @return array A map from property name to value - */ - public function admin_getAppProperties($properties) { - return json_decode( - $this->call_method('facebook.admin.getAppProperties', - array('properties' => json_encode($properties))), true); - } - - /** - * Set properties for an app. - * - * @param properties A map from property names to values - * - * @return bool true on success - */ - public function admin_setAppProperties($properties) { - return $this->call_method('facebook.admin.setAppProperties', - array('properties' => json_encode($properties))); - } - - /** - * Sets href and text for a Live Stream Box xid's via link - * - * @param string $xid xid of the Live Stream - * @param string $via_href Href for the via link - * @param string $via_text Text for the via link - * - * @return boolWhether the set was successful - */ - public function admin_setLiveStreamViaLink($xid, $via_href, $via_text) { - return $this->call_method('facebook.admin.setLiveStreamViaLink', - array('xid' => $xid, - 'via_href' => $via_href, - 'via_text' => $via_text)); - } - - /** - * Gets href and text for a Live Stream Box xid's via link - * - * @param string $xid xid of the Live Stream - * - * @return Array Associative array with keys 'via_href' and 'via_text' - * False if there was an error. - */ - public function admin_getLiveStreamViaLink($xid) { - return $this->call_method('facebook.admin.getLiveStreamViaLink', - array('xid' => $xid)); - } - - /** - * Returns the allocation limit value for a specified integration point name - * Integration point names are defined in lib/api/karma/constants.php in the - * limit_map. - * - * @param string $integration_point_name Name of an integration point - * (see developer wiki for list). - * @param int $uid Specific user to check the limit. - * - * @return int Integration point allocation value - */ - public function &admin_getAllocation($integration_point_name, $uid=null) { - return $this->call_method('facebook.admin.getAllocation', - array('integration_point_name' => $integration_point_name, - 'uid' => $uid)); - } - - /** - * Returns values for the specified metrics for the current application, in - * the given time range. The metrics are collected for fixed-length periods, - * and the times represent midnight at the end of each period. - * - * @param start_time unix time for the start of the range - * @param end_time unix time for the end of the range - * @param period number of seconds in the desired period - * @param metrics list of metrics to look up - * - * @return array A map of the names and values for those metrics - */ - public function &admin_getMetrics($start_time, $end_time, $period, $metrics) { - return $this->call_method('admin.getMetrics', - array('start_time' => $start_time, - 'end_time' => $end_time, - 'period' => $period, - 'metrics' => json_encode($metrics))); - } - - /** - * Sets application restriction info. - * - * Applications can restrict themselves to only a limited user demographic - * based on users' age and/or location or based on static predefined types - * specified by facebook for specifying diff age restriction for diff - * locations. - * - * @param array $restriction_info The age restriction settings to set. - * - * @return bool true on success - */ - public function admin_setRestrictionInfo($restriction_info = null) { - $restriction_str = null; - if (!empty($restriction_info)) { - $restriction_str = json_encode($restriction_info); - } - return $this->call_method('admin.setRestrictionInfo', - array('restriction_str' => $restriction_str)); - } - - /** - * Gets application restriction info. - * - * Applications can restrict themselves to only a limited user demographic - * based on users' age and/or location or based on static predefined types - * specified by facebook for specifying diff age restriction for diff - * locations. - * - * @return array The age restriction settings for this application. - */ - public function admin_getRestrictionInfo() { - return json_decode( - $this->call_method('admin.getRestrictionInfo'), - true); - } - - - /** - * Bans a list of users from the app. Banned users can't - * access the app's canvas page and forums. - * - * @param array $uids an array of user ids - * @return bool true on success - */ - public function admin_banUsers($uids) { - return $this->call_method( - 'admin.banUsers', array('uids' => json_encode($uids))); - } - - /** - * Unban users that have been previously banned with - * admin_banUsers(). - * - * @param array $uids an array of user ids - * @return bool true on success - */ - public function admin_unbanUsers($uids) { - return $this->call_method( - 'admin.unbanUsers', array('uids' => json_encode($uids))); - } - - /** - * Gets the list of users that have been banned from the application. - * $uids is an optional parameter that filters the result with the list - * of provided user ids. If $uids is provided, - * only banned user ids that are contained in $uids are returned. - * - * @param array $uids an array of user ids to filter by - * @return bool true on success - */ - - public function admin_getBannedUsers($uids = null) { - return $this->call_method( - 'admin.getBannedUsers', - array('uids' => $uids ? json_encode($uids) : null)); - } - - - /* UTILITY FUNCTIONS */ - - /** - * Calls the specified normal POST method with the specified parameters. - * - * @param string $method Name of the Facebook method to invoke - * @param array $params A map of param names => param values - * - * @return mixed Result of method call; this returns a reference to support - * 'delayed returns' when in a batch context. - * See: http://wiki.developers.facebook.com/index.php/Using_batching_API - */ - public function &call_method($method, $params = array()) { - if ($this->format) { - $params['format'] = $this->format; - } - if (!$this->pending_batch()) { - if ($this->call_as_apikey) { - $params['call_as_apikey'] = $this->call_as_apikey; - } - $data = $this->post_request($method, $params); - $this->rawData = $data; - $result = $this->convert_result($data, $method, $params); - if (is_array($result) && isset($result['error_code'])) { - throw new FacebookRestClientException($result['error_msg'], - $result['error_code']); - } - } - else { - $result = null; - $batch_item = array('m' => $method, 'p' => $params, 'r' => & $result); - $this->batch_queue[] = $batch_item; - } - - return $result; - } - - protected function convert_result($data, $method, $params) { - $is_xml = (empty($params['format']) || - strtolower($params['format']) != 'json'); - return ($is_xml) ? $this->convert_xml_to_result($data, $method, $params) - : json_decode($data, true); - } - - /** - * Change the response format - * - * @param string $format The response format (json, xml) - */ - public function setFormat($format) { - $this->format = $format; - return $this; - } - - /** - * get the current response serialization format - * - * @return string 'xml', 'json', or null (which means 'xml') - */ - public function getFormat() { - return $this->format; - } - - /** - * Returns the raw JSON or XML output returned by the server in the most - * recent API call. - * - * @return string - */ - public function getRawData() { - return $this->rawData; - } - - /** - * Calls the specified file-upload POST method with the specified parameters - * - * @param string $method Name of the Facebook method to invoke - * @param array $params A map of param names => param values - * @param string $file A path to the file to upload (required) - * - * @return array A dictionary representing the response. - */ - public function call_upload_method($method, $params, $file, $server_addr = null) { - if (!$this->pending_batch()) { - if (!file_exists($file)) { - $code = - FacebookAPIErrorCodes::API_EC_PARAM; - $description = FacebookAPIErrorCodes::$api_error_descriptions[$code]; - throw new FacebookRestClientException($description, $code); - } - - if ($this->format) { - $params['format'] = $this->format; - } - $data = $this->post_upload_request($method, - $params, - $file, - $server_addr); - $result = $this->convert_result($data, $method, $params); - - if (is_array($result) && isset($result['error_code'])) { - throw new FacebookRestClientException($result['error_msg'], - $result['error_code']); - } - } - else { - $code = - FacebookAPIErrorCodes::API_EC_BATCH_METHOD_NOT_ALLOWED_IN_BATCH_MODE; - $description = FacebookAPIErrorCodes::$api_error_descriptions[$code]; - throw new FacebookRestClientException($description, $code); - } - - return $result; - } - - protected function convert_xml_to_result($xml, $method, $params) { - $sxml = simplexml_load_string($xml); - $result = self::convert_simplexml_to_array($sxml); - - if (!empty($GLOBALS['facebook_config']['debug'])) { - // output the raw xml and its corresponding php object, for debugging: - print '
'; - $this->cur_id++; - print $this->cur_id . ': Called ' . $method . ', show ' . - 'Params | '. - 'XML | '. - 'SXML | '. - 'PHP'; - print ''; - print ''; - print ''; - print ''; - print '
'; - } - return $result; - } - - protected function finalize_params($method, $params) { - list($get, $post) = $this->add_standard_params($method, $params); - // we need to do this before signing the params - $this->convert_array_values_to_json($post); - $post['sig'] = Facebook::generate_sig(array_merge($get, $post), - $this->secret); - return array($get, $post); - } - - private function convert_array_values_to_json(&$params) { - foreach ($params as $key => &$val) { - if (is_array($val)) { - $val = json_encode($val); - } - } - } - - /** - * Add the generally required params to our request. - * Params method, api_key, and v should be sent over as get. - */ - private function add_standard_params($method, $params) { - $post = $params; - $get = array(); - if ($this->call_as_apikey) { - $get['call_as_apikey'] = $this->call_as_apikey; - } - if ($this->using_session_secret) { - $get['ss'] = '1'; - } - - $get['method'] = $method; - $get['session_key'] = $this->session_key; - $get['api_key'] = $this->api_key; - $post['call_id'] = microtime(true); - if ($post['call_id'] <= $this->last_call_id) { - $post['call_id'] = $this->last_call_id + 0.001; - } - $this->last_call_id = $post['call_id']; - if (isset($post['v'])) { - $get['v'] = $post['v']; - unset($post['v']); - } else { - $get['v'] = '1.0'; - } - if (isset($this->use_ssl_resources)) { - $post['return_ssl_resources'] = (bool) $this->use_ssl_resources; - } - return array($get, $post); - } - - private function create_url_string($params) { - $post_params = array(); - foreach ($params as $key => &$val) { - $post_params[] = $key.'='.urlencode($val); - } - return implode('&', $post_params); - } - - private function run_multipart_http_transaction($method, $params, $file, $server_addr) { - - // the format of this message is specified in RFC1867/RFC1341. - // we add twenty pseudo-random digits to the end of the boundary string. - $boundary = '--------------------------FbMuLtIpArT' . - sprintf("%010d", mt_rand()) . - sprintf("%010d", mt_rand()); - $content_type = 'multipart/form-data; boundary=' . $boundary; - // within the message, we prepend two extra hyphens. - $delimiter = '--' . $boundary; - $close_delimiter = $delimiter . '--'; - $content_lines = array(); - foreach ($params as $key => &$val) { - $content_lines[] = $delimiter; - $content_lines[] = 'Content-Disposition: form-data; name="' . $key . '"'; - $content_lines[] = ''; - $content_lines[] = $val; - } - // now add the file data - $content_lines[] = $delimiter; - $content_lines[] = - 'Content-Disposition: form-data; filename="' . $file . '"'; - $content_lines[] = 'Content-Type: application/octet-stream'; - $content_lines[] = ''; - $content_lines[] = file_get_contents($file); - $content_lines[] = $close_delimiter; - $content_lines[] = ''; - $content = implode("\r\n", $content_lines); - return $this->run_http_post_transaction($content_type, $content, $server_addr); - } - - public function post_request($method, $params) { - list($get, $post) = $this->finalize_params($method, $params); - $post_string = $this->create_url_string($post); - $get_string = $this->create_url_string($get); - $url_with_get = $this->server_addr . '?' . $get_string; - if ($this->use_curl_if_available && function_exists('curl_init')) { - $useragent = 'Facebook API PHP5 Client 1.1 (curl) ' . phpversion(); - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url_with_get); - curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_USERAGENT, $useragent); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); - curl_setopt($ch, CURLOPT_TIMEOUT, 30); - $result = $this->curl_exec($ch); - curl_close($ch); - } else { - $content_type = 'application/x-www-form-urlencoded'; - $content = $post_string; - $result = $this->run_http_post_transaction($content_type, - $content, - $url_with_get); - } - return $result; - } - - /** - * execute a curl transaction -- this exists mostly so subclasses can add - * extra options and/or process the response, if they wish. - * - * @param resource $ch a curl handle - */ - protected function curl_exec($ch) { - $result = curl_exec($ch); - return $result; - } - - protected function post_upload_request($method, $params, $file, $server_addr = null) { - $server_addr = $server_addr ? $server_addr : $this->server_addr; - list($get, $post) = $this->finalize_params($method, $params); - $get_string = $this->create_url_string($get); - $url_with_get = $server_addr . '?' . $get_string; - if ($this->use_curl_if_available && function_exists('curl_init')) { - // prepending '@' causes cURL to upload the file; the key is ignored. - $post['_file'] = '@' . $file; - $useragent = 'Facebook API PHP5 Client 1.1 (curl) ' . phpversion(); - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url_with_get); - // this has to come before the POSTFIELDS set! - curl_setopt($ch, CURLOPT_POST, 1); - // passing an array gets curl to use the multipart/form-data content type - curl_setopt($ch, CURLOPT_POSTFIELDS, $post); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_USERAGENT, $useragent); - $result = $this->curl_exec($ch); - curl_close($ch); - } else { - $result = $this->run_multipart_http_transaction($method, $post, - $file, $url_with_get); - } - return $result; - } - - private function run_http_post_transaction($content_type, $content, $server_addr) { - - $user_agent = 'Facebook API PHP5 Client 1.1 (non-curl) ' . phpversion(); - $content_length = strlen($content); - $context = - array('http' => - array('method' => 'POST', - 'user_agent' => $user_agent, - 'header' => 'Content-Type: ' . $content_type . "\r\n" . - 'Content-Length: ' . $content_length, - 'content' => $content)); - $context_id = stream_context_create($context); - $sock = fopen($server_addr, 'r', false, $context_id); - - $result = ''; - if ($sock) { - while (!feof($sock)) { - $result .= fgets($sock, 4096); - } - fclose($sock); - } - return $result; - } - - public static function convert_simplexml_to_array($sxml) { - $arr = array(); - if ($sxml) { - foreach ($sxml as $k => $v) { - if ($sxml['list']) { - $arr[] = self::convert_simplexml_to_array($v); - } else { - $arr[$k] = self::convert_simplexml_to_array($v); - } - } - } - if (sizeof($arr) > 0) { - return $arr; - } else { - return (string)$sxml; - } - } - - protected function get_uid($uid) { - return $uid ? $uid : $this->user; - } -} - - -class FacebookRestClientException extends Exception { -} - -// Supporting methods and values------ - -/** - * Error codes and descriptions for the Facebook API. - */ - -class FacebookAPIErrorCodes { - - const API_EC_SUCCESS = 0; - - /* - * GENERAL ERRORS - */ - const API_EC_UNKNOWN = 1; - const API_EC_SERVICE = 2; - const API_EC_METHOD = 3; - const API_EC_TOO_MANY_CALLS = 4; - const API_EC_BAD_IP = 5; - const API_EC_HOST_API = 6; - const API_EC_HOST_UP = 7; - const API_EC_SECURE = 8; - const API_EC_RATE = 9; - const API_EC_PERMISSION_DENIED = 10; - const API_EC_DEPRECATED = 11; - const API_EC_VERSION = 12; - const API_EC_INTERNAL_FQL_ERROR = 13; - const API_EC_HOST_PUP = 14; - const API_EC_SESSION_SECRET_NOT_ALLOWED = 15; - const API_EC_HOST_READONLY = 16; - - /* - * PARAMETER ERRORS - */ - const API_EC_PARAM = 100; - const API_EC_PARAM_API_KEY = 101; - const API_EC_PARAM_SESSION_KEY = 102; - const API_EC_PARAM_CALL_ID = 103; - const API_EC_PARAM_SIGNATURE = 104; - const API_EC_PARAM_TOO_MANY = 105; - const API_EC_PARAM_USER_ID = 110; - const API_EC_PARAM_USER_FIELD = 111; - const API_EC_PARAM_SOCIAL_FIELD = 112; - const API_EC_PARAM_EMAIL = 113; - const API_EC_PARAM_USER_ID_LIST = 114; - const API_EC_PARAM_FIELD_LIST = 115; - const API_EC_PARAM_ALBUM_ID = 120; - const API_EC_PARAM_PHOTO_ID = 121; - const API_EC_PARAM_FEED_PRIORITY = 130; - const API_EC_PARAM_CATEGORY = 140; - const API_EC_PARAM_SUBCATEGORY = 141; - const API_EC_PARAM_TITLE = 142; - const API_EC_PARAM_DESCRIPTION = 143; - const API_EC_PARAM_BAD_JSON = 144; - const API_EC_PARAM_BAD_EID = 150; - const API_EC_PARAM_UNKNOWN_CITY = 151; - const API_EC_PARAM_BAD_PAGE_TYPE = 152; - const API_EC_PARAM_BAD_LOCALE = 170; - const API_EC_PARAM_BLOCKED_NOTIFICATION = 180; - - /* - * USER PERMISSIONS ERRORS - */ - const API_EC_PERMISSION = 200; - const API_EC_PERMISSION_USER = 210; - const API_EC_PERMISSION_NO_DEVELOPERS = 211; - const API_EC_PERMISSION_OFFLINE_ACCESS = 212; - const API_EC_PERMISSION_ALBUM = 220; - const API_EC_PERMISSION_PHOTO = 221; - const API_EC_PERMISSION_MESSAGE = 230; - const API_EC_PERMISSION_OTHER_USER = 240; - const API_EC_PERMISSION_STATUS_UPDATE = 250; - const API_EC_PERMISSION_PHOTO_UPLOAD = 260; - const API_EC_PERMISSION_VIDEO_UPLOAD = 261; - const API_EC_PERMISSION_SMS = 270; - const API_EC_PERMISSION_CREATE_LISTING = 280; - const API_EC_PERMISSION_CREATE_NOTE = 281; - const API_EC_PERMISSION_SHARE_ITEM = 282; - const API_EC_PERMISSION_EVENT = 290; - const API_EC_PERMISSION_LARGE_FBML_TEMPLATE = 291; - const API_EC_PERMISSION_LIVEMESSAGE = 292; - const API_EC_PERMISSION_CREATE_EVENT = 296; - const API_EC_PERMISSION_RSVP_EVENT = 299; - - /* - * DATA EDIT ERRORS - */ - const API_EC_EDIT = 300; - const API_EC_EDIT_USER_DATA = 310; - const API_EC_EDIT_PHOTO = 320; - const API_EC_EDIT_ALBUM_SIZE = 321; - const API_EC_EDIT_PHOTO_TAG_SUBJECT = 322; - const API_EC_EDIT_PHOTO_TAG_PHOTO = 323; - const API_EC_EDIT_PHOTO_FILE = 324; - const API_EC_EDIT_PHOTO_PENDING_LIMIT = 325; - const API_EC_EDIT_PHOTO_TAG_LIMIT = 326; - const API_EC_EDIT_ALBUM_REORDER_PHOTO_NOT_IN_ALBUM = 327; - const API_EC_EDIT_ALBUM_REORDER_TOO_FEW_PHOTOS = 328; - - const API_EC_MALFORMED_MARKUP = 329; - const API_EC_EDIT_MARKUP = 330; - - const API_EC_EDIT_FEED_TOO_MANY_USER_CALLS = 340; - const API_EC_EDIT_FEED_TOO_MANY_USER_ACTION_CALLS = 341; - const API_EC_EDIT_FEED_TITLE_LINK = 342; - const API_EC_EDIT_FEED_TITLE_LENGTH = 343; - const API_EC_EDIT_FEED_TITLE_NAME = 344; - const API_EC_EDIT_FEED_TITLE_BLANK = 345; - const API_EC_EDIT_FEED_BODY_LENGTH = 346; - const API_EC_EDIT_FEED_PHOTO_SRC = 347; - const API_EC_EDIT_FEED_PHOTO_LINK = 348; - - const API_EC_EDIT_VIDEO_SIZE = 350; - const API_EC_EDIT_VIDEO_INVALID_FILE = 351; - const API_EC_EDIT_VIDEO_INVALID_TYPE = 352; - const API_EC_EDIT_VIDEO_FILE = 353; - - const API_EC_EDIT_FEED_TITLE_ARRAY = 360; - const API_EC_EDIT_FEED_TITLE_PARAMS = 361; - const API_EC_EDIT_FEED_BODY_ARRAY = 362; - const API_EC_EDIT_FEED_BODY_PARAMS = 363; - const API_EC_EDIT_FEED_PHOTO = 364; - const API_EC_EDIT_FEED_TEMPLATE = 365; - const API_EC_EDIT_FEED_TARGET = 366; - const API_EC_EDIT_FEED_MARKUP = 367; - - /** - * SESSION ERRORS - */ - const API_EC_SESSION_TIMED_OUT = 450; - const API_EC_SESSION_METHOD = 451; - const API_EC_SESSION_INVALID = 452; - const API_EC_SESSION_REQUIRED = 453; - const API_EC_SESSION_REQUIRED_FOR_SECRET = 454; - const API_EC_SESSION_CANNOT_USE_SESSION_SECRET = 455; - - - /** - * FQL ERRORS - */ - const FQL_EC_UNKNOWN_ERROR = 600; - const FQL_EC_PARSER = 601; // backwards compatibility - const FQL_EC_PARSER_ERROR = 601; - const FQL_EC_UNKNOWN_FIELD = 602; - const FQL_EC_UNKNOWN_TABLE = 603; - const FQL_EC_NOT_INDEXABLE = 604; // backwards compatibility - const FQL_EC_NO_INDEX = 604; - const FQL_EC_UNKNOWN_FUNCTION = 605; - const FQL_EC_INVALID_PARAM = 606; - const FQL_EC_INVALID_FIELD = 607; - const FQL_EC_INVALID_SESSION = 608; - const FQL_EC_UNSUPPORTED_APP_TYPE = 609; - const FQL_EC_SESSION_SECRET_NOT_ALLOWED = 610; - const FQL_EC_DEPRECATED_TABLE = 611; - const FQL_EC_EXTENDED_PERMISSION = 612; - const FQL_EC_RATE_LIMIT_EXCEEDED = 613; - const FQL_EC_UNRESOLVED_DEPENDENCY = 614; - const FQL_EC_INVALID_SEARCH = 615; - const FQL_EC_CONTAINS_ERROR = 616; - - const API_EC_REF_SET_FAILED = 700; - - /** - * DATA STORE API ERRORS - */ - const API_EC_DATA_UNKNOWN_ERROR = 800; - const API_EC_DATA_INVALID_OPERATION = 801; - const API_EC_DATA_QUOTA_EXCEEDED = 802; - const API_EC_DATA_OBJECT_NOT_FOUND = 803; - const API_EC_DATA_OBJECT_ALREADY_EXISTS = 804; - const API_EC_DATA_DATABASE_ERROR = 805; - const API_EC_DATA_CREATE_TEMPLATE_ERROR = 806; - const API_EC_DATA_TEMPLATE_EXISTS_ERROR = 807; - const API_EC_DATA_TEMPLATE_HANDLE_TOO_LONG = 808; - const API_EC_DATA_TEMPLATE_HANDLE_ALREADY_IN_USE = 809; - const API_EC_DATA_TOO_MANY_TEMPLATE_BUNDLES = 810; - const API_EC_DATA_MALFORMED_ACTION_LINK = 811; - const API_EC_DATA_TEMPLATE_USES_RESERVED_TOKEN = 812; - - /* - * APPLICATION INFO ERRORS - */ - const API_EC_NO_SUCH_APP = 900; - - /* - * BATCH ERRORS - */ - const API_EC_BATCH_TOO_MANY_ITEMS = 950; - const API_EC_BATCH_ALREADY_STARTED = 951; - const API_EC_BATCH_NOT_STARTED = 952; - const API_EC_BATCH_METHOD_NOT_ALLOWED_IN_BATCH_MODE = 953; - - /* - * EVENT API ERRORS - */ - const API_EC_EVENT_INVALID_TIME = 1000; - const API_EC_EVENT_NAME_LOCKED = 1001; - - /* - * INFO BOX ERRORS - */ - const API_EC_INFO_NO_INFORMATION = 1050; - const API_EC_INFO_SET_FAILED = 1051; - - /* - * LIVEMESSAGE API ERRORS - */ - const API_EC_LIVEMESSAGE_SEND_FAILED = 1100; - const API_EC_LIVEMESSAGE_EVENT_NAME_TOO_LONG = 1101; - const API_EC_LIVEMESSAGE_MESSAGE_TOO_LONG = 1102; - - /* - * PAYMENTS API ERRORS - */ - const API_EC_PAYMENTS_UNKNOWN = 1150; - const API_EC_PAYMENTS_APP_INVALID = 1151; - const API_EC_PAYMENTS_DATABASE = 1152; - const API_EC_PAYMENTS_PERMISSION_DENIED = 1153; - const API_EC_PAYMENTS_APP_NO_RESPONSE = 1154; - const API_EC_PAYMENTS_APP_ERROR_RESPONSE = 1155; - const API_EC_PAYMENTS_INVALID_ORDER = 1156; - const API_EC_PAYMENTS_INVALID_PARAM = 1157; - const API_EC_PAYMENTS_INVALID_OPERATION = 1158; - const API_EC_PAYMENTS_PAYMENT_FAILED = 1159; - const API_EC_PAYMENTS_DISABLED = 1160; - - /* - * CONNECT SESSION ERRORS - */ - const API_EC_CONNECT_FEED_DISABLED = 1300; - - /* - * Platform tag bundles errors - */ - const API_EC_TAG_BUNDLE_QUOTA = 1400; - - /* - * SHARE - */ - const API_EC_SHARE_BAD_URL = 1500; - - /* - * NOTES - */ - const API_EC_NOTE_CANNOT_MODIFY = 1600; - - /* - * COMMENTS - */ - const API_EC_COMMENTS_UNKNOWN = 1700; - const API_EC_COMMENTS_POST_TOO_LONG = 1701; - const API_EC_COMMENTS_DB_DOWN = 1702; - const API_EC_COMMENTS_INVALID_XID = 1703; - const API_EC_COMMENTS_INVALID_UID = 1704; - const API_EC_COMMENTS_INVALID_POST = 1705; - const API_EC_COMMENTS_INVALID_REMOVE = 1706; - - /* - * GIFTS - */ - const API_EC_GIFTS_UNKNOWN = 1900; - - /* - * APPLICATION MORATORIUM ERRORS - */ - const API_EC_DISABLED_ALL = 2000; - const API_EC_DISABLED_STATUS = 2001; - const API_EC_DISABLED_FEED_STORIES = 2002; - const API_EC_DISABLED_NOTIFICATIONS = 2003; - const API_EC_DISABLED_REQUESTS = 2004; - const API_EC_DISABLED_EMAIL = 2005; - - /** - * This array is no longer maintained; to view the description of an error - * code, please look at the message element of the API response or visit - * the developer wiki at http://wiki.developers.facebook.com/. - */ - public static $api_error_descriptions = array( - self::API_EC_SUCCESS => 'Success', - self::API_EC_UNKNOWN => 'An unknown error occurred', - self::API_EC_SERVICE => 'Service temporarily unavailable', - self::API_EC_METHOD => 'Unknown method', - self::API_EC_TOO_MANY_CALLS => 'Application request limit reached', - self::API_EC_BAD_IP => 'Unauthorized source IP address', - self::API_EC_PARAM => 'Invalid parameter', - self::API_EC_PARAM_API_KEY => 'Invalid API key', - self::API_EC_PARAM_SESSION_KEY => 'Session key invalid or no longer valid', - self::API_EC_PARAM_CALL_ID => 'Call_id must be greater than previous', - self::API_EC_PARAM_SIGNATURE => 'Incorrect signature', - self::API_EC_PARAM_USER_ID => 'Invalid user id', - self::API_EC_PARAM_USER_FIELD => 'Invalid user info field', - self::API_EC_PARAM_SOCIAL_FIELD => 'Invalid user field', - self::API_EC_PARAM_USER_ID_LIST => 'Invalid user id list', - self::API_EC_PARAM_FIELD_LIST => 'Invalid field list', - self::API_EC_PARAM_ALBUM_ID => 'Invalid album id', - self::API_EC_PARAM_BAD_EID => 'Invalid eid', - self::API_EC_PARAM_UNKNOWN_CITY => 'Unknown city', - self::API_EC_PERMISSION => 'Permissions error', - self::API_EC_PERMISSION_USER => 'User not visible', - self::API_EC_PERMISSION_NO_DEVELOPERS => 'Application has no developers', - self::API_EC_PERMISSION_ALBUM => 'Album not visible', - self::API_EC_PERMISSION_PHOTO => 'Photo not visible', - self::API_EC_PERMISSION_EVENT => 'Creating and modifying events required the extended permission create_event', - self::API_EC_PERMISSION_RSVP_EVENT => 'RSVPing to events required the extended permission rsvp_event', - self::API_EC_EDIT_ALBUM_SIZE => 'Album is full', - self::FQL_EC_PARSER => 'FQL: Parser Error', - self::FQL_EC_UNKNOWN_FIELD => 'FQL: Unknown Field', - self::FQL_EC_UNKNOWN_TABLE => 'FQL: Unknown Table', - self::FQL_EC_NOT_INDEXABLE => 'FQL: Statement not indexable', - self::FQL_EC_UNKNOWN_FUNCTION => 'FQL: Attempted to call unknown function', - self::FQL_EC_INVALID_PARAM => 'FQL: Invalid parameter passed in', - self::API_EC_DATA_UNKNOWN_ERROR => 'Unknown data store API error', - self::API_EC_DATA_INVALID_OPERATION => 'Invalid operation', - self::API_EC_DATA_QUOTA_EXCEEDED => 'Data store allowable quota was exceeded', - self::API_EC_DATA_OBJECT_NOT_FOUND => 'Specified object cannot be found', - self::API_EC_DATA_OBJECT_ALREADY_EXISTS => 'Specified object already exists', - self::API_EC_DATA_DATABASE_ERROR => 'A database error occurred. Please try again', - self::API_EC_BATCH_ALREADY_STARTED => 'begin_batch already called, please make sure to call end_batch first', - self::API_EC_BATCH_NOT_STARTED => 'end_batch called before begin_batch', - self::API_EC_BATCH_METHOD_NOT_ALLOWED_IN_BATCH_MODE => 'This method is not allowed in batch mode' - ); -} diff --git a/plugins/FacebookSSO/extlib/jsonwrapper/JSON/JSON.php b/plugins/FacebookSSO/extlib/jsonwrapper/JSON/JSON.php deleted file mode 100644 index 0cddbddb41..0000000000 --- a/plugins/FacebookSSO/extlib/jsonwrapper/JSON/JSON.php +++ /dev/null @@ -1,806 +0,0 @@ - - * @author Matt Knapp - * @author Brett Stimmerman - * @copyright 2005 Michal Migurski - * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ - * @license http://www.opensource.org/licenses/bsd-license.php - * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 - */ - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_SLICE', 1); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_STR', 2); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_ARR', 3); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_OBJ', 4); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_CMT', 5); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_LOOSE_TYPE', 16); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_SUPPRESS_ERRORS', 32); - -/** - * Converts to and from JSON format. - * - * Brief example of use: - * - * - * // create a new instance of Services_JSON - * $json = new Services_JSON(); - * - * // convert a complexe value to JSON notation, and send it to the browser - * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); - * $output = $json->encode($value); - * - * print($output); - * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] - * - * // accept incoming POST data, assumed to be in JSON notation - * $input = file_get_contents('php://input', 1000000); - * $value = $json->decode($input); - * - */ -class Services_JSON -{ - /** - * constructs a new JSON instance - * - * @param int $use object behavior flags; combine with boolean-OR - * - * possible values: - * - SERVICES_JSON_LOOSE_TYPE: loose typing. - * "{...}" syntax creates associative arrays - * instead of objects in decode(). - * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. - * Values which can't be encoded (e.g. resources) - * appear as NULL instead of throwing errors. - * By default, a deeply-nested resource will - * bubble up with an error, so all return values - * from encode() should be checked with isError() - */ - function Services_JSON($use = 0) - { - $this->use = $use; - } - - /** - * convert a string from one UTF-16 char to one UTF-8 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf16 UTF-16 character - * @return string UTF-8 character - * @access private - */ - function utf162utf8($utf16) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); - } - - $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); - - switch(true) { - case ((0x7F & $bytes) == $bytes): - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x7F & $bytes); - - case (0x07FF & $bytes) == $bytes: - // return a 2-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xC0 | (($bytes >> 6) & 0x1F)) - . chr(0x80 | ($bytes & 0x3F)); - - case (0xFFFF & $bytes) == $bytes: - // return a 3-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xE0 | (($bytes >> 12) & 0x0F)) - . chr(0x80 | (($bytes >> 6) & 0x3F)) - . chr(0x80 | ($bytes & 0x3F)); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * convert a string from one UTF-8 char to one UTF-16 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf8 UTF-8 character - * @return string UTF-16 character - * @access private - */ - function utf82utf16($utf8) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); - } - - switch(strlen($utf8)) { - case 1: - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return $utf8; - - case 2: - // return a UTF-16 character from a 2-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x07 & (ord($utf8{0}) >> 2)) - . chr((0xC0 & (ord($utf8{0}) << 6)) - | (0x3F & ord($utf8{1}))); - - case 3: - // return a UTF-16 character from a 3-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr((0xF0 & (ord($utf8{0}) << 4)) - | (0x0F & (ord($utf8{1}) >> 2))) - . chr((0xC0 & (ord($utf8{1}) << 6)) - | (0x7F & ord($utf8{2}))); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * encodes an arbitrary variable into JSON format - * - * @param mixed $var any number, boolean, string, array, or object to be encoded. - * see argument 1 to Services_JSON() above for array-parsing behavior. - * if var is a strng, note that encode() always expects it - * to be in ASCII or UTF-8 format! - * - * @return mixed JSON string representation of input var or an error if a problem occurs - * @access public - */ - function encode($var) - { - switch (gettype($var)) { - case 'boolean': - return $var ? 'true' : 'false'; - - case 'NULL': - return 'null'; - - case 'integer': - return (int) $var; - - case 'double': - case 'float': - return (float) $var; - - case 'string': - // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT - $ascii = ''; - $strlen_var = strlen($var); - - /* - * Iterate over every character in the string, - * escaping with a slash or encoding to UTF-8 where necessary - */ - for ($c = 0; $c < $strlen_var; ++$c) { - - $ord_var_c = ord($var{$c}); - - switch (true) { - case $ord_var_c == 0x08: - $ascii .= '\b'; - break; - case $ord_var_c == 0x09: - $ascii .= '\t'; - break; - case $ord_var_c == 0x0A: - $ascii .= '\n'; - break; - case $ord_var_c == 0x0C: - $ascii .= '\f'; - break; - case $ord_var_c == 0x0D: - $ascii .= '\r'; - break; - - case $ord_var_c == 0x22: - case $ord_var_c == 0x2F: - case $ord_var_c == 0x5C: - // double quote, slash, slosh - $ascii .= '\\'.$var{$c}; - break; - - case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): - // characters U-00000000 - U-0000007F (same as ASCII) - $ascii .= $var{$c}; - break; - - case (($ord_var_c & 0xE0) == 0xC0): - // characters U-00000080 - U-000007FF, mask 110XXXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, ord($var{$c + 1})); - $c += 1; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF0) == 0xE0): - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2})); - $c += 2; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF8) == 0xF0): - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3})); - $c += 3; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFC) == 0xF8): - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4})); - $c += 4; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFE) == 0xFC): - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4}), - ord($var{$c + 5})); - $c += 5; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - } - } - - return '"'.$ascii.'"'; - - case 'array': - /* - * As per JSON spec if any array key is not an integer - * we must treat the the whole array as an object. We - * also try to catch a sparsely populated associative - * array with numeric keys here because some JS engines - * will create an array with empty indexes up to - * max_index which can cause memory issues and because - * the keys, which may be relevant, will be remapped - * otherwise. - * - * As per the ECMA and JSON specification an object may - * have any string as a property. Unfortunately due to - * a hole in the ECMA specification if the key is a - * ECMA reserved word or starts with a digit the - * parameter is only accessible using ECMAScript's - * bracket notation. - */ - - // treat as a JSON object - if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { - $properties = array_map(array($this, 'name_value'), - array_keys($var), - array_values($var)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - } - - // treat it like a regular array - $elements = array_map(array($this, 'encode'), $var); - - foreach($elements as $element) { - if(Services_JSON::isError($element)) { - return $element; - } - } - - return '[' . join(',', $elements) . ']'; - - case 'object': - $vars = get_object_vars($var); - - $properties = array_map(array($this, 'name_value'), - array_keys($vars), - array_values($vars)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - - default: - return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) - ? 'null' - : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); - } - } - - /** - * array-walking function for use in generating JSON-formatted name-value pairs - * - * @param string $name name of key to use - * @param mixed $value reference to an array element to be encoded - * - * @return string JSON-formatted name-value pair, like '"name":value' - * @access private - */ - function name_value($name, $value) - { - $encoded_value = $this->encode($value); - - if(Services_JSON::isError($encoded_value)) { - return $encoded_value; - } - - return $this->encode(strval($name)) . ':' . $encoded_value; - } - - /** - * reduce a string by removing leading and trailing comments and whitespace - * - * @param $str string string value to strip of comments and whitespace - * - * @return string string value stripped of comments and whitespace - * @access private - */ - function reduce_string($str) - { - $str = preg_replace(array( - - // eliminate single line comments in '// ...' form - '#^\s*//(.+)$#m', - - // eliminate multi-line comments in '/* ... */' form, at start of string - '#^\s*/\*(.+)\*/#Us', - - // eliminate multi-line comments in '/* ... */' form, at end of string - '#/\*(.+)\*/\s*$#Us' - - ), '', $str); - - // eliminate extraneous space - return trim($str); - } - - /** - * decodes a JSON string into appropriate variable - * - * @param string $str JSON-formatted string - * - * @return mixed number, boolean, string, array, or object - * corresponding to given JSON input string. - * See argument 1 to Services_JSON() above for object-output behavior. - * Note that decode() always returns strings - * in ASCII or UTF-8 format! - * @access public - */ - function decode($str) - { - $str = $this->reduce_string($str); - - switch (strtolower($str)) { - case 'true': - return true; - - case 'false': - return false; - - case 'null': - return null; - - default: - $m = array(); - - if (is_numeric($str)) { - // Lookie-loo, it's a number - - // This would work on its own, but I'm trying to be - // good about returning integers where appropriate: - // return (float)$str; - - // Return float or int, as appropriate - return ((float)$str == (integer)$str) - ? (integer)$str - : (float)$str; - - } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { - // STRINGS RETURNED IN UTF-8 FORMAT - $delim = substr($str, 0, 1); - $chrs = substr($str, 1, -1); - $utf8 = ''; - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c < $strlen_chrs; ++$c) { - - $substr_chrs_c_2 = substr($chrs, $c, 2); - $ord_chrs_c = ord($chrs{$c}); - - switch (true) { - case $substr_chrs_c_2 == '\b': - $utf8 .= chr(0x08); - ++$c; - break; - case $substr_chrs_c_2 == '\t': - $utf8 .= chr(0x09); - ++$c; - break; - case $substr_chrs_c_2 == '\n': - $utf8 .= chr(0x0A); - ++$c; - break; - case $substr_chrs_c_2 == '\f': - $utf8 .= chr(0x0C); - ++$c; - break; - case $substr_chrs_c_2 == '\r': - $utf8 .= chr(0x0D); - ++$c; - break; - - case $substr_chrs_c_2 == '\\"': - case $substr_chrs_c_2 == '\\\'': - case $substr_chrs_c_2 == '\\\\': - case $substr_chrs_c_2 == '\\/': - if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || - ($delim == "'" && $substr_chrs_c_2 != '\\"')) { - $utf8 .= $chrs{++$c}; - } - break; - - case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): - // single, escaped unicode character - $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) - . chr(hexdec(substr($chrs, ($c + 4), 2))); - $utf8 .= $this->utf162utf8($utf16); - $c += 5; - break; - - case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): - $utf8 .= $chrs{$c}; - break; - - case ($ord_chrs_c & 0xE0) == 0xC0: - // characters U-00000080 - U-000007FF, mask 110XXXXX - //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 2); - ++$c; - break; - - case ($ord_chrs_c & 0xF0) == 0xE0: - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 3); - $c += 2; - break; - - case ($ord_chrs_c & 0xF8) == 0xF0: - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 4); - $c += 3; - break; - - case ($ord_chrs_c & 0xFC) == 0xF8: - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 5); - $c += 4; - break; - - case ($ord_chrs_c & 0xFE) == 0xFC: - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 6); - $c += 5; - break; - - } - - } - - return $utf8; - - } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { - // array, or object notation - - if ($str{0} == '[') { - $stk = array(SERVICES_JSON_IN_ARR); - $arr = array(); - } else { - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = array(); - } else { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = new stdClass(); - } - } - - array_push($stk, array('what' => SERVICES_JSON_SLICE, - 'where' => 0, - 'delim' => false)); - - $chrs = substr($str, 1, -1); - $chrs = $this->reduce_string($chrs); - - if ($chrs == '') { - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } else { - return $obj; - - } - } - - //print("\nparsing {$chrs}\n"); - - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c <= $strlen_chrs; ++$c) { - - $top = end($stk); - $substr_chrs_c_2 = substr($chrs, $c, 2); - - if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { - // found a comma that is not inside a string, array, etc., - // OR we've reached the end of the character list - $slice = substr($chrs, $top['where'], ($c - $top['where'])); - array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); - //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - // we are in an array, so just push an element onto the stack - array_push($arr, $this->decode($slice)); - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - // we are in an object, so figure - // out the property name and set an - // element in an associative array, - // for now - $parts = array(); - - if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // "name":value pair - $key = $this->decode($parts[1]); - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // name:value pair, where name is unquoted - $key = $parts[1]; - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } - - } - - } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { - // found a quote, and we are not inside a string - array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); - //print("Found start of string at {$c}\n"); - - } elseif (($chrs{$c} == $top['delim']) && - ($top['what'] == SERVICES_JSON_IN_STR) && - ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { - // found a quote, we're in a string, and it's not escaped - // we know that it's not escaped becase there is _not_ an - // odd number of backslashes at the end of the string so far - array_pop($stk); - //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '[') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-bracket, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); - //print("Found start of array at {$c}\n"); - - } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { - // found a right-bracket, and we're in an array - array_pop($stk); - //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '{') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-brace, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); - //print("Found start of object at {$c}\n"); - - } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { - // found a right-brace, and we're in an object - array_pop($stk); - //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($substr_chrs_c_2 == '/*') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a comment start, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); - $c++; - //print("Found start of comment at {$c}\n"); - - } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { - // found a comment end, and we're in one now - array_pop($stk); - $c++; - - for ($i = $top['where']; $i <= $c; ++$i) - $chrs = substr_replace($chrs, ' ', $i, 1); - - //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } - - } - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - return $obj; - - } - - } - } - } - - /** - * @todo Ultimately, this should just call PEAR::isError() - */ - function isError($data, $code = null) - { - if (class_exists('pear')) { - return PEAR::isError($data, $code); - } elseif (is_object($data) && (get_class($data) == 'services_json_error' || - is_subclass_of($data, 'services_json_error'))) { - return true; - } - - return false; - } -} - -if (class_exists('PEAR_Error')) { - - class Services_JSON_Error extends PEAR_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - parent::PEAR_Error($message, $code, $mode, $options, $userinfo); - } - } - -} else { - - /** - * @todo Ultimately, this class shall be descended from PEAR_Error - */ - class Services_JSON_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - - } - } - -} - -?> diff --git a/plugins/FacebookSSO/extlib/jsonwrapper/JSON/LICENSE b/plugins/FacebookSSO/extlib/jsonwrapper/JSON/LICENSE deleted file mode 100644 index 4ae6bef55d..0000000000 --- a/plugins/FacebookSSO/extlib/jsonwrapper/JSON/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN -NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper.php b/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper.php deleted file mode 100644 index 29509debad..0000000000 --- a/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper.php +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper_inner.php b/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper_inner.php deleted file mode 100644 index 36a3f28635..0000000000 --- a/plugins/FacebookSSO/extlib/jsonwrapper/jsonwrapper_inner.php +++ /dev/null @@ -1,23 +0,0 @@ -encode($arg); -} - -function json_decode($arg) -{ - global $services_json; - if (!isset($services_json)) { - $services_json = new Services_JSON(); - } - return $services_json->decode($arg); -} - -?> diff --git a/plugins/FacebookSSO/lib/facebookclient.php b/plugins/FacebookSSO/lib/facebookclient.php index a0549a1d01..cf45c9ed95 100644 --- a/plugins/FacebookSSO/lib/facebookclient.php +++ b/plugins/FacebookSSO/lib/facebookclient.php @@ -47,9 +47,9 @@ class Facebookclient protected $flink = null; // Foreign_link StatusNet -> Facebook protected $notice = null; // The user's notice protected $user = null; // Sender of the notice - protected $oldRestClient = null; // Old REST API client + //protected $oldRestClient = null; // Old REST API client - function __constructor($notice) + function __construct($notice) { $this->facebook = self::getFacebook(); $this->notice = $notice; @@ -58,29 +58,8 @@ class Facebookclient $notice->profile_id, FACEBOOK_SERVICE ); - + $this->user = $this->flink->getUser(); - - $this->oldRestClient = self::getOldRestClient(); - } - - /* - * Get and instance of the old REST API client for sending notices from - * users with Facebook links that pre-exist the Graph API - */ - static function getOldRestClient() - { - $apikey = common_config('facebook', 'apikey'); - $secret = common_config('facebook', 'secret'); - - // If there's no app key and secret set in the local config, look - // for a global one - if (empty($apikey) || empty($secret)) { - $apikey = common_config('facebook', 'global_apikey'); - $secret = common_config('facebook', 'global_secret'); - } - - return new FacebookRestClient($apikey, $secret, null); } /* @@ -125,8 +104,9 @@ class Facebookclient */ static function facebookBroadcastNotice($notice) { + common_debug('Facebook broadcast'); $client = new Facebookclient($notice); - $client->sendNotice(); + return $client->sendNotice(); } /* @@ -191,12 +171,24 @@ class Facebookclient // If there's nothing in the credentials field try to send via // the Old Rest API - if (empty($this->flink->credentials)) { - $this->sendOldRest(); - } else { + if ($this->isFacebookBound()) { + common_debug("notice is facebook bound", __FILE__); + if (empty($this->flink->credentials)) { + $this->sendOldRest(); + } else { - // Otherwise we most likely have an access token - $this->sendGraph(); + // Otherwise we most likely have an access token + $this->sendGraph(); + } + + } else { + common_debug( + sprintf( + "Skipping notice %d - not bound for Facebook", + $this->notice->id, + __FILE__ + ) + ); } } @@ -205,7 +197,55 @@ class Facebookclient */ function sendGraph() { - common_debug("Send notice via Graph API", __FILE__); + try { + + $fbuid = $this->flink->foreign_id; + + common_debug( + sprintf( + "Attempting use Graph API to post notice %d as a stream item for %s (%d), fbuid %s", + $this->notice->id, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + + $params = array( + 'access_token' => $this->flink->credentials, + 'message' => $this->notice->content + ); + + $attachments = $this->notice->attachments(); + + if (!empty($attachments)) { + + // We can only send one attachment with the Graph API + + $first = array_shift($attachments); + + if (substr($first->mimetype, 0, 6) == 'image/' + || in_array( + $first->mimetype, + array('application/x-shockwave-flash', 'audio/mpeg' ))) { + + $params['picture'] = $first->url; + $params['caption'] = 'Click for full size'; + $params['source'] = $first->url; + } + + } + + $result = $this->facebook->api( + sprintf('/%s/feed', $fbuid), 'post', $params + ); + + } catch (FacebookApiException $e) { + return $this->handleFacebookError($e); + } + + return true; } /* @@ -216,40 +256,40 @@ class Facebookclient */ function sendOldRest() { - if (isFacebookBound()) { + try { - try { + $canPublish = $this->checkPermission('publish_stream'); + $canUpdate = $this->checkPermission('status_update'); - $canPublish = $this->checkPermission('publish_stream'); - $canUpdate = $this->checkPermission('status_update'); + // We prefer to use stream.publish, because it can handle + // attachments and returns the ID of the published item - // Post to Facebook - if ($notice->hasAttachments() && $canPublish == 1) { - $this->restPublishStream(); - } elseif ($canUpdate == 1 || $canPublish == 1) { - $this->restStatusUpdate(); - } else { + if ($canPublish == 1) { + $this->restPublishStream(); + } else if ($canUpdate == 1) { + // as a last resort we can just update the user's "status" + $this->restStatusUpdate(); + } else { - $msg = 'Not sending notice %d to Facebook because user %s ' - . '(%d), fbuid %s, does not have \'status_update\' ' - . 'or \'publish_stream\' permission.'; + $msg = 'Not sending notice %d to Facebook because user %s ' + . '(%d), fbuid %s, does not have \'status_update\' ' + . 'or \'publish_stream\' permission.'; - common_log( - LOG_WARNING, - sprintf( - $msg, - $this->notice->id, - $this->user->nickname, - $this->user->id, - $this->flink->foreign_id - ), - __FILE__ - ); - } - - } catch (FacebookRestClientException $e) { - return $this->handleFacebookError($e); + common_log( + LOG_WARNING, + sprintf( + $msg, + $this->notice->id, + $this->user->nickname, + $this->user->id, + $this->flink->foreign_id + ), + __FILE__ + ); } + + } catch (FacebookApiException $e) { + return $this->handleFacebookError($e); } return true; @@ -267,12 +307,11 @@ class Facebookclient */ function checkPermission($permission) { - if (!in_array($permission, array('publish_stream', 'status_update'))) { - throw new ServerExpception("No such permission!"); + throw new ServerException("No such permission!"); } - $fbuid = $this->flink->foreign_link; + $fbuid = $this->flink->foreign_id; common_debug( sprintf( @@ -285,24 +324,14 @@ class Facebookclient __FILE__ ); - // NOTE: $this->oldRestClient->users_hasAppPermission() has been - // returning bogus results, so we're using FQL to check for - // permissions - - $fql = sprintf( - "SELECT %s FROM permissions WHERE uid = %s", - $permission, - $fbuid + $hasPermission = $this->facebook->api( + array( + 'method' => 'users.hasAppPermission', + 'ext_perm' => $permission, + 'uid' => $fbuid + ) ); - $result = $this->oldRestClient->fql_query($fql); - - $hasPermission = 0; - - if (isset($result[0][$permission])) { - $canPublish = $result[0][$permission]; - } - if ($hasPermission == 1) { common_debug( @@ -338,14 +367,27 @@ class Facebookclient return false; } - } + /* + * Handle a Facebook API Exception + * + * @param FacebookApiException $e the exception + * + */ function handleFacebookError($e) { $fbuid = $this->flink->foreign_id; - $code = $e->getCode(); $errmsg = $e->getMessage(); + $code = $e->getCode(); + + // The Facebook PHP SDK seems to always set the code attribute + // of the Exception to 0; they put the real error code it in + // the message. Gar! + if ($code == 0) { + preg_match('/^\(#(?\d+)\)/', $errmsg, $matches); + $code = $matches['code']; + } // XXX: Check for any others? switch($code) { @@ -414,6 +456,14 @@ class Facebookclient } } + /* + * Publish a notice to Facebook as a status update + * + * This is the least preferable way to send a notice to Facebook because + * it doesn't support attachments and the API method doesn't return + * the ID of the post on Facebook. + * + */ function restStatusUpdate() { $fbuid = $this->flink->foreign_id; @@ -429,11 +479,13 @@ class Facebookclient __FILE__ ); - $result = $this->oldRestClient->users_setStatus( - $this->notice->content, - $fbuid, - false, - true + $result = $this->facebook->api( + array( + 'method' => 'users.setStatus', + 'status' => $this->notice->content, + 'status_includes_verb' => true, + 'uid' => $fbuid + ) ); common_log( @@ -447,16 +499,19 @@ class Facebookclient ), __FILE__ ); + } + /* + * Publish a notice to a Facebook user's stream using the old REST API + */ function restPublishStream() { $fbuid = $this->flink->foreign_id; common_debug( sprintf( - 'Attempting to post notice %d as stream item with attachment for ' - . '%s (%d) fbuid %s', + 'Attempting to post notice %d as stream item for %s (%d) fbuid %s', $this->notice->id, $this->user->nickname, $this->user->id, @@ -465,42 +520,52 @@ class Facebookclient __FILE__ ); - $fbattachment = format_attachments($notice->attachments()); + $fbattachment = $this->formatAttachments(); - $this->oldRestClient->stream_publish( - $this->notice->content, - $fbattachment, - null, - null, - $fbuid + $result = $this->facebook->api( + array( + 'method' => 'stream.publish', + 'message' => $this->notice->content, + 'attachment' => $fbattachment, + 'uid' => $fbuid + ) ); common_log( LOG_INFO, sprintf( - 'Posted notice %d as a stream item with attachment for %s ' - . '(%d), fbuid %s', + 'Posted notice %d as a %s for %s (%d), fbuid %s', $this->notice->id, + empty($fbattachment) ? 'stream item' : 'stream item with attachment', $this->user->nickname, $this->user->id, $fbuid ), __FILE__ ); - + } - function format_attachments($attachments) + /* + * Format attachments for the old REST API stream.publish method + * + * Note: Old REST API supports multiple attachments per post + * + */ + function formatAttachments() { + + $attachments = $this->notice->attachments(); + $fbattachment = array(); $fbattachment['media'] = array(); foreach($attachments as $attachment) { if($enclosure = $attachment->getEnclosure()){ - $fbmedia = get_fbmedia_for_attachment($enclosure); + $fbmedia = $this->getFacebookMedia($enclosure); }else{ - $fbmedia = get_fbmedia_for_attachment($attachment); + $fbmedia = $this->getFacebookMedia($attachment); } if($fbmedia){ $fbattachment['media'][]=$fbmedia; @@ -518,9 +583,9 @@ class Facebookclient } /** - * given an File objects, returns an associative array suitable for Facebook media + * given a File objects, returns an associative array suitable for Facebook media */ - function get_fbmedia_for_attachment($attachment) + function getFacebookMedia($attachment) { $fbmedia = array(); @@ -545,9 +610,13 @@ class Facebookclient return $fbmedia; } + /* + * Disconnect a user from Facebook by deleting his Foreign_link. + * Notifies the user his account has been disconnected by email. + */ function disconnect() { - $fbuid = $this->flink->foreign_link; + $fbuid = $this->flink->foreign_id; common_log( LOG_INFO, @@ -560,7 +629,7 @@ class Facebookclient __FILE__ ); - $result = $flink->delete(); + $result = $this->flink->delete(); if (empty($result)) { common_log( @@ -631,7 +700,7 @@ BODY; $this->user->nickname, $siteName ); - + common_switch_locale(); return mail_to_user($this->user, $subject, $body); diff --git a/plugins/FacebookSSO/lib/facebookqueuehandler.php b/plugins/FacebookSSO/lib/facebookqueuehandler.php index af96d35c49..1e82ff01b1 100644 --- a/plugins/FacebookSSO/lib/facebookqueuehandler.php +++ b/plugins/FacebookSSO/lib/facebookqueuehandler.php @@ -31,8 +31,6 @@ if (!defined('STATUSNET')) { exit(1); } -require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php'; - class FacebookQueueHandler extends QueueHandler { function transport() @@ -43,7 +41,7 @@ class FacebookQueueHandler extends QueueHandler function handle($notice) { if ($this->_isLocal($notice)) { - return facebookBroadcastNotice($notice); + return Facebookclient::facebookBroadcastNotice($notice); } return true; } From c36fecb79431218016615cde45215337d67fee67 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 8 Nov 2010 17:20:04 -0800 Subject: [PATCH 040/220] Save a thumbnail image when uploading an image file into the file attachments system. Currently hardcoded to 100x75, needs aspect-sensitivity etc. --- classes/File_thumbnail.php | 30 ++++++++++++++++++++++++++---- lib/mediafile.php | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/classes/File_thumbnail.php b/classes/File_thumbnail.php index edae8ac21a..d371b9e8aa 100644 --- a/classes/File_thumbnail.php +++ b/classes/File_thumbnail.php @@ -48,12 +48,34 @@ class File_thumbnail extends Memcached_DataObject return array(false, false, false); } - function saveNew($data, $file_id) { + /** + * Save oEmbed-provided thumbnail data + * + * @param object $data + * @param int $file_id + */ + public static function saveNew($data, $file_id) { + self::saveThumbnail($file_id, + $data->thumbnail_url, + $data->thumbnail_width, + $data->thumbnail_height); + } + + /** + * Save a thumbnail record for the referenced file record. + * + * @param int $file_id + * @param string $url + * @param int $width + * @param int $height + */ + static function saveThumbnail($file_id, $url, $width, $height) + { $tn = new File_thumbnail; $tn->file_id = $file_id; - $tn->url = $data->thumbnail_url; - $tn->width = intval($data->thumbnail_width); - $tn->height = intval($data->thumbnail_height); + $tn->url = $url; + $tn->width = intval($width); + $tn->height = intval($height); $tn->insert(); } } diff --git a/lib/mediafile.php b/lib/mediafile.php index aad3575d72..2c04b46501 100644 --- a/lib/mediafile.php +++ b/lib/mediafile.php @@ -48,11 +48,14 @@ class MediaFile { if ($user == null) { $this->user = common_current_user(); + } else { + $this->user = $user; } $this->filename = $filename; $this->mimetype = $mimetype; $this->fileRecord = $this->storeFile(); + $this->thumbnailRecord = $this->storeThumbnail(); $this->fileurl = common_local_url('attachment', array('attachment' => $this->fileRecord->id)); @@ -102,6 +105,38 @@ class MediaFile return $file; } + /** + * Generate and store a thumbnail image for the uploaded file, if applicable. + * + * @return File_thumbnail or null + */ + function storeThumbnail() + { + if (substr($this->mimetype, 0, strlen('image/')) != 'image/') { + // @fixme video thumbs would be nice! + return null; + } + try { + $image = new ImageFile($this->fileRecord->id, + File::path($this->filename)); + } catch (Exception $e) { + // Unsupported image type. + return null; + } + + $outname = File::filename($this->user->getProfile(), 'thumb-' . $this->filename, $this->mimetype); + $outpath = File::path($outname); + + $width = 100; + $height = 75; + + $image->resizeTo($outpath, $width, $height); + File_thumbnail::saveThumbnail($this->fileRecord->id, + File::url($outname), + $width, + $height); + } + function rememberFile($file, $short) { $this->maybeAddRedir($file->id, $short); From 6d7f02ff31c6c929223030b051541b1bf103f3a8 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 8 Nov 2010 17:22:01 -0800 Subject: [PATCH 041/220] Pass file attachment thumbnails along with oEmbed data. --- actions/oembed.php | 6 ++++++ classes/File.php | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/actions/oembed.php b/actions/oembed.php index da3aa0c716..11d8145837 100644 --- a/actions/oembed.php +++ b/actions/oembed.php @@ -112,6 +112,12 @@ class OembedAction extends Action //$oembed['width']= //$oembed['height']= $oembed['url']=$attachment->url; + $thumb = $attachment->getThumbnail(); + if ($thumb) { + $oembed['thumbnail_url'] = $thumb->url; + $oembed['thumbnail_width'] = $thumb->width; + $oembed['thumbnail_height'] = $thumb->height; + } }else{ $oembed['type']='link'; $oembed['url']=common_local_url('attachment', diff --git a/classes/File.php b/classes/File.php index e3b922d13b..56bc73ab25 100644 --- a/classes/File.php +++ b/classes/File.php @@ -384,4 +384,14 @@ class File extends Memcached_DataObject $enclosure = $this->getEnclosure(); return !empty($enclosure); } + + /** + * Get the attachment's thumbnail record, if any. + * + * @return File_thumbnail + */ + function getThumbnail() + { + return File_thumbnail::staticGet('file_id', $this->id); + } } From 694448e0aa81edb7b010f102ee9ee0e6961f6f7c Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 8 Nov 2010 17:36:02 -0800 Subject: [PATCH 042/220] Add attachments 'thumb_width' and 'thumb_height' settings for inline thumbs, defaulting to 100x75. This is used as the max thumb width/height for oEmbed requests (replacing the old default of 500x400 which was more suitable for the lightbox). --- classes/File_oembed.php | 6 +++--- lib/default.php | 2 ++ lib/mediafile.php | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/classes/File_oembed.php b/classes/File_oembed.php index 4813d5dda5..a5540ecfee 100644 --- a/classes/File_oembed.php +++ b/classes/File_oembed.php @@ -58,11 +58,11 @@ class File_oembed extends Memcached_DataObject return array(false, false, false); } - function _getOembed($url, $maxwidth = 500, $maxheight = 400) { + function _getOembed($url) { require_once INSTALLDIR.'/extlib/Services/oEmbed.php'; $parameters = array( - 'maxwidth'=>$maxwidth, - 'maxheight'=>$maxheight, + 'maxwidth' => common_config('attachments', 'thumb_width'), + 'maxheight' => common_config('attachments', 'thumb_height'), ); try{ $oEmbed = new Services_oEmbed($url); diff --git a/lib/default.php b/lib/default.php index a19453fce4..87f4e45c0e 100644 --- a/lib/default.php +++ b/lib/default.php @@ -250,6 +250,8 @@ $default = 'monthly_quota' => 15000000, 'uploads' => true, 'filecommand' => '/usr/bin/file', + 'thumb_width' => 100, + 'thumb_height' => 75, ), 'application' => array('desclimit' => null), diff --git a/lib/mediafile.php b/lib/mediafile.php index 2c04b46501..febf4603a7 100644 --- a/lib/mediafile.php +++ b/lib/mediafile.php @@ -127,8 +127,8 @@ class MediaFile $outname = File::filename($this->user->getProfile(), 'thumb-' . $this->filename, $this->mimetype); $outpath = File::path($outname); - $width = 100; - $height = 75; + $width = common_config('attachments', 'thumb_width'); + $height = common_config('attachments', 'thumb_height'); $image->resizeTo($outpath, $width, $height); File_thumbnail::saveThumbnail($this->fileRecord->id, From 504529e8cd8fbaf5e8e1b980260d1d87d9e880ac Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 8 Nov 2010 17:51:53 -0800 Subject: [PATCH 043/220] Keep aspect ratio when generating local thumbnails --- lib/mediafile.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/mediafile.php b/lib/mediafile.php index febf4603a7..a41d7c76b5 100644 --- a/lib/mediafile.php +++ b/lib/mediafile.php @@ -127,8 +127,9 @@ class MediaFile $outname = File::filename($this->user->getProfile(), 'thumb-' . $this->filename, $this->mimetype); $outpath = File::path($outname); - $width = common_config('attachments', 'thumb_width'); - $height = common_config('attachments', 'thumb_height'); + $maxWidth = common_config('attachments', 'thumb_width'); + $maxHeight = common_config('attachments', 'thumb_height'); + list($width, $height) = $this->scaleToFit($image->width, $image->height, $maxWidth, $maxHeight); $image->resizeTo($outpath, $width, $height); File_thumbnail::saveThumbnail($this->fileRecord->id, @@ -137,6 +138,19 @@ class MediaFile $height); } + function scaleToFit($width, $height, $maxWidth, $maxHeight) + { + $aspect = $maxWidth / $maxHeight; + $w1 = $maxWidth; + $h1 = intval($height * $maxWidth / $width); + if ($h1 > $maxHeight) { + $w2 = intval($width * $maxHeight / $height); + $h2 = $maxHeight; + return array($w2, $h2); + } + return array($w1, $h1); + } + function rememberFile($file, $short) { $this->maybeAddRedir($file->id, $short); From 76aed36f38b6ee0f713dfdeb0e8afe2ad5723594 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 9 Nov 2010 06:59:16 -0500 Subject: [PATCH 044/220] set height and width of avatar td in email summary --- plugins/EmailSummary/useremailsummaryhandler.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php index 1ac1eaedbe..d6de6aa055 100644 --- a/plugins/EmailSummary/useremailsummaryhandler.php +++ b/plugins/EmailSummary/useremailsummaryhandler.php @@ -142,7 +142,8 @@ class UserEmailSummaryHandler extends QueueHandler $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); $out->elementStart('tr'); - $out->elementStart('td'); + $out->elementStart('td', array('width' => AVATAR_STREAM_SIZE, + 'height' => AVATAR_STREAM_SIZE)); $out->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage($avatar_size), From 17ab5c31ed255216a2b734e15e9d11bd4c6fce8b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 9 Nov 2010 07:04:50 -0500 Subject: [PATCH 045/220] some alignment in the table layout --- plugins/EmailSummary/useremailsummaryhandler.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php index d6de6aa055..95b7fdc477 100644 --- a/plugins/EmailSummary/useremailsummaryhandler.php +++ b/plugins/EmailSummary/useremailsummaryhandler.php @@ -143,16 +143,19 @@ class UserEmailSummaryHandler extends QueueHandler $out->elementStart('tr'); $out->elementStart('td', array('width' => AVATAR_STREAM_SIZE, - 'height' => AVATAR_STREAM_SIZE)); + 'height' => AVATAR_STREAM_SIZE, + 'align' => 'left', + 'valign' => 'top')); $out->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage($avatar_size), 'class' => 'avatar photo', - 'width' => $avatar_size, - 'height' => $avatar_size, + 'width' => AVATAR_STREAM_SIZE, + 'height' => AVATAR_STREAM_SIZE, 'alt' => $profile->getBestName())); $out->elementEnd('td'); - $out->elementStart('td'); + $out->elementStart('td', array('align' => 'left', + 'valign' => 'top')); $out->element('a', array('href' => $profile->profileurl), $profile->nickname); $out->text(' '); From 9ea1a9c6319202e0cbbcf76976b4b2c48b8f1f9b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 9 Nov 2010 12:53:57 -0500 Subject: [PATCH 046/220] session table was missing from upgrade scripts --- db/074to080.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/db/074to080.sql b/db/074to080.sql index ff08191596..e3631e214a 100644 --- a/db/074to080.sql +++ b/db/074to080.sql @@ -107,3 +107,15 @@ create table group_alias ( index group_alias_group_id_idx (group_id) ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + +create table session ( + + id varchar(32) primary key comment 'session ID', + session_data text comment 'session data', + created datetime not null comment 'date this record was created', + modified timestamp comment 'date this record was modified', + + index session_modified_idx (modified) + +) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + From e87323e426f032504a01a01ea0854065413fb177 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 9 Nov 2010 13:04:11 -0500 Subject: [PATCH 047/220] change width of notices table to display better --- plugins/EmailSummary/useremailsummaryhandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php index 95b7fdc477..fb004b5558 100644 --- a/plugins/EmailSummary/useremailsummaryhandler.php +++ b/plugins/EmailSummary/useremailsummaryhandler.php @@ -129,7 +129,7 @@ class UserEmailSummaryHandler extends QueueHandler $profile->getBestName())); - $out->elementStart('table', array('width' => '100%', 'style' => 'border: none')); + $out->elementStart('table', array('width' => '541px', 'style' => 'border: none')); while ($notice->fetch()) { From f25accc43ea1e66f290c8bc1d284ae04b4bf004f Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 9 Nov 2010 10:45:19 -0800 Subject: [PATCH 048/220] split out InlineAttachmentList from AttachmentList --- actions/shownotice.php | 9 ++++ lib/attachmentlist.php | 34 ++++++++----- lib/inlineattachmentlist.php | 97 ++++++++++++++++++++++++++++++++++++ lib/noticelist.php | 2 +- theme/base/css/display.css | 6 +++ 5 files changed, 134 insertions(+), 14 deletions(-) create mode 100644 lib/inlineattachmentlist.php diff --git a/actions/shownotice.php b/actions/shownotice.php index 7a11787b66..b4af7dbaa2 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -331,6 +331,15 @@ class SingleNoticeItem extends DoFollowListItem $this->showEnd(); } + /** + * For our zoomed-in special case we'll use a fuller list + * for the attachment info. + */ + function showNoticeAttachments() { + $al = new AttachmentList($this->notice, $this->out); + $al->show(); + } + /** * show the avatar of the notice's author * diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php index 8e6ad038a3..f9ef7499e1 100644 --- a/lib/attachmentlist.php +++ b/lib/attachmentlist.php @@ -79,23 +79,33 @@ class AttachmentList extends Widget $atts = new File; $att = $atts->getAttachments($this->notice->id); if (empty($att)) return 0; - $this->out->elementStart('dl', array('id' =>'attachments', - 'class' => 'entry-content')); - // TRANS: DT element label in attachment list. - $this->out->element('dt', null, _('Attachments')); - $this->out->elementStart('dd'); - $this->out->elementStart('ol', array('class' => 'attachments')); + $this->showListStart(); foreach ($att as $n=>$attachment) { $item = $this->newListItem($attachment); $item->show(); } + $this->showListEnd(); + + return count($att); + } + + function showListStart() + { + $this->out->elementStart('dl', array('id' =>'attachments', + 'class' => 'entry-content')); + // TRANS: DT element label in attachment list. + $this->out->element('dt', null, _('Attachments')); + $this->out->elementStart('dd'); + $this->out->elementStart('ol', array('class' => 'attachments')); + } + + function showListEnd() + { $this->out->elementEnd('dd'); $this->out->elementEnd('ol'); $this->out->elementEnd('dl'); - - return count($att); } /** @@ -181,11 +191,9 @@ class AttachmentListItem extends Widget */ function show() { - if ($this->attachment->isEnclosure()) { - $this->showStart(); - $this->showNoticeAttachment(); - $this->showEnd(); - } + $this->showStart(); + $this->showNoticeAttachment(); + $this->showEnd(); } function linkAttr() { diff --git a/lib/inlineattachmentlist.php b/lib/inlineattachmentlist.php new file mode 100644 index 0000000000..8b1a1cd9bb --- /dev/null +++ b/lib/inlineattachmentlist.php @@ -0,0 +1,97 @@ +. + * + * @category UI + * @package StatusNet + * @author Brion Vibber + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class InlineAttachmentList extends AttachmentList +{ + function showListStart() + { + $this->out->elementStart('div', array('class' => 'entry-content thumbnails')); + } + + function showListEnd() + { + $this->out->elementEnd('div'); + } + + /** + * returns a new list item for the current attachment + * + * @param File $notice the current attachment + * + * @return ListItem a list item for displaying the attachment + */ + function newListItem($attachment) + { + return new InlineAttachmentListItem($attachment, $this->out); + } +} + +class InlineAttachmentListItem extends AttachmentListItem +{ + function show() + { + if ($this->attachment->isEnclosure()) { + parent::show(); + } + } + + function showLink() { + $this->out->elementStart('a', $this->linkAttr()); + $this->showRepresentation(); + $this->out->elementEnd('a'); + } + + /** + * start a single notice. + * + * @return void + */ + function showStart() + { + // XXX: RDFa + // TODO: add notice_type class e.g., notice_video, notice_image + $this->out->elementStart('span', array('class' => 'inline-attachment')); + } + + /** + * finish the notice + * + * Close the last elements in the notice list item + * + * @return void + */ + function showEnd() + { + $this->out->elementEnd('span'); + } +} diff --git a/lib/noticelist.php b/lib/noticelist.php index fb5db2374c..d2ac7ed84a 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -385,7 +385,7 @@ class NoticeListItem extends Widget } function showNoticeAttachments() { - $al = new AttachmentList($this->notice, $this->out); + $al = new InlineAttachmentList($this->notice, $this->out); $al->show(); } diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 29f7d0ae0d..6615e13eb4 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -1728,6 +1728,12 @@ width:auto; min-width:0; } +.inline-attachment img { + /* Why on earth is this changed to block at the top? */ + display: inline; + border: solid 1px #aaa; + padding: 1px; +} }/*end of @media screen, projection, tv*/ From a988e2e97b4b790f3cbd9f755ebf61bf321e16f9 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 9 Nov 2010 15:00:30 -0500 Subject: [PATCH 049/220] hook points for the email settings form --- EVENTS.txt | 14 +++ actions/emailsettings.php | 173 ++++++++++++++++++++------------------ 2 files changed, 105 insertions(+), 82 deletions(-) diff --git a/EVENTS.txt b/EVENTS.txt index 675ac5437e..fed489705c 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -302,6 +302,20 @@ StartProfileSaveForm: before starting to save a profile settings form EndProfileSaveForm: after saving a profile settings form (after commit, no profile or user object!) - $action: action object being shown +StartEmailFormData: just before showing text entry fields on email settings page +- $action: action object being shown + +EndEmailFormData: just after showing text entry fields on email settings page +- $action: action object being shown + +StartEmailSaveForm: before starting to save a email settings form +- $action: action object being shown +- &$user: user being saved + +EndEmailSaveForm: after saving a email settings form (after commit) +- $action: action object being shown +- &$user: user being saved + StartRegistrationFormData: just before showing text entry fields on registration page - $action: action object being shown diff --git a/actions/emailsettings.php b/actions/emailsettings.php index 9c250fc8a9..5a816e5c0a 100644 --- a/actions/emailsettings.php +++ b/actions/emailsettings.php @@ -178,51 +178,55 @@ class EmailsettingsAction extends AccountSettingsAction $this->element('legend', null, _('Email preferences')); $this->elementStart('ul', 'form_data'); - $this->elementStart('li'); - $this->checkbox('emailnotifysub', - // TRANS: Checkbox label in e-mail preferences form. - _('Send me notices of new subscriptions through email.'), - $user->emailnotifysub); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->checkbox('emailnotifyfav', - // TRANS: Checkbox label in e-mail preferences form. - _('Send me email when someone '. - 'adds my notice as a favorite.'), - $user->emailnotifyfav); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->checkbox('emailnotifymsg', - // TRANS: Checkbox label in e-mail preferences form. - _('Send me email when someone sends me a private message.'), - $user->emailnotifymsg); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->checkbox('emailnotifyattn', - // TRANS: Checkbox label in e-mail preferences form. - _('Send me email when someone sends me an "@-reply".'), - $user->emailnotifyattn); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->checkbox('emailnotifynudge', - // TRANS: Checkbox label in e-mail preferences form. - _('Allow friends to nudge me and send me an email.'), - $user->emailnotifynudge); - $this->elementEnd('li'); - if (common_config('emailpost', 'enabled')) { - $this->elementStart('li'); - $this->checkbox('emailpost', - // TRANS: Checkbox label in e-mail preferences form. - _('I want to post notices by email.'), - $user->emailpost); - $this->elementEnd('li'); - } - $this->elementStart('li'); - $this->checkbox('emailmicroid', - // TRANS: Checkbox label in e-mail preferences form. - _('Publish a MicroID for my email address.'), - $user->emailmicroid); - $this->elementEnd('li'); + + if (Event::handle('StartEmailFormData', array($this))) { + $this->elementStart('li'); + $this->checkbox('emailnotifysub', + // TRANS: Checkbox label in e-mail preferences form. + _('Send me notices of new subscriptions through email.'), + $user->emailnotifysub); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->checkbox('emailnotifyfav', + // TRANS: Checkbox label in e-mail preferences form. + _('Send me email when someone '. + 'adds my notice as a favorite.'), + $user->emailnotifyfav); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->checkbox('emailnotifymsg', + // TRANS: Checkbox label in e-mail preferences form. + _('Send me email when someone sends me a private message.'), + $user->emailnotifymsg); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->checkbox('emailnotifyattn', + // TRANS: Checkbox label in e-mail preferences form. + _('Send me email when someone sends me an "@-reply".'), + $user->emailnotifyattn); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->checkbox('emailnotifynudge', + // TRANS: Checkbox label in e-mail preferences form. + _('Allow friends to nudge me and send me an email.'), + $user->emailnotifynudge); + $this->elementEnd('li'); + if (common_config('emailpost', 'enabled')) { + $this->elementStart('li'); + $this->checkbox('emailpost', + // TRANS: Checkbox label in e-mail preferences form. + _('I want to post notices by email.'), + $user->emailpost); + $this->elementEnd('li'); + } + $this->elementStart('li'); + $this->checkbox('emailmicroid', + // TRANS: Checkbox label in e-mail preferences form. + _('Publish a MicroID for my email address.'), + $user->emailmicroid); + $this->elementEnd('li'); + Event::handle('EndEmailFormData', array($this)); + } $this->elementEnd('ul'); // TRANS: Button label to save e-mail preferences. $this->submit('save', _m('BUTTON','Save')); @@ -299,43 +303,48 @@ class EmailsettingsAction extends AccountSettingsAction function savePreferences() { - $emailnotifysub = $this->boolean('emailnotifysub'); - $emailnotifyfav = $this->boolean('emailnotifyfav'); - $emailnotifymsg = $this->boolean('emailnotifymsg'); - $emailnotifynudge = $this->boolean('emailnotifynudge'); - $emailnotifyattn = $this->boolean('emailnotifyattn'); - $emailmicroid = $this->boolean('emailmicroid'); - $emailpost = $this->boolean('emailpost'); - - $user = common_current_user(); - - assert(!is_null($user)); // should already be checked - - $user->query('BEGIN'); - - $original = clone($user); - - $user->emailnotifysub = $emailnotifysub; - $user->emailnotifyfav = $emailnotifyfav; - $user->emailnotifymsg = $emailnotifymsg; - $user->emailnotifynudge = $emailnotifynudge; - $user->emailnotifyattn = $emailnotifyattn; - $user->emailmicroid = $emailmicroid; - $user->emailpost = $emailpost; - - $result = $user->update($original); - - if ($result === false) { - common_log_db_error($user, 'UPDATE', __FILE__); - // TRANS: Server error thrown on database error updating e-mail preferences. - $this->serverError(_('Couldn\'t update user.')); - return; - } - - $user->query('COMMIT'); - - // TRANS: Confirmation message for successful e-mail preferences save. - $this->showForm(_('Email preferences saved.'), true); + $user = common_current_user(); + + if (Event::handle('StartEmailSaveForm', array($this, &$user))) { + + $emailnotifysub = $this->boolean('emailnotifysub'); + $emailnotifyfav = $this->boolean('emailnotifyfav'); + $emailnotifymsg = $this->boolean('emailnotifymsg'); + $emailnotifynudge = $this->boolean('emailnotifynudge'); + $emailnotifyattn = $this->boolean('emailnotifyattn'); + $emailmicroid = $this->boolean('emailmicroid'); + $emailpost = $this->boolean('emailpost'); + + assert(!is_null($user)); // should already be checked + + $user->query('BEGIN'); + + $original = clone($user); + + $user->emailnotifysub = $emailnotifysub; + $user->emailnotifyfav = $emailnotifyfav; + $user->emailnotifymsg = $emailnotifymsg; + $user->emailnotifynudge = $emailnotifynudge; + $user->emailnotifyattn = $emailnotifyattn; + $user->emailmicroid = $emailmicroid; + $user->emailpost = $emailpost; + + $result = $user->update($original); + + if ($result === false) { + common_log_db_error($user, 'UPDATE', __FILE__); + // TRANS: Server error thrown on database error updating e-mail preferences. + $this->serverError(_('Couldn\'t update user.')); + return; + } + + $user->query('COMMIT'); + + Event::handle('EndEmailSaveForm', array($this)); + + // TRANS: Confirmation message for successful e-mail preferences save. + $this->showForm(_('Email preferences saved.'), true); + } } /** From dbb95b76a4d384fd62fd24b4d427baefd007cb90 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 9 Nov 2010 12:04:07 -0800 Subject: [PATCH 050/220] Allow YouTube-style media links to be counted as enclosures for purposes of listing attachments/thumbs --- classes/File.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/classes/File.php b/classes/File.php index 56bc73ab25..499c8d72c3 100644 --- a/classes/File.php +++ b/classes/File.php @@ -361,15 +361,19 @@ class File extends Memcached_DataObject if($semicolon){ $mimetype = substr($mimetype,0,$semicolon); } - if(in_array($mimetype,$notEnclosureMimeTypes)){ - return false; - }else{ + // @fixme uncertain if this is right. + // we want to expose things like YouTube videos as + // viewable attachments, but don't expose them as + // downloadable enclosures.....? + //if (in_array($mimetype, $notEnclosureMimeTypes)) { + // return false; + //} else { if($oembed->mimetype) $enclosure->mimetype=$oembed->mimetype; if($oembed->url) $enclosure->url=$oembed->url; if($oembed->title) $enclosure->title=$oembed->title; if($oembed->modified) $enclosure->modified=$oembed->modified; unset($oembed->size); - } + //} } else { return false; } From a4654bfe9f950fa3ca76d109f21030a03507c3da Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 9 Nov 2010 12:53:57 -0500 Subject: [PATCH 051/220] session table was missing from upgrade scripts --- db/074to080.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/db/074to080.sql b/db/074to080.sql index ff08191596..e3631e214a 100644 --- a/db/074to080.sql +++ b/db/074to080.sql @@ -107,3 +107,15 @@ create table group_alias ( index group_alias_group_id_idx (group_id) ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + +create table session ( + + id varchar(32) primary key comment 'session ID', + session_data text comment 'session data', + created datetime not null comment 'date this record was created', + modified timestamp comment 'date this record was modified', + + index session_modified_idx (modified) + +) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + From 3afb031d9270a29db7f1ac4a964bb4b796759827 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 9 Nov 2010 17:08:11 -0500 Subject: [PATCH 052/220] Missing one close-paren in newgroup.php --- actions/newgroup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/newgroup.php b/actions/newgroup.php index 2951920362..371e508379 100644 --- a/actions/newgroup.php +++ b/actions/newgroup.php @@ -147,7 +147,7 @@ class NewgroupAction extends Action $this->showForm(sprintf(_m('Description is too long (maximum %d character).', 'Description is too long (maximum %d characters).', User_group::maxDescription(), - User_group::maxDescription())); + User_group::maxDescription()))); return; } else if (!is_null($location) && mb_strlen($location) > 255) { $this->showForm(_('Location is too long (maximum 255 characters).')); From 17ae690d5937b9a9ac3c7cd8a37d461960ce4964 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 9 Nov 2010 23:14:50 +0000 Subject: [PATCH 053/220] Make a richer StatusNet profile from a user's Facebook profile --- plugins/FacebookSSO/FacebookSSOPlugin.php | 102 +++++++++--------- .../actions/facebookfinishlogin.php | 80 ++++++++++++-- plugins/FacebookSSO/lib/facebookclient.php | 4 +- 3 files changed, 124 insertions(+), 62 deletions(-) diff --git a/plugins/FacebookSSO/FacebookSSOPlugin.php b/plugins/FacebookSSO/FacebookSSOPlugin.php index a094f2957f..32b6a29106 100644 --- a/plugins/FacebookSSO/FacebookSSOPlugin.php +++ b/plugins/FacebookSSO/FacebookSSOPlugin.php @@ -3,7 +3,8 @@ * StatusNet - the distributed open-source microblogging tool * Copyright (C) 2010, StatusNet, Inc. * - * A plugin for single-sign-in (SSO) with Facebook + * A plugin for integrating Facebook with StatusNet. Includes single-sign-on + * and publishing notices to Facebook using Facebook's Graph API. * * PHP version 5 * @@ -35,14 +36,7 @@ if (!defined('STATUSNET')) { define("FACEBOOK_SERVICE", 2); /** - * Main class for Facebook single-sign-on plugin - * - * - * Simple plugins can be implemented as a single module. Others are more complex - * and require additional modules; these should use their own directory, like - * 'local/plugins/{$name}/'. All files related to the plugin, including images, - * JavaScript, CSS, external libraries or PHP modules should go in the plugin - * directory. + * Main class for Facebook plugin * * @category Plugin * @package StatusNet @@ -62,8 +56,7 @@ class FacebookSSOPlugin extends Plugin /** * Initializer for this plugin * - * Plugins overload this method to do any initialization they need, - * like connecting to remote servers or creating paths or so on. + * Gets an instance of the Facebook API client object * * @return boolean hook value; true means continue processing, false means stop. */ @@ -78,33 +71,9 @@ class FacebookSSOPlugin extends Plugin return true; } - /** - * Cleanup for this plugin - * - * Plugins overload this method to do any cleanup they need, - * like disconnecting from remote servers or deleting temp files or so on. - * - * @return boolean hook value; true means continue processing, false means stop. - */ - function cleanup() - { - return true; - } - /** * Load related modules when needed * - * Most non-trivial plugins will require extra modules to do their work. Typically - * these include data classes, action classes, widget classes, or external libraries. - * - * This method receives a class name and loads the PHP file related to that class. By - * tradition, action classes typically have files named for the action, all lower-case. - * Data classes are in files with the data class name, initial letter capitalized. - * - * Note that this method will be called for *all* overloaded classes, not just ones - * in this plugin! So, make sure to return true by default to let other plugins, and - * the core code, get a chance. - * * @param string $cls Name of the class to be loaded * * @return boolean hook value; true means continue processing, false means stop. @@ -118,12 +87,9 @@ class FacebookSSOPlugin extends Plugin switch ($cls) { - case 'Facebook': // New JavaScript SDK + case 'Facebook': // Facebook PHP SDK include_once $dir . '/extlib/facebook.php'; return false; - case 'FacebookRestClient': // Old REST lib - include_once $dir . '/extlib/facebookapi_php5_restlib.php'; - return false; case 'FacebookloginAction': case 'FacebookfinishloginAction': case 'FacebookadminpanelAction': @@ -153,10 +119,8 @@ class FacebookSSOPlugin extends Plugin ); if (in_array(get_class($action), $needy)) { - common_debug("needs scripts!"); return true; } else { - common_debug("doesn't need scripts!"); return false; } } @@ -164,11 +128,6 @@ class FacebookSSOPlugin extends Plugin /** * Map URLs to actions * - * This event handler lets the plugin map URLs on the site to actions (and - * thus an action handler class). Note that the action handler class for an - * action will be named 'FoobarAction', where action = 'foobar'. The class - * must be loaded in the onAutoload() method. - * * @param Net_URL_Mapper $m path-to-action mapper * * @return boolean hook value; true means continue processing, false means stop. @@ -281,6 +240,11 @@ class FacebookSSOPlugin extends Plugin /* * Is there a Facebook application for the plugin to use? + * + * Checks to see if a Facebook application ID and secret + * have been configured and a valid Facebook API client + * object exists. + * */ function hasApplication() { @@ -298,6 +262,12 @@ class FacebookSSOPlugin extends Plugin return false; } + /* + * Output a Facebook div for the Facebook JavaSsript SDK to use + * + * @param Action $action the current action + * + */ function onStartShowHeader($action) { // output
as close to as possible @@ -305,6 +275,12 @@ class FacebookSSOPlugin extends Plugin return true; } + /* + * Load the Facebook JavaScript SDK on pages that need them. + * + * @param Action $action the current action + * + */ function onEndShowScripts($action) { if ($this->needsScripts($action)) { @@ -324,7 +300,7 @@ $('#facebook_button').bind('click', function(event) { } else { // NOP (user cancelled login) } - }, {perms:'read_stream,publish_stream,offline_access,user_status,user_location,user_website'}); + }, {perms:'read_stream,publish_stream,offline_access,user_status,user_location,user_website,email'}); }); ENDOFSCRIPT; @@ -341,7 +317,7 @@ ENDOFSCRIPT; /* * Log the user out of Facebook, per the Facebook authentication guide * - * @param Action action the action + * @param Action action the current action */ function onEndLogout($action) { @@ -381,10 +357,10 @@ ENDOFSCRIPT; } /* - * Add fbml namespace so Facebook's JavaScript SDK can parse and render - * XFBML tags (e.g: ) + * Add fbml namespace to our HTML, so Facebook's JavaScript SDK can parse + * and render XFBML tags * - * @param Action $action current action + * @param Action $action the current action * @param array $attrs array of attributes for the HTML tag * * @return nothing @@ -432,6 +408,30 @@ ENDOFSCRIPT; return true; } + /* + * Use SSL for Facebook stuff + * + * @param string $action name + * @param boolean $ssl outval to force SSL + * @return mixed hook return value + */ + function onSensitiveAction($action, &$ssl) + { + $sensitive = array( + 'facebookadminpanel', + 'facebooksettings', + 'facebooklogin', + 'facebookfinishlogin' + ); + + if (in_array($action, $sensitive)) { + $ssl = true; + return false; + } else { + return true; + } + } + /* * Add version info for this plugin * diff --git a/plugins/FacebookSSO/actions/facebookfinishlogin.php b/plugins/FacebookSSO/actions/facebookfinishlogin.php index 16f7cff500..e61f351547 100644 --- a/plugins/FacebookSSO/actions/facebookfinishlogin.php +++ b/plugins/FacebookSSO/actions/facebookfinishlogin.php @@ -33,7 +33,6 @@ if (!defined('STATUSNET')) { class FacebookfinishloginAction extends Action { - private $facebook = null; // Facebook client private $fbuid = null; // Facebook user ID private $fbuser = null; // Facebook user object (JSON) @@ -341,12 +340,14 @@ class FacebookfinishloginAction extends Action } $args = array( - 'nickname' => $nickname, - 'fullname' => $this->fbuser['firstname'] . ' ' . $this->fbuser['lastname'], - // XXX: Figure out how to get email - 'homepage' => $this->fbuser['link'], - 'bio' => $this->fbuser['about'], - 'location' => $this->fbuser['location']['name'] + 'nickname' => $nickname, + 'fullname' => $this->fbuser['first_name'] + . ' ' . $this->fbuser['last_name'], + 'email' => $this->fbuser['email'], + 'email_confirmed' => true, + 'homepage' => $this->fbuser['website'], + 'bio' => $this->fbuser['about'], + 'location' => $this->fbuser['location']['name'] ); if (!empty($invite)) { @@ -362,6 +363,8 @@ class FacebookfinishloginAction extends Action return; } + $this->setAvatar($user); + common_set_user($user); common_real_login(true); @@ -384,6 +387,68 @@ class FacebookfinishloginAction extends Action ); } + /* + * Attempt to download the user's Facebook picture and create a + * StatusNet avatar for the new user. + */ + function setAvatar($user) + { + $picUrl = sprintf( + 'http://graph.facebook.com/%s/picture?type=large', + $this->fbuid + ); + + // fetch the picture from Facebook + $client = new HTTPClient(); + + common_debug("status = $status - " . $finalUrl , __FILE__); + + // fetch the actual picture + $response = $client->get($picUrl); + + if ($response->isOk()) { + + $finalUrl = $client->getUrl(); + $filename = 'facebook-' . substr(strrchr($finalUrl, '/'), 1 ); + + common_debug("Filename = " . $filename, __FILE__); + + $ok = file_put_contents( + Avatar::path($filename), + $response->getBody() + ); + + if (!$ok) { + common_log( + LOG_WARNING, + sprintf( + 'Couldn\'t save Facebook avatar %s', + $tmp + ), + __FILE__ + ); + + } else { + + $profile = $user->getProfile(); + + if ($profile->setOriginal($filename)) { + common_log( + LOG_INFO, + sprintf( + 'Saved avatar for %s (%d) from Facebook profile %s, filename = %s', + $user->nickname, + $user->id, + $this->fbuid, + $picture + ), + __FILE__ + ); + } + } + } + } + function connectNewUser() { $nickname = $this->trimmed('nickname'); @@ -437,7 +502,6 @@ class FacebookfinishloginAction extends Action __FILE__ ); - // Return to Facebook connection settings tab common_redirect(common_local_url('facebookfinishlogin'), 303); } diff --git a/plugins/FacebookSSO/lib/facebookclient.php b/plugins/FacebookSSO/lib/facebookclient.php index cf45c9ed95..6753243ed0 100644 --- a/plugins/FacebookSSO/lib/facebookclient.php +++ b/plugins/FacebookSSO/lib/facebookclient.php @@ -47,7 +47,6 @@ class Facebookclient protected $flink = null; // Foreign_link StatusNet -> Facebook protected $notice = null; // The user's notice protected $user = null; // Sender of the notice - //protected $oldRestClient = null; // Old REST API client function __construct($notice) { @@ -382,7 +381,7 @@ class Facebookclient $code = $e->getCode(); // The Facebook PHP SDK seems to always set the code attribute - // of the Exception to 0; they put the real error code it in + // of the Exception to 0; they put the real error code in // the message. Gar! if ($code == 0) { preg_match('/^\(#(?\d+)\)/', $errmsg, $matches); @@ -554,7 +553,6 @@ class Facebookclient */ function formatAttachments() { - $attachments = $this->notice->attachments(); $fbattachment = array(); From 5a3d01423d378272218072136f2b3e46b5aa5269 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 9 Nov 2010 16:28:33 -0800 Subject: [PATCH 054/220] Cleanup on the CSS for inline attachments; removed some unneeded changes since the split of the inline and regular attachment lists. Removing commented-out code that seems to be for some old thumbnailing system where the thumbnails were hidden popups within the core text (wtf!) --- theme/base/css/display.css | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 6615e13eb4..8c364febce 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -1150,8 +1150,7 @@ border-radius:4px; -webkit-border-radius:4px; } -.notice div.entry-content, -.notice dl.entry-content { +.notice div.entry-content { clear:left; float:left; font-size:0.95em; @@ -1326,40 +1325,20 @@ margin-left:4px; .notice .attachment.more { padding-left:0; } -/* -.notice .attachment img { -position:absolute; -top:18px; -left:0; -z-index:99; -} -#shownotice .notice .attachment img { -position:static; -} -*/ - -/* Small inline attachment list */ -#attachments ol li { - list-style-type: none; -} -#attachments dt { - display: none; -} - -#shownotice #attachments { +#attachments { clear:both; float:left; width:100%; margin-top:18px; } -#shownotice #attachments dt { +#attachments dt { font-weight:bold; font-size:1.3em; margin-bottom:4px; } -#shownotice #attachments ol li { +#attachments ol li { margin-bottom:18px; list-style-type:decimal; float:left; From 592e0bc505c52a38952469bae0a081c224180bd8 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 9 Nov 2010 16:43:37 -0800 Subject: [PATCH 055/220] add title attribute on attachment list items --- lib/attachmentlist.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php index f9ef7499e1..6e127af864 100644 --- a/lib/attachmentlist.php +++ b/lib/attachmentlist.php @@ -197,7 +197,10 @@ class AttachmentListItem extends Widget } function linkAttr() { - return array('class' => 'attachment', 'href' => $this->attachment->url, 'id' => 'attachment-' . $this->attachment->id); + return array('class' => 'attachment', + 'href' => $this->attachment->url, + 'id' => 'attachment-' . $this->attachment->id, + 'title' => $this->title()); } function showLink() { @@ -244,8 +247,9 @@ class AttachmentListItem extends Widget case 'image/jpeg': $thumb = (object)array(); $thumb->url = $enc->url; - $thumb->width = 100; - $thumb->height = 75; // @fixme + // @fixme use the given width/height aspect + $thumb->width = common_config('attachments', 'thumb_width'); + $thumb->height = common_config('attachments', 'thumb_height'); return $thumb; } } From 3c921f38de55922b1de3a331826e01cb876898a2 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 10 Nov 2010 01:18:06 +0000 Subject: [PATCH 056/220] Add an action to handle deauthorization callbacks from Facebook --- plugins/FacebookSSO/FacebookSSOPlugin.php | 6 +- .../actions/facebookdeauthorize.php | 214 ++++++++++++++++++ plugins/FacebookSSO/lib/facebookclient.php | 28 ++- 3 files changed, 235 insertions(+), 13 deletions(-) create mode 100644 plugins/FacebookSSO/actions/facebookdeauthorize.php diff --git a/plugins/FacebookSSO/FacebookSSOPlugin.php b/plugins/FacebookSSO/FacebookSSOPlugin.php index 32b6a29106..19d61211d8 100644 --- a/plugins/FacebookSSO/FacebookSSOPlugin.php +++ b/plugins/FacebookSSO/FacebookSSOPlugin.php @@ -94,6 +94,7 @@ class FacebookSSOPlugin extends Plugin case 'FacebookfinishloginAction': case 'FacebookadminpanelAction': case 'FacebooksettingsAction': + case 'FacebookdeauthorizeAction': include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; case 'Facebookclient': @@ -149,11 +150,14 @@ class FacebookSSOPlugin extends Plugin 'main/facebookfinishlogin', array('action' => 'facebookfinishlogin') ); - $m->connect( 'settings/facebook', array('action' => 'facebooksettings') ); + $m->connect( + 'facebook/deauthorize', + array('action' => 'facebookdeauthorize') + ); } diff --git a/plugins/FacebookSSO/actions/facebookdeauthorize.php b/plugins/FacebookSSO/actions/facebookdeauthorize.php new file mode 100644 index 0000000000..fb4afa13bc --- /dev/null +++ b/plugins/FacebookSSO/actions/facebookdeauthorize.php @@ -0,0 +1,214 @@ +. + * + * @category Plugin + * @package StatusNet + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/* + * Action class for handling deauthorize callbacks from Facebook. If the user + * doesn't have a password let her know she'll need to contact the site + * admin to get back into her account (if possible). + */ +class FacebookdeauthorizeAction extends Action +{ + private $facebook; + + /** + * For initializing members of the class. + * + * @param array $args misc. arguments + * + * @return boolean true + */ + function prepare($args) + { + $this->facebook = Facebookclient::getFacebook(); + + return true; + } + + /** + * Handler method + * + * @param array $args is ignored since it's now passed in in prepare() + */ + function handle($args) + { + parent::handle($args); + + $data = $this->facebook->getSignedRequest(); + + if (isset($data['user_id'])) { + + $fbuid = $data['user_id']; + + $flink = Foreign_link::getByForeignID($fbuid, FACEBOOK_SERVICE); + $user = $flink->getUser(); + + // Remove the link to Facebook + $result = $flink->delete(); + + if (!$result) { + common_log_db_error($flink, 'DELETE', __FILE__); + common_log( + LOG_WARNING, + sprintf( + 'Unable to delete Facebook foreign link ' + . 'for %s (%d), fbuid %s', + $user->nickname, + $user->id, + $fbuid + ), + __FILE__ + ); + return; + } + + common_log( + LOG_INFO, + sprintf( + 'Facebook callback: %s (%d), fbuid %s has deauthorized ' + . 'the Facebook application.', + $user->nickname, + $user->id, + $fbuid + ), + __FILE__ + ); + + // Warn the user about being locked out of their account + // if we can. + if (empty($user->password) && !empty($user->email)) { + $this->emailWarn($user); + } else { + common_log( + LOG_WARNING, + sprintf( + '%s (%d), fbuid $s has deauthorized his/her Facebook ' + . 'connection but hasn\'t set a password so s/he ' + . 'is locked out.', + $user->nickname, + $user->id, + $fbuid + ), + __FILE__ + ); + } + + } else { + if (!empty($data)) { + common_log( + LOG_WARNING, + sprintf( + 'Facebook called the deauthorize callback ' + . ' but didn\'t provide a user ID.' + ), + __FILE__ + ); + } else { + // It probably wasn't Facebook that hit this action, + // so redirect to the login page + common_redirect(common_local_url('login'), 303); + } + } + } + + /* + * Send the user an email warning that their account has been + * disconnected and he/she has no way to login and must contact + * the site administrator for help. + * + * @param User $user the deauthorizing user + * + */ + function emailWarn($user) + { + $profile = $user->getProfile(); + + $siteName = common_config('site', 'name'); + $siteEmail = common_config('site', 'email'); + + if (empty($siteEmail)) { + common_log( + LOG_WARNING, + "No site email address configured. Please set one." + ); + } + + common_switch_locale($user->language); + + $subject = _m('Contact the %s administrator to retrieve your account'); + + $msg = <<nickname, + $siteName, + $siteEmail + ); + + common_switch_locale(); + + if (mail_to_user($user, $subject, $body)) { + common_log( + LOG_INFO, + sprintf( + 'Sent account lockout warning to %s (%d)', + $user->nickname, + $user->id + ), + __FILE__ + ); + } else { + common_log( + LOG_WARNING, + sprintf( + 'Unable to send account lockout warning to %s (%d)', + $user->nickname, + $user->id + ), + __FILE__ + ); + } + } + +} \ No newline at end of file diff --git a/plugins/FacebookSSO/lib/facebookclient.php b/plugins/FacebookSSO/lib/facebookclient.php index 6753243ed0..cf00b55e3a 100644 --- a/plugins/FacebookSSO/lib/facebookclient.php +++ b/plugins/FacebookSSO/lib/facebookclient.php @@ -673,25 +673,29 @@ class Facebookclient */ function mailFacebookDisconnect() { - $profile = $user->getProfile(); + $profile = $this->user->getProfile(); $siteName = common_config('site', 'name'); - common_switch_locale($user->language); + common_switch_locale($this->user->language); - $subject = sprintf( - _m('Your Facebook connection has been removed'), - $siteName - ); + $subject = _m('Your Facebook connection has been removed'); $msg = << Date: Wed, 10 Nov 2010 15:53:20 -0500 Subject: [PATCH 057/220] Fix isHTTPS to work correctly for Cherokee and IIS --- lib/statusnet.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/statusnet.php b/lib/statusnet.php index 33bf32b10e..85b46bbb3f 100644 --- a/lib/statusnet.php +++ b/lib/statusnet.php @@ -377,7 +377,11 @@ class StatusNet static function isHTTPS() { // There are some exceptions to this; add them here! - return !empty($_SERVER['HTTPS']); + if(empty($_SERVER['HTTPS'])) { + return false; + } else { + return $_SERVER['HTTPS'] !== 'off'; + } } } From 46223da59433e602343169a948bc895977ea253f Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 10 Nov 2010 14:31:55 -0800 Subject: [PATCH 058/220] CSS class tweak for inline attachment thumbnails to avoid things thinking they're content links --- lib/inlineattachmentlist.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/inlineattachmentlist.php b/lib/inlineattachmentlist.php index 8b1a1cd9bb..de5008e87b 100644 --- a/lib/inlineattachmentlist.php +++ b/lib/inlineattachmentlist.php @@ -71,6 +71,17 @@ class InlineAttachmentListItem extends AttachmentListItem $this->out->elementEnd('a'); } + /** + * Build HTML attributes for the link + * @return array + */ + function linkAttr() + { + $attr = parent::linkAttr(); + $attr['class'] = 'attachment-thumbnail'; + return $attr; + } + /** * start a single notice. * From fbd8052d05fda7a967d8440574d2b5013d4e7be1 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 10 Nov 2010 15:26:18 -0800 Subject: [PATCH 059/220] Add error logging for a couple send-fail cases in XMPP out --- lib/xmppmanager.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/xmppmanager.php b/lib/xmppmanager.php index 7acd7663a2..238696664a 100644 --- a/lib/xmppmanager.php +++ b/lib/xmppmanager.php @@ -198,10 +198,12 @@ class XmppManager extends IoManager $this->conn->processTime(0); return true; } else { + common_log(LOG_ERR, __METHOD__ . ' failed: 0 bytes sent'); return false; } } else { // Can't send right now... + common_log(LOG_ERR, __METHOD__ . ' failed: XMPP server connection currently down'); return false; } } From 09aaf21e8d9be5fc0ed82df0028125c9fd96e48d Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 11 Nov 2010 10:33:26 -0800 Subject: [PATCH 060/220] Fix missing close of comment block --- actions/allrss.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/actions/allrss.php b/actions/allrss.php index d398c8a6ad..573bb4eb2f 100644 --- a/actions/allrss.php +++ b/actions/allrss.php @@ -56,6 +56,8 @@ class AllrssAction extends Rss10Action * @param array $args Web and URL arguments * * @return boolean false if user doesn't exist + * + */ function prepare($args) { parent::prepare($args); From 0ed572ff3f3401f6faf376136a3e17cba1259922 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 11 Nov 2010 10:33:26 -0800 Subject: [PATCH 061/220] Fix missing close of comment block --- actions/allrss.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/actions/allrss.php b/actions/allrss.php index d398c8a6ad..573bb4eb2f 100644 --- a/actions/allrss.php +++ b/actions/allrss.php @@ -56,6 +56,8 @@ class AllrssAction extends Rss10Action * @param array $args Web and URL arguments * * @return boolean false if user doesn't exist + * + */ function prepare($args) { parent::prepare($args); From adb16b8098dbe8870b7f4a9dcde49930a41666ff Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 11 Nov 2010 14:50:53 -0500 Subject: [PATCH 062/220] fix update of email prefs in queue handler --- plugins/EmailSummary/useremailsummaryhandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php index fb004b5558..b1ebd0c425 100644 --- a/plugins/EmailSummary/useremailsummaryhandler.php +++ b/plugins/EmailSummary/useremailsummaryhandler.php @@ -218,7 +218,7 @@ class UserEmailSummaryHandler extends QueueHandler $ess->last_summary_id = $new_top; $ess->modified = common_sql_now(); - $ess->update(); + $ess->update($orig); } return true; From 2d55bc0e5b89012e700bbeb68411e51477862b23 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 11 Nov 2010 14:51:14 -0500 Subject: [PATCH 063/220] give users a chance to opt out of email summaries --- plugins/EmailSummary/EmailSummaryPlugin.php | 64 +++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/plugins/EmailSummary/EmailSummaryPlugin.php b/plugins/EmailSummary/EmailSummaryPlugin.php index 03577bb4a7..58c40e43c5 100644 --- a/plugins/EmailSummary/EmailSummaryPlugin.php +++ b/plugins/EmailSummary/EmailSummaryPlugin.php @@ -135,4 +135,68 @@ class EmailSummaryPlugin extends Plugin $qm->connect('usersum', 'UserEmailSummaryHandler'); return true; } + + /** + * Add a checkbox to turn off email summaries + * + * @param Action $action Action being executed (emailsettings) + * + * @return boolean hook value + */ + + function onEndEmailFormData($action) + { + $user = common_current_user(); + + $action->elementStart('li'); + $action->checkbox('emailsummary', + // TRANS: Checkbox label in e-mail preferences form. + _('Send me a periodic summary of updates from my network.'), + Email_summary_status::getSendSummary($user->id)); + $action->elementEnd('li'); + return true; + } + + /** + * Add a checkbox to turn off email summaries + * + * @param Action $action Action being executed (emailsettings) + * + * @return boolean hook value + */ + + function onEndEmailSaveForm($action) + { + $sendSummary = $action->boolean('emailsummary'); + + $user = common_current_user(); + + if (!empty($user)) { + + $ess = Email_summary_status::staticGet('user_id', $user->id); + + if (empty($ess)) { + + $ess = new Email_summary_status(); + + $ess->user_id = $user->id; + $ess->send_summary = $sendSummary; + $ess->created = common_sql_now(); + $ess->modified = common_sql_now(); + + $ess->insert(); + + } else { + + $orig = clone($ess); + + $ess->send_summary = $sendSummary; + $ess->modified = common_sql_now(); + + $ess->update($orig); + } + } + + return true; + } } From fdf3a23da7769586a818ca2219ec6bc1b46587de Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 12 Nov 2010 11:46:45 -0500 Subject: [PATCH 064/220] don't try to initialize the mapstraction canvas if it doesn't exist --- plugins/Mapstraction/MapstractionPlugin.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/Mapstraction/MapstractionPlugin.php b/plugins/Mapstraction/MapstractionPlugin.php index c4ba6464ea..d5261d8bc7 100644 --- a/plugins/Mapstraction/MapstractionPlugin.php +++ b/plugins/Mapstraction/MapstractionPlugin.php @@ -156,7 +156,8 @@ class MapstractionPlugin extends Plugin ' var user = null; '. (($actionName == 'showstream') ? ' user = scrapeUser(); ' : '') . ' var notices = scrapeNotices(user); ' . - ' showMapstraction($("#map_canvas"), notices); '. + ' var canvas = $("#map_canvas")[0]; ' . + ' if (typeof(canvas) != "undefined") { showMapstraction(canvas, notices); } '. '});'); } From b6af5a25ba61ef3c86a3772abea7ac95778689f7 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 12 Nov 2010 11:46:45 -0500 Subject: [PATCH 065/220] don't try to initialize the mapstraction canvas if it doesn't exist --- plugins/Mapstraction/MapstractionPlugin.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/Mapstraction/MapstractionPlugin.php b/plugins/Mapstraction/MapstractionPlugin.php index c4ba6464ea..d5261d8bc7 100644 --- a/plugins/Mapstraction/MapstractionPlugin.php +++ b/plugins/Mapstraction/MapstractionPlugin.php @@ -156,7 +156,8 @@ class MapstractionPlugin extends Plugin ' var user = null; '. (($actionName == 'showstream') ? ' user = scrapeUser(); ' : '') . ' var notices = scrapeNotices(user); ' . - ' showMapstraction($("#map_canvas"), notices); '. + ' var canvas = $("#map_canvas")[0]; ' . + ' if (typeof(canvas) != "undefined") { showMapstraction(canvas, notices); } '. '});'); } From 62467f51e520439d3ec44ceb6a66a91ad54d77b6 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 12 Nov 2010 12:10:29 -0800 Subject: [PATCH 066/220] Drop commented-out code from old lightbox & thumbnail popup stuff --- js/util.js | 44 -------------------------------------------- 1 file changed, 44 deletions(-) diff --git a/js/util.js b/js/util.js index 15fb163103..bf3c43fd8a 100644 --- a/js/util.js +++ b/js/util.js @@ -427,50 +427,6 @@ var SN = { // StatusNet return false; }).attr('title', SN.msg('showmore_tooltip')); } - else { - //imgLoading : $('address .url')[0].href+'theme/base/images/illustrations/illu_progress_loading-01.gif', - - notice.find('a.attachment').each(function() { - /* - var attachId = ($(this).attr('id').substring('attachment'.length + 1)); - if (attachId) { - var thumbUrl = $('address .url')[0].href+'attachment/' + attachId + '/thumb'; - var thumb = $('
Thumb:
'); - thumb.find('img').attr('src', thumbUrl).last(); - notice.find('.entry-title .entry-content').append(thumb); - } - */ - }); - - if ($('#shownotice').length == 0) { - /* - var t; - notice.find('a.thumbnail').hover( - function() { - var anchor = $(this); - $('a.thumbnail').children('img').hide(); - anchor.closest(".entry-title").addClass('ov'); - - if (anchor.children('img').length === 0) { - t = setTimeout(function() { - $.get($('address .url')[0].href+'attachment/' + (anchor.attr('id').substring('attachment'.length + 1)) + '/thumbnail', null, function(data) { - anchor.append(data); - }); - }, 500); - } - else { - anchor.children('img').show(); - } - }, - function() { - clearTimeout(t); - $('a.thumbnail').children('img').hide(); - $(this).closest('.entry-title').removeClass('ov'); - } - ); - */ - } - } }, NoticeDataAttach: function() { From cda59dc1771c2911491c9271662c32f56103347f Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 12 Nov 2010 12:10:51 -0800 Subject: [PATCH 067/220] drop a comma which isn't actually an error but keeps throwing annoying warnings in netbeans --- js/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/util.js b/js/util.js index bf3c43fd8a..74eef4df17 100644 --- a/js/util.js +++ b/js/util.js @@ -56,7 +56,7 @@ var SN = { // StatusNet NoticeDataGeoCookie: 'NoticeDataGeo', NoticeDataGeoSelected: 'notice_data-geo_selected', StatusNetInstance:'StatusNetInstance' - }, + } }, messages: {}, From cb124fe831a3c77dfca89590ebb8d691685bb573 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 12 Nov 2010 12:24:55 -0800 Subject: [PATCH 068/220] Add a quick config setting to disable/enable display of thumbnails in regular notice lists (attachments/show_thumbs) - disabling gives the same display as before this feature was added (but changes to oembed handling are still there, and the lightbox popup is gone) --- lib/default.php | 1 + lib/noticelist.php | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/default.php b/lib/default.php index 87f4e45c0e..ece01f2a8b 100644 --- a/lib/default.php +++ b/lib/default.php @@ -250,6 +250,7 @@ $default = 'monthly_quota' => 15000000, 'uploads' => true, 'filecommand' => '/usr/bin/file', + 'show_thumbs' => true, // show thumbnails in notice lists for uploaded images, and photos and videos linked remotely that provide oEmbed info 'thumb_width' => 100, 'thumb_height' => 75, ), diff --git a/lib/noticelist.php b/lib/noticelist.php index d2ac7ed84a..c6f964662f 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -385,8 +385,10 @@ class NoticeListItem extends Widget } function showNoticeAttachments() { - $al = new InlineAttachmentList($this->notice, $this->out); - $al->show(); + if (common_config('attachments', 'show_thumbs')) { + $al = new InlineAttachmentList($this->notice, $this->out); + $al->show(); + } } /** From 6291e8201f90ed50687f7670edc505645ea55bfb Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 12 Nov 2010 13:06:41 -0800 Subject: [PATCH 069/220] Fix for failure edge case in TwitterBridge outgoing repeat/retweets. When the retweet failed with a 403 error (say due to it being a private tweet, which can't be retweeted) we would end up mishandling the return value from our internal error handling. Instead of correctly discarding the message and closing out the queue item, we ended up trying to save a bogus twitter<->local ID mapping, which threw another exception and lead the queue system to re-run it. - Fixed the logic check and return values for the retweet case in broadcast_twitter(). - Added doc comments explaining the return values on some functions in twitter.php - Added check on Notice_to_status::saveNew() for empty input -- throw an exception before we try to actually insert into db. :) --- plugins/TwitterBridge/Notice_to_status.php | 7 +++++ plugins/TwitterBridge/twitter.php | 32 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/plugins/TwitterBridge/Notice_to_status.php b/plugins/TwitterBridge/Notice_to_status.php index 2e32ba963c..3b8f816cfc 100644 --- a/plugins/TwitterBridge/Notice_to_status.php +++ b/plugins/TwitterBridge/Notice_to_status.php @@ -144,6 +144,7 @@ class Notice_to_status extends Memcached_DataObject /** * Save a mapping between a notice and a status + * Warning: status_id values may not fit in 32-bit integers. * * @param integer $notice_id ID of the notice in StatusNet * @param integer $status_id ID of the status in Twitter @@ -153,12 +154,18 @@ class Notice_to_status extends Memcached_DataObject static function saveNew($notice_id, $status_id) { + if (empty($notice_id)) { + throw new Exception("Invalid notice_id $notice_id"); + } $n2s = Notice_to_status::staticGet('notice_id', $notice_id); if (!empty($n2s)) { return $n2s; } + if (empty($status_id)) { + throw new Exception("Invalid status_id $status_id"); + } $n2s = Notice_to_status::staticGet('status_id', $status_id); if (!empty($n2s)) { diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php index cd1ad70b9b..b34488069a 100644 --- a/plugins/TwitterBridge/twitter.php +++ b/plugins/TwitterBridge/twitter.php @@ -128,6 +128,16 @@ function is_twitter_notice($id) return (!empty($n2s)); } +/** + * Check if we need to broadcast a notice over the Twitter bridge, and + * do so if necessary. Will determine whether to do a straight post or + * a repeat/retweet + * + * This function is meant to be called directly from TwitterQueueHandler. + * + * @param Notice $notice + * @return boolean true if complete or successful, false if we should retry + */ function broadcast_twitter($notice) { $flink = Foreign_link::getByUserID($notice->profile_id, @@ -137,8 +147,13 @@ function broadcast_twitter($notice) if (!empty($flink) && TwitterOAuthClient::isPackedToken($flink->credentials)) { if (!empty($notice->repeat_of) && is_twitter_notice($notice->repeat_of)) { $retweet = retweet_notice($flink, Notice::staticGet('id', $notice->repeat_of)); - if (!empty($retweet)) { + if (is_object($retweet)) { Notice_to_status::saveNew($notice->id, $retweet->id); + return true; + } else { + // Our error processing will have decided if we need to requeue + // this or can discard safely. + return $retweet; } } else if (is_twitter_bound($notice, $flink)) { return broadcast_oauth($notice, $flink); @@ -148,6 +163,21 @@ function broadcast_twitter($notice) return true; } +/** + * Send a retweet to Twitter for a notice that has been previously bridged + * in or out. + * + * Warning: the return value is not guaranteed to be an object; some error + * conditions will return a 'true' which should be passed on to a calling + * queue handler. + * + * No local information about the resulting retweet is saved: it's up to + * caller to save new mappings etc if appropriate. + * + * @param Foreign_link $flink + * @param Notice $notice + * @return mixed object with resulting Twitter status data on success, or true/false/null on error conditions. + */ function retweet_notice($flink, $notice) { $token = TwitterOAuthClient::unpackToken($flink->credentials); From 9621904cac010bdf31f1a8128517722172ff8df4 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 12 Nov 2010 13:34:04 -0800 Subject: [PATCH 070/220] Revert "Missing one close-paren in newgroup.php" - incorrect fix for paren bug This reverts commit 3afb031d9270a29db7f1ac4a964bb4b796759827. --- actions/newgroup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/newgroup.php b/actions/newgroup.php index 371e508379..2951920362 100644 --- a/actions/newgroup.php +++ b/actions/newgroup.php @@ -147,7 +147,7 @@ class NewgroupAction extends Action $this->showForm(sprintf(_m('Description is too long (maximum %d character).', 'Description is too long (maximum %d characters).', User_group::maxDescription(), - User_group::maxDescription()))); + User_group::maxDescription())); return; } else if (!is_null($location) && mb_strlen($location) > 255) { $this->showForm(_('Location is too long (maximum 255 characters).')); From e4913f97224bad0affd271e1666ca71e66aaa47e Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 2 Nov 2010 14:03:50 -0700 Subject: [PATCH 071/220] fix syntax error introduced in i18n tweaks: newgroup action --- actions/newgroup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/newgroup.php b/actions/newgroup.php index 2951920362..05520223c0 100644 --- a/actions/newgroup.php +++ b/actions/newgroup.php @@ -146,7 +146,7 @@ class NewgroupAction extends Action // TRANS: %d is the maximum number of allowed characters. $this->showForm(sprintf(_m('Description is too long (maximum %d character).', 'Description is too long (maximum %d characters).', - User_group::maxDescription(), + User_group::maxDescription()), User_group::maxDescription())); return; } else if (!is_null($location) && mb_strlen($location) > 255) { From 2c4313467f07cae059798ac500ec2a1c31953877 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 12 Nov 2010 14:03:08 -0800 Subject: [PATCH 072/220] Save oEmbed photo references as thumbnails if there's not a separate thumbnail_url entry in the return data. This fixes thumb saving for Flickr photo references. --- classes/File_oembed.php | 2 +- classes/File_thumbnail.php | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/classes/File_oembed.php b/classes/File_oembed.php index a5540ecfee..bcb2f7bacc 100644 --- a/classes/File_oembed.php +++ b/classes/File_oembed.php @@ -120,7 +120,7 @@ class File_oembed extends Memcached_DataObject } } $file_oembed->insert(); - if (!empty($data->thumbnail_url)) { + if (!empty($data->thumbnail_url) || ($data->type == 'photo')) { $ft = File_thumbnail::staticGet('file_id', $file_id); if (!empty($ft)) { common_log(LOG_WARNING, "Strangely, a File_thumbnail object exists for new file $file_id", diff --git a/classes/File_thumbnail.php b/classes/File_thumbnail.php index d371b9e8aa..17bac7f08c 100644 --- a/classes/File_thumbnail.php +++ b/classes/File_thumbnail.php @@ -55,10 +55,21 @@ class File_thumbnail extends Memcached_DataObject * @param int $file_id */ public static function saveNew($data, $file_id) { - self::saveThumbnail($file_id, - $data->thumbnail_url, - $data->thumbnail_width, - $data->thumbnail_height); + if (!empty($data->thumbnail_url)) { + // Non-photo types such as video will usually + // show us a thumbnail, though it's not required. + self::saveThumbnail($file_id, + $data->thumbnail_url, + $data->thumbnail_width, + $data->thumbnail_height); + } else if ($data->type == 'photo') { + // The inline photo URL given should also fit within + // our requested thumbnail size, per oEmbed spec. + self::saveThumbnail($file_id, + $data->url, + $data->width, + $data->height); + } } /** From 2c33fdd2fb98c37798a80a8600798caa9dabcb0e Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 12 Nov 2010 14:03:57 -0800 Subject: [PATCH 073/220] Only use saved thumbnails for notice list attachment thumbs -- don't attempt to search enclosures for photo types. We now save thumbs directly for oEmbed photos that don't list a separate thumb entry (like Flickr), so it's not needed. Keeps things cleaner :D --- lib/attachmentlist.php | 47 ++++++++++-------------------------------- 1 file changed, 11 insertions(+), 36 deletions(-) diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php index 6e127af864..0d56791d70 100644 --- a/lib/attachmentlist.php +++ b/lib/attachmentlist.php @@ -218,55 +218,30 @@ class AttachmentListItem extends Widget function showRepresentation() { $thumb = $this->getThumbInfo(); if ($thumb) { - $thumb = $this->sizeThumb($thumb); $this->out->element('img', array('alt' => '', 'src' => $thumb->url, 'width' => $thumb->width, 'height' => $thumb->height)); } } /** - * Pull a thumbnail image reference for the given file. - * In order we check: - * 1) file_thumbnail table (thumbnails found via oEmbed) - * 2) image URL from direct dereference or oEmbed 'photo' type URL - * 3) ??? + * Pull a thumbnail image reference for the given file, and if necessary + * resize it to match currently thumbnail size settings. * - * @return mixed object with (url, width, height) properties, or false + * @return File_Thumbnail or false/null */ function getThumbInfo() { $thumbnail = File_thumbnail::staticGet('file_id', $this->attachment->id); if ($thumbnail) { - return $thumbnail; - } - $enc = $this->attachment->getEnclosure(); - if ($enc) { - switch ($enc->mimetype) { - case 'image/gif': - case 'image/png': - case 'image/jpg': - case 'image/jpeg': - $thumb = (object)array(); - $thumb->url = $enc->url; - // @fixme use the given width/height aspect - $thumb->width = common_config('attachments', 'thumb_width'); - $thumb->height = common_config('attachments', 'thumb_height'); - return $thumb; + $maxWidth = common_config('attachments', 'thumb_width'); + $maxHeight = common_config('attachments', 'thumb_height'); + if ($thumbnail->width > $maxWidth) { + $thumb = clone($thumbnail); + $thumb->width = $maxWidth; + $thumb->height = intval($thumbnail->height * $maxWidth / $thumbnail->width); + return $thumb; } } - return false; - } - - function sizeThumb($thumbnail) { - $maxWidth = 100; - $maxHeight = 75; - if ($thumbnail->width > $maxWidth) { - $thumb = clone($thumbnail); - $thumb->width = $maxWidth; - $thumb->height = intval($thumbnail->height * $maxWidth / $thumbnail->width); - return $thumb; - } else { - return $thumbnail; - } + return $thumbnail; } /** From 398e622fecdb2b2b6bf6cde975e3978284db62b4 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 12 Nov 2010 17:40:34 -0800 Subject: [PATCH 074/220] Save attached URLs when importing a Twitter status: this lets our thumbnail detection handle photos and videos linked to by Twitter posters. --- plugins/TwitterBridge/twitterimport.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugins/TwitterBridge/twitterimport.php b/plugins/TwitterBridge/twitterimport.php index 07a9cf95f6..498e9b1fc5 100644 --- a/plugins/TwitterBridge/twitterimport.php +++ b/plugins/TwitterBridge/twitterimport.php @@ -189,6 +189,7 @@ class TwitterImport Notice_to_status::saveNew($notice->id, $status->id); $this->saveStatusMentions($notice, $status); + $this->saveStatusAttachments($notice, $status); $notice->blowOnInsert(); @@ -648,4 +649,20 @@ class TwitterImport } } } + + /** + * Record URL links from the notice. Needed to get thumbnail records + * for referenced photo and video posts, etc. + * + * @param Notice $notice + * @param object $status + */ + function saveStatusAttachments($notice, $status) + { + if (!empty($status->entities) && !empty($status->entities->urls)) { + foreach ($status->entities->urls as $url) { + File::processNew($url->url, $notice->id); + } + } + } } \ No newline at end of file From 4f323efdf7abc5452152a87241e320aca20ce486 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 12 Nov 2010 17:41:35 -0800 Subject: [PATCH 075/220] Encapsulate the oEmbed -> oohembed fallback into oEmbedHelper class. Also added a chance to whitelist sites that don't show discovery info but do have oEmbed API endpoints, and to provide alternate APIs for some common services. Newly supported: - TwitPic: added a local function using TwitPic's API, since the oohembed implementation for TwitPic produced invalid output which Services_oEmbed rejects. (bug filed upstream) Tweaked... - Flickr: works, now using whitelist to use their endpoint directly instead of going through oohembed - Youtube: worked around a bug in Services_oEmbed which broke the direct use of API discovery info, so we don't have to use oohembed. Not currently working... - YFrog: whitelisting their endpoint directly as the oohembed output is broken, but this doesn't appear to work currently as I think things are confused by YFrog's servers giving a '204 No Content' response on our HEAD checks on the original link. --- classes/File_oembed.php | 20 +--- lib/oembedhelper.php | 246 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 251 insertions(+), 15 deletions(-) create mode 100644 lib/oembedhelper.php diff --git a/classes/File_oembed.php b/classes/File_oembed.php index bcb2f7bacc..b7bf3a5dae 100644 --- a/classes/File_oembed.php +++ b/classes/File_oembed.php @@ -59,25 +59,15 @@ class File_oembed extends Memcached_DataObject } function _getOembed($url) { - require_once INSTALLDIR.'/extlib/Services/oEmbed.php'; $parameters = array( 'maxwidth' => common_config('attachments', 'thumb_width'), 'maxheight' => common_config('attachments', 'thumb_height'), ); - try{ - $oEmbed = new Services_oEmbed($url); - $object = $oEmbed->getObject($parameters); - return $object; - }catch(Exception $e){ - try{ - $oEmbed = new Services_oEmbed($url, array( - Services_oEmbed::OPTION_API => common_config('oohembed', 'endpoint') - )); - $object = $oEmbed->getObject($parameters); - return $object; - }catch(Exception $ex){ - return false; - } + try { + return oEmbedHelper::getObject($url, $parameters); + } catch (Exception $e) { + common_log(LOG_ERR, "Error during oembed lookup for $url - " . $e->getMessage()); + return false; } } diff --git a/lib/oembedhelper.php b/lib/oembedhelper.php new file mode 100644 index 0000000000..ef2b59214c --- /dev/null +++ b/lib/oembedhelper.php @@ -0,0 +1,246 @@ +. + */ + +if (!defined('STATUSNET')) { + exit(1); +} +require_once INSTALLDIR.'/extlib/Services/oEmbed.php'; + + +/** + * Utility class to wrap Services_oEmbed: + * + * Blacklisted hosts will use an alternate lookup method: + * - Twitpic + * + * Whitelisted hosts will use known oEmbed API endpoints: + * - Flickr, YFrog + * + * Sites that provide discovery links will use them directly; a bug + * in use of discovery links with query strings is worked around. + * + * Others will fall back to oohembed (unless disabled). + * The API endpoint can be configured or disabled through config + * as 'oohembed'/'endpoint'. + */ +class oEmbedHelper +{ + protected static $apiMap = array( + 'flickr.com' => 'http://www.flickr.com/services/oembed/', + 'yfrog.com' => 'http://www.yfrog.com/api/oembed', + ); + protected static $functionMap = array( + 'twitpic.com' => 'oEmbedHelper::twitPic', + ); + + /** + * Perform or fake an oEmbed lookup for the given resource. + * + * Some known hosts are whitelisted with API endpoints where we + * know they exist but autodiscovery data isn't available. + * If autodiscovery links are missing and we don't recognize the + * host, we'll pass it to oohembed.com's public service which + * will either proxy or fake info on a lot of sites. + * + * A few hosts are blacklisted due to known problems with oohembed, + * in which case we'll look up the info another way and return + * equivalent data. + * + * Throws exceptions on failure. + * + * @param string $url + * @param array $params + * @return object + */ + public static function getObject($url, $params=array()) + { + common_log(LOG_INFO, 'QQQ: wtf? ' . $url); + $host = parse_url($url, PHP_URL_HOST); + if (substr($host, 0, 4) == 'www.') { + $host = substr($host, 4); + } + + // Blacklist: systems with no oEmbed API of their own, which are + // either missing from or broken on oohembed.com's proxy. + // we know how to look data up in another way... + if (array_key_exists($host, self::$functionMap)) { + $func = self::$functionMap[$host]; + return call_user_func($func, $url, $params); + } + + // Whitelist: known API endpoints for sites that don't provide discovery... + if (array_key_exists($host, self::$apiMap)) { + $api = self::$apiMap[$host]; + common_log(LOG_INFO, 'QQQ: going to: ' . $api); + } else { + $api = false; + common_log(LOG_INFO, 'QQQ: no map for ' . $host); + } + return self::getObjectFrom($api, $url, $params); + } + + /** + * Actually do an oEmbed lookup to a particular API endpoint, + * or to the autodiscovered target, or to oohembed. + * + * @param mixed $api string or false: oEmbed API endpoint URL + * @param string $url target URL to look up info about + * @param array $params + * @return object + */ + static protected function getObjectFrom($api, $url, $params=array()) + { + $options = array(); + if ($api) { + $options[Services_oEmbed::OPTION_API] = $api; + } + + try { + $oEmbed = new Services_oEmbed_Tweaked($url, $options); + } catch (Services_oEmbed_Exception_NoSupport $e) { + // Discovery failed... fall back to oohembed if enabled. + $oohembed = common_config('oohembed', 'endpoint'); + if ($oohembed) { + $options[Services_oEmbed::OPTION_API] = $oohembed; + $oEmbed = new Services_oEmbed_Tweaked($url, $options); + } else { + throw $e; + } + } + + // And.... let's go look it up! + return $oEmbed->getObject($params); + } + + /** + * Using a local function for twitpic lookups, as oohembed's adapter + * doesn't return a valid result: + * http://code.google.com/p/oohembed/issues/detail?id=19 + * + * This code fetches metadata from Twitpic's own API, and attempts + * to guess proper thumbnail size from the original's size. + * + * @todo respect maxwidth and maxheight params + * + * @param string $url + * @param array $params + * @return object + */ + static function twitPic($url, $params=array()) + { + $matches = array(); + if (preg_match('!twitpic\.com/(\w+)!', $url, $matches)) { + $id = $matches[1]; + } else { + throw new Exception("Invalid twitpic URL"); + } + + // Grab metadata from twitpic's API... + // http://dev.twitpic.com/docs/2/media_show + $data = self::json('http://api.twitpic.com/2/media/show.json', + array('id' => $id)); + $oembed = (object)array('type' => 'photo', + 'url' => 'http://twitpic.com/show/full/' . $data->short_id, + 'width' => $data->width, + 'height' => $data->height); + if (!empty($data->message)) { + $oembed->title = $data->message; + } + + // Thumbnail is cropped and scaled to 150x150 box: + // http://dev.twitpic.com/docs/thumbnails/ + $thumbSize = 150; + $oembed->thumbnail_url = 'http://twitpic.com/show/thumb/' . $data->short_id; + $oembed->thumbnail_width = $thumbSize; + $oembed->thumbnail_height = $thumbSize; + + return $oembed; + } + + /** + * Fetch some URL and return JSON data. + * + * @param string $url + * @param array $params query-string params + * @return object + */ + static protected function json($url, $params=array()) + { + $data = self::http($url, $params); + return json_decode($data); + } + + /** + * Hit some web API and return data on success. + * @param string $url + * @param array $params + * @return string + */ + static protected function http($url, $params=array()) + { + $client = HTTPClient::start(); + if ($params) { + $query = http_build_query($params, null, '&'); + if (strpos($url, '?') === false) { + $url .= '?' . $query; + } else { + $url .= '&' . $query; + } + } + $response = $client->get($url); + if ($response->isOk()) { + return $response->getBody(); + } else { + throw new Exception('Bad HTTP response code: ' . $response->getStatus()); + } + } +} + +class Services_oEmbed_Tweaked extends Services_oEmbed +{ + protected function discover($url) + { + $api = parent::discover($url); + if (strpos($api, '?') !== false) { + // Services_oEmbed doesn't expect to find existing params + // on its API endpoint, which may surprise you since the + // spec says discovery URLs should include parameters... :) + // + // Appending a '&' on the end keeps the later-appended '?' + // from breaking whatever the first parameters was. + return $api . '&'; + } + return $api; + } + + public function getObject(array $params = array()) + { + $api = $this->options[self::OPTION_API]; + if (strpos($api, '?') !== false) { + // The Services_oEmbed code appends a '?' on the end, which breaks + // the next parameter which may be something important like + // maxwidth. + // + // Sticking this bogus entry into our parameters gets us past it. + $params = array_merge(array('statusnet' => 1), $params); + } + return parent::getObject($params); + } + +} \ No newline at end of file From cb371d65c18771f8fcdcbeb450c063b844c000df Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 15 Nov 2010 11:54:42 -0500 Subject: [PATCH 076/220] add hooks for atom pub posts --- EVENTS.txt | 8 +++++++ actions/apitimelineuser.php | 46 ++++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/EVENTS.txt b/EVENTS.txt index 8e730945a4..2df21f01a3 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -1158,3 +1158,11 @@ StartRevokeRole: when a role is being revoked EndRevokeRole: when a role has been revoked - $profile: profile that lost the role - $role: string name of the role + +StartAtomPubNewActivity: When a new activity comes in through Atom Pub API +- &$activity: received activity + +EndAtomPubNewActivity: When a new activity comes in through Atom Pub API +- $activity: received activity +- $notice: notice that was created + diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php index 69cd9c2cb4..7e76636460 100644 --- a/actions/apitimelineuser.php +++ b/actions/apitimelineuser.php @@ -325,21 +325,39 @@ class ApiTimelineUserAction extends ApiBareAuthAction $activity = new Activity($dom->documentElement); - if ($activity->verb != ActivityVerb::POST) { - $this->clientError(_('Can only handle post activities.')); - return; + if (Event::handle('StartAtomPubNewActivity', array(&$activity))) { + + if ($activity->verb != ActivityVerb::POST) { + $this->clientError(_('Can only handle post activities.')); + return; + } + + $note = $activity->objects[0]; + + if (!in_array($note->type, array(ActivityObject::NOTE, + ActivityObject::BLOGENTRY, + ActivityObject::STATUS))) { + $this->clientError(sprintf(_('Cannot handle activity object type "%s"', + $note->type))); + return; + } + + $saved = $this->postNote($activity); + + Event::handle('EndAtomPubNewActivity', array($activity, $saved)); } + if (!empty($saved)) { + header("Location: " . common_local_url('ApiStatusesShow', array('notice_id' => $saved->id, + 'format' => 'atom'))); + $this->showSingleAtomStatus($saved); + } + } + + function postNote($activity) + { $note = $activity->objects[0]; - if (!in_array($note->type, array(ActivityObject::NOTE, - ActivityObject::BLOGENTRY, - ActivityObject::STATUS))) { - $this->clientError(sprintf(_('Cannot handle activity object type "%s"', - $note->type))); - return; - } - // Use summary as fallback for content if (!empty($note->content)) { @@ -458,11 +476,7 @@ class ApiTimelineUserAction extends ApiBareAuthAction 'atompub', // TODO: deal with this $options); - if (!empty($saved)) { - header("Location: " . common_local_url('ApiStatusesShow', array('notice_id' => $saved->id, - 'format' => 'atom'))); - $this->showSingleAtomStatus($saved); - } + return $saved; } function purify($content) From e1ffbfed0463b27b536cc86a70b206eb317f2a33 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 11:00:42 -0800 Subject: [PATCH 077/220] doc comments on File::processNew --- classes/File.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/classes/File.php b/classes/File.php index 499c8d72c3..ef9dbf14ab 100644 --- a/classes/File.php +++ b/classes/File.php @@ -116,10 +116,24 @@ class File extends Memcached_DataObject } /** + * Go look at a URL and possibly save data about it if it's new: + * - follow redirect chains and store them in file_redirection + * - look up oEmbed data and save it in file_oembed + * - if a thumbnail is available, save it in file_thumbnail + * - save file record with basic info + * - optionally save a file_to_post record + * - return the File object with the full reference + * * @fixme refactor this mess, it's gotten pretty scary. - * @param bool $followRedirects + * @param string $given_url the URL we're looking at + * @param int $notice_id (optional) + * @param bool $followRedirects defaults to true + * + * @return mixed File on success, -1 on some errors + * + * @throws ServerException on some errors */ - function processNew($given_url, $notice_id=null, $followRedirects=true) { + public function processNew($given_url, $notice_id=null, $followRedirects=true) { if (empty($given_url)) return -1; // error, no url to process $given_url = File_redirection::_canonUrl($given_url); if (empty($given_url)) return -1; // error, no url to process From 1c90d09ec8bfbbbad80c74c3feb5bf70fd76d926 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 11:01:00 -0800 Subject: [PATCH 078/220] Workaround for yfrog.com photo attachments: fudge File_redirection::lookupWhere()'s HTTP handling -- when we get a 204 on a HEAD, double-check it by re-running as a GET. yfrog.com returns a 204 incorrectly for this case. --- classes/File_redirection.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/classes/File_redirection.php b/classes/File_redirection.php index 68fed77e8b..1976e3439c 100644 --- a/classes/File_redirection.php +++ b/classes/File_redirection.php @@ -91,9 +91,16 @@ class File_redirection extends Memcached_DataObject $request->setMethod(HTTP_Request2::METHOD_HEAD); $response = $request->send(); - if (405 == $response->getStatus()) { + if (405 == $response->getStatus() || 204 == $response->getStatus()) { + // HTTP 405 Unsupported Method // Server doesn't support HEAD method? Can this really happen? // We'll try again as a GET and ignore the response data. + // + // HTTP 204 No Content + // YFrog sends 204 responses back for our HEAD checks, which + // seems like it may be a logic error in their servers. If + // we get a 204 back, re-run it as a GET... if there's really + // no content it'll be cheap. :) $request = self::_commonHttp($short_url, $redirs); $response = $request->send(); } @@ -235,6 +242,18 @@ class File_redirection extends Memcached_DataObject return null; } + /** + * Basic attempt to canonicalize a URL, cleaning up some standard variants + * such as funny syntax or a missing path. Used internally when cleaning + * up URLs for storage and following redirect chains. + * + * Note that despite being on File_redirect, this function DOES NOT perform + * any dereferencing of redirects. + * + * @param string $in_url input URL + * @param string $default_scheme if given a bare link; defaults to 'http://' + * @return string + */ function _canonUrl($in_url, $default_scheme = 'http://') { if (empty($in_url)) return false; $out_url = $in_url; From d038d0fa465f76395f8e341a04a64661b631c122 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 15 Nov 2010 14:14:09 -0500 Subject: [PATCH 079/220] AtomPub-related actions are only read-only on GET --- actions/apistatusesshow.php | 7 ++++++- actions/apitimelineuser.php | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/actions/apistatusesshow.php b/actions/apistatusesshow.php index f4a79ddbcb..e684a07eec 100644 --- a/actions/apistatusesshow.php +++ b/actions/apistatusesshow.php @@ -171,9 +171,14 @@ class ApiStatusesShowAction extends ApiPrivateAuthAction * * @return boolean true */ + function isReadOnly($args) { - return true; + if ($_SERVER['REQUEST_METHOD'] == 'GET') { + return true; + } else { + return false; + } } /** diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php index e4a8b596ee..f716232e43 100644 --- a/actions/apitimelineuser.php +++ b/actions/apitimelineuser.php @@ -241,9 +241,14 @@ class ApiTimelineUserAction extends ApiBareAuthAction * * @return boolean true */ + function isReadOnly($args) { - return true; + if ($_SERVER['REQUEST_METHOD'] == 'GET') { + return true; + } else { + return false; + } } /** From c8445299c71c17e8f652584a05aac65ef7b55ac5 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 11:25:38 -0800 Subject: [PATCH 080/220] Swap the Services_oEmbed wrapper in oEmbedHelper out for doing it ourselves... - workaround for providers that are skimpy on their data, such as missing width/height or thumbnail_width/thumbnail_height - workaround for YFrog listing "image" instead of "photo" type - generally more lax about formatting: if it comes back and looks kinda ok, we'll take it. - discovery uses system HTML parser, should be more robust if the links include things like ampersands with proper HTML-level escaping --- lib/oembedhelper.php | 175 +++++++++++++++++++++++++++++++------------ 1 file changed, 126 insertions(+), 49 deletions(-) diff --git a/lib/oembedhelper.php b/lib/oembedhelper.php index ef2b59214c..0ffea468bf 100644 --- a/lib/oembedhelper.php +++ b/lib/oembedhelper.php @@ -20,11 +20,10 @@ if (!defined('STATUSNET')) { exit(1); } -require_once INSTALLDIR.'/extlib/Services/oEmbed.php'; /** - * Utility class to wrap Services_oEmbed: + * Utility class to wrap basic oEmbed lookups. * * Blacklisted hosts will use an alternate lookup method: * - Twitpic @@ -89,43 +88,134 @@ class oEmbedHelper $api = self::$apiMap[$host]; common_log(LOG_INFO, 'QQQ: going to: ' . $api); } else { - $api = false; common_log(LOG_INFO, 'QQQ: no map for ' . $host); + try { + $api = self::discover($url); + } catch (Exception $e) { + // Discovery failed... fall back to oohembed if enabled. + $oohembed = common_config('oohembed', 'endpoint'); + if ($oohembed) { + $api = $oohembed; + } else { + throw $e; + } + } + common_log(LOG_INFO, 'QQQ: going to: ' . $api); } return self::getObjectFrom($api, $url, $params); } /** - * Actually do an oEmbed lookup to a particular API endpoint, - * or to the autodiscovered target, or to oohembed. + * Perform basic discovery. + * @return string + */ + static function discover($url) + { + // @fixme ideally skip this for non-HTML stuff! + $body = self::http($url); + return self::discoverFromHTML($url, $body); + } + + /** + * Partially ripped from OStatus' FeedDiscovery class. * - * @param mixed $api string or false: oEmbed API endpoint URL + * @param string $url source URL, used to resolve relative links + * @param string $body HTML body text + * @return mixed string with URL or false if no target found + */ + static function discoverFromHTML($url, $body) + { + // DOMDocument::loadHTML may throw warnings on unrecognized elements, + // and notices on unrecognized namespaces. + $old = error_reporting(error_reporting() & ~(E_WARNING | E_NOTICE)); + $dom = new DOMDocument(); + $ok = $dom->loadHTML($body); + error_reporting($old); + + if (!$ok) { + throw new oEmbedHelper_BadHtmlException(); + } + + // Ok... now on to the links! + $feeds = array( + 'application/json+oembed' => false, + ); + + $nodes = $dom->getElementsByTagName('link'); + for ($i = 0; $i < $nodes->length; $i++) { + $node = $nodes->item($i); + if ($node->hasAttributes()) { + $rel = $node->attributes->getNamedItem('rel'); + $type = $node->attributes->getNamedItem('type'); + $href = $node->attributes->getNamedItem('href'); + if ($rel && $type && $href) { + $rel = array_filter(explode(" ", $rel->value)); + $type = trim($type->value); + $href = trim($href->value); + + if (in_array('alternate', $rel) && array_key_exists($type, $feeds) && empty($feeds[$type])) { + // Save the first feed found of each type... + $feeds[$type] = $href; + } + } + } + } + + // Return the highest-priority feed found + foreach ($feeds as $type => $url) { + if ($url) { + return $url; + } + } + + return false; + throw new oEmbedHelper_DiscoveryException(); + } + + /** + * Actually do an oEmbed lookup to a particular API endpoint. + * + * @param string $api oEmbed API endpoint URL * @param string $url target URL to look up info about * @param array $params * @return object */ - static protected function getObjectFrom($api, $url, $params=array()) + static function getObjectFrom($api, $url, $params=array()) { - $options = array(); - if ($api) { - $options[Services_oEmbed::OPTION_API] = $api; + $params['url'] = $url; + $params['format'] = 'json'; + $data = self::json($api, $params); + return self::normalize($data); + } + + /** + * Normalize oEmbed format. + * + * @param object $orig + * @return object + */ + static function normalize($orig) + { + $data = clone($orig); + + if (empty($data->type)) { + throw new Exception('Invalid oEmbed data: no type field.'); } - try { - $oEmbed = new Services_oEmbed_Tweaked($url, $options); - } catch (Services_oEmbed_Exception_NoSupport $e) { - // Discovery failed... fall back to oohembed if enabled. - $oohembed = common_config('oohembed', 'endpoint'); - if ($oohembed) { - $options[Services_oEmbed::OPTION_API] = $oohembed; - $oEmbed = new Services_oEmbed_Tweaked($url, $options); - } else { - throw $e; + if ($data->type == 'image') { + // YFrog does this. + $data->type = 'photo'; + } + + if (isset($data->thumbnail_url)) { + if (!isset($data->thumbnail_width)) { + // !?!?! + $data->thumbnail_width = common_config('attachments', 'thumb_width'); + $data->thumbnail_height = common_config('attachments', 'thumb_height'); } } - // And.... let's go look it up! - return $oEmbed->getObject($params); + return $data; } /** @@ -212,35 +302,22 @@ class oEmbedHelper } } -class Services_oEmbed_Tweaked extends Services_oEmbed +class oEmbedHelper_Exception extends Exception { - protected function discover($url) - { - $api = parent::discover($url); - if (strpos($api, '?') !== false) { - // Services_oEmbed doesn't expect to find existing params - // on its API endpoint, which may surprise you since the - // spec says discovery URLs should include parameters... :) - // - // Appending a '&' on the end keeps the later-appended '?' - // from breaking whatever the first parameters was. - return $api . '&'; - } - return $api; - } +} - public function getObject(array $params = array()) +class oEmbedHelper_BadHtmlException extends oEmbedHelper_Exception +{ + function __construct($previous=null) { - $api = $this->options[self::OPTION_API]; - if (strpos($api, '?') !== false) { - // The Services_oEmbed code appends a '?' on the end, which breaks - // the next parameter which may be something important like - // maxwidth. - // - // Sticking this bogus entry into our parameters gets us past it. - $params = array_merge(array('statusnet' => 1), $params); - } - return parent::getObject($params); + return parent::__construct('Bad HTML in discovery data.', 0, $previous); } +} -} \ No newline at end of file +class oEmbedHelper_DiscoveryException extends oEmbedHelper_Exception +{ + function __construct($previous=null) + { + return parent::__construct('No oEmbed discovery data.', 0, $previous); + } +} From 57ec01d0b8c6d46fba1c0aca258dec690f408c60 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 11:30:35 -0800 Subject: [PATCH 081/220] Drop some debug lines --- lib/oembedhelper.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/oembedhelper.php b/lib/oembedhelper.php index 0ffea468bf..8cd4a9dc4a 100644 --- a/lib/oembedhelper.php +++ b/lib/oembedhelper.php @@ -69,7 +69,6 @@ class oEmbedHelper */ public static function getObject($url, $params=array()) { - common_log(LOG_INFO, 'QQQ: wtf? ' . $url); $host = parse_url($url, PHP_URL_HOST); if (substr($host, 0, 4) == 'www.') { $host = substr($host, 4); @@ -86,9 +85,7 @@ class oEmbedHelper // Whitelist: known API endpoints for sites that don't provide discovery... if (array_key_exists($host, self::$apiMap)) { $api = self::$apiMap[$host]; - common_log(LOG_INFO, 'QQQ: going to: ' . $api); } else { - common_log(LOG_INFO, 'QQQ: no map for ' . $host); try { $api = self::discover($url); } catch (Exception $e) { @@ -100,7 +97,6 @@ class oEmbedHelper throw $e; } } - common_log(LOG_INFO, 'QQQ: going to: ' . $api); } return self::getObjectFrom($api, $url, $params); } From 87114a5c30ff50d75cb00fa0bffee1a47da35156 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 11:55:28 -0800 Subject: [PATCH 082/220] Add some basic oEmbed lookup test cases; fixed a bug in discovery fallback. --- lib/oembedhelper.php | 1 - tests/oEmbedTest.php | 67 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 tests/oEmbedTest.php diff --git a/lib/oembedhelper.php b/lib/oembedhelper.php index 8cd4a9dc4a..84cf105867 100644 --- a/lib/oembedhelper.php +++ b/lib/oembedhelper.php @@ -164,7 +164,6 @@ class oEmbedHelper } } - return false; throw new oEmbedHelper_DiscoveryException(); } diff --git a/tests/oEmbedTest.php b/tests/oEmbedTest.php new file mode 100644 index 0000000000..eabee00ad9 --- /dev/null +++ b/tests/oEmbedTest.php @@ -0,0 +1,67 @@ +old_oohembed = common_config('oohembed', 'endpoint'); + } + + public function tearDown() + { + //$GLOBALS['config']['attachments']['supported'] = $this->old_attachments_supported; + } + + /** + * @dataProvider fileTypeCases + * + */ + public function testoEmbed($url, $expectedType) + { + try { + $data = oEmbedHelper::getObject($url); + $this->assertEquals($expectedType, $data->type); + } catch (Exception $e) { + if ($expectedType == 'none') { + $this->assertEquals($expectedType, 'none', 'Should not have data for this URL.'); + } else { + throw $e; + } + } + } + + static public function fileTypeCases() + { + $files = array( + 'http://www.flickr.com/photos/brionv/5172500179/' => 'photo', + 'http://twitpic.com/36adw6' => 'photo', + 'http://yfrog.com/fy42747177j' => 'photo', + 'http://identi.ca/attachment/34437400' => 'photo', + + 'http://www.youtube.com/watch?v=eUgLR232Cnw' => 'video', + 'http://vimeo.com/9283184' => 'video', + + 'http://en.wikipedia.org/wiki/File:Wiki.png' => 'link', // @fixme in future there may be a native provider -- will change to 'photo' + 'http://leuksman.com/log/2010/10/29/statusnet-0-9-6-release/' => 'none', + ); + + $dataset = array(); + foreach ($files as $url => $type) { + $dataset[] = array($url, $type); + } + return $dataset; + } + +} + From 68ff57f230c35a7b8ecfcb5c95f219b14f21f60f Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 12:25:44 -0800 Subject: [PATCH 083/220] Restructure oembed test sources --- tests/oEmbedTest.php | 64 ++++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/tests/oEmbedTest.php b/tests/oEmbedTest.php index eabee00ad9..0a8841606e 100644 --- a/tests/oEmbedTest.php +++ b/tests/oEmbedTest.php @@ -24,7 +24,7 @@ class oEmbedTest extends PHPUnit_Framework_TestCase } /** - * @dataProvider fileTypeCases + * @dataProvider fallbackSources * */ public function testoEmbed($url, $expectedType) @@ -41,27 +41,51 @@ class oEmbedTest extends PHPUnit_Framework_TestCase } } - static public function fileTypeCases() + /** + * Sample oEmbed targets for sites we know ourselves... + * @return array + */ + static public function knownSources() { - $files = array( - 'http://www.flickr.com/photos/brionv/5172500179/' => 'photo', - 'http://twitpic.com/36adw6' => 'photo', - 'http://yfrog.com/fy42747177j' => 'photo', - 'http://identi.ca/attachment/34437400' => 'photo', - - 'http://www.youtube.com/watch?v=eUgLR232Cnw' => 'video', - 'http://vimeo.com/9283184' => 'video', - - 'http://en.wikipedia.org/wiki/File:Wiki.png' => 'link', // @fixme in future there may be a native provider -- will change to 'photo' - 'http://leuksman.com/log/2010/10/29/statusnet-0-9-6-release/' => 'none', + $sources = array( + array('http://www.flickr.com/photos/brionv/5172500179/', 'photo'), + array('http://yfrog.com/fy42747177j', 'photo'), + array('http://twitpic.com/36adw6', 'photo'), ); - - $dataset = array(); - foreach ($files as $url => $type) { - $dataset[] = array($url, $type); - } - return $dataset; + return $sources; } -} + /** + * Sample oEmbed targets that can be found via discovery. + * Includes also knownSources() output. + * + * @return array + */ + static public function discoverableSources() + { + $sources = array( + array('http://identi.ca/attachment/34437400', 'photo'), + array('http://www.youtube.com/watch?v=eUgLR232Cnw', 'video'), + array('http://vimeo.com/9283184', 'video'), + + // Will fail discovery: + array('http://leuksman.com/log/2010/10/29/statusnet-0-9-6-release/', 'none'), + ); + return array_merge(self::knownSources(), $sources); + } + + /** + * Sample oEmbed targets that can be found via oohembed.com. + * Includes also discoverableSources() output. + * + * @return array + */ + static public function fallbackSources() + { + $sources = array( + array('http://en.wikipedia.org/wiki/File:Wiki.png', 'link'), // @fixme in future there may be a native provider -- will change to 'photo' + ); + return array_merge(self::discoverableSources(), $sources); + } +} From 727596f35d7b88691a2ac60eecc2575f2a3c33f9 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 12:32:29 -0800 Subject: [PATCH 084/220] Test oEmbed lookups with oohembed both on and off explicitly --- tests/oEmbedTest.php | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/tests/oEmbedTest.php b/tests/oEmbedTest.php index 0a8841606e..d00963003e 100644 --- a/tests/oEmbedTest.php +++ b/tests/oEmbedTest.php @@ -15,19 +15,56 @@ class oEmbedTest extends PHPUnit_Framework_TestCase public function setup() { - //$this->old_oohembed = common_config('oohembed', 'endpoint'); + $this->old_oohembed = common_config('oohembed', 'endpoint'); } public function tearDown() { - //$GLOBALS['config']['attachments']['supported'] = $this->old_attachments_supported; + $GLOBALS['config']['oohembed']['endpoint'] = $this->old_oohembed; } /** - * @dataProvider fallbackSources + * Test with oohembed DISABLED. * + * @dataProvider discoverableSources */ public function testoEmbed($url, $expectedType) + { + $GLOBALS['config']['oohembed']['endpoint'] = false; + $this->_doTest($url, $expectedType); + } + + /** + * Test with oohembed ENABLED. + * + * @dataProvider fallbackSources + */ + public function testoohEmbed($url, $expectedType) + { + $GLOBALS['config']['oohembed']['endpoint'] = $this->_endpoint(); + $this->_doTest($url, $expectedType); + } + + /** + * Get default oohembed endpoint. + * + * @return string + */ + function _endpoint() + { + $default = array(); + $_server = 'localhost'; $_path = ''; + require INSTALLDIR . '/lib/default.php'; + return $default['oohembed']['endpoint']; + } + + /** + * Actually run an individual test. + * + * @param string $url + * @param string $expectedType + */ + function _doTest($url, $expectedType) { try { $data = oEmbedHelper::getObject($url); From e317ec11ad470fe57dc12c0bde1566abde1c036a Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 12:35:15 -0800 Subject: [PATCH 085/220] Drop PEAR Services_oEmbed -- ended up replaced by our oEmbedHelper wrapper. The extra validation available there is problematic, and their code for building HTML for us wasn't being used anyway. --- README | 6 +- extlib/Services/oEmbed.php | 357 ------------------ extlib/Services/oEmbed/Exception.php | 65 ---- .../Services/oEmbed/Exception/NoSupport.php | 63 ---- extlib/Services/oEmbed/Object.php | 126 ------- extlib/Services/oEmbed/Object/Common.php | 139 ------- extlib/Services/oEmbed/Object/Exception.php | 65 ---- extlib/Services/oEmbed/Object/Link.php | 73 ---- extlib/Services/oEmbed/Object/Photo.php | 89 ----- extlib/Services/oEmbed/Object/Rich.php | 82 ---- extlib/Services/oEmbed/Object/Video.php | 82 ---- 11 files changed, 2 insertions(+), 1145 deletions(-) delete mode 100644 extlib/Services/oEmbed.php delete mode 100644 extlib/Services/oEmbed/Exception.php delete mode 100644 extlib/Services/oEmbed/Exception/NoSupport.php delete mode 100644 extlib/Services/oEmbed/Object.php delete mode 100644 extlib/Services/oEmbed/Object/Common.php delete mode 100644 extlib/Services/oEmbed/Object/Exception.php delete mode 100644 extlib/Services/oEmbed/Object/Link.php delete mode 100644 extlib/Services/oEmbed/Object/Photo.php delete mode 100644 extlib/Services/oEmbed/Object/Rich.php delete mode 100644 extlib/Services/oEmbed/Object/Video.php diff --git a/README b/README index b36d8b7454..6343e3e024 100644 --- a/README +++ b/README @@ -220,14 +220,12 @@ and the URLs are listed here for your convenience. version may render your StatusNet site unable to send or receive XMPP messages. - Facebook library. Used for the Facebook application. -- PEAR Services_oEmbed. Used for some multimedia integration. -- PEAR HTTP_Request is an oEmbed dependency. -- PEAR Validate is an oEmbed dependency. -- PEAR Net_URL2 is an oEmbed dependency. +- PEAR Validate is used for URL and email validation. - Console_GetOpt for parsing command-line options. - libomb. a library for implementing OpenMicroBlogging 0.1, the predecessor to OStatus. - HTTP_Request2, a library for making HTTP requests. +- PEAR Net_URL2 is an HTTP_Request2 dependency. A design goal of StatusNet is that the basic Web functionality should work on even the most restrictive commercial hosting services. diff --git a/extlib/Services/oEmbed.php b/extlib/Services/oEmbed.php deleted file mode 100644 index 0dc8f01b2f..0000000000 --- a/extlib/Services/oEmbed.php +++ /dev/null @@ -1,357 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -require_once 'Validate.php'; -require_once 'Net/URL2.php'; -require_once 'HTTP/Request.php'; -require_once 'Services/oEmbed/Exception.php'; -require_once 'Services/oEmbed/Exception/NoSupport.php'; -require_once 'Services/oEmbed/Object.php'; - -/** - * Base class for consuming oEmbed objects - * - * - * 'http://www.flickr.com/services/oembed/' - * )); - * $object = $oEmbed->getObject(); - * - * // All of the objects have somewhat sane __toString() methods that allow - * // you to output them directly. - * echo (string)$object; - * - * ?> - * - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -class Services_oEmbed -{ - /** - * HTTP timeout in seconds - * - * All HTTP requests made by Services_oEmbed will respect this timeout. - * This can be passed to {@link Services_oEmbed::setOption()} or to the - * options parameter in {@link Services_oEmbed::__construct()}. - * - * @var string OPTION_TIMEOUT Timeout in seconds - */ - const OPTION_TIMEOUT = 'http_timeout'; - - /** - * HTTP User-Agent - * - * All HTTP requests made by Services_oEmbed will be sent with the - * string set by this option. - * - * @var string OPTION_USER_AGENT The HTTP User-Agent string - */ - const OPTION_USER_AGENT = 'http_user_agent'; - - /** - * The API's URI - * - * If the API is known ahead of time this option can be used to explicitly - * set it. If not present then the API is attempted to be discovered - * through the auto-discovery mechanism. - * - * @var string OPTION_API - */ - const OPTION_API = 'oembed_api'; - - /** - * Options for oEmbed requests - * - * @var array $options The options for making requests - */ - protected $options = array( - self::OPTION_TIMEOUT => 3, - self::OPTION_API => null, - self::OPTION_USER_AGENT => 'Services_oEmbed 0.1.0' - ); - - /** - * URL of object to get embed information for - * - * @var object $url {@link Net_URL2} instance of URL of object - */ - protected $url = null; - - /** - * Constructor - * - * @param string $url The URL to fetch an oEmbed for - * @param array $options A list of options for the oEmbed lookup - * - * @throws {@link Services_oEmbed_Exception} if the $url is invalid - * @throws {@link Services_oEmbed_Exception} when no valid API is found - * @return void - */ - public function __construct($url, array $options = array()) - { - if (Validate::uri($url)) { - $this->url = new Net_URL2($url); - } else { - throw new Services_oEmbed_Exception('URL is invalid'); - } - - if (count($options)) { - foreach ($options as $key => $val) { - $this->setOption($key, $val); - } - } - - if ($this->options[self::OPTION_API] === null) { - $this->options[self::OPTION_API] = $this->discover($url); - } - } - - /** - * Set an option for the oEmbed request - * - * @param mixed $option The option name - * @param mixed $value The option value - * - * @see Services_oEmbed::OPTION_API, Services_oEmbed::OPTION_TIMEOUT - * @throws {@link Services_oEmbed_Exception} on invalid option - * @access public - * @return void - */ - public function setOption($option, $value) - { - switch ($option) { - case self::OPTION_API: - case self::OPTION_TIMEOUT: - break; - default: - throw new Services_oEmbed_Exception( - 'Invalid option "' . $option . '"' - ); - } - - $func = '_set_' . $option; - if (method_exists($this, $func)) { - $this->options[$option] = $this->$func($value); - } else { - $this->options[$option] = $value; - } - } - - /** - * Set the API option - * - * @param string $value The API's URI - * - * @throws {@link Services_oEmbed_Exception} on invalid API URI - * @see Validate::uri() - * @return string - */ - protected function _set_oembed_api($value) - { - if (!Validate::uri($value)) { - throw new Services_oEmbed_Exception( - 'API URI provided is invalid' - ); - } - - return $value; - } - - /** - * Get the oEmbed response - * - * @param array $params Optional parameters for - * - * @throws {@link Services_oEmbed_Exception} on cURL errors - * @throws {@link Services_oEmbed_Exception} on HTTP errors - * @throws {@link Services_oEmbed_Exception} when result is not parsable - * @return object The oEmbed response as an object - */ - public function getObject(array $params = array()) - { - $params['url'] = $this->url->getURL(); - if (!isset($params['format'])) { - $params['format'] = 'json'; - } - - $sets = array(); - foreach ($params as $var => $val) { - $sets[] = $var . '=' . urlencode($val); - } - - $url = $this->options[self::OPTION_API] . '?' . implode('&', $sets); - - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_HEADER, false); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->options[self::OPTION_TIMEOUT]); - $result = curl_exec($ch); - - if (curl_errno($ch)) { - throw new Services_oEmbed_Exception( - curl_error($ch), curl_errno($ch) - ); - } - - $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); - if (substr($code, 0, 1) != '2') { - throw new Services_oEmbed_Exception('Non-200 code returned. Got code ' . $code); - } - - curl_close($ch); - - switch ($params['format']) { - case 'json': - $res = json_decode($result); - if (!is_object($res)) { - throw new Services_oEmbed_Exception( - 'Could not parse JSON response' - ); - } - break; - case 'xml': - libxml_use_internal_errors(true); - $res = simplexml_load_string($result); - if (!$res instanceof SimpleXMLElement) { - $errors = libxml_get_errors(); - $err = array_shift($errors); - libxml_clear_errors(); - libxml_use_internal_errors(false); - throw new Services_oEmbed_Exception( - $err->message, $error->code - ); - } - break; - } - - return Services_oEmbed_Object::factory($res); - } - - /** - * Discover an oEmbed API - * - * @param string $url The URL to attempt to discover oEmbed for - * - * @throws {@link Services_oEmbed_Exception} if the $url is invalid - * @return string The oEmbed API endpoint discovered - */ - protected function discover($url) - { - $body = $this->sendRequest($url); - - // Find all tags that have a valid oembed type set. We then - // extract the href attribute for each type. - $regexp = '#]*)type[\s\n]*=[\s\n]*"' . - '(application/json|text/xml)\+oembed"([^>]*)>#im'; - - $m = $ret = array(); - if (!preg_match_all($regexp, $body, $m)) { - throw new Services_oEmbed_Exception_NoSupport( - 'No valid oEmbed links found on page' - ); - } - - foreach ($m[0] as $i => $link) { - $h = array(); - if (preg_match('/[\s\n]+href[\s\n]*=[\s\n]*"([^"]+)"/im', $link, $h)) { - $ret[$m[2][$i]] = $h[1]; - } - } - - return (isset($ret['application/json']) ? $ret['application/json'] : array_pop($ret)); - } - - /** - * Send a GET request to the provider - * - * @param mixed $url The URL to send the request to - * - * @throws {@link Services_oEmbed_Exception} on HTTP errors - * @return string The contents of the response - */ - private function sendRequest($url) - { - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_HEADER, false); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->options[self::OPTION_TIMEOUT]); - curl_setopt($ch, CURLOPT_USERAGENT, $this->options[self::OPTION_USER_AGENT]); - $result = curl_exec($ch); - if (curl_errno($ch)) { - throw new Services_oEmbed_Exception( - curl_error($ch), curl_errno($ch) - ); - } - - $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); - if (substr($code, 0, 1) != '2') { - throw new Services_oEmbed_Exception('Non-200 code returned. Got code ' . $code); - } - - return $result; - } -} - -?> diff --git a/extlib/Services/oEmbed/Exception.php b/extlib/Services/oEmbed/Exception.php deleted file mode 100644 index 446ac2a706..0000000000 --- a/extlib/Services/oEmbed/Exception.php +++ /dev/null @@ -1,65 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -require_once 'PEAR/Exception.php'; - -/** - * Base exception class for {@link Services_oEmbed} - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -class Services_oEmbed_Exception extends PEAR_Exception -{ - -} - -?> diff --git a/extlib/Services/oEmbed/Exception/NoSupport.php b/extlib/Services/oEmbed/Exception/NoSupport.php deleted file mode 100644 index 384c7191f2..0000000000 --- a/extlib/Services/oEmbed/Exception/NoSupport.php +++ /dev/null @@ -1,63 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -/** - * Exception class when no oEmbed support is discovered - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -class Services_oEmbed_Exception_NoSupport extends Services_oEmbed_Exception -{ - -} - -?> diff --git a/extlib/Services/oEmbed/Object.php b/extlib/Services/oEmbed/Object.php deleted file mode 100644 index 9eedd7efb6..0000000000 --- a/extlib/Services/oEmbed/Object.php +++ /dev/null @@ -1,126 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -require_once 'Services/oEmbed/Object/Exception.php'; - -/** - * Base class for consuming oEmbed objects - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -abstract class Services_oEmbed_Object -{ - - /** - * Valid oEmbed object types - * - * @var array $types Array of valid object types - * @see Services_oEmbed_Object::factory() - */ - static protected $types = array( - 'photo' => 'Photo', - 'video' => 'Video', - 'link' => 'Link', - 'rich' => 'Rich' - ); - - /** - * Create an oEmbed object from result - * - * @param object $object Raw object returned from API - * - * @throws {@link Services_oEmbed_Object_Exception} on object error - * @return object Instance of object driver - * @see Services_oEmbed_Object_Link, Services_oEmbed_Object_Photo - * @see Services_oEmbed_Object_Rich, Services_oEmbed_Object_Video - */ - static public function factory($object) - { - if (!isset($object->type)) { - throw new Services_oEmbed_Object_Exception( - 'Object has no type' - ); - } - - $type = (string)$object->type; - if (!isset(self::$types[$type])) { - throw new Services_oEmbed_Object_Exception( - 'Object type is unknown or invalid: ' . $type - ); - } - - $file = 'Services/oEmbed/Object/' . self::$types[$type] . '.php'; - include_once $file; - - $class = 'Services_oEmbed_Object_' . self::$types[$type]; - if (!class_exists($class)) { - throw new Services_oEmbed_Object_Exception( - 'Object class is invalid or not present' - ); - } - - $instance = new $class($object); - return $instance; - } - - /** - * Instantiation is not allowed - * - * @return void - */ - private function __construct() - { - - } -} - -?> diff --git a/extlib/Services/oEmbed/Object/Common.php b/extlib/Services/oEmbed/Object/Common.php deleted file mode 100644 index f568ec89f5..0000000000 --- a/extlib/Services/oEmbed/Object/Common.php +++ /dev/null @@ -1,139 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -/** - * Base class for oEmbed objects - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -abstract class Services_oEmbed_Object_Common -{ - /** - * Raw object returned from API - * - * @var object $object The raw object from the API - */ - protected $object = null; - - /** - * Required fields per the specification - * - * @var array $required Array of required fields - * @link http://oembed.com - */ - protected $required = array(); - - /** - * Constructor - * - * @param object $object Raw object returned from the API - * - * @throws {@link Services_oEmbed_Object_Exception} on missing fields - * @return void - */ - public function __construct($object) - { - $this->object = $object; - - $this->required[] = 'version'; - foreach ($this->required as $field) { - if (!isset($this->$field)) { - throw new Services_oEmbed_Object_Exception( - 'Object is missing required ' . $field . ' attribute' - ); - } - } - } - - /** - * Get object variable - * - * @param string $var Variable to get - * - * @see Services_oEmbed_Object_Common::$object - * @return mixed Attribute's value or null if it's not set/exists - */ - public function __get($var) - { - if (property_exists($this->object, $var)) { - return $this->object->$var; - } - - return null; - } - - /** - * Is variable set? - * - * @param string $var Variable name to check - * - * @return boolean True if set, false if not - * @see Services_oEmbed_Object_Common::$object - */ - public function __isset($var) - { - if (property_exists($this->object, $var)) { - return (isset($this->object->$var)); - } - - return false; - } - - /** - * Require a sane __toString for all objects - * - * @return string - */ - abstract public function __toString(); -} - -?> diff --git a/extlib/Services/oEmbed/Object/Exception.php b/extlib/Services/oEmbed/Object/Exception.php deleted file mode 100644 index 6025ffd494..0000000000 --- a/extlib/Services/oEmbed/Object/Exception.php +++ /dev/null @@ -1,65 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -require_once 'Services/oEmbed/Exception.php'; - -/** - * Exception for {@link Services_oEmbed_Object} - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -class Services_oEmbed_Object_Exception extends Services_oEmbed_Exception -{ - -} - -?> diff --git a/extlib/Services/oEmbed/Object/Link.php b/extlib/Services/oEmbed/Object/Link.php deleted file mode 100644 index 9b627a89ac..0000000000 --- a/extlib/Services/oEmbed/Object/Link.php +++ /dev/null @@ -1,73 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -require_once 'Services/oEmbed/Object/Common.php'; - -/** - * Link object for {@link Services_oEmbed} - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -class Services_oEmbed_Object_Link extends Services_oEmbed_Object_Common -{ - /** - * Output a sane link - * - * @return string An HTML link of the object - */ - public function __toString() - { - return '' . $this->title . ''; - } -} - -?> diff --git a/extlib/Services/oEmbed/Object/Photo.php b/extlib/Services/oEmbed/Object/Photo.php deleted file mode 100644 index 5fbf4292fa..0000000000 --- a/extlib/Services/oEmbed/Object/Photo.php +++ /dev/null @@ -1,89 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -require_once 'Services/oEmbed/Object/Common.php'; - -/** - * Photo object for {@link Services_oEmbed} - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -class Services_oEmbed_Object_Photo extends Services_oEmbed_Object_Common -{ - /** - * Required fields for photo objects - * - * @var array $required Required fields - */ - protected $required = array( - 'url', 'width', 'height' - ); - - /** - * Output a valid HTML tag for image - * - * @return string HTML tag for Photo - */ - public function __toString() - { - $img = 'title)) { - $img .= ' alt="' . $this->title . '"'; - } - - return $img . ' />'; - } -} - -?> diff --git a/extlib/Services/oEmbed/Object/Rich.php b/extlib/Services/oEmbed/Object/Rich.php deleted file mode 100644 index dbf6933ac7..0000000000 --- a/extlib/Services/oEmbed/Object/Rich.php +++ /dev/null @@ -1,82 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -require_once 'Services/oEmbed/Object/Common.php'; - -/** - * Photo object for {@link Services_oEmbed} - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -class Services_oEmbed_Object_Rich extends Services_oEmbed_Object_Common -{ - /** - * Required fields for rich objects - * - * @var array $required Required fields - */ - protected $required = array( - 'html', 'width', 'height' - ); - - /** - * Output a the HTML tag for rich object - * - * @return string HTML for rich object - */ - public function __toString() - { - return $this->html; - } -} - -?> diff --git a/extlib/Services/oEmbed/Object/Video.php b/extlib/Services/oEmbed/Object/Video.php deleted file mode 100644 index 7461081151..0000000000 --- a/extlib/Services/oEmbed/Object/Video.php +++ /dev/null @@ -1,82 +0,0 @@ - - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version SVN: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ - -require_once 'Services/oEmbed/Object/Common.php'; - -/** - * Photo object for {@link Services_oEmbed} - * - * @category Services - * @package Services_oEmbed - * @author Joe Stump - * @copyright 2008 Digg.com, Inc. - * @license http://tinyurl.com/42zef New BSD License - * @version Release: @version@ - * @link http://code.google.com/p/digg - * @link http://oembed.com - */ -class Services_oEmbed_Object_Video extends Services_oEmbed_Object_Common -{ - /** - * Required fields for video objects - * - * @var array $required Required fields - */ - protected $required = array( - 'html', 'width', 'height' - ); - - /** - * Output a valid embed tag for video - * - * @return string HTML for video - */ - public function __toString() - { - return $this->html; - } -} - -?> From fe7cb35551053380a359c17a49402abeaf684f46 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 12:56:56 -0800 Subject: [PATCH 086/220] restore empty showFallback() for attachment display; still needed for one-offs --- lib/attachmentlist.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php index 0d56791d70..7e536925bf 100644 --- a/lib/attachmentlist.php +++ b/lib/attachmentlist.php @@ -452,4 +452,9 @@ class Attachment extends AttachmentListItem return $scrubbed; } + + function showFallback() + { + // still needed: should show a link? + } } From 89d59936748ee55bff31f161e6a0f2a1cbd44635 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 12:57:15 -0800 Subject: [PATCH 087/220] Include width/height of locally-uploaded images in our oembed provider data for attachment pages. --- actions/oembed.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/actions/oembed.php b/actions/oembed.php index 11d8145837..09d68a446e 100644 --- a/actions/oembed.php +++ b/actions/oembed.php @@ -108,9 +108,16 @@ class OembedAction extends Action $oembed['url']=$file_oembed->url; }else if(substr($attachment->mimetype,0,strlen('image/'))=='image/'){ $oembed['type']='photo'; - //TODO set width and height - //$oembed['width']= - //$oembed['height']= + if ($attachment->filename) { + $filepath = File::path($attachment->filename); + $gis = @getimagesize($filepath); + if ($gis) { + $oembed['width'] = $gis[0]; + $oembed['height'] = $gis[1]; + } else { + // TODO Either throw an error or find a fallback? + } + } $oembed['url']=$attachment->url; $thumb = $attachment->getThumbnail(); if ($thumb) { From 0735ca86d27b774481f294c5500fd4f1d00db04c Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 12:58:00 -0800 Subject: [PATCH 088/220] Add some data integrity checks on oembed tests (shows a bug on identi.ca test case -- missing width/height in photo data) --- tests/oEmbedTest.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/oEmbedTest.php b/tests/oEmbedTest.php index d00963003e..b5e441c42f 100644 --- a/tests/oEmbedTest.php +++ b/tests/oEmbedTest.php @@ -69,6 +69,18 @@ class oEmbedTest extends PHPUnit_Framework_TestCase try { $data = oEmbedHelper::getObject($url); $this->assertEquals($expectedType, $data->type); + if ($data->type == 'photo') { + $this->assertTrue(!empty($data->url), 'Photo must have a URL.'); + $this->assertTrue(!empty($data->width), 'Photo must have a width.'); + $this->assertTrue(!empty($data->height), 'Photo must have a height.'); + } else if ($data->type == 'video') { + $this->assertTrue(!empty($data->html), 'Video must have embedding HTML.'); + $this->assertTrue(!empty($data->thumbnail_url), 'Video should have a thumbnail.'); + } + if (!empty($data->thumbnail_url)) { + $this->assertTrue(!empty($data->thumbnail_width), 'Thumbnail must list a width.'); + $this->assertTrue(!empty($data->thumbnail_height), 'Thumbnail must list a height.'); + } } catch (Exception $e) { if ($expectedType == 'none') { $this->assertEquals($expectedType, 'none', 'Should not have data for this URL.'); From defaa3b332c74741bb6df129cc51df825986a08b Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 13:26:42 -0800 Subject: [PATCH 089/220] clear_jabber.php script to clear confirmed jabber/xmpp addresses from one or more accounts --- scripts/clear_jabber.php | 92 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100755 scripts/clear_jabber.php diff --git a/scripts/clear_jabber.php b/scripts/clear_jabber.php new file mode 100755 index 0000000000..5ec53caf0e --- /dev/null +++ b/scripts/clear_jabber.php @@ -0,0 +1,92 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); + +$shortoptions = 'i::n::y'; +$longoptions = array('id=', 'nickname=', 'yes', 'all', 'dry-run'); + +$helptext = <<whereAdd("jabber != ''"); + $user->find(true); + if ($user->N == 0) { + print "No users with registered Jabber addresses in database.\n"; + exit(1); + } +} else { + print "You must provide either an ID or a nickname.\n"; + print "\n"; + print $helptext; + exit(1); +} + +function clear_jabber($id) +{ + $user = User::staticGet('id', $id); + if ($user && $user->jabber) { + echo "clearing user $id's user.jabber, was: $user->jabber"; + if (have_option('dry-run')) { + echo " (SKIPPING)"; + } else { + $original = clone($user); + $user->jabber = null; + $result = $user->updateKeys($original); + } + echo "\n"; + } else if (!$user) { + echo "Missing user for $id\n"; + } else { + echo "Cleared jabber already for $id\n"; + } +} + +do { + clear_jabber($user->id); +} while ($user->fetch()); + +print "DONE.\n"; From 227d4b688949a70c1dd3923628a101e1f0208e15 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 14:15:41 -0800 Subject: [PATCH 090/220] Stub ModPlus plugin: will hold experimental UI improvements for mod actions --- plugins/ModPlus/ModPlusPlugin.php | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 plugins/ModPlus/ModPlusPlugin.php diff --git a/plugins/ModPlus/ModPlusPlugin.php b/plugins/ModPlus/ModPlusPlugin.php new file mode 100644 index 0000000000..485b821813 --- /dev/null +++ b/plugins/ModPlus/ModPlusPlugin.php @@ -0,0 +1,43 @@ +. + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Some UI extras for now... + * + * @package ModPlusPlugin + * @maintainer Brion Vibber + */ +class ModPlusPlugin extends Plugin +{ + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'ModPlus', + 'version' => STATUSNET_VERSION, + 'author' => 'Brion Vibber', + 'homepage' => 'http://status.net/wiki/Plugin:ModPlus', + 'rawdescription' => + _m('UI extensions for profile moderation actions.')); + + return true; + } +} From 0d0e51292d97e0b3a07cf1d12031df0b8f69823f Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 15:32:57 -0800 Subject: [PATCH 091/220] some User -> Profile cleanup to help in adapting the profile page action to show stuff for remote users. Subscriptions, groups, roles, etc are all on profiles now so go ahead and use em. --- classes/Profile.php | 23 +++++++++++++++++++++++ classes/User.php | 7 ++++--- lib/profileaction.php | 10 +++++----- lib/userprofile.php | 14 ++++++-------- 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/classes/Profile.php b/classes/Profile.php index 37d2c571f9..b11cffc776 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -473,6 +473,29 @@ class Profile extends Memcached_DataObject return $cnt; } + /** + * Is this profile subscribed to another profile? + * + * @param Profile $other + * @return boolean + */ + function isSubscribed($other) + { + return Subscription::exists($this, $other); + } + + /** + * Are these two profiles subscribed to each other? + * + * @param Profile $other + * @return boolean + */ + function mutuallySubscribed($other) + { + return $this->isSubscribed($other) && + $other->isSubscribed($this); + } + function hasFave($notice) { $cache = common_memcache(); diff --git a/classes/User.php b/classes/User.php index 7345dc7f94..964bc3e7f3 100644 --- a/classes/User.php +++ b/classes/User.php @@ -84,7 +84,8 @@ class User extends Memcached_DataObject function isSubscribed($other) { - return Subscription::exists($this->getProfile(), $other); + $profile = $this->getProfile(); + return $profile->isSubscribed($other); } // 'update' won't write key columns, so we have to do it ourselves. @@ -418,8 +419,8 @@ class User extends Memcached_DataObject function mutuallySubscribed($other) { - return $this->isSubscribed($other) && - $other->isSubscribed($this); + $profile = $this->getProfile(); + return $profile->mutuallySubscribed($other); } function mutuallySubscribedUsers() diff --git a/lib/profileaction.php b/lib/profileaction.php index 504b775669..4bfc4d48d9 100644 --- a/lib/profileaction.php +++ b/lib/profileaction.php @@ -101,7 +101,7 @@ class ProfileAction extends OwnerDesignAction function showSubscriptions() { - $profile = $this->user->getSubscriptions(0, PROFILES_PER_MINILIST + 1); + $profile = $this->profile->getSubscriptions(0, PROFILES_PER_MINILIST + 1); $this->elementStart('div', array('id' => 'entity_subscriptions', 'class' => 'section')); @@ -134,7 +134,7 @@ class ProfileAction extends OwnerDesignAction function showSubscribers() { - $profile = $this->user->getSubscribers(0, PROFILES_PER_MINILIST + 1); + $profile = $this->profile->getSubscribers(0, PROFILES_PER_MINILIST + 1); $this->elementStart('div', array('id' => 'entity_subscribers', 'class' => 'section')); @@ -173,7 +173,7 @@ class ProfileAction extends OwnerDesignAction $subs_count = $this->profile->subscriptionCount(); $subbed_count = $this->profile->subscriberCount(); $notice_count = $this->profile->noticeCount(); - $group_count = $this->user->getGroups()->N; + $group_count = $this->profile->getGroups()->N; $age_days = (time() - strtotime($this->profile->created)) / 86400; if ($age_days < 1) { // Rather than extrapolating out to a bajillion... @@ -241,7 +241,7 @@ class ProfileAction extends OwnerDesignAction function showGroups() { - $groups = $this->user->getGroups(0, GROUPS_PER_MINILIST + 1); + $groups = $this->profile->getGroups(0, GROUPS_PER_MINILIST + 1); $this->elementStart('div', array('id' => 'entity_groups', 'class' => 'section')); @@ -249,7 +249,7 @@ class ProfileAction extends OwnerDesignAction $this->element('h2', null, _('Groups')); if ($groups) { - $gml = new GroupMiniList($groups, $this->user, $this); + $gml = new GroupMiniList($groups, $this->profile, $this); $cnt = $gml->show(); if ($cnt == 0) { $this->element('p', null, _('(None)')); diff --git a/lib/userprofile.php b/lib/userprofile.php index ca060842b6..0f48078d17 100644 --- a/lib/userprofile.php +++ b/lib/userprofile.php @@ -109,10 +109,8 @@ class UserProfile extends Widget 'alt' => $this->profile->nickname)); $this->out->elementEnd('dd'); - $user = User::staticGet('id', $this->profile->id); - $cur = common_current_user(); - if ($cur && $cur->id == $user->id) { + if ($cur && $cur->id == $this->profile->id) { $this->out->elementStart('dd'); $this->out->element('a', array('href' => common_local_url('avatarsettings')), _('Edit Avatar')); $this->out->elementEnd('dd'); @@ -278,7 +276,7 @@ class UserProfile extends Widget } $this->out->elementEnd('li'); - if ($cur->mutuallySubscribed($this->user)) { + if ($cur->mutuallySubscribed($this->profile)) { // message @@ -290,7 +288,7 @@ class UserProfile extends Widget // nudge - if ($this->user->email && $this->user->emailnotifynudge) { + if ($this->user && $this->user->email && $this->user->emailnotifynudge) { $this->out->elementStart('li', 'entity_nudge'); $nf = new NudgeForm($this->out, $this->user); $nf->show(); @@ -327,7 +325,7 @@ class UserProfile extends Widget $this->out->elementStart('ul'); if ($cur->hasRight(Right::SANDBOXUSER)) { $this->out->elementStart('li', 'entity_sandbox'); - if ($this->user->isSandboxed()) { + if ($this->profile->isSandboxed()) { $usf = new UnSandboxForm($this->out, $this->profile, $r2args); $usf->show(); } else { @@ -339,7 +337,7 @@ class UserProfile extends Widget if ($cur->hasRight(Right::SILENCEUSER)) { $this->out->elementStart('li', 'entity_silence'); - if ($this->user->isSilenced()) { + if ($this->profile->isSilenced()) { $usf = new UnSilenceForm($this->out, $this->profile, $r2args); $usf->show(); } else { @@ -387,7 +385,7 @@ class UserProfile extends Widget $r2args['action'] = $action; $this->out->elementStart('li', "entity_role_$role"); - if ($this->user->hasRole($role)) { + if ($this->profile->hasRole($role)) { $rf = new RevokeRoleForm($role, $label, $this->out, $this->profile, $r2args); $rf->show(); } else { From 0e763b49024703efc3e2bbadad83b03d3dd62790 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 15:34:12 -0800 Subject: [PATCH 092/220] Stub RemoteprofileAction to show the standard profile header stuff for offsite users -- provides a way to get at the mod & block controls for remote users. --- plugins/ModPlus/ModPlusPlugin.php | 55 ++++++++++++++++++++ plugins/ModPlus/remoteprofileaction.php | 69 +++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 plugins/ModPlus/remoteprofileaction.php diff --git a/plugins/ModPlus/ModPlusPlugin.php b/plugins/ModPlus/ModPlusPlugin.php index 485b821813..89bbdf857f 100644 --- a/plugins/ModPlus/ModPlusPlugin.php +++ b/plugins/ModPlus/ModPlusPlugin.php @@ -40,4 +40,59 @@ class ModPlusPlugin extends Plugin return true; } + + /** + * Load JS at runtime if we're logged in. + * + * @param Action $action + * @return boolean hook result + */ + function onEndShowScripts($action) + { + $user = common_current_user(); + if ($user) { + $action->script('plugins/ModPlus/modplus.js'); + } + return true; + } + + /** + * Autoloader + * + * Loads our classes if they're requested. + * + * @param string $cls Class requested + * + * @return boolean hook return + */ + function onAutoload($cls) + { + switch ($cls) + { + case 'RemoteprofileAction': + case 'RemoteProfileAction': + require_once dirname(__FILE__) . '/remoteprofileaction.php'; + return false; + default: + return true; + } + } + + /** + * Add OpenID-related paths to the router table + * + * Hook for RouterInitialized event. + * + * @param Net_URL_Mapper $m URL mapper + * + * @return boolean hook return + */ + function onStartInitializeRouter($m) + { + $m->connect('user/remote/:id', + array('action' => 'remoteprofile'), + array('id' => '[\d]+')); + + return true; + } } diff --git a/plugins/ModPlus/remoteprofileaction.php b/plugins/ModPlus/remoteprofileaction.php new file mode 100644 index 0000000000..ca82045111 --- /dev/null +++ b/plugins/ModPlus/remoteprofileaction.php @@ -0,0 +1,69 @@ +arg('id'); + $this->user = false; + $this->profile = Profile::staticGet('id', $id); + + if (!$this->profile) { + $this->serverError(_('User has no profile.')); + return false; + } + + $this->tag = $this->trimmed('tag'); + $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; + common_set_returnto($this->selfUrl()); + return true; + } + + function handle($args) + { + // skip yadis thingy + $this->showPage(); + } + + function title() + { + // maybe fixed in 0.9.x + if (!empty($this->profile->fullname)) { + $base = $this->profile->fullname . ' (' . $this->profile->nickname . ') '; + } else { + $base = $this->profile->nickname; + } + } + + function showContent() + { + $this->showProfile(); + // don't show notices + } + + function getFeeds() + { + // none + } + + function extraHead() + { + // none + } + function showLocalNav() + { + // none...? + } + function showSections() + { + ProfileAction::showSections(); + // skip tag cloud + } + +} \ No newline at end of file From 6849b8f9e530deae776064d4489777a9fb4eb772 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 15:39:42 -0800 Subject: [PATCH 093/220] Workaround for display of Twitter remote users in remoteprofile (ModPlus plugin): use 73px avatar if no 96px present --- lib/userprofile.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/userprofile.php b/lib/userprofile.php index 0f48078d17..9124b7c94d 100644 --- a/lib/userprofile.php +++ b/lib/userprofile.php @@ -98,6 +98,10 @@ class UserProfile extends Widget if (Event::handle('StartProfilePageAvatar', array($this->out, $this->profile))) { $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); + if (!$avatar) { + // hack for remote Twitter users: no 96px, but large Twitter size is 73px + $avatar = $this->profile->getAvatar(73); + } $this->out->elementStart('dl', 'entity_depiction'); $this->out->element('dt', null, _('Photo')); From 16f1c764c0ac89f922654f9f663faaada611b8e2 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 15:40:07 -0800 Subject: [PATCH 094/220] RemoteProfileAction: redirect to the regular user profile page if given a local user. --- plugins/ModPlus/remoteprofileaction.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/ModPlus/remoteprofileaction.php b/plugins/ModPlus/remoteprofileaction.php index ca82045111..9c089ee23e 100644 --- a/plugins/ModPlus/remoteprofileaction.php +++ b/plugins/ModPlus/remoteprofileaction.php @@ -19,6 +19,14 @@ class RemoteProfileAction extends ShowstreamAction return false; } + $user = User::staticGet('id', $this->profile->id); + if ($user) { + // This is a local user -- send to their regular profile. + $url = common_local_url('showstream', array('nickname' => $user->nickname)); + common_redirect($url); + return false; + } + $this->tag = $this->trimmed('tag'); $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; common_set_returnto($this->selfUrl()); From 88c35c2ccea5edcd08708f30247dc51a7473ecce Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 15:57:57 -0800 Subject: [PATCH 095/220] visual tweaks for RemoteProfileAction --- plugins/ModPlus/remoteprofileaction.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/plugins/ModPlus/remoteprofileaction.php b/plugins/ModPlus/remoteprofileaction.php index 9c089ee23e..f3ddbc7c65 100644 --- a/plugins/ModPlus/remoteprofileaction.php +++ b/plugins/ModPlus/remoteprofileaction.php @@ -47,12 +47,23 @@ class RemoteProfileAction extends ShowstreamAction } else { $base = $this->profile->nickname; } + $host = parse_url($this->profile->profileurl, PHP_URL_HOST); + return sprintf(_m('%s on %s'), $base, $host); } - function showContent() + /** + * Instead of showing notices, link to the original offsite profile. + */ + function showNotices() { - $this->showProfile(); - // don't show notices + $url = $this->profile->profileurl; + $host = parse_url($url, PHP_URL_HOST); + $markdown = sprintf( + _m('This profile is registered on another site; see [the profile page on %s](%s).'), + $host, + $url); + $html = common_markup_to_html($markdown); + $this->raw($html); } function getFeeds() @@ -64,10 +75,13 @@ class RemoteProfileAction extends ShowstreamAction { // none } + function showLocalNav() { - // none...? + $nav = new PublicGroupNav($this); + $nav->show(); } + function showSections() { ProfileAction::showSections(); From 5fdcba472b8673380248ab0d5dce45967f774caa Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 16:12:16 -0800 Subject: [PATCH 096/220] RemoteProfileAction cleanup: - meta robots to prevent spidering - a little notice if silenced --- lib/userprofile.php | 7 +++++-- plugins/ModPlus/remoteprofileaction.php | 11 ++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/userprofile.php b/lib/userprofile.php index 9124b7c94d..2813f735ea 100644 --- a/lib/userprofile.php +++ b/lib/userprofile.php @@ -321,6 +321,9 @@ class UserProfile extends Widget } $this->out->elementEnd('li'); + // Some actions won't be applicable to non-local users. + $isLocal = !empty($this->user); + if ($cur->hasRight(Right::SANDBOXUSER) || $cur->hasRight(Right::SILENCEUSER) || $cur->hasRight(Right::DELETEUSER)) { @@ -351,7 +354,7 @@ class UserProfile extends Widget $this->out->elementEnd('li'); } - if ($cur->hasRight(Right::DELETEUSER)) { + if ($isLocal && $cur->hasRight(Right::DELETEUSER)) { $this->out->elementStart('li', 'entity_delete'); $df = new DeleteUserForm($this->out, $this->profile, $r2args); $df->show(); @@ -361,7 +364,7 @@ class UserProfile extends Widget $this->out->elementEnd('li'); } - if ($cur->hasRight(Right::GRANTROLE)) { + if ($isLocal && $cur->hasRight(Right::GRANTROLE)) { $this->out->elementStart('li', 'entity_role'); $this->out->element('p', null, _('User role')); $this->out->elementStart('ul'); diff --git a/plugins/ModPlus/remoteprofileaction.php b/plugins/ModPlus/remoteprofileaction.php index f3ddbc7c65..5b25da1701 100644 --- a/plugins/ModPlus/remoteprofileaction.php +++ b/plugins/ModPlus/remoteprofileaction.php @@ -64,6 +64,11 @@ class RemoteProfileAction extends ShowstreamAction $url); $html = common_markup_to_html($markdown); $this->raw($html); + + if ($this->profile->hasRole(Profile_role::SILENCED)) { + $markdown = _m('Site moderators have silenced this profile, which prevents delivery of new messages to any users on this site.'); + $this->raw(common_markup_to_html($markdown)); + } } function getFeeds() @@ -71,9 +76,13 @@ class RemoteProfileAction extends ShowstreamAction // none } + /** + * Don't do various extra stuff, and also trim some things to avoid crawlers. + */ function extraHead() { - // none + $this->element('meta', array('name' => 'robots', + 'content' => 'noindex,nofollow')); } function showLocalNav() From fdcaac365354fb7315263373bae6094eab6aa3c8 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 16:38:18 -0800 Subject: [PATCH 097/220] Tweak remote profile action: hide stats from sidebar, tweak wording on remote notice --- plugins/ModPlus/remoteprofileaction.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/ModPlus/remoteprofileaction.php b/plugins/ModPlus/remoteprofileaction.php index 5b25da1701..caa5e6fbf3 100644 --- a/plugins/ModPlus/remoteprofileaction.php +++ b/plugins/ModPlus/remoteprofileaction.php @@ -59,7 +59,8 @@ class RemoteProfileAction extends ShowstreamAction $url = $this->profile->profileurl; $host = parse_url($url, PHP_URL_HOST); $markdown = sprintf( - _m('This profile is registered on another site; see [the profile page on %s](%s).'), + _m('This remote profile is registered on another site; see [%s\'s original profile page on %s](%s).'), + $this->profile->nickname, $host, $url); $html = common_markup_to_html($markdown); @@ -97,4 +98,9 @@ class RemoteProfileAction extends ShowstreamAction // skip tag cloud } + function showStatistics() + { + // skip + } + } \ No newline at end of file From 25170f272ca853c585531894d282c7545f00bf16 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 17:32:33 -0800 Subject: [PATCH 098/220] visual cleanup on ModPlus remote profile info popup menu --- plugins/ModPlus/ModPlusPlugin.php | 18 ++++++++++++++++++ plugins/ModPlus/modplus.css | 23 +++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 plugins/ModPlus/modplus.css diff --git a/plugins/ModPlus/ModPlusPlugin.php b/plugins/ModPlus/ModPlusPlugin.php index 89bbdf857f..3e7a8c7455 100644 --- a/plugins/ModPlus/ModPlusPlugin.php +++ b/plugins/ModPlus/ModPlusPlugin.php @@ -56,6 +56,11 @@ class ModPlusPlugin extends Plugin return true; } + function onEndShowStatusNetStyles($action) { + $action->cssLink('plugins/ModPlus/modplus.css'); + return true; + } + /** * Autoloader * @@ -95,4 +100,17 @@ class ModPlusPlugin extends Plugin return true; } + + function onStartShowNoticeItem($item) + { + $profile = $item->profile; + $isRemote = !(User::staticGet('id', $profile->id)); + if ($isRemote) { + $target = common_local_url('remoteprofile', array('id' => $profile->id)); + $label = _m('Remote profile options...'); + $item->out->elementStart('div', 'remote-profile-options'); + $item->out->element('a', array('href' => $target), $label); + $item->out->elementEnd('div'); + } + } } diff --git a/plugins/ModPlus/modplus.css b/plugins/ModPlus/modplus.css new file mode 100644 index 0000000000..8d2fc8fba1 --- /dev/null +++ b/plugins/ModPlus/modplus.css @@ -0,0 +1,23 @@ +.remote-profile-options { + position: absolute; + z-index: 999; + + background: url(../../theme/base/images/icons/twotone/green/admin.gif) no-repeat 8px 8px white; + border: solid 1px #c0c0c0; + + margin-top: 56px; + + padding: 6px 16px; + padding-left: 32px; + + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + -msie-border-radius: 8px; + border-radius: 8px; + + box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3); + -moz-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3); + -webkit-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3); + + display: none; +} From 54de6d3260e7fde77eb86079bd67a815930b8b43 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Nov 2010 17:45:58 -0800 Subject: [PATCH 099/220] Forgot to commit the JS for ModPlus. :) --- plugins/ModPlus/modplus.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 plugins/ModPlus/modplus.js diff --git a/plugins/ModPlus/modplus.js b/plugins/ModPlus/modplus.js new file mode 100644 index 0000000000..2e90de4f19 --- /dev/null +++ b/plugins/ModPlus/modplus.js @@ -0,0 +1,23 @@ +/** + * modplus.js + * (c) 2010 StatusNet, Inc + */ + +$(function() { + function ModPlus_setup(notice) { + if ($(notice).find('.remote-profile-options').size()) { + var $options = $(notice).find('.remote-profile-options'); + $options.prepend($()) + $(notice).find('.author').mouseenter(function(event) { + $(notice).find('.remote-profile-options').fadeIn(); + }); + $(notice).mouseleave(function(event) { + $(notice).find('.remote-profile-options').fadeOut(); + }); + } + } + + $('.notice').each(function() { + ModPlus_setup(this); + }); +}); From ca4c0a160122d20f95877102f9712aee45c7afb8 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 16 Nov 2010 02:30:08 +0000 Subject: [PATCH 100/220] - Map notices to Facebook stream items - rename plugin FacebookBridgePlugin - delete/like/unlike notices across the bridge --- ...SSOPlugin.php => FacebookBridgePlugin.php} | 74 +++- .../actions/facebookdeauthorize.php | 6 +- .../actions/facebookfinishlogin.php | 190 ++++++---- plugins/FacebookSSO/actions/facebooklogin.php | 2 +- .../FacebookSSO/classes/Notice_to_item.php | 190 ++++++++++ plugins/FacebookSSO/lib/facebookclient.php | 351 +++++++++++++++++- 6 files changed, 716 insertions(+), 97 deletions(-) rename plugins/FacebookSSO/{FacebookSSOPlugin.php => FacebookBridgePlugin.php} (86%) create mode 100644 plugins/FacebookSSO/classes/Notice_to_item.php diff --git a/plugins/FacebookSSO/FacebookSSOPlugin.php b/plugins/FacebookSSO/FacebookBridgePlugin.php similarity index 86% rename from plugins/FacebookSSO/FacebookSSOPlugin.php rename to plugins/FacebookSSO/FacebookBridgePlugin.php index 19d61211d8..c30ea15440 100644 --- a/plugins/FacebookSSO/FacebookSSOPlugin.php +++ b/plugins/FacebookSSO/FacebookBridgePlugin.php @@ -45,10 +45,9 @@ define("FACEBOOK_SERVICE", 2); * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ -class FacebookSSOPlugin extends Plugin +class FacebookBridgePlugin extends Plugin { public $appId = null; // Facebook application ID - public $apikey = null; // Facebook API key (for deprecated "Old REST API") public $secret = null; // Facebook application secret public $facebook = null; // Facebook application instance public $dir = null; // Facebook SSO plugin dir @@ -64,7 +63,6 @@ class FacebookSSOPlugin extends Plugin { $this->facebook = Facebookclient::getFacebook( $this->appId, - $this->apikey, $this->secret ); @@ -101,12 +99,32 @@ class FacebookSSOPlugin extends Plugin case 'FacebookQueueHandler': include_once $dir . '/lib/' . strtolower($cls) . '.php'; return false; + case 'Notice_to_item': + include_once $dir . '/classes/' . $cls . '.php'; + return false; default: return true; } } + /** + * Database schema setup + * + * We maintain a table mapping StatusNet notices to Facebook items + * + * @see Schema + * @see ColumnDef + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function onCheckSchema() + { + $schema = Schema::get(); + $schema->ensureTable('notice_to_item', Notice_to_item::schemaDef()); + return true; + } + /* * Does this $action need the Facebook JavaScripts? */ @@ -436,6 +454,54 @@ ENDOFSCRIPT; } } + /** + * If a notice gets deleted, remove the Notice_to_item mapping and + * delete the item on Facebook + * + * @param User $user The user doing the deleting + * @param Notice $notice The notice getting deleted + * + * @return boolean hook value + */ + function onStartDeleteOwnNotice(User $user, Notice $notice) + { + $client = new Facebookclient($notice); + $client->streamRemove(); + + return true; + } + + /** + * Notify remote users when their notices get favorited. + * + * @param Profile or User $profile of local user doing the faving + * @param Notice $notice being favored + * @return hook return value + */ + function onEndFavorNotice(Profile $profile, Notice $notice) + { + $client = new Facebookclient($notice); + $client->like(); + + return true; + } + + /** + * Notify remote users when their notices get de-favorited. + * + * @param Profile $profile Profile person doing the de-faving + * @param Notice $notice Notice being favored + * + * @return hook return value + */ + function onEndDisfavorNotice(Profile $profile, Notice $notice) + { + $client = new Facebookclient($notice); + $client->unLike(); + + return true; + } + /* * Add version info for this plugin * @@ -447,7 +513,7 @@ ENDOFSCRIPT; 'name' => 'Facebook Single-Sign-On', 'version' => STATUSNET_VERSION, 'author' => 'Craig Andrews, Zach Copley', - 'homepage' => 'http://status.net/wiki/Plugin:FacebookSSO', + 'homepage' => 'http://status.net/wiki/Plugin:FacebookBridge', 'rawdescription' => _m('A plugin for integrating StatusNet with Facebook.') ); diff --git a/plugins/FacebookSSO/actions/facebookdeauthorize.php b/plugins/FacebookSSO/actions/facebookdeauthorize.php index fb4afa13bc..cb816fc54a 100644 --- a/plugins/FacebookSSO/actions/facebookdeauthorize.php +++ b/plugins/FacebookSSO/actions/facebookdeauthorize.php @@ -112,7 +112,7 @@ class FacebookdeauthorizeAction extends Action common_log( LOG_WARNING, sprintf( - '%s (%d), fbuid $s has deauthorized his/her Facebook ' + '%s (%d), fbuid %d has deauthorized his/her Facebook ' . 'connection but hasn\'t set a password so s/he ' . 'is locked out.', $user->nickname, @@ -135,8 +135,8 @@ class FacebookdeauthorizeAction extends Action ); } else { // It probably wasn't Facebook that hit this action, - // so redirect to the login page - common_redirect(common_local_url('login'), 303); + // so redirect to the public timeline + common_redirect(common_local_url('public'), 303); } } } diff --git a/plugins/FacebookSSO/actions/facebookfinishlogin.php b/plugins/FacebookSSO/actions/facebookfinishlogin.php index e61f351547..2174c5ad4a 100644 --- a/plugins/FacebookSSO/actions/facebookfinishlogin.php +++ b/plugins/FacebookSSO/actions/facebookfinishlogin.php @@ -97,7 +97,7 @@ class FacebookfinishloginAction extends Action parent::handle($args); if (common_is_real_login()) { - + // User is already logged in, are her accounts already linked? $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_SERVICE); @@ -121,48 +121,52 @@ class FacebookfinishloginAction extends Action } else { // Possibly reconnect an existing account - + $this->connectUser(); } } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { + $this->handlePost(); + } else { + $this->tryLogin(); + } + } - $token = $this->trimmed('token'); + function handlePost() + { + $token = $this->trimmed('token'); - if (!$token || $token != common_session_token()) { + if (!$token || $token != common_session_token()) { + $this->showForm( + _m('There was a problem with your session token. Try again, please.') + ); + return; + } + + if ($this->arg('create')) { + + if (!$this->boolean('license')) { $this->showForm( - _m('There was a problem with your session token. Try again, please.')); + _m('You can\'t register if you don\'t agree to the license.'), + $this->trimmed('newname') + ); return; } - if ($this->arg('create')) { + // We has a valid Facebook session and the Facebook user has + // agreed to the SN license, so create a new user + $this->createNewUser(); - if (!$this->boolean('license')) { - $this->showForm( - _m('You can\'t register if you don\'t agree to the license.'), - $this->trimmed('newname') - ); - return; - } + } else if ($this->arg('connect')) { - // We has a valid Facebook session and the Facebook user has - // agreed to the SN license, so create a new user - $this->createNewUser(); + $this->connectNewUser(); - } else if ($this->arg('connect')) { - - $this->connectNewUser(); - - } else { - - $this->showForm( - _m('An unknown error has occured.'), - $this->trimmed('newname') - ); - } } else { - $this->tryLogin(); + $this->showForm( + _m('An unknown error has occured.'), + $this->trimmed('newname') + ); } } @@ -173,7 +177,7 @@ class FacebookfinishloginAction extends Action $this->element('div', array('class' => 'error'), $this->error); } else { - + $this->element( 'div', 'instructions', // TRANS: %s is the site name. @@ -343,19 +347,23 @@ class FacebookfinishloginAction extends Action 'nickname' => $nickname, 'fullname' => $this->fbuser['first_name'] . ' ' . $this->fbuser['last_name'], - 'email' => $this->fbuser['email'], - 'email_confirmed' => true, 'homepage' => $this->fbuser['website'], 'bio' => $this->fbuser['about'], 'location' => $this->fbuser['location']['name'] ); + // It's possible that the email address is already in our + // DB. It's a unique key, so we need to check + if ($this->isNewEmail($this->fbuser['email'])) { + $args['email'] = $this->fbuser['email']; + $args['email_confirmed'] = true; + } + if (!empty($invite)) { $args['code'] = $invite->code; } - $user = User::register($args); - + $user = User::register($args); $result = $this->flinkUser($user->id, $this->fbuid); if (!$result) { @@ -363,6 +371,9 @@ class FacebookfinishloginAction extends Action return; } + // Add a Foreign_user record + Facebookclient::addFacebookUser($this->fbuser); + $this->setAvatar($user); common_set_user($user); @@ -371,20 +382,16 @@ class FacebookfinishloginAction extends Action common_log( LOG_INFO, sprintf( - 'Registered new user %d from Facebook user %s', + 'Registered new user %s (%d) from Facebook user %s, (fbuid %d)', + $user->nickname, $user->id, + $this->fbuser['name'], $this->fbuid ), __FILE__ ); - common_redirect( - common_local_url( - 'showstream', - array('nickname' => $user->nickname) - ), - 303 - ); + $this->goHome($user->nickname); } /* @@ -401,17 +408,19 @@ class FacebookfinishloginAction extends Action // fetch the picture from Facebook $client = new HTTPClient(); - common_debug("status = $status - " . $finalUrl , __FILE__); - // fetch the actual picture $response = $client->get($picUrl); if ($response->isOk()) { $finalUrl = $client->getUrl(); - $filename = 'facebook-' . substr(strrchr($finalUrl, '/'), 1 ); - common_debug("Filename = " . $filename, __FILE__); + // Make sure the filename is unique becuase it's possible for a user + // to deauthorize our app, and then come back in as a new user but + // have the same Facebook picture (avatar URLs have a unique index + // and their URLs are based on the filenames). + $filename = 'facebook-' . common_good_rand(4) . '-' + . substr(strrchr($finalUrl, '/'), 1); $ok = file_put_contents( Avatar::path($filename), @@ -430,17 +439,20 @@ class FacebookfinishloginAction extends Action } else { + // save it as an avatar $profile = $user->getProfile(); if ($profile->setOriginal($filename)) { common_log( LOG_INFO, sprintf( - 'Saved avatar for %s (%d) from Facebook profile %s, filename = %s', + 'Saved avatar for %s (%d) from Facebook picture for ' + . '%s (fbuid %d), filename = %s', $user->nickname, $user->id, + $this->fbuser['name'], $this->fbuid, - $picture + $filename ), __FILE__ ); @@ -462,19 +474,17 @@ class FacebookfinishloginAction extends Action $user = User::staticGet('nickname', $nickname); if (!empty($user)) { - common_debug('Facebook Connect Plugin - ' . - "Legit user to connect to Facebook: $nickname"); + common_debug( + sprintf( + 'Found a legit user to connect to Facebook: %s (%d)', + $user->nickname, + $user->id + ), + __FILE__ + ); } - $result = $this->flinkUser($user->id, $this->fbuid); - - if (!$result) { - $this->serverError(_m('Error connecting user to Facebook.')); - return; - } - - common_debug('Facebook Connnect Plugin - ' . - "Connected Facebook user $this->fbuid to local user $user->id"); + $this->tryLinkUser($user); common_set_user($user); common_real_login(true); @@ -485,7 +495,12 @@ class FacebookfinishloginAction extends Action function connectUser() { $user = common_current_user(); + $this->tryLinkUser($user); + common_redirect(common_local_url('facebookfinishlogin'), 303); + } + function tryLinkUser($user) + { $result = $this->flinkUser($user->id, $this->fbuid); if (empty($result)) { @@ -495,14 +510,14 @@ class FacebookfinishloginAction extends Action common_debug( sprintf( - 'Connected Facebook user %s to local user %d', + 'Connected Facebook user %s (fbuid %d) to local user %s (%d)', + $this->fbuser['name'], $this->fbuid, + $user->nickname, $user->id ), __FILE__ ); - - common_redirect(common_local_url('facebookfinishlogin'), 303); } function tryLogin() @@ -573,7 +588,7 @@ class FacebookfinishloginAction extends Action $flink->user_id = $user_id; $flink->foreign_id = $fbuid; $flink->service = FACEBOOK_SERVICE; - + // Pull the access token from the Facebook cookies $flink->credentials = $this->facebook->getAccessToken(); @@ -595,8 +610,8 @@ class FacebookfinishloginAction extends Action // Try the full name - $fullname = trim($this->fbuser['firstname'] . - ' ' . $this->fbuser['lastname']); + $fullname = trim($this->fbuser['first_name'] . + ' ' . $this->fbuser['last_name']); if (!empty($fullname)) { $fullname = $this->nicknamize($fullname); @@ -617,20 +632,57 @@ class FacebookfinishloginAction extends Action return strtolower($str); } - function isNewNickname($str) - { - if (!Validate::string($str, array('min_length' => 1, - 'max_length' => 64, - 'format' => NICKNAME_FMT))) { + /* + * Is the desired nickname already taken? + * + * @return boolean result + */ + function isNewNickname($str) + { + if ( + !Validate::string( + $str, + array( + 'min_length' => 1, + 'max_length' => 64, + 'format' => NICKNAME_FMT + ) + ) + ) { return false; } + if (!User::allowed_nickname($str)) { return false; } + if (User::staticGet('nickname', $str)) { return false; } + return true; } + /* + * Do we already have a user record with this email? + * (emails have to be unique but they can change) + * + * @param string $email the email address to check + * + * @return boolean result + */ + function isNewEmail($email) + { + // we shouldn't have to validate the format + $result = User::staticGet('email', $email); + + if (empty($result)) { + common_debug("XXXXXXXXXXXXXXXXXX We've never seen this email before!!!"); + return true; + } + common_debug("XXXXXXXXXXXXXXXXXX dupe email address!!!!"); + + return false; + } + } diff --git a/plugins/FacebookSSO/actions/facebooklogin.php b/plugins/FacebookSSO/actions/facebooklogin.php index 08c237fe6e..9a230b7241 100644 --- a/plugins/FacebookSSO/actions/facebooklogin.php +++ b/plugins/FacebookSSO/actions/facebooklogin.php @@ -89,7 +89,7 @@ class FacebookloginAction extends Action $attrs = array( 'src' => common_path( - 'plugins/FacebookSSO/images/login-button.png', + 'plugins/FacebookBridge/images/login-button.png', true ), 'alt' => 'Login with Facebook', diff --git a/plugins/FacebookSSO/classes/Notice_to_item.php b/plugins/FacebookSSO/classes/Notice_to_item.php new file mode 100644 index 0000000000..a6a8030342 --- /dev/null +++ b/plugins/FacebookSSO/classes/Notice_to_item.php @@ -0,0 +1,190 @@ + + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2010, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +require_once INSTALLDIR . '/classes/Memcached_DataObject.php'; + +/** + * Data class for mapping notices to Facebook stream items + * + * Note that notice_id is unique only within a single database; if you + * want to share this data for some reason, get the notice's URI and use + * that instead, since it's universally unique. + * + * @category Action + * @package StatusNet + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * @see DB_DataObject + */ + +class Notice_to_item extends Memcached_DataObject +{ + public $__table = 'notice_to_item'; // table name + public $notice_id; // int(4) primary_key not_null + public $item_id; // varchar(255) not null + public $created; // datetime + + /** + * Get an instance by key + * + * This is a utility method to get a single instance with a given key value. + * + * @param string $k Key to use to lookup + * @param mixed $v Value to lookup + * + * @return Notice_to_item object found, or null for no hits + * + */ + + function staticGet($k, $v=null) + { + return Memcached_DataObject::staticGet('Notice_to_item', $k, $v); + } + + /** + * return table definition for DB_DataObject + * + * DB_DataObject needs to know something about the table to manipulate + * instances. This method provides all the DB_DataObject needs to know. + * + * @return array array of column definitions + */ + + function table() + { + return array( + 'notice_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, + 'item_id' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL, + 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL + ); + } + + static function schemaDef() + { + return array( + new ColumnDef('notice_id', 'integer', null, false, 'PRI'), + new ColumnDef('item_id', 'varchar', 255, false, 'UNI'), + new ColumnDef('created', 'datetime', null, false) + ); + } + + /** + * return key definitions for DB_DataObject + * + * DB_DataObject needs to know about keys that the table has, since it + * won't appear in StatusNet's own keys list. In most cases, this will + * simply reference your keyTypes() function. + * + * @return array list of key field names + */ + + function keys() + { + return array_keys($this->keyTypes()); + } + + /** + * return key definitions for Memcached_DataObject + * + * Our caching system uses the same key definitions, but uses a different + * method to get them. This key information is used to store and clear + * cached data, so be sure to list any key that will be used for static + * lookups. + * + * @return array associative array of key definitions, field name to type: + * 'K' for primary key: for compound keys, add an entry for each component; + * 'U' for unique keys: compound keys are not well supported here. + */ + + function keyTypes() + { + return array('notice_id' => 'K', 'item_id' => 'U'); + } + + /** + * Magic formula for non-autoincrementing integer primary keys + * + * If a table has a single integer column as its primary key, DB_DataObject + * assumes that the column is auto-incrementing and makes a sequence table + * to do this incrementation. Since we don't need this for our class, we + * overload this method and return the magic formula that DB_DataObject needs. + * + * @return array magic three-false array that stops auto-incrementing. + */ + + function sequenceKey() + { + return array(false, false, false); + } + + /** + * Save a mapping between a notice and a Facebook item + * + * @param integer $notice_id ID of the notice in StatusNet + * @param integer $item_id ID of the stream item on Facebook + * + * @return Notice_to_item new object for this value + */ + + static function saveNew($notice_id, $item_id) + { + $n2i = Notice_to_item::staticGet('notice_id', $notice_id); + + if (!empty($n2i)) { + return $n2i; + } + + $n2i = Notice_to_item::staticGet('item_id', $item_id); + + if (!empty($n2i)) { + return $n2i; + } + + common_debug( + "Mapping notice {$notice_id} to Facebook item {$item_id}", + __FILE__ + ); + + $n2i = new Notice_to_item(); + + $n2i->notice_id = $notice_id; + $n2i->item_id = $item_id; + $n2i->created = common_sql_now(); + + $n2i->insert(); + + return $n2i; + } +} diff --git a/plugins/FacebookSSO/lib/facebookclient.php b/plugins/FacebookSSO/lib/facebookclient.php index cf00b55e3a..33edf5c6b1 100644 --- a/plugins/FacebookSSO/lib/facebookclient.php +++ b/plugins/FacebookSSO/lib/facebookclient.php @@ -173,11 +173,11 @@ class Facebookclient if ($this->isFacebookBound()) { common_debug("notice is facebook bound", __FILE__); if (empty($this->flink->credentials)) { - $this->sendOldRest(); + return $this->sendOldRest(); } else { // Otherwise we most likely have an access token - $this->sendGraph(); + return $this->sendGraph(); } } else { @@ -213,6 +213,7 @@ class Facebookclient $params = array( 'access_token' => $this->flink->credentials, + // XXX: Need to worrry about length of the message? 'message' => $this->notice->content ); @@ -220,7 +221,7 @@ class Facebookclient if (!empty($attachments)) { - // We can only send one attachment with the Graph API + // We can only send one attachment with the Graph API :( $first = array_shift($attachments); @@ -240,6 +241,21 @@ class Facebookclient sprintf('/%s/feed', $fbuid), 'post', $params ); + // Save a mapping + Notice_to_item::saveNew($this->notice->id, $result['id']); + + common_log( + LOG_INFO, + sprintf( + "Posted notice %d as a stream item for %s (%d), fbuid %s", + $this->notice->id, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + } catch (FacebookApiException $e) { return $this->handleFacebookError($e); } @@ -481,24 +497,42 @@ class Facebookclient $result = $this->facebook->api( array( 'method' => 'users.setStatus', - 'status' => $this->notice->content, + 'status' => $this->formatMessage(), 'status_includes_verb' => true, 'uid' => $fbuid ) ); - common_log( - LOG_INFO, - sprintf( - "Posted notice %s as a status update for %s (%d), fbuid %s", + if ($result == 1) { // 1 is success + + common_log( + LOG_INFO, + sprintf( + "Posted notice %s as a status update for %s (%d), fbuid %s", + $this->notice->id, + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + + // There is no item ID returned for status update so we can't + // save a Notice_to_item mapping + + } else { + + $msg = sprintf( + "Error posting notice %s as a status update for %s (%d), fbuid %s - error code: %s", $this->notice->id, $this->user->nickname, $this->user->id, - $fbuid - ), - __FILE__ - ); + $fbuid, + $result // will contain 0, or an error + ); + throw new FacebookApiException($msg, $result); + } } /* @@ -524,25 +558,66 @@ class Facebookclient $result = $this->facebook->api( array( 'method' => 'stream.publish', - 'message' => $this->notice->content, + 'message' => $this->formatMessage(), 'attachment' => $fbattachment, 'uid' => $fbuid ) ); - common_log( - LOG_INFO, - sprintf( - 'Posted notice %d as a %s for %s (%d), fbuid %s', + if (!empty($result)) { // result will contain the item ID + + // Save a mapping + Notice_to_item::saveNew($this->notice->id, $result); + + common_log( + LOG_INFO, + sprintf( + 'Posted notice %d as a %s for %s (%d), fbuid %s', + $this->notice->id, + empty($fbattachment) ? 'stream item' : 'stream item with attachment', + $this->user->nickname, + $this->user->id, + $fbuid + ), + __FILE__ + ); + + } else { + + $msg = sprintf( + 'Could not post notice %d as a %s for %s (%d), fbuid %s - error code: %s', $this->notice->id, empty($fbattachment) ? 'stream item' : 'stream item with attachment', $this->user->nickname, $this->user->id, + $result, // result will contain an error code $fbuid - ), - __FILE__ - ); + ); + throw new FacebookApiException($msg, $result); + } + } + + /* + * Format the text message of a stream item so it's appropriate for + * sending to Facebook. If the notice is too long, truncate it, and + * add a linkback to the original notice at the end. + * + * @return String $txt the formated message + */ + function formatMessage() + { + // Start with the plaintext source of this notice... + $txt = $this->notice->content; + + // Facebook has a 420-char hardcoded max. + if (mb_strlen($statustxt) > 420) { + $noticeUrl = common_shorten_url($this->notice->uri); + $urlLen = mb_strlen($noticeUrl); + $txt = mb_substr($statustxt, 0, 420 - ($urlLen + 3)) . ' … ' . $noticeUrl; + } + + return $txt; } /* @@ -708,4 +783,240 @@ BODY; return mail_to_user($this->user, $subject, $body); } + /* + * Check to see if we have a mapping to a copy of this notice + * on Facebook + * + * @param Notice $notice the notice to check + * + * @return mixed null if it can't find one, or the id of the Facebook + * stream item + */ + static function facebookStatusId($notice) + { + $n2i = Notice_to_item::staticGet('notice_id', $notice->id); + + if (empty($n2i)) { + return null; + } else { + return $n2i->item_id; + } + } + + /* + * Save a Foreign_user record of a Facebook user + * + * @param object $fbuser a Facebook Graph API user obj + * See: http://developers.facebook.com/docs/reference/api/user + * @return mixed $result Id or key + * + */ + static function addFacebookUser($fbuser) + { + // remove any existing, possibly outdated, record + $luser = Foreign_user::getForeignUser($fbuser['id'], FACEBOOK_SERVICE); + + if (!empty($luser)) { + + $result = $luser->delete(); + + if ($result != false) { + common_log( + LOG_INFO, + sprintf( + 'Removed old Facebook user: %s, fbuid %d', + $fbuid['name'], + $fbuid['id'] + ), + __FILE__ + ); + } + } + + $fuser = new Foreign_user(); + + $fuser->nickname = $fbuser['name']; + $fuser->uri = $fbuser['link']; + $fuser->id = $fbuser['id']; + $fuser->service = FACEBOOK_SERVICE; + $fuser->created = common_sql_now(); + + $result = $fuser->insert(); + + if (empty($result)) { + common_log( + LOG_WARNING, + sprintf( + 'Failed to add new Facebook user: %s, fbuid %d', + $fbuser['name'], + $fbuser['id'] + ), + __FILE__ + ); + + common_log_db_error($fuser, 'INSERT', __FILE__); + } else { + common_log( + LOG_INFO, + sprintf( + 'Added new Facebook user: %s, fbuid %d', + $fbuser['name'], + $fbuser['id'] + ), + __FILE__ + ); + } + + return $result; + } + + /* + * Remove an item from a Facebook user's feed if we have a mapping + * for it. + */ + function streamRemove() + { + $n2i = Notice_to_item::staticGet('notice_id', $this->notice->id); + + if (!empty($this->flink) && !empty($n2i)) { + + $result = $this->facebook->api( + array( + 'method' => 'stream.remove', + 'post_id' => $n2i->item_id, + 'uid' => $this->flink->foreign_id + ) + ); + + if (!empty($result) && result == true) { + + common_log( + LOG_INFO, + sprintf( + 'Deleted Facebook item: %s for %s (%d), fbuid %d', + $n2i->item_id, + $this->user->nickname, + $this->user->id, + $this->flink->foreign_id + ), + __FILE__ + ); + + $n2i->delete(); + + } else { + + common_log( + LOG_WARNING, + sprintf( + 'Could not deleted Facebook item: %s for %s (%d), fbuid %d', + $n2i->item_id, + $this->user->nickname, + $this->user->id, + $this->flink->foreign_id + ), + __FILE__ + ); + } + } + } + + /* + * Like an item in a Facebook user's feed if we have a mapping + * for it. + */ + function like() + { + $n2i = Notice_to_item::staticGet('notice_id', $this->notice->id); + + if (!empty($this->flink) && !empty($n2i)) { + + $result = $this->facebook->api( + array( + 'method' => 'stream.addlike', + 'post_id' => $n2i->item_id, + 'uid' => $this->flink->foreign_id + ) + ); + + if (!empty($result) && result == true) { + + common_log( + LOG_INFO, + sprintf( + 'Added like for item: %s for %s (%d), fbuid %d', + $n2i->item_id, + $this->user->nickname, + $this->user->id, + $this->flink->foreign_id + ), + __FILE__ + ); + + } else { + + common_log( + LOG_WARNING, + sprintf( + 'Could not like Facebook item: %s for %s (%d), fbuid %d', + $n2i->item_id, + $this->user->nickname, + $this->user->id, + $this->flink->foreign_id + ), + __FILE__ + ); + } + } + } + + /* + * Unlike an item in a Facebook user's feed if we have a mapping + * for it. + */ + function unLike() + { + $n2i = Notice_to_item::staticGet('notice_id', $this->notice->id); + + if (!empty($this->flink) && !empty($n2i)) { + + $result = $this->facebook->api( + array( + 'method' => 'stream.removeLike', + 'post_id' => $n2i->item_id, + 'uid' => $this->flink->foreign_id + ) + ); + + if (!empty($result) && result == true) { + + common_log( + LOG_INFO, + sprintf( + 'Removed like for item: %s for %s (%d), fbuid %d', + $n2i->item_id, + $this->user->nickname, + $this->user->id, + $this->flink->foreign_id + ), + __FILE__ + ); + + } else { + + common_log( + LOG_WARNING, + sprintf( + 'Could not remove like for Facebook item: %s for %s (%d), fbuid %d', + $n2i->item_id, + $this->user->nickname, + $this->user->id, + $this->flink->foreign_id + ), + __FILE__ + ); + } + } + } + } From 4f63b5cff613f02ffed7de7a47027d65d723dbd4 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 16 Nov 2010 02:33:17 +0000 Subject: [PATCH 101/220] FacebookSSO -> FacebookBridge --- .../FacebookBridgePlugin.php | 0 .../actions/facebookadminpanel.php | 0 .../actions/facebookdeauthorize.php | 0 .../actions/facebookfinishlogin.php | 0 .../actions/facebooklogin.php | 0 .../actions/facebooksettings.php | 0 .../classes/Notice_to_item.php | 0 .../extlib/facebook.php | 0 .../extlib/fb_ca_chain_bundle.crt | 0 .../images/login-button.png | Bin .../lib/facebookclient.php | 0 .../lib/facebookqueuehandler.php | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename plugins/{FacebookSSO => FacebookBridge}/FacebookBridgePlugin.php (100%) rename plugins/{FacebookSSO => FacebookBridge}/actions/facebookadminpanel.php (100%) rename plugins/{FacebookSSO => FacebookBridge}/actions/facebookdeauthorize.php (100%) rename plugins/{FacebookSSO => FacebookBridge}/actions/facebookfinishlogin.php (100%) rename plugins/{FacebookSSO => FacebookBridge}/actions/facebooklogin.php (100%) rename plugins/{FacebookSSO => FacebookBridge}/actions/facebooksettings.php (100%) rename plugins/{FacebookSSO => FacebookBridge}/classes/Notice_to_item.php (100%) rename plugins/{FacebookSSO => FacebookBridge}/extlib/facebook.php (100%) rename plugins/{FacebookSSO => FacebookBridge}/extlib/fb_ca_chain_bundle.crt (100%) rename plugins/{FacebookSSO => FacebookBridge}/images/login-button.png (100%) rename plugins/{FacebookSSO => FacebookBridge}/lib/facebookclient.php (100%) rename plugins/{FacebookSSO => FacebookBridge}/lib/facebookqueuehandler.php (100%) diff --git a/plugins/FacebookSSO/FacebookBridgePlugin.php b/plugins/FacebookBridge/FacebookBridgePlugin.php similarity index 100% rename from plugins/FacebookSSO/FacebookBridgePlugin.php rename to plugins/FacebookBridge/FacebookBridgePlugin.php diff --git a/plugins/FacebookSSO/actions/facebookadminpanel.php b/plugins/FacebookBridge/actions/facebookadminpanel.php similarity index 100% rename from plugins/FacebookSSO/actions/facebookadminpanel.php rename to plugins/FacebookBridge/actions/facebookadminpanel.php diff --git a/plugins/FacebookSSO/actions/facebookdeauthorize.php b/plugins/FacebookBridge/actions/facebookdeauthorize.php similarity index 100% rename from plugins/FacebookSSO/actions/facebookdeauthorize.php rename to plugins/FacebookBridge/actions/facebookdeauthorize.php diff --git a/plugins/FacebookSSO/actions/facebookfinishlogin.php b/plugins/FacebookBridge/actions/facebookfinishlogin.php similarity index 100% rename from plugins/FacebookSSO/actions/facebookfinishlogin.php rename to plugins/FacebookBridge/actions/facebookfinishlogin.php diff --git a/plugins/FacebookSSO/actions/facebooklogin.php b/plugins/FacebookBridge/actions/facebooklogin.php similarity index 100% rename from plugins/FacebookSSO/actions/facebooklogin.php rename to plugins/FacebookBridge/actions/facebooklogin.php diff --git a/plugins/FacebookSSO/actions/facebooksettings.php b/plugins/FacebookBridge/actions/facebooksettings.php similarity index 100% rename from plugins/FacebookSSO/actions/facebooksettings.php rename to plugins/FacebookBridge/actions/facebooksettings.php diff --git a/plugins/FacebookSSO/classes/Notice_to_item.php b/plugins/FacebookBridge/classes/Notice_to_item.php similarity index 100% rename from plugins/FacebookSSO/classes/Notice_to_item.php rename to plugins/FacebookBridge/classes/Notice_to_item.php diff --git a/plugins/FacebookSSO/extlib/facebook.php b/plugins/FacebookBridge/extlib/facebook.php similarity index 100% rename from plugins/FacebookSSO/extlib/facebook.php rename to plugins/FacebookBridge/extlib/facebook.php diff --git a/plugins/FacebookSSO/extlib/fb_ca_chain_bundle.crt b/plugins/FacebookBridge/extlib/fb_ca_chain_bundle.crt similarity index 100% rename from plugins/FacebookSSO/extlib/fb_ca_chain_bundle.crt rename to plugins/FacebookBridge/extlib/fb_ca_chain_bundle.crt diff --git a/plugins/FacebookSSO/images/login-button.png b/plugins/FacebookBridge/images/login-button.png similarity index 100% rename from plugins/FacebookSSO/images/login-button.png rename to plugins/FacebookBridge/images/login-button.png diff --git a/plugins/FacebookSSO/lib/facebookclient.php b/plugins/FacebookBridge/lib/facebookclient.php similarity index 100% rename from plugins/FacebookSSO/lib/facebookclient.php rename to plugins/FacebookBridge/lib/facebookclient.php diff --git a/plugins/FacebookSSO/lib/facebookqueuehandler.php b/plugins/FacebookBridge/lib/facebookqueuehandler.php similarity index 100% rename from plugins/FacebookSSO/lib/facebookqueuehandler.php rename to plugins/FacebookBridge/lib/facebookqueuehandler.php From 0b573e0d2b5c15e296d2520ba87cbb6a80f3837d Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 15 Nov 2010 18:48:22 -0800 Subject: [PATCH 102/220] Store the current user in the CurrentUserDesignAction --- lib/currentuserdesignaction.php | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/currentuserdesignaction.php b/lib/currentuserdesignaction.php index 490f87d13c..7cd892022d 100644 --- a/lib/currentuserdesignaction.php +++ b/lib/currentuserdesignaction.php @@ -22,7 +22,7 @@ * @category Action * @package StatusNet * @author Evan Prodromou - * @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/ */ @@ -40,12 +40,31 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { * @category Action * @package StatusNet * @author Evan Prodromou + * @author Zach Copley * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ * */ class CurrentUserDesignAction extends Action { + + protected $cur = null; // The current user + + /** + * For initializing members of the class. Set a the + * current user here. + * + * @param array $argarray misc. arguments + * + * @return boolean true + */ + function prepare($argarray) + { + parent::prepare($argarray); + + $this->cur = common_current_user(); + } + /** * A design for this action * @@ -55,9 +74,7 @@ class CurrentUserDesignAction extends Action */ function getDesign() { - $cur = common_current_user(); - - if (!empty($cur)) { + if (!empty($this->cur)) { $design = $cur->getDesign(); @@ -68,4 +85,5 @@ class CurrentUserDesignAction extends Action return parent::getDesign(); } + } From 64a29bd401bb7f38e174a6529c062dd3c20bfe5b Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 16 Nov 2010 06:10:49 +0000 Subject: [PATCH 103/220] Fix syntax error --- lib/currentuserdesignaction.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/currentuserdesignaction.php b/lib/currentuserdesignaction.php index 7cd892022d..012d30ad6f 100644 --- a/lib/currentuserdesignaction.php +++ b/lib/currentuserdesignaction.php @@ -63,6 +63,8 @@ class CurrentUserDesignAction extends Action parent::prepare($argarray); $this->cur = common_current_user(); + + return true; } /** @@ -76,7 +78,7 @@ class CurrentUserDesignAction extends Action { if (!empty($this->cur)) { - $design = $cur->getDesign(); + $design = $this->cur->getDesign(); if (!empty($design)) { return $design; From 9b9db3b28aa117085385baa264ba6d8bb928cfac Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 11:10:32 -0800 Subject: [PATCH 104/220] Prep for ticket #2895: consolidate common code from PopularNoticeList and FavoritedAction for fetching popular notice lists --- actions/favorited.php | 28 ++--------- lib/popularity.php | 91 ++++++++++++++++++++++++++++++++++++ lib/popularnoticesection.php | 41 +++------------- 3 files changed, 102 insertions(+), 58 deletions(-) create mode 100644 lib/popularity.php diff --git a/actions/favorited.php b/actions/favorited.php index d8980440d1..19d49feecf 100644 --- a/actions/favorited.php +++ b/actions/favorited.php @@ -185,29 +185,11 @@ class FavoritedAction extends Action function showContent() { - $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff')); - $cutoff = sprintf("fave.modified > '%s'", - common_sql_date(time() - common_config('popular', 'cutoff'))); - - $qry = 'SELECT notice.*, '. - $weightexpr . ' as weight ' . - 'FROM notice JOIN fave ON notice.id = fave.notice_id ' . - "WHERE $cutoff " . - 'GROUP BY id,profile_id,uri,content,rendered,url,created,notice.modified,reply_to,is_local,source,notice.conversation ' . - 'ORDER BY weight DESC'; - - $offset = ($this->page - 1) * NOTICES_PER_PAGE; - $limit = NOTICES_PER_PAGE + 1; - - if (common_config('db', 'type') == 'pgsql') { - $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; - } else { - $qry .= ' LIMIT ' . $offset . ', ' . $limit; - } - - $notice = Memcached_DataObject::cachedQuery('Notice', - $qry, - 600); + $pop = new Popularity(); + $pop->offset = ($this->page - 1) * NOTICES_PER_PAGE; + $pop->limit = NOTICES_PER_PAGE; + $pop->expiry = 600; + $notice = $pop->getNotices(); $nl = new NoticeList($notice, $this); diff --git a/lib/popularity.php b/lib/popularity.php new file mode 100644 index 0000000000..c5b795b8d2 --- /dev/null +++ b/lib/popularity.php @@ -0,0 +1,91 @@ +. + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @author Brion Vibber + * @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); +} + +/** + * Wrapper for fetching notices ranked according to popularity, + * broken out so it can be called from multiple actions with + * less code duplication. + */ +class Popularity +{ + public $limit = NOTICES_PER_PAGE; + public $offset = 0; + public $tag = false; + public $expiry = 600; + + /** + * Run a cached query to fetch notices, whee! + * + * @return Notice + */ + function getNotices() + { + // @fixme there should be a common func for this + if (common_config('db', 'type') == 'pgsql') { + if (!empty($this->out->tag)) { + $tag = pg_escape_string($this->out->tag); + } + } else { + if (!empty($this->out->tag)) { + $tag = mysql_escape_string($this->out->tag); + } + } + $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff')); + $cutoff = sprintf("fave.modified > '%s'", + common_sql_date(time() - common_config('popular', 'cutoff'))); + $qry = "SELECT notice.*, $weightexpr as weight "; + if(isset($tag)) { + $qry .= 'FROM notice_tag, notice JOIN fave ON notice.id = fave.notice_id ' . + "WHERE $cutoff and notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag"; + } else { + $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id ' . + "WHERE $cutoff"; + } + $qry .= ' GROUP BY notice.id,notice.profile_id,notice.content,notice.uri,' . + 'notice.rendered,notice.url,notice.created,notice.modified,' . + 'notice.reply_to,notice.is_local,notice.source,notice.conversation, ' . + 'notice.lat,notice.lon,location_id,location_ns,notice.repeat_of'; + $qry .= ' ORDER BY weight DESC'; + + $offset = $this->offset; + $limit = $this->limit + 1; + + $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; + + $notice = Memcached_DataObject::cachedQuery('Notice', + $qry, + 1200); + return $notice; + } +} \ No newline at end of file diff --git a/lib/popularnoticesection.php b/lib/popularnoticesection.php index f70a972efe..a4f038b246 100644 --- a/lib/popularnoticesection.php +++ b/lib/popularnoticesection.php @@ -48,42 +48,13 @@ class PopularNoticeSection extends NoticeSection { function getNotices() { - // @fixme there should be a common func for this - if (common_config('db', 'type') == 'pgsql') { - if (!empty($this->out->tag)) { - $tag = pg_escape_string($this->out->tag); - } - } else { - if (!empty($this->out->tag)) { - $tag = mysql_escape_string($this->out->tag); - } + $pop = new Popularity(); + if (!empty($this->out->tag)) { + $pop->tag = $this->out->tag; } - $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff')); - $cutoff = sprintf("fave.modified > '%s'", - common_sql_date(time() - common_config('popular', 'cutoff'))); - $qry = "SELECT notice.*, $weightexpr as weight "; - if(isset($tag)) { - $qry .= 'FROM notice_tag, notice JOIN fave ON notice.id = fave.notice_id ' . - "WHERE $cutoff and notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag"; - } else { - $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id ' . - "WHERE $cutoff"; - } - $qry .= ' GROUP BY notice.id,notice.profile_id,notice.content,notice.uri,' . - 'notice.rendered,notice.url,notice.created,notice.modified,' . - 'notice.reply_to,notice.is_local,notice.source,notice.conversation, ' . - 'notice.lat,notice.lon,location_id,location_ns,notice.repeat_of' . - ' ORDER BY weight DESC'; - - $offset = 0; - $limit = NOTICES_PER_SECTION + 1; - - $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; - - $notice = Memcached_DataObject::cachedQuery('Notice', - $qry, - 1200); - return $notice; + $pop->limit = NOTICES_PER_SECTION; + $pop->expiry = 1200; + return $pop->getNotices(); } function title() From 0265cdc1c982ca2bd33ceee7d9d956eda91e9d37 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 11:13:52 -0800 Subject: [PATCH 105/220] Ticket 2895: exclude silenced users from popular notice lists --- lib/popularity.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/popularity.php b/lib/popularity.php index c5b795b8d2..b6987138b5 100644 --- a/lib/popularity.php +++ b/lib/popularity.php @@ -76,6 +76,7 @@ class Popularity 'notice.rendered,notice.url,notice.created,notice.modified,' . 'notice.reply_to,notice.is_local,notice.source,notice.conversation, ' . 'notice.lat,notice.lon,location_id,location_ns,notice.repeat_of'; + $qry .= ' HAVING \'silenced\' NOT IN (SELECT role FROM profile_role WHERE profile_id=notice.profile_id)'; $qry .= ' ORDER BY weight DESC'; $offset = $this->offset; From 450707fec626e4e2b2eed4e46591fcf06368d0a1 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 12:41:35 -0800 Subject: [PATCH 106/220] Stub LinkPreview plugin --- plugins/LinkPreview/LinkPreviewPlugin.php | 94 +++++++++++++++++++++++ plugins/LinkPreview/linkpreview.js | 10 +++ 2 files changed, 104 insertions(+) create mode 100644 plugins/LinkPreview/LinkPreviewPlugin.php create mode 100644 plugins/LinkPreview/linkpreview.js diff --git a/plugins/LinkPreview/LinkPreviewPlugin.php b/plugins/LinkPreview/LinkPreviewPlugin.php new file mode 100644 index 0000000000..d887ca0408 --- /dev/null +++ b/plugins/LinkPreview/LinkPreviewPlugin.php @@ -0,0 +1,94 @@ +. + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Some UI extras for now... + * + * @package LinkPreviewPlugin + * @maintainer Brion Vibber + */ +class LinkPreviewPlugin extends Plugin +{ + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'LinkPreview', + 'version' => STATUSNET_VERSION, + 'author' => 'Brion Vibber', + 'homepage' => 'http://status.net/wiki/Plugin:LinkPreview', + 'rawdescription' => + _m('UI extensions previewing thumbnails from links.')); + + return true; + } + + /** + * Load JS at runtime if we're logged in. + * + * @param Action $action + * @return boolean hook result + */ + function onEndShowScripts($action) + { + $user = common_current_user(); + if ($user) { + $action->script('plugins/LinkPreview/linkpreview.js'); + } + return true; + } + + /** + * Autoloader + * + * Loads our classes if they're requested. + * + * @param string $cls Class requested + * + * @return boolean hook return + */ + function onAutoload($cls) + { + switch ($cls) + { + case 'LinkpreviewAction': + require_once dirname(__FILE__) . '/linkpreviewaction.php'; + return false; + default: + return true; + } + } + + /** + * Hook for RouterInitialized event. + * + * @param Net_URL_Mapper $m URL mapper + * + * @return boolean hook return + */ + function onStartInitializeRouter($m) + { + $m->connect('main/preview/link', + array('action' => 'linkpreview')); + + return true; + } +} diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js new file mode 100644 index 0000000000..37710e7d5f --- /dev/null +++ b/plugins/LinkPreview/linkpreview.js @@ -0,0 +1,10 @@ +/** + * (c) 2010 StatusNet, Inc. + */ + +$(function() { + $('#notice_data-text').change(function() { + var text = $(this).val(); + alert(text); + }); +}); From e851882f964c9eaa1cdd73f028fd09dd9acba734 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 13:16:25 -0800 Subject: [PATCH 107/220] LinkPreview: flesh out stub JS code a bit. URL splitting doesn't quite match core, note. --- plugins/LinkPreview/linkpreview.js | 47 +++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index 37710e7d5f..f6a4dc34f0 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -3,8 +3,53 @@ */ $(function() { + /** + * Find URL links from the source text that may be interesting. + * + * @param {String} text + * @return {Array} list of URLs + */ + function findLinks(text) + { + // @fixme match this to core code + var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/g; + var links = []; + var matches; + while ((matches = re.exec(text)) !== null) { + links.push(matches[1]); + } + return links; + } + + /** + * Start looking up info for a link preview... + * May start async data loads. + * + * @param {String} id + * @param {String} url + */ + function prepLinkPreview(id, url) + { + console.log(id, url); + } + + /** + * Update the live preview section with links found in the given text. + * May start async data loads. + * + * @param {String} text: free-form input text + */ + function previewLinks(text) + { + var links = findLinks(text); + for (var i = 0; i < links.length; i++) { + var id = 'link-preview-' + i; + prepLinkPreview(id, links[i]); + } + } + $('#notice_data-text').change(function() { var text = $(this).val(); - alert(text); + previewLinks(text); }); }); From 5166e71d24d1121f7d99bc788fe734d5c6e86e79 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 13:49:23 -0800 Subject: [PATCH 108/220] LinkPreview plugin more or less functioning (though not pretty), using oohembed remote lookup and fixed sizes. --- plugins/LinkPreview/linkpreview.js | 57 ++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index f6a4dc34f0..eae6dfd43f 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -12,7 +12,7 @@ $(function() { function findLinks(text) { // @fixme match this to core code - var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/g; + var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/mg; var links = []; var matches; while ((matches = re.exec(text)) !== null) { @@ -21,6 +21,30 @@ $(function() { return links; } + /** + * Do an oEmbed lookup for the given URL. + * + * @fixme proxy through ourselves if possible? + * @fixme use the global thumbnail size settings + * + * @param {String} url + * @param {function} callback + */ + function oEmbedLookup(url, callback) + { + var api = 'http://oohembed.com/oohembed'; + var params = { + url: url, + format: 'json', + maxwidth: 100, + maxheight: 75, + callback: '?' + }; + $.get(api, params, function(data, xhr) { + callback(data); + }, 'jsonp'); + } + /** * Start looking up info for a link preview... * May start async data loads. @@ -30,7 +54,32 @@ $(function() { */ function prepLinkPreview(id, url) { - console.log(id, url); + oEmbedLookup(url, function(data) { + var thumb = null; + var width = 100; + if (typeof data.thumbnail_url == "string") { + thumb = data.thumbnail_url; + if (typeof data.thumbnail_width !== "undefined") { + if (data.thumbnail_width < width) { + width = data.thumbnail_width; + } + } + } else if (data.type == 'photo' && typeof data.url == "string") { + thumb = data.url; + if (typeof data.width !== "undefined") { + if (data.width < width) { + width = data.width; + } + } + } + if (thumb) { + var img = $('') + .attr('src', thumb) + .attr('width', width) + .attr('title', data.title || data.url || url); + $('#' + id).append(img); + } + }); } /** @@ -42,12 +91,14 @@ $(function() { function previewLinks(text) { var links = findLinks(text); + $('#link-preview').html(''); for (var i = 0; i < links.length; i++) { var id = 'link-preview-' + i; + $('#link-preview').append(''); prepLinkPreview(id, links[i]); } } - + $('#form_notice').append(''); $('#notice_data-text').change(function() { var text = $(this).val(); previewLinks(text); From f103a550521bffd9662dff473119389b10696582 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 13:58:22 -0800 Subject: [PATCH 109/220] LinkPreview: link the thumbnails --- plugins/LinkPreview/linkpreview.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index eae6dfd43f..9f0ed65623 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -73,11 +73,14 @@ $(function() { } } if (thumb) { - var img = $('') - .attr('src', thumb) - .attr('width', width) - .attr('title', data.title || data.url || url); - $('#' + id).append(img); + var link = $(''); + link.attr('href', url) + .attr('target', '_blank') + .find('img') + .attr('src', thumb) + .attr('width', width) + .attr('title', data.title || data.url || url); + $('#' + id).append(link); } }); } From eeb7f02b98f104e1536cc116f4a8607dfde0d00b Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 14:16:23 -0800 Subject: [PATCH 110/220] LinkPreview: piggyback on the counter update logic, cache lookups. --- plugins/LinkPreview/linkpreview.js | 103 ++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 32 deletions(-) diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index 9f0ed65623..6af3e920d9 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -21,29 +21,63 @@ $(function() { return links; } - /** - * Do an oEmbed lookup for the given URL. - * - * @fixme proxy through ourselves if possible? - * @fixme use the global thumbnail size settings - * - * @param {String} url - * @param {function} callback - */ - function oEmbedLookup(url, callback) - { - var api = 'http://oohembed.com/oohembed'; - var params = { - url: url, - format: 'json', - maxwidth: 100, - maxheight: 75, - callback: '?' - }; - $.get(api, params, function(data, xhr) { - callback(data); - }, 'jsonp'); - } + var oEmbed = { + api: 'http://oohembed.com/oohembed', + cache: {}, + callbacks: {}, + + /** + * Do a cached oEmbed lookup for the given URL. + * + * @param {String} url + * @param {function} callback + */ + lookup: function(url, callback) + { + if (typeof oEmbed.cache[url] == "object") { + // We already have a successful lookup. + callback(oEmbed.cache[url]); + } else if (typeof oEmbed.callbacks[url] == "undefined") { + // No lookup yet... Start it! + oEmbed.callbacks[url] = [callback]; + + oEmbed.rawLookup(url, function(data) { + oEmbed.cache[url] = data; + var callbacks = oEmbed.callbacks[url]; + oEmbed.callbacks[url] = undefined; + for (var i = 0; i < callbacks.length; i++) { + callbacks[i](data); + } + }); + } else { + // A lookup is in progress. + oEmbed.callbacks[url].push(callback); + } + }, + + /** + * Do an oEmbed lookup for the given URL. + * + * @fixme proxy through ourselves if possible? + * @fixme use the global thumbnail size settings + * + * @param {String} url + * @param {function} callback + */ + rawLookup: function(url, callback) + { + var params = { + url: url, + format: 'json', + maxwidth: 100, + maxheight: 75, + callback: '?' + }; + $.get(oEmbed.api, params, function(data, xhr) { + callback(data); + }, 'jsonp'); + } + }; /** * Start looking up info for a link preview... @@ -54,7 +88,7 @@ $(function() { */ function prepLinkPreview(id, url) { - oEmbedLookup(url, function(data) { + oEmbed.lookup(url, function(data) { var thumb = null; var width = 100; if (typeof data.thumbnail_url == "string") { @@ -73,9 +107,11 @@ $(function() { } } if (thumb) { - var link = $(''); - link.attr('href', url) - .attr('target', '_blank') + var link = $(''); + link.find('a') + .attr('href', url) + .attr('target', '_blank') + .last() .find('img') .attr('src', thumb) .attr('width', width) @@ -101,9 +137,12 @@ $(function() { prepLinkPreview(id, links[i]); } } - $('#form_notice').append(''); - $('#notice_data-text').change(function() { - var text = $(this).val(); - previewLinks(text); - }); + $('#form_notice').append(''); + + // Piggyback on the counter update... + var origCounter = SN.U.Counter; + SN.U.Counter = function(form) { + previewLinks($('#notice_data-text').val()); + return origCounter(form); + } }); From b5fc71253c5ad1d28bcff37733d11467eb15ca91 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 14:27:01 -0800 Subject: [PATCH 111/220] LinkPreview: restructure a bit so we can pass config over --- plugins/LinkPreview/LinkPreviewPlugin.php | 6 +++ plugins/LinkPreview/linkpreview.js | 65 +++++++++++++---------- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/plugins/LinkPreview/LinkPreviewPlugin.php b/plugins/LinkPreview/LinkPreviewPlugin.php index d887ca0408..6f7c99a38c 100644 --- a/plugins/LinkPreview/LinkPreviewPlugin.php +++ b/plugins/LinkPreview/LinkPreviewPlugin.php @@ -52,6 +52,12 @@ class LinkPreviewPlugin extends Plugin $user = common_current_user(); if ($user) { $action->script('plugins/LinkPreview/linkpreview.js'); + $data = json_encode(array( + 'api' => common_config('oohembed', 'endpoint'), + 'width' => common_config('attachments', 'thumbwidth'), + 'height' => common_config('attachments', 'thumbheight'), + )); + $action->inlineScript('$(function() {SN.Init.LinkPreview && SN.Init.LinkPreview('.$data.');})'); } return true; } diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index 6af3e920d9..db99212292 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -2,27 +2,11 @@ * (c) 2010 StatusNet, Inc. */ -$(function() { - /** - * Find URL links from the source text that may be interesting. - * - * @param {String} text - * @return {Array} list of URLs - */ - function findLinks(text) - { - // @fixme match this to core code - var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/mg; - var links = []; - var matches; - while ((matches = re.exec(text)) !== null) { - links.push(matches[1]); - } - return links; - } - +(function() { var oEmbed = { api: 'http://oohembed.com/oohembed', + width: 100, + height: 75, cache: {}, callbacks: {}, @@ -69,8 +53,8 @@ $(function() { var params = { url: url, format: 'json', - maxwidth: 100, - maxheight: 75, + maxwidth: oEmbed.width, + maxheight: oEmbed.height, callback: '?' }; $.get(oEmbed.api, params, function(data, xhr) { @@ -79,6 +63,24 @@ $(function() { } }; + /** + * Find URL links from the source text that may be interesting. + * + * @param {String} text + * @return {Array} list of URLs + */ + function findLinks(text) + { + // @fixme match this to core code + var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/mg; + var links = []; + var matches; + while ((matches = re.exec(text)) !== null) { + links.push(matches[1]); + } + return links; + } + /** * Start looking up info for a link preview... * May start async data loads. @@ -137,12 +139,19 @@ $(function() { prepLinkPreview(id, links[i]); } } - $('#form_notice').append(''); - // Piggyback on the counter update... - var origCounter = SN.U.Counter; - SN.U.Counter = function(form) { - previewLinks($('#notice_data-text').val()); - return origCounter(form); + SN.Init.LinkPreview = function(params) { + if (params.api) oEmbed.api = params.api; + if (params.width) oEmbed.width = params.width; + if (params.height) oEmbed.height = params.height; + + $('#form_notice').append(''); + + // Piggyback on the counter update... + var origCounter = SN.U.Counter; + SN.U.Counter = function(form) { + previewLinks($('#notice_data-text').val()); + return origCounter(form); + } } -}); +})(); From 73f28ffabe3f023f4a8c6f4242c2929c907b6c71 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 14:41:30 -0800 Subject: [PATCH 112/220] LinkPreview: use a local proxy for oEmbed lookups so we use a consistent common code path, and don't open up to oohembed.com being evil --- plugins/LinkPreview/LinkPreviewPlugin.php | 13 +++++++------ plugins/LinkPreview/linkpreview.js | 5 ++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/plugins/LinkPreview/LinkPreviewPlugin.php b/plugins/LinkPreview/LinkPreviewPlugin.php index 6f7c99a38c..da79811482 100644 --- a/plugins/LinkPreview/LinkPreviewPlugin.php +++ b/plugins/LinkPreview/LinkPreviewPlugin.php @@ -53,7 +53,7 @@ class LinkPreviewPlugin extends Plugin if ($user) { $action->script('plugins/LinkPreview/linkpreview.js'); $data = json_encode(array( - 'api' => common_config('oohembed', 'endpoint'), + 'api' => common_local_url('oembedproxy'), 'width' => common_config('attachments', 'thumbwidth'), 'height' => common_config('attachments', 'thumbheight'), )); @@ -73,10 +73,11 @@ class LinkPreviewPlugin extends Plugin */ function onAutoload($cls) { - switch ($cls) + $lower = strtolower($cls); + switch ($lower) { - case 'LinkpreviewAction': - require_once dirname(__FILE__) . '/linkpreviewaction.php'; + case 'oembedproxyaction': + require_once dirname(__FILE__) . '/' . $lower . '.php'; return false; default: return true; @@ -92,8 +93,8 @@ class LinkPreviewPlugin extends Plugin */ function onStartInitializeRouter($m) { - $m->connect('main/preview/link', - array('action' => 'linkpreview')); + $m->connect('main/oembed/proxy', + array('action' => 'oembedproxy')); return true; } diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index db99212292..8e411f908e 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -54,12 +54,11 @@ url: url, format: 'json', maxwidth: oEmbed.width, - maxheight: oEmbed.height, - callback: '?' + maxheight: oEmbed.height }; $.get(oEmbed.api, params, function(data, xhr) { callback(data); - }, 'jsonp'); + }, 'json'); } }; From acdb9ac1e5b63f24262449356f526ff8168db8d3 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 14:57:35 -0800 Subject: [PATCH 113/220] LinkPreview: restructure to make it easier to keep old link data --- plugins/LinkPreview/linkpreview.js | 146 +++++++++++++++-------------- 1 file changed, 75 insertions(+), 71 deletions(-) diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index 8e411f908e..37b0241a5d 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -62,82 +62,86 @@ } }; - /** - * Find URL links from the source text that may be interesting. - * - * @param {String} text - * @return {Array} list of URLs - */ - function findLinks(text) - { - // @fixme match this to core code - var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/mg; - var links = []; - var matches; - while ((matches = re.exec(text)) !== null) { - links.push(matches[1]); - } - return links; - } + var LinkPreview = { + links: [], - /** - * Start looking up info for a link preview... - * May start async data loads. - * - * @param {String} id - * @param {String} url - */ - function prepLinkPreview(id, url) - { - oEmbed.lookup(url, function(data) { - var thumb = null; - var width = 100; - if (typeof data.thumbnail_url == "string") { - thumb = data.thumbnail_url; - if (typeof data.thumbnail_width !== "undefined") { - if (data.thumbnail_width < width) { - width = data.thumbnail_width; + /** + * Find URL links from the source text that may be interesting. + * + * @param {String} text + * @return {Array} list of URLs + */ + findLinks: function (text) + { + // @fixme match this to core code + var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/mg; + var links = []; + var matches; + while ((matches = re.exec(text)) !== null) { + links.push(matches[1]); + } + return links; + }, + + /** + * Start looking up info for a link preview... + * May start async data loads. + * + * @param {String} id + * @param {String} url + */ + prepLinkPreview: function(id, url) + { + oEmbed.lookup(url, function(data) { + var thumb = null; + var width = 100; + if (typeof data.thumbnail_url == "string") { + thumb = data.thumbnail_url; + if (typeof data.thumbnail_width !== "undefined") { + if (data.thumbnail_width < width) { + width = data.thumbnail_width; + } + } + } else if (data.type == 'photo' && typeof data.url == "string") { + thumb = data.url; + if (typeof data.width !== "undefined") { + if (data.width < width) { + width = data.width; + } } } - } else if (data.type == 'photo' && typeof data.url == "string") { - thumb = data.url; - if (typeof data.width !== "undefined") { - if (data.width < width) { - width = data.width; - } + if (thumb) { + var link = $(''); + link.find('a') + .attr('href', url) + .attr('target', '_blank') + .last() + .find('img') + .attr('src', thumb) + .attr('width', width) + .attr('title', data.title || data.url || url); + $('#' + id).append(link); } - } - if (thumb) { - var link = $(''); - link.find('a') - .attr('href', url) - .attr('target', '_blank') - .last() - .find('img') - .attr('src', thumb) - .attr('width', width) - .attr('title', data.title || data.url || url); - $('#' + id).append(link); - } - }); - } + }); + }, - /** - * Update the live preview section with links found in the given text. - * May start async data loads. - * - * @param {String} text: free-form input text - */ - function previewLinks(text) - { - var links = findLinks(text); - $('#link-preview').html(''); - for (var i = 0; i < links.length; i++) { - var id = 'link-preview-' + i; - $('#link-preview').append(''); - prepLinkPreview(id, links[i]); + /** + * Update the live preview section with links found in the given text. + * May start async data loads. + * + * @param {String} text: free-form input text + */ + previewLinks: function(text) + { + var links = LinkPreview.findLinks(text); + $('#link-preview').html(''); + for (var i = 0; i < links.length; i++) { + var id = 'link-preview-' + i; + $('#link-preview').append(''); + LinkPreview.prepLinkPreview(id, links[i]); + } } - } + }; SN.Init.LinkPreview = function(params) { if (params.api) oEmbed.api = params.api; @@ -149,7 +153,7 @@ // Piggyback on the counter update... var origCounter = SN.U.Counter; SN.U.Counter = function(form) { - previewLinks($('#notice_data-text').val()); + LinkPreview.previewLinks($('#notice_data-text').val()); return origCounter(form); } } From f7fe3fa3868f4e7d84c7d0c8b04ccf6f0727f6bb Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 15:20:37 -0800 Subject: [PATCH 114/220] Less redrawing of bits in the link thumbnail preview --- plugins/LinkPreview/linkpreview.js | 31 +++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index 37b0241a5d..5dca3a8071 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -133,13 +133,34 @@ */ previewLinks: function(text) { + var old = LinkPreview.links; var links = LinkPreview.findLinks(text); - $('#link-preview').html(''); - for (var i = 0; i < links.length; i++) { - var id = 'link-preview-' + i; - $('#link-preview').append(''); - LinkPreview.prepLinkPreview(id, links[i]); + + // Check for existing common elements... + for (var i = 0; i < old.length && i < links.length; i++) { + if (links[i] != old[i]) { + // Change an existing entry! + var id = 'link-preview-' + i; + $('#' + id).html(''); + LinkPreview.prepLinkPreview(id, links[i]); + } } + if (links.length > old.length) { + // Adding new entries, whee! + for (var i = old.length; i < links.length; i++) { + var id = 'link-preview-' + i; + $('#link-preview').append(''); + LinkPreview.prepLinkPreview(id, links[i]); + } + } else if (old.length > links.length) { + // Remove preview entries for links that have been removed. + for (var i = links.length; i < old.length; i++) { + var id = 'link-preview-' + i; + $('#' + id).remove(); + } + } + + LinkPreview.links = links; } }; From 9cdb9cc18d7aea9eaf13443413ba051e78e1f89e Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 15:31:03 -0800 Subject: [PATCH 115/220] LinkPreview: clear preview thumbnails & data on form submission/reset --- plugins/LinkPreview/linkpreview.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index 5dca3a8071..641adb7290 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -161,6 +161,14 @@ } LinkPreview.links = links; + }, + + /** + * Clear out any link preview data. + */ + clear: function() { + LinkPreview.links = []; + $('#link-preview').empty(); } }; @@ -169,7 +177,11 @@ if (params.width) oEmbed.width = params.width; if (params.height) oEmbed.height = params.height; - $('#form_notice').append(''); + $('#form_notice') + .append('') + .bind('reset', function() { + LinkPreview.clear(); + }); // Piggyback on the counter update... var origCounter = SN.U.Counter; From d1fb52264bc41a54061614772580377f200e90ee Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 15:36:53 -0800 Subject: [PATCH 116/220] Use session token protection on oEmbed proxy action for LinkPreview... and commit the file *sigh* --- plugins/LinkPreview/linkpreview.js | 3 +- plugins/LinkPreview/oembedproxyaction.php | 84 +++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 plugins/LinkPreview/oembedproxyaction.php diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index 641adb7290..0c0eb734ec 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -54,7 +54,8 @@ url: url, format: 'json', maxwidth: oEmbed.width, - maxheight: oEmbed.height + maxheight: oEmbed.height, + token: $('#token').val() }; $.get(oEmbed.api, params, function(data, xhr) { callback(data); diff --git a/plugins/LinkPreview/oembedproxyaction.php b/plugins/LinkPreview/oembedproxyaction.php new file mode 100644 index 0000000000..470f780731 --- /dev/null +++ b/plugins/LinkPreview/oembedproxyaction.php @@ -0,0 +1,84 @@ +. + * + * @package StatusNet + * @author Brion Vibber + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * Oembed proxy implementation + * + * This class provides an interface for our JS-side code to pull info on + * links from other sites, using either native oEmbed, our own custom + * handlers, or the oohEmbed.com offsite proxy service as configured. + * + * @category oEmbed + * @package StatusNet + * @author Brion Vibber + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class OembedproxyAction extends OembedAction +{ + + function handle($args) + { + // We're not a general oEmbed proxy service; limit to valid sessions. + $token = $this->trimmed('token'); + if (!$token || $token != common_session_token()) { + $this->clientError(_('There was a problem with your session token. '. + 'Try again, please.')); + } + + $format = $this->arg('format'); + if ($format && $format != 'json') { + throw new ClientException('Invalid format; only JSON supported.'); + } + + $url = $this->arg('url'); + if (!common_valid_http_url($url)) { + throw new ClientException('Invalid URL.'); + } + + $params = array(); + if ($this->arg('maxwidth')) { + $params['maxwidth'] = $this->arg('maxwidth'); + } + if ($this->arg('maxheight')) { + $params['maxheight'] = $this->arg('maxheight'); + } + + $data = oEmbedHelper::getObject($url, $params); + + $this->init_document('json'); + print json_encode($data); + } + +} From a81bc5c0fd3c6b1542554270bbaff81d4e70cd67 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 17 Nov 2010 12:14:50 -0500 Subject: [PATCH 117/220] upgrade to JQuery 1.4.4 --- js/jquery.js | 3204 ++++++++++++++++++++++++++++++---------------- js/jquery.min.js | 292 +++-- 2 files changed, 2223 insertions(+), 1273 deletions(-) diff --git a/js/jquery.js b/js/jquery.js index b3b95307a1..a4f114586c 100644 --- a/js/jquery.js +++ b/js/jquery.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v1.4.2 + * jQuery JavaScript Library v1.4.4 * http://jquery.com/ * * Copyright 2010, John Resig @@ -11,10 +11,14 @@ * Copyright 2010, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Sat Feb 13 22:33:48 2010 -0500 + * Date: Thu Nov 11 19:04:53 2010 -0500 */ (function( window, undefined ) { +// Use the correct document accordingly with window argument (sandbox) +var document = window.document; +var jQuery = (function() { + // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' @@ -27,28 +31,45 @@ var jQuery = function( selector, context ) { // Map over the $ in case of overwrite _$ = window.$, - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - // A central reference to the root jQuery(document) rootjQuery, // A simple way to check for HTML strings or ID strings // (both of which we optimize for) - quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, + quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, // Is it a simple selector isSimple = /^.[^:#\[\.,]*$/, // Check if a string has a non-whitespace character in it rnotwhite = /\S/, + rwhite = /\s/, // Used for trimming whitespace - rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Check for non-word characters + rnonword = /\W/, + + // Check for digits + rdigit = /\d/, // Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + // Keep a UserAgent string for use with jQuery.browser userAgent = navigator.userAgent, @@ -66,10 +87,14 @@ var jQuery = function( selector, context ) { // Save a reference to some core methods toString = Object.prototype.toString, - hasOwnProperty = Object.prototype.hasOwnProperty, + hasOwn = Object.prototype.hasOwnProperty, push = Array.prototype.push, slice = Array.prototype.slice, - indexOf = Array.prototype.indexOf; + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; jQuery.fn = jQuery.prototype = { init: function( selector, context ) { @@ -88,7 +113,7 @@ jQuery.fn = jQuery.prototype = { } // The body element only exists once, optimize finding it - if ( selector === "body" && !context ) { + if ( selector === "body" && !context && document.body ) { this.context = document; this[0] = document.body; this.selector = "body"; @@ -122,7 +147,7 @@ jQuery.fn = jQuery.prototype = { } } else { - ret = buildFragment( [ match[1] ], [ doc ] ); + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; } @@ -132,7 +157,9 @@ jQuery.fn = jQuery.prototype = { } else { elem = document.getElementById( match[2] ); - if ( elem ) { + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { @@ -150,7 +177,7 @@ jQuery.fn = jQuery.prototype = { } // HANDLE: $("TAG") - } else if ( !context && /^\w+$/.test( selector ) ) { + } else if ( !context && !rnonword.test( selector ) ) { this.selector = selector; this.context = document; selector = document.getElementsByTagName( selector ); @@ -184,7 +211,7 @@ jQuery.fn = jQuery.prototype = { selector: "", // The current version of jQuery being used - jquery: "1.4.2", + jquery: "1.4.4", // The default length of a jQuery object is 0 length: 0, @@ -303,8 +330,11 @@ jQuery.fn = jQuery.prototype = { jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { @@ -338,10 +368,15 @@ jQuery.extend = jQuery.fn.extend = function() { continue; } - // Recurse if we're merging object literal values or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { - var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src - : jQuery.isArray(copy) ? [] : {}; + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); @@ -371,34 +406,51 @@ jQuery.extend({ // Is the DOM ready to be used? Set to true once it occurs. isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, // Handle when the DOM is ready - ready: function() { + ready: function( wait ) { + // A third-party is pushing the ready event forwards + if ( wait === true ) { + jQuery.readyWait--; + } + // Make sure that the DOM is not already loaded - if ( !jQuery.isReady ) { + if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { - return setTimeout( jQuery.ready, 13 ); + return setTimeout( jQuery.ready, 1 ); } // Remember that the DOM is ready jQuery.isReady = true; + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + // If there are functions bound, to execute if ( readyList ) { // Execute all of them - var fn, i = 0; - while ( (fn = readyList[ i++ ]) ) { - fn.call( document, jQuery ); - } + var fn, + i = 0, + ready = readyList; // Reset the list of functions readyList = null; - } - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); + while ( (fn = ready[ i++ ]) ) { + fn.call( document, jQuery ); + } + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).unbind( "ready" ); + } } } }, @@ -413,7 +465,8 @@ jQuery.extend({ // Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState === "complete" ) { - return jQuery.ready(); + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); } // Mozilla, Opera and webkit nightlies currently support this event @@ -451,25 +504,40 @@ jQuery.extend({ // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { - return toString.call(obj) === "[object Function]"; + return jQuery.type(obj) === "function"; }, - isArray: function( obj ) { - return toString.call(obj) === "[object Array]"; + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow: function( obj ) { + return obj && typeof obj === "object" && "setInterval" in obj; + }, + + isNaN: function( obj ) { + return obj == null || !rdigit.test( obj ) || isNaN( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; }, isPlainObject: function( obj ) { // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } // Not own constructor property must be Object - if ( obj.constructor - && !hasOwnProperty.call(obj, "constructor") - && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } @@ -479,7 +547,7 @@ jQuery.extend({ var key; for ( key in obj ) {} - return key === undefined || hasOwnProperty.call( obj, key ); + return key === undefined || hasOwn.call( obj, key ); }, isEmptyObject: function( obj ) { @@ -503,9 +571,9 @@ jQuery.extend({ // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js - if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") - .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { + if ( rvalidchars.test(data.replace(rvalidescape, "@") + .replace(rvalidtokens, "]") + .replace(rvalidbraces, "")) ) { // Try to use the native JSON parser first return window.JSON && window.JSON.parse ? @@ -584,9 +652,20 @@ jQuery.extend({ return object; }, - trim: function( text ) { - return (text || "").replace( rtrim, "" ); - }, + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, // results is for internal usage only makeArray: function( array, results ) { @@ -596,7 +675,10 @@ jQuery.extend({ // The window, strings (and functions) also have 'length' // The extra typeof function check is to prevent crashes // in Safari 2 (See: #3039) - if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type(array); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { push.call( ret, array ); } else { jQuery.merge( ret, array ); @@ -621,7 +703,8 @@ jQuery.extend({ }, merge: function( first, second ) { - var i = first.length, j = 0; + var i = first.length, + j = 0; if ( typeof second.length === "number" ) { for ( var l = second.length; j < l; j++ ) { @@ -640,12 +723,14 @@ jQuery.extend({ }, grep: function( elems, callback, inv ) { - var ret = []; + var ret = [], retVal; + inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( var i = 0, length = elems.length; i < length; i++ ) { - if ( !inv !== !callback( elems[ i ], i ) ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { ret.push( elems[ i ] ); } } @@ -701,16 +786,49 @@ jQuery.extend({ return proxy; }, + // Mutifunctional method to get and set values to a collection + // The value/s can be optionally by executed if its a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return (new Date()).getTime(); + }, + // Use of jQuery.browser is frowned upon. // More details: http://docs.jquery.com/Utilities/jQuery.browser uaMatch: function( ua ) { ua = ua.toLowerCase(); - var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || - []; + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; return { browser: match[1] || "", version: match[2] || "0" }; }, @@ -718,6 +836,11 @@ jQuery.extend({ browser: {} }); +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + browserMatch = jQuery.uaMatch( userAgent ); if ( browserMatch.browser ) { jQuery.browser[ browserMatch.browser ] = true; @@ -735,6 +858,13 @@ if ( indexOf ) { }; } +// Verify that \s matches non-breaking spaces +// (IE fails on this test) +if ( !rwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + // All jQuery objects should point back to these rootjQuery = jQuery(document); @@ -765,7 +895,7 @@ function doScrollCheck() { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); - } catch( error ) { + } catch(e) { setTimeout( doScrollCheck, 1 ); return; } @@ -774,54 +904,12 @@ function doScrollCheck() { jQuery.ready(); } -function evalScript( i, elem ) { - if ( elem.src ) { - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - } else { - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - } +// Expose jQuery to the global object +return (window.jQuery = window.$ = jQuery); - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } -} +})(); -// Mutifunctional method to get and set values to a collection -// The value/s can be optionally by executed if its a function -function access( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; -} -function now() { - return (new Date).getTime(); -} (function() { jQuery.support = {}; @@ -829,13 +917,15 @@ function now() { var root = document.documentElement, script = document.createElement("script"), div = document.createElement("div"), - id = "script" + now(); + id = "script" + jQuery.now(); div.style.display = "none"; div.innerHTML = "
a"; var all = div.getElementsByTagName("*"), - a = div.getElementsByTagName("a")[0]; + a = div.getElementsByTagName("a")[0], + select = document.createElement("select"), + opt = select.appendChild( document.createElement("option") ); // Can't get basic test support if ( !all || !all.length || !a ) { @@ -878,18 +968,25 @@ function now() { // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected, - - parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null, + optSelected: opt.selected, // Will be defined later deleteExpando: true, + optDisabled: false, checkClone: false, scriptEval: false, noCloneEvent: true, - boxModel: null + boxModel: null, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableHiddenOffsets: true }; + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as diabled) + select.disabled = true; + jQuery.support.optDisabled = !opt.disabled; + script.type = "text/javascript"; try { script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); @@ -909,7 +1006,7 @@ function now() { // Fails in Internet Explorer try { delete script.test; - + } catch(e) { jQuery.support.deleteExpando = false; } @@ -943,27 +1040,63 @@ function now() { document.body.appendChild( div ); jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; - document.body.removeChild( div ).style.display = 'none'; - div = null; + if ( "zoom" in div.style ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2; + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
"; + jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2; + } + + div.innerHTML = "
t
"; + var tds = div.getElementsByTagName("td"); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0; + + tds[0].style.display = ""; + tds[1].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE < 8 fail this test) + jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0; + div.innerHTML = ""; + + document.body.removeChild( div ).style.display = "none"; + div = tds = null; }); // Technique from Juriy Zaytsev // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - var eventSupported = function( eventName ) { - var el = document.createElement("div"); - eventName = "on" + eventName; + var eventSupported = function( eventName ) { + var el = document.createElement("div"); + eventName = "on" + eventName; - var isSupported = (eventName in el); - if ( !isSupported ) { - el.setAttribute(eventName, "return;"); - isSupported = typeof el[eventName] === "function"; - } - el = null; + var isSupported = (eventName in el); + if ( !isSupported ) { + el.setAttribute(eventName, "return;"); + isSupported = typeof el[eventName] === "function"; + } + el = null; - return isSupported; + return isSupported; }; - + jQuery.support.submitBubbles = eventSupported("submit"); jQuery.support.changeBubbles = eventSupported("change"); @@ -971,35 +1104,31 @@ function now() { root = script = div = all = a = null; })(); -jQuery.props = { - "for": "htmlFor", - "class": "className", - readonly: "readOnly", - maxlength: "maxLength", - cellspacing: "cellSpacing", - rowspan: "rowSpan", - colspan: "colSpan", - tabindex: "tabIndex", - usemap: "useMap", - frameborder: "frameBorder" -}; -var expando = "jQuery" + now(), uuid = 0, windowData = {}; + + +var windowData = {}, + rbrace = /^(?:\{.*\}|\[.*\])$/; jQuery.extend({ cache: {}, - - expando:expando, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + expando: "jQuery" + jQuery.now(), // The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { "embed": true, - "object": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", "applet": true }, data: function( elem, name, data ) { - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + if ( !jQuery.acceptData( elem ) ) { return; } @@ -1007,29 +1136,38 @@ jQuery.extend({ windowData : elem; - var id = elem[ expando ], cache = jQuery.cache, thisCache; + var isNode = elem.nodeType, + id = isNode ? elem[ jQuery.expando ] : null, + cache = jQuery.cache, thisCache; - if ( !id && typeof name === "string" && data === undefined ) { - return null; + if ( isNode && !id && typeof name === "string" && data === undefined ) { + return; } + // Get the data from the object directly + if ( !isNode ) { + cache = elem; + // Compute a unique ID for the element - if ( !id ) { - id = ++uuid; + } else if ( !id ) { + elem[ jQuery.expando ] = id = ++jQuery.uuid; } // Avoid generating a new cache unless none exists and we // want to manipulate it. if ( typeof name === "object" ) { - elem[ expando ] = id; - thisCache = cache[ id ] = jQuery.extend(true, {}, name); + if ( isNode ) { + cache[ id ] = jQuery.extend(cache[ id ], name); - } else if ( !cache[ id ] ) { - elem[ expando ] = id; + } else { + jQuery.extend( cache, name ); + } + + } else if ( isNode && !cache[ id ] ) { cache[ id ] = {}; } - thisCache = cache[ id ]; + thisCache = isNode ? cache[ id ] : cache; // Prevent overriding the named cache with undefined values if ( data !== undefined ) { @@ -1040,7 +1178,7 @@ jQuery.extend({ }, removeData: function( elem, name ) { - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + if ( !jQuery.acceptData( elem ) ) { return; } @@ -1048,7 +1186,10 @@ jQuery.extend({ windowData : elem; - var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ]; + var isNode = elem.nodeType, + id = isNode ? elem[ jQuery.expando ] : elem, + cache = jQuery.cache, + thisCache = isNode ? cache[ id ] : id; // If we want to remove a specific section of the element's data if ( name ) { @@ -1057,30 +1198,66 @@ jQuery.extend({ delete thisCache[ name ]; // If we've removed all the data, remove the element's cache - if ( jQuery.isEmptyObject(thisCache) ) { + if ( isNode && jQuery.isEmptyObject(thisCache) ) { jQuery.removeData( elem ); } } // Otherwise, we want to remove all of the element's data } else { - if ( jQuery.support.deleteExpando ) { + if ( isNode && jQuery.support.deleteExpando ) { delete elem[ jQuery.expando ]; } else if ( elem.removeAttribute ) { elem.removeAttribute( jQuery.expando ); - } // Completely remove the data cache - delete cache[ id ]; + } else if ( isNode ) { + delete cache[ id ]; + + // Remove all fields from the object + } else { + for ( var n in elem ) { + delete elem[ n ]; + } + } } + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; } }); jQuery.fn.extend({ data: function( key, value ) { - if ( typeof key === "undefined" && this.length ) { - return jQuery.data( this[0] ); + var data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + var attr = this[0].attributes, name; + data = jQuery.data( this[0] ); + + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = name.substr( 5 ); + dataAttr( this[0], name, data[ name ] ); + } + } + } + + return data; } else if ( typeof key === "object" ) { return this.each(function() { @@ -1092,17 +1269,26 @@ jQuery.fn.extend({ parts[1] = parts[1] ? "." + parts[1] : ""; if ( value === undefined ) { - var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + // Try to fetch any internally stored data first if ( data === undefined && this.length ) { data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); } + return data === undefined && parts[1] ? this.data( parts[0] ) : data; + } else { - return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { + return this.each(function() { + var $this = jQuery( this ), + args = [ parts[0], value ]; + + $this.triggerHandler( "setData" + parts[1] + "!", args ); jQuery.data( this, key, value ); + $this.triggerHandler( "changeData" + parts[1] + "!", args ); }); } }, @@ -1113,6 +1299,37 @@ jQuery.fn.extend({ }); } }); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + data = elem.getAttribute( "data-" + key ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + !jQuery.isNaN( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + + + + jQuery.extend({ queue: function( elem, type, data ) { if ( !elem ) { @@ -1140,7 +1357,8 @@ jQuery.extend({ dequeue: function( elem, type ) { type = type || "fx"; - var queue = jQuery.queue( elem, type ), fn = queue.shift(); + var queue = jQuery.queue( elem, type ), + fn = queue.shift(); // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { @@ -1171,7 +1389,7 @@ jQuery.fn.extend({ if ( data === undefined ) { return jQuery.queue( this[0], type ); } - return this.each(function( i, elem ) { + return this.each(function( i ) { var queue = jQuery.queue( this, type, data ); if ( type === "fx" && queue[0] !== "inprogress" ) { @@ -1203,18 +1421,35 @@ jQuery.fn.extend({ return this.queue( type || "fx", [] ); } }); + + + + var rclass = /[\n\t]/g, - rspace = /\s+/, + rspaces = /\s+/, rreturn = /\r/g, - rspecialurl = /href|src|style/, - rtype = /(button|input)/i, - rfocusable = /(button|input|object|select|textarea)/i, - rclickable = /^(a|area)$/i, - rradiocheck = /radio|checkbox/; + rspecialurl = /^(?:href|src|style)$/, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rradiocheck = /^(?:radio|checkbox)$/i; + +jQuery.props = { + "for": "htmlFor", + "class": "className", + readonly: "readOnly", + maxlength: "maxLength", + cellspacing: "cellSpacing", + rowspan: "rowSpan", + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" +}; jQuery.fn.extend({ attr: function( name, value ) { - return access( this, name, value, true, jQuery.attr ); + return jQuery.access( this, name, value, true, jQuery.attr ); }, removeAttr: function( name, fn ) { @@ -1235,7 +1470,7 @@ jQuery.fn.extend({ } if ( value && typeof value === "string" ) { - var classNames = (value || "").split( rspace ); + var classNames = (value || "").split( rspaces ); for ( var i = 0, l = this.length; i < l; i++ ) { var elem = this[i]; @@ -1245,7 +1480,9 @@ jQuery.fn.extend({ elem.className = value; } else { - var className = " " + elem.className + " ", setClass = elem.className; + var className = " " + elem.className + " ", + setClass = elem.className; + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { setClass += " " + classNames[c]; @@ -1269,7 +1506,7 @@ jQuery.fn.extend({ } if ( (value && typeof value === "string") || value === undefined ) { - var classNames = (value || "").split(rspace); + var classNames = (value || "").split( rspaces ); for ( var i = 0, l = this.length; i < l; i++ ) { var elem = this[i]; @@ -1293,7 +1530,8 @@ jQuery.fn.extend({ }, toggleClass: function( value, stateVal ) { - var type = typeof value, isBool = typeof stateVal === "boolean"; + var type = typeof value, + isBool = typeof stateVal === "boolean"; if ( jQuery.isFunction( value ) ) { return this.each(function(i) { @@ -1305,9 +1543,11 @@ jQuery.fn.extend({ return this.each(function() { if ( type === "string" ) { // toggle individual class names - var className, i = 0, self = jQuery(this), + var className, + i = 0, + self = jQuery( this ), state = stateVal, - classNames = value.split( rspace ); + classNames = value.split( rspaces ); while ( (className = classNames[ i++ ]) ) { // check each className given, space seperated list @@ -1339,12 +1579,15 @@ jQuery.fn.extend({ }, val: function( value ) { - if ( value === undefined ) { + if ( !arguments.length ) { var elem = this[0]; if ( elem ) { if ( jQuery.nodeName( elem, "option" ) ) { - return (elem.attributes.value || {}).specified ? elem.value : elem.text; + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; } // We need to handle select boxes special @@ -1363,8 +1606,11 @@ jQuery.fn.extend({ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { var option = options[ i ]; - if ( option.selected ) { - // Get the specifc value for the option + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option value = jQuery(option).val(); // We don't need an array for one selects @@ -1407,10 +1653,15 @@ jQuery.fn.extend({ val = value.call(this, i, self.val()); } - // Typecast each time if the value is a Function and the appended - // value is therefore different each time. - if ( typeof val === "number" ) { + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { val += ""; + } else if ( jQuery.isArray(val) ) { + val = jQuery.map(val, function (value) { + return value == null ? "" : value + ""; + }); } if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { @@ -1463,89 +1714,103 @@ jQuery.extend({ // Try to normalize/fix the name name = notxml && jQuery.props[ name ] || name; - // Only do all the following if this is a node (faster for style) - if ( elem.nodeType === 1 ) { - // These attributes require special treatment - var special = rspecialurl.test( name ); + // These attributes require special treatment + var special = rspecialurl.test( name ); - // Safari mis-reports the default selected property of an option - // Accessing the parent's selectedIndex property fixes it - if ( name === "selected" && !jQuery.support.optSelected ) { - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } + // Safari mis-reports the default selected property of an option + // Accessing the parent's selectedIndex property fixes it + if ( name === "selected" && !jQuery.support.optSelected ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; } } - - // If applicable, access the attribute via the DOM 0 way - if ( name in elem && notxml && !special ) { - if ( set ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } - - elem[ name ] = value; - } - - // browsers index elements by id/name on forms, give priority to attributes. - if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { - return elem.getAttributeNode( name ).nodeValue; - } - - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - if ( name === "tabIndex" ) { - var attributeNode = elem.getAttributeNode( "tabIndex" ); - - return attributeNode && attributeNode.specified ? - attributeNode.value : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - - return elem[ name ]; - } - - if ( !jQuery.support.style && notxml && name === "style" ) { - if ( set ) { - elem.style.cssText = "" + value; - } - - return elem.style.cssText; - } - - if ( set ) { - // convert the value to a string (all browsers do this but IE) see #1070 - elem.setAttribute( name, "" + value ); - } - - var attr = !jQuery.support.hrefNormalized && notxml && special ? - // Some attributes require a special call on IE - elem.getAttribute( name, 2 ) : - elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return attr === null ? undefined : attr; } - // elem is actually elem.style ... set the style - // Using attr for specific style information is now deprecated. Use style instead. - return jQuery.style( elem, name, value ); + // If applicable, access the attribute via the DOM 0 way + // 'in' checks fail in Blackberry 4.7 #6931 + if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) { + if ( set ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } + + if ( value === null ) { + if ( elem.nodeType === 1 ) { + elem.removeAttribute( name ); + } + + } else { + elem[ name ] = value; + } + } + + // browsers index elements by id/name on forms, give priority to attributes. + if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { + return elem.getAttributeNode( name ).nodeValue; + } + + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + if ( name === "tabIndex" ) { + var attributeNode = elem.getAttributeNode( "tabIndex" ); + + return attributeNode && attributeNode.specified ? + attributeNode.value : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + + return elem[ name ]; + } + + if ( !jQuery.support.style && notxml && name === "style" ) { + if ( set ) { + elem.style.cssText = "" + value; + } + + return elem.style.cssText; + } + + if ( set ) { + // convert the value to a string (all browsers do this but IE) see #1070 + elem.setAttribute( name, "" + value ); + } + + // Ensure that missing attributes return undefined + // Blackberry 4.7 returns "" from getAttribute #6938 + if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) { + return undefined; + } + + var attr = !jQuery.support.hrefNormalized && notxml && special ? + // Some attributes require a special call on IE + elem.getAttribute( name, 2 ) : + elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return attr === null ? undefined : attr; } }); + + + + var rnamespaces = /\.(.*)$/, + rformElems = /^(?:textarea|input|select)$/i, + rperiod = /\./g, + rspace = / /g, + rescape = /[^\w\s.|`]/g, fcleanup = function( nm ) { - return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { - return "\\" + ch; - }); - }; + return nm.replace(rescape, "\\$&"); + }, + focusCounts = { focusin: 0, focusout: 0 }; /* * A number of helper functions used for managing events. @@ -1563,10 +1828,17 @@ jQuery.event = { // For whatever reason, IE has trouble passing the window object // around, causing it to be cloned in the process - if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { + if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) { elem = window; } + if ( handler === false ) { + handler = returnFalse; + } else if ( !handler ) { + // Fixes bug #7229. Fix recommended by jdalton + return; + } + var handleObjIn, handleObj; if ( handler.handler ) { @@ -1588,8 +1860,28 @@ jQuery.event = { return; } - var events = elemData.events = elemData.events || {}, - eventHandle = elemData.handle, eventHandle; + // Use a key less likely to result in collisions for plain JS objects. + // Fixes bug #7150. + var eventKey = elem.nodeType ? "events" : "__events__", + events = elemData[ eventKey ], + eventHandle = elemData.handle; + + if ( typeof events === "function" ) { + // On plain objects events is a fn that holds the the data + // which prevents this data from being JSON serialized + // the function does not need to be called, it just contains the data + eventHandle = events.handle; + events = events.events; + + } else if ( !events ) { + if ( !elem.nodeType ) { + // On plain objects, create a fn that acts as the holder + // of the values to avoid JSON serialization of event data + elemData[ eventKey ] = elemData = function(){}; + } + + elemData.events = events = {}; + } if ( !eventHandle ) { elemData.handle = eventHandle = function() { @@ -1628,7 +1920,9 @@ jQuery.event = { } handleObj.type = type; - handleObj.guid = handler.guid; + if ( !handleObj.guid ) { + handleObj.guid = handler.guid; + } // Get the current list of functions bound to this event var handlers = events[ type ], @@ -1680,13 +1974,23 @@ jQuery.event = { return; } - var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + if ( handler === false ) { + handler = returnFalse; + } + + var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + eventKey = elem.nodeType ? "events" : "__events__", elemData = jQuery.data( elem ), - events = elemData && elemData.events; + events = elemData && elemData[ eventKey ]; if ( !elemData || !events ) { return; } + + if ( typeof events === "function" ) { + elemData = events; + events = events.events; + } // types is actually an event object here if ( types && types.type ) { @@ -1721,7 +2025,7 @@ jQuery.event = { type = namespaces.shift(); namespace = new RegExp("(^|\\.)" + - jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)") + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); } eventType = events[ type ]; @@ -1731,7 +2035,7 @@ jQuery.event = { } if ( !handler ) { - for ( var j = 0; j < eventType.length; j++ ) { + for ( j = 0; j < eventType.length; j++ ) { handleObj = eventType[ j ]; if ( all || namespace.test( handleObj.namespace ) ) { @@ -1745,7 +2049,7 @@ jQuery.event = { special = jQuery.event.special[ type ] || {}; - for ( var j = pos || 0; j < eventType.length; j++ ) { + for ( j = pos || 0; j < eventType.length; j++ ) { handleObj = eventType[ j ]; if ( handler.guid === handleObj.guid ) { @@ -1769,7 +2073,7 @@ jQuery.event = { // remove generic event handler if no more handlers exist if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - removeEvent( elem, type, elemData.handle ); + jQuery.removeEvent( elem, type, elemData.handle ); } ret = null; @@ -1787,7 +2091,10 @@ jQuery.event = { delete elemData.events; delete elemData.handle; - if ( jQuery.isEmptyObject( elemData ) ) { + if ( typeof elemData === "function" ) { + jQuery.removeData( elem, eventKey ); + + } else if ( jQuery.isEmptyObject( elemData ) ) { jQuery.removeData( elem ); } } @@ -1802,7 +2109,7 @@ jQuery.event = { if ( !bubbling ) { event = typeof event === "object" ? // jQuery.Event object - event[expando] ? event : + event[ jQuery.expando ] ? event : // Object literal jQuery.extend( jQuery.Event(type), event ) : // Just the event type (string) @@ -1847,7 +2154,10 @@ jQuery.event = { event.currentTarget = elem; // Trigger the event, it is assumed that "handle" is a function - var handle = jQuery.data( elem, "handle" ); + var handle = elem.nodeType ? + jQuery.data( elem, "handle" ) : + (jQuery.data( elem, "__events__" ) || {}).handle; + if ( handle ) { handle.apply( elem, data ); } @@ -1859,41 +2169,44 @@ jQuery.event = { if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { event.result = false; + event.preventDefault(); } } // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} + } catch (inlineError) {} if ( !event.isPropagationStopped() && parent ) { jQuery.event.trigger( event, data, parent, true ); } else if ( !event.isDefaultPrevented() ) { - var target = event.target, old, - isClick = jQuery.nodeName(target, "a") && type === "click", - special = jQuery.event.special[ type ] || {}; + var old, + target = event.target, + targetType = type.replace( rnamespaces, "" ), + isClick = jQuery.nodeName( target, "a" ) && targetType === "click", + special = jQuery.event.special[ targetType ] || {}; if ( (!special._default || special._default.call( elem, event ) === false) && !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { try { - if ( target[ type ] ) { + if ( target[ targetType ] ) { // Make sure that we don't accidentally re-trigger the onFOO events - old = target[ "on" + type ]; + old = target[ "on" + targetType ]; if ( old ) { - target[ "on" + type ] = null; + target[ "on" + targetType ] = null; } jQuery.event.triggered = true; - target[ type ](); + target[ targetType ](); } // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} + } catch (triggerError) {} if ( old ) { - target[ "on" + type ] = old; + target[ "on" + targetType ] = old; } jQuery.event.triggered = false; @@ -1902,9 +2215,11 @@ jQuery.event = { }, handle: function( event ) { - var all, handlers, namespaces, namespace, events; + var all, handlers, namespaces, namespace_re, events, + namespace_sort = [], + args = jQuery.makeArray( arguments ); - event = arguments[0] = jQuery.event.fix( event || window.event ); + event = args[0] = jQuery.event.fix( event || window.event ); event.currentTarget = this; // Namespaced event handlers @@ -1913,10 +2228,19 @@ jQuery.event = { if ( !all ) { namespaces = event.type.split("."); event.type = namespaces.shift(); - namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); + namespace_sort = namespaces.slice(0).sort(); + namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)"); } - var events = jQuery.data(this, "events"), handlers = events[ event.type ]; + event.namespace = event.namespace || namespace_sort.join("."); + + events = jQuery.data(this, this.nodeType ? "events" : "__events__"); + + if ( typeof events === "function" ) { + events = events.events; + } + + handlers = (events || {})[ event.type ]; if ( events && handlers ) { // Clone the handlers to prevent manipulation @@ -1926,14 +2250,14 @@ jQuery.event = { var handleObj = handlers[ j ]; // Filter the functions by class - if ( all || namespace.test( handleObj.namespace ) ) { + if ( all || namespace_re.test( handleObj.namespace ) ) { // Pass in a reference to the handler function itself // So that we can later remove it event.handler = handleObj.handler; event.data = handleObj.data; event.handleObj = handleObj; - var ret = handleObj.handler.apply( this, arguments ); + var ret = handleObj.handler.apply( this, args ); if ( ret !== undefined ) { event.result = ret; @@ -1953,10 +2277,10 @@ jQuery.event = { return event.result; }, - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), fix: function( event ) { - if ( event[ expando ] ) { + if ( event[ jQuery.expando ] ) { return event; } @@ -1972,7 +2296,8 @@ jQuery.event = { // Fix target property, if necessary if ( !event.target ) { - event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either + // Fixes #1925 where srcElement might not be defined either + event.target = event.srcElement || document; } // check if target is a textnode (safari) @@ -1987,14 +2312,16 @@ jQuery.event = { // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && event.clientX != null ) { - var doc = document.documentElement, body = document.body; + var doc = document.documentElement, + body = document.body; + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); } // Add which for key events - if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { - event.which = event.charCode || event.keyCode; + if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { + event.which = event.charCode != null ? event.charCode : event.keyCode; } // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) @@ -2026,36 +2353,24 @@ jQuery.event = { live: { add: function( handleObj ) { - jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) ); + jQuery.event.add( this, + liveConvert( handleObj.origType, handleObj.selector ), + jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); }, remove: function( handleObj ) { - var remove = true, - type = handleObj.origType.replace(rnamespaces, ""); - - jQuery.each( jQuery.data(this, "events").live || [], function() { - if ( type === this.origType.replace(rnamespaces, "") ) { - remove = false; - return false; - } - }); - - if ( remove ) { - jQuery.event.remove( this, handleObj.origType, liveHandler ); - } + jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); } - }, beforeunload: { setup: function( data, namespaces, eventHandle ) { // We only want to do this special case on windows - if ( this.setInterval ) { + if ( jQuery.isWindow( this ) ) { this.onbeforeunload = eventHandle; } - - return false; }, + teardown: function( namespaces, eventHandle ) { if ( this.onbeforeunload === eventHandle ) { this.onbeforeunload = null; @@ -2065,12 +2380,16 @@ jQuery.event = { } }; -var removeEvent = document.removeEventListener ? +jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { - elem.removeEventListener( type, handle, false ); + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } } : function( elem, type, handle ) { - elem.detachEvent( "on" + type, handle ); + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } }; jQuery.Event = function( src ) { @@ -2090,10 +2409,10 @@ jQuery.Event = function( src ) { // timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value - this.timeStamp = now(); + this.timeStamp = jQuery.now(); // Mark it as fixed - this[ expando ] = true; + this[ jQuery.expando ] = true; }; function returnFalse() { @@ -2117,9 +2436,11 @@ jQuery.Event.prototype = { // if preventDefault exists run it on the original event if ( e.preventDefault ) { e.preventDefault(); - } + // otherwise set the returnValue property of the original event to false (IE) - e.returnValue = false; + } else { + e.returnValue = false; + } }, stopPropagation: function() { this.isPropagationStopped = returnTrue; @@ -2199,17 +2520,21 @@ if ( !jQuery.support.submitBubbles ) { setup: function( data, namespaces ) { if ( this.nodeName.toLowerCase() !== "form" ) { jQuery.event.add(this, "click.specialSubmit", function( e ) { - var elem = e.target, type = elem.type; + var elem = e.target, + type = elem.type; if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + e.liveFired = undefined; return trigger( "submit", this, arguments ); } }); jQuery.event.add(this, "keypress.specialSubmit", function( e ) { - var elem = e.target, type = elem.type; + var elem = e.target, + type = elem.type; if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + e.liveFired = undefined; return trigger( "submit", this, arguments ); } }); @@ -2229,9 +2554,7 @@ if ( !jQuery.support.submitBubbles ) { // change delegation, happens here so we have bind. if ( !jQuery.support.changeBubbles ) { - var formElems = /textarea|input|select/i, - - changeFilters, + var changeFilters, getVal = function( elem ) { var type = elem.type, val = elem.value; @@ -2256,7 +2579,7 @@ if ( !jQuery.support.changeBubbles ) { testChange = function testChange( e ) { var elem = e.target, data, val; - if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { + if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { return; } @@ -2274,6 +2597,7 @@ if ( !jQuery.support.changeBubbles ) { if ( data != null || val ) { e.type = "change"; + e.liveFired = undefined; return jQuery.event.trigger( e, arguments[1], elem ); } }; @@ -2282,6 +2606,8 @@ if ( !jQuery.support.changeBubbles ) { filters: { focusout: testChange, + beforedeactivate: testChange, + click: function( e ) { var elem = e.target, type = elem.type; @@ -2304,7 +2630,7 @@ if ( !jQuery.support.changeBubbles ) { // Beforeactivate happens also before the previous element is blurred // with this event you can't trigger a change event, but you can store - // information/focus[in] is not needed anymore + // information beforeactivate: function( e ) { var elem = e.target; jQuery.data( elem, "_change_data", getVal(elem) ); @@ -2320,17 +2646,20 @@ if ( !jQuery.support.changeBubbles ) { jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); } - return formElems.test( this.nodeName ); + return rformElems.test( this.nodeName ); }, teardown: function( namespaces ) { jQuery.event.remove( this, ".specialChange" ); - return formElems.test( this.nodeName ); + return rformElems.test( this.nodeName ); } }; changeFilters = jQuery.event.special.change.filters; + + // Handle when the input is .focus()'d + changeFilters.focus = changeFilters.beforeactivate; } function trigger( type, elem, args ) { @@ -2343,17 +2672,21 @@ if ( document.addEventListener ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { jQuery.event.special[ fix ] = { setup: function() { - this.addEventListener( orig, handler, true ); + if ( focusCounts[fix]++ === 0 ) { + document.addEventListener( orig, handler, true ); + } }, teardown: function() { - this.removeEventListener( orig, handler, true ); + if ( --focusCounts[fix] === 0 ) { + document.removeEventListener( orig, handler, true ); + } } }; function handler( e ) { e = jQuery.event.fix( e ); e.type = fix; - return jQuery.event.handle.call( this, e ); + return jQuery.event.trigger( e, null, e.target ); } }); } @@ -2368,7 +2701,7 @@ jQuery.each(["bind", "one"], function( i, name ) { return this; } - if ( jQuery.isFunction( data ) ) { + if ( jQuery.isFunction( data ) || data === false ) { fn = data; data = undefined; } @@ -2439,7 +2772,8 @@ jQuery.fn.extend({ toggle: function( fn ) { // Save reference to arguments for access in closure - var args = arguments, i = 1; + var args = arguments, + i = 1; // link all the functions, so any of them can unbind this click handler while ( i < args.length ) { @@ -2476,6 +2810,14 @@ jQuery.each(["live", "die"], function( i, name ) { var type, i = 0, match, namespaces, preType, selector = origSelector || this.selector, context = origSelector ? this : jQuery( this.context ); + + if ( typeof types === "object" && !types.preventDefault ) { + for ( var key in types ) { + context[ name ]( key, data, types[key], selector ); + } + + return this; + } if ( jQuery.isFunction( data ) ) { fn = data; @@ -2510,30 +2852,39 @@ jQuery.each(["live", "die"], function( i, name ) { if ( name === "live" ) { // bind live handler - context.each(function(){ - jQuery.event.add( this, liveConvert( type, selector ), + for ( var j = 0, l = context.length; j < l; j++ ) { + jQuery.event.add( context[j], "live." + liveConvert( type, selector ), { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); - }); + } } else { // unbind live handler - context.unbind( liveConvert( type, selector ), fn ); + context.unbind( "live." + liveConvert( type, selector ), fn ); } } return this; - } + }; }); function liveHandler( event ) { - var stop, elems = [], selectors = [], args = arguments, - related, match, handleObj, elem, j, i, l, data, - events = jQuery.data( this, "events" ); + var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, + elems = [], + selectors = [], + events = jQuery.data( this, this.nodeType ? "events" : "__events__" ); + + if ( typeof events === "function" ) { + events = events.events; + } // Make sure we avoid non-left-click bubbling in Firefox (#3861) if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { return; } + + if ( event.namespace ) { + namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); + } event.liveFired = this; @@ -2553,20 +2904,23 @@ function liveHandler( event ) { match = jQuery( event.target ).closest( selectors, event.currentTarget ); for ( i = 0, l = match.length; i < l; i++ ) { + close = match[i]; + for ( j = 0; j < live.length; j++ ) { handleObj = live[j]; - if ( match[i].selector === handleObj.selector ) { - elem = match[i].elem; + if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) { + elem = close.elem; related = null; // Those two events require additional checking if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { + event.type = handleObj.preType; related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; } if ( !related || related !== elem ) { - elems.push({ elem: elem, handleObj: handleObj }); + elems.push({ elem: elem, handleObj: handleObj, level: close.level }); } } } @@ -2574,13 +2928,26 @@ function liveHandler( event ) { for ( i = 0, l = elems.length; i < l; i++ ) { match = elems[i]; + + if ( maxLevel && match.level > maxLevel ) { + break; + } + event.currentTarget = match.elem; event.data = match.handleObj.data; event.handleObj = match.handleObj; - if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) { - stop = false; - break; + ret = match.handleObj.origHandler.apply( match.elem, arguments ); + + if ( ret === false || event.isPropagationStopped() ) { + maxLevel = match.level; + + if ( ret === false ) { + stop = false; + } + if ( event.isImmediatePropagationStopped() ) { + break; + } } } @@ -2588,7 +2955,7 @@ function liveHandler( event ) { } function liveConvert( type, selector ) { - return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); + return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&"); } jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + @@ -2596,8 +2963,15 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl "change select submit keydown keypress keyup error").split(" "), function( i, name ) { // Handle event binding - jQuery.fn[ name ] = function( fn ) { - return fn ? this.bind( name, fn ) : this.trigger( name ); + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.bind( name, data, fn ) : + this.trigger( name ); }; if ( jQuery.attrFn ) { @@ -2610,7 +2984,7 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl // More info: // - http://isaacschlueter.com/2006/10/msie-memory-leaks/ if ( window.attachEvent && !window.addEventListener ) { - window.attachEvent("onunload", function() { + jQuery(window).bind("unload", function() { for ( var id in jQuery.cache ) { if ( jQuery.cache[ id ].handle ) { // Try/Catch is to handle iframes being unloaded, see #4280 @@ -2621,6 +2995,8 @@ if ( window.attachEvent && !window.addEventListener ) { } }); } + + /*! * Sizzle CSS Selector Engine - v1.0 * Copyright 2009, The Dojo Foundation @@ -2629,7 +3005,7 @@ if ( window.attachEvent && !window.addEventListener ) { */ (function(){ -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, done = 0, toString = Object.prototype.toString, hasDuplicate = false, @@ -2639,14 +3015,16 @@ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^ // optimization where it does not always call our comparision // function. If that is the case, discard the hasDuplicate value. // Thus far that includes Google Chrome. -[0, 0].sort(function(){ +[0, 0].sort(function() { baseHasDuplicate = false; return 0; }); -var Sizzle = function(selector, context, results, seed) { +var Sizzle = function( selector, context, results, seed ) { results = results || []; - var origContext = context = context || document; + context = context || document; + + var origContext = context; if ( context.nodeType !== 1 && context.nodeType !== 9 ) { return []; @@ -2656,24 +3034,34 @@ var Sizzle = function(selector, context, results, seed) { return results; } - var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], soFar = selector; // Reset the position of the chunker regexp (start from head) - while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { - soFar = m[3]; + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; - parts.push( m[1] ); + parts.push( m[1] ); - if ( m[2] ) { - extra = m[3]; - break; + if ( m[2] ) { + extra = m[3]; + break; + } } - } + } while ( m ); if ( parts.length > 1 && origPOS.exec( selector ) ) { + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { set = posProcess( parts[0] + parts[1], context ); + } else { set = Expr.relative[ parts[0] ] ? [ context ] : @@ -2689,29 +3077,38 @@ var Sizzle = function(selector, context, results, seed) { set = posProcess( selector, set ); } } + } else { // Take a shortcut and set the context if the root selector is an ID // (but not if it'll be faster if the inner selector is an ID) if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - var ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; } if ( context ) { - var ret = seed ? + ret = seed ? { expr: parts.pop(), set: makeArray(seed) } : Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; if ( parts.length > 0 ) { - checkSet = makeArray(set); + checkSet = makeArray( set ); + } else { prune = false; } while ( parts.length ) { - var cur = parts.pop(), pop = cur; + cur = parts.pop(); + pop = cur; if ( !Expr.relative[ cur ] ) { cur = ""; @@ -2725,6 +3122,7 @@ var Sizzle = function(selector, context, results, seed) { Expr.relative[ cur ]( checkSet, pop, contextXML ); } + } else { checkSet = parts = []; } @@ -2741,19 +3139,22 @@ var Sizzle = function(selector, context, results, seed) { if ( toString.call(checkSet) === "[object Array]" ) { if ( !prune ) { results.push.apply( results, checkSet ); + } else if ( context && context.nodeType === 1 ) { - for ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { results.push( set[i] ); } } + } else { - for ( var i = 0; checkSet[i] != null; i++ ) { + for ( i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && checkSet[i].nodeType === 1 ) { results.push( set[i] ); } } } + } else { makeArray( checkSet, results ); } @@ -2766,15 +3167,15 @@ var Sizzle = function(selector, context, results, seed) { return results; }; -Sizzle.uniqueSort = function(results){ +Sizzle.uniqueSort = function( results ) { if ( sortOrder ) { hasDuplicate = baseHasDuplicate; - results.sort(sortOrder); + results.sort( sortOrder ); if ( hasDuplicate ) { for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[i-1] ) { - results.splice(i--, 1); + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); } } } @@ -2783,27 +3184,33 @@ Sizzle.uniqueSort = function(results){ return results; }; -Sizzle.matches = function(expr, set){ - return Sizzle(expr, null, null, set); +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); }; -Sizzle.find = function(expr, context, isXML){ - var set, match; +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set; if ( !expr ) { return []; } for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var type = Expr.order[i], match; + var match, + type = Expr.order[i]; if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { var left = match[1]; - match.splice(1,1); + match.splice( 1, 1 ); if ( left.substr( left.length - 1 ) !== "\\" ) { match[1] = (match[1] || "").replace(/\\/g, ""); set = Expr.find[ type ]( match, context, isXML ); + if ( set != null ) { expr = expr.replace( Expr.match[ type ], "" ); break; @@ -2813,20 +3220,26 @@ Sizzle.find = function(expr, context, isXML){ } if ( !set ) { - set = context.getElementsByTagName("*"); + set = context.getElementsByTagName( "*" ); } - return {set: set, expr: expr}; + return { set: set, expr: expr }; }; -Sizzle.filter = function(expr, set, inplace, not){ - var old = expr, result = [], curLoop = set, match, anyFound, - isXMLFilter = set && set[0] && isXML(set[0]); +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); while ( expr && set.length ) { for ( var type in Expr.filter ) { if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var filter = Expr.filter[ type ], found, item, left = match[1]; + var found, item, + filter = Expr.filter[ type ], + left = match[1]; + anyFound = false; match.splice(1,1); @@ -2844,6 +3257,7 @@ Sizzle.filter = function(expr, set, inplace, not){ if ( !match ) { anyFound = found = true; + } else if ( match === true ) { continue; } @@ -2858,9 +3272,11 @@ Sizzle.filter = function(expr, set, inplace, not){ if ( inplace && found != null ) { if ( pass ) { anyFound = true; + } else { curLoop[i] = false; } + } else if ( pass ) { result.push( item ); anyFound = true; @@ -2889,6 +3305,7 @@ Sizzle.filter = function(expr, set, inplace, not){ if ( expr === old ) { if ( anyFound == null ) { Sizzle.error( expr ); + } else { break; } @@ -2906,30 +3323,35 @@ Sizzle.error = function( msg ) { var Expr = Sizzle.selectors = { order: [ "ID", "NAME", "TAG" ], + match: { - ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ }, + leftMatch: {}, + attrMap: { "class": "className", "for": "htmlFor" }, + attrHandle: { - href: function(elem){ - return elem.getAttribute("href"); + href: function( elem ) { + return elem.getAttribute( "href" ); } }, + relative: { "+": function(checkSet, part){ var isPartStr = typeof part === "string", - isTag = isPartStr && !/\W/.test(part), + isTag = isPartStr && !/\W/.test( part ), isPartStrNotTag = isPartStr && !isTag; if ( isTag ) { @@ -2950,22 +3372,29 @@ var Expr = Sizzle.selectors = { Sizzle.filter( part, checkSet, true ); } }, - ">": function(checkSet, part){ - var isPartStr = typeof part === "string"; - if ( isPartStr && !/\W/.test(part) ) { + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !/\W/.test( part ) ) { part = part.toLowerCase(); - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; + for ( ; i < l; i++ ) { + elem = checkSet[i]; + if ( elem ) { var parent = elem.parentNode; checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; } } + } else { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; + for ( ; i < l; i++ ) { + elem = checkSet[i]; + if ( elem ) { checkSet[i] = isPartStr ? elem.parentNode : @@ -2978,37 +3407,50 @@ var Expr = Sizzle.selectors = { } } }, + "": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; + var nodeCheck, + doneName = done++, + checkFn = dirCheck; if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); + part = part.toLowerCase(); + nodeCheck = part; checkFn = dirNodeCheck; } - checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); }, - "~": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; checkFn = dirNodeCheck; } - checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); } }, + find: { - ID: function(match, context, isXML){ + ID: function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); - return m ? [m] : []; + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; } }, - NAME: function(match, context){ + + NAME: function( match, context ) { if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], results = context.getElementsByName(match[1]); + var ret = [], + results = context.getElementsByName( match[1] ); for ( var i = 0, l = results.length; i < l; i++ ) { if ( results[i].getAttribute("name") === match[1] ) { @@ -3019,12 +3461,13 @@ var Expr = Sizzle.selectors = { return ret.length === 0 ? null : ret; } }, - TAG: function(match, context){ - return context.getElementsByTagName(match[1]); + + TAG: function( match, context ) { + return context.getElementsByTagName( match[1] ); } }, preFilter: { - CLASS: function(match, curLoop, inplace, result, not, isXML){ + CLASS: function( match, curLoop, inplace, result, not, isXML ) { match = " " + match[1].replace(/\\/g, "") + " "; if ( isXML ) { @@ -3037,6 +3480,7 @@ var Expr = Sizzle.selectors = { if ( !inplace ) { result.push( elem ); } + } else if ( inplace ) { curLoop[i] = false; } @@ -3045,13 +3489,16 @@ var Expr = Sizzle.selectors = { return false; }, - ID: function(match){ + + ID: function( match ) { return match[1].replace(/\\/g, ""); }, - TAG: function(match, curLoop){ + + TAG: function( match, curLoop ) { return match[1].toLowerCase(); }, - CHILD: function(match){ + + CHILD: function( match ) { if ( match[1] === "nth" ) { // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( @@ -3068,7 +3515,8 @@ var Expr = Sizzle.selectors = { return match; }, - ATTR: function(match, curLoop, inplace, result, not, isXML){ + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { var name = match[1].replace(/\\/g, ""); if ( !isXML && Expr.attrMap[name] ) { @@ -3081,159 +3529,203 @@ var Expr = Sizzle.selectors = { return match; }, - PSEUDO: function(match, curLoop, inplace, result, not){ + + PSEUDO: function( match, curLoop, inplace, result, not ) { if ( match[1] === "not" ) { // If we're dealing with a complex expression, or a simple one if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { match[3] = Sizzle(match[3], null, null, curLoop); + } else { var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + if ( !inplace ) { result.push.apply( result, ret ); } + return false; } + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } return match; }, - POS: function(match){ + + POS: function( match ) { match.unshift( true ); + return match; } }, + filters: { - enabled: function(elem){ + enabled: function( elem ) { return elem.disabled === false && elem.type !== "hidden"; }, - disabled: function(elem){ + + disabled: function( elem ) { return elem.disabled === true; }, - checked: function(elem){ + + checked: function( elem ) { return elem.checked === true; }, - selected: function(elem){ + + selected: function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly elem.parentNode.selectedIndex; + return elem.selected === true; }, - parent: function(elem){ + + parent: function( elem ) { return !!elem.firstChild; }, - empty: function(elem){ + + empty: function( elem ) { return !elem.firstChild; }, - has: function(elem, i, match){ + + has: function( elem, i, match ) { return !!Sizzle( match[3], elem ).length; }, - header: function(elem){ - return /h\d/i.test( elem.nodeName ); + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); }, - text: function(elem){ + + text: function( elem ) { return "text" === elem.type; }, - radio: function(elem){ + radio: function( elem ) { return "radio" === elem.type; }, - checkbox: function(elem){ + + checkbox: function( elem ) { return "checkbox" === elem.type; }, - file: function(elem){ + + file: function( elem ) { return "file" === elem.type; }, - password: function(elem){ + password: function( elem ) { return "password" === elem.type; }, - submit: function(elem){ + + submit: function( elem ) { return "submit" === elem.type; }, - image: function(elem){ + + image: function( elem ) { return "image" === elem.type; }, - reset: function(elem){ + + reset: function( elem ) { return "reset" === elem.type; }, - button: function(elem){ + + button: function( elem ) { return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; }, - input: function(elem){ - return /input|select|textarea|button/i.test(elem.nodeName); + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); } }, setFilters: { - first: function(elem, i){ + first: function( elem, i ) { return i === 0; }, - last: function(elem, i, match, array){ + + last: function( elem, i, match, array ) { return i === array.length - 1; }, - even: function(elem, i){ + + even: function( elem, i ) { return i % 2 === 0; }, - odd: function(elem, i){ + + odd: function( elem, i ) { return i % 2 === 1; }, - lt: function(elem, i, match){ + + lt: function( elem, i, match ) { return i < match[3] - 0; }, - gt: function(elem, i, match){ + + gt: function( elem, i, match ) { return i > match[3] - 0; }, - nth: function(elem, i, match){ + + nth: function( elem, i, match ) { return match[3] - 0 === i; }, - eq: function(elem, i, match){ + + eq: function( elem, i, match ) { return match[3] - 0 === i; } }, filter: { - PSEUDO: function(elem, match, i, array){ - var name = match[1], filter = Expr.filters[ name ]; + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; if ( filter ) { return filter( elem, i, match, array ); + } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; + } else if ( name === "not" ) { var not = match[3]; - for ( var i = 0, l = not.length; i < l; i++ ) { - if ( not[i] === elem ) { + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { return false; } } return true; + } else { Sizzle.error( "Syntax error, unrecognized expression: " + name ); } }, - CHILD: function(elem, match){ - var type = match[1], node = elem; - switch (type) { - case 'only': - case 'first': + + CHILD: function( elem, match ) { + var type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": while ( (node = node.previousSibling) ) { if ( node.nodeType === 1 ) { return false; } } + if ( type === "first" ) { return true; } + node = elem; - case 'last': + + case "last": while ( (node = node.nextSibling) ) { if ( node.nodeType === 1 ) { return false; } } + return true; - case 'nth': - var first = match[2], last = match[3]; + + case "nth": + var first = match[2], + last = match[3]; if ( first === 1 && last === 0 ) { return true; @@ -3244,33 +3736,41 @@ var Expr = Sizzle.selectors = { if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { var count = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } } + parent.sizcache = doneName; } var diff = elem.nodeIndex - last; + if ( first === 0 ) { return diff === 0; + } else { return ( diff % first === 0 && diff / first >= 0 ); } } }, - ID: function(elem, match){ + + ID: function( elem, match ) { return elem.nodeType === 1 && elem.getAttribute("id") === match; }, - TAG: function(elem, match){ + + TAG: function( elem, match ) { return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; }, - CLASS: function(elem, match){ + + CLASS: function( elem, match ) { return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; }, - ATTR: function(elem, match){ + + ATTR: function( elem, match ) { var name = match[1], result = Expr.attrHandle[ name ] ? Expr.attrHandle[ name ]( elem ) : @@ -3301,8 +3801,10 @@ var Expr = Sizzle.selectors = { value === check || value.substr(0, check.length + 1) === check + "-" : false; }, - POS: function(elem, match, i, array){ - var name = match[2], filter = Expr.setFilters[ name ]; + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; if ( filter ) { return filter( elem, i, match, array ); @@ -3311,16 +3813,17 @@ var Expr = Sizzle.selectors = { } }; -var origPOS = Expr.match.POS; +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){ - return "\\" + (num - 0 + 1); - })); + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); } -var makeArray = function(array, results) { +var makeArray = function( array, results ) { array = Array.prototype.slice.call( array, 0 ); if ( results ) { @@ -3339,19 +3842,22 @@ try { Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; // Provide a fallback method if it does not work -} catch(e){ - makeArray = function(array, results) { - var ret = results || []; +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; if ( toString.call(array) === "[object Array]" ) { Array.prototype.push.apply( ret, array ); + } else { if ( typeof array.length === "number" ) { - for ( var i = 0, l = array.length; i < l; i++ ) { + for ( var l = array.length; i < l; i++ ) { ret.push( array[i] ); } + } else { - for ( var i = 0; array[i]; i++ ) { + for ( ; array[i]; i++ ) { ret.push( array[i] ); } } @@ -3361,62 +3867,99 @@ try { }; } -var sortOrder; +var sortOrder, siblingCheck; if ( document.documentElement.compareDocumentPosition ) { sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - if ( a == b ) { - hasDuplicate = true; - } return a.compareDocumentPosition ? -1 : 1; } - var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; + return a.compareDocumentPosition(b) & 4 ? -1 : 1; }; -} else if ( "sourceIndex" in document.documentElement ) { + +} else { sortOrder = function( a, b ) { - if ( !a.sourceIndex || !b.sourceIndex ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.sourceIndex ? -1 : 1; + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // If the nodes are siblings (or identical) we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; } - var ret = a.sourceIndex - b.sourceIndex; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} else if ( document.createRange ) { - sortOrder = function( a, b ) { - if ( !a.ownerDocument || !b.ownerDocument ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.ownerDocument ? -1 : 1; + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; } - var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); - aRange.setStart(a, 0); - aRange.setEnd(a, 0); - bRange.setStart(b, 0); - bRange.setEnd(b, 0); - var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); - if ( ret === 0 ) { - hasDuplicate = true; + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; } - return ret; + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; }; } // Utility function for retreiving the text value of an array of DOM nodes -function getText( elems ) { +Sizzle.getText = function( elems ) { var ret = "", elem; for ( var i = 0; elems[i]; i++ ) { @@ -3428,43 +3971,52 @@ function getText( elems ) { // Traverse everything else, except comment nodes } else if ( elem.nodeType !== 8 ) { - ret += getText( elem.childNodes ); + ret += Sizzle.getText( elem.childNodes ); } } return ret; -} +}; // Check to see if the browser returns elements by name when // querying by getElementById (and provide a workaround) (function(){ // We're going to inject a fake input element with a specified name var form = document.createElement("div"), - id = "script" + (new Date).getTime(); + id = "script" + (new Date()).getTime(), + root = document.documentElement; + form.innerHTML = ""; // Inject it into the root element, check its status, and remove it quickly - var root = document.documentElement; root.insertBefore( form, root.firstChild ); // The workaround has to do additional checks after a getElementById // Which slows things down for other browsers (hence the branching) if ( document.getElementById( id ) ) { - Expr.find.ID = function(match, context, isXML){ + Expr.find.ID = function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); - return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; } }; - Expr.filter.ID = function(elem, match){ + Expr.filter.ID = function( elem, match ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return elem.nodeType === 1 && node && node.nodeValue === match; }; } root.removeChild( form ); - root = form = null; // release memory in IE + + // release memory in IE + root = form = null; })(); (function(){ @@ -3477,8 +4029,8 @@ function getText( elems ) { // Make sure no comments are found if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function(match, context){ - var results = context.getElementsByTagName(match[1]); + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); // Filter out possible comments if ( match[1] === "*" ) { @@ -3499,19 +4051,25 @@ function getText( elems ) { // Check to see if an attribute returns normalized href attributes div.innerHTML = ""; + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && div.firstChild.getAttribute("href") !== "#" ) { - Expr.attrHandle.href = function(elem){ - return elem.getAttribute("href", 2); + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); }; } - div = null; // release memory in IE + // release memory in IE + div = null; })(); if ( document.querySelectorAll ) { (function(){ - var oldSizzle = Sizzle, div = document.createElement("div"); + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + div.innerHTML = "

"; // Safari can't handle uppercase or unicode characters when @@ -3520,15 +4078,42 @@ if ( document.querySelectorAll ) { return; } - Sizzle = function(query, context, extra, seed){ + Sizzle = function( query, context, extra, seed ) { context = context || document; + // Make sure that attribute selectors are quoted + query = query.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + // Only use querySelectorAll on non-XML documents // (ID selectors don't work in non-HTML documents) - if ( !seed && context.nodeType === 9 && !isXML(context) ) { - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(e){} + if ( !seed && !Sizzle.isXML(context) ) { + if ( context.nodeType === 9 ) { + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var old = context.getAttribute( "id" ), + nid = old || id; + + if ( !old ) { + context.setAttribute( "id", nid ); + } + + try { + return makeArray( context.querySelectorAll( "#" + nid + " " + query ), extra ); + + } catch(pseudoError) { + } finally { + if ( !old ) { + context.removeAttribute( "id" ); + } + } + } } return oldSizzle(query, context, extra, seed); @@ -3538,10 +4123,43 @@ if ( document.querySelectorAll ) { Sizzle[ prop ] = oldSizzle[ prop ]; } - div = null; // release memory in IE + // release memory in IE + div = null; })(); } +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector, + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + if ( matches ) { + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + return matches.call( node, expr ); + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + (function(){ var div = document.createElement("div"); @@ -3561,22 +4179,25 @@ if ( document.querySelectorAll ) { } Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function(match, context, isXML) { + Expr.find.CLASS = function( match, context, isXML ) { if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { return context.getElementsByClassName(match[1]); } }; - div = null; // release memory in IE + // release memory in IE + div = null; })(); function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; + if ( elem ) { - elem = elem[dir]; var match = false; + elem = elem[dir]; + while ( elem ) { if ( elem.sizcache === doneName ) { match = checkSet[elem.sizset]; @@ -3604,9 +4225,11 @@ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; + if ( elem ) { - elem = elem[dir]; var match = false; + + elem = elem[dir]; while ( elem ) { if ( elem.sizcache === doneName ) { @@ -3619,6 +4242,7 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { elem.sizcache = doneName; elem.sizset = i; } + if ( typeof cur !== "string" ) { if ( elem === cur ) { match = true; @@ -3639,21 +4263,34 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { } } -var contains = document.compareDocumentPosition ? function(a, b){ - return !!(a.compareDocumentPosition(b) & 16); -} : function(a, b){ - return a !== b && (a.contains ? a.contains(b) : true); -}; +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; -var isXML = function(elem){ +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; }; -var posProcess = function(selector, context){ - var tmpSet = [], later = "", match, +var posProcess = function( selector, context ) { + var match, + tmpSet = [], + later = "", root = context.nodeType ? [context] : context; // Position selectors must be done after the filter @@ -3677,53 +4314,26 @@ jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.filters; jQuery.unique = Sizzle.uniqueSort; -jQuery.text = getText; -jQuery.isXMLDoc = isXML; -jQuery.contains = contains; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; -return; - -window.Sizzle = Sizzle; })(); + + var runtil = /Until$/, rparentsprev = /^(?:parents|prevUntil|prevAll)/, // Note: This RegExp should be improved, or likely pulled from Sizzle rmultiselector = /,/, - slice = Array.prototype.slice; - -// Implement the identical functionality for filter and not -var winnow = function( elements, qualifier, keep ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -}; + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS; jQuery.fn.extend({ find: function( selector ) { - var ret = this.pushStack( "", "find", selector ), length = 0; + var ret = this.pushStack( "", "find", selector ), + length = 0; for ( var i = 0, l = this.length; i < l; i++ ) { length = ret.length; @@ -3769,11 +4379,15 @@ jQuery.fn.extend({ }, closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + if ( jQuery.isArray( selectors ) ) { - var ret = [], cur = this[0], match, matches = {}, selector; + var match, selector, + matches = {}, + level = 1; if ( cur && selectors.length ) { - for ( var i = 0, l = selectors.length; i < l; i++ ) { + for ( i = 0, l = selectors.length; i < l; i++ ) { selector = selectors[i]; if ( !matches[selector] ) { @@ -3788,29 +4402,41 @@ jQuery.fn.extend({ match = matches[selector]; if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { - ret.push({ selector: selector, elem: cur }); - delete matches[selector]; + ret.push({ selector: selector, elem: cur, level: level }); } } + cur = cur.parentNode; + level++; } } return ret; } - var pos = jQuery.expr.match.POS.test( selectors ) ? + var pos = POS.test( selectors ) ? jQuery( selectors, context || this.context ) : null; - return this.map(function( i, cur ) { - while ( cur && cur.ownerDocument && cur !== context ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { - return cur; + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context ) { + break; + } } - cur = cur.parentNode; } - return null; - }); + } + + ret = ret.length > 1 ? jQuery.unique(ret) : ret; + + return this.pushStack( ret, "closest", selectors ); }, // Determine the position of an element within @@ -3918,11 +4544,15 @@ jQuery.extend({ expr = ":not(" + expr + ")"; } - return jQuery.find.matches(expr, elems); + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); }, dir: function( elem, dir, until ) { - var matched = [], cur = elem[dir]; + var matched = [], + cur = elem[ dir ]; + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { if ( cur.nodeType === 1 ) { matched.push( cur ); @@ -3957,20 +4587,50 @@ jQuery.extend({ return r; } }); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +} + + + + var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, rleadingWhitespace = /^\s+/, - rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, - rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, rtagName = /<([\w:]+)/, rtbody = /"; - }, + rnocache = /<(?:script|object|embed|option|style)/i, + // checked="checked" or checked (html5) + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + raction = /\=([^="'>\s]+\/)>/g, wrapMap = { option: [ 1, "" ], legend: [ 1, "
", "
" ], @@ -3995,7 +4655,8 @@ jQuery.fn.extend({ text: function( text ) { if ( jQuery.isFunction(text) ) { return this.each(function(i) { - var self = jQuery(this); + var self = jQuery( this ); + self.text( text.call(this, i, self.text()) ); }); } @@ -4044,7 +4705,8 @@ jQuery.fn.extend({ } return this.each(function() { - var self = jQuery( this ), contents = self.contents(); + var self = jQuery( this ), + contents = self.contents(); if ( contents.length ) { contents.wrapAll( html ); @@ -4155,7 +4817,9 @@ jQuery.fn.extend({ // attributes in IE that are actually only stored // as properties will not be copied (such as the // the name attribute on an input). - var html = this.outerHTML, ownerDocument = this.ownerDocument; + var html = this.outerHTML, + ownerDocument = this.ownerDocument; + if ( !html ) { var div = ownerDocument.createElement("div"); div.appendChild( this.cloneNode(true) ); @@ -4164,7 +4828,7 @@ jQuery.fn.extend({ return jQuery.clean([html.replace(rinlinejQuery, "") // Handle the case in IE 8 where action=/test/> self-closes a tag - .replace(/=([^="'>\s]+\/)>/g, '="$1">') + .replace(raction, '="$1">') .replace(rleadingWhitespace, "")], ownerDocument)[0]; } else { return this.cloneNode(true); @@ -4192,7 +4856,7 @@ jQuery.fn.extend({ (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) && !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) { - value = value.replace(rxhtmlTag, fcloseTag); + value = value.replace(rxhtmlTag, "<$1>"); try { for ( var i = 0, l = this.length; i < l; i++ ) { @@ -4210,10 +4874,9 @@ jQuery.fn.extend({ } else if ( jQuery.isFunction( value ) ) { this.each(function(i){ - var self = jQuery(this), old = self.html(); - self.empty().append(function(){ - return value.call( this, i, old ); - }); + var self = jQuery( this ); + + self.html( value.call(this, i, self.html()) ); }); } else { @@ -4235,13 +4898,14 @@ jQuery.fn.extend({ } if ( typeof value !== "string" ) { - value = jQuery(value).detach(); + value = jQuery( value ).detach(); } return this.each(function() { - var next = this.nextSibling, parent = this.parentNode; + var next = this.nextSibling, + parent = this.parentNode; - jQuery(this).remove(); + jQuery( this ).remove(); if ( next ) { jQuery(next).before( value ); @@ -4259,7 +4923,9 @@ jQuery.fn.extend({ }, domManip: function( args, table, callback ) { - var results, first, value = args[0], scripts = [], fragment, parent; + var results, first, fragment, parent, + value = args[0], + scripts = []; // We can't cloneNode fragments that contain checked, in WebKit if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) { @@ -4284,7 +4950,7 @@ jQuery.fn.extend({ results = { fragment: parent }; } else { - results = buildFragment( args, this, scripts ); + results = jQuery.buildFragment( args, this, scripts ); } fragment = results.fragment; @@ -4316,16 +4982,16 @@ jQuery.fn.extend({ } return this; - - function root( elem, cur ) { - return jQuery.nodeName(elem, "table") ? - (elem.getElementsByTagName("tbody")[0] || - elem.appendChild(elem.ownerDocument.createElement("tbody"))) : - elem; - } } }); +function root( elem, cur ) { + return jQuery.nodeName(elem, "table") ? + (elem.getElementsByTagName("tbody")[0] || + elem.appendChild(elem.ownerDocument.createElement("tbody"))) : + elem; +} + function cloneCopyEvent(orig, ret) { var i = 0; @@ -4334,7 +5000,9 @@ function cloneCopyEvent(orig, ret) { return; } - var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events; + var oldData = jQuery.data( orig[i++] ), + curData = jQuery.data( this, oldData ), + events = oldData && oldData.events; if ( events ) { delete curData.handle; @@ -4349,7 +5017,7 @@ function cloneCopyEvent(orig, ret) { }); } -function buildFragment( args, nodes, scripts ) { +jQuery.buildFragment = function( args, nodes, scripts ) { var fragment, cacheable, cacheresults, doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document); @@ -4379,7 +5047,7 @@ function buildFragment( args, nodes, scripts ) { } return { fragment: fragment, cacheable: cacheable }; -} +}; jQuery.fragments = {}; @@ -4391,7 +5059,8 @@ jQuery.each({ replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { - var ret = [], insert = jQuery( selector ), + var ret = [], + insert = jQuery( selector ), parent = this.length === 1 && this[0].parentNode; if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) { @@ -4401,7 +5070,7 @@ jQuery.each({ } else { for ( var i = 0, l = insert.length; i < l; i++ ) { var elems = (i > 0 ? this.clone(true) : this).get(); - jQuery.fn[ original ].apply( jQuery(insert[i]), elems ); + jQuery( insert[i] )[ original ]( elems ); ret = ret.concat( elems ); } @@ -4436,7 +5105,7 @@ jQuery.extend({ } else if ( typeof elem === "string" ) { // Fix "XHTML"-style tags in all browsers - elem = elem.replace(rxhtmlTag, fcloseTag); + elem = elem.replace(rxhtmlTag, "<$1>"); // Trim whitespace, otherwise indexOf won't work as expected var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(), @@ -4489,7 +5158,7 @@ jQuery.extend({ } if ( fragment ) { - for ( var i = 0; ret[i]; i++ ) { + for ( i = 0; ret[i]; i++ ) { if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); @@ -4511,18 +5180,22 @@ jQuery.extend({ deleteExpando = jQuery.support.deleteExpando; for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + continue; + } + id = elem[ jQuery.expando ]; if ( id ) { data = cache[ id ]; - if ( data.events ) { + if ( data && data.events ) { for ( var type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); } else { - removeEvent( elem, type, data.handle ); + jQuery.removeEvent( elem, type, data.handle ); } } } @@ -4539,198 +5212,152 @@ jQuery.extend({ } } }); -// exclude the following css properties to add px -var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, - ralpha = /alpha\([^)]*\)/, + +function evalScript( i, elem ) { + if ( elem.src ) { + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } +} + + + + +var ralpha = /alpha\([^)]*\)/i, ropacity = /opacity=([^)]*)/, - rfloat = /float/i, rdashAlpha = /-([a-z])/ig, rupper = /([A-Z])/g, rnumpx = /^-?\d+(?:px)?$/i, rnum = /^-?\d/, - cssShow = { position: "absolute", visibility: "hidden", display:"block" }, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssWidth = [ "Left", "Right" ], cssHeight = [ "Top", "Bottom" ], + curCSS, + + getComputedStyle, + currentStyle, - // cache check for defaultView.getComputedStyle - getComputedStyle = document.defaultView && document.defaultView.getComputedStyle, - // normalize float css property - styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat", fcamelCase = function( all, letter ) { return letter.toUpperCase(); }; jQuery.fn.css = function( name, value ) { - return access( this, name, value, true, function( elem, name, value ) { - if ( value === undefined ) { - return jQuery.curCSS( elem, name ); - } - - if ( typeof value === "number" && !rexclude.test(name) ) { - value += "px"; - } + // Setting 'undefined' is a no-op + if ( arguments.length === 2 && value === undefined ) { + return this; + } - jQuery.style( elem, name, value ); + return jQuery.access( this, name, value, true, function( elem, name, value ) { + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); }); }; jQuery.extend({ - style: function( elem, name, value ) { - // don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity", "opacity" ); + return ret === "" ? "1" : ret; - // ignore negative width and height values #1599 - if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) { - value = undefined; - } - - var style = elem.style || elem, set = value !== undefined; - - // IE uses filters for opacity - if ( !jQuery.support.opacity && name === "opacity" ) { - if ( set ) { - // IE has trouble with opacity if it does not have layout - // Force it by setting the zoom level - style.zoom = 1; - - // Set the alpha filter to set the opacity - var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"; - var filter = style.filter || jQuery.curCSS( elem, "filter" ) || ""; - style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity; - } - - return style.filter && style.filter.indexOf("opacity=") >= 0 ? - (parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "": - ""; - } - - // Make sure we're using the right name for getting the float value - if ( rfloat.test( name ) ) { - name = styleFloat; - } - - name = name.replace(rdashAlpha, fcamelCase); - - if ( set ) { - style[ name ] = value; - } - - return style[ name ]; - }, - - css: function( elem, name, force, extra ) { - if ( name === "width" || name === "height" ) { - var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight; - - function getWH() { - val = name === "width" ? elem.offsetWidth : elem.offsetHeight; - - if ( extra === "border" ) { - return; + } else { + return elem.style.opacity; } - - jQuery.each( which, function() { - if ( !extra ) { - val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; - } - - if ( extra === "margin" ) { - val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; - } else { - val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; - } - }); } - - if ( elem.offsetWidth !== 0 ) { - getWH(); - } else { - jQuery.swap( elem, props, getWH ); - } - - return Math.max(0, Math.round(val)); } - - return jQuery.curCSS( elem, name, force ); }, - curCSS: function( elem, name, force ) { - var ret, style = elem.style, filter; + // Exclude the following css properties to add px + cssNumber: { + "zIndex": true, + "fontWeight": true, + "opacity": true, + "zoom": true, + "lineHeight": true + }, - // IE uses filters for opacity - if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) { - ret = ropacity.test(elem.currentStyle.filter || "") ? - (parseFloat(RegExp.$1) / 100) + "" : - ""; + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, - return ret === "" ? - "1" : - ret; + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; } - // Make sure we're using the right name for getting the float value - if ( rfloat.test( name ) ) { - name = styleFloat; + // Make sure that we're working with the right name + var ret, origName = jQuery.camelCase( name ), + style = elem.style, hooks = jQuery.cssHooks[ origName ]; + + name = jQuery.cssProps[ origName ] || origName; + + // Check if we're setting a value + if ( value !== undefined ) { + // Make sure that NaN and null values aren't set. See: #7116 + if ( typeof value === "number" && isNaN( value ) || value == null ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( typeof value === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; } + }, - if ( !force && style && style[ name ] ) { - ret = style[ name ]; + css: function( elem, name, extra ) { + // Make sure that we're working with the right name + var ret, origName = jQuery.camelCase( name ), + hooks = jQuery.cssHooks[ origName ]; - } else if ( getComputedStyle ) { + name = jQuery.cssProps[ origName ] || origName; - // Only "float" is needed here - if ( rfloat.test( name ) ) { - name = "float"; - } + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) { + return ret; - name = name.replace( rupper, "-$1" ).toLowerCase(); - - var defaultView = elem.ownerDocument.defaultView; - - if ( !defaultView ) { - return null; - } - - var computedStyle = defaultView.getComputedStyle( elem, null ); - - if ( computedStyle ) { - ret = computedStyle.getPropertyValue( name ); - } - - // We should always get a number back from opacity - if ( name === "opacity" && ret === "" ) { - ret = "1"; - } - - } else if ( elem.currentStyle ) { - var camelCase = name.replace(rdashAlpha, fcamelCase); - - ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - if ( !rnumpx.test( ret ) && rnum.test( ret ) ) { - // Remember the original values - var left = style.left, rsLeft = elem.runtimeStyle.left; - - // Put in the new values to get a computed value out - elem.runtimeStyle.left = elem.currentStyle.left; - style.left = camelCase === "fontSize" ? "1em" : (ret || 0); - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - elem.runtimeStyle.left = rsLeft; - } + // Otherwise, if a way to get the computed value exists, use that + } else if ( curCSS ) { + return curCSS( elem, name, origName ); } - - return ret; }, // A method for quickly swapping in/out CSS properties to get correct calculations @@ -4746,45 +5373,218 @@ jQuery.extend({ callback.call( elem ); // Revert the old values - for ( var name in options ) { + for ( name in options ) { elem.style[ name ] = old[ name ]; } + }, + + camelCase: function( string ) { + return string.replace( rdashAlpha, fcamelCase ); } }); +// DEPRECATED, Use jQuery.css() instead +jQuery.curCSS = jQuery.css; + +jQuery.each(["height", "width"], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + var val; + + if ( computed ) { + if ( elem.offsetWidth !== 0 ) { + val = getWH( elem, name, extra ); + + } else { + jQuery.swap( elem, cssShow, function() { + val = getWH( elem, name, extra ); + }); + } + + if ( val <= 0 ) { + val = curCSS( elem, name, name ); + + if ( val === "0px" && currentStyle ) { + val = currentStyle( elem, name, name ); + } + + if ( val != null ) { + // Should return "auto" instead of 0, use 0 for + // temporary backwards-compat + return val === "" || val === "auto" ? "0px" : val; + } + } + + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + + // Should return "auto" instead of 0, use 0 for + // temporary backwards-compat + return val === "" || val === "auto" ? "0px" : val; + } + + return typeof val === "string" ? val : val + "px"; + } + }, + + set: function( elem, value ) { + if ( rnumpx.test( value ) ) { + // ignore negative width and height values #1599 + value = parseFloat(value); + + if ( value >= 0 ) { + return value + "px"; + } + + } else { + return value; + } + } + }; +}); + +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ? + (parseFloat(RegExp.$1) / 100) + "" : + computed ? "1" : ""; + }, + + set: function( elem, value ) { + var style = elem.style; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // Set the alpha filter to set the opacity + var opacity = jQuery.isNaN(value) ? + "" : + "alpha(opacity=" + value * 100 + ")", + filter = style.filter || ""; + + style.filter = ralpha.test(filter) ? + filter.replace(ralpha, opacity) : + style.filter + ' ' + opacity; + } + }; +} + +if ( document.defaultView && document.defaultView.getComputedStyle ) { + getComputedStyle = function( elem, newName, name ) { + var ret, defaultView, computedStyle; + + name = name.replace( rupper, "-$1" ).toLowerCase(); + + if ( !(defaultView = elem.ownerDocument.defaultView) ) { + return undefined; + } + + if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) { + ret = computedStyle.getPropertyValue( name ); + if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) { + ret = jQuery.style( elem, name ); + } + } + + return ret; + }; +} + +if ( document.documentElement.currentStyle ) { + currentStyle = function( elem, name ) { + var left, rsLeft, + ret = elem.currentStyle && elem.currentStyle[ name ], + style = elem.style; + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + if ( !rnumpx.test( ret ) && rnum.test( ret ) ) { + // Remember the original values + left = style.left; + rsLeft = elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + elem.runtimeStyle.left = elem.currentStyle.left; + style.left = name === "fontSize" ? "1em" : (ret || 0); + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + elem.runtimeStyle.left = rsLeft; + } + + return ret === "" ? "auto" : ret; + }; +} + +curCSS = getComputedStyle || currentStyle; + +function getWH( elem, name, extra ) { + var which = name === "width" ? cssWidth : cssHeight, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight; + + if ( extra === "border" ) { + return val; + } + + jQuery.each( which, function() { + if ( !extra ) { + val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0; + } + + if ( extra === "margin" ) { + val += parseFloat(jQuery.css( elem, "margin" + this )) || 0; + + } else { + val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0; + } + }); + + return val; +} + if ( jQuery.expr && jQuery.expr.filters ) { jQuery.expr.filters.hidden = function( elem ) { - var width = elem.offsetWidth, height = elem.offsetHeight, - skip = elem.nodeName.toLowerCase() === "tr"; + var width = elem.offsetWidth, + height = elem.offsetHeight; - return width === 0 && height === 0 && !skip ? - true : - width > 0 && height > 0 && !skip ? - false : - jQuery.curCSS(elem, "display") === "none"; + return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none"); }; jQuery.expr.filters.visible = function( elem ) { return !jQuery.expr.filters.hidden( elem ); }; } -var jsc = now(), - rscript = //gi, - rselectTextarea = /select|textarea/i, - rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i, - jsre = /=\?(&|$)/, + + + + +var jsc = jQuery.now(), + rscript = /)<[^<]*)*<\/script>/gi, + rselectTextarea = /^(?:select|textarea)/i, + rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + rnoContent = /^(?:GET|HEAD)$/, + rbracket = /\[\]$/, + jsre = /\=\?(&|$)/, rquery = /\?/, - rts = /(\?|&)_=.*?(&|$)/, + rts = /([?&])_=[^&]*/, rurl = /^(\w+:)?\/\/([^\/?#]+)/, r20 = /%20/g, + rhash = /#.*$/, // Keep a copy of the old load method _load = jQuery.fn.load; jQuery.fn.extend({ load: function( url, params, callback ) { - if ( typeof url !== "string" ) { - return _load.call( this, url ); + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); // Don't do a request if no elements are being requested } else if ( !this.length ) { @@ -4829,7 +5629,7 @@ jQuery.fn.extend({ // See if a selector was specified self.html( selector ? // Create a dummy div to hold the results - jQuery("
") + jQuery("
") // inject the contents of the document in, removing the scripts // to avoid any 'Permission Denied' errors in IE .append(res.responseText.replace(rscript, "")) @@ -4853,6 +5653,7 @@ jQuery.fn.extend({ serialize: function() { return jQuery.param(this.serializeArray()); }, + serializeArray: function() { return this.map(function() { return this.elements ? jQuery.makeArray(this.elements) : this; @@ -4884,7 +5685,6 @@ jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".sp }); jQuery.extend({ - get: function( url, data, callback, type ) { // shift arguments if data argument was omited if ( jQuery.isFunction( data ) ) { @@ -4945,19 +5745,10 @@ jQuery.extend({ password: null, traditional: false, */ - // Create the request object; Microsoft failed to properly - // implement the XMLHttpRequest in IE7 (can't request local files), - // so we use the ActiveXObject when it is available // This function can be overriden by calling jQuery.ajaxSetup - xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ? - function() { - return new window.XMLHttpRequest(); - } : - function() { - try { - return new window.ActiveXObject("Microsoft.XMLHTTP"); - } catch(e) {} - }, + xhr: function() { + return new window.XMLHttpRequest(); + }, accepts: { xml: "application/xml, text/xml", html: "text/html", @@ -4968,16 +5759,14 @@ jQuery.extend({ } }, - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - ajax: function( origSettings ) { - var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings); - - var jsonp, status, data, - callbackContext = origSettings && origSettings.context || s, - type = s.type.toUpperCase(); + var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings), + jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type); + + s.url = s.url.replace( rhash, "" ); + + // Use original (not extended) context object if it was provided + s.context = origSettings && origSettings.context != null ? origSettings.context : s; // convert data if not already a string if ( s.data && s.processData && typeof s.data !== "string" ) { @@ -5012,17 +5801,25 @@ jQuery.extend({ s.dataType = "script"; // Handle JSONP-style loading - window[ jsonp ] = window[ jsonp ] || function( tmp ) { + var customJsonp = window[ jsonp ]; + + window[ jsonp ] = function( tmp ) { + if ( jQuery.isFunction( customJsonp ) ) { + customJsonp( tmp ); + + } else { + // Garbage collect + window[ jsonp ] = undefined; + + try { + delete window[ jsonp ]; + } catch( jsonpError ) {} + } + data = tmp; - success(); - complete(); - // Garbage collect - window[ jsonp ] = undefined; - - try { - delete window[ jsonp ]; - } catch(e) {} - + jQuery.handleSuccess( s, xhr, status, data ); + jQuery.handleComplete( s, xhr, status, data ); + if ( head ) { head.removeChild( script ); } @@ -5033,39 +5830,39 @@ jQuery.extend({ s.cache = false; } - if ( s.cache === false && type === "GET" ) { - var ts = now(); + if ( s.cache === false && noContent ) { + var ts = jQuery.now(); // try replacing _= if it is there - var ret = s.url.replace(rts, "$1_=" + ts + "$2"); + var ret = s.url.replace(rts, "$1_=" + ts); // if nothing was replaced, add timestamp to the end s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : ""); } - // If data is available, append data to url for get requests - if ( s.data && type === "GET" ) { + // If data is available, append data to url for GET/HEAD requests + if ( s.data && noContent ) { s.url += (rquery.test(s.url) ? "&" : "?") + s.data; } // Watch for a new set of requests - if ( s.global && ! jQuery.active++ ) { + if ( s.global && jQuery.active++ === 0 ) { jQuery.event.trigger( "ajaxStart" ); } // Matches an absolute URL, and saves the domain var parts = rurl.exec( s.url ), - remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host); + remote = parts && (parts[1] && parts[1].toLowerCase() !== location.protocol || parts[2].toLowerCase() !== location.host); // If we're requesting a remote document // and trying to load JSON or Script with a GET if ( s.dataType === "script" && type === "GET" && remote ) { var head = document.getElementsByTagName("head")[0] || document.documentElement; var script = document.createElement("script"); - script.src = s.url; if ( s.scriptCharset ) { script.charset = s.scriptCharset; } + script.src = s.url; // Handle Script loading if ( !jsonp ) { @@ -5076,8 +5873,8 @@ jQuery.extend({ if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) { done = true; - success(); - complete(); + jQuery.handleSuccess( s, xhr, status, data ); + jQuery.handleComplete( s, xhr, status, data ); // Handle memory leak in IE script.onload = script.onreadystatechange = null; @@ -5115,8 +5912,8 @@ jQuery.extend({ // Need an extra try/catch for cross domain requests in Firefox 3 try { - // Set the correct header, if data is being sent - if ( s.data || origSettings && origSettings.contentType ) { + // Set content-type if data specified and content-body is valid for this type + if ( (s.data != null && !noContent) || (origSettings && origSettings.contentType) ) { xhr.setRequestHeader("Content-Type", s.contentType); } @@ -5139,14 +5936,14 @@ jQuery.extend({ // Set the Accepts header for the server, depending on the dataType xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ? - s.accepts[ s.dataType ] + ", */*" : + s.accepts[ s.dataType ] + ", */*; q=0.01" : s.accepts._default ); - } catch(e) {} + } catch( headerError ) {} // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) { + if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false ) { // Handle the global AJAX counter - if ( s.global && ! --jQuery.active ) { + if ( s.global && jQuery.active-- === 1 ) { jQuery.event.trigger( "ajaxStop" ); } @@ -5156,7 +5953,7 @@ jQuery.extend({ } if ( s.global ) { - trigger("ajaxSend", [xhr, s]); + jQuery.triggerGlobal( s, "ajaxSend", [xhr, s] ); } // Wait for a response to come back @@ -5166,7 +5963,7 @@ jQuery.extend({ // Opera doesn't call onreadystatechange before this point // so we simulate the call if ( !requestDone ) { - complete(); + jQuery.handleComplete( s, xhr, status, data ); } requestDone = true; @@ -5194,9 +5991,9 @@ jQuery.extend({ try { // process the data (runs the xml through httpData regardless of callback) data = jQuery.httpData( xhr, s.dataType, s ); - } catch(err) { + } catch( parserError ) { status = "parsererror"; - errMsg = err; + errMsg = parserError; } } @@ -5204,14 +6001,16 @@ jQuery.extend({ if ( status === "success" || status === "notmodified" ) { // JSONP handles its own success callback if ( !jsonp ) { - success(); + jQuery.handleSuccess( s, xhr, status, data ); } } else { - jQuery.handleError(s, xhr, status, errMsg); + jQuery.handleError( s, xhr, status, errMsg ); } // Fire the complete handlers - complete(); + if ( !jsonp ) { + jQuery.handleComplete( s, xhr, status, data ); + } if ( isTimeout === "timeout" ) { xhr.abort(); @@ -5224,18 +6023,21 @@ jQuery.extend({ } }; - // Override the abort handler, if we can (IE doesn't allow it, but that's OK) + // Override the abort handler, if we can (IE 6 doesn't allow it, but that's OK) // Opera doesn't fire onreadystatechange at all on abort try { var oldAbort = xhr.abort; xhr.abort = function() { if ( xhr ) { - oldAbort.call( xhr ); + // oldAbort has no call property in IE7 so + // just do it this way, which works in all + // browsers + Function.prototype.call.call( oldAbort, xhr ); } onreadystatechange( "abort" ); }; - } catch(e) { } + } catch( abortError ) {} // Timeout checker if ( s.async && s.timeout > 0 ) { @@ -5249,11 +6051,13 @@ jQuery.extend({ // Send the data try { - xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null ); - } catch(e) { - jQuery.handleError(s, xhr, null, e); + xhr.send( noContent || s.data == null ? null : s.data ); + + } catch( sendError ) { + jQuery.handleError( s, xhr, null, sendError ); + // Fire the complete handlers - complete(); + jQuery.handleComplete( s, xhr, status, data ); } // firefox 1.5 doesn't fire statechange for sync requests @@ -5261,66 +6065,145 @@ jQuery.extend({ onreadystatechange(); } - function success() { - // If a local callback was specified, fire it and pass it the data - if ( s.success ) { - s.success.call( callbackContext, data, status, xhr ); - } - - // Fire the global callback - if ( s.global ) { - trigger( "ajaxSuccess", [xhr, s] ); - } - } - - function complete() { - // Process result - if ( s.complete ) { - s.complete.call( callbackContext, xhr, status); - } - - // The request was completed - if ( s.global ) { - trigger( "ajaxComplete", [xhr, s] ); - } - - // Handle the global AJAX counter - if ( s.global && ! --jQuery.active ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - - function trigger(type, args) { - (s.context ? jQuery(s.context) : jQuery.event).trigger(type, args); - } - // return XMLHttpRequest to allow aborting the request etc. return xhr; }, + // Serialize an array of form elements or a set of + // key/values into a query string + param: function( a, traditional ) { + var s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction(value) ? value() : value; + s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray(a) || a.jquery ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( var prefix in a ) { + buildParams( prefix, a[prefix], traditional, add ); + } + } + + // Return the resulting serialization + return s.join("&").replace(r20, "+"); + } +}); + +function buildParams( prefix, obj, traditional, add ) { + if ( jQuery.isArray(obj) && obj.length ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // If array item is non-scalar (array or object), encode its + // numeric index to resolve deserialization ambiguity issues. + // Note that rack (as of 1.0.0) can't currently deserialize + // nested arrays properly, and attempting to do so may cause + // a server error. Possible fixes are to modify rack's + // deserialization algorithm or to provide an option or flag + // to force array serialization to be shallow. + buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && obj != null && typeof obj === "object" ) { + if ( jQuery.isEmptyObject( obj ) ) { + add( prefix, "" ); + + // Serialize object item. + } else { + jQuery.each( obj, function( k, v ) { + buildParams( prefix + "[" + k + "]", v, traditional, add ); + }); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} + +// This is still on the jQuery object... for now +// Want to move this to jQuery.ajax some day +jQuery.extend({ + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + handleError: function( s, xhr, status, e ) { // If a local callback was specified, fire it if ( s.error ) { - s.error.call( s.context || s, xhr, status, e ); + s.error.call( s.context, xhr, status, e ); } // Fire the global callback if ( s.global ) { - (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] ); + jQuery.triggerGlobal( s, "ajaxError", [xhr, s, e] ); } }, - // Counter for holding the number of active queries - active: 0, + handleSuccess: function( s, xhr, status, data ) { + // If a local callback was specified, fire it and pass it the data + if ( s.success ) { + s.success.call( s.context, data, status, xhr ); + } + + // Fire the global callback + if ( s.global ) { + jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] ); + } + }, + + handleComplete: function( s, xhr, status ) { + // Process result + if ( s.complete ) { + s.complete.call( s.context, xhr, status ); + } + + // The request was completed + if ( s.global ) { + jQuery.triggerGlobal( s, "ajaxComplete", [xhr, s] ); + } + + // Handle the global AJAX counter + if ( s.global && jQuery.active-- === 1 ) { + jQuery.event.trigger( "ajaxStop" ); + } + }, + + triggerGlobal: function( s, type, args ) { + (s.context && s.context.url == null ? jQuery(s.context) : jQuery.event).trigger(type, args); + }, // Determines if an XMLHttpRequest was successful or not httpSuccess: function( xhr ) { try { // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 return !xhr.status && location.protocol === "file:" || - // Opera returns 0 when status is 304 - ( xhr.status >= 200 && xhr.status < 300 ) || - xhr.status === 304 || xhr.status === 1223 || xhr.status === 0; + xhr.status >= 200 && xhr.status < 300 || + xhr.status === 304 || xhr.status === 1223; } catch(e) {} return false; @@ -5339,8 +6222,7 @@ jQuery.extend({ jQuery.etag[url] = etag; } - // Opera returns 0 when status is 304 - return xhr.status === 304 || xhr.status === 0; + return xhr.status === 304; }, httpData: function( xhr, type, s ) { @@ -5371,77 +6253,40 @@ jQuery.extend({ } return data; - }, - - // Serialize an array of form elements or a set of - // key/values into a query string - param: function( a, traditional ) { - var s = []; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray(a) || a.jquery ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( var prefix in a ) { - buildParams( prefix, a[prefix] ); - } - } - - // Return the resulting serialization - return s.join("&").replace(r20, "+"); - - function buildParams( prefix, obj ) { - if ( jQuery.isArray(obj) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || /\[\]$/.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - } else { - // If array item is non-scalar (array or object), encode its - // numeric index to resolve deserialization ambiguity issues. - // Note that rack (as of 1.0.0) can't currently deserialize - // nested arrays properly, and attempting to do so may cause - // a server error. Possible fixes are to modify rack's - // deserialization algorithm or to provide an option or flag - // to force array serialization to be shallow. - buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v ); - } - }); - - } else if ( !traditional && obj != null && typeof obj === "object" ) { - // Serialize object item. - jQuery.each( obj, function( k, v ) { - buildParams( prefix + "[" + k + "]", v ); - }); - - } else { - // Serialize scalar item. - add( prefix, obj ); - } - } - - function add( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction(value) ? value() : value; - s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value); - } } + }); + +/* + * Create the request object; Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ +if ( window.ActiveXObject ) { + jQuery.ajaxSettings.xhr = function() { + if ( window.location.protocol !== "file:" ) { + try { + return new window.XMLHttpRequest(); + } catch(xhrError) {} + } + + try { + return new window.ActiveXObject("Microsoft.XMLHTTP"); + } catch(activeError) {} + }; +} + +// Does this browser support XHR requests? +jQuery.support.ajax = !!jQuery.ajaxSettings.xhr(); + + + + var elemdisplay = {}, - rfxtypes = /toggle|show|hide/, - rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = /^([+\-]=)?([\d+.\-]+)(.*)$/, timerId, fxAttrs = [ // height animations @@ -5453,66 +6298,63 @@ var elemdisplay = {}, ]; jQuery.fn.extend({ - show: function( speed, callback ) { - if ( speed || speed === 0) { - return this.animate( genFx("show", 3), speed, callback); + show: function( speed, easing, callback ) { + var elem, display; + + if ( speed || speed === 0 ) { + return this.animate( genFx("show", 3), speed, easing, callback); } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - var old = jQuery.data(this[i], "olddisplay"); + for ( var i = 0, j = this.length; i < j; i++ ) { + elem = this[i]; + display = elem.style.display; - this[i].style.display = old || ""; + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !jQuery.data(elem, "olddisplay") && display === "none" ) { + display = elem.style.display = ""; + } - if ( jQuery.css(this[i], "display") === "none" ) { - var nodeName = this[i].nodeName, display; - - if ( elemdisplay[ nodeName ] ) { - display = elemdisplay[ nodeName ]; - - } else { - var elem = jQuery("<" + nodeName + " />").appendTo("body"); - - display = elem.css("display"); - - if ( display === "none" ) { - display = "block"; - } - - elem.remove(); - - elemdisplay[ nodeName ] = display; - } - - jQuery.data(this[i], "olddisplay", display); + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( display === "" && jQuery.css( elem, "display" ) === "none" ) { + jQuery.data(elem, "olddisplay", defaultDisplay(elem.nodeName)); } } - // Set the display of the elements in a second loop + // Set the display of most of the elements in a second loop // to avoid the constant reflow - for ( var j = 0, k = this.length; j < k; j++ ) { - this[j].style.display = jQuery.data(this[j], "olddisplay") || ""; + for ( i = 0; i < j; i++ ) { + elem = this[i]; + display = elem.style.display; + + if ( display === "" || display === "none" ) { + elem.style.display = jQuery.data(elem, "olddisplay") || ""; + } } return this; } }, - hide: function( speed, callback ) { + hide: function( speed, easing, callback ) { if ( speed || speed === 0 ) { - return this.animate( genFx("hide", 3), speed, callback); + return this.animate( genFx("hide", 3), speed, easing, callback); } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - var old = jQuery.data(this[i], "olddisplay"); - if ( !old && old !== "none" ) { - jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display")); + for ( var i = 0, j = this.length; i < j; i++ ) { + var display = jQuery.css( this[i], "display" ); + + if ( display !== "none" ) { + jQuery.data( this[i], "olddisplay", display ); } } // Set the display of the elements in a second loop // to avoid the constant reflow - for ( var j = 0, k = this.length; j < k; j++ ) { - this[j].style.display = "none"; + for ( i = 0; i < j; i++ ) { + this[i].style.display = "none"; } return this; @@ -5522,7 +6364,7 @@ jQuery.fn.extend({ // Save the old toggle function _toggle: jQuery.fn.toggle, - toggle: function( fn, fn2 ) { + toggle: function( fn, fn2, callback ) { var bool = typeof fn === "boolean"; if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) { @@ -5535,15 +6377,15 @@ jQuery.fn.extend({ }); } else { - this.animate(genFx("toggle", 3), fn, fn2); + this.animate(genFx("toggle", 3), fn, fn2, callback); } return this; }, - fadeTo: function( speed, to, callback ) { + fadeTo: function( speed, to, easing, callback ) { return this.filter(":hidden").css("opacity", 0).show().end() - .animate({opacity: to}, speed, callback); + .animate({opacity: to}, speed, easing, callback); }, animate: function( prop, speed, easing, callback ) { @@ -5554,12 +6396,16 @@ jQuery.fn.extend({ } return this[ optall.queue === false ? "each" : "queue" ](function() { + // XXX 'this' does not always have a nodeName when running the + // test suite + var opt = jQuery.extend({}, optall), p, - hidden = this.nodeType === 1 && jQuery(this).is(":hidden"), + isElement = this.nodeType === 1, + hidden = isElement && jQuery(this).is(":hidden"), self = this; for ( p in prop ) { - var name = p.replace(rdashAlpha, fcamelCase); + var name = jQuery.camelCase( p ); if ( p !== name ) { prop[ name ] = prop[ p ]; @@ -5571,12 +6417,35 @@ jQuery.fn.extend({ return opt.complete.call(this); } - if ( ( p === "height" || p === "width" ) && this.style ) { - // Store display property - opt.display = jQuery.css(this, "display"); - + if ( isElement && ( p === "height" || p === "width" ) ) { // Make sure that nothing sneaks out - opt.overflow = this.style.overflow; + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height + // animated + if ( jQuery.css( this, "display" ) === "inline" && + jQuery.css( this, "float" ) === "none" ) { + if ( !jQuery.support.inlineBlockNeedsLayout ) { + this.style.display = "inline-block"; + + } else { + var display = defaultDisplay(this.nodeName); + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( display === "inline" ) { + this.style.display = "inline-block"; + + } else { + this.style.display = "inline"; + this.style.zoom = 1; + } + } + } } if ( jQuery.isArray( prop[p] ) ) { @@ -5600,7 +6469,7 @@ jQuery.fn.extend({ } else { var parts = rfxnum.exec(val), - start = e.cur(true) || 0; + start = e.cur() || 0; if ( parts ) { var end = parseFloat( parts[2] ), @@ -5608,9 +6477,9 @@ jQuery.fn.extend({ // We need to compute starting value if ( unit !== "px" ) { - self.style[ name ] = (end || 1) + unit; - start = ((end || 1) / e.cur(true)) * start; - self.style[ name ] = start + unit; + jQuery.style( self, name, (end || 1) + unit); + start = ((end || 1) / e.cur()) * start; + jQuery.style( self, name, start + unit); } // If a +=/-= token was provided, we're doing a relative animation @@ -5662,22 +6531,33 @@ jQuery.fn.extend({ }); +function genFx( type, num ) { + var obj = {}; + + jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() { + obj[ this ] = type; + }); + + return obj; +} + // Generate shortcuts for custom animations jQuery.each({ slideDown: genFx("show", 1), slideUp: genFx("hide", 1), slideToggle: genFx("toggle", 1), fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" } + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } }, function( name, props ) { - jQuery.fn[ name ] = function( speed, callback ) { - return this.animate( props, speed, callback ); + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); }; }); jQuery.extend({ speed: function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? speed : { + var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : { complete: fn || !fn && easing || jQuery.isFunction( speed ) && speed, duration: speed, @@ -5685,7 +6565,7 @@ jQuery.extend({ }; opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default; + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default; // Queueing opt.old = opt.complete; @@ -5732,33 +6612,30 @@ jQuery.fx.prototype = { } (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this ); - - // Set display property to block for height/width animations - if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) { - this.elem.style.display = "block"; - } }, // Get the current size - cur: function( force ) { + cur: function() { if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) { return this.elem[ this.prop ]; } - var r = parseFloat(jQuery.css(this.elem, this.prop, force)); - return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0; + var r = parseFloat( jQuery.css( this.elem, this.prop ) ); + return r && r > -10000 ? r : 0; }, // Start an animation from one number to another custom: function( from, to, unit ) { - this.startTime = now(); + var self = this, + fx = jQuery.fx; + + this.startTime = jQuery.now(); this.start = from; this.end = to; this.unit = unit || this.unit || "px"; this.now = this.start; this.pos = this.state = 0; - var self = this; function t( gotoEnd ) { return self.step(gotoEnd); } @@ -5766,7 +6643,7 @@ jQuery.fx.prototype = { t.elem = this.elem; if ( t() && jQuery.timers.push(t) && !timerId ) { - timerId = setInterval(jQuery.fx.tick, 13); + timerId = setInterval(fx.tick, fx.interval); } }, @@ -5797,7 +6674,7 @@ jQuery.fx.prototype = { // Each step of an animation step: function( gotoEnd ) { - var t = now(), done = true; + var t = jQuery.now(), done = true; if ( gotoEnd || t >= this.options.duration + this.startTime ) { this.now = this.end; @@ -5813,17 +6690,14 @@ jQuery.fx.prototype = { } if ( done ) { - if ( this.options.display != null ) { - // Reset the overflow - this.elem.style.overflow = this.options.overflow; + // Reset the overflow + if ( this.options.overflow != null && !jQuery.support.shrinkWrapBlocks ) { + var elem = this.elem, + options = this.options; - // Reset the display - var old = jQuery.data(this.elem, "olddisplay"); - this.elem.style.display = old ? old : this.options.display; - - if ( jQuery.css(this.elem, "display") === "none" ) { - this.elem.style.display = "block"; - } + jQuery.each( [ "", "X", "Y" ], function (index, value) { + elem.style[ "overflow" + value ] = options.overflow[index]; + } ); } // Hide the element if the "hide" operation was done @@ -5834,7 +6708,7 @@ jQuery.fx.prototype = { // Reset the properties, if the item has been hidden or shown if ( this.options.hide || this.options.show ) { for ( var p in this.options.curAnim ) { - jQuery.style(this.elem, p, this.options.orig[p]); + jQuery.style( this.elem, p, this.options.orig[p] ); } } @@ -5876,22 +6750,24 @@ jQuery.extend( jQuery.fx, { jQuery.fx.stop(); } }, - + + interval: 13, + stop: function() { clearInterval( timerId ); timerId = null; }, - + speeds: { slow: 600, - fast: 200, - // Default speed - _default: 400 + fast: 200, + // Default speed + _default: 400 }, step: { opacity: function( fx ) { - jQuery.style(fx.elem, "opacity", fx.now); + jQuery.style( fx.elem, "opacity", fx.now ); }, _default: function( fx ) { @@ -5912,18 +6788,32 @@ if ( jQuery.expr && jQuery.expr.filters ) { }; } -function genFx( type, num ) { - var obj = {}; +function defaultDisplay( nodeName ) { + if ( !elemdisplay[ nodeName ] ) { + var elem = jQuery("<" + nodeName + ">").appendTo("body"), + display = elem.css("display"); - jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() { - obj[ this ] = type; - }); + elem.remove(); - return obj; + if ( display === "none" || display === "" ) { + display = "block"; + } + + elemdisplay[ nodeName ] = display; + } + + return elemdisplay[ nodeName ]; } + + + + +var rtable = /^t(?:able|d|h)$/i, + rroot = /^(?:body|html)$/i; + if ( "getBoundingClientRect" in document.documentElement ) { jQuery.fn.offset = function( options ) { - var elem = this[0]; + var elem = this[0], box; if ( options ) { return this.each(function( i ) { @@ -5939,10 +6829,26 @@ if ( "getBoundingClientRect" in document.documentElement ) { return jQuery.offset.bodyOffset( elem ); } - var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement, - clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, - top = box.top + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop, - left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft; + try { + box = elem.getBoundingClientRect(); + } catch(e) {} + + var doc = elem.ownerDocument, + docElem = doc.documentElement; + + // Make sure we're not dealing with a disconnected DOM node + if ( !box || !jQuery.contains( docElem, elem ) ) { + return box || { top: 0, left: 0 }; + } + + var body = doc.body, + win = getWindow(doc), + clientTop = docElem.clientTop || body.clientTop || 0, + clientLeft = docElem.clientLeft || body.clientLeft || 0, + scrollTop = (win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ), + scrollLeft = (win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft), + top = box.top + scrollTop - clientTop, + left = box.left + scrollLeft - clientLeft; return { top: top, left: left }; }; @@ -5967,11 +6873,16 @@ if ( "getBoundingClientRect" in document.documentElement ) { jQuery.offset.initialize(); - var offsetParent = elem.offsetParent, prevOffsetParent = elem, - doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement, - body = doc.body, defaultView = doc.defaultView, + var computedStyle, + offsetParent = elem.offsetParent, + prevOffsetParent = elem, + doc = elem.ownerDocument, + docElem = doc.documentElement, + body = doc.body, + defaultView = doc.defaultView, prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle, - top = elem.offsetTop, left = elem.offsetLeft; + top = elem.offsetTop, + left = elem.offsetLeft; while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) { if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) { @@ -5986,12 +6897,13 @@ if ( "getBoundingClientRect" in document.documentElement ) { top += elem.offsetTop; left += elem.offsetLeft; - if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) { + if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) { top += parseFloat( computedStyle.borderTopWidth ) || 0; left += parseFloat( computedStyle.borderLeftWidth ) || 0; } - prevOffsetParent = offsetParent, offsetParent = elem.offsetParent; + prevOffsetParent = offsetParent; + offsetParent = elem.offsetParent; } if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) { @@ -6018,7 +6930,7 @@ if ( "getBoundingClientRect" in document.documentElement ) { jQuery.offset = { initialize: function() { - var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0, + var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0, html = "
"; jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } ); @@ -6032,12 +6944,16 @@ jQuery.offset = { this.doesNotAddBorder = (checkDiv.offsetTop !== 5); this.doesAddBorderForTableAndCells = (td.offsetTop === 5); - checkDiv.style.position = "fixed", checkDiv.style.top = "20px"; + checkDiv.style.position = "fixed"; + checkDiv.style.top = "20px"; + // safari subtracts parent border width here which is 5px this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15); checkDiv.style.position = checkDiv.style.top = ""; - innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative"; + innerDiv.style.overflow = "hidden"; + innerDiv.style.position = "relative"; + this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5); this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop); @@ -6048,36 +6964,52 @@ jQuery.offset = { }, bodyOffset: function( body ) { - var top = body.offsetTop, left = body.offsetLeft; + var top = body.offsetTop, + left = body.offsetLeft; jQuery.offset.initialize(); if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) { - top += parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0; - left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0; + top += parseFloat( jQuery.css(body, "marginTop") ) || 0; + left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; } return { top: top, left: left }; }, setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); + // set position first, in-case top/left are set even on static elem - if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) { + if ( position === "static" ) { elem.style.position = "relative"; } - var curElem = jQuery( elem ), + + var curElem = jQuery( elem ), curOffset = curElem.offset(), - curTop = parseInt( jQuery.curCSS( elem, "top", true ), 10 ) || 0, - curLeft = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0; + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = (position === "absolute" && jQuery.inArray('auto', [curCSSTop, curCSSLeft]) > -1), + props = {}, curPosition = {}, curTop, curLeft; + + // need to be able to calculate position if either top or left is auto and position is absolute + if ( calculatePosition ) { + curPosition = curElem.position(); + } + + curTop = calculatePosition ? curPosition.top : parseInt( curCSSTop, 10 ) || 0; + curLeft = calculatePosition ? curPosition.left : parseInt( curCSSLeft, 10 ) || 0; if ( jQuery.isFunction( options ) ) { options = options.call( elem, i, curOffset ); } - var props = { - top: (options.top - curOffset.top) + curTop, - left: (options.left - curOffset.left) + curLeft - }; + if (options.top != null) { + props.top = (options.top - curOffset.top) + curTop; + } + if (options.left != null) { + props.left = (options.left - curOffset.left) + curLeft; + } if ( "using" in options ) { options.using.call( elem, props ); @@ -6101,17 +7033,17 @@ jQuery.fn.extend({ // Get correct offsets offset = this.offset(), - parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); // Subtract element margins // note: when an element has margin: auto the offsetLeft and marginLeft // are the same in Safari causing offset.left to incorrectly be 0 - offset.top -= parseFloat( jQuery.curCSS(elem, "marginTop", true) ) || 0; - offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0; + offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; + offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; // Add offsetParent borders - parentOffset.top += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth", true) ) || 0; - parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0; + parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; + parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; // Subtract the two offsets return { @@ -6123,7 +7055,7 @@ jQuery.fn.extend({ offsetParent: function() { return this.map(function() { var offsetParent = this.offsetParent || document.body; - while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { + while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { offsetParent = offsetParent.offsetParent; } return offsetParent; @@ -6171,12 +7103,16 @@ jQuery.each( ["Left", "Top"], function( i, name ) { }); function getWindow( elem ) { - return ("scrollTo" in elem && elem.document) ? + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 ? elem.defaultView || elem.parentWindow : false; } + + + + // Create innerHeight, innerWidth, outerHeight and outerWidth methods jQuery.each([ "Height", "Width" ], function( i, name ) { @@ -6185,14 +7121,14 @@ jQuery.each([ "Height", "Width" ], function( i, name ) { // innerHeight and innerWidth jQuery.fn["inner" + name] = function() { return this[0] ? - jQuery.css( this[0], type, false, "padding" ) : + parseFloat( jQuery.css( this[0], type, "padding" ) ) : null; }; // outerHeight and outerWidth jQuery.fn["outer" + name] = function( margin ) { return this[0] ? - jQuery.css( this[0], type, false, margin ? "margin" : "border" ) : + parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) : null; }; @@ -6210,32 +7146,34 @@ jQuery.each([ "Height", "Width" ], function( i, name ) { }); } - return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window? + if ( jQuery.isWindow( elem ) ) { // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode - elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] || - elem.document.body[ "client" + name ] : + return elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] || + elem.document.body[ "client" + name ]; - // Get document width or height - (elem.nodeType === 9) ? // is it a document - // Either scroll[Width/Height] or offset[Width/Height], whichever is greater - Math.max( - elem.documentElement["client" + name], - elem.body["scroll" + name], elem.documentElement["scroll" + name], - elem.body["offset" + name], elem.documentElement["offset" + name] - ) : + // Get document width or height + } else if ( elem.nodeType === 9 ) { + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater + return Math.max( + elem.documentElement["client" + name], + elem.body["scroll" + name], elem.documentElement["scroll" + name], + elem.body["offset" + name], elem.documentElement["offset" + name] + ); - // Get or set width or height on the element - size === undefined ? - // Get width or height on the element - jQuery.css( elem, type ) : + // Get or set width or height on the element + } else if ( size === undefined ) { + var orig = jQuery.css( elem, type ), + ret = parseFloat( orig ); - // Set the width or height on the element (default to pixels if value is unitless) - this.css( type, typeof size === "string" ? size : size + "px" ); + return jQuery.isNaN( ret ) ? orig : ret; + + // Set the width or height on the element (default to pixels if value is unitless) + } else { + return this.css( type, typeof size === "string" ? size : size + "px" ); + } }; }); -// Expose jQuery to the global object -window.jQuery = window.$ = jQuery; + })(window); - diff --git a/js/jquery.min.js b/js/jquery.min.js index b170a78f8f..8f3ca2e2da 100644 --- a/js/jquery.min.js +++ b/js/jquery.min.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v1.4.2 + * jQuery JavaScript Library v1.4.4 * http://jquery.com/ * * Copyright 2010, John Resig @@ -11,145 +11,157 @@ * Copyright 2010, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Sat Feb 13 22:33:48 2010 -0500 + * Date: Thu Nov 11 19:04:53 2010 -0500 */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h= +h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;kd)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La, +"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this, +e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a, +"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+ +a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/, +C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j, +s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this, +j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length}, +toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j=== +-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false; +if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload", +b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&& +!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&& +l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H
a";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"), +k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false, +scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent= +false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom= +1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="
";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="
t
";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display= +"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h= +c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando); +else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one"; +if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true}, +attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&& +b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0}; +c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem, +arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid= +d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+ +c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType=== +8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k=== +"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+ +d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired= +B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type=== +"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]=== +0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}}); +(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3]; +break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr, +q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h= +l;g.sort(w);if(h)for(var i=1;i0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n, +m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled=== +true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"=== +g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return in[3]-0},nth:function(g,i,n){return n[3]- +0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()=== +i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]]; +if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m, +g);else if(typeof g.length==="number")for(var p=g.length;n";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g); +n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&& +function(){var g=k,i=t.createElement("div");i.innerHTML="

";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F|| +p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g= +t.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition? +function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n0)for(var h=d;h0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h= +h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context): +c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a, +2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a, +b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&& +e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/\s]+\/)>/g,P={option:[1, +""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); - +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null; +else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1>");try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append", +prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument|| +b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]===""&&!x?r.childNodes:[];for(o=k.length- +1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script")))); +d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i, +jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true, +zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b), +h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b); +if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f= +d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left; +e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/)<[^<]*)*<\/script>/gi, +ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b=== +"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("
").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&& +!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})}, +getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html", +script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data|| +!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache= +false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset; +A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type", +b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&& +c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d|| +c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]= +encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess", +[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"), +e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}}); +if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show", +3),a,b,d);else{d=0;for(var e=this.length;d=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b, +d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a* +Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)} +var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true; +this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide|| +this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a= +c.timers,b=0;b-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a, +e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&& +c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase(); +c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+ +b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window); From da4f8d465ffdf9833c495699eff966810b522c5d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 17 Nov 2010 12:16:50 -0500 Subject: [PATCH 118/220] Use minified version of util.js --- js/util.min.js | 1 + lib/action.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 js/util.min.js diff --git a/js/util.min.js b/js/util.min.js new file mode 100644 index 0000000000..0b9dee8f07 --- /dev/null +++ b/js/util.min.js @@ -0,0 +1 @@ +var SN={C:{I:{CounterBlackout:false,MaxLength:140,PatternUsername:/^[0-9a-zA-Z\-_.]*$/,HTTP20x30x:[200,201,202,203,204,205,206,300,301,302,303,304,305,306,307]},S:{Disabled:"disabled",Warning:"warning",Error:"error",Success:"success",Processing:"processing",CommandResult:"command_result",FormNotice:"form_notice",NoticeDataText:"notice_data-text",NoticeTextCount:"notice_text-count",NoticeInReplyTo:"notice_in-reply-to",NoticeDataAttach:"notice_data-attach",NoticeDataAttachSelected:"notice_data-attach_selected",NoticeActionSubmit:"notice_action-submit",NoticeLat:"notice_data-lat",NoticeLon:"notice_data-lon",NoticeLocationId:"notice_data-location_id",NoticeLocationNs:"notice_data-location_ns",NoticeGeoName:"notice_data-geo_name",NoticeDataGeo:"notice_data-geo",NoticeDataGeoCookie:"NoticeDataGeo",NoticeDataGeoSelected:"notice_data-geo_selected",StatusNetInstance:"StatusNetInstance"}},messages:{},msg:function(a){if(typeof SN.messages[a]=="undefined"){return"["+a+"]"}else{return SN.messages[a]}},U:{FormNoticeEnhancements:function(a){if(jQuery.data(a[0],"ElementData")===undefined){MaxLength=a.find("#"+SN.C.S.NoticeTextCount).text();if(typeof(MaxLength)=="undefined"){MaxLength=SN.C.I.MaxLength}jQuery.data(a[0],"ElementData",{MaxLength:MaxLength});SN.U.Counter(a);NDT=a.find("#"+SN.C.S.NoticeDataText);NDT.bind("keyup",function(b){SN.U.Counter(a)});NDT.bind("keydown",function(b){SN.U.SubmitOnReturn(b,a)})}else{a.find("#"+SN.C.S.NoticeTextCount).text(jQuery.data(a[0],"ElementData").MaxLength)}if($("body")[0].id!="conversation"&&window.location.hash.length===0&&$(window).scrollTop()==0){a.find("textarea").focus()}},SubmitOnReturn:function(b,a){if(b.keyCode==13||b.keyCode==10){a.submit();b.preventDefault();b.stopPropagation();$("#"+a[0].id+" #"+SN.C.S.NoticeDataText).blur();$("body").focus();return false}return true},Counter:function(d){SN.C.I.FormNoticeCurrent=d;var b=jQuery.data(d[0],"ElementData").MaxLength;if(b<=0){return}var c=b-SN.U.CharacterCount(d);var a=d.find("#"+SN.C.S.NoticeTextCount);if(c.toString()!=a.text()){if(!SN.C.I.CounterBlackout||c===0){if(a.text()!=String(c)){a.text(c)}if(c<0){d.addClass(SN.C.S.Warning)}else{d.removeClass(SN.C.S.Warning)}if(!SN.C.I.CounterBlackout){SN.C.I.CounterBlackout=true;SN.C.I.FormNoticeCurrent=d;window.setTimeout("SN.U.ClearCounterBlackout(SN.C.I.FormNoticeCurrent);",500)}}}},CharacterCount:function(a){return a.find("#"+SN.C.S.NoticeDataText).val().length},ClearCounterBlackout:function(a){SN.C.I.CounterBlackout=false;SN.U.Counter(a)},FormXHR:function(a){$.ajax({type:"POST",dataType:"xml",url:a.attr("action"),data:a.serialize()+"&ajax=1",beforeSend:function(b){a.addClass(SN.C.S.Processing).find(".submit").addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled)},error:function(c,d,b){alert(b||d)},success:function(b,c){if(typeof($("form",b)[0])!="undefined"){form_new=document._importNode($("form",b)[0],true);a.replaceWith(form_new)}else{a.replaceWith(document._importNode($("p",b)[0],true))}}})},FormNoticeXHR:function(a){SN.C.I.NoticeDataGeo={};a.append('');a.ajaxForm({dataType:"xml",timeout:"60000",beforeSend:function(b){if(a.find("#"+SN.C.S.NoticeDataText)[0].value.length===0){a.addClass(SN.C.S.Warning);return false}a.addClass(SN.C.S.Processing).find("#"+SN.C.S.NoticeActionSubmit).addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled);SN.C.I.NoticeDataGeo.NLat=$("#"+SN.C.S.NoticeLat).val();SN.C.I.NoticeDataGeo.NLon=$("#"+SN.C.S.NoticeLon).val();SN.C.I.NoticeDataGeo.NLNS=$("#"+SN.C.S.NoticeLocationNs).val();SN.C.I.NoticeDataGeo.NLID=$("#"+SN.C.S.NoticeLocationId).val();SN.C.I.NoticeDataGeo.NDG=$("#"+SN.C.S.NoticeDataGeo).attr("checked");cookieValue=$.cookie(SN.C.S.NoticeDataGeoCookie);if(cookieValue!==null&&cookieValue!="disabled"){cookieValue=JSON.parse(cookieValue);SN.C.I.NoticeDataGeo.NLat=$("#"+SN.C.S.NoticeLat).val(cookieValue.NLat).val();SN.C.I.NoticeDataGeo.NLon=$("#"+SN.C.S.NoticeLon).val(cookieValue.NLon).val();if($("#"+SN.C.S.NoticeLocationNs).val(cookieValue.NLNS)){SN.C.I.NoticeDataGeo.NLNS=$("#"+SN.C.S.NoticeLocationNs).val(cookieValue.NLNS).val();SN.C.I.NoticeDataGeo.NLID=$("#"+SN.C.S.NoticeLocationId).val(cookieValue.NLID).val()}}if(cookieValue=="disabled"){SN.C.I.NoticeDataGeo.NDG=$("#"+SN.C.S.NoticeDataGeo).attr("checked",false).attr("checked")}else{SN.C.I.NoticeDataGeo.NDG=$("#"+SN.C.S.NoticeDataGeo).attr("checked",true).attr("checked")}return true},error:function(c,d,b){a.removeClass(SN.C.S.Processing).find("#"+SN.C.S.NoticeActionSubmit).removeClass(SN.C.S.Disabled).removeAttr(SN.C.S.Disabled,SN.C.S.Disabled);a.find(".form_response").remove();if(d=="timeout"){a.append('

Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.

')}else{if($("."+SN.C.S.Error,c.responseXML).length>0){a.append(document._importNode($("."+SN.C.S.Error,c.responseXML)[0],true))}else{if(parseInt(c.status)===0||jQuery.inArray(parseInt(c.status),SN.C.I.HTTP20x30x)>=0){a.resetForm().find("#"+SN.C.S.NoticeDataAttachSelected).remove();SN.U.FormNoticeEnhancements(a)}else{a.append('

(Sorry! We had trouble sending your notice ('+c.status+" "+c.statusText+"). Please report the problem to the site administrator if this happens again.

")}}}},success:function(f,h){a.find(".form_response").remove();var b;if($("#"+SN.C.S.Error,f).length>0){b=document._importNode($("p",f)[0],true);b=b.textContent||b.innerHTML;a.append('

'+b+"

")}else{if($("body")[0].id=="bookmarklet"){self.close()}if($("#"+SN.C.S.CommandResult,f).length>0){b=document._importNode($("p",f)[0],true);b=b.textContent||b.innerHTML;a.append('

'+b+"

")}else{var e=document._importNode($("li",f)[0],true);var g=$("#notices_primary .notices");if(g.length>0&&SN.U.belongsOnTimeline(e)){if($("#"+e.id).length===0){var c=$("#"+SN.C.S.NoticeInReplyTo).val();var d="#notices_primary #notice-"+c;if($("body")[0].id=="conversation"){if(c.length>0&&$(d+" .notices").length<1){$(d).append('
    ')}$($(d+" .notices")[0]).append(e)}else{g.prepend(e)}$("#"+e.id).css({display:"none"}).fadeIn(2500);SN.U.NoticeWithAttachment($("#"+e.id));SN.U.NoticeReplyTo($("#"+e.id))}}else{b=document._importNode($("title",f)[0],true);result_title=b.textContent||b.innerHTML;a.append('

    '+result_title+"

    ")}}a.resetForm();a.find("#"+SN.C.S.NoticeInReplyTo).val("");a.find("#"+SN.C.S.NoticeDataAttachSelected).remove();SN.U.FormNoticeEnhancements(a)}},complete:function(b,c){a.removeClass(SN.C.S.Processing).find("#"+SN.C.S.NoticeActionSubmit).removeAttr(SN.C.S.Disabled).removeClass(SN.C.S.Disabled);$("#"+SN.C.S.NoticeLat).val(SN.C.I.NoticeDataGeo.NLat);$("#"+SN.C.S.NoticeLon).val(SN.C.I.NoticeDataGeo.NLon);if($("#"+SN.C.S.NoticeLocationNs)){$("#"+SN.C.S.NoticeLocationNs).val(SN.C.I.NoticeDataGeo.NLNS);$("#"+SN.C.S.NoticeLocationId).val(SN.C.I.NoticeDataGeo.NLID)}$("#"+SN.C.S.NoticeDataGeo).attr("checked",SN.C.I.NoticeDataGeo.NDG)}})},NoticeReply:function(){if($("#"+SN.C.S.NoticeDataText).length>0&&$("#content .notice_reply").length>0){$("#content .notice").each(function(){SN.U.NoticeReplyTo($(this))})}},NoticeReplyTo:function(a){a.find(".notice_reply").live("click",function(){var b=($(".author .nickname",a).length>0)?$($(".author .nickname",a)[0]):$(".author .nickname.uid");SN.U.NoticeReplySet(b.text(),$($(".notice_id",a)[0]).text());return false})},NoticeReplySet:function(b,d){if(b.match(SN.C.I.PatternUsername)){var c=$("#"+SN.C.S.NoticeDataText);if(c.length>0){replyto="@"+b+" ";c.val(replyto+c.val().replace(RegExp(replyto,"i"),""));$("#"+SN.C.S.FormNotice+" #"+SN.C.S.NoticeInReplyTo).val(d);c[0].focus();if(c[0].setSelectionRange){var a=c.val().length;c[0].setSelectionRange(a,a)}}}},NoticeFavor:function(){$(".form_favor").live("click",function(){SN.U.FormXHR($(this));return false});$(".form_disfavor").live("click",function(){SN.U.FormXHR($(this));return false})},NoticeRepeat:function(){$(".form_repeat").live("click",function(a){a.preventDefault();SN.U.NoticeRepeatConfirmation($(this));return false})},NoticeRepeatConfirmation:function(a){var c=a.find(".submit");var b=c.clone();b.addClass("submit_dialogbox").removeClass("submit");a.append(b);b.bind("click",function(){SN.U.FormXHR(a);return false});c.hide();a.addClass("dialogbox").append('').closest(".notice-options").addClass("opaque");a.find("button.close").click(function(){$(this).remove();a.removeClass("dialogbox").closest(".notice-options").removeClass("opaque");a.find(".submit_dialogbox").remove();a.find(".submit").show();return false})},NoticeAttachments:function(){$(".notice a.attachment").each(function(){SN.U.NoticeWithAttachment($(this).closest(".notice"))})},NoticeWithAttachment:function(b){if(b.find(".attachment").length===0){return}var a=b.find(".attachment.more");if(a.length>0){$(a[0]).click(function(){var c=$(this);c.addClass(SN.C.S.Processing);$.get(c.attr("href")+"/ajax",null,function(d){c.parent(".entry-content").html($(d).find("#attachment_view .entry-content").html())});return false}).attr("title",SN.msg("showmore_tooltip"))}},NoticeDataAttach:function(){NDA=$("#"+SN.C.S.NoticeDataAttach);NDA.change(function(){S='
    '+$(this).val()+'
    ';NDAS=$("#"+SN.C.S.NoticeDataAttachSelected);if(NDAS.length>0){NDAS.replaceWith(S)}else{$("#"+SN.C.S.FormNotice).append(S)}$("#"+SN.C.S.NoticeDataAttachSelected+" button").click(function(){$("#"+SN.C.S.NoticeDataAttachSelected).remove();NDA.val("");return false})})},NoticeLocationAttach:function(){var c=$("#"+SN.C.S.NoticeLat).val();var h=$("#"+SN.C.S.NoticeLon).val();var d=$("#"+SN.C.S.NoticeLocationNs).val();var i=$("#"+SN.C.S.NoticeLocationId).val();var a=$("#"+SN.C.S.NoticeGeoName).text();var b=$("#"+SN.C.S.NoticeDataGeo);function e(){$("label[for="+SN.C.S.NoticeDataGeo+"]").attr("title",jQuery.trim($("label[for="+SN.C.S.NoticeDataGeo+"]").text())).removeClass("checked");$("#"+SN.C.S.NoticeLat).val("");$("#"+SN.C.S.NoticeLon).val("");$("#"+SN.C.S.NoticeLocationNs).val("");$("#"+SN.C.S.NoticeLocationId).val("");$("#"+SN.C.S.NoticeDataGeo).attr("checked",false);$.cookie(SN.C.S.NoticeDataGeoCookie,"disabled",{path:"/"})}function j(k,l){$.getJSON(k,l,function(m){var n,o;if(typeof(m.location_ns)!="undefined"){$("#"+SN.C.S.NoticeLocationNs).val(m.location_ns);n=m.location_ns}if(typeof(m.location_id)!="undefined"){$("#"+SN.C.S.NoticeLocationId).val(m.location_id);o=m.location_id}if(typeof(m.name)=="undefined"){NLN_text=l.lat+";"+l.lon}else{NLN_text=m.name}$("label[for="+SN.C.S.NoticeDataGeo+"]").attr("title",NoticeDataGeo_text.ShareDisable+" ("+NLN_text+")");$("#"+SN.C.S.NoticeLat).val(l.lat);$("#"+SN.C.S.NoticeLon).val(l.lon);$("#"+SN.C.S.NoticeLocationNs).val(n);$("#"+SN.C.S.NoticeLocationId).val(o);$("#"+SN.C.S.NoticeDataGeo).attr("checked",true);var p={NLat:l.lat,NLon:l.lon,NLNS:n,NLID:o,NLN:NLN_text,NLNU:m.url,NDG:true};$.cookie(SN.C.S.NoticeDataGeoCookie,JSON.stringify(p),{path:"/"})})}if(b.length>0){if($.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){b.attr("checked",false)}else{b.attr("checked",true)}var f=$("#notice_data-geo_wrap");var g=f.attr("title");f.removeAttr("title");$("label[for="+SN.C.S.NoticeDataGeo+"]").attr("title",jQuery.trim($("label[for="+SN.C.S.NoticeDataGeo+"]").text()));b.change(function(){if($("#"+SN.C.S.NoticeDataGeo).attr("checked")===true||$.cookie(SN.C.S.NoticeDataGeoCookie)===null){$("label[for="+SN.C.S.NoticeDataGeo+"]").attr("title",NoticeDataGeo_text.ShareDisable).addClass("checked");if($.cookie(SN.C.S.NoticeDataGeoCookie)===null||$.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){if(navigator.geolocation){navigator.geolocation.getCurrentPosition(function(m){$("#"+SN.C.S.NoticeLat).val(m.coords.latitude);$("#"+SN.C.S.NoticeLon).val(m.coords.longitude);var n={lat:m.coords.latitude,lon:m.coords.longitude,token:$("#token").val()};j(g,n)},function(m){switch(m.code){case m.PERMISSION_DENIED:e();break;case m.TIMEOUT:$("#"+SN.C.S.NoticeDataGeo).attr("checked",false);break}},{timeout:10000})}else{if(c.length>0&&h.length>0){var k={lat:c,lon:h,token:$("#token").val()};j(g,k)}else{e();$("#"+SN.C.S.NoticeDataGeo).remove();$("label[for="+SN.C.S.NoticeDataGeo+"]").remove()}}}else{var l=JSON.parse($.cookie(SN.C.S.NoticeDataGeoCookie));$("#"+SN.C.S.NoticeLat).val(l.NLat);$("#"+SN.C.S.NoticeLon).val(l.NLon);$("#"+SN.C.S.NoticeLocationNs).val(l.NLNS);$("#"+SN.C.S.NoticeLocationId).val(l.NLID);$("#"+SN.C.S.NoticeDataGeo).attr("checked",l.NDG);$("label[for="+SN.C.S.NoticeDataGeo+"]").attr("title",NoticeDataGeo_text.ShareDisable+" ("+l.NLN+")").addClass("checked")}}else{e()}}).change()}},NewDirectMessage:function(){NDM=$(".entity_send-a-message a");NDM.attr({href:NDM.attr("href")+"&ajax=1"});NDM.bind("click",function(){var a=$(".entity_send-a-message form");if(a.length===0){$(this).addClass(SN.C.S.Processing);$.get(NDM.attr("href"),null,function(b){$(".entity_send-a-message").append(document._importNode($("form",b)[0],true));a=$(".entity_send-a-message .form_notice");SN.U.FormNoticeXHR(a);SN.U.FormNoticeEnhancements(a);a.append('');$(".entity_send-a-message button").click(function(){a.hide();return false});NDM.removeClass(SN.C.S.Processing)})}else{a.show();$(".entity_send-a-message textarea").focus()}return false})},GetFullYear:function(c,d,a){var b=new Date();b.setFullYear(c,d,a);return b},StatusNetInstance:{Set:function(b){var a=SN.U.StatusNetInstance.Get();if(a!==null){b=$.extend(a,b)}$.cookie(SN.C.S.StatusNetInstance,JSON.stringify(b),{path:"/",expires:SN.U.GetFullYear(2029,0,1)})},Get:function(){var a=$.cookie(SN.C.S.StatusNetInstance);if(a!==null){return JSON.parse(a)}return null},Delete:function(){$.cookie(SN.C.S.StatusNetInstance,null)}},belongsOnTimeline:function(b){var a=$("body").attr("id");if(a=="public"){return true}var c=$("#nav_profile a").attr("href");if(c){var d=$(b).find(".entry-title .author a.url").attr("href");if(d==c){if(a=="all"||a=="showstream"){return true}}}return false}},Init:{NoticeForm:function(){if($("body.user_in").length>0){SN.U.NoticeLocationAttach();$("."+SN.C.S.FormNotice).each(function(){SN.U.FormNoticeXHR($(this));SN.U.FormNoticeEnhancements($(this))});SN.U.NoticeDataAttach()}},Notices:function(){if($("body.user_in").length>0){SN.U.NoticeFavor();SN.U.NoticeRepeat();SN.U.NoticeReply()}SN.U.NoticeAttachments()},EntityActions:function(){if($("body.user_in").length>0){$(".form_user_subscribe").live("click",function(){SN.U.FormXHR($(this));return false});$(".form_user_unsubscribe").live("click",function(){SN.U.FormXHR($(this));return false});$(".form_group_join").live("click",function(){SN.U.FormXHR($(this));return false});$(".form_group_leave").live("click",function(){SN.U.FormXHR($(this));return false});$(".form_user_nudge").live("click",function(){SN.U.FormXHR($(this));return false});SN.U.NewDirectMessage()}},Login:function(){if(SN.U.StatusNetInstance.Get()!==null){var a=SN.U.StatusNetInstance.Get().Nickname;if(a!==null){$("#form_login #nickname").val(a)}}$("#form_login").bind("submit",function(){SN.U.StatusNetInstance.Set({Nickname:$("#form_login #nickname").val()});return true})}}};$(document).ready(function(){if($("."+SN.C.S.FormNotice).length>0){SN.Init.NoticeForm()}if($("#content .notices").length>0){SN.Init.Notices()}if($("#content .entity_actions").length>0){SN.Init.EntityActions()}if($("#form_login").length>0){SN.Init.Login()}});if(!document.ELEMENT_NODE){document.ELEMENT_NODE=1;document.ATTRIBUTE_NODE=2;document.TEXT_NODE=3;document.CDATA_SECTION_NODE=4;document.ENTITY_REFERENCE_NODE=5;document.ENTITY_NODE=6;document.PROCESSING_INSTRUCTION_NODE=7;document.COMMENT_NODE=8;document.DOCUMENT_NODE=9;document.DOCUMENT_TYPE_NODE=10;document.DOCUMENT_FRAGMENT_NODE=11;document.NOTATION_NODE=12}document._importNode=function(e,a){switch(e.nodeType){case document.ELEMENT_NODE:var d=document.createElement(e.nodeName);if(e.attributes&&e.attributes.length>0){for(var c=0,b=e.attributes.length;c0){for(var c=0,b=e.childNodes.length;c0){var j=c.pop();j()}}};window._google_loader_apiLoaded=function(){f()};var d=function(){return(window.google&&google.loader)};var g=function(j){if(d()){return true}h(j);e();return false};e();return{shim:true,type:"ClientLocation",lastPosition:null,getCurrentPosition:function(k,n,o){var m=this;if(!g(function(){m.getCurrentPosition(k,n,o)})){return}if(google.loader.ClientLocation){var l=google.loader.ClientLocation;var j={coords:{latitude:l.latitude,longitude:l.longitude,altitude:null,accuracy:43000,altitudeAccuracy:null,heading:null,speed:null},address:{city:l.address.city,country:l.address.country,country_code:l.address.country_code,region:l.address.region},timestamp:new Date()};k(j);this.lastPosition=j}else{if(n==="function"){n({code:3,message:"Using the Google ClientLocation API and it is not able to calculate a location."})}}},watchPosition:function(j,l,m){this.getCurrentPosition(j,l,m);var k=this;var n=setInterval(function(){k.getCurrentPosition(j,l,m)},10000);return n},clearWatch:function(j){clearInterval(j)},getPermission:function(l,j,k){return true}}});navigator.geolocation=(window.google&&google.gears)?a():b()})()}; \ No newline at end of file diff --git a/lib/action.php b/lib/action.php index 17d3e2311a..318c3063e0 100644 --- a/lib/action.php +++ b/lib/action.php @@ -282,7 +282,7 @@ class Action extends HTMLOutputter // lawsuit } if (Event::handle('StartShowStatusNetScripts', array($this)) && Event::handle('StartShowLaconicaScripts', array($this))) { - $this->script('util.js'); + $this->script('util.min.js'); $this->showScriptMessages(); // Frame-busting code to avoid clickjacking attacks. $this->inlineScript('if (window.top !== window.self) { window.top.location.href = window.self.location.href; }'); From bacc3d2a74ca09e0287ca7b14f2bb746810311da Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 17 Nov 2010 12:19:01 -0500 Subject: [PATCH 119/220] move EndScriptMessages event into if block --- lib/action.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/action.php b/lib/action.php index 17d3e2311a..c2285894ea 100644 --- a/lib/action.php +++ b/lib/action.php @@ -300,9 +300,11 @@ class Action extends HTMLOutputter // lawsuit * events and appending to the array. Try to avoid adding strings that won't be used, as * they'll be added to HTML output. */ + function showScriptMessages() { $messages = array(); + if (Event::handle('StartScriptMessages', array($this, &$messages))) { // Common messages needed for timeline views etc... @@ -310,11 +312,14 @@ class Action extends HTMLOutputter // lawsuit $messages['showmore_tooltip'] = _m('TOOLTIP', 'Show more'); $messages = array_merge($messages, $this->getScriptMessages()); + + Event::handle('EndScriptMessages', array($this, &$messages)); } - Event::handle('EndScriptMessages', array($this, &$messages)); - if ($messages) { + + if (!empty($messages)) { $this->inlineScript('SN.messages=' . json_encode($messages)); } + return $messages; } From 83f6bb9da1c91e0f464c1a665d01c4d5d1bfed09 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 17 Nov 2010 12:21:01 -0500 Subject: [PATCH 120/220] use minified version of realtime.js --- plugins/Realtime/RealtimePlugin.php | 2 +- plugins/Realtime/realtimeupdate.min.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 plugins/Realtime/realtimeupdate.min.js diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php index 99d1ff9c10..113187e1e3 100644 --- a/plugins/Realtime/RealtimePlugin.php +++ b/plugins/Realtime/RealtimePlugin.php @@ -322,7 +322,7 @@ class RealtimePlugin extends Plugin function _getScripts() { - return array('plugins/Realtime/realtimeupdate.js'); + return array('plugins/Realtime/realtimeupdate.min.js'); } /** diff --git a/plugins/Realtime/realtimeupdate.min.js b/plugins/Realtime/realtimeupdate.min.js new file mode 100644 index 0000000000..a06c03c4e2 --- /dev/null +++ b/plugins/Realtime/realtimeupdate.min.js @@ -0,0 +1 @@ +RealtimeUpdate={_userid:0,_replyurl:"",_favorurl:"",_repeaturl:"",_deleteurl:"",_updatecounter:0,_maxnotices:50,_windowhasfocus:true,_documenttitle:"",_paused:false,_queuedNotices:[],init:function(c,b,d,e,a){RealtimeUpdate._userid=c;RealtimeUpdate._replyurl=b;RealtimeUpdate._favorurl=d;RealtimeUpdate._repeaturl=e;RealtimeUpdate._deleteurl=a;RealtimeUpdate._documenttitle=document.title;$(window).bind("focus",function(){RealtimeUpdate._windowhasfocus=true});$(window).bind("blur",function(){$("#notices_primary .notice").removeClass("mark-top");$("#notices_primary .notice:first").addClass("mark-top");RealtimeUpdate._updatecounter=0;document.title=RealtimeUpdate._documenttitle;RealtimeUpdate._windowhasfocus=false;return false})},receive:function(a){if(RealtimeUpdate._paused===false){RealtimeUpdate.purgeLastNoticeItem();RealtimeUpdate.insertNoticeItem(a)}else{RealtimeUpdate._queuedNotices.push(a);RealtimeUpdate.updateQueuedCounter()}RealtimeUpdate.updateWindowCounter()},insertNoticeItem:function(a){if($("#notice-"+a.id).length>0){return}var b=RealtimeUpdate.makeNoticeItem(a);var c=$(b).attr("id");$("#notices_primary .notices").prepend(b);$("#notices_primary .notice:first").css({display:"none"});$("#notices_primary .notice:first").fadeIn(1000);SN.U.NoticeReplyTo($("#"+c));SN.U.NoticeWithAttachment($("#"+c))},purgeLastNoticeItem:function(){if($("#notices_primary .notice").length>RealtimeUpdate._maxnotices){$("#notices_primary .notice:last").remove()}},updateWindowCounter:function(){if(RealtimeUpdate._windowhasfocus===false){RealtimeUpdate._updatecounter+=1;document.title="("+RealtimeUpdate._updatecounter+") "+RealtimeUpdate._documenttitle}},makeNoticeItem:function(c){if(c.hasOwnProperty("retweeted_status")){original=c.retweeted_status;repeat=c;c=original;unique=repeat.id;responsible=repeat.user}else{original=null;repeat=null;unique=c.id;responsible=c.user}user=c.user;html=c.html.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&/g,"&");source=c.source.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&/g,"&");ni='
  • '+user.screen_name+''+user.screen_name+'

    '+html+'

    a few seconds ago from '+source+"";if(c.conversation_url){ni=ni+' in context'}if(repeat){ru=repeat.user;ni=ni+'Repeated by '+ru.screen_name+""}ni=ni+"
    ";ni=ni+'
    ';if(RealtimeUpdate._userid!=0){var a=$("form#form_notice fieldset input#token");var b=a.val();ni=ni+RealtimeUpdate.makeFavoriteForm(c.id,b);ni=ni+RealtimeUpdate.makeReplyLink(c.id,c.user["screen_name"]);if(RealtimeUpdate._userid==responsible.id){ni=ni+RealtimeUpdate.makeDeleteLink(c.id)}else{if(RealtimeUpdate._userid!=user.id){ni=ni+RealtimeUpdate.makeRepeatForm(c.id,b)}}}ni=ni+"
    ";ni=ni+"
  • ";return ni},makeFavoriteForm:function(c,b){var a;a='
    Favor this notice
    ';return a},makeReplyLink:function(c,a){var b;b='Reply '+c+"";return b},makeRepeatForm:function(c,b){var a;a='
    Repeat this notice?
    ';return a},makeDeleteLink:function(c){var b,a;a=RealtimeUpdate._deleteurl.replace("0000000000",c);b='Delete';return b},initActions:function(a,b,c){$("#notices_primary").prepend('
    ');RealtimeUpdate._pluginPath=c;RealtimeUpdate.initPlayPause();RealtimeUpdate.initAddPopup(a,b,RealtimeUpdate._pluginPath)},initPlayPause:function(){if(typeof(localStorage)=="undefined"){RealtimeUpdate.showPause()}else{if(localStorage.getItem("RealtimeUpdate_paused")==="true"){RealtimeUpdate.showPlay()}else{RealtimeUpdate.showPause()}}},showPause:function(){RealtimeUpdate.setPause(false);RealtimeUpdate.showQueuedNotices();RealtimeUpdate.addNoticesHover();$("#realtime_playpause").remove();$("#realtime_actions").prepend('
  • ');$("#realtime_pause").text(SN.msg("realtime_pause")).attr("title",SN.msg("realtime_pause_tooltip")).bind("click",function(){RealtimeUpdate.removeNoticesHover();RealtimeUpdate.showPlay();return false})},showPlay:function(){RealtimeUpdate.setPause(true);$("#realtime_playpause").remove();$("#realtime_actions").prepend('
  • ');$("#realtime_play").text(SN.msg("realtime_play")).attr("title",SN.msg("realtime_play_tooltip")).bind("click",function(){RealtimeUpdate.showPause();return false})},setPause:function(a){RealtimeUpdate._paused=a;if(typeof(localStorage)!="undefined"){localStorage.setItem("RealtimeUpdate_paused",RealtimeUpdate._paused)}},showQueuedNotices:function(){$.each(RealtimeUpdate._queuedNotices,function(a,b){RealtimeUpdate.insertNoticeItem(b)});RealtimeUpdate._queuedNotices=[];RealtimeUpdate.removeQueuedCounter()},updateQueuedCounter:function(){$("#realtime_playpause #queued_counter").html("("+RealtimeUpdate._queuedNotices.length+")")},removeQueuedCounter:function(){$("#realtime_playpause #queued_counter").empty()},addNoticesHover:function(){$("#notices_primary .notices").hover(function(){if(RealtimeUpdate._paused===false){RealtimeUpdate.showPlay()}},function(){if(RealtimeUpdate._paused===true){RealtimeUpdate.showPause()}})},removeNoticesHover:function(){$("#notices_primary .notices").unbind()},initAddPopup:function(a,b,c){$("#realtime_timeline").append('');$("#realtime_popup").text(SN.msg("realtime_popup")).attr("title",SN.msg("realtime_popup_tooltip")).bind("click",function(){window.open(a,"","toolbar=no,resizable=yes,scrollbars=yes,status=no,menubar=no,personalbar=no,location=no,width=500,height=550");return false})},initPopupWindow:function(){$(".notices .entry-title a, .notices .entry-content a").bind("click",function(){window.open(this.href,"");return false});$("#showstream .entity_profile").css({width:"69%"})}}; \ No newline at end of file From fae63a5161ab1ad9d2988c396d0fda00f608505d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 17 Nov 2010 12:22:02 -0500 Subject: [PATCH 121/220] use minified version of meteorupdater.js --- plugins/Meteor/MeteorPlugin.php | 2 +- plugins/Meteor/meteorupdater.min.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 plugins/Meteor/meteorupdater.min.js diff --git a/plugins/Meteor/MeteorPlugin.php b/plugins/Meteor/MeteorPlugin.php index a48c52b569..1bdccae7a8 100644 --- a/plugins/Meteor/MeteorPlugin.php +++ b/plugins/Meteor/MeteorPlugin.php @@ -89,7 +89,7 @@ class MeteorPlugin extends RealtimePlugin { $scripts = parent::_getScripts(); $scripts[] = 'http://'.$this->webserver.(($this->webport == 80) ? '':':'.$this->webport).'/meteor.js'; - $scripts[] = common_path('plugins/Meteor/meteorupdater.js'); + $scripts[] = common_path('plugins/Meteor/meteorupdater.min.js'); return $scripts; } diff --git a/plugins/Meteor/meteorupdater.min.js b/plugins/Meteor/meteorupdater.min.js new file mode 100644 index 0000000000..61928ab4f2 --- /dev/null +++ b/plugins/Meteor/meteorupdater.min.js @@ -0,0 +1 @@ +var MeteorUpdater=function(){return{init:function(c,a,b){Meteor.callbacks.process=function(d){RealtimeUpdate.receive(JSON.parse(d))};Meteor.host=c;Meteor.port=a;Meteor.joinChannel(b,0);Meteor.connect()}}}(); \ No newline at end of file From 8ee0471e9aacac5597a0a388b60d70003922d8f8 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 17 Nov 2010 12:30:55 -0500 Subject: [PATCH 122/220] upgrade jquery.form.js --- js/jquery.form.js | 1417 +++++++++++++++++++++++++-------------------- 1 file changed, 785 insertions(+), 632 deletions(-) diff --git a/js/jquery.form.js b/js/jquery.form.js index 936b847abe..2b853df428 100644 --- a/js/jquery.form.js +++ b/js/jquery.form.js @@ -1,632 +1,785 @@ -/* - * jQuery Form Plugin - * version: 2.17 (06-NOV-2008) - * @requires jQuery v1.2.2 or later - * - * Examples and documentation at: http://malsup.com/jquery/form/ - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id$ - */ -;(function($) { - -/* - Usage Note: - ----------- - Do not use both ajaxSubmit and ajaxForm on the same form. These - functions are intended to be exclusive. Use ajaxSubmit if you want - to bind your own submit handler to the form. For example, - - $(document).ready(function() { - $('#myForm').bind('submit', function() { - $(this).ajaxSubmit({ - target: '#output' - }); - return false; // <-- important! - }); - }); - - Use ajaxForm when you want the plugin to manage all the event binding - for you. For example, - - $(document).ready(function() { - $('#myForm').ajaxForm({ - target: '#output' - }); - }); - - When using ajaxForm, the ajaxSubmit function will be invoked for you - at the appropriate time. -*/ - -/** - * ajaxSubmit() provides a mechanism for immediately submitting - * an HTML form using AJAX. - */ -$.fn.ajaxSubmit = function(options) { - // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) - if (!this.length) { - log('ajaxSubmit: skipping submit process - no element selected'); - return this; - } - - if (typeof options == 'function') - options = { success: options }; - - options = $.extend({ - url: this.attr('action') || window.location.toString(), - type: this.attr('method') || 'GET' - }, options || {}); - - // hook for manipulating the form data before it is extracted; - // convenient for use with rich editors like tinyMCE or FCKEditor - var veto = {}; - this.trigger('form-pre-serialize', [this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); - return this; - } - - // provide opportunity to alter form data before it is serialized - if (options.beforeSerialize && options.beforeSerialize(this, options) === false) { - log('ajaxSubmit: submit aborted via beforeSerialize callback'); - return this; - } - - var a = this.formToArray(options.semantic); - if (options.data) { - options.extraData = options.data; - for (var n in options.data) { - if(options.data[n] instanceof Array) { - for (var k in options.data[n]) - a.push( { name: n, value: options.data[n][k] } ) - } - else - a.push( { name: n, value: options.data[n] } ); - } - } - - // give pre-submit callback an opportunity to abort the submit - if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { - log('ajaxSubmit: submit aborted via beforeSubmit callback'); - return this; - } - - // fire vetoable 'validate' event - this.trigger('form-submit-validate', [a, this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); - return this; - } - - var q = $.param(a); - - if (options.type.toUpperCase() == 'GET') { - options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; - options.data = null; // data is null for 'get' - } - else - options.data = q; // data is the query string for 'post' - - var $form = this, callbacks = []; - if (options.resetForm) callbacks.push(function() { $form.resetForm(); }); - if (options.clearForm) callbacks.push(function() { $form.clearForm(); }); - - // perform a load on the target only if dataType is not provided - if (!options.dataType && options.target) { - var oldSuccess = options.success || function(){}; - callbacks.push(function(data) { - $(options.target).html(data).each(oldSuccess, arguments); - }); - } - else if (options.success) - callbacks.push(options.success); - - options.success = function(data, status) { - for (var i=0, max=callbacks.length; i < max; i++) - callbacks[i].apply(options, [data, status, $form]); - }; - - // are there files to upload? - var files = $('input:file', this).fieldValue(); - var found = false; - for (var j=0; j < files.length; j++) - if (files[j]) - found = true; - - // options.iframe allows user to force iframe mode - if (options.iframe || found) { - // hack to fix Safari hang (thanks to Tim Molendijk for this) - // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d - if ($.browser.safari && options.closeKeepAlive) - $.get(options.closeKeepAlive, fileUpload); - else - fileUpload(); - } - else - $.ajax(options); - - // fire 'notify' event - this.trigger('form-submit-notify', [this, options]); - return this; - - - // private function for handling file uploads (hat tip to YAHOO!) - function fileUpload() { - var form = $form[0]; - - if ($(':input[name=submit]', form).length) { - alert('Error: Form elements must not be named "submit".'); - return; - } - - var opts = $.extend({}, $.ajaxSettings, options); - var s = jQuery.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts); - - var id = 'jqFormIO' + (new Date().getTime()); - var $io = $('