diff options
195 files changed, 23400 insertions, 4602 deletions
diff --git a/EVENTS.txt b/EVENTS.txt index 34a222e8f..e0516f8f4 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -574,3 +574,57 @@ EndShortenUrl: After a URL has been shortened - $shortenerName: name of the requested shortener - $shortenedUrl: short version of the url +StartCssLinkElement: Before a <link rel="stylesheet"..> element is written +- $action +- &$src +- &$theme +- &$media + +EndCssLinkElement: After a <link rel="stylesheet"..> element is written +- $action +- $src +- $theme +- $media + +StartStyleElement: Before a <style...> element is written +- $action +- &$code +- &$type +- &$media + +EndStyleElement: After a <style...> element is written +- $action +- $code +- $type +- $media + +StartScriptElement: Before a <script...> element is written +- $action +- &$src +- &$type + +EndScriptElement: After a <script...> element is written +- $action +- $src +- $type + +StartInlineScriptElement: Before a <script...> element is written +- $action +- &$code +- &$type + +EndInlineScriptElement: After a <script...> element is written +- $action +- $code +- $type + +StartLog: Before writing to the logs +- &$priority +- &$msg +- &$filename + +EndLog: After writing to the logs +- $priority +- $msg +- $filename + diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..6f45c1b83 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +# Warning: do not transform tabs to spaces in this file. + +all : translations + +core_mo = $(patsubst %.po,%.mo,$(wildcard locale/*/LC_MESSAGES/statusnet.po)) +plugin_mo = $(patsubst %.po,%.mo,$(wildcard plugins/*/locale/*/LC_MESSAGES/*.po)) + +translations : $(core_mo) $(plugin_mo) + +clean : + rm -f $(core_mo) $(plugin_mo) + +updatepo : + php scripts/update_po_templates.php --all + +%.mo : %.po + msgfmt -o $@ $< + diff --git a/actions/all.php b/actions/all.php index 61cedce74..2c96298fa 100644 --- a/actions/all.php +++ b/actions/all.php @@ -144,7 +144,7 @@ class AllAction extends ProfileAction function showContent() { - $nl = new NoticeList($this->notice, $this); + $nl = new InboxNoticeList($this->notice, $this->user, $this); $cnt = $nl->show(); @@ -160,12 +160,95 @@ class AllAction extends ProfileAction function showPageTitle() { - $user =& common_current_user(); + $user = common_current_user(); if ($user && ($user->id == $this->user->id)) { $this->element('h1', null, _("You and friends")); } else { $this->element('h1', null, sprintf(_('%s and friends'), $this->user->nickname)); } } +} + +class InboxNoticeList extends NoticeList +{ + var $owner = null; + + function __construct($notice, $owner, $out=null) + { + parent::__construct($notice, $out); + $this->owner = $owner; + } + + function newListItem($notice) + { + return new InboxNoticeListItem($notice, $this->owner, $this->out); + } +} +class InboxNoticeListItem extends NoticeListItem +{ + var $owner = null; + var $ib = null; + + function __construct($notice, $owner, $out=null) + { + parent::__construct($notice, $out); + $this->owner = $owner; + + $this->ib = Notice_inbox::pkeyGet(array('user_id' => $owner->id, + 'notice_id' => $notice->id)); + } + + function showAuthor() + { + parent::showAuthor(); + if ($this->ib->source == NOTICE_INBOX_SOURCE_FORWARD) { + $this->out->element('span', 'forward', _('Fwd')); + } + } + + function showEnd() + { + if ($this->ib->source == NOTICE_INBOX_SOURCE_FORWARD) { + + $forward = new Forward(); + + // FIXME: scary join! + + $forward->query('SELECT profile_id '. + 'FROM forward JOIN subscription ON forward.profile_id = subscription.subscribed '. + 'WHERE subscription.subscriber = ' . $this->owner->id . ' '. + 'AND forward.notice_id = ' . $this->notice->id . ' '. + 'ORDER BY forward.created '); + + $n = 0; + + $firstForwarder = null; + + while ($forward->fetch()) { + if (empty($firstForwarder)) { + $firstForwarder = Profile::staticGet('id', $forward->profile_id); + } + $n++; + } + + $forward->free(); + unset($forward); + + $this->out->elementStart('span', 'forwards'); + + $link = XMLStringer::estring('a', array('href' => $firstForwarder->profileurl), + $firstForwarder->nickname); + + if ($n == 1) { + $this->out->raw(sprintf(_('Forwarded by %s'), $link)); + } else { + // XXX: use that cool ngettext thing + $this->out->raw(sprintf(_('Forwarded by %s and %d other(s)'), $link, $n - 1)); + } + + $this->out->elementEnd('span'); + } + parent::showEnd(); + } } diff --git a/actions/apiblockcreate.php b/actions/apiblockcreate.php index 4f941f6c3..e79dec32d 100644 --- a/actions/apiblockcreate.php +++ b/actions/apiblockcreate.php @@ -98,6 +98,17 @@ class ApiBlockCreateAction extends ApiAuthAction return; } + // Don't allow blocking yourself! + + if ($this->user->id == $this->other->id) { + $this->clientError( + _("You cannot block yourself!"), + 403, + $this->format + ); + return; + } + if ($this->user->hasBlocked($this->other) || $this->user->block($this->other) ) { diff --git a/actions/designadminpanel.php b/actions/designadminpanel.php index 8bc8c4450..f862aff0e 100644 --- a/actions/designadminpanel.php +++ b/actions/designadminpanel.php @@ -129,8 +129,6 @@ class DesignadminpanelAction extends AdminPanelAction $bgimage = $this->saveBackgroundImage(); - common_debug("background image: $bgimage"); - static $settings = array('theme', 'logo'); $values = array(); @@ -141,13 +139,28 @@ class DesignadminpanelAction extends AdminPanelAction $this->validate($values); - // assert(all values are valid); + $oldtheme = common_config('site', 'theme'); + + $config = new Config(); + + $config->query('BEGIN'); + + // Only update colors if the theme has not changed. + + if ($oldtheme == $values['theme']) { - $bgcolor = new WebColor($this->trimmed('design_background')); - $ccolor = new WebColor($this->trimmed('design_content')); - $sbcolor = new WebColor($this->trimmed('design_sidebar')); - $tcolor = new WebColor($this->trimmed('design_text')); - $lcolor = new WebColor($this->trimmed('design_links')); + $bgcolor = new WebColor($this->trimmed('design_background')); + $ccolor = new WebColor($this->trimmed('design_content')); + $sbcolor = new WebColor($this->trimmed('design_sidebar')); + $tcolor = new WebColor($this->trimmed('design_text')); + $lcolor = new WebColor($this->trimmed('design_links')); + + Config::save('design', 'backgroundcolor', $bgcolor->intValue()); + Config::save('design', 'contentcolor', $ccolor->intValue()); + Config::save('design', 'sidebarcolor', $sbcolor->intValue()); + Config::save('design', 'textcolor', $tcolor->intValue()); + Config::save('design', 'linkcolor', $lcolor->intValue()); + } $onoff = $this->arg('design_background-image_onoff'); @@ -162,9 +175,11 @@ class DesignadminpanelAction extends AdminPanelAction $tile = $this->boolean('design_background-image_repeat'); - $config = new Config(); + // Hack to use Design's bit setter + $scratch = new Design(); + $scratch->setDisposition($on, $off, $tile); - $config->query('BEGIN'); + Config::save('design', 'disposition', $scratch->disposition); foreach ($settings as $setting) { Config::save('site', $setting, $values[$setting]); @@ -174,21 +189,7 @@ class DesignadminpanelAction extends AdminPanelAction Config::save('design', 'backgroundimage', $bgimage); } - Config::save('design', 'backgroundcolor', $bgcolor->intValue()); - Config::save('design', 'contentcolor', $ccolor->intValue()); - Config::save('design', 'sidebarcolor', $sbcolor->intValue()); - Config::save('design', 'textcolor', $tcolor->intValue()); - Config::save('design', 'linkcolor', $lcolor->intValue()); - - // Hack to use Design's bit setter - $scratch = new Design(); - $scratch->setDisposition($on, $off, $tile); - - Config::save('design', 'disposition', $scratch->disposition); - $config->query('COMMIT'); - - return; } /** @@ -212,6 +213,10 @@ class DesignadminpanelAction extends AdminPanelAction } // XXX: Should we restore the default dir settings, etc.? --Z + + // XXX: I can't get it to show the new settings without forcing + // this terrible reload -- FIX ME! + common_redirect(common_local_url('designadminpanel'), 303); } /** diff --git a/actions/forward.php b/actions/forward.php new file mode 100644 index 000000000..194833fe0 --- /dev/null +++ b/actions/forward.php @@ -0,0 +1,122 @@ +<?php + +/** + * Forward action. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Evan Prodromou <evan@status.net> + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2008, 2009, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Forward action + * + * @category Action + * @package StatusNet + * @author Evan Prodromou <evan@status.net> + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + */ + +class ForwardAction extends Action +{ + var $user = null; + var $notice = null; + + function prepare($args) + { + parent::prepare($args); + + $this->user = common_current_user(); + + if (empty($this->user)) { + $this->clientError(_("Only logged-in users can forward notices.")); + return false; + } + + $id = $this->trimmed('notice'); + + if (empty($id)) { + $this->clientError(_("No notice specified.")); + return false; + } + + $this->notice = Notice::staticGet('id', $id); + + if (empty($this->notice)) { + $this->clientError(_("No notice specified.")); + return false; + } + + if ($this->user->id == $this->notice->profile_id) { + $this->clientError(_("You can't forward your own notice.")); + return false; + } + + $token = $this->trimmed('token-'.$id); + + if (empty($token) || $token != common_session_token()) { + $this->clientError(_("There was a problem with your session token. Try again, please.")); + return false; + } + + $profile = $this->user->getProfile(); + + if ($profile->hasForwarded($id)) { + $this->clientError(_("You already forwarded that notice.")); + return false; + } + + return true; + } + + /** + * Class handler. + * + * @param array $args query arguments + * + * @return void + */ + + function handle($args) + { + $forward = Forward::saveNew($this->user->id, $this->notice->id); + + if ($this->boolean('ajax')) { + $this->startHTML('text/xml;charset=utf-8'); + $this->elementStart('head'); + $this->element('title', null, _('Forwarded')); + $this->elementEnd('head'); + $this->elementStart('body'); + $this->element('p', array('id' => 'forward_response'), _('Forwarded!')); + $this->elementEnd('body'); + $this->elementEnd('html'); + } else { + // FIXME! + } + } +} diff --git a/actions/groupdesignsettings.php b/actions/groupdesignsettings.php index b87b7d156..1c998efe1 100644 --- a/actions/groupdesignsettings.php +++ b/actions/groupdesignsettings.php @@ -173,17 +173,12 @@ class GroupDesignSettingsAction extends DesignSettingsAction function getWorkingDesign() { - $design = null; if (isset($this->group)) { $design = $this->group->getDesign(); } - if (empty($design)) { - $design = $this->defaultDesign(); - } - return $design; } @@ -197,7 +192,13 @@ class GroupDesignSettingsAction extends DesignSettingsAction function showContent() { - $this->showDesignForm($this->getWorkingDesign()); + $design = $this->getWorkingDesign(); + + if (empty($design)) { + $design = Design::siteDesign(); + } + + $this->showDesignForm($design); } /** diff --git a/actions/login.php b/actions/login.php index cd1326813..a6f86c0ca 100644 --- a/actions/login.php +++ b/actions/login.php @@ -75,10 +75,15 @@ class LoginAction extends Action function handle($args) { parent::handle($args); + + $disabled = common_config('logincommand','disabled'); + if (common_is_real_login()) { $this->clientError(_('Already logged in.')); } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { $this->checkLogin(); + } else if (!isset($disabled) && isset($args['user_id']) && isset($args['token'])){ + $this->checkLogin($args['user_id'],$args['token']); } else { common_ensure_session(); $this->showForm(); @@ -95,7 +100,7 @@ class LoginAction extends Action * @return void */ - function checkLogin() + function checkLogin($user_id=null, $token=null) { if(isset($token) && isset($user_id)){ //Token based login (from the LoginCommand) @@ -137,11 +142,6 @@ class LoginAction extends Action $user = common_check_user($nickname, $password); } - $nickname = common_canonical_nickname($this->trimmed('nickname')); - $password = $this->arg('password'); - - $user = common_check_user($nickname, $password); - if (!$user) { $this->showForm(_('Incorrect username or password.')); return; diff --git a/actions/subscribers.php b/actions/subscribers.php index df9ec9961..cc9452820 100644 --- a/actions/subscribers.php +++ b/actions/subscribers.php @@ -57,7 +57,7 @@ class SubscribersAction extends GalleryAction function showPageNotice() { - $user =& common_current_user(); + $user = common_current_user(); if ($user && ($user->id == $this->profile->id)) { $this->element('p', null, _('These are the people who listen to '. diff --git a/actions/subscriptions.php b/actions/subscriptions.php index cc7b38ee4..0dc5ee762 100644 --- a/actions/subscriptions.php +++ b/actions/subscriptions.php @@ -59,7 +59,7 @@ class SubscriptionsAction extends GalleryAction function showPageNotice() { - $user =& common_current_user(); + $user = common_current_user(); if ($user && ($user->id == $this->profile->id)) { $this->element('p', null, _('These are the people whose notices '. diff --git a/actions/twitapisearchatom.php b/actions/twitapisearchatom.php index 526ca2ae8..1cb8d7efe 100644 --- a/actions/twitapisearchatom.php +++ b/actions/twitapisearchatom.php @@ -71,7 +71,7 @@ class TwitapisearchatomAction extends ApiAction * @see Action::__construct */ - function __construct($output='php://output', $indent=true) + function __construct($output='php://output', $indent=null) { parent::__construct($output, $indent); } diff --git a/actions/userbyid.php b/actions/userbyid.php index 86a61f20b..ebff7e4a7 100644 --- a/actions/userbyid.php +++ b/actions/userbyid.php @@ -69,7 +69,7 @@ class UserbyidAction extends Action if (!$id) { $this->clientError(_('No id.')); } - $user =& User::staticGet($id); + $user = User::staticGet($id); if (!$user) { $this->clientError(_('No such user.')); } diff --git a/actions/userdesignsettings.php b/actions/userdesignsettings.php index 568c1d624..31a097970 100644 --- a/actions/userdesignsettings.php +++ b/actions/userdesignsettings.php @@ -96,14 +96,8 @@ class UserDesignSettingsAction extends DesignSettingsAction function getWorkingDesign() { - $user = common_current_user(); $design = $user->getDesign(); - - if (empty($design)) { - $design = $this->defaultDesign(); - } - return $design; } @@ -117,7 +111,13 @@ class UserDesignSettingsAction extends DesignSettingsAction function showContent() { - $this->showDesignForm($this->getWorkingDesign()); + $design = $this->getWorkingDesign(); + + if (empty($design)) { + $design = Design::siteDesign(); + } + + $this->showDesignForm($design); } /** diff --git a/classes/Design.php b/classes/Design.php index 89ae50c8c..4e7d7dfb2 100644 --- a/classes/Design.php +++ b/classes/Design.php @@ -101,7 +101,7 @@ class Design extends Memcached_DataObject } if (0 != mb_strlen($css)) { - $out->element('style', array('type' => 'text/css'), $css); + $out->style($css); } } diff --git a/classes/Forward.php b/classes/Forward.php new file mode 100644 index 000000000..e9b83a58b --- /dev/null +++ b/classes/Forward.php @@ -0,0 +1,126 @@ +<?php +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2009, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Table Definition for location_namespace + */ + +require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; + +class Forward extends Memcached_DataObject +{ + ###START_AUTOCODE + /* the code below is auto generated do not remove the above tag */ + + public $__table = 'forward'; // table name + public $profile_id; // int(4) primary_key not_null + public $notice_id; // int(4) primary_key not_null + public $created; // datetime not_null default_0000-00-00%2000%3A00%3A00 + + /* Static get */ + function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Forward',$k,$v); } + + /* the code above is auto generated do not remove the tag below */ + ###END_AUTOCODE + + function &pkeyGet($kv) + { + return Memcached_DataObject::pkeyGet('Forward', $kv); + } + + static function saveNew($profile_id, $notice_id) + { + $forward = new Forward(); + + $forward->profile_id = $profile_id; + $forward->notice_id = $notice_id; + $forward->created = common_sql_now(); + + $forward->query('BEGIN'); + + if (!$forward->insert()) { + throw new ServerException(_("Couldn't insert forward.")); + } + + $ni = $forward->addToInboxes(); + + $forward->query('COMMIT'); + + $forward->blowCache($ni); + + return $forward; + } + + function addToInboxes() + { + $inbox = new Notice_inbox(); + + $user = new User(); + + $user->query('SELECT user.* FROM user JOIN subscription ON user.id = subscription.subscriber '. + 'WHERE subscription.subscribed = '.$this->profile_id); + + $ni = array(); + + $notice = Notice::staticGet('id', $this->notice_id); + + $author = Profile::staticGet('id', $notice->profile_id); + + while ($user->fetch()) { + $inbox = Notice_inbox::pkeyGet(array('user_id' => $user->id, + 'notice_id' => $this->notice_id)); + + if (empty($inbox)) { + if (!$user->hasBlocked($author)) { + $ni[$user->id] = NOTICE_INBOX_SOURCE_FORWARD; + } + } else { + $inbox->free(); + } + } + + $user->free(); + $author->free(); + + unset($user); + unset($author); + + Notice_inbox::bulkInsert($this->notice_id, $this->created, $ni); + + return $ni; + } + + function blowCache($ni) + { + $cache = common_memcache(); + + if (!empty($cache)) { + foreach ($ni as $id => $source) { + $cache->delete(common_cache_key('notice_inbox:by_user:'.$id)); + $cache->delete(common_cache_key('notice_inbox:by_user_own:'.$id)); + $cache->delete(common_cache_key('notice_inbox:by_user:'.$id.';last')); + $cache->delete(common_cache_key('notice_inbox:by_user_own:'.$id.';last')); + } + } + } +} diff --git a/classes/Login_token.php b/classes/Login_token.php new file mode 100644 index 000000000..c172b30ab --- /dev/null +++ b/classes/Login_token.php @@ -0,0 +1,42 @@ +<?php +/** + * Table Definition for login_token + * + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2009, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } + +require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; + +class Login_token extends Memcached_DataObject +{ + ###START_AUTOCODE + /* the code below is auto generated do not remove the above tag */ + + public $__table = 'login_token'; // table name + public $user_id; // int(4) primary_key not_null + public $token; // char(32) not_null + public $created; // datetime() not_null + public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP + + /* Static get */ + function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Login_token',$k,$v); } + + /* the code above is auto generated do not remove the tag below */ + ###END_AUTOCODE +} diff --git a/classes/Notice.php b/classes/Notice.php index 661072156..bcd7947bd 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -948,39 +948,7 @@ class Notice extends Memcached_DataObject } } - $cnt = 0; - - $qryhdr = 'INSERT INTO notice_inbox (user_id, notice_id, source, created) VALUES '; - $qry = $qryhdr; - - foreach ($ni as $id => $source) { - if ($cnt > 0) { - $qry .= ', '; - } - $qry .= '('.$id.', '.$this->id.', '.$source.", '".$this->created. "') "; - $cnt++; - if (rand() % NOTICE_INBOX_SOFT_LIMIT == 0) { - // FIXME: Causes lag in replicated servers - // Notice_inbox::gc($id); - } - if ($cnt >= MAX_BOXCARS) { - $inbox = new Notice_inbox(); - $result = $inbox->query($qry); - if (PEAR::isError($result)) { - common_log_db_error($inbox, $qry); - } - $qry = $qryhdr; - $cnt = 0; - } - } - - if ($cnt > 0) { - $inbox = new Notice_inbox(); - $result = $inbox->query($qry); - if (PEAR::isError($result)) { - common_log_db_error($inbox, $qry); - } - } + Notice_inbox::bulkInsert($this->id, $this->created, $ni); return; } diff --git a/classes/Notice_inbox.php b/classes/Notice_inbox.php index d3e7853b1..b39006542 100644 --- a/classes/Notice_inbox.php +++ b/classes/Notice_inbox.php @@ -32,6 +32,7 @@ define('NOTICE_INBOX_SOFT_LIMIT', 1000); define('NOTICE_INBOX_SOURCE_SUB', 1); define('NOTICE_INBOX_SOURCE_GROUP', 2); define('NOTICE_INBOX_SOURCE_REPLY', 3); +define('NOTICE_INBOX_SOURCE_FORWARD', 4); define('NOTICE_INBOX_SOURCE_GATEWAY', -1); class Notice_inbox extends Memcached_DataObject @@ -83,7 +84,7 @@ class Notice_inbox extends Memcached_DataObject $inbox->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\''); } - $inbox->orderBy('notice_id DESC'); + $inbox->orderBy('created DESC'); if (!is_null($offset)) { $inbox->limit($offset, $limit); @@ -141,4 +142,43 @@ class Notice_inbox extends Memcached_DataObject 'WHERE user_id = ' . $user_id . ' ' . 'AND notice_id in ('.implode(',', $notices).')'); } + + static function bulkInsert($notice_id, $created, $ni) + { + $cnt = 0; + + $qryhdr = 'INSERT INTO notice_inbox (user_id, notice_id, source, created) VALUES '; + $qry = $qryhdr; + + foreach ($ni as $id => $source) { + if ($cnt > 0) { + $qry .= ', '; + } + $qry .= '('.$id.', '.$notice_id.', '.$source.", '".$created. "') "; + $cnt++; + if (rand() % NOTICE_INBOX_SOFT_LIMIT == 0) { + // FIXME: Causes lag in replicated servers + // Notice_inbox::gc($id); + } + if ($cnt >= MAX_BOXCARS) { + $inbox = new Notice_inbox(); + $result = $inbox->query($qry); + if (PEAR::isError($result)) { + common_log_db_error($inbox, $qry); + } + $qry = $qryhdr; + $cnt = 0; + } + } + + if ($cnt > 0) { + $inbox = new Notice_inbox(); + $result = $inbox->query($qry); + if (PEAR::isError($result)) { + common_log_db_error($inbox, $qry); + } + } + + return; + } } diff --git a/classes/Profile.php b/classes/Profile.php index 4b2e09006..4c14f62a0 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -716,4 +716,12 @@ class Profile extends Memcached_DataObject } return $result; } + + function hasForwarded($notice_id) + { + $forward = Forward::pkeyGet(array('profile_id' => $this->id, + 'notice_id' => $notice_id)); + + return (!empty($forward)); + } } diff --git a/classes/User.php b/classes/User.php index f905ea2b7..2a4fab7d4 100644 --- a/classes/User.php +++ b/classes/User.php @@ -502,6 +502,19 @@ class User extends Memcached_DataObject { // Add a new block record + // no blocking (and thus unsubbing from) yourself + + if ($this->id == $other->id) { + common_log(LOG_WARNING, + sprintf( + "Profile ID %d (%s) tried to block his or herself.", + $profile->id, + $profile->nickname + ) + ); + return false; + } + $block = new Profile_block(); // Begin a transaction @@ -520,16 +533,7 @@ class User extends Memcached_DataObject // Cancel their subscription, if it exists - $sub = Subscription::pkeyGet(array('subscriber' => $other->id, - 'subscribed' => $this->id)); - - if ($sub) { - $result = $sub->delete(); - if (!$result) { - common_log_db_error($sub, 'DELETE', __FILE__); - return false; - } - } + subs_unsubscribe_to($other->getUser(),$this->getProfile()); $block->query('COMMIT'); diff --git a/classes/statusnet.ini b/classes/statusnet.ini index 835faeb0b..a5126795b 100644 --- a/classes/statusnet.ini +++ b/classes/statusnet.ini @@ -1,3 +1,4 @@ + [avatar] profile_id = 129 original = 17 @@ -195,6 +196,15 @@ id = K service = K uri = U +[forward] +profile_id = 129 +notice_id = 129 +created = 142 + +[forward__keys] +profile_id = K +notice_id = K + [group_alias] alias = 130 group_id = 129 diff --git a/config.php.sample b/config.php.sample index 97645e870..63daf8663 100644 --- a/config.php.sample +++ b/config.php.sample @@ -154,7 +154,7 @@ $config['sphinx']['port'] = 3312; // $config['queue']['subsystem'] = 'stomp'; // $config['queue']['stomp_server'] = 'tcp://localhost:61613'; // use different queue_basename for each statusnet instance managed by the server -// $config['queue']['queue_basename'] = 'statusnet'; +// $config['queue']['queue_basename'] = '/queue/statusnet/'; // The following customise the behaviour of the various daemons: // $config['daemon']['piddir'] = '/var/run'; @@ -236,6 +236,11 @@ $config['sphinx']['port'] = 3312; // Use a different hostname for SSL-encrypted pages // $config['site']['sslserver'] = 'secure.example.org'; +// Indent HTML and XML +// Enable (default) for easier to read markup for developers, +// disable to save some bandwidth. +// $config['site']['indent'] = true; + // If you have a lot of status networks on the same server, you can // store the site data in a database and switch as follows // Status_network::setupDB('localhost', 'statusnet', 'statuspass', 'statusnet'); diff --git a/db/08to09.sql b/db/08to09.sql index 8d463fab4..a945416ea 100644 --- a/db/08to09.sql +++ b/db/08to09.sql @@ -72,4 +72,25 @@ create table location_namespace ( created datetime not null comment 'date the record was created', modified timestamp comment 'date this record was modified' -) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
\ No newline at end of file +) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + +create table login_token ( + user_id integer not null comment 'user owning this token' references user (id), + token char(32) not null comment 'token useable for logging in', + created datetime not null comment 'date this record was created', + modified timestamp comment 'date this record was modified', + + constraint primary key (user_id) +) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + +create table forward ( + + profile_id integer not null comment 'profile who forwarded the notice' references profile (id), + notice_id integer not null comment 'notice they forwarded' references notice (id), + + created datetime not null comment 'date this record was created', + + constraint primary key (profile_id, notice_id) + +) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + diff --git a/db/08to09_pg.sql b/db/08to09_pg.sql index b312d47dd..0bd47dea5 100644 --- a/db/08to09_pg.sql +++ b/db/08to09_pg.sql @@ -39,6 +39,15 @@ create table profile_role ( ); +create table login_token ( + user_id integer not null /* comment 'user owning this token'*/ references "user" (id), + token char(32) not null /* comment 'token useable for logging in'*/, + created timestamp not null DEFAULT CURRENT_TIMESTAMP /* comment 'date this record was created'*/, + modified timestamp /* comment 'date this record was modified'*/, + + primary key (user_id) +); + DROP index fave_user_id_idx; CREATE index fave_user_id_idx on fave (user_id,modified); @@ -60,4 +69,3 @@ ALTER TABLE profile ADD COLUMN lat decimal(10,7) /*comment 'latitude'*/ ; ALTER TABLE profile ADD COLUMN lon decimal(10,7) /*comment 'longitude'*/; ALTER TABLE profile ADD COLUMN location_id integer /* comment 'location id if possible'*/; ALTER TABLE profile ADD COLUMN location_ns integer /* comment 'namespace for location'*/; -
\ No newline at end of file diff --git a/db/statusnet.sql b/db/statusnet.sql index f7b3b113b..b500b81f2 100644 --- a/db/statusnet.sql +++ b/db/statusnet.sql @@ -575,3 +575,24 @@ create table location_namespace ( modified timestamp comment 'date this record was modified' ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + +create table login_token ( + user_id integer not null comment 'user owning this token' references user (id), + token char(32) not null comment 'token useable for logging in', + created datetime not null comment 'date this record was created', + modified timestamp comment 'date this record was modified', + + constraint primary key (user_id) +) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + +create table forward ( + + profile_id integer not null comment 'profile who forwarded the notice' references profile (id), + notice_id integer not null comment 'notice they forwarded' references notice (id), + + created datetime not null comment 'date this record was created', + + constraint primary key (profile_id, notice_id) + +) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + diff --git a/db/statusnet_pg.sql b/db/statusnet_pg.sql index cd72d66ea..81b329d1e 100644 --- a/db/statusnet_pg.sql +++ b/db/statusnet_pg.sql @@ -570,4 +570,14 @@ create table profile_role ( primary key (profile_id, role) -);
\ No newline at end of file +); + +create table login_token ( + user_id integer not null /* comment 'user owning this token'*/ references "user" (id), + token char(32) not null /* comment 'token useable for logging in'*/, + created timestamp not null DEFAULT CURRENT_TIMESTAMP /* comment 'date this record was created'*/, + modified timestamp /* comment 'date this record was modified'*/, + + primary key (user_id) +); + diff --git a/extlib/DB/DataObject.php b/extlib/DB/DataObject.php index 60ff1441b..a69fbae86 100644 --- a/extlib/DB/DataObject.php +++ b/extlib/DB/DataObject.php @@ -15,7 +15,7 @@ * @author Alan Knowles <alan@akbkhome.com> * @copyright 1997-2006 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 - * @version CVS: $Id: DataObject.php 284150 2009-07-15 23:27:59Z alan_k $ + * @version CVS: $Id: DataObject.php 291349 2009-11-27 09:15:18Z alan_k $ * @link http://pear.php.net/package/DB_DataObject */ @@ -235,7 +235,7 @@ class DB_DataObject extends DB_DataObject_Overload * @access private * @var string */ - var $_DB_DataObject_version = "1.8.12"; + var $_DB_DataObject_version = "1.9.0"; /** * The Database table (used by table extends) @@ -309,7 +309,8 @@ class DB_DataObject extends DB_DataObject_Overload /** * An autoloading, caching static get method using key, value (based on get) - * + * (depreciated - use ::get / and your own caching method) + * * Usage: * $object = DB_DataObject::staticGet("DbTable_mytable",12); * or @@ -942,9 +943,13 @@ class DB_DataObject extends DB_DataObject_Overload } $this->$key = $keyvalue; } - - - + + // if we haven't set disable_null_strings to "full" + $ignore_null = !isset($options['disable_null_strings']) + || !is_string($options['disable_null_strings']) + || strtolower($options['disable_null_strings']) !== 'full' ; + + foreach($items as $k => $v) { // if we are using autoincrement - skip the column... @@ -953,7 +958,10 @@ class DB_DataObject extends DB_DataObject_Overload } - if (!isset($this->$k)) { + + + // Ignore variables which aren't set to a value + if ( !isset($this->$k) && $ignore_null) { continue; } // dont insert data into mysql timestamps @@ -980,8 +988,7 @@ class DB_DataObject extends DB_DataObject_Overload } - - if (!isset($options['disable_null_strings']) && is_string($this->$k) && (strtolower($this->$k) === 'null') && !($v & DB_DATAOBJECT_NOTNULL)) { + if (!($v & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($this,$k)) { $rightq .= " NULL "; continue; } @@ -1194,8 +1201,14 @@ class DB_DataObject extends DB_DataObject_Overload $options = $_DB_DATAOBJECT['CONFIG']; + $ignore_null = !isset($options['disable_null_strings']) + || !is_string($options['disable_null_strings']) + || strtolower($options['disable_null_strings']) !== 'full' ; + + foreach($items as $k => $v) { - if (!isset($this->$k)) { + + if (!isset($this->$k) && $ignore_null) { continue; } // ignore stuff thats @@ -1234,7 +1247,7 @@ class DB_DataObject extends DB_DataObject_Overload } // special values ... at least null is handled... - if (!isset($options['disable_null_strings']) && (strtolower($this->$k) === 'null') && !($v & DB_DATAOBJECT_NOTNULL)) { + if (!($v & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($this,$k)) { $settings .= "$kSql = NULL "; continue; } @@ -1796,10 +1809,15 @@ class DB_DataObject extends DB_DataObject_Overload } - + $_DB_DATAOBJECT['INI'][$this->_database] = array(); foreach ($schemas as $ini) { if (file_exists($ini) && is_file($ini)) { - $_DB_DATAOBJECT['INI'][$this->_database] = parse_ini_file($ini, true); + + $_DB_DATAOBJECT['INI'][$this->_database] = array_merge( + $_DB_DATAOBJECT['INI'][$this->_database], + parse_ini_file($ini, true) + ); + if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { if (!is_readable ($ini)) { $this->debug("ini file is not readable: $ini","databaseStructure",1); @@ -2478,7 +2496,8 @@ class DB_DataObject extends DB_DataObject_Overload $x = new DB_DataObject; $this->_query= $x->_query; } - + + foreach($keys as $k => $v) { // index keys is an indexed array /* these filter checks are a bit suspicious.. @@ -2519,7 +2538,7 @@ class DB_DataObject extends DB_DataObject_Overload continue; } - if (!isset($options['disable_null_strings']) && (strtolower($this->$k) === 'null') && !($v & DB_DATAOBJECT_NOTNULL)) { + if (!($v & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($this,$k)) { $this->whereAdd(" $kSql IS NULL"); continue; } @@ -2624,15 +2643,31 @@ class DB_DataObject extends DB_DataObject_Overload } // does this need multi db support?? - $p = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ? - $_DB_DATAOBJECT['CONFIG']['class_prefix'] : ''; - $class = $p . preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)); - $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class); + $cp = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ? + explode(PATH_SEPARATOR, $_DB_DATAOBJECT['CONFIG']['class_prefix']) : ''; + + // multiprefix support. + $tbl = preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)); + if (is_array($cp)) { + $class = array(); + foreach($cp as $cpr) { + $ce = substr(phpversion(),0,1) > 4 ? class_exists($cpr . $tbl,false) : class_exists($cpr . $tbl); + if ($ce) { + $class = $cpr . $tbl; + break; + } + $class[] = $cpr . $tbl; + } + } else { + $class = $tbl; + $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class); + } - $class = $ce ? $class : DB_DataObject::_autoloadClass($class); + + $rclass = $ce ? $class : DB_DataObject::_autoloadClass($class, $table); // proxy = full|light - if (!$class && isset($_DB_DATAOBJECT['CONFIG']['proxy'])) { + if (!$rclass && isset($_DB_DATAOBJECT['CONFIG']['proxy'])) { DB_DataObject::debug("FAILED TO Autoload $database.$table - using proxy.","FACTORY",1); @@ -2653,12 +2688,14 @@ class DB_DataObject extends DB_DataObject_Overload return $x->$proxyMethod( $d->_database, $table); } - if (!$class) { + if (!$rclass) { return DB_DataObject::raiseError( - "factory could not find class $class from $table", + "factory could not find class " . + (is_array($class) ? implode(PATH_SEPARATOR, $class) : $class ). + "from $table", DB_DATAOBJECT_ERROR_INVALIDCONFIG); } - $ret = new $class; + $ret = new $rclass; if (!empty($database)) { DB_DataObject::debug("Setting database to $database","FACTORY",1); $ret->database($database); @@ -2668,11 +2705,12 @@ class DB_DataObject extends DB_DataObject_Overload /** * autoload Class * - * @param string $class Class + * @param string|array $class Class + * @param string $table Table trying to load. * @access private * @return string classname on Success */ - function _autoloadClass($class) + function _autoloadClass($class, $table=false) { global $_DB_DATAOBJECT; @@ -2682,32 +2720,62 @@ class DB_DataObject extends DB_DataObject_Overload $class_prefix = empty($_DB_DATAOBJECT['CONFIG']['class_prefix']) ? '' : $_DB_DATAOBJECT['CONFIG']['class_prefix']; - $table = substr($class,strlen($class_prefix)); + $table = $table ? $table : substr($class,strlen($class_prefix)); // only include the file if it exists - and barf badly if it has parse errors :) if (!empty($_DB_DATAOBJECT['CONFIG']['proxy']) || empty($_DB_DATAOBJECT['CONFIG']['class_location'])) { return false; } + // support for: + // class_location = mydir/ => maps to mydir/Tablename.php + // class_location = mydir/myfile_%s.php => maps to mydir/myfile_Tablename + // with directory sepr + // class_location = mydir/:mydir2/: => tries all of thes locations. + $cl = $_DB_DATAOBJECT['CONFIG']['class_location']; - if (strpos($_DB_DATAOBJECT['CONFIG']['class_location'],'%s') !== false) { - $file = sprintf($_DB_DATAOBJECT['CONFIG']['class_location'], preg_replace('/[^A-Z0-9]/i','_',ucfirst($table))); - } else { - $file = $_DB_DATAOBJECT['CONFIG']['class_location'].'/'.preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)).".php"; + switch (true) { + case (strpos($cl ,'%s') !== false): + $file = sprintf($cl , preg_replace('/[^A-Z0-9]/i','_',ucfirst($table))); + break; + + case (strpos($cl , PATH_SEPARATOR) !== false): + $file = array(); + foreach(explode(PATH_SEPARATOR, $cl ) as $p) { + $file[] = $p .'/'.preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)).".php"; + } + break; + default: + $file = $cl .'/'.preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)).".php"; + break; } - if (!file_exists($file)) { + $cls = is_array($class) ? $class : array($class); + + if (is_array($file) || !file_exists($file)) { $found = false; - foreach(explode(PATH_SEPARATOR, ini_get('include_path')) as $p) { - if (file_exists("$p/$file")) { - $file = "$p/$file"; - $found = true; + + $file = is_array($file) ? $file : array($file); + $search = implode(PATH_SEPARATOR, $file); + foreach($file as $f) { + foreach(explode(PATH_SEPARATOR, '' . PATH_SEPARATOR . ini_get('include_path')) as $p) { + $ff = empty($p) ? $f : "$p/$f"; + + if (file_exists($ff)) { + $file = $ff; + $found = true; + break; + } + } + if ($found) { break; } } if (!$found) { DB_DataObject::raiseError( - "autoload:Could not find class {$class} using class_location value", + "autoload:Could not find class " . implode(',', $cls) . + " using class_location value :" . $search . + " using include_path value :" . ini_get('include_path'), DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } @@ -2715,12 +2783,18 @@ class DB_DataObject extends DB_DataObject_Overload include_once $file; - - $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class); - + + $ce = false; + foreach($cls as $c) { + $ce = substr(phpversion(),0,1) > 4 ? class_exists($c,false) : class_exists($c); + if ($ce) { + $class = $c; + break; + } + } if (!$ce) { DB_DataObject::raiseError( - "autoload:Could not autoload {$class}", + "autoload:Could not autoload " . implode(',', $cls) , DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } @@ -2786,7 +2860,7 @@ class DB_DataObject extends DB_DataObject_Overload } - + $_DB_DATAOBJECT['LINKS'][$this->_database] = array(); foreach ($schemas as $ini) { $links = @@ -2794,9 +2868,13 @@ class DB_DataObject extends DB_DataObject_Overload $_DB_DATAOBJECT['CONFIG']["links_{$this->_database}"] : str_replace('.ini','.links.ini',$ini); - if (empty($_DB_DATAOBJECT['LINKS'][$this->_database]) && file_exists($links) && is_file($links)) { + if (file_exists($links) && is_file($links)) { /* not sure why $links = ... here - TODO check if that works */ - $_DB_DATAOBJECT['LINKS'][$this->_database] = parse_ini_file($links, true); + $_DB_DATAOBJECT['LINKS'][$this->_database] = array_merge( + $_DB_DATAOBJECT['LINKS'][$this->_database], + parse_ini_file($links, true) + ); + if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("Loaded links.ini file: $links","links",1); } @@ -2977,14 +3055,12 @@ class DB_DataObject extends DB_DataObject_Overload } if ($link) { if ($obj->get($link, $this->$row)) { - $obj->free(); return $obj; } return false; } if ($obj->get($this->$row)) { - $obj->free(); return $obj; } return false; @@ -3315,14 +3391,23 @@ class DB_DataObject extends DB_DataObject_Overload DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } + + $ignore_null = !isset($options['disable_null_strings']) + || !is_string($options['disable_null_strings']) + || strtolower($options['disable_null_strings']) !== 'full' ; + foreach($items as $k => $v) { - if (!isset($obj->$k)) { + if (!isset($obj->$k) && $ignore_null) { continue; } $kSql = ($quoteIdentifiers ? $DB->quoteIdentifier($k) : $k); + if (DB_DataObject::_is_null($obj,$k)) { + $obj->whereAdd("{$joinAs}.{$kSql} IS NULL"); + continue; + } if ($v & DB_DATAOBJECT_STR) { $obj->whereAdd("{$joinAs}.{$kSql} = " . $this->_quote((string) ( @@ -3344,14 +3429,9 @@ class DB_DataObject extends DB_DataObject_Overload if (PEAR::isError($value)) { $this->raiseError($value->getMessage() ,DB_DATAOBJECT_ERROR_INVALIDARG); return false; - } - if (!isset($options['disable_null_strings']) && strtolower($value) === 'null') { - $obj->whereAdd("{$joinAs}.{$kSql} IS NULL"); - continue; - } else { - $obj->whereAdd("{$joinAs}.{$kSql} = $value"); - continue; - } + } + $obj->whereAdd("{$joinAs}.{$kSql} = $value"); + continue; } @@ -3514,7 +3594,7 @@ class DB_DataObject extends DB_DataObject_Overload continue; } - if (!isset($from[sprintf($format,$k)])) { + if (!isset($from[sprintf($format,$k)]) && !DB_DataObject::_is_null($from, sprintf($format,$k))) { continue; } @@ -3643,7 +3723,7 @@ class DB_DataObject extends DB_DataObject_Overload // if not null - and it's not set....... - if (!isset($this->$key) && ($val & DB_DATAOBJECT_NOTNULL)) { + if ($val & DB_DATAOBJECT_NOTNULL && DB_DataObject::_is_null($this, $key)) { // dont check empty sequence key values.. if (($key == $seq[0]) && ($seq[1] == true)) { continue; @@ -3653,7 +3733,7 @@ class DB_DataObject extends DB_DataObject_Overload } - if (!isset($options['disable_null_strings']) && is_string($this->$key) && (strtolower($this->$key) == 'null')) { + if (DB_DataObject::_is_null($this, $key)) { if ($val & DB_DATAOBJECT_NOTNULL) { $this->debug("'null' field used for '$key', but it is defined as NOT NULL", 'VALIDATION', 4); $ret[$key] = false; @@ -3868,13 +3948,14 @@ class DB_DataObject extends DB_DataObject_Overload //echo "FROM VALUE $col, {$cols[$col]}, $value\n"; switch (true) { // set to null and column is can be null... - case (!isset($options['disable_null_strings']) && (strtolower($value) == 'null') && (!($cols[$col] & DB_DATAOBJECT_NOTNULL))): + case ((!($cols[$col] & DB_DATAOBJECT_NOTNULL)) && DB_DataObject::_is_null($value, false)): case (is_object($value) && is_a($value,'DB_DataObject_Cast')): $this->$col = $value; return true; // fail on setting null on a not null field.. - case (!isset($options['disable_null_strings']) && (strtolower($value) == 'null') && ($cols[$col] & DB_DATAOBJECT_NOTNULL)): + case (($cols[$col] & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($value,false)): + return false; case (($cols[$col] & DB_DATAOBJECT_DATE) && ($cols[$col] & DB_DATAOBJECT_TIME)): @@ -4189,9 +4270,65 @@ class DB_DataObject extends DB_DataObject_Overload if (isset($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) { $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->num_rows = array(); } + + if (is_array($this->_link_loaded)) { + foreach ($this->_link_loaded as $do) { + $do->free(); + } + } + } + /** + * Evaluate whether or not a value is set to null, taking the 'disable_null_strings' option into account. + * If the value is a string set to "null" and the "disable_null_strings" option is not set to + * true, then the value is considered to be null. + * If the value is actually a PHP NULL value, and "disable_null_strings" has been set to + * the value "full", then it will also be considered null. - this can not differenticate between not set + * + * + * @param object|array $obj_or_ar + * @param string|false $prop prperty + * @access private + * @return bool object + */ + function _is_null($obj_or_ar , $prop) + { + global $_DB_DATAOBJECT; + + + $isset = $prop === false ? isset($obj_or_ar) : + (is_array($obj_or_ar) ? isset($obj_or_ar[$prop]) : isset($obj_or_ar->$prop)); + + $value = $isset ? + ($prop === false ? $obj_or_ar : + (is_array($obj_or_ar) ? $obj_or_ar[$prop] : $obj_or_ar->$prop)) + : null; + + + + $options = $_DB_DATAOBJECT['CONFIG']; + + $null_strings = !isset($options['disable_null_strings']) + || $options['disable_null_strings'] === false; + + $crazy_null = isset($options['disable_null_strings']) + && is_string($options['disable_null_strings']) + && strtolower($options['disable_null_strings'] === 'full'); + + if ( $null_strings && $isset && is_string($value) && (strtolower($value) === 'null') ) { + return true; + } + + if ( $crazy_null && !$isset ) { + return true; + } + + return false; + + + } /* ---- LEGACY BC METHODS - NOT DOCUMENTED - See Documentation on New Methods. ---*/ @@ -4214,3 +4351,4 @@ if (!defined('DB_DATAOBJECT_NO_OVERLOAD')) { } } + diff --git a/extlib/DB/DataObject/Generator.php b/extlib/DB/DataObject/Generator.php index ff6e42c7d..17d310f57 100644 --- a/extlib/DB/DataObject/Generator.php +++ b/extlib/DB/DataObject/Generator.php @@ -15,7 +15,7 @@ * @author Alan Knowles <alan@akbkhome.com> * @copyright 1997-2006 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 - * @version CVS: $Id: Generator.php 284150 2009-07-15 23:27:59Z alan_k $ + * @version CVS: $Id: Generator.php 289384 2009-10-09 00:17:26Z alan_k $ * @link http://pear.php.net/package/DB_DataObject */ @@ -33,7 +33,7 @@ /** * * Config _$ptions - * [DB_DataObject_Generator] + * [DB_DataObject] * ; optional default = DB/DataObject.php * extends_location = * ; optional default = DB_DataObject @@ -775,11 +775,9 @@ class DB_DataObject_Generator extends DB_DataObject //echo "Generating Class files: \n"; $options = &PEAR::getStaticProperty('DB_DataObject','options'); - - if ($extends = @$options['extends']) { - $this->_extends = $extends; - $this->_extendsFile = $options['extends_location']; - } + $this->_extends = empty($options['extends']) ? $this->_extends : $options['extends']; + $this->_extendsFile = empty($options['extends_location']) ? $this->_extendsFile : $options['extends_location']; + foreach($this->tables as $this->table) { $this->table = trim($this->table); @@ -814,7 +812,7 @@ class DB_DataObject_Generator extends DB_DataObject } /** - * class being extended (can be overridden by [DB_DataObject_Generator] extends=xxxx + * class being extended (can be overridden by [DB_DataObject] extends=xxxx * * @var string * @access private @@ -1142,10 +1140,9 @@ class DB_DataObject_Generator extends DB_DataObject $options = &PEAR::getStaticProperty('DB_DataObject','options'); $class_prefix = empty($options['class_prefix']) ? '' : $options['class_prefix']; - if ($extends = @$options['extends']) { - $this->_extends = $extends; - $this->_extendsFile = $options['extends_location']; - } + $this->_extends = empty($options['extends']) ? $this->_extends : $options['extends']; + $this->_extendsFile = empty($options['extends_location']) ? $this->_extendsFile : $options['extends_location']; + $classname = $this->classname = $this->getClassNameFromTableName($this->table); $out = $this->_generateClassTable(); diff --git a/js/util.js b/js/util.js index 73fcf37be..67df73507 100644 --- a/js/util.js +++ b/js/util.js @@ -184,30 +184,33 @@ var SN = { // StatusNet form.removeClass(SN.C.S.Processing); $('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).removeClass(SN.C.S.Disabled); $('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).removeAttr(SN.C.S.Disabled, SN.C.S.Disabled); + $('#'+form_id+' .form_response').remove(); if (textStatus == 'timeout') { - form.append('<p class="error>Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.</p>'); + form.append('<p class="form_response error">Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.</p>'); } else { if ($('.'+SN.C.S.Error, xhr.responseXML).length > 0) { form.append(document._importNode($('.'+SN.C.S.Error, xhr.responseXML)[0], true)); } else { - if(jQuery.inArray(parseInt(xhr.status), SN.C.I.HTTP20x30x) < 0) { - form.append('<p class="error>(Sorry! We had trouble sending your notice ('+xhr.status+' '+xhr.statusText+'). Please report the problem to the site administrator if this happens again.</p>'); + if (parseInt(xhr.status) === 0 || jQuery.inArray(parseInt(xhr.status), SN.C.I.HTTP20x30x) >= 0) { + $('#'+form_id).resetForm(); + $('#'+form_id+' #'+SN.C.S.NoticeDataAttachSelected).remove(); + SN.U.FormNoticeEnhancements($('#'+form_id)); } else { - $('#'+form_id+' #'+SN.C.S.NoticeDataText).val(''); - SN.U.FormNoticeEnhancements($('#'+form_id)); + form.append('<p class="form_response error">(Sorry! We had trouble sending your notice ('+xhr.status+' '+xhr.statusText+'). Please report the problem to the site administrator if this happens again.</p>'); } } } }, success: function(data, textStatus) { + $('#'+form_id+' .form_response').remove(); var result; if ($('#'+SN.C.S.Error, data).length > 0) { - result = document._importNode($('p', data)[0], true); + result = document._importNode($('p', data)[0], true); result = result.textContent || result.innerHTML; - form.append('<p class="error">'+result+'</p>'); + form.append('<p class="form_response error">'+result+'</p>'); } else { if($('body')[0].id == 'bookmarklet') { @@ -217,7 +220,7 @@ var SN = { // StatusNet if ($('#'+SN.C.S.CommandResult, data).length > 0) { result = document._importNode($('p', data)[0], true); result = result.textContent || result.innerHTML; - form.append('<p class="success">'+result+'</p>'); + form.append('<p class="form_response success">'+result+'</p>'); } else { var notices = $('#notices_primary .notices'); @@ -245,12 +248,10 @@ var SN = { // StatusNet else { result = document._importNode($('title', data)[0], true); result_title = result.textContent || result.innerHTML; - form.append('<p class="success">'+result_title+'</p>'); + form.append('<p class="form_response success">'+result_title+'</p>'); } } - $('#'+form_id+' #'+SN.C.S.NoticeDataText).val(''); - $('#'+form_id+' #'+SN.C.S.NoticeDataAttach).val(''); - $('#'+form_id+' #'+SN.C.S.NoticeInReplyTo).val(''); + $('#'+form_id).resetForm(); $('#'+form_id+' #'+SN.C.S.NoticeDataAttachSelected).remove(); SN.U.FormNoticeEnhancements($('#'+form_id)); } @@ -305,8 +306,12 @@ var SN = { // StatusNet $('.form_disfavor').each(function() { SN.U.FormXHR($(this)); }); }, + NoticeForward: function() { + $('.form_forward').each(function() { SN.U.FormXHR($(this)); }); + }, + NoticeAttachments: function() { - $('.notice a.attachment').each(function() { + $('.notice a.attachment').each(function() { SN.U.NoticeWithAttachment($(this).closest('.notice')); }); }, @@ -438,7 +443,7 @@ var SN = { // StatusNet Notices: function() { if ($('body.user_in').length > 0) { SN.U.NoticeFavor(); - + SN.U.NoticeForward(); SN.U.NoticeReply(); } diff --git a/lib/action.php b/lib/action.php index 8ad391755..87d8a4399 100644 --- a/lib/action.php +++ b/lib/action.php @@ -68,7 +68,7 @@ class Action extends HTMLOutputter // lawsuit * @see XMLOutputter::__construct * @see HTMLOutputter::__construct */ - function __construct($output='php://output', $indent=true) + function __construct($output='php://output', $indent=null) { parent::__construct($output, $indent); } diff --git a/lib/api.php b/lib/api.php index e2ea87b43..eacb80dbe 100644 --- a/lib/api.php +++ b/lib/api.php @@ -134,20 +134,17 @@ class ApiAction extends Action $twitter_user['protected'] = false; # not supported by StatusNet yet $twitter_user['followers_count'] = $profile->subscriberCount(); - $defaultDesign = Design::siteDesign(); - $design = null; $user = $profile->getUser(); + $design = null; // Note: some profiles don't have an associated user + $defaultDesign = Design::siteDesign(); + if (!empty($user)) { $design = $user->getDesign(); } - if (empty($design)) { - $design = $defaultDesign; - } - $color = Design::toWebColor(empty($design->backgroundcolor) ? $defaultDesign->backgroundcolor : $design->backgroundcolor); $twitter_user['profile_background_color'] = ($color == null) ? '' : '#'.$color->hexValue(); $color = Design::toWebColor(empty($design->textcolor) ? $defaultDesign->textcolor : $design->textcolor); @@ -166,7 +163,7 @@ class ApiAction extends Action $timezone = 'UTC'; - if ($user->timezone) { + if (!empty($user) && !empty($user->timezone)) { $timezone = $user->timezone; } diff --git a/lib/command.php b/lib/command.php index bcc551c81..e2a665511 100644 --- a/lib/command.php +++ b/lib/command.php @@ -579,6 +579,37 @@ class OnCommand extends Command } } +class LoginCommand extends Command +{ + function execute($channel) + { + $disabled = common_config('logincommand','disabled'); + if(isset($disabled)) { + $channel->error($this->user, _('Login command is disabled')); + return; + } + $login_token = Login_token::staticGet('user_id',$this->user->id); + if($login_token){ + $login_token->delete(); + } + $login_token = new Login_token(); + $login_token->user_id = $this->user->id; + $login_token->token = common_good_rand(16); + $login_token->created = common_sql_now(); + $result = $login_token->insert(); + if (!$result) { + common_log_db_error($login_token, 'INSERT', __FILE__); + $channel->error($this->user, sprintf(_('Could not create login token for %s'), + $this->user->nickname)); + return; + } + $channel->output($this->user, + sprintf(_('This link is useable only once, and is good for only 2 minutes: %s'), + common_local_url('login', + array('user_id'=>$login_token->user_id, 'token'=>$login_token->token)))); + } +} + class SubscriptionsCommand extends Command { function execute($channel) @@ -666,6 +697,7 @@ class HelpCommand extends Command "reply #<notice_id> - reply to notice with a given id\n". "reply <nickname> - reply to the last notice from user\n". "join <group> - join group\n". + "login - Get a link to login to the web interface\n". "drop <group> - leave group\n". "stats - get your stats\n". "stop - same as 'off'\n". diff --git a/lib/commandinterpreter.php b/lib/commandinterpreter.php index 25f2e4b3e..665015afc 100644 --- a/lib/commandinterpreter.php +++ b/lib/commandinterpreter.php @@ -41,6 +41,12 @@ class CommandInterpreter return null; } return new HelpCommand($user); + case 'login': + if ($arg) { + return null; + } else { + return new LoginCommand($user); + } case 'subscribers': if ($arg) { return null; diff --git a/lib/default.php b/lib/default.php index d4ef045ea..ebb6f8d01 100644 --- a/lib/default.php +++ b/lib/default.php @@ -53,6 +53,7 @@ $default = 'shorturllength' => 30, 'dupelimit' => 60, # default for same person saying the same thing 'textlimit' => 140, + 'indent' => true, ), 'db' => array('database' => 'YOU HAVE TO SET THIS IN config.php', @@ -74,7 +75,7 @@ $default = array('enabled' => false, 'subsystem' => 'db', # default to database, or 'stomp' 'stomp_server' => null, - 'queue_basename' => 'statusnet', + 'queue_basename' => '/queue/statusnet/', 'stomp_username' => null, 'stomp_password' => null, ), diff --git a/lib/designsettings.php b/lib/designsettings.php index 99f44b5b7..b70ba0dfc 100644 --- a/lib/designsettings.php +++ b/lib/designsettings.php @@ -334,49 +334,6 @@ class DesignSettingsAction extends AccountSettingsAction } /** - * Get a default design - * - * @return Design design - */ - - function defaultDesign() - { - $defaults = common_config('site', 'design'); - - $design = new Design(); - - try { - - $color = new WebColor(); - - $color->parseColor($defaults['backgroundcolor']); - $design->backgroundcolor = $color->intValue(); - - $color->parseColor($defaults['contentcolor']); - $design->contentcolor = $color->intValue(); - - $color->parseColor($defaults['sidebarcolor']); - $design->sidebarcolor = $color->intValue(); - - $color->parseColor($defaults['textcolor']); - $design->textcolor = $color->intValue(); - - $color->parseColor($defaults['linkcolor']); - $design->linkcolor = $color->intValue(); - - $design->backgroundimage = $defaults['backgroundimage']; - - $design->disposition = $defaults['disposition']; - - } catch (WebColorException $e) { - common_log(LOG_ERR, _('Bad default color settings: ' . - $e->getMessage())); - } - - return $design; - } - - /** * Save the background image, if any, and set its disposition * * @param Design $design a working design to attach the img to @@ -445,24 +402,17 @@ class DesignSettingsAction extends AccountSettingsAction function restoreDefaults() { - $design = $this->getWorkingDesign(); - $default = $this->defaultDesign(); - $original = clone($design); - - $design->backgroundcolor = $default->backgroundcolor; - $design->contentcolor = $default->contentcolor; - $design->sidebarcolor = $default->sidebarcolor; - $design->textcolor = $default->textcolor; - $design->linkcolor = $default->linkcolor; + $design = $this->getWorkingDesign(); - $design->setDisposition(false, true, false); + if (!empty($design)) { - $result = $design->update($original); + $result = $design->delete(); - if ($result === false) { - common_log_db_error($design, 'UPDATE', __FILE__); - $this->showForm(_('Couldn\'t update your design.')); - return; + if ($result === false) { + common_log_db_error($design, 'DELETE', __FILE__); + $this->showForm(_('Couldn\'t update your design.')); + return; + } } $this->showForm(_('Design defaults restored.'), true); diff --git a/lib/error.php b/lib/error.php index 3162cfe65..87a4d913b 100644 --- a/lib/error.php +++ b/lib/error.php @@ -50,7 +50,7 @@ class ErrorAction extends Action var $message = null; var $default = null; - function __construct($message, $code, $output='php://output', $indent=true) + function __construct($message, $code, $output='php://output', $indent=null) { parent::__construct($output, $indent); diff --git a/lib/forwardform.php b/lib/forwardform.php new file mode 100644 index 000000000..2052856ae --- /dev/null +++ b/lib/forwardform.php @@ -0,0 +1,147 @@ +<?php +/** + * StatusNet, the distributed open-source microblogging tool + * + * Form for forwarding a notice + * + * PHP version 5 + * + * LICENCE: This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @category Form + * @package StatusNet + * @author Evan Prodromou <evan@status.net> + * @copyright 2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/form.php'; + +/** + * Form for forwarding a notice + * + * @category Form + * @package StatusNet + * @author Evan Prodromou <evan@status.net> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class ForwardForm extends Form +{ + /** + * Notice to forward + */ + + var $notice = null; + + /** + * Constructor + * + * @param HTMLOutputter $out output channel + * @param Notice $notice notice to forward + */ + + function __construct($out=null, $notice=null) + { + parent::__construct($out); + + $this->notice = $notice; + } + + /** + * ID of the form + * + * @return int ID of the form + */ + + function id() + { + return 'forward-' . $this->notice->id; + } + + /** + * Action of the form + * + * @return string URL of the action + */ + + function action() + { + return common_local_url('forward'); + } + + /** + * Include a session token for CSRF protection + * + * @return void + */ + + function sessionToken() + { + $this->out->hidden('token-' . $this->notice->id, + common_session_token()); + } + + /** + * Legend of the Form + * + * @return void + */ + function formLegend() + { + $this->out->element('legend', null, _('Forward this notice')); + } + + /** + * Data elements + * + * @return void + */ + + function formData() + { + $this->out->hidden('notice-n'.$this->notice->id, + $this->notice->id, + 'notice'); + } + + /** + * Action elements + * + * @return void + */ + + function formActions() + { + $this->out->submit('forward-submit-' . $this->notice->id, + _('Forward'), 'submit', null, _('Forward this notice')); + } + + /** + * Class of the form. + * + * @return string the form's class + */ + + function formClass() + { + return 'form_forward'; + } +} diff --git a/lib/htmloutputter.php b/lib/htmloutputter.php index d267526c8..2091c6e2c 100644 --- a/lib/htmloutputter.php +++ b/lib/htmloutputter.php @@ -67,7 +67,7 @@ class HTMLOutputter extends XMLOutputter * @param boolean $indent Whether to indent output, default true */ - function __construct($output='php://output', $indent=true) + function __construct($output='php://output', $indent=null) { parent::__construct($output, $indent); } @@ -350,14 +350,43 @@ class HTMLOutputter extends XMLOutputter */ function script($src, $type='text/javascript') { - $url = parse_url($src); - if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment)) - { - $src = common_path($src) . '?version=' . STATUSNET_VERSION; + if(Event::handle('StartScriptElement', array($this,&$src,&$type))) { + $url = parse_url($src); + if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment)) + { + $src = common_path($src) . '?version=' . STATUSNET_VERSION; + } + $this->element('script', array('type' => $type, + 'src' => $src), + ' '); + Event::handle('EndScriptElement', array($this,$src,$type)); + } + } + + /** + * output a script (almost always javascript) tag with inline + * code. + * + * @param string $code code to put in the script tag + * @param string $type 'type' attribute value of the tag + * + * @return void + */ + + function inlineScript($code, $type='text/javascript') + { + if(Event::handle('StartInlineScriptElement', array($this,&$code,&$type))) { + $this->elementStart('script', array('type' => $type)); + if($type == 'text/javascript') { + $this->raw('/*<![CDATA[*/ '); // XHTML compat + } + $this->raw($code); + if($type == 'text/javascript') { + $this->raw(' /*]]>*/'); // XHTML compat + } + $this->elementEnd('script'); + Event::handle('EndInlineScriptElement', array($this,$code,$type)); } - $this->element('script', array('type' => $type, - 'src' => $src), - ' '); } /** @@ -371,19 +400,44 @@ class HTMLOutputter extends XMLOutputter */ function cssLink($src,$theme=null,$media=null) { - $url = parse_url($src); - if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment)) - { - if(file_exists(Theme::file($src,$theme))){ - $src = Theme::path($src, $theme) . '?version=' . STATUSNET_VERSION; - }else{ - $src = common_path($src); + if(Event::handle('StartCssLinkElement', array($this,&$src,&$theme,&$media))) { + $url = parse_url($src); + if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment)) + { + if(file_exists(Theme::file($src,$theme))){ + $src = Theme::path($src, $theme); + }else{ + $src = common_path($src); + } + $src.= '?version=' . STATUSNET_VERSION; } + $this->element('link', array('rel' => 'stylesheet', + 'type' => 'text/css', + 'href' => $src, + 'media' => $media)); + Event::handle('EndCssLinkElement', array($this,$src,$theme,$media)); + } + } + + /** + * output a style (almost always css) tag with inline + * code. + * + * @param string $code code to put in the style tag + * @param string $type 'type' attribute value of the tag + * @param string $media 'media' attribute value of the tag + * + * @return void + */ + + function style($code, $type = 'text/css', $media = null) + { + if(Event::handle('StartStyleElement', array($this,&$code,&$type,&$media))) { + $this->elementStart('style', array('type' => $type, 'media' => $media)); + $this->raw($code); + $this->elementEnd('style'); + Event::handle('EndStyleElement', array($this,$code,$type,$media)); } - $this->element('link', array('rel' => 'stylesheet', - 'type' => 'text/css', - 'href' => $src, - 'media' => $media)); } /** @@ -414,7 +468,6 @@ class HTMLOutputter extends XMLOutputter } } - /** * Internal script to autofocus the given element on page onload. * @@ -425,13 +478,10 @@ class HTMLOutputter extends XMLOutputter */ function autofocus($id) { - $this->elementStart('script', array('type' => 'text/javascript')); - $this->raw('/*<![CDATA[*/'. + $this->inlineScript( ' $(document).ready(function() {'. ' var el = $("#' . $id . '");'. ' if (el.length) { el.focus(); }'. - ' });'. - ' /*]]>*/'); - $this->elementEnd('script'); + ' });'); } } diff --git a/lib/language.php b/lib/language.php index 4fc45bafe..ab46f1a65 100644 --- a/lib/language.php +++ b/lib/language.php @@ -36,6 +36,33 @@ if (!function_exists('gettext')) { require_once("php-gettext/gettext.inc"); } + +if (!function_exists('dpgettext')) { + /** + * Context-aware dgettext wrapper; use when messages in different contexts + * won't be distinguished from the English source but need different translations. + * The context string will appear as msgctxt in the .po files. + * + * Not currently exposed in PHP's gettext module; implemented to be compat + * with gettext.h's macros. + * + * @param string $domain domain identifier, or null for default domain + * @param string $context context identifier, should be some key like "menu|file" + * @param string $msgid English source text + * @return string original or translated message + */ + function dpgettext($domain, $context, $msg) + { + $msgid = $context . "\004" . $msg; + $out = dcgettext($domain, $msgid, LC_MESSAGES); + if ($out == $msgid) { + return $msg; + } else { + return $out; + } + } +} + if (!function_exists('pgettext')) { /** * Context-aware gettext wrapper; use when messages in different contexts @@ -51,8 +78,30 @@ if (!function_exists('pgettext')) { */ function pgettext($context, $msg) { + return dpgettext(textdomain(NULL), $context, $msg); + } +} + +if (!function_exists('dnpgettext')) { + /** + * Context-aware dngettext wrapper; use when messages in different contexts + * won't be distinguished from the English source but need different translations. + * The context string will appear as msgctxt in the .po files. + * + * Not currently exposed in PHP's gettext module; implemented to be compat + * with gettext.h's macros. + * + * @param string $domain domain identifier, or null for default domain + * @param string $context context identifier, should be some key like "menu|file" + * @param string $msg singular English source text + * @param string $plural plural English source text + * @param int $n number of items to control plural selection + * @return string original or translated message + */ + function dnpgettext($domain, $context, $msg, $plural, $n) + { $msgid = $context . "\004" . $msg; - $out = dcgettext(textdomain(NULL), $msgid, LC_MESSAGES); + $out = dcngettext($domain, $msgid, $plural, $n, LC_MESSAGES); if ($out == $msgid) { return $msg; } else { @@ -78,14 +127,78 @@ if (!function_exists('npgettext')) { */ function npgettext($context, $msg, $plural, $n) { - $msgid = $context . "\004" . $msg; - $out = dcngettext(textdomain(NULL), $msgid, $plural, $n, LC_MESSAGES); - if ($out == $msgid) { - return $msg; + return dnpgettext(textdomain(NULL), $msgid, $plural, $n, LC_MESSAGES); + } +} + +/** + * Shortcut for *gettext functions with smart domain detection. + * + * If calling from a plugin, this function checks which plugin was + * being called from and uses that as text domain, which will have + * been set up during plugin initialization. + * + * Also handles plurals and contexts depending on what parameters + * are passed to it: + * + * gettext -> _m($msg) + * ngettext -> _m($msg1, $msg2, $n) + * pgettext -> _m($ctx, $msg) + * npgettext -> _m($ctx, $msg1, $msg2, $n) + * + * @fixme may not work properly in eval'd code + * + * @param string $msg + * @return string + */ +function _m($msg/*, ...*/) +{ + $domain = _mdomain(debug_backtrace(false)); + $args = func_get_args(); + switch(count($args)) { + case 1: return dgettext($domain, $msg); + case 2: return dpgettext($domain, $args[0], $args[1]); + case 3: return dngettext($domain, $args[0], $args[1], $args[2]); + case 4: return dnpgettext($domain, $args[0], $args[1], $args[2], $args[3]); + default: throw new Exception("Bad parameter count to _m()"); + } +} + +/** + * Looks for which plugin we've been called from to set the gettext domain. + * + * @param array $backtrace debug_backtrace() output + * @return string + * @private + * @fixme could explode if SN is under a 'plugins' folder or share name. + */ +function _mdomain($backtrace) +{ + /* + 0 => + array + 'file' => string '/var/www/mublog/plugins/FeedSub/FeedSubPlugin.php' (length=49) + 'line' => int 77 + 'function' => string '_m' (length=2) + 'args' => + array + 0 => &string 'Feeds' (length=5) + */ + static $cached; + $path = $backtrace[0]['file']; + if (!isset($cached[$path])) { + if (DIRECTORY_SEPARATOR !== '/') { + $path = strtr($path, DIRECTORY_SEPARATOR, '/'); + } + $cut = strpos($path, '/plugins/') + 9; + $cut2 = strpos($path, '/', $cut); + if ($cut && $cut2) { + $cached[$path] = substr($path, $cut, $cut2 - $cut); } else { - return $out; + return null; } } + return $cached[$path]; } diff --git a/lib/messageform.php b/lib/messageform.php index b034be312..4df193c6d 100644 --- a/lib/messageform.php +++ b/lib/messageform.php @@ -154,8 +154,7 @@ class MessageForm extends Form $contentLimit = Message::maxContent(); - $this->out->element('script', array('type' => 'text/javascript'), - 'maxLength = ' . $contentLimit . ';'); + $this->out->inlineScript('maxLength = ' . $contentLimit . ';'); if ($contentLimit > 0) { $this->out->elementStart('dl', 'form_note'); diff --git a/lib/noticeform.php b/lib/noticeform.php index ec8624597..0dd3f2d77 100644 --- a/lib/noticeform.php +++ b/lib/noticeform.php @@ -178,8 +178,7 @@ class NoticeForm extends Form $contentLimit = Notice::maxContent(); - $this->out->element('script', array('type' => 'text/javascript'), - 'maxLength = ' . $contentLimit . ';'); + $this->out->inlineScript('maxLength = ' . $contentLimit . ';'); if ($contentLimit > 0) { $this->out->elementStart('dl', 'form_note'); diff --git a/lib/noticelist.php b/lib/noticelist.php index 21cec528f..d6ffc9ca9 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -212,6 +212,7 @@ class NoticeListItem extends Widget $this->out->elementStart('div', 'notice-options'); $this->showFaveForm(); $this->showReplyLink(); + $this->showForwardForm(); $this->showDeleteLink(); $this->out->elementEnd('div'); } @@ -531,6 +532,26 @@ class NoticeListItem extends Widget } /** + * show the form to forward a notice + * + * @return void + */ + + function showForwardForm() + { + $user = common_current_user(); + if ($user && $user->id != $this->notice->profile_id) { + $profile = $user->getProfile(); + if ($profile->hasForwarded($this->notice->id)) { + $this->out->text(_('Forwarded')); + } else { + $ff = new ForwardForm($this->out, $this->notice); + $ff->show(); + } + } + } + + /** * if the user is the author, let them delete the notice * * @return void diff --git a/lib/plugin.php b/lib/plugin.php index 87d7be5a7..de7313e59 100644 --- a/lib/plugin.php +++ b/lib/plugin.php @@ -65,6 +65,8 @@ class Plugin Event::addHandler(mb_substr($method, 2), array($this, $method)); } } + + $this->setupGettext(); } function initialize() @@ -76,4 +78,31 @@ class Plugin { return true; } + + /** + * Checks if this plugin has localization that needs to be set up. + * Gettext localizations can be called via the _m() helper function. + */ + protected function setupGettext() + { + $class = get_class($this); + if (substr($class, -6) == 'Plugin') { + $name = substr($class, 0, -6); + $path = INSTALLDIR . "/plugins/$name/locale"; + if (file_exists($path) && is_dir($path)) { + bindtextdomain($name, $path); + } + } + } + + protected function log($level, $msg) + { + common_log($level, get_class($this) . ': '.$msg); + } + + protected function debug($msg) + { + $this->log(LOG_DEBUG, $msg); + } } + diff --git a/lib/router.php b/lib/router.php index 1a090861e..398135a3e 100644 --- a/lib/router.php +++ b/lib/router.php @@ -88,6 +88,8 @@ class Router $m->connect('doc/:title', array('action' => 'doc')); + $m->connect('main/login?user_id=:user_id&token=:token', array('action'=>'login'), array('user_id'=> '[0-9]+', 'token'=>'.+')); + // main stuff is repetitive $main = array('login', 'logout', 'register', 'subscribe', @@ -97,7 +99,7 @@ class Router 'groupblock', 'groupunblock', 'sandbox', 'unsandbox', 'silence', 'unsilence', - 'deleteuser'); + 'deleteuser', 'forward'); foreach ($main as $a) { $m->connect('main/'.$a, array('action' => $a)); diff --git a/lib/rssaction.php b/lib/rssaction.php index d591c99ed..62e3f21b6 100644 --- a/lib/rssaction.php +++ b/lib/rssaction.php @@ -52,7 +52,7 @@ class Rss10Action extends Action * @see Action::__construct */ - function __construct($output='php://output', $indent=true) + function __construct($output='php://output', $indent=null) { parent::__construct($output, $indent); } diff --git a/lib/schema.php b/lib/schema.php index df7cb65f5..a8ba91b87 100644 --- a/lib/schema.php +++ b/lib/schema.php @@ -94,7 +94,7 @@ class Schema public function getTableDef($name) { - $res =& $this->conn->query('DESCRIBE ' . $name); + $res = $this->conn->query('DESCRIBE ' . $name); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); @@ -213,7 +213,7 @@ class Schema $sql .= "); "; - $res =& $this->conn->query($sql); + $res = $this->conn->query($sql); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); @@ -234,7 +234,7 @@ class Schema public function dropTable($name) { - $res =& $this->conn->query("DROP TABLE $name"); + $res = $this->conn->query("DROP TABLE $name"); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); @@ -269,7 +269,7 @@ class Schema $name = "$table_".implode("_", $columnNames)."_idx"; } - $res =& $this->conn->query("ALTER TABLE $table ". + $res = $this->conn->query("ALTER TABLE $table ". "ADD INDEX $name (". implode(",", $columnNames).")"); @@ -291,7 +291,7 @@ class Schema public function dropIndex($table, $name) { - $res =& $this->conn->query("ALTER TABLE $table DROP INDEX $name"); + $res = $this->conn->query("ALTER TABLE $table DROP INDEX $name"); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); @@ -314,7 +314,7 @@ class Schema { $sql = "ALTER TABLE $table ADD COLUMN " . $this->_columnSql($columndef); - $res =& $this->conn->query($sql); + $res = $this->conn->query($sql); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); @@ -339,7 +339,7 @@ class Schema $sql = "ALTER TABLE $table MODIFY COLUMN " . $this->_columnSql($columndef); - $res =& $this->conn->query($sql); + $res = $this->conn->query($sql); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); @@ -363,7 +363,7 @@ class Schema { $sql = "ALTER TABLE $table DROP COLUMN $columnName"; - $res =& $this->conn->query($sql); + $res = $this->conn->query($sql); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); @@ -446,7 +446,7 @@ class Schema $sql = 'ALTER TABLE ' . $tableName . ' ' . implode(', ', $phrase); - $res =& $this->conn->query($sql); + $res = $this->conn->query($sql); if (PEAR::isError($res)) { throw new Exception($res->getMessage()); diff --git a/lib/subs.php b/lib/subs.php index 2fc3160de..4b6b03967 100644 --- a/lib/subs.php +++ b/lib/subs.php @@ -127,6 +127,12 @@ function subs_unsubscribe_to($user, $other) if (!$user->isSubscribed($other)) return _('Not subscribed!'); + // Don't allow deleting self subs + + if ($user->id == $other->id) { + return _('Couldn\'t delete self-subscription.'); + } + $sub = DB_DataObject::factory('subscription'); $sub->subscriber = $user->id; diff --git a/lib/util.php b/lib/util.php index 99a0a1db3..14d666503 100644 --- a/lib/util.php +++ b/lib/util.php @@ -127,7 +127,7 @@ function common_check_user($nickname, $password) if (0 == strcmp(common_munge_password($password, $user->id), $user->password)) { //internal checking passed - $authenticatedUser =& $user; + $authenticatedUser = $user; } } } @@ -1070,18 +1070,21 @@ function common_request_id() function common_log($priority, $msg, $filename=null) { - $msg = '[' . common_request_id() . '] ' . $msg; - $logfile = common_config('site', 'logfile'); - if ($logfile) { - $log = fopen($logfile, "a"); - if ($log) { - $output = common_log_line($priority, $msg); - fwrite($log, $output); - fclose($log); + if(Event::handle('StartLog', array(&$priority, &$msg, &$filename))){ + $msg = '[' . common_request_id() . '] ' . $msg; + $logfile = common_config('site', 'logfile'); + if ($logfile) { + $log = fopen($logfile, "a"); + if ($log) { + $output = common_log_line($priority, $msg); + fwrite($log, $output); + fclose($log); + } + } else { + common_ensure_syslog(); + syslog($priority, $msg); } - } else { - common_ensure_syslog(); - syslog($priority, $msg); + Event::handle('EndLog', array($priority, $msg, $filename)); } } diff --git a/lib/xmloutputter.php b/lib/xmloutputter.php index 5f06e491d..15b18e7d9 100644 --- a/lib/xmloutputter.php +++ b/lib/xmloutputter.php @@ -67,10 +67,13 @@ class XMLOutputter * @param boolean $indent Whether to indent output, default true */ - function __construct($output='php://output', $indent=true) + function __construct($output='php://output', $indent=null) { $this->xw = new XMLWriter(); $this->xw->openURI($output); + if(is_null($indent)) { + $indent = common_config('site', 'indent'); + } $this->xw->setIndent($indent); } diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po index 2b8f80bdc..c7bb7a5e3 100644 --- a/locale/ar/LC_MESSAGES/statusnet.po +++ b/locale/ar/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:01+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:25:58+0000\n" "Language-Team: Arabic\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ar\n" "X-Message-Group: out-statusnet\n" @@ -181,7 +181,12 @@ msgstr "ليس للمستخدم مل٠شخصي." msgid "Could not save profile." msgstr "تعذّر ØÙظ المل٠الشخصي." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "لا يمكنك Øذ٠المستخدمين." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Ùشل منع المستخدم." @@ -560,7 +565,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -805,100 +810,100 @@ msgstr "التصميم" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "مسار شعار غير صالØ." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "السمة غير متوÙرة: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "غيّر الشعار" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "شعار الموقع" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "غيّر السمة" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "سمة الموقع" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "سمة الموقع." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "تغيير صورة الخلÙية" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "الخلÙية" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "مكّن" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "عطّل" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "مكّن صورة الخلÙية أو عطّلها." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "تغيير الألوان" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "المØتوى" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "الشريط الجانبي" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "النص" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "وصلات" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "استخدم المبدئيات" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "استعد التصميمات المبدئية" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "ارجع إلى المبدئي" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -908,7 +913,7 @@ msgstr "ارجع إلى المبدئي" msgid "Save" msgstr "أرسل" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "اØÙظ التصميم" @@ -1135,16 +1140,16 @@ msgstr "" #: actions/favorited.php:65 lib/popularnoticesection.php:88 #: lib/publicgroupnav.php:93 msgid "Popular notices" -msgstr "" +msgstr "إشعارات مشهورة" #: actions/favorited.php:67 #, php-format msgid "Popular notices, page %d" -msgstr "" +msgstr "إشعارات مشهورة، الصÙØØ© %d" #: actions/favorited.php:79 msgid "The most popular notices on the site right now." -msgstr "" +msgstr "أشهر الإشعارات على الموقع Øاليًا." #: actions/favorited.php:150 msgid "Favorite notices appear on this page but no one has favorited one yet." @@ -1306,11 +1311,11 @@ msgstr "لا تمنع هذا المستخدم من هذه المجموعة" #: actions/groupblock.php:179 msgid "Block this user from this group" -msgstr "" +msgstr "امنع هذا المستخدم من هذه المجموعة" #: actions/groupblock.php:196 msgid "Database error blocking user from group." -msgstr "" +msgstr "خطأ ÙÙŠ قاعدة البيانات أثناء منع المستخدم من المجموعة." #: actions/groupbyid.php:74 msgid "No ID" @@ -1330,18 +1335,18 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "تعذّر تØديث تصميمك." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "" @@ -1637,7 +1642,7 @@ msgstr "رسالة شخصية" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "أرسل" @@ -1717,11 +1722,11 @@ msgstr "" msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "والج بالÙعل." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "" @@ -1922,8 +1927,8 @@ msgstr "نوع المØتوى " msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "ليس نسق بيانات مدعوم." @@ -2500,7 +2505,7 @@ msgstr "" #: actions/recoverpassword.php:352 msgid "Password must be 6 chars or more." -msgstr "" +msgstr "يجب أن تكون كلمة السر 6 Ù…Øار٠أو أكثر." #: actions/recoverpassword.php:356 msgid "Password and confirmation do not match." @@ -2516,7 +2521,7 @@ msgstr "" #: actions/register.php:85 actions/register.php:189 actions/register.php:404 msgid "Sorry, only invited people can register." -msgstr "" +msgstr "عذرًا، الأشخاص المدعوون ÙˆØدهم يستطيعون التسجيل." #: actions/register.php:92 msgid "Sorry, invalid invitation code." @@ -3062,9 +3067,8 @@ msgid "Contact email address for your site" msgstr "عنوان البريد الإلكتروني للاتصال بموقعك" #: actions/siteadminpanel.php:290 -#, fuzzy msgid "Local" -msgstr "الموقع" +msgstr "Ù…Øلي" #: actions/siteadminpanel.php:301 msgid "Default timezone" @@ -3103,13 +3107,12 @@ msgid "Access" msgstr "Ù†Ùاذ" #: actions/siteadminpanel.php:334 -#, fuzzy msgid "Private" -msgstr "خصوصية" +msgstr "خاص" #: actions/siteadminpanel.php:336 msgid "Prohibit anonymous users (not logged in) from viewing site?" -msgstr "" +msgstr "أأمنع المستخدمين المجهولين (غير الوالجين) من عرض الموقع؟" #: actions/siteadminpanel.php:340 #, fuzzy @@ -4203,11 +4206,25 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "تعذّر إنشاء الكنى." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 msgid "You are not subscribed to anyone." msgstr "لست Ù…Ùشتركًا بأي Ø£Øد." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "لست مشتركًا بأØد." @@ -4217,11 +4234,11 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:" msgstr[4] "" msgstr[5] "" -#: lib/command.php:614 +#: lib/command.php:645 msgid "No one is subscribed to you." msgstr "لا Ø£Øد مشترك بك." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "لا Ø£Øد مشترك بك." @@ -4231,11 +4248,11 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:" msgstr[4] "" msgstr[5] "" -#: lib/command.php:636 +#: lib/command.php:667 msgid "You are not a member of any groups." msgstr "لست عضوًا ÙÙŠ أي مجموعة." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "لست عضوًا ÙÙŠ أي مجموعة." @@ -4245,7 +4262,7 @@ msgstr[3] "أنت عضو ÙÙŠ هذه المجموعات:" msgstr[4] "" msgstr[5] "" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4264,6 +4281,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4320,16 +4338,11 @@ msgid "Upload file" msgstr "ارÙع ملÙًا" #: lib/designsettings.php:109 -#, fuzzy msgid "" "You can upload your personal background image. The maximum file size is 2MB." -msgstr "هذا المل٠كبير جدًا. إن أقصى Øجم للملÙات هو %s." - -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" +msgstr "تستطيع رÙع صورتك الشخصية. أقصى Øجم للمل٠هو 2 Ù….ب." -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "استعيدت مبدئيات التصميم." @@ -4773,7 +4786,7 @@ msgstr "أرسل إشعارًا مباشرًا" msgid "To" msgstr "إلى" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "المØار٠المتوÙرة" @@ -4786,11 +4799,11 @@ msgstr "أرسل إشعارًا" msgid "What's up, %s?" msgstr "ما الأخبار يا %sØŸ" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "أرÙÙ‚" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "أرÙÙ‚ ملÙًا" @@ -4955,7 +4968,7 @@ msgstr "Ù…Ùختارون" #: lib/publicgroupnav.php:92 msgid "Popular" -msgstr "" +msgstr "مشهورة" #: lib/sandboxform.php:67 msgid "Sandbox" @@ -5060,7 +5073,12 @@ msgstr "" msgid "Not subscribed!" msgstr "لست Ù…Ùشتركًا!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "تعذّر Øذ٠الاشتراك." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "تعذّر Øذ٠الاشتراك." diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po index 8d020e084..e1d9bd777 100644 --- a/locale/bg/LC_MESSAGES/statusnet.po +++ b/locale/bg/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:07+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:01+0000\n" "Language-Team: Bulgarian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: bg\n" "X-Message-Group: out-statusnet\n" @@ -180,7 +180,12 @@ msgstr "ПотребителÑÑ‚ нÑма профил." msgid "Could not save profile." msgstr "Грешка при запазване на профила." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Ðе можете да Ñпрете да Ñледите Ñебе Ñи!" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -566,7 +571,7 @@ msgstr "ИзрÑзване" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -818,106 +823,106 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Ðеправилен размер." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Страницата не е доÑтъпна във вида медиÑ, който приемате" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "СмÑна на логото" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Покани" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "ПромÑна" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Ðова бележка" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "Излизане от Ñайта" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "СмÑна на изображението за фон" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "Фон" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Може да качите лого за групата ви." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "Вкл." -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "Изкл." -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "СмÑна на цветовете" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Съдържание" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "Страничен панел" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "ТекÑÑ‚" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "СпиÑък" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -927,7 +932,7 @@ msgstr "" msgid "Save" msgstr "Запазване" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1370,20 +1375,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Грешка при обновÑване на потребителÑ." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "Грешка при запиÑване наÑтройките за Twitter" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "ÐаÑтройките Ñа запазени." @@ -1699,7 +1704,7 @@ msgstr "Лично Ñъобщение" msgid "Optionally add a personal message to the invitation." msgstr "Може да добавите и лично Ñъобщение към поканата." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Прати" @@ -1806,11 +1811,11 @@ msgstr "Грешка при проÑледÑване — потребителÑÑ msgid "%s left group %s" msgstr "%s напуÑна групата %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Вече Ñте влезли." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Ðевалидно Ñъдържание на бележка" @@ -2022,8 +2027,8 @@ msgstr "Свързване" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Ðеподдържан формат на данните" @@ -4403,39 +4408,53 @@ msgstr "Уведомлението е включено." msgid "Can't turn on notification." msgstr "Грешка при включване на уведомлението." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Грешка при отбелÑзване като любима." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Ðе Ñте абонирани за този профил" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Вече Ñте абонирани за Ñледните потребители:" msgstr[1] "Вече Ñте абонирани за Ñледните потребители:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Грешка при абониране на друг потребител за ваÑ." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Грешка при абониране на друг потребител за ваÑ." msgstr[1] "Грешка при абониране на друг потребител за ваÑ." -#: lib/command.php:636 +#: lib/command.php:667 msgid "You are not a member of any groups." msgstr "Ðе членувате в нито една група." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ðе членувате в тази група." msgstr[1] "Ðе членувате в тази група." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4454,6 +4473,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4516,11 +4536,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Можете да качите личен аватар тук." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4978,7 +4994,7 @@ msgstr "Изпращане на прÑко Ñъобщеие" msgid "To" msgstr "До" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Ðалични знаци" @@ -4991,11 +5007,11 @@ msgstr "Изпращане на бележка" msgid "What's up, %s?" msgstr "Какво Ñтава, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5272,7 +5288,12 @@ msgstr "Грешка при абониране на друг потребитеРmsgid "Not subscribed!" msgstr "Ðе Ñте абонирани!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Грешка при изтриване на абонамента." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Грешка при изтриване на абонамента." diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po index 23102cfb1..290866b5c 100644 --- a/locale/ca/LC_MESSAGES/statusnet.po +++ b/locale/ca/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:11+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:04+0000\n" "Language-Team: Catalan\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ca\n" "X-Message-Group: out-statusnet\n" @@ -80,6 +80,8 @@ msgstr "Canal dels amics de %s (Atom)" msgid "" "This is the timeline for %s and friends but no one has posted anything yet." msgstr "" +"Aquesta és la lÃnia temporal de %s i amics, però ningú hi ha enviat res " +"encara." #: actions/all.php:132 #, php-format @@ -183,7 +185,12 @@ msgstr "L'usuari no té perfil." msgid "Could not save profile." msgstr "No s'ha pogut guardar el perfil." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "No podeu suprimir els usuaris." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Ha fallat el bloqueig d'usuari." @@ -196,9 +203,9 @@ msgid "No message text!" msgstr "No hi ha text al missatge!" #: actions/apidirectmessagenew.php:135 actions/newmessage.php:150 -#, fuzzy, php-format +#, php-format msgid "That's too long. Max message size is %d chars." -msgstr "És massa llarg. Mà xim del missatge és 140 carà cters." +msgstr "És massa llarg. La mida mà xima del missatge és %d carà cters." #: actions/apidirectmessagenew.php:146 msgid "Recipient user not found." @@ -251,9 +258,8 @@ msgid "No status found with that ID." msgstr "No s'ha trobat cap estatus amb aquesta ID." #: actions/apifavoritecreate.php:119 -#, fuzzy msgid "This status is already a favorite!" -msgstr "Aquesta nota ja és favorita." +msgstr "Aquest estat ja és un preferit!" #: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 msgid "Could not create favorite." @@ -266,7 +272,7 @@ msgstr "Aquesta notificació no és un favorit!" #: actions/apifavoritedestroy.php:134 actions/disfavor.php:87 msgid "Could not delete favorite." -msgstr "No pots eliminar favorits." +msgstr "No s'ha pogut suprimir el preferit." #: actions/apifriendshipscreate.php:109 msgid "Could not follow user: User not found." @@ -292,9 +298,8 @@ msgid "Two user ids or screen_names must be supplied." msgstr "Dos ids d'usuari o screen_names has de ser substituïts." #: actions/apifriendshipsshow.php:135 -#, fuzzy msgid "Could not determine source user." -msgstr "No s'ha pogut recuperar la conversa pública." +msgstr "No s'ha pogut determinar l'usuari d'origen." #: actions/apifriendshipsshow.php:143 #, fuzzy @@ -352,9 +357,9 @@ msgstr "Hi ha massa à lies! Mà xim %d." #: actions/apigroupcreate.php:264 actions/editgroup.php:224 #: actions/newgroup.php:168 -#, fuzzy, php-format +#, php-format msgid "Invalid alias: \"%s\"" -msgstr "Etiqueta no và lida: \"%s\"" +msgstr "L'à lies no és và lid «%s»" #: actions/apigroupcreate.php:273 actions/editgroup.php:228 #: actions/newgroup.php:172 @@ -448,9 +453,8 @@ msgid "Max notice size is %d chars, including attachment URL." msgstr "" #: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261 -#, fuzzy msgid "Unsupported format." -msgstr "Format d'imatge no suportat." +msgstr "El format no està implementat." #: actions/apitimelinefavorites.php:107 #, php-format @@ -573,7 +577,7 @@ msgstr "Crop" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -658,9 +662,8 @@ msgid "Unblock this user" msgstr "Desbloquejar aquest usuari" #: actions/block.php:69 -#, fuzzy msgid "You already blocked that user." -msgstr "Ja havies bloquejat aquest usuari." +msgstr "Ja heu blocat l'usuari." #: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160 msgid "Block user" @@ -696,9 +699,8 @@ msgid "Failed to save block information." msgstr "Error al guardar la informació del block." #: actions/bookmarklet.php:50 -#, fuzzy msgid "Post to " -msgstr "Foto" +msgstr "Envia a " #: actions/confirmaddress.php:75 msgid "No confirmation code." @@ -834,102 +836,100 @@ msgstr "Disseny" msgid "Design settings for this StatusNet site." msgstr "Parà metres de disseny d'aquest lloc StatusNet." -#: actions/designadminpanel.php:270 -#, fuzzy +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." -msgstr "Mida invà lida." +msgstr "L'URL del logotip no és và lid." -#: actions/designadminpanel.php:274 -#, fuzzy, php-format +#: actions/designadminpanel.php:279 +#, php-format msgid "Theme not available: %s" -msgstr "Aquesta pà gina no està disponible en " +msgstr "El tema no és disponible: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "Canvia el logotip" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "Logotip del lloc" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "Canvia el tema" -#: actions/designadminpanel.php:399 -#, fuzzy +#: actions/designadminpanel.php:404 msgid "Site theme" -msgstr "AvÃs del lloc" +msgstr "Tema del lloc" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "Tema del lloc." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Canvia la imatge de fons" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "Fons" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Pots pujar una imatge de logo per al grup." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" -msgstr "" +msgstr "Activada" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" -msgstr "" +msgstr "Desactivada" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." -msgstr "" +msgstr "Activa o desactiva la imatge de fons." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" -msgstr "" +msgstr "Posa en mosaic la imatge de fons" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Canvia els colors" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Contingut" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "Barra lateral" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "Enllaços" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -939,7 +939,7 @@ msgstr "" msgid "Save" msgstr "Guardar" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "Desa el disseny" @@ -949,7 +949,7 @@ msgstr "Aquesta notificació no és un favorit!" #: actions/disfavor.php:94 msgid "Add to favorites" -msgstr "Afegir a favorits" +msgstr "Afegeix als preferits" #: actions/doc.php:69 msgid "No such document." @@ -974,18 +974,17 @@ msgid "Use this form to edit the group." msgstr "Utilitza aquest formulari per editar el grup." #: actions/editgroup.php:201 actions/newgroup.php:145 -#, fuzzy, php-format +#, php-format msgid "description is too long (max %d chars)." -msgstr "la descripció és massa llarga (mà x. 140 carà cters)." +msgstr "la descripció és massa llarga (mà x. %d carà cters)." #: actions/editgroup.php:253 msgid "Could not update group." msgstr "No s'ha pogut actualitzar el grup." #: actions/editgroup.php:259 classes/User_group.php:390 -#, fuzzy msgid "Could not create aliases." -msgstr "No es pot crear favorit." +msgstr "No s'han pogut crear els à lies." #: actions/editgroup.php:269 msgid "Options saved." @@ -1007,13 +1006,13 @@ msgstr "Adreça" #: actions/emailsettings.php:105 msgid "Current confirmed email address." -msgstr "Correu electrònic confirmat actualment." +msgstr "Adreça electrònica confirmada actualment." #: actions/emailsettings.php:107 actions/emailsettings.php:140 #: actions/imsettings.php:108 actions/smssettings.php:115 #: actions/smssettings.php:158 msgid "Remove" -msgstr "Eliminar" +msgstr "Suprimeix" #: actions/emailsettings.php:113 msgid "" @@ -1026,7 +1025,7 @@ msgstr "" #: actions/emailsettings.php:117 actions/imsettings.php:120 #: actions/smssettings.php:126 msgid "Cancel" -msgstr "Cancel·lar" +msgstr "Cancel·la" #: actions/emailsettings.php:121 msgid "Email Address" @@ -1039,7 +1038,7 @@ msgstr "Correu electrònic, com Email address, like \"UserName@example.org\"" #: actions/emailsettings.php:126 actions/imsettings.php:133 #: actions/smssettings.php:145 msgid "Add" -msgstr "Afegir" +msgstr "Afegeix" #: actions/emailsettings.php:133 actions/smssettings.php:152 msgid "Incoming email" @@ -1048,7 +1047,7 @@ msgstr "Correu electrònic entrant" #: actions/emailsettings.php:138 actions/smssettings.php:157 msgid "Send email to this address to post new notices." msgstr "" -"Enviar correu electrònic a aquesta direcció per publicar noves notificacions." +"Envia correu electrònic a aquesta adreça per publicar noves notificacions." #: actions/emailsettings.php:145 actions/smssettings.php:162 msgid "Make a new email address for posting to; cancels the old one." @@ -1255,7 +1254,7 @@ msgstr "Sense adjuncions" #: actions/file.php:51 msgid "No uploaded attachments" -msgstr "" +msgstr "No s'ha pujat cap adjunció" #: actions/finishremotesubscribe.php:69 msgid "Not expecting this response!" @@ -1299,9 +1298,8 @@ msgid "No such group." msgstr "No s'ha trobat el grup." #: actions/getfile.php:75 -#, fuzzy msgid "No such file." -msgstr "No existeix aquest avÃs." +msgstr "No existeix el fitxer." #: actions/getfile.php:79 msgid "Cannot read file." @@ -1384,20 +1382,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "No s'ha pogut actualitzar l'usuari." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "No s'ha pogut guardar la teva configuració de Twitter!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Preferències de sincronització guardades." @@ -1447,7 +1445,7 @@ msgstr "Admin" #: actions/groupmembers.php:346 lib/blockform.php:69 msgid "Block" -msgstr "Bloquejar" +msgstr "Bloca" #: actions/groupmembers.php:441 #, fuzzy @@ -1724,9 +1722,9 @@ msgstr "Missatge personal" msgid "Optionally add a personal message to the invitation." msgstr "Opcionalment pots afegir un missatge a la invitació." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" -msgstr "Enviar" +msgstr "Envia" #: actions/invite.php:226 #, php-format @@ -1830,11 +1828,11 @@ msgstr "No s'ha pogut eliminar l'usuari %s del grup %s" msgid "%s left group %s" msgstr "%s ha abandonat el grup %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Ja està s connectat." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "El contingut de l'avÃs és invà lid" @@ -1937,7 +1935,7 @@ msgstr "Nou missatge" #: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:367 msgid "You can't send a message to this user." -msgstr "No pots enviar un missatge a aquest usuari." +msgstr "No podeu enviar un misssatge a aquest usuari." #: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:351 #: lib/command.php:424 @@ -2046,10 +2044,10 @@ msgstr "tipus de contingut " #: actions/oembed.php:160 msgid "Only " -msgstr "" +msgstr "Només " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Format de data no suportat." @@ -2071,7 +2069,7 @@ msgstr "Gestionar altres và ries opcions." #: actions/othersettings.php:108 msgid " (free service)" -msgstr "" +msgstr " (servei gratuït)" #: actions/othersettings.php:116 msgid "Shorten URLs with" @@ -2088,7 +2086,7 @@ msgstr "Configuració del perfil" #: actions/othersettings.php:123 msgid "Show or hide profile designs." -msgstr "" +msgstr "Mostra o amaga els dissenys de perfil." #: actions/othersettings.php:153 msgid "URL shortening service is too long (max 50 chars)." @@ -2210,9 +2208,8 @@ msgid "Path" msgstr "CamÃ" #: actions/pathsadminpanel.php:216 -#, fuzzy msgid "Site path" -msgstr "AvÃs del lloc" +msgstr "Camà del lloc" #: actions/pathsadminpanel.php:220 msgid "Path to locales" @@ -2228,11 +2225,11 @@ msgstr "Tema" #: actions/pathsadminpanel.php:232 msgid "Theme server" -msgstr "" +msgstr "Servidor dels temes" #: actions/pathsadminpanel.php:236 msgid "Theme path" -msgstr "" +msgstr "Camà dels temes" #: actions/pathsadminpanel.php:240 msgid "Theme directory" @@ -3789,11 +3786,11 @@ msgstr "" #: actions/useradminpanel.php:265 msgid "Sessions" -msgstr "" +msgstr "Sessions" #: actions/useradminpanel.php:270 msgid "Handle sessions" -msgstr "" +msgstr "Gestiona les sessions" #: actions/useradminpanel.php:272 msgid "Whether to handle sessions ourselves." @@ -3823,9 +3820,8 @@ msgstr "" "avisos de ningú, clica \"Cancel·lar\"." #: actions/userauthorization.php:188 -#, fuzzy msgid "License" -msgstr "llicència." +msgstr "Llicència" #: actions/userauthorization.php:209 msgid "Accept" @@ -4033,9 +4029,9 @@ msgid "Could not set group membership." msgstr "No s'ha pogut establir la pertinença d'aquest grup." #: classes/User.php:347 -#, fuzzy, php-format +#, php-format msgid "Welcome to %1$s, @%2$s!" -msgstr "Missatge per a %1$s a %2$s" +msgstr "Us donem la benvinguda a %1$s, @%2$s!" #: lib/accountsettingsaction.php:108 msgid "Change your profile settings" @@ -4105,9 +4101,8 @@ msgid "Connect to services" msgstr "No s'ha pogut redirigir al servidor: %s" #: lib/action.php:440 -#, fuzzy msgid "Change site configuration" -msgstr "Navegació primà ria del lloc" +msgstr "Canvia la configuració del lloc" #: lib/action.php:444 lib/subgroupnav.php:105 msgid "Invite" @@ -4253,9 +4248,8 @@ msgid "There was a problem with your session token." msgstr "Ha ocorregut algun problema amb la teva sessió." #: lib/adminpanelaction.php:96 -#, fuzzy msgid "You cannot make changes to this site." -msgstr "No pots enviar un missatge a aquest usuari." +msgstr "No podeu fer canvis al lloc." #: lib/adminpanelaction.php:195 #, fuzzy @@ -4395,9 +4389,9 @@ msgid "Notice too long - maximum is %d characters, you sent %d" msgstr "Missatge massa llarg - mà xim és 140 carà cters, tu has enviat %d" #: lib/command.php:439 -#, fuzzy, php-format +#, php-format msgid "Reply to %s sent" -msgstr "respondre a aquesta nota" +msgstr "S'ha enviat la resposta a %s" #: lib/command.php:441 #, fuzzy @@ -4442,40 +4436,53 @@ msgstr "Notificacions on." msgid "Can't turn on notification." msgstr "No es poden posar en on les notificacions." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "No s'han pogut crear els à lies." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "No està s subscrit a aquest perfil." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ja està s subscrit a aquests usuaris:" msgstr[1] "Ja està s subscrit a aquests usuaris:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "No pots subscriure a un altre a tu mateix." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "No pots subscriure a un altre a tu mateix." msgstr[1] "No pots subscriure a un altre a tu mateix." -#: lib/command.php:636 -#, fuzzy +#: lib/command.php:667 msgid "You are not a member of any groups." -msgstr "No ets membre d'aquest grup." +msgstr "No sou membre de cap grup." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "No sou un membre del grup." msgstr[1] "No sou un membre del grup." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4494,6 +4501,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4514,9 +4522,8 @@ msgid "" msgstr "" #: lib/common.php:199 -#, fuzzy msgid "No configuration file found. " -msgstr "Cap codi de confirmació." +msgstr "No s'ha trobat cap fitxer de configuració. " #: lib/common.php:200 msgid "I looked for configuration files in the following places: " @@ -4527,9 +4534,8 @@ msgid "You may wish to run the installer to fix this." msgstr "" #: lib/common.php:202 -#, fuzzy msgid "Go to the installer." -msgstr "Accedir a aquest lloc" +msgstr "Vés a l'instal·lador." #: lib/connectsettingsaction.php:110 msgid "IM" @@ -4558,11 +4564,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Pots pujar el teu avatar personal." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4657,9 +4659,8 @@ msgid "Group" msgstr "Grup" #: lib/groupnav.php:101 -#, fuzzy msgid "Blocked" -msgstr "Bloquejar" +msgstr "Blocat" #: lib/groupnav.php:102 #, fuzzy, php-format @@ -4771,9 +4772,8 @@ msgid "" msgstr "" #: lib/mailbox.php:227 lib/noticelist.php:452 -#, fuzzy msgid "from" -msgstr " de " +msgstr "de" #: lib/mail.php:172 msgid "Email address confirmation" @@ -5027,7 +5027,7 @@ msgstr "Enviar notificació directa" msgid "To" msgstr "A" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Carà cters disponibles" @@ -5040,13 +5040,13 @@ msgstr "Enviar notificació" msgid "What's up, %s?" msgstr "Què tal, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" -msgstr "" +msgstr "Adjunta" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" -msgstr "" +msgstr "Adjunta un fitxer" #: lib/noticelist.php:403 #, php-format @@ -5135,7 +5135,7 @@ msgstr "Respostes" #: lib/personalgroupnav.php:114 msgid "Favorites" -msgstr "Favorits" +msgstr "Preferits" #: lib/personalgroupnav.php:124 msgid "Inbox" @@ -5263,14 +5263,12 @@ msgid "More..." msgstr "Més…" #: lib/silenceform.php:67 -#, fuzzy msgid "Silence" -msgstr "AvÃs del lloc" +msgstr "Silencia" #: lib/silenceform.php:78 -#, fuzzy msgid "Silence this user" -msgstr "Bloquejar aquest usuari" +msgstr "Silencia l'usuari" #: lib/subgroupnav.php:83 #, php-format @@ -5322,7 +5320,12 @@ msgstr "No pots subscriure a un altre a tu mateix." msgid "Not subscribed!" msgstr "No està s subscrit!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "No s'ha pogut eliminar la subscripció." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "No s'ha pogut eliminar la subscripció." @@ -5345,12 +5348,11 @@ msgstr "Desbloquejar aquest usuari" #: lib/unsilenceform.php:67 msgid "Unsilence" -msgstr "" +msgstr "Dessilencia" #: lib/unsilenceform.php:78 -#, fuzzy msgid "Unsilence this user" -msgstr "Desbloquejar aquest usuari" +msgstr "Dessilencia l'usuari" #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137 msgid "Unsubscribe from this user" diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po index f1e002a9d..6d74b1761 100644 --- a/locale/cs/LC_MESSAGES/statusnet.po +++ b/locale/cs/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:14+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:08+0000\n" "Language-Team: Czech\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: cs\n" "X-Message-Group: out-statusnet\n" @@ -184,7 +184,12 @@ msgstr "Uživatel nemá profil." msgid "Could not save profile." msgstr "Nelze uložit profil" -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Nelze aktualizovat uživatele" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -265,7 +270,7 @@ msgstr "" #: actions/apifavoritedestroy.php:134 actions/disfavor.php:87 msgid "Could not delete favorite." -msgstr "" +msgstr "Nelze smazat oblÃbenou položku." #: actions/apifriendshipscreate.php:109 msgid "Could not follow user: User not found." @@ -574,7 +579,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -609,25 +614,22 @@ msgid "Failed updating avatar." msgstr "Nahrávánà obrázku selhalo." #: actions/avatarsettings.php:387 -#, fuzzy msgid "Avatar deleted." -msgstr "Obrázek nahrán" +msgstr "Avatar smazán." #: actions/blockedfromgroup.php:73 actions/editgroup.php:84 #: actions/groupdesignsettings.php:84 actions/grouplogo.php:86 #: actions/groupmembers.php:76 actions/grouprss.php:91 #: actions/joingroup.php:76 actions/showgroup.php:121 -#, fuzzy msgid "No nickname" -msgstr "Žádná pÅ™ezdÃvka." +msgstr "Žádná pÅ™ezdÃvka" #: actions/blockedfromgroup.php:80 actions/editgroup.php:96 #: actions/groupbyid.php:83 actions/groupdesignsettings.php:97 #: actions/grouplogo.php:99 actions/groupmembers.php:83 #: actions/grouprss.php:98 actions/joingroup.php:83 actions/showgroup.php:137 -#, fuzzy msgid "No such group" -msgstr "Žádné takové oznámenÃ." +msgstr "Žádná taková skupina" #: actions/blockedfromgroup.php:90 #, fuzzy, php-format @@ -677,7 +679,7 @@ msgstr "" #: actions/block.php:143 actions/deletenotice.php:145 #: actions/deleteuser.php:147 actions/groupblock.php:178 msgid "No" -msgstr "" +msgstr "Ne" #: actions/block.php:143 actions/deleteuser.php:147 #, fuzzy @@ -687,12 +689,11 @@ msgstr "Žádný takový uživatel." #: actions/block.php:144 actions/deletenotice.php:146 #: actions/deleteuser.php:148 actions/groupblock.php:179 msgid "Yes" -msgstr "" +msgstr "Ano" #: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80 -#, fuzzy msgid "Block this user" -msgstr "Žádný takový uživatel." +msgstr "Zablokovat tohoto uživatele" #: actions/block.php:162 msgid "Failed to save block information." @@ -770,7 +771,7 @@ msgstr "NepÅ™ihlášen" #: actions/deletenotice.php:71 msgid "Can't delete this notice." -msgstr "" +msgstr "Toto oznámenà nelze odstranit." #: actions/deletenotice.php:103 msgid "" @@ -793,7 +794,7 @@ msgstr "Žádné takové oznámenÃ." #: actions/deletenotice.php:146 lib/noticelist.php:550 msgid "Delete this notice" -msgstr "" +msgstr "Odstranit toto oznámenÃ" #: actions/deletenotice.php:157 msgid "There was a problem with your session token. Try again, please." @@ -820,122 +821,118 @@ msgid "" msgstr "" #: actions/deleteuser.php:148 lib/deleteuserform.php:77 -#, fuzzy msgid "Delete this user" -msgstr "Žádný takový uživatel." +msgstr "Odstranit tohoto uživatele" #: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124 #: lib/adminpanelaction.php:302 lib/groupnav.php:119 msgid "Design" -msgstr "" +msgstr "Vzhled" #: actions/designadminpanel.php:73 msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Neplatná velikost" -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Tato stránka nenà k dispozici v typu média která pÅ™ijÃmáte." -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "ZmÄ›nit heslo" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Nové sdÄ›lenÃ" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "ZmÄ›nit" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Nové sdÄ›lenÃ" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" -msgstr "" +msgstr "PozadÃ" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Je to pÅ™ÃliÅ¡ dlouhé. Maximálnà sdÄ›lenà délka je 140 znaků" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 -#, fuzzy +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" -msgstr "ZmÄ›nit heslo" +msgstr "ZmÄ›nit barvy" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 -#, fuzzy +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" -msgstr "PÅ™ipojit" +msgstr "Obsah" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Hledat" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 -#, fuzzy +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" -msgstr "PÅ™ihlásit" +msgstr "Odkazy" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -945,7 +942,7 @@ msgstr "" msgid "Save" msgstr "Uložit" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -955,7 +952,7 @@ msgstr "" #: actions/disfavor.php:94 msgid "Add to favorites" -msgstr "" +msgstr "PÅ™idat do oblÃbených" #: actions/doc.php:69 msgid "No such document." @@ -964,7 +961,7 @@ msgstr "Žádný takový dokument." #: actions/editgroup.php:56 #, php-format msgid "Edit %s group" -msgstr "" +msgstr "Upravit %s skupinu" #: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65 msgid "You must be logged in to create a group." @@ -995,13 +992,12 @@ msgid "Could not create aliases." msgstr "Nelze uložin informace o obrázku" #: actions/editgroup.php:269 -#, fuzzy msgid "Options saved." -msgstr "Nastavenà uloženo" +msgstr "Nastavenà uloženo." #: actions/emailsettings.php:60 msgid "Email Settings" -msgstr "" +msgstr "Nastavenà E-mailu" #: actions/emailsettings.php:71 #, php-format @@ -1061,7 +1057,7 @@ msgstr "" #: actions/emailsettings.php:148 actions/smssettings.php:164 msgid "New" -msgstr "" +msgstr "Nový" #: actions/emailsettings.php:153 actions/imsettings.php:139 #: actions/smssettings.php:169 @@ -1244,9 +1240,8 @@ msgid "No notice id" msgstr "Nové sdÄ›lenÃ" #: actions/file.php:38 -#, fuzzy msgid "No notice" -msgstr "Nové sdÄ›lenÃ" +msgstr "Žádné oznámenÃ" #: actions/file.php:42 msgid "No attachments" @@ -1385,26 +1380,26 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Nelze aktualizovat uživatele" -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Nastavenà uloženo" #: actions/grouplogo.php:139 actions/grouplogo.php:192 msgid "Group logo" -msgstr "" +msgstr "Logo skupiny" #: actions/grouplogo.php:150 #, php-format @@ -1502,7 +1497,7 @@ msgstr "" #: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98 msgid "Groups" -msgstr "" +msgstr "Skupiny" #: actions/groups.php:64 #, php-format @@ -1712,7 +1707,7 @@ msgstr "" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Odeslat" @@ -1794,11 +1789,11 @@ msgstr "Nelze vytvoÅ™it OpenID z: %s" msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Již pÅ™ihlášen" -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Neplatný obsah sdÄ›lenÃ" @@ -1885,7 +1880,7 @@ msgstr "" #: actions/newgroup.php:53 msgid "New group" -msgstr "" +msgstr "Nová skupina" #: actions/newgroup.php:110 msgid "Use this form to create a new group." @@ -2008,8 +2003,8 @@ msgstr "PÅ™ipojit" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -2313,9 +2308,8 @@ msgid "Describe yourself and your interests in %d chars" msgstr "PopiÅ¡ sebe a své zájmy ve 140 znacÃch" #: actions/profilesettings.php:125 actions/register.php:463 -#, fuzzy msgid "Describe yourself and your interests" -msgstr "PopiÅ¡ sebe a své zájmy ve 140 znacÃch" +msgstr "PopiÅ¡te sebe a své zájmy" #: actions/profilesettings.php:127 actions/register.php:465 msgid "Bio" @@ -2345,7 +2339,7 @@ msgstr "" #: actions/profilesettings.php:144 actions/siteadminpanel.php:307 msgid "Language" -msgstr "" +msgstr "Jazyk" #: actions/profilesettings.php:145 msgid "Preferred language" @@ -2629,7 +2623,7 @@ msgstr "Chyba v ověřovacÃm kódu" #: actions/register.php:112 msgid "Registration successful" -msgstr "" +msgstr "Registrace úspěšná" #: actions/register.php:114 actions/register.php:502 lib/action.php:455 #: lib/logingroupnav.php:85 @@ -2921,9 +2915,8 @@ msgstr "" #: actions/showgroup.php:274 actions/tagother.php:128 #: actions/userauthorization.php:179 lib/userprofile.php:194 -#, fuzzy msgid "Note" -msgstr "SdÄ›lenÃ" +msgstr "Poznámka" #: actions/showgroup.php:284 lib/groupeditform.php:184 msgid "Aliases" @@ -3392,7 +3385,7 @@ msgstr "" #: actions/smssettings.php:306 msgid "No phone number." -msgstr "" +msgstr "Žádné telefonnà ÄÃslo." #: actions/smssettings.php:311 msgid "No carrier selected." @@ -3759,7 +3752,7 @@ msgstr "" #: actions/userauthorization.php:188 msgid "License" -msgstr "" +msgstr "Licence" #: actions/userauthorization.php:209 msgid "Accept" @@ -4074,9 +4067,8 @@ msgid "Help" msgstr "NápovÄ›da" #: lib/action.php:461 -#, fuzzy msgid "Help me!" -msgstr "NápovÄ›da" +msgstr "Pomoci mi!" #: lib/action.php:464 lib/searchaction.php:127 msgid "Search" @@ -4233,9 +4225,8 @@ msgid "Author" msgstr "" #: lib/attachmentlist.php:278 -#, fuzzy msgid "Provider" -msgstr "Profil" +msgstr "Poskytovatel" #: lib/attachmentnoticesection.php:67 msgid "Notices where this attachment appears" @@ -4382,43 +4373,57 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Nelze uložin informace o obrázku" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Neodeslal jste nám profil" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Neodeslal jste nám profil" msgstr[1] "Neodeslal jste nám profil" msgstr[2] "" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Vzdálený odbÄ›r" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Vzdálený odbÄ›r" msgstr[1] "Vzdálený odbÄ›r" msgstr[2] "" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Neodeslal jste nám profil" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Neodeslal jste nám profil" msgstr[1] "Neodeslal jste nám profil" msgstr[2] "" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4437,6 +4442,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4500,11 +4506,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Je to pÅ™ÃliÅ¡ dlouhé. Maximálnà sdÄ›lenà délka je 140 znaků" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4616,9 +4618,8 @@ msgid "Edit %s group properties" msgstr "" #: lib/groupnav.php:113 -#, fuzzy msgid "Logo" -msgstr "Odhlásit" +msgstr "Logo" #: lib/groupnav.php:114 #, php-format @@ -4691,9 +4692,8 @@ msgid "[%s]" msgstr "" #: lib/joinform.php:114 -#, fuzzy msgid "Join" -msgstr "PÅ™ihlásit" +msgstr "PÅ™idat se" #: lib/leaveform.php:114 #, fuzzy @@ -4773,9 +4773,9 @@ msgstr "" "%4$s.\n" #: lib/mail.php:254 -#, fuzzy, php-format +#, php-format msgid "Location: %s\n" -msgstr "UmÃstÄ›nà %s\n" +msgstr "UmÃstÄ›nÃ: %s\n" #: lib/mail.php:256 #, fuzzy, php-format @@ -4968,7 +4968,7 @@ msgstr "" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "6 a vÃce znaků" @@ -4983,11 +4983,11 @@ msgstr "Nové sdÄ›lenÃ" msgid "What's up, %s?" msgstr "Co se dÄ›je %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5077,7 +5077,7 @@ msgstr "OdpovÄ›di" #: lib/personalgroupnav.php:114 msgid "Favorites" -msgstr "" +msgstr "OblÃbené" #: lib/personalgroupnav.php:124 msgid "Inbox" @@ -5113,9 +5113,8 @@ msgid "Subscribers" msgstr "OdbÄ›ratelé" #: lib/profileaction.php:157 -#, fuzzy msgid "All subscribers" -msgstr "OdbÄ›ratelé" +msgstr "VÅ¡ichni odbÄ›ratelé" #: lib/profileaction.php:178 msgid "User ID" @@ -5267,7 +5266,12 @@ msgstr "" msgid "Not subscribed!" msgstr "NepÅ™ihlášen!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Nelze smazat odebÃránÃ" + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Nelze smazat odebÃránÃ" @@ -5306,13 +5310,12 @@ msgid "Unsubscribe" msgstr "Odhlásit" #: lib/userprofile.php:116 -#, fuzzy msgid "Edit Avatar" -msgstr "Obrázek" +msgstr "Upravit avatar" #: lib/userprofile.php:236 msgid "User actions" -msgstr "" +msgstr "Akce uživatele" #: lib/userprofile.php:248 #, fuzzy @@ -5329,7 +5332,7 @@ msgstr "" #: lib/userprofile.php:273 msgid "Message" -msgstr "" +msgstr "Zpráva" #: lib/userprofile.php:311 msgid "Moderate" @@ -5395,7 +5398,7 @@ msgstr "" #: scripts/maildaemon.php:53 msgid "Not a registered user." -msgstr "" +msgstr "Nenà registrovaný uživatel." #: scripts/maildaemon.php:57 msgid "Sorry, that is not your incoming email address." diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po index e68bc1fd4..c1d24f11d 100644 --- a/locale/de/LC_MESSAGES/statusnet.po +++ b/locale/de/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:18+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:11+0000\n" "Language-Team: German\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: out-statusnet\n" @@ -180,7 +180,12 @@ msgstr "Benutzer hat kein Profil." msgid "Could not save profile." msgstr "Konnte Profil nicht speichern." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Du kannst dich nicht selbst entfolgen!" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Blockieren des Benutzers fehlgeschlagen." @@ -320,13 +325,13 @@ msgstr "Ungültiger Nutzername." #: actions/register.php:217 msgid "Homepage is not a valid URL." msgstr "" -"Homepage ist kein gültiger URL. URL´s müssen ein Präfix wie http enthalten." +"Homepage ist keine gültige URL. URL’s müssen ein Präfix wie http enthalten." #: actions/apigroupcreate.php:205 actions/editgroup.php:198 #: actions/newgroup.php:142 actions/profilesettings.php:218 #: actions/register.php:220 msgid "Full name is too long (max 255 chars)." -msgstr "Ihr vollständiger Name ist zu lang (maximal 255 Zeichen)." +msgstr "Der vollständige Name ist zu lang (maximal 255 Zeichen)." #: actions/apigroupcreate.php:213 #, php-format @@ -374,7 +379,7 @@ msgstr "Du bist bereits Mitglied dieser Gruppe" #: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221 msgid "You have been blocked from that group by the admin." -msgstr "Der Admin dieser Gruppe hat Sie gesperrt." +msgstr "Der Admin dieser Gruppe hat dich gesperrt." #: actions/apigroupjoin.php:138 #, php-format @@ -498,7 +503,7 @@ msgstr "Nachrichten, die mit %s getagt sind" #: actions/apitimelinetag.php:107 actions/tagrss.php:64 #, php-format msgid "Updates tagged with %1$s on %2$s!" -msgstr "Updates mit %1$s getagt auf %2$s!" +msgstr "Aktualisierungen mit %1$s getagt auf %2$s!" #: actions/apiusershow.php:96 msgid "Not found." @@ -569,7 +574,7 @@ msgstr "Zuschneiden" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -686,9 +691,8 @@ msgid "Failed to save block information." msgstr "Konnte Blockierungsdaten nicht speichern." #: actions/bookmarklet.php:50 -#, fuzzy msgid "Post to " -msgstr "Foto" +msgstr "Versenden an " #: actions/confirmaddress.php:75 msgid "No confirmation code." @@ -731,7 +735,7 @@ msgstr "Adresse bestätigen" #: actions/confirmaddress.php:159 #, php-format msgid "The address \"%s\" has been confirmed for your account." -msgstr "Die Adresse „%s“\" wurde für dein Konto bestätigt." +msgstr "Die Adresse „%s“ wurde für dein Konto bestätigt." #: actions/conversation.php:99 msgid "Conversation" @@ -773,7 +777,7 @@ msgstr "Notiz löschen" #: actions/deletenotice.php:144 msgid "Are you sure you want to delete this notice?" -msgstr "Sind sie sicher, dass sie diese Nachricht löschen wollen?" +msgstr "Bist du sicher, dass du diese Nachricht löschen möchtest?" #: actions/deletenotice.php:145 msgid "Do not delete this notice" @@ -816,107 +820,104 @@ msgstr "" #: actions/designadminpanel.php:73 msgid "Design settings for this StatusNet site." -msgstr "" +msgstr "Design-Einstellungen für diese StatusNet-Website." -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "Ungültige URL für das Logo" -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "Theme nicht verfügbar: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "Logo ändern" -#: actions/designadminpanel.php:375 -#, fuzzy +#: actions/designadminpanel.php:380 msgid "Site logo" -msgstr "Einladen" +msgstr "Seitenlogo" -#: actions/designadminpanel.php:382 -#, fuzzy +#: actions/designadminpanel.php:387 msgid "Change theme" -msgstr "Ändern" +msgstr "Theme ändern" -#: actions/designadminpanel.php:399 -#, fuzzy +#: actions/designadminpanel.php:404 msgid "Site theme" -msgstr "Seitennachricht" +msgstr "Seitentheme" -#: actions/designadminpanel.php:400 -#, fuzzy +#: actions/designadminpanel.php:405 msgid "Theme for the site." -msgstr "Von der Seite abmelden" +msgstr "Theme dieser Seite." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Hintergrundbild ändern" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "Hintergrund" -#: actions/designadminpanel.php:422 -#, fuzzy, php-format +#: actions/designadminpanel.php:427 +#, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." -msgstr "Du kannst ein Logo für Deine Gruppe hochladen." +msgstr "" +"Du kannst ein Hintergrundbild für Deine Gruppe hochladen. Die maximale " +"Dateigröße beträgt %1$s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "An" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "Aus" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." -msgstr "" +msgstr "Hintergrundbild ein- oder ausschalten." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Farben ändern" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Inhalt" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 -#, fuzzy +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" -msgstr "Suchen" +msgstr "Seitenleiste" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "Links" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "Standard-Design wiederherstellen" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "Standard wiederherstellen" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -926,7 +927,7 @@ msgstr "Standard wiederherstellen" msgid "Save" msgstr "Speichern" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "Design speichern" @@ -993,7 +994,7 @@ msgstr "Adresse" #: actions/emailsettings.php:105 msgid "Current confirmed email address." -msgstr "Aktuelle bestätigte E-Mail Adresse" +msgstr "Aktuelle bestätigte E-Mail-Adresse." #: actions/emailsettings.php:107 actions/emailsettings.php:140 #: actions/imsettings.php:108 actions/smssettings.php:115 @@ -1115,8 +1116,8 @@ msgid "" "A confirmation code was sent to the email address you added. Check your " "inbox (and spam box!) for the code and instructions on how to use it." msgstr "" -"Ein Bestätigungscode wurde an die angegebene E-Mail Adresse geschickt. " -"Ãœberprüfen Sie Ihren Posteingang (auch den Spamordner!) für den Code und " +"Ein Bestätigungscode wurde an die angegebene E-Mail-Adresse geschickt. " +"Ãœberprüfe deinen Posteingang (auch den Spamordner!) für den Code und " "Anweisungen, wie dieser benutzt wird." #: actions/emailsettings.php:379 actions/imsettings.php:351 @@ -1126,7 +1127,7 @@ msgstr "Keine ausstehende Bestätigung, die abgebrochen werden kann." #: actions/emailsettings.php:383 actions/imsettings.php:355 msgid "That is the wrong IM address." -msgstr "Das ist die falsche IM Adresse." +msgstr "Das ist die falsche IM-Adresse." #: actions/emailsettings.php:395 actions/imsettings.php:367 #: actions/smssettings.php:386 @@ -1245,7 +1246,6 @@ msgid "Not expecting this response!" msgstr "Unerwartete Antwort!" #: actions/finishremotesubscribe.php:80 -#, fuzzy msgid "User being listened to does not exist." msgstr "Aufgeführte Nutzer existiert nicht." @@ -1258,19 +1258,16 @@ msgid "That user has blocked you from subscribing." msgstr "Dieser Benutzer erlaubt dir nicht ihn zu abonnieren." #: actions/finishremotesubscribe.php:110 -#, fuzzy msgid "You are not authorized." -msgstr "Nicht autorisiert." +msgstr "Du bist nicht autorisiert." #: actions/finishremotesubscribe.php:113 -#, fuzzy msgid "Could not convert request token to access token." msgstr "Konnte Anfrage-Token nicht in Zugriffs-Token umwandeln." #: actions/finishremotesubscribe.php:118 -#, fuzzy msgid "Remote service uses unknown version of OMB protocol." -msgstr "Unbekannte OMB-Protokollversion." +msgstr "Service nutzt unbekannte OMB-Protokollversion." #: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306 msgid "Error updating remote profile" @@ -1287,9 +1284,8 @@ msgid "No such file." msgstr "Datei nicht gefunden." #: actions/getfile.php:79 -#, fuzzy msgid "Cannot read file." -msgstr "Daten verloren." +msgstr "Datei konnte nicht gelesen werden." #: actions/groupblock.php:71 actions/groupunblock.php:71 #: actions/makeadmin.php:71 actions/subedit.php:46 @@ -1321,9 +1317,8 @@ msgid "User is not a member of group." msgstr "Nutzer ist kein Mitglied dieser Gruppe." #: actions/groupblock.php:136 actions/groupmembers.php:314 -#, fuzzy msgid "Block user from group" -msgstr "Benutzer blockieren" +msgstr "Benutzerzugang zu der Gruppe blockieren" #: actions/groupblock.php:162 #, php-format @@ -1334,9 +1329,8 @@ msgid "" msgstr "" #: actions/groupblock.php:178 -#, fuzzy msgid "Do not block this user from this group" -msgstr "Liste der Benutzer in dieser Gruppe." +msgstr "Diesen Benutzerzugang nicht für diese Gruppe blockieren." #: actions/groupblock.php:179 msgid "Block this user from this group" @@ -1344,7 +1338,7 @@ msgstr "Diesen Nutzer von der Gruppe sperren" #: actions/groupblock.php:196 msgid "Database error blocking user from group." -msgstr "" +msgstr "Datenbank Fehler beim Versuch den Nutzer aus der Gruppe zu blockieren." #: actions/groupbyid.php:74 msgid "No ID" @@ -1356,7 +1350,7 @@ msgstr "Du musst angemeldet sein, um eine Gruppe zu bearbeiten." #: actions/groupdesignsettings.php:141 msgid "Group design" -msgstr "Gruppen Design" +msgstr "Gruppen-Design" #: actions/groupdesignsettings.php:152 msgid "" @@ -1364,38 +1358,36 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 -#, fuzzy +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." -msgstr "Konnte Benutzerdaten nicht aktualisieren." +msgstr "Konnte dein Design nicht aktualisieren." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 -#, fuzzy msgid "Unable to save your design settings!" -msgstr "Konnte Twitter Einstellungen nicht speichern!" +msgstr "Konnte die Design-Einstellungen nicht speichern!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." -msgstr "Design Einstellungen gespeichert." +msgstr "Design-Einstellungen gespeichert." #: actions/grouplogo.php:139 actions/grouplogo.php:192 msgid "Group logo" msgstr "Gruppen-Logo" #: actions/grouplogo.php:150 -#, fuzzy, php-format +#, php-format msgid "" "You can upload a logo image for your group. The maximum file size is %s." -msgstr "Du kannst ein Logo für Deine Gruppe hochladen." +msgstr "" +"Du kannst ein Logo für Deine Gruppe hochladen. Die maximale Dateigröße ist %" +"s." #: actions/grouplogo.php:362 -#, fuzzy msgid "Pick a square area of the image to be the logo." -msgstr "" -"Wähle eine quadratische Fläche aus dem Bild, um dein Avatar zu speichern" +msgstr "Wähle eine quadratische Fläche aus dem Bild, um das Logo zu speichern." #: actions/grouplogo.php:396 msgid "Logo updated." @@ -1445,12 +1437,12 @@ msgid "Updates from members of %1$s on %2$s!" msgstr "Aktualisierungen von %1$s auf %2$s!" #: actions/groupsearch.php:52 -#, fuzzy, php-format +#, php-format msgid "" "Search for groups on %%site.name%% by their name, location, or description. " "Separate the terms by spaces; they must be 3 characters or more." msgstr "" -"Durchsuche die Namen, Orten oder Interessen der Nutzer von %%site.name%%. " +"Durchsuche die Namen, Orte oder Interessen der Nutzer von %%site.name%%. " "Trenne mehrere Suchbegriffe durch Leerzeichen. Ein Suchbegriff muss aus " "mindestens 3 Zeichen bestehen." @@ -1469,6 +1461,8 @@ msgid "" "If you can't find the group you're looking for, you can [create it](%%action." "newgroup%%) yourself." msgstr "" +"Wenn du die Gruppe die dich interessiert nicht finden kannst, dann [erstelle " +"sie](%%action.newgroup%%) doch einfach." #: actions/groupsearch.php:85 #, php-format @@ -1503,7 +1497,7 @@ msgstr "Neue Gruppe erstellen" #: actions/groupunblock.php:91 msgid "Only an admin can unblock group members." -msgstr "Nur Gruppen Administratoren können die Sperrung von Nutzern aufheben." +msgstr "Nur Administratoren können Gruppenmitglieder entsperren." #: actions/groupunblock.php:95 msgid "User is not blocked from group." @@ -1515,7 +1509,7 @@ msgstr "Fehler beim Freigeben des Benutzers." #: actions/imsettings.php:59 msgid "IM Settings" -msgstr "IM Einstellungen" +msgstr "IM-Einstellungen" #: actions/imsettings.php:70 #, php-format @@ -1527,9 +1521,8 @@ msgstr "" "senden. Stelle deine Adresse und Einstellungen unten ein." #: actions/imsettings.php:89 -#, fuzzy msgid "IM is not available." -msgstr "Diese Seite liegt in nicht verfügbar in einem " +msgstr "IM ist nicht verfügbar." #: actions/imsettings.php:106 msgid "Current confirmed Jabber/GTalk address." @@ -1542,12 +1535,12 @@ msgid "" "message with further instructions. (Did you add %s to your buddy list?)" msgstr "" "Warte auf Bestätigung dieser Adresse. Eine Nachricht mit weiteren Anweisung " -"sollte in deinem Jabber/GTalk Konto eingehen. (Hast du %s zu deiner " -"Freundeliste hinzugefügt?)" +"sollte in deinem Jabber/GTalk-Konto eingehen. (Hast du %s zu deiner " +"Freundesliste hinzugefügt?)" #: actions/imsettings.php:124 msgid "IM Address" -msgstr "IM Adresse" +msgstr "IM-Adresse" #: actions/imsettings.php:126 #, php-format @@ -1555,8 +1548,8 @@ msgid "" "Jabber or GTalk address, like \"UserName@example.org\". First, make sure to " "add %s to your buddy list in your IM client or on GTalk." msgstr "" -"Jabber- oder GoogleTalk-Adresse, z.B. \"UserName@example.org\". Aber " -"versichere dich zuerst, dass du %s in deine Kontaktliste in deinem IM " +"Jabber- oder GoogleTalk-Adresse, beispielsweise „Benutzername@example.org“. " +"Aber versichere dich zuerst, dass du %s in deine Kontaktliste in deinem IM-" "Programm oder GTalk aufgenommen hast." #: actions/imsettings.php:143 @@ -1565,7 +1558,7 @@ msgstr "Schicke mir Nachrichten mittels Jabber/GTalk." #: actions/imsettings.php:148 msgid "Post a notice when my Jabber/GTalk status changes." -msgstr "Schicke eine Nachricht, wenn sich mein Jabber/GTalk Status verändert." +msgstr "Schicke eine Nachricht, wenn sich mein Jabber/GTalk-Status verändert." #: actions/imsettings.php:153 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to." @@ -1603,7 +1596,7 @@ msgid "" "A confirmation code was sent to the IM address you added. You must approve %" "s for sending messages to you." msgstr "" -"Ein Bestätigungscode wurde an die IM Adresse geschickt, die du hinzugefügt " +"Ein Bestätigungscode wurde an die IM-Adresse geschickt, die du hinzugefügt " "hast. Du musst zulassen, dass %s dir Nachrichten schicken darf." #: actions/imsettings.php:387 @@ -1689,7 +1682,7 @@ msgstr "E-Mail-Adressen" #: actions/invite.php:189 msgid "Addresses of friends to invite (one per line)" msgstr "" -"Addressen von Freunden, die Du einladen möchtest. (Jeweils eine Addresse pro " +"Adressen von Freunden, die Du einladen möchtest. (Jeweils eine Adresse pro " "Zeile)" #: actions/invite.php:192 @@ -1702,7 +1695,7 @@ msgstr "" "Wenn du möchtest kannst du zu der Einladung eine persönliche Nachricht " "anfügen." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Senden" @@ -1807,28 +1800,27 @@ msgstr "Konnte Benutzer %s aus der Gruppe %s nicht entfernen" msgid "%s left group %s" msgstr "%s hat die Gruppe %s verlassen" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Bereits angemeldet." -#: actions/login.php:108 actions/login.php:118 -#, fuzzy +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." -msgstr "Ungültiger Nachrichteninhalt" +msgstr "Token ungültig oder abgelaufen." #: actions/login.php:146 msgid "Incorrect username or password." msgstr "Falscher Benutzername oder Passwort." #: actions/login.php:152 -#, fuzzy msgid "Error setting user. You are probably not authorized." -msgstr "Nicht autorisiert." +msgstr "" +"Fehler beim setzen des Benutzers. Du bist vermutlich nicht autorisiert." #: actions/login.php:207 actions/login.php:260 lib/action.php:458 #: lib/logingroupnav.php:79 msgid "Login" -msgstr "Einloggen" +msgstr "Anmelden" #: actions/login.php:246 msgid "Login to site" @@ -1862,18 +1854,17 @@ msgid "" "For security reasons, please re-enter your user name and password before " "changing your settings." msgstr "" -"Bitte geben Sie aus Sicherheitsgründen ihren Benutzernamen und ihr Passwort " -"ein, bevor die Änderungen an ihren Einstellungen übernommen werden." +"Bitte gebe aus Sicherheitsgründen deinen Benutzernamen und dein Passwort " +"ein, bevor die Änderungen an deinen Einstellungen übernommen werden." #: actions/login.php:289 -#, fuzzy, php-format +#, php-format msgid "" "Login with your username and password. Don't have a username yet? [Register]" "(%%action.register%%) a new account." msgstr "" "Melde dich mit Nutzernamen und Passwort an. Du hast noch keinen Nutzernamen? " -"[Registriere](%%action.register%%) ein neues Konto oder versuche es mit " -"[OpenID](%%action.openidlogin%%)." +"[Registriere](%%action.register%%) ein neues Konto." #: actions/makeadmin.php:91 msgid "Only an admin can make another user an admin." @@ -1882,7 +1873,7 @@ msgstr "Nur Administratoren können andere Nutzer zu Administratoren ernennen." #: actions/makeadmin.php:95 #, php-format msgid "%s is already an admin for group \"%s\"." -msgstr "%s ist bereits ein Administrator der Gruppe "%s"." +msgstr "%s ist bereits ein Administrator der Gruppe „%s“." #: actions/makeadmin.php:132 #, php-format @@ -1892,7 +1883,7 @@ msgstr "" #: actions/makeadmin.php:145 #, php-format msgid "Can't make %s an admin for group %s" -msgstr "" +msgstr "Konnte %s nicht zum Administrator der Gruppe %s machen" #: actions/microsummary.php:69 msgid "No current status" @@ -1965,9 +1956,9 @@ msgid "Text search" msgstr "Volltextsuche" #: actions/noticesearch.php:91 -#, fuzzy, php-format +#, php-format msgid "Search results for \"%s\" on %s" -msgstr "Suche im Stream nach \"%s\"" +msgstr "Suchergebnisse für „%s“ auf %s" #: actions/noticesearch.php:121 #, php-format @@ -1984,9 +1975,9 @@ msgid "" msgstr "" #: actions/noticesearchrss.php:96 -#, fuzzy, php-format +#, php-format msgid "Updates with \"%s\"" -msgstr "Updates von %1$s auf %2$s!" +msgstr "Aktualisierungen mit „%s“" #: actions/noticesearchrss.php:98 #, php-format @@ -2018,16 +2009,15 @@ msgid "%1$s's status on %2$s" msgstr "%1$s Status auf %2$s" #: actions/oembed.php:157 -#, fuzzy msgid "content type " -msgstr "Verbinden" +msgstr "Content-Typ " #: actions/oembed.php:160 msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Kein unterstütztes Datenformat." @@ -2060,9 +2050,8 @@ msgid "Automatic shortening service to use." msgstr "URL-Auto-Kürzungs-Dienst." #: actions/othersettings.php:122 -#, fuzzy msgid "View profile designs" -msgstr "Profil Einstellungen" +msgstr "Profil-Einstellungen ansehen" #: actions/othersettings.php:123 msgid "Show or hide profile designs." @@ -2070,7 +2059,7 @@ msgstr "" #: actions/othersettings.php:153 msgid "URL shortening service is too long (max 50 chars)." -msgstr "URL-Auto-Kürzungs-Dienst ist zu lange (max. 50 Zeichen)" +msgstr "URL-Auto-Kürzungs-Dienst ist zu lang (max. 50 Zeichen)." #: actions/outbox.php:58 #, php-format @@ -2157,9 +2146,9 @@ msgid "Path and server settings for this StatusNet site." msgstr "" #: actions/pathsadminpanel.php:140 -#, fuzzy, php-format +#, php-format msgid "Theme directory not readable: %s" -msgstr "Diese Seite liegt in nicht verfügbar in einem " +msgstr "Theme-Verzeichnis nicht lesbar: %s" #: actions/pathsadminpanel.php:146 #, php-format @@ -2178,18 +2167,16 @@ msgstr "" #: actions/pathsadminpanel.php:212 actions/siteadminpanel.php:58 #: lib/adminpanelaction.php:299 -#, fuzzy msgid "Site" -msgstr "Einladen" +msgstr "Seite" #: actions/pathsadminpanel.php:216 msgid "Path" msgstr "" #: actions/pathsadminpanel.php:216 -#, fuzzy msgid "Site path" -msgstr "Seitennachricht" +msgstr "Seitenpfad" #: actions/pathsadminpanel.php:220 msgid "Path to locales" @@ -2216,24 +2203,20 @@ msgid "Theme directory" msgstr "" #: actions/pathsadminpanel.php:247 -#, fuzzy msgid "Avatars" -msgstr "Avatar" +msgstr "Avatare" #: actions/pathsadminpanel.php:252 -#, fuzzy msgid "Avatar server" -msgstr "Avatar-Einstellungen" +msgstr "Avatar-Server" #: actions/pathsadminpanel.php:256 -#, fuzzy msgid "Avatar path" -msgstr "Avatar aktualisiert." +msgstr "Avatarpfad" #: actions/pathsadminpanel.php:260 -#, fuzzy msgid "Avatar directory" -msgstr "Avatar aktualisiert." +msgstr "Avatarverzeichnis" #: actions/pathsadminpanel.php:269 msgid "Backgrounds" @@ -2252,9 +2235,8 @@ msgid "Background directory" msgstr "" #: actions/pathsadminpanel.php:297 -#, fuzzy msgid "Save paths" -msgstr "Seitennachricht" +msgstr "Speicherpfade" #: actions/peoplesearch.php:52 #, php-format @@ -2262,7 +2244,7 @@ msgid "" "Search for people on %%site.name%% by their name, location, or interests. " "Separate the terms by spaces; they must be 3 characters or more." msgstr "" -"Durchsuche die Namen, Orten oder Interessen der Nutzer von %%site.name%%. " +"Durchsuche die Namen, Orte oder Interessen der Nutzer von %%site.name%%. " "Trenne mehrere Suchbegriffe durch Leerzeichen. Ein Suchbegriff muss aus " "mindestens 3 Zeichen bestehen." @@ -2375,7 +2357,7 @@ msgstr "Zeitzone" #: actions/profilesettings.php:155 msgid "What timezone are you normally in?" -msgstr "In welcher Zeitzone befinden Sie sich üblicherweise?" +msgstr "In welcher Zeitzone befindest du dich üblicherweise?" #: actions/profilesettings.php:160 msgid "" @@ -2437,19 +2419,16 @@ msgid "Public timeline" msgstr "Öffentliche Zeitleiste" #: actions/public.php:151 -#, fuzzy msgid "Public Stream Feed (RSS 1.0)" -msgstr "Feed des öffentlichen Streams" +msgstr "Feed des öffentlichen Streams (RSS 1.0)" #: actions/public.php:155 -#, fuzzy msgid "Public Stream Feed (RSS 2.0)" -msgstr "Feed des öffentlichen Streams" +msgstr "Feed des öffentlichen Streams (RSS 2.0)" #: actions/public.php:159 -#, fuzzy msgid "Public Stream Feed (Atom)" -msgstr "Feed des öffentlichen Streams" +msgstr "Feed des öffentlichen Streams (Atom)" #: actions/public.php:179 #, php-format @@ -2478,14 +2457,15 @@ msgid "" msgstr "" #: actions/public.php:238 -#, fuzzy, php-format +#, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" "blogging) service based on the Free Software [StatusNet](http://status.net/) " "tool." msgstr "" -"Dies ist %%site.name%%, ein [mikro-blogging] (http://de.wikipedia.org/wiki/" -"Mikro-blogging) Dienst " +"Dies ist %%site.name%%, ein [Mikro-blogging-Dienst](http://de.wikipedia.org/" +"wiki/Mikro-blogging) basierend auf der freien Software [StatusNet](http://" +"status.net/)." #: actions/publictagcloud.php:57 msgid "Public tag cloud" @@ -2643,9 +2623,8 @@ msgid "Sorry, only invited people can register." msgstr "Es tut uns leid, zum Registrieren benötigst du eine Einladung." #: actions/register.php:92 -#, fuzzy msgid "Sorry, invalid invitation code." -msgstr "Fehler beim Bestätigungscode." +msgstr "Entschuldigung, ungültiger Bestätigungscode." #: actions/register.php:112 msgid "Registration successful" @@ -2721,12 +2700,11 @@ msgid "Creative Commons Attribution 3.0" msgstr "" #: actions/register.php:496 -#, fuzzy msgid "" " except this private data: password, email address, IM address, and phone " "number." msgstr "" -"außer folgende private Daten: Passwort, E-Mail, Adresse, IM Adresse, " +"außer folgende private Daten: Passwort, E-Mail-Adresse, IM-Adresse und " "Telefonnummer." #: actions/register.php:537 @@ -2747,28 +2725,27 @@ msgid "" "\n" "Thanks for signing up and we hope you enjoy using this service." msgstr "" -"Hallo %s, herzlich willkommen auf %%%%site.name%%%%.\n" -"\n" -"Danke für deine Anmeldung, wir hoffen das dir der Service gefällt.\n" -"\n" -"Als nächstes möchtest du eventuell …\n" +"Hallo %s, herzlich willkommen auf %%%%site.name%%%%. Als nächstes möchtest " +"du eventuell …\n" "\n" "* zu [deinem Profil gehen](%s) und deine erste Nachricht schreiben\n" -"* deine [Jabber/GTalk Adresse](%%%%action.imsettings%%%%) eintragen damit du " +"* deine [Jabber/GTalk-Adresse](%%%%action.imsettings%%%%) eintragen damit du " "Nachrichten über diese Dienste schreiben kannst.\n" "* [Leute suchen](%%%%action.peoplesearch%%%%) die du kennst oder die " "gleichen Interessen wie du haben.\n" "* deine [Profildaten ergänzen](%%%%action.profilesettings%%%%) um mehr über " "dich zu veröffentlichen\n" "* die [Dokumentation](%%%%doc.help%%%%) lesen um mehr über weitere Features " -"zu erfahren" +"zu erfahren\n" +"\n" +"Danke für deine Anmeldung, wir hoffen das dir der Service gefällt." #: actions/register.php:561 msgid "" "(You should receive a message by email momentarily, with instructions on how " "to confirm your email address.)" msgstr "" -"(Sie sollten in Kürze eine E-Mail mit der Anleitung zur Ãœberprüfung Ihrer " +"(Du solltest in Kürze eine E-Mail mit der Anleitung zur Ãœberprüfung deiner " "Mailadresse erhalten.)" #: actions/remotesubscribe.php:98 @@ -2818,16 +2795,15 @@ msgid "Invalid profile URL (bad format)" msgstr "Ungültige Profil-URL (falsches Format)" #: actions/remotesubscribe.php:168 -#, fuzzy msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." -msgstr "Ungültige Profil-URL (kein YADIS-Dokument)." +msgstr "" +"Ungültige Profil-URL (kein YADIS-Dokument oder ungültige XRDS definiert)." #: actions/remotesubscribe.php:176 msgid "That’s a local profile! Login to subscribe." msgstr "Das ist ein lokales Profil! Zum Abonnieren anmelden." #: actions/remotesubscribe.php:183 -#, fuzzy msgid "Couldn’t get a request token." msgstr "Konnte keinen Anfrage-Token bekommen." @@ -2855,7 +2831,7 @@ msgstr "Feed der Antworten an %s (RSS 2.0)" #: actions/replies.php:158 #, php-format msgid "Replies feed for %s (Atom)" -msgstr "Feed der Nachrichten von %s" +msgstr "Feed der Nachrichten von %s (Atom)" #: actions/replies.php:198 #, php-format @@ -2879,9 +2855,9 @@ msgid "" msgstr "" #: actions/repliesrss.php:72 -#, fuzzy, php-format +#, php-format msgid "Replies to %1$s on %2$s!" -msgstr "Nachricht an %1$s auf %2$s" +msgstr "Antworten an %1$s auf %2$s!" #: actions/sandbox.php:65 actions/unsandbox.php:65 #, fuzzy @@ -2905,17 +2881,17 @@ msgstr "Konnte Favoriten nicht abrufen." #: actions/showfavorites.php:170 #, php-format msgid "Feed for favorites of %s (RSS 1.0)" -msgstr "Feed der Freunde von %s" +msgstr "Feed der Freunde von %s (RSS 1.0)" #: actions/showfavorites.php:177 #, php-format msgid "Feed for favorites of %s (RSS 2.0)" -msgstr "Feed der Freunde von %s" +msgstr "Feed der Freunde von %s (RSS 2.0)" #: actions/showfavorites.php:184 #, php-format msgid "Feed for favorites of %s (Atom)" -msgstr "Feed der Freunde von %s" +msgstr "Feed der Freunde von %s (Atom)" #: actions/showfavorites.php:205 msgid "" @@ -3013,9 +2989,8 @@ msgid "Statistics" msgstr "Statistiken" #: actions/showgroup.php:432 -#, fuzzy msgid "Created" -msgstr "Erstellen" +msgstr "Erstellt" #: actions/showgroup.php:448 #, php-format @@ -3028,15 +3003,17 @@ msgid "" msgstr "" #: actions/showgroup.php:454 -#, fuzzy, php-format +#, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." "wikipedia.org/wiki/Micro-blogging) service based on the Free Software " "[StatusNet](http://status.net/) tool. Its members share short messages about " "their life and interests. " msgstr "" -"**%s** ist eine Benutzergruppe auf %%site.name%%, einem [mikro-blogging] " -"(http://de.wikipedia.org/wiki/Mikro-blogging) Dienst " +"**%s** ist eine Benutzergruppe auf %%%%site.name%%%%, einem [Mikro-blogging-" +"Dienst](http://de.wikipedia.org/wiki/Mikro-blogging) basierend auf der " +"Freien Software [StatusNet](http://status.net/). Seine Mitglieder erstellen " +"kurze Nachrichten über Ihr Leben und Interessen. " #: actions/showgroup.php:482 msgid "Admins" @@ -3065,7 +3042,7 @@ msgid "Notice deleted." msgstr "Nachricht gelöscht." #: actions/showstream.php:73 -#, fuzzy, php-format +#, php-format msgid " tagged %s" msgstr "Nachrichten, die mit %s getagt sind" @@ -3127,14 +3104,15 @@ msgid "" msgstr "" #: actions/showstream.php:239 -#, fuzzy, php-format +#, php-format msgid "" "**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en." "wikipedia.org/wiki/Micro-blogging) service based on the Free Software " "[StatusNet](http://status.net/) tool. " msgstr "" -"**%s** hat ein Konto auf %%site.name%%, einem [mikro-blogging] (http://de." -"wikipedia.org/wiki/Mikro-blogging) Dienst " +"**%s** hat ein Konto auf %%%%site.name%%%%, einem [Mikro-blogging-Dienst]" +"(http://de.wikipedia.org/wiki/Mikro-blogging) basierend auf der Freien " +"Software [StatusNet](http://status.net/). " #: actions/silence.php:65 actions/unsilence.php:65 #, fuzzy @@ -3155,14 +3133,13 @@ msgid "Site name must have non-zero length." msgstr "" #: actions/siteadminpanel.php:155 -#, fuzzy msgid "You must have a valid contact email address" -msgstr "Ungültige E-Mail-Adresse" +msgstr "Du musst eine gültige E-Mail-Adresse haben" #: actions/siteadminpanel.php:173 #, php-format msgid "Unknown language \"%s\"" -msgstr "Unbekannte Sprache "%s"" +msgstr "Unbekannte Sprache „%s“" #: actions/siteadminpanel.php:180 msgid "Invalid snapshot report URL." @@ -3409,7 +3386,7 @@ msgstr "SMS ist nicht verfügbar." #: actions/smssettings.php:112 msgid "Current confirmed SMS-enabled phone number." -msgstr "Aktuelle für den SMS-Dienst bestätigte Telefon-Nummer." +msgstr "Aktuelle für den SMS-Dienst bestätigte Telefonnummer." #: actions/smssettings.php:123 msgid "Awaiting confirmation on this phone number." @@ -3798,7 +3775,6 @@ msgid "Authorize subscription" msgstr "Abonnement bestätigen" #: actions/userauthorization.php:110 -#, fuzzy msgid "" "Please check these details to make sure that you want to subscribe to this " "user’s notices. If you didn’t just ask to subscribe to someone’s notices, " @@ -3806,7 +3782,7 @@ msgid "" msgstr "" "Bitte überprüfe diese Angaben, um sicher zu gehen, dass du die Nachrichten " "dieses Nutzers abonnieren möchtest. Wenn du das nicht wolltest, klicke auf " -"\"Abbrechen\"." +"„Abbrechen“." #: actions/userauthorization.php:188 msgid "License" @@ -3906,7 +3882,7 @@ msgstr "Keine ID." #: actions/userdesignsettings.php:76 lib/designsettings.php:65 msgid "Profile design" -msgstr "Profil Design Einstellungen" +msgstr "Profil-Design-Einstellungen" #: actions/userdesignsettings.php:87 lib/designsettings.php:76 msgid "" @@ -4037,7 +4013,7 @@ msgstr "Ändere dein Passwort" #: lib/accountsettingsaction.php:120 msgid "Change email handling" -msgstr "Ändere die E-Mail Verarbeitung" +msgstr "Ändere die E-Mail-Verarbeitung" #: lib/accountsettingsaction.php:124 #, fuzzy @@ -4206,7 +4182,7 @@ msgid "" "s, available under the [GNU Affero General Public License](http://www.fsf." "org/licensing/licenses/agpl-3.0.html)." msgstr "" -" Es wird mit der Microbloggingsoftware [StatusNet](http://status.net/) " +"Es wird mit der Microbloggingsoftware [StatusNet](http://status.net/) " "(Version %s) betrieben, die unter der [GNU Affero General Public License]" "(http://www.fsf.org/licensing/licenses/agpl-3.0.html) erhältlich ist." @@ -4428,40 +4404,54 @@ msgstr "Benachrichtigung aktiviert." msgid "Can't turn on notification." msgstr "Konnte Benachrichtigung nicht aktivieren." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Konnte keinen Favoriten erstellen." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Du hast dieses Profil nicht abonniert." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Du hast diese Benutzer bereits abonniert:" msgstr[1] "Du hast diese Benutzer bereits abonniert:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Die Gegenseite konnte Dich nicht abonnieren." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Die Gegenseite konnte Dich nicht abonnieren." msgstr[1] "Die Gegenseite konnte Dich nicht abonnieren." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Du bist kein Mitglied dieser Gruppe." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Du bist kein Mitglied dieser Gruppe." msgstr[1] "Du bist kein Mitglied dieser Gruppe." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4480,6 +4470,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4545,11 +4536,7 @@ msgid "" msgstr "" "Du kannst dein persönliches Avatar hochladen. Die maximale Dateigröße ist %s." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4635,10 +4622,10 @@ msgid "Description" msgstr "Beschreibung" #: lib/groupeditform.php:179 -#, fuzzy msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"" -msgstr "Ort der Gruppe, optional, z.B. \"Stadt, Gebiet (oder Region), Land\"" +msgstr "" +"Ort der Gruppe, optional, beispielsweise „Stadt, Gebiet (oder Region), Land“" #: lib/groupeditform.php:187 #, php-format @@ -5026,7 +5013,7 @@ msgstr "Versende eine direkte Nachricht" msgid "To" msgstr "An" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "Verfügbare Zeichen" @@ -5041,11 +5028,11 @@ msgstr "Nachricht versenden" msgid "What's up, %s?" msgstr "Was ist los, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5327,7 +5314,12 @@ msgstr "Die Gegenseite konnte Dich nicht abonnieren." msgid "Not subscribed!" msgstr "Nicht abonniert!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Konnte Abonnement nicht löschen." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Konnte Abonnement nicht löschen." diff --git a/locale/el/LC_MESSAGES/statusnet.po b/locale/el/LC_MESSAGES/statusnet.po index 6ab4721c2..d6142aaa7 100644 --- a/locale/el/LC_MESSAGES/statusnet.po +++ b/locale/el/LC_MESSAGES/statusnet.po @@ -1,5 +1,6 @@ # Translation of StatusNet to Greek # +# Author@translatewiki.net: Omnipaedista # -- # This file is distributed under the same license as the StatusNet package. # @@ -7,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:21+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:14+0000\n" "Language-Team: Greek\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: el\n" "X-Message-Group: out-statusnet\n" @@ -47,7 +48,7 @@ msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ." #: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77 #: lib/subs.php:34 lib/subs.php:116 msgid "No such user." -msgstr "" +msgstr "ΚανÎνας Ï„Îτοιος χÏήστης." #: actions/all.php:84 #, fuzzy, php-format @@ -183,7 +184,12 @@ msgstr "" msgid "Could not save profile." msgstr "ΑπÎτυχε η αποθήκευση του Ï€Ïοφίλ." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "ΑπÎτυχε η ενημÎÏωση του χÏήστη." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -398,14 +404,14 @@ msgid "%s groups" msgstr "" #: actions/apigrouplistall.php:94 -#, fuzzy, php-format +#, php-format msgid "groups on %s" -msgstr "Î’Ïες ομάδες στο site" +msgstr "ομάδες του χÏήστη %s" #: actions/apigrouplist.php:95 -#, fuzzy, php-format +#, php-format msgid "%s's groups" -msgstr "Ομάδες χÏηστών" +msgstr "ομάδες των χÏηστών %s" #: actions/apigrouplist.php:103 #, fuzzy, php-format @@ -460,9 +466,9 @@ msgstr "" #: actions/apitimelinegroup.php:108 actions/apitimelineuser.php:117 #: actions/grouprss.php:131 actions/userrss.php:90 -#, fuzzy, php-format +#, php-format msgid "%s timeline" -msgstr "ΧÏονοδιάγÏαμμα του χÏήστη %s" +msgstr "χÏονοδιάγÏαμμα του χÏήστη %s" #: actions/apitimelinegroup.php:116 actions/apitimelineuser.php:125 #: actions/userrss.php:92 @@ -538,9 +544,8 @@ msgstr "" #: actions/avatarsettings.php:119 actions/avatarsettings.php:194 #: actions/grouplogo.php:251 -#, fuzzy msgid "Avatar settings" -msgstr "Ρυθμίσεις OpenID" +msgstr "Ρυθμίσεις του άβαταÏ" #: actions/avatarsettings.php:126 actions/avatarsettings.php:202 #: actions/grouplogo.php:199 actions/grouplogo.php:259 @@ -569,7 +574,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -612,9 +617,8 @@ msgstr "Ρυθμίσεις OpenID" #: actions/groupdesignsettings.php:84 actions/grouplogo.php:86 #: actions/groupmembers.php:76 actions/grouprss.php:91 #: actions/joingroup.php:76 actions/showgroup.php:121 -#, fuzzy msgid "No nickname" -msgstr "ÎÎο ψευδώνυμο" +msgstr "ΚανÎνα ψευδώνυμο" #: actions/blockedfromgroup.php:80 actions/editgroup.php:96 #: actions/groupbyid.php:83 actions/groupdesignsettings.php:97 @@ -669,7 +673,7 @@ msgstr "" #: actions/block.php:143 actions/deletenotice.php:145 #: actions/deleteuser.php:147 actions/groupblock.php:178 msgid "No" -msgstr "" +msgstr "Όχι" #: actions/block.php:143 actions/deleteuser.php:147 #, fuzzy @@ -737,9 +741,8 @@ msgid "The address \"%s\" has been confirmed for your account." msgstr "" #: actions/conversation.php:99 -#, fuzzy msgid "Conversation" -msgstr "Τοποθεσία" +msgstr "Συζήτηση" #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87 #: lib/profileaction.php:216 lib/searchgroupnav.php:82 @@ -825,106 +828,106 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "" -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Η αÏχική σελίδα δεν είναι ÎγκυÏο URL." -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Αλλάξτε τον κωδικό σας" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Αλλαγή" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Αλλαγή" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "Αλλάξτε τον κωδικό σας" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "ΣÏνδεση" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "ΣÏνδεση" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -934,7 +937,7 @@ msgstr "" msgid "Save" msgstr "" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1370,19 +1373,19 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "ΑπÎτυχε η ενημÎÏωση του χÏήστη." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Οι Ï€Ïοτιμήσεις αποθηκεÏτηκαν" @@ -1688,7 +1691,7 @@ msgstr "" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "" @@ -1768,11 +1771,11 @@ msgstr "" msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Ήδη συνδεδεμÎνος." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "" @@ -1979,8 +1982,8 @@ msgstr "ΣÏνδεση" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -2969,9 +2972,8 @@ msgid "" msgstr "" #: actions/showgroup.php:482 -#, fuzzy msgid "Admins" -msgstr "ΔιαχειÏιστής" +msgstr "ΔιαχειÏιστÎÏ‚" #: actions/showmessage.php:81 msgid "No such message." @@ -3192,9 +3194,8 @@ msgid "Use fancy (more readable and memorable) URLs?" msgstr "" #: actions/siteadminpanel.php:331 -#, fuzzy msgid "Access" -msgstr "Αποδοχή" +msgstr "Î Ïόσβαση" #: actions/siteadminpanel.php:334 msgid "Private" @@ -4317,40 +4318,54 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Δεν επιτÏÎπεται να κάνεις συνδÏομητÎÏ‚ του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Δεν επιτÏÎπεται να κάνεις συνδÏομητÎÏ‚ του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." msgstr[1] "Δεν επιτÏÎπεται να κάνεις συνδÏομητÎÏ‚ του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Δεν επιτÏÎπεται να κάνεις συνδÏομητÎÏ‚ του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Δεν επιτÏÎπεται να κάνεις συνδÏομητÎÏ‚ του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." msgstr[1] "Δεν επιτÏÎπεται να κάνεις συνδÏομητÎÏ‚ του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Ομάδες με τα πεÏισσότεÏα μÎλη" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ομάδες με τα πεÏισσότεÏα μÎλη" msgstr[1] "Ομάδες με τα πεÏισσότεÏα μÎλη" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4369,6 +4384,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4431,11 +4447,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4690,12 +4702,12 @@ msgid "" msgstr "" #: lib/mail.php:254 -#, fuzzy, php-format +#, php-format msgid "Location: %s\n" msgstr "Τοποθεσία: %s\n" #: lib/mail.php:256 -#, fuzzy, php-format +#, php-format msgid "Homepage: %s\n" msgstr "ΑÏχική σελίδα: %s\n" @@ -4887,7 +4899,7 @@ msgstr "" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "6 ή πεÏισσότεÏοι χαÏακτήÏες" @@ -4901,11 +4913,11 @@ msgstr "" msgid "What's up, %s?" msgstr "" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5177,7 +5189,12 @@ msgstr "Δεν επιτÏÎπεται να κάνεις συνδÏομητÎÏ‚ Ï msgid "Not subscribed!" msgstr "ΑπÎτυχε η συνδÏομή." -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "ΑπÎτυχε η διαγÏαφή συνδÏομής." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "ΑπÎτυχε η διαγÏαφή συνδÏομής." diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po index fb598943c..782a5ec0a 100644 --- a/locale/en_GB/LC_MESSAGES/statusnet.po +++ b/locale/en_GB/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:24+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:19+0000\n" "Language-Team: British English\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: en-gb\n" "X-Message-Group: out-statusnet\n" @@ -181,7 +181,12 @@ msgstr "User has no profile." msgid "Could not save profile." msgstr "Couldn't save profile." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Couldn't update user." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Block user failed." @@ -563,7 +568,7 @@ msgstr "Crop" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -818,106 +823,106 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Invalid size." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "This page is not available in a " -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "Change logo" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Invite" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Change" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "Site theme" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "Logout from the site" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "You can upload a logo image for your group." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Change colours" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "Connect" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Search" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "Links" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -927,7 +932,7 @@ msgstr "" msgid "Save" msgstr "Save" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1365,20 +1370,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Couldn't update user." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "Unable to save your Twitter settings!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Sync preferences saved." @@ -1694,7 +1699,7 @@ msgstr "Personal message" msgid "Optionally add a personal message to the invitation." msgstr "Optionally add a personal message to the invitation." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Send" @@ -1800,11 +1805,11 @@ msgstr "Could not remove user %s to group %s" msgid "%s left group %s" msgstr "%s left group %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Already logged in." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Invalid notice content" @@ -2016,8 +2021,8 @@ msgstr "Connect" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Not a supported data format." @@ -4387,40 +4392,54 @@ msgstr "Notification on." msgid "Can't turn on notification." msgstr "Can't turn on notification." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Could not create aliases" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "You are not subscribed to that profile." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "You are already subscribed to these users:" msgstr[1] "You are already subscribed to these users:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Could not subscribe other to you." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Could not subscribe other to you." msgstr[1] "Could not subscribe other to you." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "You are not a member of that group." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "You are not a member of that group." msgstr[1] "You are not a member of that group." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4439,6 +4458,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4501,11 +4521,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "You can upload your personal avatar. The maximum file size is %s." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "Bad default colour settings: " - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4971,7 +4987,7 @@ msgstr "Send a direct notice" msgid "To" msgstr "To" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Available characters" @@ -4984,11 +5000,11 @@ msgstr "Send a notice" msgid "What's up, %s?" msgstr "What's up, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5259,7 +5275,12 @@ msgstr "Could not subscribe other to you." msgid "Not subscribed!" msgstr "Not subscribed!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Couldn't delete subscription." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Couldn't delete subscription." diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po index 393a3c602..871040c9a 100644 --- a/locale/es/LC_MESSAGES/statusnet.po +++ b/locale/es/LC_MESSAGES/statusnet.po @@ -11,12 +11,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:28+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:23+0000\n" "Language-Team: Spanish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: es\n" "X-Message-Group: out-statusnet\n" @@ -188,7 +188,11 @@ msgstr "El usuario no tiene un perfil." msgid "Could not save profile." msgstr "No se pudo guardar el perfil." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +msgid "You cannot block yourself!" +msgstr "¡No puedes bloquearte a tà mismo!" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Falló bloquear usuario." @@ -214,9 +218,9 @@ msgid "Can't send direct messages to users who aren't your friend." msgstr "No se puede enviar mensajes directos a usuarios que no son tu amigo." #: actions/apidirectmessage.php:89 -#, fuzzy, php-format +#, php-format msgid "Direct messages from %s" -msgstr "Mensajes directos a %s" +msgstr "Mensajes directos de %s" #: actions/apidirectmessage.php:93 #, php-format @@ -256,18 +260,16 @@ msgid "No status found with that ID." msgstr "No se encontró estado para ese ID" #: actions/apifavoritecreate.php:119 -#, fuzzy msgid "This status is already a favorite!" -msgstr "¡Este aviso ya está en favoritos!" +msgstr "¡Este status ya está en favoritos!" #: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 msgid "Could not create favorite." msgstr "No se pudo crear favorito." #: actions/apifavoritedestroy.php:122 -#, fuzzy msgid "That status is not a favorite!" -msgstr "¡Este aviso no es un favorito!" +msgstr "¡Este status no es un favorito!" #: actions/apifavoritedestroy.php:134 actions/disfavor.php:87 msgid "Could not delete favorite." @@ -283,27 +285,24 @@ msgid "Could not follow user: %s is already on your list." msgstr "No puede seguir al usuario: %s ya esta en su lista." #: actions/apifriendshipsdestroy.php:109 -#, fuzzy msgid "Could not unfollow user: User not found." -msgstr "No puede seguir al usuario. Usuario no encontrado" +msgstr "No se pudo dejar de seguir al usuario. Usuario no encontrado" #: actions/apifriendshipsdestroy.php:120 msgid "You cannot unfollow yourself!" -msgstr "" +msgstr "¡No puedes dejar de seguirte a ti mismo!" #: actions/apifriendshipsexists.php:94 msgid "Two user ids or screen_names must be supplied." msgstr "Deben proveerse dos identificaciones de usuario o nombres en pantalla." #: actions/apifriendshipsshow.php:135 -#, fuzzy msgid "Could not determine source user." -msgstr "No se pudo acceder a corriente pública." +msgstr "No se pudo determinar el usuario fuente." #: actions/apifriendshipsshow.php:143 -#, fuzzy msgid "Could not find target user." -msgstr "No se pudo encontrar ningún estado." +msgstr "No se pudo encontrar ningún usuario de destino." #: actions/apigroupcreate.php:164 actions/editgroup.php:182 #: actions/newgroup.php:126 actions/profilesettings.php:208 @@ -311,7 +310,7 @@ msgstr "No se pudo encontrar ningún estado." msgid "Nickname must have only lowercase letters and numbers and no spaces." msgstr "" "El apodo debe tener solamente letras minúsculas y números y no puede tener " -"espacios. " +"espacios." #: actions/apigroupcreate.php:173 actions/editgroup.php:186 #: actions/newgroup.php:130 actions/profilesettings.php:231 @@ -338,9 +337,9 @@ msgid "Full name is too long (max 255 chars)." msgstr "Tu nombre es demasiado largo (max. 255 carac.)" #: actions/apigroupcreate.php:213 -#, fuzzy, php-format +#, php-format msgid "Description is too long (max %d chars)." -msgstr "Descripción es demasiado larga (máx. 140 caracteres)." +msgstr "La descripción es demasiado larga (máx. %d caracteres)." #: actions/apigroupcreate.php:224 actions/editgroup.php:204 #: actions/newgroup.php:148 actions/profilesettings.php:225 @@ -352,7 +351,7 @@ msgstr "La ubicación es demasiado larga (máx. 255 caracteres)." #: actions/newgroup.php:159 #, php-format msgid "Too many aliases! Maximum %d." -msgstr "" +msgstr "¡Muchos seudónimos! El máximo es %d." #: actions/apigroupcreate.php:264 actions/editgroup.php:224 #: actions/newgroup.php:168 @@ -577,7 +576,7 @@ msgstr "Cortar" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -840,107 +839,107 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Tamaño inválido." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Esta página no está disponible en un " -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Cambiar colores" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Invitar" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Cambiar" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Aviso de sitio" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "Salir de sitio" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Puedes cargar una imagen de logo para tu grupo." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Cambiar colores" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Contenido" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Buscar" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "VÃnculos" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -950,7 +949,7 @@ msgstr "" msgid "Save" msgstr "Guardar" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1401,20 +1400,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "No se pudo actualizar el usuario." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "¡No se pudo guardar tu configuración de Twitter!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Preferencias de sincronización guardadas." @@ -1740,7 +1739,7 @@ msgstr "Mensaje Personal" msgid "Optionally add a personal message to the invitation." msgstr "Opcionalmente añada un mensaje personalizado a su invitación." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Enviar" @@ -1849,11 +1848,11 @@ msgstr "No se pudo eliminar a usuario %s de grupo %s" msgid "%s left group %s" msgstr "%s dejó grupo %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Ya estás conectado." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "El contenido del aviso es inválido" @@ -2071,8 +2070,8 @@ msgstr "Conectarse" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "No es un formato de dato soportado" @@ -4507,40 +4506,54 @@ msgstr "Notificación activada." msgid "Can't turn on notification." msgstr "No se puede activar notificación." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "No se pudo crear favorito." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "No estás suscrito a ese perfil." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ya estás suscrito a estos usuarios:" msgstr[1] "Ya estás suscrito a estos usuarios:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "No se pudo suscribir otro a ti." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "No se pudo suscribir otro a ti." msgstr[1] "No se pudo suscribir otro a ti." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "No eres miembro de ese grupo" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "No eres miembro de este grupo." msgstr[1] "No eres miembro de este grupo." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4559,6 +4572,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4620,11 +4634,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Puedes cargar tu avatar personal." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -5092,7 +5102,7 @@ msgstr "Enviar un aviso directo" msgid "To" msgstr "Para" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "Caracteres disponibles" @@ -5107,11 +5117,11 @@ msgstr "Enviar un aviso" msgid "What's up, %s?" msgstr "¿Qué tal, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5388,7 +5398,12 @@ msgstr "No se pudo suscribir otro a ti." msgid "Not subscribed!" msgstr "¡No estás suscrito!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "No se pudo eliminar la suscripción." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "No se pudo eliminar la suscripción." diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po index e5e8af795..c1b9febfe 100644 --- a/locale/fi/LC_MESSAGES/statusnet.po +++ b/locale/fi/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:32+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:26+0000\n" "Language-Team: Finnish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fi\n" "X-Message-Group: out-statusnet\n" @@ -188,7 +188,12 @@ msgstr "Käyttäjällä ei ole profiilia." msgid "Could not save profile." msgstr "Ei voitu tallentaa profiilia." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Et voi lopettaa itsesi tilausta!" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Käyttäjän esto epäonnistui." @@ -573,7 +578,7 @@ msgstr "Rajaa" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -828,107 +833,107 @@ msgstr "Ulkoasu" msgid "Design settings for this StatusNet site." msgstr "Ulkoasuasetukset tälle StatusNet palvelulle." -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Koko ei kelpaa." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Pikaviestin ei ole käytettävissä." -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Vaihda salasanasi" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Kutsu" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Vaihda" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Palvelun ilmoitus" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "Kirjaudu ulos palvelusta" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Vaihda tautakuva" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "Tausta" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Voit ladata ryhmälle logokuvan. Maksimikoko on %s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "On" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "Off" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Vaihda väriä" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Sisältö" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Haku" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Teksti" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "Linkit" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "Käytä oletusasetuksia" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -938,7 +943,7 @@ msgstr "" msgid "Save" msgstr "Tallenna" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1373,18 +1378,18 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "Ei voitu päivittää sinun sivusi ulkoasua." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "Ei voitu tallentaa sinun ulkoasuasetuksia!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "Ulkoasuasetukset tallennettu." @@ -1703,7 +1708,7 @@ msgstr "Henkilökohtainen viesti" msgid "Optionally add a personal message to the invitation." msgstr "Voit myös lisätä oman viestisi kutsuun" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Lähetä" @@ -1808,11 +1813,11 @@ msgstr "Ei voitu poistaa käyttäjää %s ryhmästä %s" msgid "%s left group %s" msgstr "%s erosi ryhmästä %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Olet jo kirjautunut sisään." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Päivityksen sisältö ei kelpaa" @@ -2029,8 +2034,8 @@ msgstr "Yhdistä" msgid "Only " msgstr "Vain " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Tuo ei ole tuettu tietomuoto." @@ -4435,40 +4440,54 @@ msgstr "Ilmoitukset päällä." msgid "Can't turn on notification." msgstr "Ilmoituksia ei voi pistää päälle." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Ei voitu lisätä aliasta." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Et ole tilannut tämän käyttäjän päivityksiä." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Olet jos tilannut seuraavien käyttäjien päivitykset:" msgstr[1] "Olet jos tilannut seuraavien käyttäjien päivitykset:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Toista ei voitu asettaa tilaamaan sinua." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Toista ei voitu asettaa tilaamaan sinua." msgstr[1] "Toista ei voitu asettaa tilaamaan sinua." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Sinä et kuulu tähän ryhmään." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Sinä et kuulu tähän ryhmään." msgstr[1] "Sinä et kuulu tähän ryhmään." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4487,6 +4506,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4551,11 +4571,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Voit ladata oman profiilikuvasi. Maksimikoko on %s." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -5025,7 +5041,7 @@ msgstr "Lähetä suora viesti" msgid "To" msgstr "Vastaanottaja" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Sallitut merkit" @@ -5038,11 +5054,11 @@ msgstr "Lähetä päivitys" msgid "What's up, %s?" msgstr "Mitä teet juuri nyt, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5322,7 +5338,12 @@ msgstr "Toista ei voitu asettaa tilaamaan sinua." msgid "Not subscribed!" msgstr "Ei ole tilattu!." -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Ei voitu poistaa tilausta." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Ei voitu poistaa tilausta." diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po index cb3c85af5..d66708795 100644 --- a/locale/fr/LC_MESSAGES/statusnet.po +++ b/locale/fr/LC_MESSAGES/statusnet.po @@ -6,7 +6,6 @@ # Author@translatewiki.net: Jean-Frédéric # Author@translatewiki.net: McDutchie # Author@translatewiki.net: Peter17 -# Author@translatewiki.net: Zetud # -- # This file is distributed under the same license as the StatusNet package. # @@ -14,12 +13,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:36+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:29+0000\n" "Language-Team: French\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: out-statusnet\n" @@ -96,7 +95,7 @@ msgid "" "something yourself." msgstr "" "Essayez de vous abonner à plus d’utilisateurs, de vous [inscrire à un groupe]" -"(%%action.groups%%) ou de publier quelque chose vous-même." +"(%%action.groups%%) ou de poster quelque chose vous-même." #: actions/all.php:134 #, php-format @@ -104,8 +103,8 @@ msgid "" "You can try to [nudge %s](../%s) from his profile or [post something to his " "or her attention](%%%%action.newnotice%%%%?status_textarea=%s)." msgstr "" -"Vous pouvez essayer de [donner un coup de coude à %s](../%s) depuis son " -"profil ou [poster quelque chose à son intention](%%%%action.newnotice%%%%?" +"Vous pouvez essayer de [faire un clin d’œil à %s](../%s) depuis son profil " +"ou [poster quelque chose à son intention](%%%%action.newnotice%%%%?" "status_textarea=%s)." #: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202 @@ -114,8 +113,8 @@ msgid "" "Why not [register an account](%%%%action.register%%%%) and then nudge %s or " "post a notice to his or her attention." msgstr "" -"Pourquoi ne pas [créer un compte](%%%%action.register%%%%) et ensuite " -"envoyer un coup de coude à %s ou poster quelque chose à son intention." +"Pourquoi ne pas [créer un compte](%%%%action.register%%%%) et ensuite faire " +"un clin d’œil à %s ou poster un avis à son intention." #: actions/all.php:165 msgid "You and friends" @@ -197,7 +196,11 @@ msgstr "Aucun profil ne correspond à cet utilisateur." msgid "Could not save profile." msgstr "Impossible d’enregistrer le profil." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +msgid "You cannot block yourself!" +msgstr "Vous ne pouvez pas vous bloquer vous-même !" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Le blocage de l’utilisateur a échoué." @@ -268,7 +271,7 @@ msgstr "Aucun statut trouvé avec cet identifiant. " #: actions/apifavoritecreate.php:119 msgid "This status is already a favorite!" -msgstr "Ce statut a déjà été ajouté à vos favoris !" +msgstr "Cet avis a déjà été ajouté à vos favoris !" #: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 msgid "Could not create favorite." @@ -276,7 +279,7 @@ msgstr "Impossible de créer le favori." #: actions/apifavoritedestroy.php:122 msgid "That status is not a favorite!" -msgstr "Ce statut n’est pas un favori !" +msgstr "Cet avis n’est pas un favori !" #: actions/apifavoritedestroy.php:134 actions/disfavor.php:87 msgid "Could not delete favorite." @@ -455,7 +458,7 @@ msgstr "Non trouvé" #, php-format msgid "Max notice size is %d chars, including attachment URL." msgstr "" -"La taille maximale du statut est de %d caractères, en incluant l’URL de la " +"La taille maximale de l’avis est de %d caractères, en incluant l’URL de la " "pièce jointe." #: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261 @@ -502,12 +505,12 @@ msgstr "Activité publique %s" #: actions/apitimelinepublic.php:110 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" -msgstr "%s statuts " +msgstr "%s statuts de tout le monde !" #: actions/apitimelinetag.php:101 actions/tag.php:66 #, php-format msgid "Notices tagged with %s" -msgstr "Statuts marqués avec %s" +msgstr "Avis marqués avec %s" #: actions/apitimelinetag.php:107 actions/tagrss.php:64 #, php-format @@ -584,7 +587,7 @@ msgstr "Recadrer" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -758,11 +761,11 @@ msgstr "Conversation" #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87 #: lib/profileaction.php:216 lib/searchgroupnav.php:82 msgid "Notices" -msgstr "Statuts" +msgstr "Avis" #: actions/deletenotice.php:52 actions/shownotice.php:92 msgid "No such notice." -msgstr "Statut non trouvé." +msgstr "Avis non trouvé." #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69 @@ -775,7 +778,7 @@ msgstr "Non connecté." #: actions/deletenotice.php:71 msgid "Can't delete this notice." -msgstr "Impossible de supprimer ce statut." +msgstr "Impossible de supprimer cet avis." #: actions/deletenotice.php:103 msgid "" @@ -787,11 +790,11 @@ msgstr "" #: actions/deletenotice.php:109 actions/deletenotice.php:141 msgid "Delete notice" -msgstr "Supprimer ce statut" +msgstr "Supprimer cet avis" #: actions/deletenotice.php:144 msgid "Are you sure you want to delete this notice?" -msgstr "Êtes-vous sûr(e) de vouloir supprimer ce statut ?" +msgstr "Êtes-vous sûr(e) de vouloir supprimer cet avis ?" #: actions/deletenotice.php:145 msgid "Do not delete this notice" @@ -799,7 +802,7 @@ msgstr "Ne pas supprimer cet avis" #: actions/deletenotice.php:146 lib/noticelist.php:550 msgid "Delete this notice" -msgstr "Supprimer ce statut" +msgstr "Supprimer cet avis" #: actions/deletenotice.php:157 msgid "There was a problem with your session token. Try again, please." @@ -840,45 +843,45 @@ msgstr "Conception" msgid "Design settings for this StatusNet site." msgstr "Paramètres de conception pour ce site StatusNet." -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "URL du logo invalide." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "Le thème n'est pas disponible : %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "Modifier le logo" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "Logo du site" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "Modifier le thème" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "Thème du site" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "Thème pour le site." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Changer l’image d’arrière plan" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "Arrière plan" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" @@ -887,55 +890,55 @@ msgstr "" "Vous pouvez importer une image d'arrière plan pour ce site. La taille " "maximale du fichier est de %1$s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "Activé" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "Désactivé" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "Activer ou désactiver l’image d’arrière plan." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "Répéter l’image d’arrière plan" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Modifier les couleurs" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Contenu" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "Barre latérale" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Texte" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "Liens" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "Utiliser les valeurs par défaut" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "Restaurer les conceptions par défaut" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "Revenir aux valeurs par défaut" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -945,13 +948,13 @@ msgstr "Revenir aux valeurs par défaut" msgid "Save" msgstr "Enregistrer" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "Sauvegarder la conception" #: actions/disfavor.php:81 msgid "This notice is not a favorite!" -msgstr "Ce statut n’est pas un favori !" +msgstr "Cet avis n’est pas un favori !" #: actions/disfavor.php:94 msgid "Add to favorites" @@ -1052,7 +1055,7 @@ msgstr "Courriel entrant" #: actions/emailsettings.php:138 actions/smssettings.php:157 msgid "Send email to this address to post new notices." -msgstr "Écrivez à cette adresse courriel pour publier de nouveaux statuts. " +msgstr "Écrivez à cette adresse courriel pour poster de nouveaux avis. " #: actions/emailsettings.php:145 actions/smssettings.php:162 msgid "Make a new email address for posting to; cancels the old one." @@ -1074,7 +1077,7 @@ msgstr "Avertissez-moi par courriel des nouveaux abonnements." #: actions/emailsettings.php:163 msgid "Send me email when someone adds my notice as a favorite." msgstr "" -"Envoyez-moi un courriel quand un utilisateur ajoute un de mes statuts à ses " +"Envoyez-moi un courriel quand un utilisateur ajoute un de mes avis à ses " "favoris." #: actions/emailsettings.php:169 @@ -1091,7 +1094,7 @@ msgstr "Autoriser mes amis à m’envoyer des courriels et des clins d’œil." #: actions/emailsettings.php:185 msgid "I want to post notices by email." -msgstr "Je veux envoyer mes statuts par courriel." +msgstr "Je veux envoyer mes avis par courriel." #: actions/emailsettings.php:191 msgid "Publish a MicroID for my email address." @@ -1178,30 +1181,30 @@ msgstr "Nouvelle adresse courriel ajoutée." #: actions/favorited.php:65 lib/popularnoticesection.php:88 #: lib/publicgroupnav.php:93 msgid "Popular notices" -msgstr "Statuts populaires" +msgstr "Avis populaires" #: actions/favorited.php:67 #, php-format msgid "Popular notices, page %d" -msgstr "Statuts populaires - page %d" +msgstr "Avis populaires - page %d" #: actions/favorited.php:79 msgid "The most popular notices on the site right now." -msgstr "Statuts les plus populaires sur le site en ce moment." +msgstr "Les avis les plus populaires sur le site en ce moment." #: actions/favorited.php:150 msgid "Favorite notices appear on this page but no one has favorited one yet." msgstr "" -"Les statuts favoris apparaissent sur cette page mais personne ne n’en a mis " -"un en favori actuellement." +"Les avis favoris apparaissent sur cette page mais personne n’a mis d’avis en " +"favori pour le moment." #: actions/favorited.php:153 msgid "" "Be the first to add a notice to your favorites by clicking the fave button " "next to any notice you like." msgstr "" -"Soyez le premier à un statut dans vos favoris en cliquant sur le bouton " -"favori à côté d’un statut que vous aimez." +"Soyez le premier à ajouter un avis dans vos favoris en cliquant sur le " +"bouton favori à côté d’un avis que vous aimez." #: actions/favorited.php:156 #, php-format @@ -1216,7 +1219,7 @@ msgstr "" #: lib/personalgroupnav.php:115 #, php-format msgid "%s's favorite notices" -msgstr "Statuts favoris de %s" +msgstr "Avis favoris de %s" #: actions/favoritesrss.php:115 #, php-format @@ -1225,7 +1228,7 @@ msgstr "Mises à jour privilégiées par %1$s sur %2$s !" #: actions/favor.php:79 msgid "This notice is already a favorite!" -msgstr "Ce statut a déjà été ajouté à vos favoris !" +msgstr "Cet avis a déjà été ajouté à vos favoris !" #: actions/favor.php:92 lib/disfavorform.php:140 msgid "Disfavor favorite" @@ -1248,11 +1251,11 @@ msgstr "Les utilisateurs à ne pas manquer dans %s" #: actions/file.php:34 msgid "No notice id" -msgstr "Pas d’identifiant de statut" +msgstr "Pas d’identifiant d’avis" #: actions/file.php:38 msgid "No notice" -msgstr "Aucun statut" +msgstr "Aucun avis" #: actions/file.php:42 msgid "No attachments" @@ -1349,7 +1352,7 @@ msgid "" "group in the future." msgstr "" "Êtes-vous sûr(e) de vouloir bloquer l’utilisateur \"%s\" du groupe \"%s\"? " -"Ils seront supprimés du groupe, il leur sera interdit d’y publier, et de s’y " +"Ils seront supprimés du groupe, il leur sera interdit d’y poster, et de s’y " "abonner à l’avenir." #: actions/groupblock.php:178 @@ -1382,21 +1385,21 @@ msgid "" "Customize the way your group looks with a background image and a colour " "palette of your choice." msgstr "" -"Personnalisez le style de votre groupe avec une image de fond et une palette " -"de couleur de votre choix." +"Personnalisez l’apparence de votre groupe avec une image d’arrière plan et " +"une palette de couleurs de votre choix" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "Impossible de mettre à jour votre conception." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "Impossible de sauvegarder les préférences de conception !" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "Préférences de conception enregistrées." @@ -1520,11 +1523,11 @@ msgid "" "%%%%)" msgstr "" "Les groupes de %%%%site.name%%%% permettent de trouver et de parler avec des " -"personnes qui ont le même intérêt. Après avoir rejoint un groupe vous pouvez " -"envoyer des messages à tous les autres membres en utilisant la syntaxe « !" -"nomdugroupe ». Vous ne voyez aucun groupe qui vous intéresse ? Essayer d'en " -"[rechercher un](%%%%action.groupsearch%%%%) ou [commencez le votre !](%%%%" -"action.newgroup%%%%)" +"personnes qui ont des intérêts en commun avec vous. Après avoir rejoint un " +"groupe, vous pouvez envoyer des messages à tous les autres membres en " +"utilisant la syntaxe « !nomdugroupe ». Vous ne voyez aucun groupe qui vous " +"intéresse ? Essayez d’en [rechercher un](%%%%action.groupsearch%%%%) ou de " +"[créer le vôtre !](%%%%action.newgroup%%%%)" #: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122 msgid "Create a new group" @@ -1590,12 +1593,12 @@ msgstr "" #: actions/imsettings.php:143 msgid "Send me notices through Jabber/GTalk." -msgstr "Envoyez-moi les statuts par Jabber/GTalk." +msgstr "Envoyez-moi les avis par Jabber/GTalk." #: actions/imsettings.php:148 msgid "Post a notice when my Jabber/GTalk status changes." msgstr "" -"Publier un statut chaque fois que mon statut est modifié dans Jabber/GTalk" +"Poster un avis chaque fois que mon statut est modifié dans Jabber/GTalk" #: actions/imsettings.php:153 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to." @@ -1729,7 +1732,7 @@ msgstr "Message personnel" msgid "Optionally add a personal message to the invitation." msgstr "Ajouter un message personnel à l’invitation (optionnel)." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Envoyer" @@ -1837,11 +1840,11 @@ msgstr "Impossible de retirer l’utilisateur %s du groupe %s" msgid "%s left group %s" msgstr "%s a quitté le groupe %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Déjà connecté." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "Jeton invalide ou expiré." @@ -1977,11 +1980,11 @@ msgstr "Erreur Ajax" #: actions/newnotice.php:69 msgid "New notice" -msgstr "Nouveau statut" +msgstr "Nouvel avis" #: actions/newnotice.php:206 msgid "Notice posted" -msgstr "Statut publié" +msgstr "Avis publié" #: actions/noticesearch.php:68 #, php-format @@ -1989,7 +1992,7 @@ msgid "" "Search for notices on %%site.name%% by their contents. Separate search terms " "by spaces; they must be 3 characters or more." msgstr "" -"Recherchez les statuts %%site.name%% par leur contenu. Séparez les termes de " +"Recherchez les avis %%site.name%% par leur contenu. Séparez les termes de " "recherche par des espaces. Ils doivent contenir au moins 3 caractères." #: actions/noticesearch.php:78 @@ -2047,7 +2050,7 @@ msgstr "Clin d’œil envoyé !" #: actions/oembed.php:79 actions/shownotice.php:100 msgid "Notice has no profile" -msgstr "Le statut n’a pas de profil" +msgstr "L’avis n’a pas de profil" #: actions/oembed.php:86 actions/shownotice.php:180 #, php-format @@ -2062,8 +2065,8 @@ msgstr "type de contenu " msgid "Only " msgstr "Seulement " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Format de données non supporté." @@ -2073,7 +2076,7 @@ msgstr "Recherche de personnes" #: actions/opensearch.php:67 msgid "Notice Search" -msgstr "Recherche de statut" +msgstr "Recherche d’avis" #: actions/othersettings.php:60 msgid "Other Settings" @@ -2302,12 +2305,12 @@ msgstr "Recherche de personnes" #: actions/peopletag.php:70 #, php-format msgid "Not a valid people tag: %s" -msgstr "Ce marquage est invalide : %s" +msgstr "Cette marque est invalide : %s" #: actions/peopletag.php:144 #, php-format msgid "Users self-tagged with %s - page %d" -msgstr "Utilisateurs marqués &s - page %d" +msgstr "Utilisateurs marqués par eux-mêmes %s - page %d" #: actions/postnotice.php:84 msgid "Invalid notice content" @@ -2317,8 +2320,7 @@ msgstr "Contenu invalide" #, php-format msgid "Notice license ‘%s’ is not compatible with site license ‘%s’." msgstr "" -"La licence des statuts « %s » n'est pas compatible avec la licence du site « %" -"s »." +"La licence des avis « %s » n'est pas compatible avec la licence du site « %s »." #: actions/profilesettings.php:60 msgid "Profile settings" @@ -2382,13 +2384,14 @@ msgstr "Indiquez votre emplacement, ex.: « Ville, État (ou région), Pays »" #: actions/tagother.php:209 lib/subscriptionlist.php:106 #: lib/subscriptionlist.php:108 lib/userprofile.php:209 msgid "Tags" -msgstr "Marquages" +msgstr "Marques" #: actions/profilesettings.php:140 msgid "" "Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated" msgstr "" -"Marquages (tags) pour votre profil, séparés par des virgules ou des espaces" +"Marques pour vous-même (lettres, chiffres, -, ., et _), séparées par des " +"virgules ou des espaces" #: actions/profilesettings.php:144 actions/siteadminpanel.php:307 msgid "Language" @@ -2429,7 +2432,7 @@ msgstr "La langue est trop longue (255 caractères maximum)." #: actions/profilesettings.php:246 actions/tagother.php:178 #, php-format msgid "Invalid tag: \"%s\"" -msgstr "Marquage invalide : « %s »" +msgstr "Marque invalide : « %s »" #: actions/profilesettings.php:295 msgid "Couldn't update user for autosubscribe." @@ -2441,7 +2444,7 @@ msgstr "Impossible d’enregistrer le profil." #: actions/profilesettings.php:336 msgid "Couldn't save tags." -msgstr "Impossible d’enregistrer les marquages." +msgstr "Impossible d’enregistrer les marques." #: actions/profilesettings.php:344 lib/adminpanelaction.php:126 msgid "Settings saved." @@ -2524,17 +2527,18 @@ msgstr "" #: actions/publictagcloud.php:57 msgid "Public tag cloud" -msgstr "Nuage de mots clefs public" +msgstr "Nuage de marques public" #: actions/publictagcloud.php:63 #, php-format msgid "These are most popular recent tags on %s " -msgstr "Derniers marquages les plus populaires dans %s " +msgstr "Dernières marques les plus populaires sur %s " #: actions/publictagcloud.php:69 #, php-format msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet." -msgstr "Personne n'a encore posté un statuts avec une [marque](%%doc.tags%%)." +msgstr "" +"Personne n'a encore posté d’avis avec une [marque (hashtag)](%%doc.tags%%)." #: actions/publictagcloud.php:72 msgid "Be the first to post one!" @@ -2551,7 +2555,7 @@ msgstr "" #: actions/publictagcloud.php:135 msgid "Tag cloud" -msgstr "Nuage de mots clefs" +msgstr "Nuage de marques" #: actions/recoverpassword.php:36 msgid "You are already logged in!" @@ -2724,7 +2728,7 @@ msgid "" "link up to friends and colleagues. " msgstr "" "Avec ce formulaire vous pouvez créer un nouveau compte. Vous pourrez ensuite " -"poster des statuts and et vous relier avec des amis et collègues. " +"poster des avis and et vous relier à des amis et collègues. " #: actions/register.php:424 msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required." @@ -2747,8 +2751,8 @@ msgstr "Courriel" #: actions/register.php:438 actions/register.php:442 msgid "Used only for updates, announcements, and password recovery" msgstr "" -"Utilisé uniquement pour les mises à jour de statut, les avertissements, et " -"la récupération de mot de passe" +"Utilisé uniquement pour les mises à jour, les notifications, et la " +"récupération de mot de passe" #: actions/register.php:449 msgid "Longer name, preferably your \"real\" name" @@ -2791,9 +2795,9 @@ msgstr "" "Félicitations, %s! Bienvenue dans %%%%site.name%%%%. Vous pouvez " "maintenant :\n" "\n" -"* Visiter [votre profil](%s) et publier votre premier statut.\n" +"* Visiter [votre profil](%s) et poster votre premier message.\n" "* Ajouter une adresse [Jabber/GTalk](%%%%action.imsettings%%%%) afin " -"d’envoyer et recevoir vos statuts par messagerie instantanée.\n" +"d’envoyer et recevoir vos avis par messagerie instantanée.\n" "* [Chercher des personnes](%%%%action.peoplesearch%%%%) que vous pourriez " "connaître ou qui partagent vos intêrets.\n" "* Mettre votre [profil](%%%%action.profilesettings%%%%) à jour pour en dire " @@ -2858,7 +2862,6 @@ msgid "Invalid profile URL (bad format)" msgstr "URL du profil invalide (mauvais format)" #: actions/remotesubscribe.php:168 -#, fuzzy msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." msgstr "" "URL de profil invalide (aucun document YADIS ou définition XRDS invalide)." @@ -2903,8 +2906,8 @@ msgid "" "This is the timeline showing replies to %s but %s hasn't received a notice " "to his attention yet." msgstr "" -"Ceci est la chronologie des réponses à %s mais %s n'a encore reçu aucun " -"statut à son intention." +"Ceci est la chronologie des réponses à %s mais %s n’a encore reçu aucun avis " +"à son intention." #: actions/replies.php:203 #, php-format @@ -2912,8 +2915,9 @@ msgid "" "You can engage other users in a conversation, subscribe to more people or " "[join groups](%%action.groups%%)." msgstr "" -"Vous pouvez vous engager dans une conversation avec d'autres personnes, vous " -"abonner à plus de gens ou [joindre des groupes](%%action.groups%%)." +"Vous pouvez entamer une conversation avec d’autres utilisateurs, vous " +"abonner à plus de personnes ou vous [inscrire à des groupes](%%action.groups%" +"%)." #: actions/replies.php:205 #, php-format @@ -2921,8 +2925,8 @@ msgid "" "You can try to [nudge %s](../%s) or [post something to his or her attention]" "(%%%%action.newnotice%%%%?status_textarea=%s)." msgstr "" -"Vous pouvez essayer de [faire un clin d’œil à %s](../%s) ou de [publier " -"quelque chose à son attention](%%%%action.newnotice%%%%?status_textarea=%s)" +"Vous pouvez essayer de [faire un clin d’œil à %s](../%s) ou de [poster " +"quelque chose à son intention](%%%%action.newnotice%%%%?status_textarea=%s)" #: actions/repliesrss.php:72 #, php-format @@ -2988,7 +2992,7 @@ msgid "" "would add to their favorites :)" msgstr "" "%s n’a pas ajouté d’avis à ses favoris pour le moment. Vous pourriez [créer " -"un compte](%%%%action.register%%%%), puis publier quelque chose " +"un compte](%%%%action.register%%%%), puis poster quelque chose " "d’intéressant, qui serait ajouté à ses favoris :)" #: actions/showfavorites.php:242 @@ -3139,22 +3143,22 @@ msgstr "%s - page %d" #: actions/showstream.php:122 #, php-format msgid "Notice feed for %s tagged %s (RSS 1.0)" -msgstr "Fil des statuts pour %s marqués %s (RSS 1.0)" +msgstr "Fil des avis pour %s marqués %s (RSS 1.0)" #: actions/showstream.php:129 #, php-format msgid "Notice feed for %s (RSS 1.0)" -msgstr "Flux des statuts de %s (RSS 1.0)" +msgstr "Flux des avis de %s (RSS 1.0)" #: actions/showstream.php:136 #, php-format msgid "Notice feed for %s (RSS 2.0)" -msgstr "Flux des statuts de %s (RSS 2.0)" +msgstr "Flux des avis de %s (RSS 2.0)" #: actions/showstream.php:143 #, php-format msgid "Notice feed for %s (Atom)" -msgstr "Flux des statuts de %s (Atom)" +msgstr "Flux des avis de %s (Atom)" #: actions/showstream.php:148 #, php-format @@ -3180,8 +3184,8 @@ msgid "" "You can try to nudge %s or [post something to his or her attention](%%%%" "action.newnotice%%%%?status_textarea=%s)." msgstr "" -"Vous pouvez essayer de faire un clin d’œil à %s ou de [publier quelque chose " -"à son attention](%%%%action.newnotice%%%%?status_textarea=%s)." +"Vous pouvez essayer de faire un clin d’œil à %s ou de [poster quelque chose " +"à son intention](%%%%action.newnotice%%%%?status_textarea=%s)." #: actions/showstream.php:234 #, php-format @@ -3194,8 +3198,8 @@ msgstr "" "**%s** possède un compte sur %%%%site.name%%%%, un service de [microblogging]" "(http://fr.wikipedia.org/wiki/Microblog) basé sur le logiciel libre " "[StatusNet](http://status.net/). [Inscrivez-vous maintenant](%%%%action." -"register%%%%) pour suivre les statuts de **%s** et bien plus ! ([En lire " -"plus](%%%%doc.help%%%%))" +"register%%%%) pour suivre les avis de **%s** et bien plus ! ([En lire plus](%" +"%%%doc.help%%%%))" #: actions/showstream.php:239 #, php-format @@ -3291,7 +3295,7 @@ msgstr "URL utilisée pour le lien de crédits au bas de chaque page" #: actions/siteadminpanel.php:284 msgid "Contact email address for your site" -msgstr "adresse de courriel de contact de votre site" +msgstr "Adresse de courriel de contact de votre site" #: actions/siteadminpanel.php:290 msgid "Local" @@ -3435,7 +3439,7 @@ msgstr "Limite de texte" #: actions/siteadminpanel.php:403 msgid "Maximum number of characters for notices." -msgstr "Nombre maximal de caractères pour les statuts." +msgstr "Nombre maximal de caractères pour les avis." #: actions/siteadminpanel.php:407 msgid "Dupe limit" @@ -3496,7 +3500,7 @@ msgid "" "Send me notices through SMS; I understand I may incur exorbitant charges " "from my carrier." msgstr "" -"Envoyez-moi les statuts par SMS ; je comprends que cela pourrait affecter ma " +"Envoyez-moi les avis par SMS ; je comprends que cela pourrait affecter ma " "facture de téléphonie mobile." #: actions/smssettings.php:306 @@ -3568,7 +3572,7 @@ msgstr "Ceci n’est pas un utilisateur local." #: actions/subscribe.php:69 msgid "Subscribed" -msgstr "Souscrit" +msgstr "Abonné" #: actions/subscribers.php:50 #, php-format @@ -3582,12 +3586,12 @@ msgstr "Abonnés à %s - page &d" #: actions/subscribers.php:63 msgid "These are the people who listen to your notices." -msgstr "Ces personnes suivent vos statuts." +msgstr "Ces personnes suivent vos avis." #: actions/subscribers.php:67 #, php-format msgid "These are the people who listen to %s's notices." -msgstr "Ces personnes suivent les statuts de %s." +msgstr "Ces personnes suivent les avis de %s." #: actions/subscribers.php:108 msgid "" @@ -3623,12 +3627,12 @@ msgstr "Abonnements de %s - page %d" #: actions/subscriptions.php:65 msgid "These are the people whose notices you listen to." -msgstr "Vous suivez les statuts de ces personnes. " +msgstr "Vous suivez les avis de ces personnes." #: actions/subscriptions.php:69 #, php-format msgid "These are the people whose notices %s listens to." -msgstr "Les statuts de ces personnes sont suivis par %s." +msgstr "Les avis de ces personnes sont suivis par %s." #: actions/subscriptions.php:121 #, php-format @@ -3670,7 +3674,7 @@ msgstr "Aucun argument d’identification." #: actions/tagother.php:65 #, php-format msgid "Tag %s" -msgstr "Marquage %s" +msgstr "Marque %s" #: actions/tagother.php:77 lib/userprofile.php:75 msgid "User profile" @@ -3688,7 +3692,9 @@ msgstr "Marquer l’utilisateur" msgid "" "Tags for this user (letters, numbers, -, ., and _), comma- or space- " "separated" -msgstr "Marquer cet utilisateur (séparer par des espaces ou des virgules)" +msgstr "" +"Marques pour cet utilisateur (lettres, chiffres, -, ., et _), séparées par " +"des virgules ou des espaces" #: actions/tagother.php:193 msgid "" @@ -3699,7 +3705,7 @@ msgstr "" #: actions/tagother.php:200 msgid "Could not save tags." -msgstr "Impossible d’enregistrer les marquages." +msgstr "Impossible d’enregistrer les marques." #: actions/tagother.php:236 msgid "Use this form to add tags to your subscribers or subscriptions." @@ -3709,26 +3715,26 @@ msgstr "" #: actions/tag.php:68 #, php-format msgid "Notices tagged with %s, page %d" -msgstr "Statuts marqués %s - page %d" +msgstr "Avis marqués %s - page %d" #: actions/tag.php:86 #, php-format msgid "Notice feed for tag %s (RSS 1.0)" -msgstr "Flux des statuts pour le marquage %s (RSS 1.0)" +msgstr "Flux des avis pour la marque %s (RSS 1.0)" #: actions/tag.php:92 #, php-format msgid "Notice feed for tag %s (RSS 2.0)" -msgstr "Flux des statuts pour le marquage %s (RSS 2.0)" +msgstr "Flux des avis pour la marque %s (RSS 2.0)" #: actions/tag.php:98 #, php-format msgid "Notice feed for tag %s (Atom)" -msgstr "Flux des statuts pour le marquage %s (Atom)" +msgstr "Flux des avis pour la marque %s (Atom)" #: actions/tagrss.php:35 msgid "No such tag." -msgstr "Aucun marquage trouvé." +msgstr "Cette marque n’existe pas." #: actions/twitapitrends.php:87 msgid "API method under construction." @@ -3762,7 +3768,7 @@ msgstr "Désabonné" #, php-format msgid "Listenee stream license ‘%s’ is not compatible with site license ‘%s’." msgstr "" -"La licence du flux auquel vous avez souscrit ‘%s’ n’est pas compatible avec " +"La licence du flux auquel vous êtes abonné(e) ‘%s’ n’est pas compatible avec " "la licence du site ‘%s’." #: actions/useradminpanel.php:58 lib/adminpanelaction.php:305 @@ -3865,8 +3871,8 @@ msgid "" "click “Rejectâ€." msgstr "" "Veuillez vérifier ces détails pour vous assurer que vous souhaitez vous " -"abonner aux statuts de cet utilisateur. Si vous n’avez pas demandé à vous " -"abonner aux statuts de quelqu’un, cliquez « Rejeter »." +"abonner aux avis de cet utilisateur. Si vous n’avez pas demandé à vous " +"abonner aux avis de quelqu’un, cliquez « Rejeter »." #: actions/userauthorization.php:188 msgid "License" @@ -3887,7 +3893,7 @@ msgstr "Refuser" #: actions/userauthorization.php:212 msgid "Reject this subscription" -msgstr "Rejeter cette souscription" +msgstr "Rejeter cet abonnement" #: actions/userauthorization.php:225 msgid "No authorization request!" @@ -3929,12 +3935,13 @@ msgstr "L’URI de l’auditeur ‘%s’ n’a pas été trouvée" #: actions/userauthorization.php:301 #, php-format msgid "Listenee URI ‘%s’ is too long." -msgstr "L’URI à laquelle vous avez souscrit ‘%s’ est trop longue." +msgstr "L’URI à laquelle vous vous êtes abonné(e) ‘%s’ est trop longue." #: actions/userauthorization.php:307 #, php-format msgid "Listenee URI ‘%s’ is a local user." -msgstr "L’URI à laquelle vous avez souscrit ‘%s’ est un utilisateur local." +msgstr "" +"L’URI à laquelle vous vous êtes abonné(e) ‘%s’ est un utilisateur local." #: actions/userauthorization.php:322 #, php-format @@ -4031,7 +4038,7 @@ msgstr "Impossible de mettre à jour le message avec un nouvel URI." #: classes/Notice.php:164 #, php-format msgid "DB error inserting hashtag: %s" -msgstr "Erreur de base de donnée en insérant le hashtag : %s" +msgstr "Erreur de base de donnée en insérant la marque (hashtag) : %s" #: classes/Notice.php:179 msgid "Problem saving notice. Too long." @@ -4039,14 +4046,14 @@ msgstr "Problème lors de l’enregistrement de l’avis ; trop long." #: classes/Notice.php:183 msgid "Problem saving notice. Unknown user." -msgstr "Erreur lors de l’enregistrement du statut. Utilisateur inconnu." +msgstr "Erreur lors de l’enregistrement de l’avis. Utilisateur inconnu." #: classes/Notice.php:188 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" -"Trop de statuts, trop vite ! Prenez une pause et publiez à nouveau dans " -"quelques minutes." +"Trop d’avis, trop vite ! Faites une pause et publiez à nouveau dans quelques " +"minutes." #: classes/Notice.php:194 msgid "" @@ -4058,11 +4065,11 @@ msgstr "" #: classes/Notice.php:200 msgid "You are banned from posting notices on this site." -msgstr "Il vous est interdit de publier des statuts dans ce site." +msgstr "Il vous est interdit de poster des avis sur ce site." #: classes/Notice.php:265 classes/Notice.php:290 msgid "Problem saving notice." -msgstr "Problème lors de l’enregistrement du statut." +msgstr "Problème lors de l’enregistrement de l’avis." #: classes/Notice.php:1124 #, php-format @@ -4335,7 +4342,7 @@ msgstr "Fournisseur" #: lib/attachmentnoticesection.php:67 msgid "Notices where this attachment appears" -msgstr "Statuts sur lesquels cette pièce jointe apparait." +msgstr "Avis sur lesquels cette pièce jointe apparaît." #: lib/attachmenttagcloudsection.php:48 msgid "Tags for this attachment" @@ -4384,15 +4391,15 @@ msgstr "" #: lib/command.php:152 lib/command.php:400 msgid "Notice with that id does not exist" -msgstr "Aucun statut avec cet identifiant n’existe" +msgstr "Aucun avis avec cet identifiant n’existe" #: lib/command.php:168 lib/command.php:416 lib/command.php:471 msgid "User has no last notice" -msgstr "Aucun statut récent pour cet utilisateur" +msgstr "Aucun avis récent pour cet utilisateur" #: lib/command.php:190 msgid "Notice marked as fave." -msgstr "Statut ajouté aux favoris." +msgstr "Avis ajouté aux favoris." #: lib/command.php:315 #, php-format @@ -4484,37 +4491,51 @@ msgstr "Avertissements activés." msgid "Can't turn on notification." msgstr "Impossible d’activer les avertissements." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Impossible de créer les alias." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 msgid "You are not subscribed to anyone." msgstr "Vous n'êtes pas abonné(e) à personne." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Vous êtes abonné à cette personne :" msgstr[1] "Vous êtes abonné à ces personnes :" -#: lib/command.php:614 +#: lib/command.php:645 msgid "No one is subscribed to you." msgstr "Personne ne s'est abonné à vous." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Cette personne est abonnée à vous :" msgstr[1] "Ces personnes sont abonnées à vous :" -#: lib/command.php:636 +#: lib/command.php:667 msgid "You are not a member of any groups." msgstr "Vous n'êtes pas membre d'aucun groupe." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Vous êtes membre de ce groupe :" msgstr[1] "Vous êtes membre de ces groupes :" -#: lib/command.php:652 +#: lib/command.php:683 #, fuzzy msgid "" "Commands:\n" @@ -4534,6 +4555,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4579,7 +4601,7 @@ msgstr "" "last <nickname> - même effet que 'get'\n" "on <nickname> - pas encore implémenté.\n" "off <nickname> - pas encore implémenté.\n" -"nudge <nickname> - rappeler à un utilisateur de publier.\n" +"nudge <nickname> - clin d’œil : rappeler à un utilisateur de poster.\n" "invite <phone number> - pas encore implémenté.\n" "track <word> - pas encore implémenté.\n" "untrack <word> - pas encore implémenté.\n" @@ -4611,11 +4633,11 @@ msgstr "IM" #: lib/connectsettingsaction.php:111 msgid "Updates by instant messenger (IM)" -msgstr "Suivi des statuts par messagerie instantanée" +msgstr "Suivi des avis par messagerie instantanée" #: lib/connectsettingsaction.php:116 msgid "Updates by SMS" -msgstr "Suivi des statuts par SMS" +msgstr "Suivi des avis par SMS" #: lib/dberroraction.php:60 msgid "Database error" @@ -4632,11 +4654,7 @@ msgstr "" "Vous pouvez importer votre image d’arrière plan personnelle. La taille " "maximale du fichier est de 2 Mo." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "Mauvais paramètres de couleur par défaut : " - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "Les paramètre par défaut de la conception ont été restaurés." @@ -4674,7 +4692,7 @@ msgstr "Ami d’un ami" #: lib/galleryaction.php:121 msgid "Filter tags" -msgstr "Filtrer les balises" +msgstr "Filtrer les marques" #: lib/galleryaction.php:131 msgid "All" @@ -4686,11 +4704,11 @@ msgstr "Sélectionner une marque à filtrer" #: lib/galleryaction.php:140 msgid "Tag" -msgstr "Marquer" +msgstr "Marque" #: lib/galleryaction.php:141 msgid "Choose a tag to narrow list" -msgstr "Choissez un marquage pour réduire la liste" +msgstr "Choissez une marque pour réduire la liste" #: lib/galleryaction.php:143 msgid "Go" @@ -4770,7 +4788,7 @@ msgstr "Groupes avec le plus d'éléments publiés" #: lib/grouptagcloudsection.php:56 #, php-format msgid "Tags in %s group's notices" -msgstr "Marquages des statuts du groupe %s" +msgstr "Marques dans les avis du groupe %s" #: lib/htmloutputter.php:103 msgid "This page is not available in a media type you accept" @@ -4889,7 +4907,7 @@ msgstr "" #: lib/mail.php:236 #, php-format msgid "%1$s is now listening to your notices on %2$s." -msgstr "%1$s suit maintenant vos statuts dans %2$s." +msgstr "%1$s suit maintenant vos avis sur %2$s." #: lib/mail.php:241 #, php-format @@ -4905,7 +4923,7 @@ msgid "" "----\n" "Change your email address or notification options at %8$s\n" msgstr "" -"%1$s suit maintenant vos statuts sur %2$s.\n" +"%1$s suit maintenant vos avis sur %2$s.\n" "\n" "%3$s\n" "\n" @@ -4952,14 +4970,13 @@ msgid "" "Faithfully yours,\n" "%4$s" msgstr "" -"Une nouvelle adresse vous a été attribuée pour publier vos statuts dans %1" -"$s.\n" +"Une nouvelle adresse vous a été attribuée pour poster vos avis sur %1$s.\n" "\n" -"Écrivez à %2$s pour mettre à jour votre statut.\n" +"Écrivez à %2$s pour poster un nouvel avis.\n" "\n" "Plus d’info : %3$s.\n" "\n" -"Amicalement vôtre,\n" +"Cordialement,\n" "%4$s" #: lib/mail.php:413 @@ -4992,7 +5009,7 @@ msgid "" "%4$s\n" msgstr "" "%1$s (%2$s) se demande ce que vous devenez ces temps-ci et vous invite à " -"publier des nouvelles.\n" +"poster des nouvelles.\n" "\n" "Donc on vous écoute :)\n" "\n" @@ -5044,7 +5061,7 @@ msgstr "" #: lib/mail.php:559 #, php-format msgid "%s (@%s) added your notice as a favorite" -msgstr "%s (@%s) a ajouté un de vos statut à ses favoris" +msgstr "%s (@%s) a ajouté un de vos avis à ses favoris" #: lib/mail.php:561 #, php-format @@ -5178,24 +5195,24 @@ msgstr "Envoyer un message direct" msgid "To" msgstr "À" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Caractères restants" #: lib/noticeform.php:158 msgid "Send a notice" -msgstr "Envoyer un statut" +msgstr "Envoyer un avis" #: lib/noticeform.php:171 #, php-format msgid "What's up, %s?" msgstr "Quoi de neuf, %s ?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "Attacher" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "Attacher un fichier" @@ -5230,7 +5247,7 @@ msgstr "dans le contexte" #: lib/noticelist.php:526 msgid "Reply to this notice" -msgstr "Répondre à ce statut" +msgstr "Répondre à cet avis" #: lib/noticelist.php:527 msgid "Reply" @@ -5303,7 +5320,7 @@ msgstr "Vos messages envoyés" #: lib/personaltagcloudsection.php:56 #, php-format msgid "Tags in %s's notices" -msgstr "Marquages des statuts de %s" +msgstr "Marques dans les avis de %s" #: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82 msgid "Subscriptions" @@ -5351,7 +5368,7 @@ msgstr "Groupes d’utilisateurs" #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85 msgid "Recent tags" -msgstr "Marquages récents" +msgstr "Marques récentes" #: lib/publicgroupnav.php:88 msgid "Featured" @@ -5375,7 +5392,7 @@ msgstr "Rechercher sur le site" #: lib/searchaction.php:126 msgid "Keyword(s)" -msgstr "Mot(s) celf(s)" +msgstr "Mot(s) clef(s)" #: lib/searchaction.php:162 msgid "Search help" @@ -5391,7 +5408,7 @@ msgstr "Chercher des personnes sur ce site" #: lib/searchgroupnav.php:83 msgid "Find content of notices" -msgstr "Chercher dans le contenu des statuts" +msgstr "Chercher dans le contenu des avis" #: lib/searchgroupnav.php:85 msgid "Find groups on this site" @@ -5431,12 +5448,12 @@ msgstr "Groupes de %s" #: lib/subscriberspeopleselftagcloudsection.php:48 #: lib/subscriptionspeopleselftagcloudsection.php:48 msgid "People Tagcloud as self-tagged" -msgstr "Nuage de mots clefs des personnes tel que définis par eux-même" +msgstr "Nuage de marques pour une personne (ajoutées par eux-même)" #: lib/subscriberspeopletagcloudsection.php:48 #: lib/subscriptionspeopletagcloudsection.php:48 msgid "People Tagcloud as tagged" -msgstr "Nuage de mots clefs des personnes" +msgstr "Nuage de marques pour une personne" #: lib/subscriptionlist.php:126 msgid "(none)" @@ -5444,7 +5461,7 @@ msgstr "(aucun)" #: lib/subs.php:52 msgid "Already subscribed!" -msgstr "Déjà souscrit !" +msgstr "Déjà abonné !" #: lib/subs.php:56 msgid "User has blocked you." @@ -5462,7 +5479,11 @@ msgstr "Impossible d’abonner une autre personne à votre profil." msgid "Not subscribed!" msgstr "Pas abonné !" -#: lib/subs.php:140 +#: lib/subs.php:133 +msgid "Couldn't delete self-subscription." +msgstr "Impossible de supprimer l’abonnement à soi-même." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Impossible de cesser l’abonnement" diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po index 445e580bb..b3d15c8a4 100644 --- a/locale/ga/LC_MESSAGES/statusnet.po +++ b/locale/ga/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:42+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:33+0000\n" "Language-Team: Irish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ga\n" "X-Message-Group: out-statusnet\n" @@ -185,7 +185,12 @@ msgstr "O usuario non ten perfil." msgid "Could not save profile." msgstr "Non se puido gardar o perfil." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Non se puido actualizar o usuario." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Bloqueo de usuario fallido." @@ -580,7 +585,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -848,109 +853,109 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Tamaño inválido." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Esta páxina non está dispoñÃbel no tipo de medio que aceptas" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Cambiar contrasinal" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Invitar" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Modificado" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Novo chÃo" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Podes actualizar a túa información do perfil persoal aquÃ" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "Cambiar contrasinal" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "Conectar" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Buscar" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "Lista" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -960,7 +965,7 @@ msgstr "" msgid "Save" msgstr "Gardar" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1410,20 +1415,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Non se puido actualizar o usuario." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "Non se puideron gardar os teus axustes de Twitter!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Preferencias gardadas." @@ -1743,7 +1748,7 @@ msgstr "Mensaxe persoal" msgid "Optionally add a personal message to the invitation." msgstr "Opcionalmente engadir unha mensaxe persoal á invitación." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Enviar" @@ -1852,11 +1857,11 @@ msgstr "Non podes seguir a este usuario: o Usuario non se atopa." msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Sesión xa iniciada" -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Contido do chÃo inválido" @@ -2072,8 +2077,8 @@ msgstr "Conectar" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Non é un formato de datos soportado." @@ -4528,12 +4533,26 @@ msgstr "Notificación habilitada." msgid "Can't turn on notification." msgstr "Non se pode activar a notificación." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Non se puido crear o favorito." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Non estás suscrito a ese perfil" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Xa estas suscrito a estes usuarios:" @@ -4542,12 +4561,12 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Outro usuario non se puido suscribir a ti." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Outro usuario non se puido suscribir a ti." @@ -4556,12 +4575,12 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Non estás suscrito a ese perfil" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Non estás suscrito a ese perfil" @@ -4570,7 +4589,7 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" -#: lib/command.php:652 +#: lib/command.php:683 #, fuzzy msgid "" "Commands:\n" @@ -4590,6 +4609,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4679,11 +4699,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Podes actualizar a túa información do perfil persoal aquÃ" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -5206,7 +5222,7 @@ msgstr "Eliminar chÃo" msgid "To" msgstr "A" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "6 ou máis caracteres" @@ -5221,11 +5237,11 @@ msgstr "Dar un toque" msgid "What's up, %s?" msgstr "¿Que pasa, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5514,7 +5530,12 @@ msgstr "Outro usuario non se puido suscribir a ti." msgid "Not subscribed!" msgstr "Non está suscrito!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Non se pode eliminar a subscrición." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Non se pode eliminar a subscrición." diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po index c48131307..a6d463d53 100644 --- a/locale/he/LC_MESSAGES/statusnet.po +++ b/locale/he/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:46+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:36+0000\n" "Language-Team: Hebrew\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: he\n" "X-Message-Group: out-statusnet\n" @@ -183,7 +183,12 @@ msgstr "למשתמש ×ין פרופיל." msgid "Could not save profile." msgstr "שמירת הפרופיל × ×›×©×œ×”." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "עידכון המשתמש × ×›×©×œ." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -574,7 +579,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -834,109 +839,109 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "גודל ×œ× ×—×•×§×™." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "עמוד ×–×” ××™× ×• זמין בסוג מדיה ש×תה יכול לקבל" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "×©× ×” סיסמה" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "הודעה חדשה" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "×©× ×”" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "הודעה חדשה" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "×–×” ×רוך מידי. ×ורך מירבי להודעה ×”×•× 140 ×ותיות." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "×©× ×” סיסמה" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "התחבר" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "חיפוש" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "טקסט" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "×”×™×›× ×¡" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -946,7 +951,7 @@ msgstr "" msgid "Save" msgstr "שמור" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1388,19 +1393,19 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "עידכון המשתמש × ×›×©×œ." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "העדפות × ×©×ž×¨×•." @@ -1715,7 +1720,7 @@ msgstr "" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "שלח" @@ -1797,11 +1802,11 @@ msgstr "× ×›×©×œ×” יצירת OpenID מתוך: %s" msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "כבר מחובר." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "תוכן ההודעה ×œ× ×—×•×§×™" @@ -2011,8 +2016,8 @@ msgstr "התחבר" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -4375,40 +4380,54 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "שמירת מידע ×”×ª×ž×•× ×” × ×›×©×œ" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "×œ× ×©×œ×—× ×• ××œ×™× ×• ×ת הפרופיל ×”×–×”" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "×œ× ×©×œ×—× ×• ××œ×™× ×• ×ת הפרופיל ×”×–×”" msgstr[1] "×œ× ×©×œ×—× ×• ××œ×™× ×• ×ת הפרופיל ×”×–×”" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "הרשמה מרוחקת" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "הרשמה מרוחקת" msgstr[1] "הרשמה מרוחקת" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "×œ× ×©×œ×—× ×• ××œ×™× ×• ×ת הפרופיל ×”×–×”" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "×œ× ×©×œ×—× ×• ××œ×™× ×• ×ת הפרופיל ×”×–×”" msgstr[1] "×œ× ×©×œ×—× ×• ××œ×™× ×• ×ת הפרופיל ×”×–×”" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4427,6 +4446,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4490,11 +4510,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "×–×” ×רוך מידי. ×ורך מירבי להודעה ×”×•× 140 ×ותיות." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4956,7 +4972,7 @@ msgstr "" msgid "To" msgstr "×ל" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "לפחות 6 ×ותיות" @@ -4971,11 +4987,11 @@ msgstr "הודעה חדשה" msgid "What's up, %s?" msgstr "מה המצב %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5257,7 +5273,12 @@ msgstr "" msgid "Not subscribed!" msgstr "×œ× ×ž× ×•×™!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "מחיקת ×”×ž× ×•×™ ×œ× ×”×¦×œ×™×—×”." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "מחיקת ×”×ž× ×•×™ ×œ× ×”×¦×œ×™×—×”." diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po index c22ee263d..9bea1de8f 100644 --- a/locale/hsb/LC_MESSAGES/statusnet.po +++ b/locale/hsb/LC_MESSAGES/statusnet.po @@ -6,19 +6,19 @@ # msgid "" msgstr "" -"" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-27 23:50+0000\n" -"PO-Revision-Date: 2009-12-02 23:32:10+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:39+0000\n" "Language-Team: Dutch\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hsb\n" "X-Message-Group: out-statusnet\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || n%100==4) ? 2 : 3)\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || " +"n%100==4) ? 2 : 3)\n" #: actions/all.php:63 actions/public.php:97 actions/replies.php:92 #: actions/showfavorites.php:137 actions/tag.php:51 @@ -76,10 +76,42 @@ msgstr "Kanal za pÅ™ećelow wužiwarja %s (RSS 2.0)" msgid "Feed for friends of %s (Atom)" msgstr "Kanal za pÅ™ećelow wužiwarja %s (Atom)" +#: actions/all.php:127 +#, php-format +msgid "" +"This is the timeline for %s and friends but no one has posted anything yet." +msgstr "" + +#: actions/all.php:132 +#, php-format +msgid "" +"Try subscribing to more people, [join a group](%%action.groups%%) or post " +"something yourself." +msgstr "" + +#: actions/all.php:134 +#, php-format +msgid "" +"You can try to [nudge %s](../%s) from his profile or [post something to his " +"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)." +msgstr "" + +#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202 +#, php-format +msgid "" +"Why not [register an account](%%%%action.register%%%%) and then nudge %s or " +"post a notice to his or her attention." +msgstr "" + #: actions/all.php:165 msgid "You and friends" msgstr "Ty a pÅ™ećeljo" +#: actions/allrss.php:119 actions/apitimelinefriends.php:121 +#, php-format +msgid "Updates from %1$s and friends on %2$s!" +msgstr "" + #: actions/apiaccountratelimitstatus.php:70 #: actions/apiaccountupdatedeliverydevice.php:93 #: actions/apiaccountupdateprofilebackgroundimage.php:94 @@ -101,10 +133,34 @@ msgstr "API-metoda njenamakana." msgid "This method requires a POST." msgstr "Tuta metoda wužaduje sej POST." +#: actions/apiaccountupdatedeliverydevice.php:105 +msgid "" +"You must specify a parameter named 'device' with a value of one of: sms, im, " +"none" +msgstr "" + #: actions/apiaccountupdatedeliverydevice.php:132 msgid "Could not update user." msgstr "Wužiwar njeje so daÅ‚ aktualizować." +#: actions/apiaccountupdateprofilebackgroundimage.php:108 +#: actions/apiaccountupdateprofileimage.php:97 +#: actions/apistatusesupdate.php:127 actions/avatarsettings.php:254 +#: actions/designadminpanel.php:122 actions/newnotice.php:94 +#: lib/designsettings.php:283 +#, php-format +msgid "" +"The server was unable to handle that much POST data (%s bytes) due to its " +"current configuration." +msgstr "" + +#: actions/apiaccountupdateprofilebackgroundimage.php:136 +#: actions/apiaccountupdateprofilebackgroundimage.php:146 +#: actions/apiaccountupdateprofilecolors.php:164 +#: actions/apiaccountupdateprofilecolors.php:174 +msgid "Unable to save your design settings." +msgstr "" + #: actions/apiaccountupdateprofilebackgroundimage.php:187 #: actions/apiaccountupdateprofilecolors.php:142 msgid "Could not update your design." @@ -123,6 +179,18 @@ msgstr "Wužiwar nima profil." msgid "Could not save profile." msgstr "Profil njeje so skÅ‚adować daÅ‚." +#: actions/apiblockcreate.php:105 +msgid "You cannot block yourself!" +msgstr "NjemóžeÅ¡ so samoho blokować." + +#: actions/apiblockcreate.php:119 +msgid "Block user failed." +msgstr "" + +#: actions/apiblockdestroy.php:107 +msgid "Unblock user failed." +msgstr "" + #: actions/apidirectmessagenew.php:126 msgid "No message text!" msgstr "Žadyn powÄ›sćowy tekst!" @@ -136,6 +204,10 @@ msgstr "To je pÅ™edoÅ‚ho. Maksimalna powÄ›sćowa wulkosć je %d znamjeÅ¡kow." msgid "Recipient user not found." msgstr "PÅ™ijimowar njenamakany." +#: actions/apidirectmessagenew.php:150 +msgid "Can't send direct messages to users who aren't your friend." +msgstr "" + #: actions/apidirectmessage.php:89 #, php-format msgid "Direct messages from %s" @@ -182,10 +254,53 @@ msgstr "Status z tym ID njenamakany." msgid "This status is already a favorite!" msgstr "Tutón status je hižo faworit!" +#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 +msgid "Could not create favorite." +msgstr "" + #: actions/apifavoritedestroy.php:122 msgid "That status is not a favorite!" msgstr "Tón status faworit njeje!" +#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87 +msgid "Could not delete favorite." +msgstr "" + +#: actions/apifriendshipscreate.php:109 +msgid "Could not follow user: User not found." +msgstr "" + +#: actions/apifriendshipscreate.php:118 +#, php-format +msgid "Could not follow user: %s is already on your list." +msgstr "" + +#: actions/apifriendshipsdestroy.php:109 +msgid "Could not unfollow user: User not found." +msgstr "" + +#: actions/apifriendshipsdestroy.php:120 +msgid "You cannot unfollow yourself!" +msgstr "" + +#: actions/apifriendshipsexists.php:94 +msgid "Two user ids or screen_names must be supplied." +msgstr "" + +#: actions/apifriendshipsshow.php:135 +msgid "Could not determine source user." +msgstr "" + +#: actions/apifriendshipsshow.php:143 +msgid "Could not find target user." +msgstr "" + +#: actions/apigroupcreate.php:164 actions/editgroup.php:182 +#: actions/newgroup.php:126 actions/profilesettings.php:208 +#: actions/register.php:205 +msgid "Nickname must have only lowercase letters and numbers and no spaces." +msgstr "" + #: actions/apigroupcreate.php:173 actions/editgroup.php:186 #: actions/newgroup.php:130 actions/profilesettings.php:231 #: actions/register.php:208 @@ -254,15 +369,44 @@ msgstr "Skupina njenamakana!" msgid "You are already a member of that group." msgstr "Sy hižo ÄÅ‚on teje skupiny." +#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221 +msgid "You have been blocked from that group by the admin." +msgstr "" + +#: actions/apigroupjoin.php:138 +#, php-format +msgid "Could not join user %s to group %s." +msgstr "" + #: actions/apigroupleave.php:114 msgid "You are not a member of this group." msgstr "Njejsy ÄÅ‚on tuteje skupiny." +#: actions/apigroupleave.php:124 +#, php-format +msgid "Could not remove user %s to group %s." +msgstr "" + +#: actions/apigrouplistall.php:90 actions/usergroups.php:62 +#, php-format +msgid "%s groups" +msgstr "" + #: actions/apigrouplistall.php:94 #, php-format msgid "groups on %s" msgstr "skupiny na %s" +#: actions/apigrouplist.php:95 +#, php-format +msgid "%s's groups" +msgstr "" + +#: actions/apigrouplist.php:103 +#, php-format +msgid "Groups %s is a member of on %s." +msgstr "" + #: actions/apistatusesdestroy.php:107 msgid "This method requires a POST or DELETE." msgstr "Tuta metoda wužaduje sej POST abo DELETE." @@ -289,10 +433,67 @@ msgstr "To je pÅ™edoÅ‚ho. Maksimalna wulkosć zdźělenki je %d znamjeÅ¡kow." msgid "Not found" msgstr "Njenamakany" +#: actions/apistatusesupdate.php:227 actions/newnotice.php:183 +#, php-format +msgid "Max notice size is %d chars, including attachment URL." +msgstr "" + #: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261 msgid "Unsupported format." msgstr "NjepodpÄ›rany format." +#: actions/apitimelinefavorites.php:107 +#, php-format +msgid "%s / Favorites from %s" +msgstr "" + +#: actions/apitimelinefavorites.php:119 +#, php-format +msgid "%s updates favorited by %s / %s." +msgstr "" + +#: actions/apitimelinegroup.php:108 actions/apitimelineuser.php:117 +#: actions/grouprss.php:131 actions/userrss.php:90 +#, php-format +msgid "%s timeline" +msgstr "" + +#: actions/apitimelinegroup.php:116 actions/apitimelineuser.php:125 +#: actions/userrss.php:92 +#, php-format +msgid "Updates from %1$s on %2$s!" +msgstr "" + +#: actions/apitimelinementions.php:116 +#, php-format +msgid "%1$s / Updates mentioning %2$s" +msgstr "" + +#: actions/apitimelinementions.php:126 +#, php-format +msgid "%1$s updates that reply to updates from %2$s / %3$s." +msgstr "" + +#: actions/apitimelinepublic.php:106 actions/publicrss.php:103 +#, php-format +msgid "%s public timeline" +msgstr "" + +#: actions/apitimelinepublic.php:110 actions/publicrss.php:105 +#, php-format +msgid "%s updates from everyone!" +msgstr "" + +#: actions/apitimelinetag.php:101 actions/tag.php:66 +#, php-format +msgid "Notices tagged with %s" +msgstr "" + +#: actions/apitimelinetag.php:107 actions/tagrss.php:64 +#, php-format +msgid "Updates tagged with %1$s on %2$s!" +msgstr "" + #: actions/apiusershow.php:96 msgid "Not found." msgstr "Njenamakany." @@ -321,7 +522,8 @@ msgstr "Awatar" #: actions/avatarsettings.php:78 #, php-format msgid "You can upload your personal avatar. The maximum file size is %s." -msgstr "MóžeÅ¡ swój wosobinski awatar nahrać. Maksimalna datajowa wulkosć je %s." +msgstr "" +"MóžeÅ¡ swój wosobinski awatar nahrać. Maksimalna datajowa wulkosć je %s." #: actions/avatarsettings.php:106 actions/avatarsettings.php:182 #: actions/grouplogo.php:178 actions/remotesubscribe.php:191 @@ -353,10 +555,48 @@ msgstr "ZniÄić" msgid "Upload" msgstr "Nahrać" +#: actions/avatarsettings.php:228 actions/grouplogo.php:286 +msgid "Crop" +msgstr "" + +#: actions/avatarsettings.php:265 actions/disfavor.php:74 +#: actions/emailsettings.php:238 actions/favor.php:75 +#: actions/groupblock.php:66 actions/grouplogo.php:309 +#: actions/groupunblock.php:66 actions/imsettings.php:206 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 +#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 +#: actions/othersettings.php:145 actions/passwordsettings.php:138 +#: actions/profilesettings.php:187 actions/recoverpassword.php:337 +#: actions/register.php:165 actions/remotesubscribe.php:77 +#: actions/smssettings.php:228 actions/subedit.php:38 actions/subscribe.php:46 +#: actions/tagother.php:166 actions/unsubscribe.php:69 +#: actions/userauthorization.php:52 lib/designsettings.php:294 +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#: actions/avatarsettings.php:277 actions/designadminpanel.php:103 +#: actions/emailsettings.php:256 actions/grouplogo.php:319 +#: actions/imsettings.php:220 actions/recoverpassword.php:44 +#: actions/smssettings.php:248 lib/designsettings.php:304 +msgid "Unexpected form submission." +msgstr "" + +#: actions/avatarsettings.php:322 +msgid "Pick a square area of the image to be your avatar" +msgstr "" + +#: actions/avatarsettings.php:337 actions/grouplogo.php:377 +msgid "Lost our file data." +msgstr "" + #: actions/avatarsettings.php:360 msgid "Avatar updated." msgstr "Awatar zaktualizowany." +#: actions/avatarsettings.php:363 +msgid "Failed updating avatar." +msgstr "" + #: actions/avatarsettings.php:387 msgid "Avatar deleted." msgstr "Awatar zniÄeny." @@ -375,6 +615,32 @@ msgstr "Žane pÅ™imjeno" msgid "No such group" msgstr "Skupina njeeksistuje" +#: actions/blockedfromgroup.php:90 +#, php-format +msgid "%s blocked profiles" +msgstr "" + +#: actions/blockedfromgroup.php:93 +#, php-format +msgid "%s blocked profiles, page %d" +msgstr "" + +#: actions/blockedfromgroup.php:108 +msgid "A list of the users blocked from joining this group." +msgstr "" + +#: actions/blockedfromgroup.php:281 +msgid "Unblock user from group" +msgstr "" + +#: actions/blockedfromgroup.php:313 lib/unblockform.php:69 +msgid "Unblock" +msgstr "" + +#: actions/blockedfromgroup.php:313 lib/unblockform.php:80 +msgid "Unblock this user" +msgstr "" + #: actions/block.php:69 msgid "You already blocked that user." msgstr "Sy tutoho wužiwarja hižo zablokowaÅ‚." @@ -383,6 +649,13 @@ msgstr "Sy tutoho wužiwarja hižo zablokowaÅ‚." msgid "Block user" msgstr "Wužiwarja blokować" +#: actions/block.php:130 +msgid "" +"Are you sure you want to block this user? Afterwards, they will be " +"unsubscribed from you, unable to subscribe to you in the future, and you " +"will not be notified of any @-replies from them." +msgstr "" + #: actions/block.php:143 actions/deletenotice.php:145 #: actions/deleteuser.php:147 actions/groupblock.php:178 msgid "No" @@ -401,6 +674,14 @@ msgstr "Haj" msgid "Block this user" msgstr "Tutoho wužiwarja blokować" +#: actions/block.php:162 +msgid "Failed to save block information." +msgstr "" + +#: actions/bookmarklet.php:50 +msgid "Post to " +msgstr "" + #: actions/confirmaddress.php:75 msgid "No confirmation code." msgstr "Žadyn wobkrućenski kod." @@ -422,6 +703,19 @@ msgstr "Njespóznany adresowy typ %s" msgid "That address has already been confirmed." msgstr "Tuta adresa bu hižo wobkrućena." +#: actions/confirmaddress.php:114 actions/emailsettings.php:296 +#: actions/emailsettings.php:427 actions/imsettings.php:258 +#: actions/imsettings.php:401 actions/othersettings.php:174 +#: actions/profilesettings.php:276 actions/smssettings.php:278 +#: actions/smssettings.php:420 +msgid "Couldn't update user." +msgstr "" + +#: actions/confirmaddress.php:126 actions/emailsettings.php:391 +#: actions/imsettings.php:363 actions/smssettings.php:382 +msgid "Couldn't delete email confirmation." +msgstr "" + #: actions/confirmaddress.php:144 msgid "Confirm Address" msgstr "Adresu wobkrućić" @@ -436,7 +730,7 @@ msgid "Conversation" msgstr "Konwersacija" #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87 -#: lib/profileaction.php:206 lib/searchgroupnav.php:82 +#: lib/profileaction.php:216 lib/searchgroupnav.php:82 msgid "Notices" msgstr "Zdźělenki" @@ -457,6 +751,12 @@ msgstr "NjepÅ™izjewjeny." msgid "Can't delete this notice." msgstr "Tuta zdźělenka njeda so zniÄić." +#: actions/deletenotice.php:103 +msgid "" +"You are about to permanently delete a notice. Once this is done, it cannot " +"be undone." +msgstr "" + #: actions/deletenotice.php:109 actions/deletenotice.php:141 msgid "Delete notice" msgstr "Zdźělenku wuÅ¡mórnyć" @@ -473,6 +773,10 @@ msgstr "Tutu zdźělenku njewuÅ¡mórnyć" msgid "Delete this notice" msgstr "Tutu zdźělenku wuÅ¡mórnyć" +#: actions/deletenotice.php:157 +msgid "There was a problem with your session token. Try again, please." +msgstr "" + #: actions/deleteuser.php:67 msgid "You cannot delete users." msgstr "NjemóžeÅ¡ wužiwarjow wuÅ¡mórnyć." @@ -485,6 +789,12 @@ msgstr "MóžeÅ¡ jenož lokalnych wužiwarjow wuÅ¡mórnyć." msgid "Delete user" msgstr "Wužiwarja wuÅ¡mórnyć" +#: actions/deleteuser.php:135 +msgid "" +"Are you sure you want to delete this user? This will clear all data about " +"the user from the database, without a backup." +msgstr "" + #: actions/deleteuser.php:148 lib/deleteuserform.php:77 msgid "Delete this user" msgstr "Tutoho wužiwarja wuÅ¡mórnyć" @@ -498,90 +808,101 @@ msgstr "Design" msgid "Design settings for this StatusNet site." msgstr "Designowe nastajenja za tute sydÅ‚o StatusNet." -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "NjepÅ‚aćiwy logowy URL." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "Å at njesteji k dispoziciji: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "Logo zmÄ›nić" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "Logo sydÅ‚a" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "Å at zmÄ›nić" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "Å at sydÅ‚a" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "Å at za sydÅ‚o." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Pozadkowy wobraz zmÄ›nić" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "Pozadk" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format -msgid "You can upload a background image for the site. The maximum file size is %1$s." -msgstr "MóžeÅ¡ pozadkowy wobraz za sydÅ‚o nahrać. Maksimalna datajowa wulkosć je %1$s." +msgid "" +"You can upload a background image for the site. The maximum file size is %1" +"$s." +msgstr "" +"MóžeÅ¡ pozadkowy wobraz za sydÅ‚o nahrać. Maksimalna datajowa wulkosć je %1$s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "Zapinjeny" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "Wupinjeny" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 +msgid "Turn background image on or off." +msgstr "" + +#: actions/designadminpanel.php:479 lib/designsettings.php:161 +msgid "Tile background image" +msgstr "" + +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Barby zmÄ›nić" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Wobsah" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "BóÄnica" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "Wotkazy" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "Standardne hódnoty wužiwać" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "Standardne designy wobnowić" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "Na standard wróćo stajić" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -591,7 +912,7 @@ msgstr "Na standard wróćo stajić" msgid "Save" msgstr "SkÅ‚adować" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "Design skÅ‚adować" @@ -607,6 +928,11 @@ msgstr "K faworitam pÅ™idać" msgid "No such document." msgstr "Dokument njeeksistuje." +#: actions/editgroup.php:56 +#, php-format +msgid "Edit %s group" +msgstr "" + #: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65 msgid "You must be logged in to create a group." msgstr "DyrbiÅ¡ pÅ™izjewjeny być, zo by skupinu wutworiÅ‚." @@ -641,6 +967,11 @@ msgstr "Opcije skÅ‚adowane." msgid "Email Settings" msgstr "E-mejlowe nastajenja" +#: actions/emailsettings.php:71 +#, php-format +msgid "Manage how you get email from %%site.name%%." +msgstr "" + #: actions/emailsettings.php:100 actions/imsettings.php:100 #: actions/smssettings.php:104 msgid "Address" @@ -656,6 +987,12 @@ msgstr "Aktualna wobkrućena e-mejlowa adresa." msgid "Remove" msgstr "Wotstronić" +#: actions/emailsettings.php:113 +msgid "" +"Awaiting confirmation on this address. Check your inbox (and spam box!) for " +"a message with further instructions." +msgstr "" + #: actions/emailsettings.php:117 actions/imsettings.php:120 #: actions/smssettings.php:126 msgid "Cancel" @@ -678,6 +1015,14 @@ msgstr "PÅ™idać" msgid "Incoming email" msgstr "Dochadźaca e-mejl" +#: actions/emailsettings.php:138 actions/smssettings.php:157 +msgid "Send email to this address to post new notices." +msgstr "" + +#: actions/emailsettings.php:145 actions/smssettings.php:162 +msgid "Make a new email address for posting to; cancels the old one." +msgstr "" + #: actions/emailsettings.php:148 actions/smssettings.php:164 msgid "New" msgstr "Nowy" @@ -687,6 +1032,26 @@ msgstr "Nowy" msgid "Preferences" msgstr "Nastajenja" +#: actions/emailsettings.php:158 +msgid "Send me notices of new subscriptions through email." +msgstr "" + +#: actions/emailsettings.php:163 +msgid "Send me email when someone adds my notice as a favorite." +msgstr "" + +#: actions/emailsettings.php:169 +msgid "Send me email when someone sends me a private message." +msgstr "" + +#: actions/emailsettings.php:174 +msgid "Send me email when someone sends me an \"@-reply\"." +msgstr "" + +#: actions/emailsettings.php:179 +msgid "Allow friends to nudge me and send me an email." +msgstr "" + #: actions/emailsettings.php:185 msgid "I want to post notices by email." msgstr "Chcu zdźělenki pÅ™ez e-mejl pósÅ‚ać." @@ -704,6 +1069,10 @@ msgstr "Nastajenja skÅ‚adowane." msgid "No email address." msgstr "Žana e-mejlowa adresa." +#: actions/emailsettings.php:327 +msgid "Cannot normalize that email address" +msgstr "" + #: actions/emailsettings.php:331 actions/siteadminpanel.php:158 msgid "Not a valid email address" msgstr "Njeje pÅ‚aćiwa e-mejlowa adresa" @@ -716,6 +1085,22 @@ msgstr "To je hižo twoja e-mejlowa adresa." msgid "That email address already belongs to another user." msgstr "Ta e-mejlowa adresa hižo sÅ‚uÅ¡a k druhemu wužiwarjej." +#: actions/emailsettings.php:353 actions/imsettings.php:317 +#: actions/smssettings.php:337 +msgid "Couldn't insert confirmation code." +msgstr "" + +#: actions/emailsettings.php:359 +msgid "" +"A confirmation code was sent to the email address you added. Check your " +"inbox (and spam box!) for the code and instructions on how to use it." +msgstr "" + +#: actions/emailsettings.php:379 actions/imsettings.php:351 +#: actions/smssettings.php:370 +msgid "No pending confirmation to cancel." +msgstr "" + #: actions/emailsettings.php:383 actions/imsettings.php:355 msgid "That is the wrong IM address." msgstr "to je wopaÄna IM-adresa." @@ -738,6 +1123,11 @@ msgstr "Adresa bu wotstronjena." msgid "No incoming email address." msgstr "Žana adresa za dochadźace e-mejle." +#: actions/emailsettings.php:456 actions/emailsettings.php:478 +#: actions/smssettings.php:528 actions/smssettings.php:552 +msgid "Couldn't update user record." +msgstr "" + #: actions/emailsettings.php:459 actions/smssettings.php:531 msgid "Incoming email address removed." msgstr "Adresa za dochadźaće e-mejle wotstronjena." @@ -756,10 +1146,61 @@ msgstr "Woblubowane zdźělenki" msgid "Popular notices, page %d" msgstr "Woblubowane zdźělenki, strona %d" +#: actions/favorited.php:79 +msgid "The most popular notices on the site right now." +msgstr "" + +#: actions/favorited.php:150 +msgid "Favorite notices appear on this page but no one has favorited one yet." +msgstr "" + +#: actions/favorited.php:153 +msgid "" +"Be the first to add a notice to your favorites by clicking the fave button " +"next to any notice you like." +msgstr "" + +#: actions/favorited.php:156 +#, php-format +msgid "" +"Why not [register an account](%%action.register%%) and be the first to add a " +"notice to your favorites!" +msgstr "" + +#: actions/favoritesrss.php:111 actions/showfavorites.php:77 +#: lib/personalgroupnav.php:115 +#, php-format +msgid "%s's favorite notices" +msgstr "" + +#: actions/favoritesrss.php:115 +#, php-format +msgid "Updates favored by %1$s on %2$s!" +msgstr "" + #: actions/favor.php:79 msgid "This notice is already a favorite!" msgstr "Tuta zdźělenka je hižo faworit!" +#: actions/favor.php:92 lib/disfavorform.php:140 +msgid "Disfavor favorite" +msgstr "" + +#: actions/featured.php:69 lib/featureduserssection.php:87 +#: lib/publicgroupnav.php:89 +msgid "Featured users" +msgstr "" + +#: actions/featured.php:71 +#, php-format +msgid "Featured users, page %d" +msgstr "" + +#: actions/featured.php:99 +#, php-format +msgid "A selection of some of the great users on %s" +msgstr "" + #: actions/file.php:34 msgid "No notice id" msgstr "Žadyn ID zdźělenki" @@ -780,10 +1221,34 @@ msgstr "Žane nahrate pÅ™iwěški" msgid "Not expecting this response!" msgstr "NjewoÄakowana wotmoÅ‚wa!" -#: actions/finishremotesubscribe.php:106 +#: actions/finishremotesubscribe.php:80 +msgid "User being listened to does not exist." +msgstr "" + +#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59 +msgid "You can use the local subscription!" +msgstr "" + +#: actions/finishremotesubscribe.php:99 +msgid "That user has blocked you from subscribing." +msgstr "" + +#: actions/finishremotesubscribe.php:110 msgid "You are not authorized." msgstr "Njejsy awtorizowany." +#: actions/finishremotesubscribe.php:113 +msgid "Could not convert request token to access token." +msgstr "" + +#: actions/finishremotesubscribe.php:118 +msgid "Remote service uses unknown version of OMB protocol." +msgstr "" + +#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306 +msgid "Error updating remote profile" +msgstr "" + #: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86 #: actions/groupunblock.php:86 actions/leavegroup.php:83 #: actions/makeadmin.php:86 lib/command.php:212 lib/command.php:263 @@ -831,6 +1296,14 @@ msgstr "Wužiwar njeje ÄÅ‚on skupiny." msgid "Block user from group" msgstr "Wužiwarja za skupinu blokować" +#: actions/groupblock.php:162 +#, php-format +msgid "" +"Are you sure you want to block user \"%s\" from the group \"%s\"? They will " +"be removed from the group, unable to post, and unable to subscribe to the " +"group in the future." +msgstr "" + #: actions/groupblock.php:178 msgid "Do not block this user from this group" msgstr "Tutoho wužiwarja za tutu skupinu blokować" @@ -839,6 +1312,10 @@ msgstr "Tutoho wužiwarja za tutu skupinu blokować" msgid "Block this user from this group" msgstr "Tutoho wužiwarja za tutu skupinu blokować" +#: actions/groupblock.php:196 +msgid "Database error blocking user from group." +msgstr "" + #: actions/groupbyid.php:74 msgid "No ID" msgstr "Žadyn ID" @@ -851,7 +1328,24 @@ msgstr "DyrbiÅ¡ pÅ™izjewjeny być, zo by skupinu wobdźěłaÅ‚." msgid "Group design" msgstr "Skupinski design" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:152 +msgid "" +"Customize the way your group looks with a background image and a colour " +"palette of your choice." +msgstr "" + +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 +msgid "Couldn't update your design." +msgstr "" + +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 +#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 +#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 +msgid "Unable to save your design settings!" +msgstr "" + +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "Designowe nastajenja skÅ‚adowane." @@ -861,13 +1355,34 @@ msgstr "Skupinske logo" #: actions/grouplogo.php:150 #, php-format -msgid "You can upload a logo image for your group. The maximum file size is %s." -msgstr "MóžeÅ¡ logowy wobraz za swoju skupinu nahrać. Maksimalna datajowa wulkosć je %s." +msgid "" +"You can upload a logo image for your group. The maximum file size is %s." +msgstr "" +"MóžeÅ¡ logowy wobraz za swoju skupinu nahrać. Maksimalna datajowa wulkosć je %" +"s." + +#: actions/grouplogo.php:362 +msgid "Pick a square area of the image to be the logo." +msgstr "" #: actions/grouplogo.php:396 msgid "Logo updated." msgstr "Logo zaktualizowane." +#: actions/grouplogo.php:398 +msgid "Failed updating logo." +msgstr "" + +#: actions/groupmembers.php:93 lib/groupnav.php:92 +#, php-format +msgid "%s group members" +msgstr "" + +#: actions/groupmembers.php:96 +#, php-format +msgid "%s group members, page %d" +msgstr "" + #: actions/groupmembers.php:111 msgid "A list of the users in this group." msgstr "Lisćina wužiwarjow w tutej skupinje." @@ -880,10 +1395,30 @@ msgstr "Administrator" msgid "Block" msgstr "Blokować" +#: actions/groupmembers.php:441 +msgid "Make user an admin of the group" +msgstr "" + +#: actions/groupmembers.php:473 +msgid "Make Admin" +msgstr "" + #: actions/groupmembers.php:473 msgid "Make this user an admin" msgstr "Tutoho wužiwarja k administratorej Äinić" +#: actions/grouprss.php:133 +#, php-format +msgid "Updates from members of %1$s on %2$s!" +msgstr "" + +#: actions/groupsearch.php:52 +#, php-format +msgid "" +"Search for groups on %%site.name%% by their name, location, or description. " +"Separate the terms by spaces; they must be 3 characters or more." +msgstr "" + #: actions/groupsearch.php:58 msgid "Group search" msgstr "Skupinske pytanje" @@ -893,8 +1428,22 @@ msgstr "Skupinske pytanje" msgid "No results." msgstr "Žane wuslÄ›dki." -#: actions/groups.php:62 lib/profileaction.php:220 lib/publicgroupnav.php:81 -#: lib/searchgroupnav.php:84 lib/subgroupnav.php:98 +#: actions/groupsearch.php:82 +#, php-format +msgid "" +"If you can't find the group you're looking for, you can [create it](%%action." +"newgroup%%) yourself." +msgstr "" + +#: actions/groupsearch.php:85 +#, php-format +msgid "" +"Why not [register an account](%%action.register%%) and [create the group](%%" +"action.newgroup%%) yourself!" +msgstr "" + +#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230 +#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98 msgid "Groups" msgstr "Skupiny" @@ -903,26 +1452,93 @@ msgstr "Skupiny" msgid "Groups, page %d" msgstr "Skupiny, strona %d" +#: actions/groups.php:90 +#, php-format +msgid "" +"%%%%site.name%%%% groups let you find and talk with people of similar " +"interests. After you join a group you can send messages to all other members " +"using the syntax \"!groupname\". Don't see a group you like? Try [searching " +"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup" +"%%%%)" +msgstr "" + #: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122 msgid "Create a new group" msgstr "Nowu skupinu wutworić" +#: actions/groupunblock.php:91 +msgid "Only an admin can unblock group members." +msgstr "" + +#: actions/groupunblock.php:95 +msgid "User is not blocked from group." +msgstr "" + +#: actions/groupunblock.php:128 actions/unblock.php:77 +msgid "Error removing the block." +msgstr "" + #: actions/imsettings.php:59 msgid "IM Settings" msgstr "IM-nastajenja" +#: actions/imsettings.php:70 +#, php-format +msgid "" +"You can send and receive notices through Jabber/GTalk [instant messages](%%" +"doc.im%%). Configure your address and settings below." +msgstr "" + #: actions/imsettings.php:89 msgid "IM is not available." msgstr "IM k dispoziciji njesteji." +#: actions/imsettings.php:106 +msgid "Current confirmed Jabber/GTalk address." +msgstr "" + +#: actions/imsettings.php:114 +#, php-format +msgid "" +"Awaiting confirmation on this address. Check your Jabber/GTalk account for a " +"message with further instructions. (Did you add %s to your buddy list?)" +msgstr "" + #: actions/imsettings.php:124 msgid "IM Address" msgstr "IM-adresa" +#: actions/imsettings.php:126 +#, php-format +msgid "" +"Jabber or GTalk address, like \"UserName@example.org\". First, make sure to " +"add %s to your buddy list in your IM client or on GTalk." +msgstr "" + +#: actions/imsettings.php:143 +msgid "Send me notices through Jabber/GTalk." +msgstr "" + +#: actions/imsettings.php:148 +msgid "Post a notice when my Jabber/GTalk status changes." +msgstr "" + +#: actions/imsettings.php:153 +msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to." +msgstr "" + +#: actions/imsettings.php:159 +msgid "Publish a MicroID for my Jabber/GTalk address." +msgstr "" + #: actions/imsettings.php:285 msgid "No Jabber ID." msgstr "Žadyn ID Jabber." +#: actions/imsettings.php:292 +msgid "Cannot normalize that Jabber ID" +msgstr "" + #: actions/imsettings.php:296 msgid "Not a valid Jabber ID" msgstr "NjepÅ‚aćiwy ID Jabber" @@ -931,14 +1547,44 @@ msgstr "NjepÅ‚aćiwy ID Jabber" msgid "That is already your Jabber ID." msgstr "To je hižo twój ID Jabber." +#: actions/imsettings.php:302 +msgid "Jabber ID already belongs to another user." +msgstr "" + +#: actions/imsettings.php:327 +#, php-format +msgid "" +"A confirmation code was sent to the IM address you added. You must approve %" +"s for sending messages to you." +msgstr "" + #: actions/imsettings.php:387 msgid "That is not your Jabber ID." msgstr "To njeje twój ID Jabber." +#: actions/inbox.php:59 +#, php-format +msgid "Inbox for %s - page %d" +msgstr "" + +#: actions/inbox.php:62 +#, php-format +msgid "Inbox for %s" +msgstr "" + +#: actions/inbox.php:115 +msgid "This is your inbox, which lists your incoming private messages." +msgstr "" + #: actions/invite.php:39 msgid "Invites have been disabled." msgstr "PÅ™eproÅ¡enja buchu znjemóžnjene." +#: actions/invite.php:41 +#, php-format +msgid "You must be logged in to invite other users to use %s" +msgstr "" + #: actions/invite.php:72 #, php-format msgid "Invalid email address: %s" @@ -961,9 +1607,27 @@ msgstr "Sy tutych wužiwarjow hižo abonowaÅ‚:" msgid "%s (%s)" msgstr "%s (%s)" +#: actions/invite.php:136 +msgid "" +"These people are already users and you were automatically subscribed to them:" +msgstr "" + +#: actions/invite.php:144 +msgid "Invitation(s) sent to the following people:" +msgstr "" + +#: actions/invite.php:150 +msgid "" +"You will be notified when your invitees accept the invitation and register " +"on the site. Thanks for growing the community!" +msgstr "" + #: actions/invite.php:162 -msgid "Use this form to invite your friends and colleagues to use this service." -msgstr "Wužij tutón formular, zo by swojich pÅ™ećelow a kolegow pÅ™eprosyÅ‚, zo bychu tutu sÅ‚užbu wužiwali." +msgid "" +"Use this form to invite your friends and colleagues to use this service." +msgstr "" +"Wužij tutón formular, zo by swojich pÅ™ećelow a kolegow pÅ™eprosyÅ‚, zo bychu " +"tutu sÅ‚užbu wužiwali." #: actions/invite.php:187 msgid "Email addresses" @@ -981,10 +1645,64 @@ msgstr "Wosobinska powÄ›sć" msgid "Optionally add a personal message to the invitation." msgstr "Wosobinsku powÄ›sć po dobrozdaću pÅ™eproÅ¡enju pÅ™idać." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "PósÅ‚ać" +#: actions/invite.php:226 +#, php-format +msgid "%1$s has invited you to join them on %2$s" +msgstr "" + +#: actions/invite.php:228 +#, php-format +msgid "" +"%1$s has invited you to join them on %2$s (%3$s).\n" +"\n" +"%2$s is a micro-blogging service that lets you keep up-to-date with people " +"you know and people who interest you.\n" +"\n" +"You can also share news about yourself, your thoughts, or your life online " +"with people who know about you. It's also great for meeting new people who " +"share your interests.\n" +"\n" +"%1$s said:\n" +"\n" +"%4$s\n" +"\n" +"You can see %1$s's profile page on %2$s here:\n" +"\n" +"%5$s\n" +"\n" +"If you'd like to try the service, click on the link below to accept the " +"invitation.\n" +"\n" +"%6$s\n" +"\n" +"If not, you can ignore this message. Thanks for your patience and your " +"time.\n" +"\n" +"Sincerely, %2$s\n" +msgstr "" + +#: actions/joingroup.php:60 +msgid "You must be logged in to join a group." +msgstr "" + +#: actions/joingroup.php:90 lib/command.php:217 +msgid "You are already a member of that group" +msgstr "" + +#: actions/joingroup.php:128 lib/command.php:234 +#, php-format +msgid "Could not join user %s to group %s" +msgstr "" + +#: actions/joingroup.php:135 lib/command.php:239 +#, php-format +msgid "%s joined group %s" +msgstr "" + #: actions/leavegroup.php:60 msgid "You must be logged in to leave a group." msgstr "DyrbiÅ¡ pÅ™izjewjeny być, zo by skupinu wopušćiÅ‚." @@ -993,46 +1711,81 @@ msgstr "DyrbiÅ¡ pÅ™izjewjeny być, zo by skupinu wopušćiÅ‚." msgid "You are not a member of that group." msgstr "Njejsy ÄÅ‚on teje skupiny." -#: actions/login.php:79 actions/register.php:137 +#: actions/leavegroup.php:119 lib/command.php:278 +msgid "Could not find membership record." +msgstr "" + +#: actions/leavegroup.php:127 lib/command.php:284 +#, php-format +msgid "Could not remove user %s to group %s" +msgstr "" + +#: actions/leavegroup.php:134 lib/command.php:289 +#, php-format +msgid "%s left group %s" +msgstr "" + +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Hižo pÅ™izjewjeny." -#: actions/login.php:143 +#: actions/login.php:113 actions/login.php:123 +msgid "Invalid or expired token." +msgstr "" + +#: actions/login.php:146 msgid "Incorrect username or password." msgstr "WopaÄne wužiwarske mjeno abo hesÅ‚o." -#: actions/login.php:149 +#: actions/login.php:152 msgid "Error setting user. You are probably not authorized." msgstr "Zmylk pÅ™i nastajenju wužiwarja. Snano njejsy awtorizowany." -#: actions/login.php:204 actions/login.php:257 lib/action.php:458 +#: actions/login.php:207 actions/login.php:260 lib/action.php:458 #: lib/logingroupnav.php:79 msgid "Login" msgstr "PÅ™izjewić" -#: actions/login.php:243 +#: actions/login.php:246 msgid "Login to site" msgstr "PÅ™i sydle pÅ™izjewić" -#: actions/login.php:246 actions/profilesettings.php:106 +#: actions/login.php:249 actions/profilesettings.php:106 #: actions/register.php:423 actions/showgroup.php:236 actions/tagother.php:94 #: lib/groupeditform.php:152 lib/userprofile.php:131 msgid "Nickname" msgstr "PÅ™imjeno" -#: actions/login.php:249 actions/register.php:428 +#: actions/login.php:252 actions/register.php:428 #: lib/accountsettingsaction.php:116 msgid "Password" msgstr "HesÅ‚o" -#: actions/login.php:252 actions/register.php:477 +#: actions/login.php:255 actions/register.php:477 msgid "Remember me" msgstr "SkÅ‚adować" -#: actions/login.php:263 +#: actions/login.php:256 actions/register.php:479 +msgid "Automatically login in the future; not for shared computers!" +msgstr "" + +#: actions/login.php:266 msgid "Lost or forgotten password?" msgstr "HesÅ‚o zhubjene abo zabyte?" +#: actions/login.php:285 +msgid "" +"For security reasons, please re-enter your user name and password before " +"changing your settings." +msgstr "" + +#: actions/login.php:289 +#, php-format +msgid "" +"Login with your username and password. Don't have a username yet? [Register]" +"(%%action.register%%) a new account." +msgstr "" + #: actions/makeadmin.php:91 msgid "Only an admin can make another user an admin." msgstr "Jenož administrator móže druheho wužiwarja k administratorej Äinić." @@ -1042,6 +1795,16 @@ msgstr "Jenož administrator móže druheho wužiwarja k administratorej Äinić msgid "%s is already an admin for group \"%s\"." msgstr "%s je hižo administrator za skupinu \"%s\"." +#: actions/makeadmin.php:132 +#, php-format +msgid "Can't get membership record for %s in group %s" +msgstr "" + +#: actions/makeadmin.php:145 +#, php-format +msgid "Can't make %s an admin for group %s" +msgstr "" + #: actions/microsummary.php:69 msgid "No current status" msgstr "Žadyn aktualny status" @@ -1071,10 +1834,20 @@ msgstr "Žadyn wobsah!" msgid "No recipient specified." msgstr "Žadyn pÅ™ijimowar podaty." +#: actions/newmessage.php:164 lib/command.php:370 +msgid "" +"Don't send a message to yourself; just say it to yourself quietly instead." +msgstr "" + #: actions/newmessage.php:181 msgid "Message sent" msgstr "PowÄ›sć pósÅ‚ana" +#: actions/newmessage.php:185 lib/command.php:375 +#, php-format +msgid "Direct message to %s sent" +msgstr "" + #: actions/newmessage.php:210 actions/newnotice.php:240 lib/channel.php:170 msgid "Ajax Error" msgstr "Zmylk Ajax" @@ -1087,20 +1860,78 @@ msgstr "Nowa zdźělenka" msgid "Notice posted" msgstr "Zdźělenka wotpósÅ‚ana" +#: actions/noticesearch.php:68 +#, php-format +msgid "" +"Search for notices on %%site.name%% by their contents. Separate search terms " +"by spaces; they must be 3 characters or more." +msgstr "" + #: actions/noticesearch.php:78 msgid "Text search" msgstr "Tekstowe pytanje" +#: actions/noticesearch.php:91 +#, php-format +msgid "Search results for \"%s\" on %s" +msgstr "" + +#: actions/noticesearch.php:121 +#, php-format +msgid "" +"Be the first to [post on this topic](%%%%action.newnotice%%%%?" +"status_textarea=%s)!" +msgstr "" + +#: actions/noticesearch.php:124 +#, php-format +msgid "" +"Why not [register an account](%%%%action.register%%%%) and be the first to " +"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!" +msgstr "" + +#: actions/noticesearchrss.php:96 +#, php-format +msgid "Updates with \"%s\"" +msgstr "" + +#: actions/noticesearchrss.php:98 +#, php-format +msgid "Updates matching search term \"%1$s\" on %2$s!" +msgstr "" + +#: actions/nudge.php:85 +msgid "" +"This user doesn't allow nudges or hasn't confirmed or set his email yet." +msgstr "" + +#: actions/nudge.php:94 +msgid "Nudge sent" +msgstr "" + +#: actions/nudge.php:97 +msgid "Nudge sent!" +msgstr "" + #: actions/oembed.php:79 actions/shownotice.php:100 msgid "Notice has no profile" msgstr "Zdźělenka nima profil" +#: actions/oembed.php:86 actions/shownotice.php:180 +#, php-format +msgid "%1$s's status on %2$s" +msgstr "" + +#: actions/oembed.php:157 +msgid "content type " +msgstr "" + #: actions/oembed.php:160 msgid "Only " msgstr "Jenož " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Njeje podpÄ›rany datowy format." @@ -1124,6 +1955,40 @@ msgstr "WÅ¡elake druhe opcije zrjadować." msgid " (free service)" msgstr " (swobodna sÅ‚užba)" +#: actions/othersettings.php:116 +msgid "Shorten URLs with" +msgstr "" + +#: actions/othersettings.php:117 +msgid "Automatic shortening service to use." +msgstr "" + +#: actions/othersettings.php:122 +msgid "View profile designs" +msgstr "" + +#: actions/othersettings.php:123 +msgid "Show or hide profile designs." +msgstr "" + +#: actions/othersettings.php:153 +msgid "URL shortening service is too long (max 50 chars)." +msgstr "" + +#: actions/outbox.php:58 +#, php-format +msgid "Outbox for %s - page %d" +msgstr "" + +#: actions/outbox.php:61 +#, php-format +msgid "Outbox for %s" +msgstr "" + +#: actions/outbox.php:116 +msgid "This is your outbox, which lists private messages you have sent." +msgstr "" + #: actions/passwordsettings.php:58 msgid "Change password" msgstr "HesÅ‚o zmÄ›nić" @@ -1153,6 +2018,10 @@ msgstr "6 abo wjace znamjeÅ¡kow" msgid "Confirm" msgstr "Wobkrućić" +#: actions/passwordsettings.php:113 actions/recoverpassword.php:240 +msgid "Same as password above" +msgstr "" + #: actions/passwordsettings.php:117 msgid "Change" msgstr "ZmÄ›nić" @@ -1169,6 +2038,14 @@ msgstr "Hesle so njekryjetej." msgid "Incorrect old password" msgstr "WopaÄne stare hesÅ‚o" +#: actions/passwordsettings.php:181 +msgid "Error saving user; invalid." +msgstr "" + +#: actions/passwordsettings.php:186 actions/recoverpassword.php:368 +msgid "Can't save new password." +msgstr "" + #: actions/passwordsettings.php:192 actions/recoverpassword.php:211 msgid "Password saved." msgstr "HesÅ‚o skÅ‚adowane." @@ -1181,6 +2058,26 @@ msgstr "Šćežki" msgid "Path and server settings for this StatusNet site." msgstr "Šćežka a serwerowe nastajenja za tute sydÅ‚o StatusNet." +#: actions/pathsadminpanel.php:140 +#, php-format +msgid "Theme directory not readable: %s" +msgstr "" + +#: actions/pathsadminpanel.php:146 +#, php-format +msgid "Avatar directory not writable: %s" +msgstr "" + +#: actions/pathsadminpanel.php:152 +#, php-format +msgid "Background directory not writable: %s" +msgstr "" + +#: actions/pathsadminpanel.php:160 +#, php-format +msgid "Locales directory not readable: %s" +msgstr "" + #: actions/pathsadminpanel.php:212 actions/siteadminpanel.php:58 #: lib/adminpanelaction.php:299 msgid "Site" @@ -1254,22 +2151,53 @@ msgstr "Pozadkowy zapis" msgid "Save paths" msgstr "Šćežki skÅ‚adować" +#: actions/peoplesearch.php:52 +#, php-format +msgid "" +"Search for people on %%site.name%% by their name, location, or interests. " +"Separate the terms by spaces; they must be 3 characters or more." +msgstr "" + #: actions/peoplesearch.php:58 msgid "People search" msgstr "Za ludźimi pytać" +#: actions/peopletag.php:70 +#, php-format +msgid "Not a valid people tag: %s" +msgstr "" + +#: actions/peopletag.php:144 +#, php-format +msgid "Users self-tagged with %s - page %d" +msgstr "" + #: actions/postnotice.php:84 msgid "Invalid notice content" msgstr "NjepÅ‚aćiwy wobsah zdźělenki" +#: actions/postnotice.php:90 +#, php-format +msgid "Notice license ‘%s’ is not compatible with site license ‘%s’." +msgstr "" + #: actions/profilesettings.php:60 msgid "Profile settings" msgstr "Profilowe nastajenja" +#: actions/profilesettings.php:71 +msgid "" +"You can update your personal profile info here so people know more about you." +msgstr "" + #: actions/profilesettings.php:99 msgid "Profile information" msgstr "Profilowe informacije" +#: actions/profilesettings.php:108 lib/groupeditform.php:154 +msgid "1-64 lowercase letters or numbers, no punctuation or spaces" +msgstr "" + #: actions/profilesettings.php:111 actions/register.php:447 #: actions/showgroup.php:247 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:149 @@ -1281,6 +2209,19 @@ msgstr "DospoÅ‚ne mjeno" msgid "Homepage" msgstr "Startowa strona" +#: actions/profilesettings.php:117 actions/register.php:454 +msgid "URL of your homepage, blog, or profile on another site" +msgstr "" + +#: actions/profilesettings.php:122 actions/register.php:460 +#, php-format +msgid "Describe yourself and your interests in %d chars" +msgstr "" + +#: actions/profilesettings.php:125 actions/register.php:463 +msgid "Describe yourself and your interests" +msgstr "" + #: actions/profilesettings.php:127 actions/register.php:465 msgid "Bio" msgstr "Biografija" @@ -1292,6 +2233,21 @@ msgstr "Biografija" msgid "Location" msgstr "MÄ›stno" +#: actions/profilesettings.php:134 actions/register.php:472 +msgid "Where you are, like \"City, State (or Region), Country\"" +msgstr "" + +#: actions/profilesettings.php:138 actions/tagother.php:149 +#: actions/tagother.php:209 lib/subscriptionlist.php:106 +#: lib/subscriptionlist.php:108 lib/userprofile.php:209 +msgid "Tags" +msgstr "" + +#: actions/profilesettings.php:140 +msgid "" +"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated" +msgstr "" + #: actions/profilesettings.php:144 actions/siteadminpanel.php:307 msgid "Language" msgstr "RÄ›Ä" @@ -1304,6 +2260,15 @@ msgstr "Preferowana rÄ›Ä" msgid "Timezone" msgstr "ÄŒasowe pasmo" +#: actions/profilesettings.php:155 +msgid "What timezone are you normally in?" +msgstr "" + +#: actions/profilesettings.php:160 +msgid "" +"Automatically subscribe to whoever subscribes to me (best for non-humans)" +msgstr "" + #: actions/profilesettings.php:221 actions/register.php:223 #, php-format msgid "Bio is too long (max %d chars)." @@ -1317,22 +2282,186 @@ msgstr "ÄŒasowe pasmo njeje wubrane." msgid "Language is too long (max 50 chars)." msgstr "Mjeno rÄ›Äe je pÅ™edoÅ‚he (maks. 50 znamjeÅ¡kow)." +#: actions/profilesettings.php:246 actions/tagother.php:178 +#, php-format +msgid "Invalid tag: \"%s\"" +msgstr "" + +#: actions/profilesettings.php:295 +msgid "Couldn't update user for autosubscribe." +msgstr "" + +#: actions/profilesettings.php:328 +msgid "Couldn't save profile." +msgstr "" + +#: actions/profilesettings.php:336 +msgid "Couldn't save tags." +msgstr "" + #: actions/profilesettings.php:344 lib/adminpanelaction.php:126 msgid "Settings saved." msgstr "Nastajenja skÅ‚adowane." +#: actions/public.php:83 +#, php-format +msgid "Beyond the page limit (%s)" +msgstr "" + +#: actions/public.php:92 +msgid "Could not retrieve public stream." +msgstr "" + +#: actions/public.php:129 +#, php-format +msgid "Public timeline, page %d" +msgstr "" + +#: actions/public.php:131 lib/publicgroupnav.php:79 +msgid "Public timeline" +msgstr "" + +#: actions/public.php:151 +msgid "Public Stream Feed (RSS 1.0)" +msgstr "" + +#: actions/public.php:155 +msgid "Public Stream Feed (RSS 2.0)" +msgstr "" + +#: actions/public.php:159 +msgid "Public Stream Feed (Atom)" +msgstr "" + +#: actions/public.php:179 +#, php-format +msgid "" +"This is the public timeline for %%site.name%% but no one has posted anything " +"yet." +msgstr "" + +#: actions/public.php:182 +msgid "Be the first to post!" +msgstr "" + +#: actions/public.php:186 +#, php-format +msgid "" +"Why not [register an account](%%action.register%%) and be the first to post!" +msgstr "" + +#: actions/public.php:233 +#, php-format +msgid "" +"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" +"blogging) service based on the Free Software [StatusNet](http://status.net/) " +"tool. [Join now](%%action.register%%) to share notices about yourself with " +"friends, family, and colleagues! ([Read more](%%doc.help%%))" +msgstr "" + +#: actions/public.php:238 +#, php-format +msgid "" +"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" +"blogging) service based on the Free Software [StatusNet](http://status.net/) " +"tool." +msgstr "" + +#: actions/publictagcloud.php:57 +msgid "Public tag cloud" +msgstr "" + +#: actions/publictagcloud.php:63 +#, php-format +msgid "These are most popular recent tags on %s " +msgstr "" + +#: actions/publictagcloud.php:69 +#, php-format +msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet." +msgstr "" + +#: actions/publictagcloud.php:72 +msgid "Be the first to post one!" +msgstr "" + +#: actions/publictagcloud.php:75 +#, php-format +msgid "" +"Why not [register an account](%%action.register%%) and be the first to post " +"one!" +msgstr "" + +#: actions/publictagcloud.php:135 +msgid "Tag cloud" +msgstr "" + #: actions/recoverpassword.php:36 msgid "You are already logged in!" msgstr "Sy hižo pÅ™izjewjeny!" +#: actions/recoverpassword.php:62 +msgid "No such recovery code." +msgstr "" + +#: actions/recoverpassword.php:66 +msgid "Not a recovery code." +msgstr "" + +#: actions/recoverpassword.php:73 +msgid "Recovery code for unknown user." +msgstr "" + +#: actions/recoverpassword.php:86 +msgid "Error with confirmation code." +msgstr "" + +#: actions/recoverpassword.php:97 +msgid "This confirmation code is too old. Please start again." +msgstr "" + +#: actions/recoverpassword.php:111 +msgid "Could not update user with confirmed email address." +msgstr "" + +#: actions/recoverpassword.php:152 +msgid "" +"If you have forgotten or lost your password, you can get a new one sent to " +"the email address you have stored in your account." +msgstr "" + #: actions/recoverpassword.php:158 msgid "You have been identified. Enter a new password below. " msgstr "Sy so identifikowaÅ‚. Zapodaj deleka nowe hesÅ‚o. " +#: actions/recoverpassword.php:188 +msgid "Password recovery" +msgstr "" + +#: actions/recoverpassword.php:191 +msgid "Nickname or email address" +msgstr "" + +#: actions/recoverpassword.php:193 +msgid "Your nickname on this server, or your registered email address." +msgstr "" + +#: actions/recoverpassword.php:199 actions/recoverpassword.php:200 +msgid "Recover" +msgstr "" + #: actions/recoverpassword.php:208 msgid "Reset password" msgstr "HesÅ‚o wróćo stajić" +#: actions/recoverpassword.php:209 +msgid "Recover password" +msgstr "" + +#: actions/recoverpassword.php:210 actions/recoverpassword.php:322 +msgid "Password recovery requested" +msgstr "" + #: actions/recoverpassword.php:213 msgid "Unknown action" msgstr "Njeznata akcija" @@ -1351,16 +2480,43 @@ msgstr "Zapodaj pÅ™imjeno abo e-mejlowu adresu." #: actions/recoverpassword.php:272 msgid "No user with that email address or username." -msgstr "Wužiwar z tej e-mejlowej adresu abo tym wužiwarskim mjenom njeeksistuje." +msgstr "" +"Wužiwar z tej e-mejlowej adresu abo tym wužiwarskim mjenom njeeksistuje." #: actions/recoverpassword.php:287 msgid "No registered email address for that user." msgstr "Wužiwar nima žanu zregistrowanu e-mejlowu adresu." +#: actions/recoverpassword.php:301 +msgid "Error saving address confirmation." +msgstr "" + +#: actions/recoverpassword.php:325 +msgid "" +"Instructions for recovering your password have been sent to the email " +"address registered to your account." +msgstr "" + +#: actions/recoverpassword.php:344 +msgid "Unexpected password reset." +msgstr "" + #: actions/recoverpassword.php:352 msgid "Password must be 6 chars or more." msgstr "HesÅ‚o dyrbi 6 znamjeÅ¡kow abo wjace měć." +#: actions/recoverpassword.php:356 +msgid "Password and confirmation do not match." +msgstr "" + +#: actions/recoverpassword.php:375 actions/register.php:248 +msgid "Error setting user." +msgstr "" + +#: actions/recoverpassword.php:382 +msgid "New password successfully saved. You are now logged in." +msgstr "" + #: actions/register.php:85 actions/register.php:189 actions/register.php:404 msgid "Sorry, only invited people can register." msgstr "Wodaj, jenož pÅ™eproÅ¡eni ludźo móžeja so registrować." @@ -1382,6 +2538,10 @@ msgstr "Registrować" msgid "Registration not allowed." msgstr "Registracija njedowolena." +#: actions/register.php:198 +msgid "You can't register if you don't agree to the license." +msgstr "" + #: actions/register.php:201 msgid "Not a valid email address." msgstr "NjepÅ‚aćiwa e-mejlowa adresa." @@ -1394,6 +2554,16 @@ msgstr "E-mejlowa adresa hižo eksistuje." msgid "Invalid username or password." msgstr "NjepÅ‚aćiwe wužiwarske mjeno abo hesÅ‚o." +#: actions/register.php:342 +msgid "" +"With this form you can create a new account. You can then post notices and " +"link up to friends and colleagues. " +msgstr "" + +#: actions/register.php:424 +msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required." +msgstr "" + #: actions/register.php:429 msgid "6 or more characters. Required." msgstr "6 abo wjace znamjeÅ¡kow. TrÄ›bne." @@ -1407,6 +2577,10 @@ msgstr "Jenake kaž hesÅ‚o horjeka. TrÄ›bne." msgid "Email" msgstr "E-mejl" +#: actions/register.php:438 actions/register.php:442 +msgid "Used only for updates, announcements, and password recovery" +msgstr "" + #: actions/register.php:449 msgid "Longer name, preferably your \"real\" name" msgstr "Dlěše mjeno, wosebje twoje \"woprawdźite\" mjeno" @@ -1419,14 +2593,69 @@ msgstr "Mój tekst a moje dataje steja k dispoziciji pod " msgid "Creative Commons Attribution 3.0" msgstr "Creative Commons Attribution 3.0" +#: actions/register.php:496 +msgid "" +" except this private data: password, email address, IM address, and phone " +"number." +msgstr "" + +#: actions/register.php:537 +#, php-format +msgid "" +"Congratulations, %s! And welcome to %%%%site.name%%%%. From here, you may " +"want to...\n" +"\n" +"* Go to [your profile](%s) and post your first message.\n" +"* Add a [Jabber/GTalk address](%%%%action.imsettings%%%%) so you can send " +"notices through instant messages.\n" +"* [Search for people](%%%%action.peoplesearch%%%%) that you may know or that " +"share your interests. \n" +"* Update your [profile settings](%%%%action.profilesettings%%%%) to tell " +"others more about you. \n" +"* Read over the [online docs](%%%%doc.help%%%%) for features you may have " +"missed. \n" +"\n" +"Thanks for signing up and we hope you enjoy using this service." +msgstr "" + +#: actions/register.php:561 +msgid "" +"(You should receive a message by email momentarily, with instructions on how " +"to confirm your email address.)" +msgstr "" + +#: actions/remotesubscribe.php:98 +#, php-format +msgid "" +"To subscribe, you can [login](%%action.login%%), or [register](%%action." +"register%%) a new account. If you already have an account on a [compatible " +"microblogging site](%%doc.openmublog%%), enter your profile URL below." +msgstr "" + +#: actions/remotesubscribe.php:112 +msgid "Remote subscribe" +msgstr "" + +#: actions/remotesubscribe.php:124 +msgid "Subscribe to a remote user" +msgstr "" + #: actions/remotesubscribe.php:129 msgid "User nickname" msgstr "Wužiwarske pÅ™imjeno" +#: actions/remotesubscribe.php:130 +msgid "Nickname of the user you want to follow" +msgstr "" + #: actions/remotesubscribe.php:133 msgid "Profile URL" msgstr "URL profila" +#: actions/remotesubscribe.php:134 +msgid "URL of your profile on another compatible microblogging service" +msgstr "" + #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 #: lib/userprofile.php:365 msgid "Subscribe" @@ -1436,6 +2665,137 @@ msgstr "Abonować" msgid "Invalid profile URL (bad format)" msgstr "NjepÅ‚aćiwy profilowy URL (wopaÄny format)" +#: actions/remotesubscribe.php:168 +msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." +msgstr "" + +#: actions/remotesubscribe.php:176 +msgid "That’s a local profile! Login to subscribe." +msgstr "" + +#: actions/remotesubscribe.php:183 +msgid "Couldn’t get a request token." +msgstr "" + +#: actions/replies.php:125 actions/repliesrss.php:68 +#: lib/personalgroupnav.php:105 +#, php-format +msgid "Replies to %s" +msgstr "" + +#: actions/replies.php:127 +#, php-format +msgid "Replies to %s, page %d" +msgstr "" + +#: actions/replies.php:144 +#, php-format +msgid "Replies feed for %s (RSS 1.0)" +msgstr "" + +#: actions/replies.php:151 +#, php-format +msgid "Replies feed for %s (RSS 2.0)" +msgstr "" + +#: actions/replies.php:158 +#, php-format +msgid "Replies feed for %s (Atom)" +msgstr "" + +#: actions/replies.php:198 +#, php-format +msgid "" +"This is the timeline showing replies to %s but %s hasn't received a notice " +"to his attention yet." +msgstr "" + +#: actions/replies.php:203 +#, php-format +msgid "" +"You can engage other users in a conversation, subscribe to more people or " +"[join groups](%%action.groups%%)." +msgstr "" + +#: actions/replies.php:205 +#, php-format +msgid "" +"You can try to [nudge %s](../%s) or [post something to his or her attention]" +"(%%%%action.newnotice%%%%?status_textarea=%s)." +msgstr "" + +#: actions/repliesrss.php:72 +#, php-format +msgid "Replies to %1$s on %2$s!" +msgstr "" + +#: actions/sandbox.php:65 actions/unsandbox.php:65 +msgid "You cannot sandbox users on this site." +msgstr "" + +#: actions/sandbox.php:72 +msgid "User is already sandboxed." +msgstr "" + +#: actions/showfavorites.php:79 +#, php-format +msgid "%s's favorite notices, page %d" +msgstr "" + +#: actions/showfavorites.php:132 +msgid "Could not retrieve favorite notices." +msgstr "" + +#: actions/showfavorites.php:170 +#, php-format +msgid "Feed for favorites of %s (RSS 1.0)" +msgstr "" + +#: actions/showfavorites.php:177 +#, php-format +msgid "Feed for favorites of %s (RSS 2.0)" +msgstr "" + +#: actions/showfavorites.php:184 +#, php-format +msgid "Feed for favorites of %s (Atom)" +msgstr "" + +#: actions/showfavorites.php:205 +msgid "" +"You haven't chosen any favorite notices yet. Click the fave button on " +"notices you like to bookmark them for later or shed a spotlight on them." +msgstr "" + +#: actions/showfavorites.php:207 +#, php-format +msgid "" +"%s hasn't added any notices to his favorites yet. Post something interesting " +"they would add to their favorites :)" +msgstr "" + +#: actions/showfavorites.php:211 +#, php-format +msgid "" +"%s hasn't added any notices to his favorites yet. Why not [register an " +"account](%%%%action.register%%%%) and then post something interesting they " +"would add to their favorites :)" +msgstr "" + +#: actions/showfavorites.php:242 +msgid "This is a way to share what you like." +msgstr "" + +#: actions/showgroup.php:82 lib/groupnav.php:86 +#, php-format +msgid "%s group" +msgstr "" + +#: actions/showgroup.php:84 +#, php-format +msgid "%s group, page %d" +msgstr "" + #: actions/showgroup.php:218 msgid "Group profile" msgstr "Skupinski profil" @@ -1445,6 +2805,11 @@ msgstr "Skupinski profil" msgid "URL" msgstr "URL" +#: actions/showgroup.php:274 actions/tagother.php:128 +#: actions/userauthorization.php:179 lib/userprofile.php:194 +msgid "Note" +msgstr "" + #: actions/showgroup.php:284 lib/groupeditform.php:184 msgid "Aliases" msgstr "Aliasy" @@ -1453,12 +2818,32 @@ msgstr "Aliasy" msgid "Group actions" msgstr "Skupinske akcije" +#: actions/showgroup.php:328 +#, php-format +msgid "Notice feed for %s group (RSS 1.0)" +msgstr "" + +#: actions/showgroup.php:334 +#, php-format +msgid "Notice feed for %s group (RSS 2.0)" +msgstr "" + +#: actions/showgroup.php:340 +#, php-format +msgid "Notice feed for %s group (Atom)" +msgstr "" + +#: actions/showgroup.php:345 +#, php-format +msgid "FOAF for %s group" +msgstr "" + #: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91 msgid "Members" msgstr "Čłonojo" #: actions/showgroup.php:386 lib/profileaction.php:117 -#: lib/profileaction.php:148 lib/profileaction.php:226 lib/section.php:95 +#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95 #: lib/tagcloudsection.php:71 msgid "(None)" msgstr "(Žadyn)" @@ -1467,7 +2852,7 @@ msgstr "(Žadyn)" msgid "All members" msgstr "WÅ¡itcy ÄÅ‚onojo" -#: actions/showgroup.php:429 lib/profileaction.php:173 +#: actions/showgroup.php:429 lib/profileaction.php:174 msgid "Statistics" msgstr "Statistika" @@ -1475,6 +2860,25 @@ msgstr "Statistika" msgid "Created" msgstr "Wutworjeny" +#: actions/showgroup.php:448 +#, php-format +msgid "" +"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." +"wikipedia.org/wiki/Micro-blogging) service based on the Free Software " +"[StatusNet](http://status.net/) tool. Its members share short messages about " +"their life and interests. [Join now](%%%%action.register%%%%) to become part " +"of this group and many more! ([Read more](%%%%doc.help%%%%))" +msgstr "" + +#: actions/showgroup.php:454 +#, php-format +msgid "" +"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." +"wikipedia.org/wiki/Micro-blogging) service based on the Free Software " +"[StatusNet](http://status.net/) tool. Its members share short messages about " +"their life and interests. " +msgstr "" + #: actions/showgroup.php:482 msgid "Admins" msgstr "Administratorojo" @@ -1483,20 +2887,147 @@ msgstr "Administratorojo" msgid "No such message." msgstr "PowÄ›sć njeeksistuje." +#: actions/showmessage.php:98 +msgid "Only the sender and recipient may read this message." +msgstr "" + +#: actions/showmessage.php:108 +#, php-format +msgid "Message to %1$s on %2$s" +msgstr "" + +#: actions/showmessage.php:113 +#, php-format +msgid "Message from %1$s on %2$s" +msgstr "" + #: actions/shownotice.php:90 msgid "Notice deleted." msgstr "Zdźělenka zniÄena." +#: actions/showstream.php:73 +#, php-format +msgid " tagged %s" +msgstr "" + +#: actions/showstream.php:79 +#, php-format +msgid "%s, page %d" +msgstr "" + +#: actions/showstream.php:122 +#, php-format +msgid "Notice feed for %s tagged %s (RSS 1.0)" +msgstr "" + +#: actions/showstream.php:129 +#, php-format +msgid "Notice feed for %s (RSS 1.0)" +msgstr "" + +#: actions/showstream.php:136 +#, php-format +msgid "Notice feed for %s (RSS 2.0)" +msgstr "" + +#: actions/showstream.php:143 +#, php-format +msgid "Notice feed for %s (Atom)" +msgstr "" + #: actions/showstream.php:148 #, php-format msgid "FOAF for %s" msgstr "FOAF za %s" +#: actions/showstream.php:191 +#, php-format +msgid "This is the timeline for %s but %s hasn't posted anything yet." +msgstr "" + +#: actions/showstream.php:196 +msgid "" +"Seen anything interesting recently? You haven't posted any notices yet, now " +"would be a good time to start :)" +msgstr "" + +#: actions/showstream.php:198 +#, php-format +msgid "" +"You can try to nudge %s or [post something to his or her attention](%%%%" +"action.newnotice%%%%?status_textarea=%s)." +msgstr "" + +#: actions/showstream.php:234 +#, php-format +msgid "" +"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en." +"wikipedia.org/wiki/Micro-blogging) service based on the Free Software " +"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to " +"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))" +msgstr "" + +#: actions/showstream.php:239 +#, php-format +msgid "" +"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en." +"wikipedia.org/wiki/Micro-blogging) service based on the Free Software " +"[StatusNet](http://status.net/) tool. " +msgstr "" + +#: actions/silence.php:65 actions/unsilence.php:65 +msgid "You cannot silence users on this site." +msgstr "" + +#: actions/silence.php:72 +msgid "User is already silenced." +msgstr "" + +#: actions/siteadminpanel.php:69 +msgid "Basic settings for this StatusNet site." +msgstr "" + +#: actions/siteadminpanel.php:147 +msgid "Site name must have non-zero length." +msgstr "" + +#: actions/siteadminpanel.php:155 +msgid "You must have a valid contact email address" +msgstr "" + #: actions/siteadminpanel.php:173 #, php-format msgid "Unknown language \"%s\"" msgstr "Njeznata rÄ›Ä \"%s\"" +#: actions/siteadminpanel.php:180 +msgid "Invalid snapshot report URL." +msgstr "" + +#: actions/siteadminpanel.php:186 +msgid "Invalid snapshot run value." +msgstr "" + +#: actions/siteadminpanel.php:192 +msgid "Snapshot frequency must be a number." +msgstr "" + +#: actions/siteadminpanel.php:199 +msgid "You must set an SSL server when enabling SSL." +msgstr "" + +#: actions/siteadminpanel.php:204 +msgid "Invalid SSL server. The maximum length is 255 characters." +msgstr "" + +#: actions/siteadminpanel.php:210 +msgid "Minimum text limit is 140 characters." +msgstr "" + +#: actions/siteadminpanel.php:216 +msgid "Dupe limit must 1 or more seconds." +msgstr "" + #: actions/siteadminpanel.php:266 msgid "General" msgstr "PowÅ¡itkowny" @@ -1505,6 +3036,30 @@ msgstr "PowÅ¡itkowny" msgid "Site name" msgstr "SydÅ‚owe mjeno" +#: actions/siteadminpanel.php:270 +msgid "The name of your site, like \"Yourcompany Microblog\"" +msgstr "" + +#: actions/siteadminpanel.php:274 +msgid "Brought by" +msgstr "" + +#: actions/siteadminpanel.php:275 +msgid "Text used for credits link in footer of each page" +msgstr "" + +#: actions/siteadminpanel.php:279 +msgid "Brought by URL" +msgstr "" + +#: actions/siteadminpanel.php:280 +msgid "URL used for credits link in footer of each page" +msgstr "" + +#: actions/siteadminpanel.php:284 +msgid "Contact email address for your site" +msgstr "" + #: actions/siteadminpanel.php:290 msgid "Local" msgstr "Lokalny" @@ -1513,6 +3068,10 @@ msgstr "Lokalny" msgid "Default timezone" msgstr "Standardne Äasowe pasmo" +#: actions/siteadminpanel.php:302 +msgid "Default timezone for the site; usually UTC." +msgstr "" + #: actions/siteadminpanel.php:308 msgid "Default site language" msgstr "Standardna sydÅ‚owa rÄ›Ä" @@ -1525,6 +3084,18 @@ msgstr "URL" msgid "Server" msgstr "Serwer" +#: actions/siteadminpanel.php:319 +msgid "Site's server hostname." +msgstr "" + +#: actions/siteadminpanel.php:323 +msgid "Fancy URLs" +msgstr "" + +#: actions/siteadminpanel.php:325 +msgid "Use fancy (more readable and memorable) URLs?" +msgstr "" + #: actions/siteadminpanel.php:331 msgid "Access" msgstr "PÅ™istup" @@ -1533,10 +3104,18 @@ msgstr "PÅ™istup" msgid "Private" msgstr "Priwatny" +#: actions/siteadminpanel.php:336 +msgid "Prohibit anonymous users (not logged in) from viewing site?" +msgstr "" + #: actions/siteadminpanel.php:340 msgid "Invite only" msgstr "Jenož pÅ™eprosyć" +#: actions/siteadminpanel.php:342 +msgid "Make registration invitation only." +msgstr "" + #: actions/siteadminpanel.php:346 msgid "Closed" msgstr "ZaÄinjeny" @@ -1545,14 +3124,46 @@ msgstr "ZaÄinjeny" msgid "Disable new registrations." msgstr "Nowe registrowanja znjemóžnić." +#: actions/siteadminpanel.php:354 +msgid "Snapshots" +msgstr "" + +#: actions/siteadminpanel.php:357 +msgid "Randomly during Web hit" +msgstr "" + +#: actions/siteadminpanel.php:358 +msgid "In a scheduled job" +msgstr "" + #: actions/siteadminpanel.php:359 actions/siteadminpanel.php:383 msgid "Never" msgstr "Ženje" +#: actions/siteadminpanel.php:360 +msgid "Data snapshots" +msgstr "" + +#: actions/siteadminpanel.php:361 +msgid "When to send statistical data to status.net servers" +msgstr "" + #: actions/siteadminpanel.php:366 msgid "Frequency" msgstr "Frekwenca" +#: actions/siteadminpanel.php:367 +msgid "Snapshots will be sent once every N web hits" +msgstr "" + +#: actions/siteadminpanel.php:372 +msgid "Report URL" +msgstr "" + +#: actions/siteadminpanel.php:373 +msgid "Snapshots will be sent to this URL" +msgstr "" + #: actions/siteadminpanel.php:380 msgid "SSL" msgstr "SSL" @@ -1569,10 +3180,18 @@ msgstr "PÅ™eco" msgid "Use SSL" msgstr "SSL wužiwać" +#: actions/siteadminpanel.php:388 +msgid "When to use SSL" +msgstr "" + #: actions/siteadminpanel.php:393 msgid "SSL Server" msgstr "SSL-serwer" +#: actions/siteadminpanel.php:394 +msgid "Server to direct SSL requests to" +msgstr "" + #: actions/siteadminpanel.php:400 msgid "Limits" msgstr "Limity" @@ -1585,18 +3204,69 @@ msgstr "Tekstowy limit" msgid "Maximum number of characters for notices." msgstr "Maksimalna liÄba znamjeÅ¡kow za zdźělenki." +#: actions/siteadminpanel.php:407 +msgid "Dupe limit" +msgstr "" + +#: actions/siteadminpanel.php:407 +msgid "How long users must wait (in seconds) to post the same thing again." +msgstr "" + #: actions/siteadminpanel.php:421 actions/useradminpanel.php:313 msgid "Save site settings" msgstr "SydÅ‚owe nastajenja skÅ‚adować" +#: actions/smssettings.php:58 +msgid "SMS Settings" +msgstr "" + +#: actions/smssettings.php:69 +#, php-format +msgid "You can receive SMS messages through email from %%site.name%%." +msgstr "" + #: actions/smssettings.php:91 msgid "SMS is not available." msgstr "SMS k dispoziciji njesteji." +#: actions/smssettings.php:112 +msgid "Current confirmed SMS-enabled phone number." +msgstr "" + +#: actions/smssettings.php:123 +msgid "Awaiting confirmation on this phone number." +msgstr "" + +#: actions/smssettings.php:130 +msgid "Confirmation code" +msgstr "" + +#: actions/smssettings.php:131 +msgid "Enter the code you received on your phone." +msgstr "" + +#: actions/smssettings.php:138 +msgid "SMS Phone number" +msgstr "" + +#: actions/smssettings.php:140 +msgid "Phone number, no punctuation or spaces, with area code" +msgstr "" + +#: actions/smssettings.php:174 +msgid "" +"Send me notices through SMS; I understand I may incur exorbitant charges " +"from my carrier." +msgstr "" + #: actions/smssettings.php:306 msgid "No phone number." msgstr "Žane telefonowe ÄisÅ‚o." +#: actions/smssettings.php:311 +msgid "No carrier selected." +msgstr "" + #: actions/smssettings.php:318 msgid "That is already your phone number." msgstr "To je hižo twoje telefonowe ÄisÅ‚o." @@ -1605,6 +3275,35 @@ msgstr "To je hižo twoje telefonowe ÄisÅ‚o." msgid "That phone number already belongs to another user." msgstr "Te telefonowe ÄisÅ‚o hižo druhemu wužiwarjej sÅ‚uÅ¡a." +#: actions/smssettings.php:347 +msgid "" +"A confirmation code was sent to the phone number you added. Check your phone " +"for the code and instructions on how to use it." +msgstr "" + +#: actions/smssettings.php:374 +msgid "That is the wrong confirmation number." +msgstr "" + +#: actions/smssettings.php:405 +msgid "That is not your phone number." +msgstr "" + +#: actions/smssettings.php:465 +msgid "Mobile carrier" +msgstr "" + +#: actions/smssettings.php:469 +msgid "Select a carrier" +msgstr "" + +#: actions/smssettings.php:476 +#, php-format +msgid "" +"Mobile carrier for your phone. If you know a carrier that accepts SMS over " +"email but isn't listed here, send email to let us know at %s." +msgstr "" + #: actions/smssettings.php:498 msgid "No code entered" msgstr "Žadyn kod zapodaty" @@ -1613,6 +3312,10 @@ msgstr "Žadyn kod zapodaty" msgid "You are not subscribed to that profile." msgstr "Njejsy tón profil abonowaÅ‚." +#: actions/subedit.php:83 +msgid "Could not save subscription." +msgstr "" + #: actions/subscribe.php:55 msgid "Not a local user." msgstr "Njeje lokalny wužiwar." @@ -1631,6 +3334,33 @@ msgstr "%s abonentow" msgid "%s subscribers, page %d" msgstr "%s abonentow, strona %d" +#: actions/subscribers.php:63 +msgid "These are the people who listen to your notices." +msgstr "" + +#: actions/subscribers.php:67 +#, php-format +msgid "These are the people who listen to %s's notices." +msgstr "" + +#: actions/subscribers.php:108 +msgid "" +"You have no subscribers. Try subscribing to people you know and they might " +"return the favor" +msgstr "" + +#: actions/subscribers.php:110 +#, php-format +msgid "%s has no subscribers. Want to be the first?" +msgstr "" + +#: actions/subscribers.php:114 +#, php-format +msgid "" +"%s has no subscribers. Why not [register an account](%%%%action.register%%%" +"%) and be the first?" +msgstr "" + #: actions/subscriptions.php:52 #, php-format msgid "%s subscriptions" @@ -1641,6 +3371,30 @@ msgstr "%s abonementow" msgid "%s subscriptions, page %d" msgstr "%s abonementow, strona %d" +#: actions/subscriptions.php:65 +msgid "These are the people whose notices you listen to." +msgstr "" + +#: actions/subscriptions.php:69 +#, php-format +msgid "These are the people whose notices %s listens to." +msgstr "" + +#: actions/subscriptions.php:121 +#, php-format +msgid "" +"You're not listening to anyone's notices right now, try subscribing to " +"people you know. Try [people search](%%action.peoplesearch%%), look for " +"members in groups you're interested in and in our [featured users](%%action." +"featured%%). If you're a [Twitter user](%%action.twittersettings%%), you can " +"automatically subscribe to people you already follow there." +msgstr "" + +#: actions/subscriptions.php:123 actions/subscriptions.php:127 +#, php-format +msgid "%s is not listening to anyone." +msgstr "" + #: actions/subscriptions.php:194 msgid "Jabber" msgstr "Jabber" @@ -1657,6 +3411,11 @@ msgstr "NjepÅ™izjewjeny" msgid "No id argument." msgstr "Žadyn argument ID." +#: actions/tagother.php:65 +#, php-format +msgid "Tag %s" +msgstr "" + #: actions/tagother.php:77 lib/userprofile.php:75 msgid "User profile" msgstr "Wužiwarski profil" @@ -1665,14 +3424,86 @@ msgstr "Wužiwarski profil" msgid "Photo" msgstr "Foto" +#: actions/tagother.php:141 +msgid "Tag user" +msgstr "" + +#: actions/tagother.php:151 +msgid "" +"Tags for this user (letters, numbers, -, ., and _), comma- or space- " +"separated" +msgstr "" + +#: actions/tagother.php:193 +msgid "" +"You can only tag people you are subscribed to or who are subscribed to you." +msgstr "" + +#: actions/tagother.php:200 +msgid "Could not save tags." +msgstr "" + +#: actions/tagother.php:236 +msgid "Use this form to add tags to your subscribers or subscriptions." +msgstr "" + +#: actions/tag.php:68 +#, php-format +msgid "Notices tagged with %s, page %d" +msgstr "" + +#: actions/tag.php:86 +#, php-format +msgid "Notice feed for tag %s (RSS 1.0)" +msgstr "" + +#: actions/tag.php:92 +#, php-format +msgid "Notice feed for tag %s (RSS 2.0)" +msgstr "" + +#: actions/tag.php:98 +#, php-format +msgid "Notice feed for tag %s (Atom)" +msgstr "" + +#: actions/tagrss.php:35 +msgid "No such tag." +msgstr "" + +#: actions/twitapitrends.php:87 +msgid "API method under construction." +msgstr "" + #: actions/unblock.php:59 msgid "You haven't blocked that user." msgstr "Njejsy toho wužiwarja zablokowaÅ‚." +#: actions/unsandbox.php:72 +msgid "User is not sandboxed." +msgstr "" + +#: actions/unsilence.php:72 +msgid "User is not silenced." +msgstr "" + +#: actions/unsubscribe.php:77 +msgid "No profile id in request." +msgstr "" + +#: actions/unsubscribe.php:84 +msgid "No profile with that id." +msgstr "" + #: actions/unsubscribe.php:98 msgid "Unsubscribed" msgstr "Wotskazany" +#: actions/updateprofile.php:62 actions/userauthorization.php:330 +#, php-format +msgid "Listenee stream license ‘%s’ is not compatible with site license ‘%s’." +msgstr "" + #: actions/useradminpanel.php:58 lib/adminpanelaction.php:305 #: lib/personalgroupnav.php:115 msgid "User" @@ -1682,11 +3513,32 @@ msgstr "Wužiwar" msgid "User settings for this StatusNet site." msgstr "Wužiwarske nastajenja za sydÅ‚o StatusNet." +#: actions/useradminpanel.php:149 +msgid "Invalid bio limit. Must be numeric." +msgstr "" + +#: actions/useradminpanel.php:155 +msgid "Invalid welcome text. Max length is 255 characters." +msgstr "" + +#: actions/useradminpanel.php:165 +#, php-format +msgid "Invalid default subscripton: '%1$s' is not user." +msgstr "" + #: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108 #: lib/personalgroupnav.php:109 msgid "Profile" msgstr "Profil" +#: actions/useradminpanel.php:222 +msgid "Bio Limit" +msgstr "" + +#: actions/useradminpanel.php:223 +msgid "Maximum length of a profile bio in characters." +msgstr "" + #: actions/useradminpanel.php:231 msgid "New users" msgstr "Nowi wužiwarjo" @@ -1703,6 +3555,10 @@ msgstr "Powitanski tekst za nowych wužiwarjow (maks. 255 znamjeÅ¡kow)." msgid "Default subscription" msgstr "Standardny abonement" +#: actions/useradminpanel.php:242 +msgid "Automatically subscribe new users to this user." +msgstr "" + #: actions/useradminpanel.php:251 msgid "Invitations" msgstr "PÅ™eproÅ¡enja" @@ -1711,6 +3567,10 @@ msgstr "PÅ™eproÅ¡enja" msgid "Invitations enabled" msgstr "PÅ™eproÅ¡enja zmóžnjene" +#: actions/useradminpanel.php:258 +msgid "Whether to allow users to invite new users." +msgstr "" + #: actions/useradminpanel.php:265 msgid "Sessions" msgstr "Posedźenja" @@ -1719,6 +3579,29 @@ msgstr "Posedźenja" msgid "Handle sessions" msgstr "Z posedźenjemi wobchadźeć" +#: actions/useradminpanel.php:272 +msgid "Whether to handle sessions ourselves." +msgstr "" + +#: actions/useradminpanel.php:276 +msgid "Session debugging" +msgstr "" + +#: actions/useradminpanel.php:278 +msgid "Turn on debugging output for sessions." +msgstr "" + +#: actions/userauthorization.php:105 +msgid "Authorize subscription" +msgstr "" + +#: actions/userauthorization.php:110 +msgid "" +"Please check these details to make sure that you want to subscribe to this " +"user’s notices. If you didn’t just ask to subscribe to someone’s notices, " +"click “Rejectâ€." +msgstr "" + #: actions/userauthorization.php:188 msgid "License" msgstr "Licenca" @@ -1740,31 +3623,722 @@ msgstr "Wotpokazać" msgid "Reject this subscription" msgstr "Tutón abonement wotpokazać" +#: actions/userauthorization.php:225 +msgid "No authorization request!" +msgstr "" + #: actions/userauthorization.php:247 msgid "Subscription authorized" msgstr "Abonement awtorizowany" +#: actions/userauthorization.php:249 +msgid "" +"The subscription has been authorized, but no callback URL was passed. Check " +"with the site’s instructions for details on how to authorize the " +"subscription. Your subscription token is:" +msgstr "" + #: actions/userauthorization.php:259 msgid "Subscription rejected" msgstr "Abonement wotpokazany" -#: lib/command.php:620 -#, fuzzy +#: actions/userauthorization.php:261 +msgid "" +"The subscription has been rejected, but no callback URL was passed. Check " +"with the site’s instructions for details on how to fully reject the " +"subscription." +msgstr "" + +#: actions/userauthorization.php:296 +#, php-format +msgid "Listener URI ‘%s’ not found here" +msgstr "" + +#: actions/userauthorization.php:301 +#, php-format +msgid "Listenee URI ‘%s’ is too long." +msgstr "" + +#: actions/userauthorization.php:307 +#, php-format +msgid "Listenee URI ‘%s’ is a local user." +msgstr "" + +#: actions/userauthorization.php:322 +#, php-format +msgid "Profile URL ‘%s’ is for a local user." +msgstr "" + +#: actions/userauthorization.php:338 +#, php-format +msgid "Avatar URL ‘%s’ is not valid." +msgstr "" + +#: actions/userauthorization.php:343 +#, php-format +msgid "Can’t read avatar URL ‘%s’." +msgstr "" + +#: actions/userauthorization.php:348 +#, php-format +msgid "Wrong image type for avatar URL ‘%s’." +msgstr "" + +#: actions/userbyid.php:70 +msgid "No id." +msgstr "" + +#: actions/userdesignsettings.php:76 lib/designsettings.php:65 +msgid "Profile design" +msgstr "" + +#: actions/userdesignsettings.php:87 lib/designsettings.php:76 +msgid "" +"Customize the way your profile looks with a background image and a colour " +"palette of your choice." +msgstr "" + +#: actions/userdesignsettings.php:282 +msgid "Enjoy your hotdog!" +msgstr "" + +#: actions/usergroups.php:64 +#, php-format +msgid "%s groups, page %d" +msgstr "" + +#: actions/usergroups.php:130 +msgid "Search for more groups" +msgstr "" + +#: actions/usergroups.php:153 +#, php-format +msgid "%s is not a member of any group." +msgstr "" + +#: actions/usergroups.php:158 +#, php-format +msgid "Try [searching for groups](%%action.groupsearch%%) and joining them." +msgstr "" + +#: classes/File.php:137 +#, php-format +msgid "" +"No file may be larger than %d bytes and the file you sent was %d bytes. Try " +"to upload a smaller version." +msgstr "" + +#: classes/File.php:147 +#, php-format +msgid "A file this large would exceed your user quota of %d bytes." +msgstr "" + +#: classes/File.php:154 +#, php-format +msgid "A file this large would exceed your monthly quota of %d bytes." +msgstr "" + +#: classes/Message.php:45 +msgid "You are banned from sending direct messages." +msgstr "" + +#: classes/Message.php:61 +msgid "Could not insert message." +msgstr "" + +#: classes/Message.php:71 +msgid "Could not update message with new URI." +msgstr "" + +#: classes/Notice.php:164 +#, php-format +msgid "DB error inserting hashtag: %s" +msgstr "" + +#: classes/Notice.php:179 +msgid "Problem saving notice. Too long." +msgstr "" + +#: classes/Notice.php:183 +msgid "Problem saving notice. Unknown user." +msgstr "" + +#: classes/Notice.php:188 +msgid "" +"Too many notices too fast; take a breather and post again in a few minutes." +msgstr "" + +#: classes/Notice.php:194 +msgid "" +"Too many duplicate messages too quickly; take a breather and post again in a " +"few minutes." +msgstr "" + +#: classes/Notice.php:200 +msgid "You are banned from posting notices on this site." +msgstr "" + +#: classes/Notice.php:265 classes/Notice.php:290 +msgid "Problem saving notice." +msgstr "" + +#: classes/Notice.php:1124 +#, php-format +msgid "DB error inserting reply: %s" +msgstr "" + +#: classes/User_group.php:380 +msgid "Could not create group." +msgstr "" + +#: classes/User_group.php:409 +msgid "Could not set group membership." +msgstr "" + +#: classes/User.php:347 +#, php-format +msgid "Welcome to %1$s, @%2$s!" +msgstr "" + +#: lib/accountsettingsaction.php:108 +msgid "Change your profile settings" +msgstr "" + +#: lib/accountsettingsaction.php:112 +msgid "Upload an avatar" +msgstr "" + +#: lib/accountsettingsaction.php:116 +msgid "Change your password" +msgstr "" + +#: lib/accountsettingsaction.php:120 +msgid "Change email handling" +msgstr "" + +#: lib/accountsettingsaction.php:124 +msgid "Design your profile" +msgstr "" + +#: lib/accountsettingsaction.php:128 +msgid "Other" +msgstr "" + +#: lib/accountsettingsaction.php:128 +msgid "Other options" +msgstr "" + +#: lib/action.php:144 +#, php-format +msgid "%s - %s" +msgstr "" + +#: lib/action.php:159 +msgid "Untitled page" +msgstr "" + +#: lib/action.php:425 +msgid "Primary site navigation" +msgstr "" + +#: lib/action.php:431 +msgid "Home" +msgstr "" + +#: lib/action.php:431 +msgid "Personal profile and friends timeline" +msgstr "" + +#: lib/action.php:433 +msgid "Account" +msgstr "" + +#: lib/action.php:433 +msgid "Change your email, avatar, password, profile" +msgstr "" + +#: lib/action.php:436 +msgid "Connect" +msgstr "" + +#: lib/action.php:436 +msgid "Connect to services" +msgstr "" + +#: lib/action.php:440 +msgid "Change site configuration" +msgstr "" + +#: lib/action.php:444 lib/subgroupnav.php:105 +msgid "Invite" +msgstr "" + +#: lib/action.php:445 lib/subgroupnav.php:106 +#, php-format +msgid "Invite friends and colleagues to join you on %s" +msgstr "" + +#: lib/action.php:450 +msgid "Logout" +msgstr "" + +#: lib/action.php:450 +msgid "Logout from the site" +msgstr "" + +#: lib/action.php:455 +msgid "Create an account" +msgstr "" + +#: lib/action.php:458 +msgid "Login to the site" +msgstr "" + +#: lib/action.php:461 lib/action.php:724 +msgid "Help" +msgstr "" + +#: lib/action.php:461 +msgid "Help me!" +msgstr "" + +#: lib/action.php:464 lib/searchaction.php:127 +msgid "Search" +msgstr "" + +#: lib/action.php:464 +msgid "Search for people or text" +msgstr "" + +#: lib/action.php:485 +msgid "Site notice" +msgstr "" + +#: lib/action.php:551 +msgid "Local views" +msgstr "" + +#: lib/action.php:617 +msgid "Page notice" +msgstr "" + +#: lib/action.php:719 +msgid "Secondary site navigation" +msgstr "" + +#: lib/action.php:726 +msgid "About" +msgstr "" + +#: lib/action.php:728 +msgid "FAQ" +msgstr "" + +#: lib/action.php:732 +msgid "TOS" +msgstr "" + +#: lib/action.php:735 +msgid "Privacy" +msgstr "" + +#: lib/action.php:737 +msgid "Source" +msgstr "" + +#: lib/action.php:739 +msgid "Contact" +msgstr "" + +#: lib/action.php:741 +msgid "Badge" +msgstr "" + +#: lib/action.php:769 +msgid "StatusNet software license" +msgstr "" + +#: lib/action.php:772 +#, php-format +msgid "" +"**%%site.name%%** is a microblogging service brought to you by [%%site." +"broughtby%%](%%site.broughtbyurl%%). " +msgstr "" + +#: lib/action.php:774 +#, php-format +msgid "**%%site.name%%** is a microblogging service. " +msgstr "" + +#: lib/action.php:776 +#, php-format +msgid "" +"It runs the [StatusNet](http://status.net/) microblogging software, version %" +"s, available under the [GNU Affero General Public License](http://www.fsf." +"org/licensing/licenses/agpl-3.0.html)." +msgstr "" + +#: lib/action.php:790 +msgid "Site content license" +msgstr "" + +#: lib/action.php:799 +msgid "All " +msgstr "" + +#: lib/action.php:804 +msgid "license." +msgstr "" + +#: lib/action.php:1068 +msgid "Pagination" +msgstr "" + +#: lib/action.php:1077 +msgid "After" +msgstr "" + +#: lib/action.php:1085 +msgid "Before" +msgstr "" + +#: lib/action.php:1133 +msgid "There was a problem with your session token." +msgstr "" + +#: lib/adminpanelaction.php:96 +msgid "You cannot make changes to this site." +msgstr "" + +#: lib/adminpanelaction.php:195 +msgid "showForm() not implemented." +msgstr "" + +#: lib/adminpanelaction.php:224 +msgid "saveSettings() not implemented." +msgstr "" + +#: lib/adminpanelaction.php:247 +msgid "Unable to delete design setting." +msgstr "" + +#: lib/adminpanelaction.php:300 +msgid "Basic site configuration" +msgstr "" + +#: lib/adminpanelaction.php:303 +msgid "Design configuration" +msgstr "" + +#: lib/adminpanelaction.php:306 lib/adminpanelaction.php:309 +msgid "Paths configuration" +msgstr "" + +#: lib/attachmentlist.php:87 +msgid "Attachments" +msgstr "" + +#: lib/attachmentlist.php:265 +msgid "Author" +msgstr "" + +#: lib/attachmentlist.php:278 +msgid "Provider" +msgstr "" + +#: lib/attachmentnoticesection.php:67 +msgid "Notices where this attachment appears" +msgstr "" + +#: lib/attachmenttagcloudsection.php:48 +msgid "Tags for this attachment" +msgstr "" + +#: lib/channel.php:138 lib/channel.php:158 +msgid "Command results" +msgstr "" + +#: lib/channel.php:210 +msgid "Command complete" +msgstr "" + +#: lib/channel.php:221 +msgid "Command failed" +msgstr "" + +#: lib/command.php:44 +msgid "Sorry, this command is not yet implemented." +msgstr "" + +#: lib/command.php:88 +#, php-format +msgid "Could not find a user with nickname %s" +msgstr "" + +#: lib/command.php:92 +msgid "It does not make a lot of sense to nudge yourself!" +msgstr "" + +#: lib/command.php:99 +#, php-format +msgid "Nudge sent to %s" +msgstr "" + +#: lib/command.php:126 +#, php-format +msgid "" +"Subscriptions: %1$s\n" +"Subscribers: %2$s\n" +"Notices: %3$s" +msgstr "" + +#: lib/command.php:152 lib/command.php:400 +msgid "Notice with that id does not exist" +msgstr "" + +#: lib/command.php:168 lib/command.php:416 lib/command.php:471 +msgid "User has no last notice" +msgstr "" + +#: lib/command.php:190 +msgid "Notice marked as fave." +msgstr "" + +#: lib/command.php:315 +#, php-format +msgid "%1$s (%2$s)" +msgstr "" + +#: lib/command.php:318 +#, php-format +msgid "Fullname: %s" +msgstr "" + +#: lib/command.php:321 +#, php-format +msgid "Location: %s" +msgstr "" + +#: lib/command.php:324 +#, php-format +msgid "Homepage: %s" +msgstr "" + +#: lib/command.php:327 +#, php-format +msgid "About: %s" +msgstr "" + +#: lib/command.php:358 scripts/xmppdaemon.php:321 +#, php-format +msgid "Message too long - maximum is %d characters, you sent %d" +msgstr "" + +#: lib/command.php:377 +msgid "Error sending direct message." +msgstr "" + +#: lib/command.php:431 +#, php-format +msgid "Notice too long - maximum is %d characters, you sent %d" +msgstr "" + +#: lib/command.php:439 +#, php-format +msgid "Reply to %s sent" +msgstr "" + +#: lib/command.php:441 +msgid "Error saving notice." +msgstr "" + +#: lib/command.php:495 +msgid "Specify the name of the user to subscribe to" +msgstr "" + +#: lib/command.php:502 +#, php-format +msgid "Subscribed to %s" +msgstr "" + +#: lib/command.php:523 +msgid "Specify the name of the user to unsubscribe from" +msgstr "" + +#: lib/command.php:530 +#, php-format +msgid "Unsubscribed from %s" +msgstr "" + +#: lib/command.php:548 lib/command.php:571 +msgid "Command not yet implemented." +msgstr "" + +#: lib/command.php:551 +msgid "Notification off." +msgstr "" + +#: lib/command.php:553 +msgid "Can't turn off notification." +msgstr "" + +#: lib/command.php:574 +msgid "Notification on." +msgstr "" + +#: lib/command.php:576 +msgid "Can't turn on notification." +msgstr "" + +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Aliasy njejsu so dali wutworić." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 +msgid "You are not subscribed to anyone." +msgstr "" + +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" -# Plural problem +msgstr[0] "Sy tutu wosobu abonowaÅ‚:" +msgstr[1] "Sy tutej wosobje abonowaÅ‚:" +msgstr[2] "Sy tute wosoby abonowaÅ‚:" +msgstr[3] "Sy tute wosoby abonowaÅ‚:" -#: lib/command.php:642 -#, fuzzy +#: lib/command.php:645 +msgid "No one is subscribed to you." +msgstr "" + +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" -# Plural problem +msgstr[0] "Tuta wosoba je će abonowaÅ‚a:" +msgstr[1] "Tutej wosobje stej će abonowaÅ‚oj:" +msgstr[2] "Tute wosoby su će abonowali:" +msgstr[3] "Tute wosoby su će abonowali:" -#: lib/command.php:664 -#, fuzzy +#: lib/command.php:667 +msgid "You are not a member of any groups." +msgstr "" + +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" -# Plural problem +msgstr[0] "Sy ÄÅ‚on tuteje skupiny:" +msgstr[1] "Sy ÄÅ‚on tuteju skupinow:" +msgstr[2] "Sy ÄÅ‚on tutych skupinow:" +msgstr[3] "Sy ÄÅ‚on tutych skupinow:" + +#: lib/command.php:683 +msgid "" +"Commands:\n" +"on - turn on notifications\n" +"off - turn off notifications\n" +"help - show this help\n" +"follow <nickname> - subscribe to user\n" +"groups - lists the groups you have joined\n" +"subscriptions - list the people you follow\n" +"subscribers - list the people that follow you\n" +"leave <nickname> - unsubscribe from user\n" +"d <nickname> <text> - direct message to user\n" +"get <nickname> - get last notice from user\n" +"whois <nickname> - get profile info on user\n" +"fav <nickname> - add user's last notice as a 'fave'\n" +"fav #<notice_id> - add notice with the given id as a 'fave'\n" +"reply #<notice_id> - reply to notice with a given id\n" +"reply <nickname> - reply to the last notice from user\n" +"join <group> - join group\n" +"login - Get a link to login to the web interface\n" +"drop <group> - leave group\n" +"stats - get your stats\n" +"stop - same as 'off'\n" +"quit - same as 'off'\n" +"sub <nickname> - same as 'follow'\n" +"unsub <nickname> - same as 'leave'\n" +"last <nickname> - same as 'get'\n" +"on <nickname> - not yet implemented.\n" +"off <nickname> - not yet implemented.\n" +"nudge <nickname> - remind a user to update.\n" +"invite <phone number> - not yet implemented.\n" +"track <word> - not yet implemented.\n" +"untrack <word> - not yet implemented.\n" +"track off - not yet implemented.\n" +"untrack all - not yet implemented.\n" +"tracks - not yet implemented.\n" +"tracking - not yet implemented.\n" +msgstr "" + +#: lib/common.php:199 +msgid "No configuration file found. " +msgstr "" + +#: lib/common.php:200 +msgid "I looked for configuration files in the following places: " +msgstr "" + +#: lib/common.php:201 +msgid "You may wish to run the installer to fix this." +msgstr "" + +#: lib/common.php:202 +msgid "Go to the installer." +msgstr "" + +#: lib/connectsettingsaction.php:110 +msgid "IM" +msgstr "" + +#: lib/connectsettingsaction.php:111 +msgid "Updates by instant messenger (IM)" +msgstr "" + +#: lib/connectsettingsaction.php:116 +msgid "Updates by SMS" +msgstr "" + +#: lib/dberroraction.php:60 +msgid "Database error" +msgstr "" + +#: lib/designsettings.php:105 +msgid "Upload file" +msgstr "" + +#: lib/designsettings.php:109 +msgid "" +"You can upload your personal background image. The maximum file size is 2MB." +msgstr "" + +#: lib/designsettings.php:418 +msgid "Design defaults restored." +msgstr "" + +#: lib/disfavorform.php:114 lib/disfavorform.php:140 +msgid "Disfavor this notice" +msgstr "" + +#: lib/favorform.php:114 lib/favorform.php:140 +msgid "Favor this notice" +msgstr "" + +#: lib/favorform.php:140 +msgid "Favor" +msgstr "" + +#: lib/feedlist.php:64 +msgid "Export data" +msgstr "" #: lib/feed.php:85 msgid "RSS 1.0" @@ -1782,10 +4356,34 @@ msgstr "Atom" msgid "FOAF" msgstr "FOAF" +#: lib/galleryaction.php:121 +msgid "Filter tags" +msgstr "" + #: lib/galleryaction.php:131 msgid "All" msgstr "WÅ¡Ä›" +#: lib/galleryaction.php:139 +msgid "Select tag to filter" +msgstr "" + +#: lib/galleryaction.php:140 +msgid "Tag" +msgstr "" + +#: lib/galleryaction.php:141 +msgid "Choose a tag to narrow list" +msgstr "" + +#: lib/galleryaction.php:143 +msgid "Go" +msgstr "" + +#: lib/groupeditform.php:163 +msgid "URL of the homepage or blog of the group or topic" +msgstr "" + #: lib/groupeditform.php:168 msgid "Describe the group or topic" msgstr "Skupinu abo temu wopisać" @@ -1799,6 +4397,16 @@ msgstr "Skupinu abo temu w %d znamjeÅ¡kach wopisać" msgid "Description" msgstr "Wopisanje" +#: lib/groupeditform.php:179 +msgid "" +"Location for the group, if any, like \"City, State (or Region), Country\"" +msgstr "" + +#: lib/groupeditform.php:187 +#, php-format +msgid "Extra nicknames for the group, comma- or space- separated, max %d" +msgstr "" + #: lib/groupnav.php:85 msgid "Group" msgstr "Skupina" @@ -1807,10 +4415,30 @@ msgstr "Skupina" msgid "Blocked" msgstr "Blokowany" +#: lib/groupnav.php:102 +#, php-format +msgid "%s blocked users" +msgstr "" + +#: lib/groupnav.php:108 +#, php-format +msgid "Edit %s group properties" +msgstr "" + #: lib/groupnav.php:113 msgid "Logo" msgstr "Logo" +#: lib/groupnav.php:114 +#, php-format +msgid "Add or edit %s logo" +msgstr "" + +#: lib/groupnav.php:120 +#, php-format +msgid "Add or edit %s design" +msgstr "" + #: lib/groupsbymemberssection.php:71 msgid "Groups with most members" msgstr "Skupiny z najwjace ÄÅ‚onami" @@ -1819,10 +4447,36 @@ msgstr "Skupiny z najwjace ÄÅ‚onami" msgid "Groups with most posts" msgstr "Skupiny z njawjace powÄ›sćemi" +#: lib/grouptagcloudsection.php:56 +#, php-format +msgid "Tags in %s group's notices" +msgstr "" + +#: lib/htmloutputter.php:103 +msgid "This page is not available in a media type you accept" +msgstr "" + +#: lib/imagefile.php:75 +#, php-format +msgid "That file is too big. The maximum file size is %s." +msgstr "" + #: lib/imagefile.php:80 msgid "Partial upload." msgstr "Dźělne nahraće." +#: lib/imagefile.php:88 lib/mediafile.php:170 +msgid "System error uploading file." +msgstr "" + +#: lib/imagefile.php:96 +msgid "Not an image or corrupt file." +msgstr "" + +#: lib/imagefile.php:105 +msgid "Unsupported image file format." +msgstr "" + #: lib/imagefile.php:118 msgid "Lost our file." msgstr "NaÅ¡a dataja je so zhubiÅ‚a." @@ -1831,11 +4485,23 @@ msgstr "NaÅ¡a dataja je so zhubiÅ‚a." msgid "Unknown file type" msgstr "Njeznaty datajowy typ" -#: lib/jabber.php:192 +#: lib/imagefile.php:217 +msgid "MB" +msgstr "" + +#: lib/imagefile.php:219 +msgid "kB" +msgstr "" + +#: lib/jabber.php:191 #, php-format msgid "[%s]" msgstr "[%s]" +#: lib/joinform.php:114 +msgid "Join" +msgstr "" + #: lib/leaveform.php:114 msgid "Leave" msgstr "Wopušćić" @@ -1848,6 +4514,16 @@ msgstr "PÅ™izjewjenje z wužiwarskim mjenom a hesÅ‚om" msgid "Sign up for a new account" msgstr "Nowe konto registrować" +#: lib/mailbox.php:89 +msgid "Only the user can read their own mailboxes." +msgstr "" + +#: lib/mailbox.php:139 +msgid "" +"You have no private messages. You can send private message to engage other " +"users in conversation. People can send you messages for your eyes only." +msgstr "" + #: lib/mailbox.php:227 lib/noticelist.php:452 msgid "from" msgstr "wot" @@ -1856,6 +4532,43 @@ msgstr "wot" msgid "Email address confirmation" msgstr "Wobkrućenje e-mejloweje adresy" +#: lib/mail.php:174 +#, php-format +msgid "" +"Hey, %s.\n" +"\n" +"Someone just entered this email address on %s.\n" +"\n" +"If it was you, and you want to confirm your entry, use the URL below:\n" +"\n" +"\t%s\n" +"\n" +"If not, just ignore this message.\n" +"\n" +"Thanks for your time, \n" +"%s\n" +msgstr "" + +#: lib/mail.php:236 +#, php-format +msgid "%1$s is now listening to your notices on %2$s." +msgstr "" + +#: lib/mail.php:241 +#, php-format +msgid "" +"%1$s is now listening to your notices on %2$s.\n" +"\n" +"\t%3$s\n" +"\n" +"%4$s%5$s%6$s\n" +"Faithfully yours,\n" +"%7$s.\n" +"\n" +"----\n" +"Change your email address or notification options at %8$s\n" +msgstr "" + #: lib/mail.php:254 #, php-format msgid "Location: %s\n" @@ -1868,23 +4581,145 @@ msgstr "Startowa strona: %s\n" #: lib/mail.php:258 #, php-format -msgid "Bio: %s\n\n" -msgstr "Biografija: %s\n\n" +msgid "" +"Bio: %s\n" +"\n" +msgstr "" +"Biografija: %s\n" +"\n" + +#: lib/mail.php:286 +#, php-format +msgid "New email address for posting to %s" +msgstr "" + +#: lib/mail.php:289 +#, php-format +msgid "" +"You have a new posting address on %1$s.\n" +"\n" +"Send email to %2$s to post new messages.\n" +"\n" +"More email instructions at %3$s.\n" +"\n" +"Faithfully yours,\n" +"%4$s" +msgstr "" + +#: lib/mail.php:413 +#, php-format +msgid "%s status" +msgstr "" #: lib/mail.php:439 msgid "SMS confirmation" msgstr "SMS-wobkrućenje" +#: lib/mail.php:463 +#, php-format +msgid "You've been nudged by %s" +msgstr "" + +#: lib/mail.php:467 +#, php-format +msgid "" +"%1$s (%2$s) is wondering what you are up to these days and is inviting you " +"to post some news.\n" +"\n" +"So let's hear from you :)\n" +"\n" +"%3$s\n" +"\n" +"Don't reply to this email; it won't get to them.\n" +"\n" +"With kind regards,\n" +"%4$s\n" +msgstr "" + #: lib/mail.php:510 #, php-format msgid "New private message from %s" msgstr "Nowa priwatna powÄ›sć wot %s" +#: lib/mail.php:514 +#, php-format +msgid "" +"%1$s (%2$s) sent you a private message:\n" +"\n" +"------------------------------------------------------\n" +"%3$s\n" +"------------------------------------------------------\n" +"\n" +"You can reply to their message here:\n" +"\n" +"%4$s\n" +"\n" +"Don't reply to this email; it won't get to them.\n" +"\n" +"With kind regards,\n" +"%5$s\n" +msgstr "" + #: lib/mail.php:559 #, php-format msgid "%s (@%s) added your notice as a favorite" msgstr "%s (@%s) je twoju zdźělenku jako faworit pÅ™idaÅ‚" +#: lib/mail.php:561 +#, php-format +msgid "" +"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n" +"\n" +"The URL of your notice is:\n" +"\n" +"%3$s\n" +"\n" +"The text of your notice is:\n" +"\n" +"%4$s\n" +"\n" +"You can see the list of %1$s's favorites here:\n" +"\n" +"%5$s\n" +"\n" +"Faithfully yours,\n" +"%6$s\n" +msgstr "" + +#: lib/mail.php:620 +#, php-format +msgid "%s (@%s) sent a notice to your attention" +msgstr "" + +#: lib/mail.php:622 +#, php-format +msgid "" +"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n" +"\n" +"The notice is here:\n" +"\n" +"\t%3$s\n" +"\n" +"It reads:\n" +"\n" +"\t%4$s\n" +"\n" +msgstr "" + +#: lib/mediafile.php:98 lib/mediafile.php:123 +msgid "There was a database error while saving your file. Please try again." +msgstr "" + +#: lib/mediafile.php:142 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini." +msgstr "" + +#: lib/mediafile.php:147 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form." +msgstr "" + #: lib/mediafile.php:152 msgid "The uploaded file was only partially uploaded." msgstr "Nahrata dataja bu jenož zdźěla nahrata." @@ -1893,6 +4728,31 @@ msgstr "Nahrata dataja bu jenož zdźěla nahrata." msgid "Missing a temporary folder." msgstr "Temporerny rjadowka faluje." +#: lib/mediafile.php:162 +msgid "Failed to write file to disk." +msgstr "" + +#: lib/mediafile.php:165 +msgid "File upload stopped by extension." +msgstr "" + +#: lib/mediafile.php:179 lib/mediafile.php:216 +msgid "File exceeds user's quota!" +msgstr "" + +#: lib/mediafile.php:196 lib/mediafile.php:233 +msgid "File could not be moved to destination directory." +msgstr "" + +#: lib/mediafile.php:201 lib/mediafile.php:237 +msgid "Could not determine file's mime-type!" +msgstr "" + +#: lib/mediafile.php:270 +#, php-format +msgid " Try using another %s format." +msgstr "" + #: lib/mediafile.php:275 #, php-format msgid "%s is not a supported filetype on this server." @@ -1906,7 +4766,7 @@ msgstr "Direktnu zdźělenku pósÅ‚ać" msgid "To" msgstr "Komu" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "K dispoziciji stejace znamjeÅ¡ka" @@ -1914,11 +4774,16 @@ msgstr "K dispoziciji stejace znamjeÅ¡ka" msgid "Send a notice" msgstr "Zdźělenku pósÅ‚ać" -#: lib/noticeform.php:193 +#: lib/noticeform.php:171 +#, php-format +msgid "What's up, %s?" +msgstr "" + +#: lib/noticeform.php:192 msgid "Attach" msgstr "PÅ™ipowÄ›snyć" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "Dataju pÅ™ipowÄ›snyć" @@ -1943,6 +4808,14 @@ msgstr "W" msgid "W" msgstr "Z" +#: lib/noticelist.php:411 +msgid "at" +msgstr "" + +#: lib/noticelist.php:506 +msgid "in context" +msgstr "" + #: lib/noticelist.php:526 msgid "Reply to this notice" msgstr "Na tutu zdźělenku wotmoÅ‚wić" @@ -1951,6 +4824,18 @@ msgstr "Na tutu zdźělenku wotmoÅ‚wić" msgid "Reply" msgstr "WotmoÅ‚wić" +#: lib/nudgeform.php:116 +msgid "Nudge this user" +msgstr "" + +#: lib/nudgeform.php:128 +msgid "Nudge" +msgstr "" + +#: lib/nudgeform.php:128 +msgid "Send a nudge to this user" +msgstr "" + #: lib/oauthstore.php:283 msgid "Error inserting new profile" msgstr "Zmylk pÅ™i zasunjenju noweho profila" @@ -1967,6 +4852,14 @@ msgstr "Zmylk pÅ™i zasunjenju zdaleneho profila" msgid "Duplicate notice" msgstr "Dwójna zdźělenka" +#: lib/oauthstore.php:467 lib/subs.php:48 +msgid "You have been banned from subscribing." +msgstr "" + +#: lib/oauthstore.php:492 +msgid "Couldn't insert new subscription." +msgstr "" + #: lib/personalgroupnav.php:99 msgid "Personal" msgstr "Wosobinski" @@ -1979,15 +4872,28 @@ msgstr "WotmoÅ‚wy" msgid "Favorites" msgstr "Fawority" +#: lib/personalgroupnav.php:124 +msgid "Inbox" +msgstr "" + #: lib/personalgroupnav.php:125 msgid "Your incoming messages" msgstr "Twoje dochadźace powÄ›sće" +#: lib/personalgroupnav.php:129 +msgid "Outbox" +msgstr "" + #: lib/personalgroupnav.php:130 msgid "Your sent messages" msgstr "Twoje pósÅ‚ane powÄ›sće" -#: lib/profileaction.php:109 lib/profileaction.php:191 lib/subgroupnav.php:82 +#: lib/personaltagcloudsection.php:56 +#, php-format +msgid "Tags in %s's notices" +msgstr "" + +#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82 msgid "Subscriptions" msgstr "Abonementy" @@ -1995,7 +4901,7 @@ msgstr "Abonementy" msgid "All subscriptions" msgstr "WÅ¡Ä› abonementy" -#: lib/profileaction.php:140 lib/profileaction.php:200 lib/subgroupnav.php:90 +#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90 msgid "Subscribers" msgstr "Abonenća" @@ -2003,18 +4909,26 @@ msgstr "Abonenća" msgid "All subscribers" msgstr "WÅ¡itcy abonenća" -#: lib/profileaction.php:177 +#: lib/profileaction.php:178 msgid "User ID" msgstr "Wužiwarski ID" -#: lib/profileaction.php:182 +#: lib/profileaction.php:183 msgid "Member since" msgstr "Čłon wot" -#: lib/profileaction.php:235 +#: lib/profileaction.php:245 msgid "All groups" msgstr "WÅ¡Ä› skupiny" +#: lib/profileformaction.php:123 +msgid "No return-to arguments" +msgstr "" + +#: lib/profileformaction.php:137 +msgid "unimplemented method" +msgstr "" + #: lib/publicgroupnav.php:78 msgid "Public" msgstr "Zjawny" @@ -2023,10 +4937,26 @@ msgstr "Zjawny" msgid "User groups" msgstr "Wužiwarske skupiny" +#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85 +msgid "Recent tags" +msgstr "" + +#: lib/publicgroupnav.php:88 +msgid "Featured" +msgstr "" + #: lib/publicgroupnav.php:92 msgid "Popular" msgstr "Woblubowany" +#: lib/sandboxform.php:67 +msgid "Sandbox" +msgstr "" + +#: lib/sandboxform.php:78 +msgid "Sandbox this user" +msgstr "" + #: lib/searchaction.php:120 msgid "Search site" msgstr "Pytanske sydÅ‚o" @@ -2063,6 +4993,39 @@ msgstr "WotrÄ›zk bjez titula" msgid "More..." msgstr "Wjace..." +#: lib/silenceform.php:67 +msgid "Silence" +msgstr "" + +#: lib/silenceform.php:78 +msgid "Silence this user" +msgstr "" + +#: lib/subgroupnav.php:83 +#, php-format +msgid "People %s subscribes to" +msgstr "" + +#: lib/subgroupnav.php:91 +#, php-format +msgid "People subscribed to %s" +msgstr "" + +#: lib/subgroupnav.php:99 +#, php-format +msgid "Groups %s is a member of" +msgstr "" + +#: lib/subscriberspeopleselftagcloudsection.php:48 +#: lib/subscriptionspeopleselftagcloudsection.php:48 +msgid "People Tagcloud as self-tagged" +msgstr "" + +#: lib/subscriberspeopletagcloudsection.php:48 +#: lib/subscriptionspeopletagcloudsection.php:48 +msgid "People Tagcloud as tagged" +msgstr "" + #: lib/subscriptionlist.php:126 msgid "(none)" msgstr "(žadyn)" @@ -2079,11 +5042,20 @@ msgstr "Wužiwar je će zablokowaÅ‚." msgid "Could not subscribe." msgstr "Abonowanje njebÄ› móžno" +#: lib/subs.php:79 +msgid "Could not subscribe other to you." +msgstr "" + #: lib/subs.php:128 msgid "Not subscribed!" msgstr "Njeje abonowany!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Abonoment njeje so daÅ‚ zniÄić." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Abonoment njeje so daÅ‚ zniÄić." @@ -2091,6 +5063,26 @@ msgstr "Abonoment njeje so daÅ‚ zniÄić." msgid "None" msgstr "Žadyn" +#: lib/topposterssection.php:74 +msgid "Top posters" +msgstr "" + +#: lib/unsandboxform.php:69 +msgid "Unsandbox" +msgstr "" + +#: lib/unsandboxform.php:80 +msgid "Unsandbox this user" +msgstr "" + +#: lib/unsilenceform.php:67 +msgid "Unsilence" +msgstr "" + +#: lib/unsilenceform.php:78 +msgid "Unsilence this user" +msgstr "" + #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137 msgid "Unsubscribe from this user" msgstr "Tutoho wužiwarja wotskazać" @@ -2123,6 +5115,10 @@ msgstr "Tutomu wužiwarja direktnu powÄ›sć pósÅ‚ać" msgid "Message" msgstr "PowÄ›sć" +#: lib/userprofile.php:311 +msgid "Moderate" +msgstr "" + #: lib/util.php:825 msgid "a few seconds ago" msgstr "pÅ™ed něšto sekundami" @@ -2175,7 +5171,13 @@ msgstr "%s pÅ‚aćiwa barba njeje!" #: lib/webcolor.php:123 #, php-format msgid "%s is not a valid color! Use 3 or 6 hex chars." -msgstr "%s pÅ‚aćiwa barba njeje! Wužij 3 heksadecimalne znamjeÅ¡ka abo 6 heksadecimalnych znamjeÅ¡kow." +msgstr "" +"%s pÅ‚aćiwa barba njeje! Wužij 3 heksadecimalne znamjeÅ¡ka abo 6 " +"heksadecimalnych znamjeÅ¡kow." + +#: scripts/maildaemon.php:48 +msgid "Could not parse message." +msgstr "" #: scripts/maildaemon.php:53 msgid "Not a registered user." @@ -2188,4 +5190,3 @@ msgstr "Wodaj, to twoja adresa za dochadźace e-mejle njeje." #: scripts/maildaemon.php:61 msgid "Sorry, no incoming email allowed." msgstr "Wodaj, dochadźaće e-mejle njejsu dowolene." - diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po index 5cb39db10..16e4b7435 100644 --- a/locale/is/LC_MESSAGES/statusnet.po +++ b/locale/is/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:52+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:42+0000\n" "Language-Team: Icelandic\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: is\n" "X-Message-Group: out-statusnet\n" @@ -184,7 +184,12 @@ msgstr "Notandi hefur enga persónulega sÃðu." msgid "Could not save profile." msgstr "Gat ekki vistað persónulega sÃðu." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Gat ekki uppfært notanda." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Mistókst að loka á notanda." @@ -569,7 +574,7 @@ msgstr "Skera af" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -823,106 +828,106 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Ótæk stærð." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Þessi sÃða er ekki aðgengileg à " -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Breyta" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Bjóða" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Breyta" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Babl vefsÃðunnar" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "Skrá þig út af sÃðunni" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Texti" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -932,7 +937,7 @@ msgstr "" msgid "Save" msgstr "Vista" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1365,18 +1370,18 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "" -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "" @@ -1691,7 +1696,7 @@ msgstr "Persónuleg skilaboð" msgid "Optionally add a personal message to the invitation." msgstr "Bættu persónulegum skilaboðum við boðskortið ef þú vilt." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Senda" @@ -1797,11 +1802,11 @@ msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s" msgid "%s left group %s" msgstr "%s gekk úr hópnum %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Þú hefur nú þegar skráð þig inn." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Ótækt bablinnihald" @@ -2017,8 +2022,8 @@ msgstr "" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Enginn stuðningur við gagnasnið." @@ -4396,40 +4401,54 @@ msgstr "Tilkynningar á." msgid "Can't turn on notification." msgstr "Get ekki kveikt á tilkynningum." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Gat ekki búið til uppáhald." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Þú ert ekki áskrifandi." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Þú ert nú þegar à áskrift að þessum notendum:" msgstr[1] "Þú ert nú þegar à áskrift að þessum notendum:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Gat ekki leyft öðrum að gerast áskrifandi að þér." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Gat ekki leyft öðrum að gerast áskrifandi að þér." msgstr[1] "Gat ekki leyft öðrum að gerast áskrifandi að þér." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Þú ert ekki meðlimur à þessum hópi." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Þú ert ekki meðlimur à þessum hópi." msgstr[1] "Þú ert ekki meðlimur à þessum hópi." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4448,6 +4467,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4511,11 +4531,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4974,7 +4990,7 @@ msgstr "Senda bein skilaboð" msgid "To" msgstr "Til" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Leyfileg tákn" @@ -4987,11 +5003,11 @@ msgstr "Senda babl" msgid "What's up, %s?" msgstr "Hvað er að frétta %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5267,7 +5283,12 @@ msgstr "Gat ekki leyft öðrum að gerast áskrifandi að þér." msgid "Not subscribed!" msgstr "Ekki à áskrift!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Gat ekki eytt áskrift." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Gat ekki eytt áskrift." diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po index 79b6ef8c0..b86ca75b9 100644 --- a/locale/it/LC_MESSAGES/statusnet.po +++ b/locale/it/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:56+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:45+0000\n" "Language-Team: Italian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: it\n" "X-Message-Group: out-statusnet\n" @@ -185,7 +185,12 @@ msgstr "L'utente non ha un profilo." msgid "Could not save profile." msgstr "Impossibile salvare il profilo." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Impossibile aggiornare l'utente." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Blocco dell'utente non riuscito." @@ -577,7 +582,7 @@ msgstr "Ritaglia" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -838,110 +843,110 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Dimensione non valida." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Questa pagina non è disponibile in un " -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Modifica la tua password" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Invita" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Modifica" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Messaggio del sito" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "Sconnettiti dal sito" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Puoi caricare un'immagine per il logo del tuo gruppo." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "Modifica la tua password" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "Connetti" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Ricerca" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Testo" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "Elenco" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -951,7 +956,7 @@ msgstr "" msgid "Save" msgstr "Salva" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1400,20 +1405,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Impossibile aggiornare l'utente." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "Impossibile salvare le tue impostazioni di Twitter!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Preferenze di sincronizzazione salvate." @@ -1736,7 +1741,7 @@ msgstr "Messaggio personale" msgid "Optionally add a personal message to the invitation." msgstr "Puoi aggiungere un messaggio personale agli inviti." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Invia" @@ -1842,11 +1847,11 @@ msgstr "Impossibile rimuovere l'utente %s dal gruppo %s" msgid "%s left group %s" msgstr "%s ha lasciato il gruppo %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Accesso già effettuato." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Contenuto del messaggio non valido" @@ -2060,8 +2065,8 @@ msgstr "Connetti" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Non è un formato di dati supportato." @@ -4466,40 +4471,54 @@ msgstr "Notifiche attivate." msgid "Can't turn on notification." msgstr "Impossibile attivare le notifiche." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Impossibile creare preferito." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Non sei abbonato a quel profilo." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Sei già abbonato a questi utenti:" msgstr[1] "Sei già abbonato a questi utenti:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Impossibile abbonare altri a te." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Impossibile abbonare altri a te." msgstr[1] "Impossibile abbonare altri a te." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Non sei un membro di quel gruppo." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Non sei un membro di quel gruppo." msgstr[1] "Non sei un membro di quel gruppo." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4518,6 +4537,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4582,11 +4602,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Qui puoi caricare la tua immagine personale." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -5050,7 +5066,7 @@ msgstr "Invia un messaggio diretto" msgid "To" msgstr "A" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Caratteri disponibili" @@ -5063,11 +5079,11 @@ msgstr "Invia un messaggio" msgid "What's up, %s?" msgstr "Cosa succede, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5347,7 +5363,12 @@ msgstr "Impossibile abbonare altri a te." msgid "Not subscribed!" msgstr "Non abbonato!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Impossibile eliminare l'abbonamento." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Impossibile eliminare l'abbonamento." diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po index 5317bc7a3..74baa8e28 100644 --- a/locale/ja/LC_MESSAGES/statusnet.po +++ b/locale/ja/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:19:59+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:48+0000\n" "Language-Team: Japanese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ja\n" "X-Message-Group: out-statusnet\n" @@ -189,7 +189,12 @@ msgstr "プãƒãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“。" msgid "Could not save profile." msgstr "プãƒãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å˜ã§ãã¾ã›ã‚“" -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "ユーザを更新ã§ãã¾ã›ã‚“" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "ユーザã®ãƒ–ãƒãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" @@ -581,7 +586,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -839,109 +844,109 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "ä¸æ£ãªã‚µã‚¤ã‚ºã€‚" -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯ã‚ãªãŸãŒæ‰¿èªã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚¿ã‚¤ãƒ—ã§ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "パスワードã®å¤‰æ›´" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "æ–°ã—ã„通知" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "変更" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "æ–°ã—ã„通知" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "サイトã‹ã‚‰ãƒã‚°ã‚¢ã‚¦ãƒˆ" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "é•·ã™ãŽã¾ã™ã€‚通知ã¯æœ€å¤§ 140 å—ã¾ã§ã§ã™ã€‚" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "パスワードã®å¤‰æ›´" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "内容" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "検索" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "ãƒã‚°ã‚¤ãƒ³" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -951,7 +956,7 @@ msgstr "" msgid "Save" msgstr "ä¿å˜" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1396,19 +1401,19 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "ユーザを更新ã§ãã¾ã›ã‚“" -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "è¨å®šãŒä¿å˜ã•ã‚Œã¾ã—ãŸã€‚" @@ -1722,7 +1727,7 @@ msgstr "" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "é€ã‚‹" @@ -1830,11 +1835,11 @@ msgstr "OpenIDを作æˆã§ãã¾ã›ã‚“ : %s" msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "æ—¢ã«ãƒã‚°ã‚¤ãƒ³ã—ã¦ã„ã¾ã™ã€‚" -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "ä¸æ£ãªé€šçŸ¥å†…容" @@ -2040,8 +2045,8 @@ msgstr "内容種別 " msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -4417,37 +4422,51 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "ã‚¢ãƒã‚¿ãƒ¼ã‚’ä¿å˜ã§ãã¾ã›ã‚“" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "ãã®ãƒ—ãƒãƒ•ã‚¡ã‚¤ãƒ«ã¯é€ä¿¡ã•ã‚Œã¦ã„ã¾ã›ã‚“。" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "ãã®ãƒ—ãƒãƒ•ã‚¡ã‚¤ãƒ«ã¯é€ä¿¡ã•ã‚Œã¦ã„ã¾ã›ã‚“。" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "リモートサブスクライブ" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "リモートサブスクライブ" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "ãã®ãƒ—ãƒãƒ•ã‚¡ã‚¤ãƒ«ã¯é€ä¿¡ã•ã‚Œã¦ã„ã¾ã›ã‚“。" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "ãã®ãƒ—ãƒãƒ•ã‚¡ã‚¤ãƒ«ã¯é€ä¿¡ã•ã‚Œã¦ã„ã¾ã›ã‚“。" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4466,6 +4485,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4530,11 +4550,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "é•·ã™ãŽã¾ã™ã€‚通知ã¯æœ€å¤§ 140 å—ã¾ã§ã§ã™ã€‚" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4989,7 +5005,7 @@ msgstr "直接通知をé€ã‚‹" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "利用å¯èƒ½ãªæ–‡å—" @@ -5002,11 +5018,11 @@ msgstr "通知をé€ã‚‹" msgid "What's up, %s?" msgstr "最近ã©ã† %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5284,7 +5300,12 @@ msgstr "" msgid "Not subscribed!" msgstr "è³¼èªã—ã¦ã„ã¾ã›ã‚“ï¼" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "サブスクリプションを削除ã§ãã¾ã›ã‚“" + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "サブスクリプションを削除ã§ãã¾ã›ã‚“" diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po index 60ac94a30..05b20ed91 100644 --- a/locale/ko/LC_MESSAGES/statusnet.po +++ b/locale/ko/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:03+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:51+0000\n" "Language-Team: Korean\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ko\n" "X-Message-Group: out-statusnet\n" @@ -184,7 +184,12 @@ msgstr "ì´ìš©ìžê°€ í”„ë¡œí•„ì„ ê°€ì§€ê³ ìžˆì§€ 않습니다." msgid "Could not save profile." msgstr "í”„ë¡œí•„ì„ ì €ìž¥ í• ìˆ˜ 없습니다." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "사용ìžë¥¼ ì—…ë°ì´íŠ¸ í• ìˆ˜ 없습니다." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "ì‚¬ìš©ìž ì°¨ë‹¨ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤." @@ -576,7 +581,7 @@ msgstr "ìžë¥´ê¸°" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -836,110 +841,110 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "옳지 ì•Šì€ í¬ê¸°" -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "ì´ íŽ˜ì´ì§€ëŠ” 귀하가 승ì¸í•œ 미디어 타입ì—서는 ì´ìš©í• 수 없습니다." -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "비밀번호 바꾸기" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "초대" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "변환" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "사ì´íŠ¸ 공지" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "ì´ ì‚¬ì´íŠ¸ë¡œë¶€í„° 로그아웃" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "ë‹¹ì‹ ê·¸ë£¹ì˜ ë¡œê³ ì´ë¯¸ì§€ë¥¼ ì—…ë¡œë“œí• ìˆ˜ 있습니다." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "비밀번호 바꾸기" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "ì—°ê²°" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "검색" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "문ìž" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "로그ì¸" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -949,7 +954,7 @@ msgstr "" msgid "Save" msgstr "ì €ìž¥" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1393,20 +1398,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "사용ìžë¥¼ ì—…ë°ì´íŠ¸ í• ìˆ˜ 없습니다." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "트위터 í™˜ê²½ì„¤ì •ì„ ì €ìž¥í• ìˆ˜ 없습니다." -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "싱í¬ì„¤ì •ì´ ì €ìž¥ë˜ì—ˆìŠµë‹ˆë‹¤." @@ -1722,7 +1727,7 @@ msgstr "ê°œì¸ì ì¸ ë©”ì‹œì§€" msgid "Optionally add a personal message to the invitation." msgstr "ì´ˆëŒ€ìž¥ì— ë©”ì‹œì§€ 첨부하기." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "보내기" @@ -1823,11 +1828,11 @@ msgstr "그룹 %sì—ì„œ %s 사용ìžë¥¼ ì œê±°í• ìˆ˜ 없습니다." msgid "%s left group %s" msgstr "%sê°€ 그룹%s를 ë– ë‚¬ìŠµë‹ˆë‹¤." -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "ì´ë¯¸ ë¡œê·¸ì¸ í•˜ì…¨ìŠµë‹ˆë‹¤." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "옳지 ì•Šì€ í†µì§€ ë‚´ìš©" @@ -2040,8 +2045,8 @@ msgstr "ì—°ê²°" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "지ì›í•˜ëŠ” 형ì‹ì˜ ë°ì´í„°ê°€ 아닙니다." @@ -4428,37 +4433,51 @@ msgstr "ì•Œë¦¼ì´ ì¼œì¡ŒìŠµë‹ˆë‹¤." msgid "Can't turn on notification." msgstr "ì•Œë¦¼ì„ ì¼¤ 수 없습니다." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "좋아하는 ê²Œì‹œê¸€ì„ ìƒì„±í• 수 없습니다." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "ë‹¹ì‹ ì€ ì´ í”„ë¡œí•„ì— êµ¬ë…ë˜ì§€ ì•Šê³ ìžˆìŠµë‹ˆë‹¤." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "ë‹¹ì‹ ì€ ë‹¤ìŒ ì‚¬ìš©ìžë¥¼ ì´ë¯¸ 구ë…í•˜ê³ ìžˆìŠµë‹ˆë‹¤." -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4477,6 +4496,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4541,11 +4561,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "ë‹¹ì‹ ì˜ ê°œì¸ì ì¸ ì•„ë°”íƒ€ë¥¼ ì—…ë¡œë“œí• ìˆ˜ 있습니다." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -5001,7 +5017,7 @@ msgstr "ì§ì ‘ 메시지 보내기" msgid "To" msgstr "ì—게" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "사용 가능한 글ìž" @@ -5014,11 +5030,11 @@ msgstr "게시글 보내기" msgid "What's up, %s?" msgstr "ë하세요? %?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5298,7 +5314,12 @@ msgstr "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다." msgid "Not subscribed!" msgstr "구ë…í•˜ê³ ìžˆì§€ 않습니다!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "예약 구ë…ì„ ì‚ì œ í• ìˆ˜ 없습니다." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "예약 구ë…ì„ ì‚ì œ í• ìˆ˜ 없습니다." diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po index 94511070d..dff5c0b43 100644 --- a/locale/mk/LC_MESSAGES/statusnet.po +++ b/locale/mk/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:07+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:55+0000\n" "Language-Team: Macedonian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: out-statusnet\n" @@ -184,7 +184,12 @@ msgstr "КориÑникот нема профил." msgid "Could not save profile." msgstr "Профилот не може да Ñе Ñними." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "КориÑникот не може да Ñе оÑвежи/" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -574,7 +579,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -676,7 +681,7 @@ msgstr "" #: actions/block.php:143 actions/deletenotice.php:145 #: actions/deleteuser.php:147 actions/groupblock.php:178 msgid "No" -msgstr "" +msgstr "Ðе" #: actions/block.php:143 actions/deleteuser.php:147 #, fuzzy @@ -832,109 +837,109 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Погрешна големина." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Оваа Ñтраница не е доÑтапна во форматот кој Вие го прифаќате." -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Промени ја лозинката" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Ðово извеÑтување" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Промени" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Ðово извеÑтување" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Ова е предолго. МакÑималната должина е 140 знаци." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "Промени ја лозинката" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "Поврзи Ñе" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Барај" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "Пријави Ñе" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -944,7 +949,7 @@ msgstr "" msgid "Save" msgstr "Сними" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1384,19 +1389,19 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "КориÑникот не може да Ñе оÑвежи/" -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Преференциите Ñе Ñнимени." @@ -1712,7 +1717,7 @@ msgstr "" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "ИÑпрати" @@ -1794,11 +1799,11 @@ msgstr "OpenID формуларот не може да Ñе креира:%s" msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Веќе Ñте најавени." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Ðеправилна Ñодржина за извеÑтување" @@ -2010,8 +2015,8 @@ msgstr "Поврзи Ñе" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -4386,40 +4391,54 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Информациите за аватарот не може да Ñе Ñнимат" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Ðе ни го иÑпративте тој профил." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ðе ни го иÑпративте тој профил." msgstr[1] "Ðе ни го иÑпративте тој профил." -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Оддалечена претплата" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Оддалечена претплата" msgstr[1] "Оддалечена претплата" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Ðе ни го иÑпративте тој профил." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ðе ни го иÑпративте тој профил." msgstr[1] "Ðе ни го иÑпративте тој профил." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4438,6 +4457,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4501,11 +4521,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Ова е предолго. МакÑималната должина е 140 знаци." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4968,7 +4984,7 @@ msgstr "" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "6 или повеќе знаци" @@ -4983,11 +4999,11 @@ msgstr "Ðово извеÑтување" msgid "What's up, %s?" msgstr "Што има %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5266,7 +5282,12 @@ msgstr "" msgid "Not subscribed!" msgstr "Ðе Ñте претплатени!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Претплата не може да Ñе избрише." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Претплата не може да Ñе избрише." diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po index e6eb1e5d1..12b20f3dd 100644 --- a/locale/nb/LC_MESSAGES/statusnet.po +++ b/locale/nb/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:10+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:26:58+0000\n" "Language-Team: Norwegian (bokmÃ¥l)‬\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: no\n" "X-Message-Group: out-statusnet\n" @@ -183,7 +183,12 @@ msgstr "" msgid "Could not save profile." msgstr "Klarte ikke Ã¥ lagre profil." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Klarte ikke Ã¥ oppdatere bruker." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -572,7 +577,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -828,108 +833,108 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Ugyldig størrelse" -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Endre passordet ditt" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Endre" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Endre" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "Endre passordet ditt" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "Koble til" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Søk" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "Logg inn" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -939,7 +944,7 @@ msgstr "" msgid "Save" msgstr "Lagre" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1374,19 +1379,19 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Klarte ikke Ã¥ oppdatere bruker." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "" @@ -1689,7 +1694,7 @@ msgstr "" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Send" @@ -1791,11 +1796,11 @@ msgstr "Klarte ikke Ã¥ oppdatere bruker." msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Allerede innlogget." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "" @@ -1998,8 +2003,8 @@ msgstr "" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -4330,40 +4335,54 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Klarte ikke Ã¥ lagre avatar-informasjonen" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Ikke autorisert." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ikke autorisert." msgstr[1] "Ikke autorisert." -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Svar til %s" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Svar til %s" msgstr[1] "Svar til %s" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Du er allerede logget inn!" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Du er allerede logget inn!" msgstr[1] "Du er allerede logget inn!" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4382,6 +4401,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4444,11 +4464,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4910,7 +4926,7 @@ msgstr "" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "6 eller flere tegn" @@ -4924,11 +4940,11 @@ msgstr "" msgid "What's up, %s?" msgstr "" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5204,7 +5220,12 @@ msgstr "" msgid "Not subscribed!" msgstr "Alle abonnementer" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Klarte ikke Ã¥ lagre avatar-informasjonen" + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "" diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po index e9c4ef9e7..cec42ca71 100644 --- a/locale/nl/LC_MESSAGES/statusnet.po +++ b/locale/nl/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:26+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:06+0000\n" "Language-Team: Dutch\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: out-statusnet\n" @@ -192,7 +192,11 @@ msgstr "Deze gebruiker heeft geen profiel." msgid "Could not save profile." msgstr "Het was niet mogelijk het profiel op te slaan." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +msgid "You cannot block yourself!" +msgstr "U zichzelf niet blokkeren!" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Het blokkeren van de gebruiker is mislukt." @@ -582,7 +586,7 @@ msgstr "Uitsnijden" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -839,45 +843,45 @@ msgstr "Ontwerp" msgid "Design settings for this StatusNet site." msgstr "Instellingen voor de vormgeving van deze StatusNet-website." -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "De logo-URL is ongeldig." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "De vormgeving is niet beschikbaar: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "Logo wijzigen" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "Websitelogo" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "Vormgeving wijzigen" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "Vormgeving website" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "Mogelijke vormgevingen voor deze website." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Achtergrondafbeelding wijzigen" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "Achtergrond" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" @@ -886,55 +890,55 @@ msgstr "" "Hier kunt u een achtergrondafbeelding voor de website uploaden. De maximale " "bestandsgrootte is %1$s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "Aan" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "Uit" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "Achtergrondafbeelding inschakelen of uitschakelen." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "Achtergrondafbeelding naast elkaar" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Kleuren wijzigen" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Inhoud" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "Menubalk" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "Verwijzingen" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "Standaardinstellingen gebruiken" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "Standaardontwerp toepassen" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "Standaardinstellingen toepassen" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -944,7 +948,7 @@ msgstr "Standaardinstellingen toepassen" msgid "Save" msgstr "Opslaan" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "Ontwerp opslaan" @@ -1391,18 +1395,18 @@ msgstr "" "De vormgeving van uw groep aanpassen met een achtergrondafbeeldingen en een " "kleurenpalet van uw keuze." -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "Het was niet mogelijk uw ontwerp bij te werken." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "Het was niet mogelijk om uw ontwerpinstellingen op te slaan!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "De ontwerpvoorkeuren zijn opgeslagen." @@ -1732,7 +1736,7 @@ msgstr "Persoonlijk bericht" msgid "Optionally add a personal message to the invitation." msgstr "Persoonlijk bericht bij de uitnodiging (optioneel)." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Verzenden" @@ -1838,11 +1842,11 @@ msgstr "De gebruiker %s kon niet uit de groet %s verwijderd worden" msgid "%s left group %s" msgstr "%s heeft de groep %s verlaten" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "U bent al aangemeld." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "Het token is ongeldig of verlopen." @@ -2058,8 +2062,8 @@ msgstr "inhoudstype " msgid "Only " msgstr "Alleen " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Geen ondersteund gegevensformaat." @@ -2854,11 +2858,10 @@ msgid "Invalid profile URL (bad format)" msgstr "Ongeldige profiel-URL (foutieve opmaak)" #: actions/remotesubscribe.php:168 -#, fuzzy msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." msgstr "" -"De URL voor het profiel is niet geldig (het is geen YADIS-document of er is " -"geen of ongeldige XRDS gedefinieerd)." +"De URL is niet geldig (het is geen YADIS-document of er een ongeldige XRDS " +"gedefinieerd)." #: actions/remotesubscribe.php:176 msgid "That’s a local profile! Login to subscribe." @@ -4492,37 +4495,51 @@ msgstr "Notificaties ingeschakeld." msgid "Can't turn on notification." msgstr "Het is niet mogelijk de notificatie uit te schakelen." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Het was niet mogelijk de aliassen aan te maken." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 msgid "You are not subscribed to anyone." msgstr "U bent op geen enkele gebruiker geabonneerd." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "U bent geabonneerd op deze gebruiker:" msgstr[1] "U bent geabonneerd op deze gebruikers:" -#: lib/command.php:614 +#: lib/command.php:645 msgid "No one is subscribed to you." msgstr "Niemand heeft een abonnenment op u." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Deze gebruiker is op u geabonneerd:" msgstr[1] "Deze gebruikers zijn op u geabonneerd:" -#: lib/command.php:636 +#: lib/command.php:667 msgid "You are not a member of any groups." msgstr "U bent lid van geen enkele groep." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "U bent lid van deze groep:" msgstr[1] "U bent lid van deze groepen:" -#: lib/command.php:652 +#: lib/command.php:683 #, fuzzy msgid "" "Commands:\n" @@ -4542,6 +4559,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4579,7 +4597,6 @@ msgstr "" "reply #<mededeling-ID> - antwoorden op de mededeling met het aangegeven ID\n" "reply <gebruiker> - antwoorden op de laatste mededeling van gebruiker\n" "join <groep> - lid worden van groep\n" -"login - verwijzing opvragen naar de webpagina voor aanmelden\n" "drop <groep> - groepslidmaatschap opzeggen\n" "stats - uw statistieken opvragen\n" "stop - zelfde als 'off'\n" @@ -4642,11 +4659,7 @@ msgstr "" "U kunt een persoonlijke achtergrondafbeelding uploaden. De maximale " "bestandsgrootte is 2 megabyte." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "Foutieve standaard kleurinstellingen: " - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "Het standaardontwerp is weer ingesteld." @@ -5187,7 +5200,7 @@ msgstr "Directe mededeling verzenden" msgid "To" msgstr "Aan" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Beschikbare tekens" @@ -5200,11 +5213,11 @@ msgstr "Mededeling verzenden" msgid "What's up, %s?" msgstr "Hallo, %s." -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "Toevoegen" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "Bestand toevoegen" @@ -5472,7 +5485,11 @@ msgstr "Het was niet mogelijk om een ander op u te laten abonneren" msgid "Not subscribed!" msgstr "Niet geabonneerd!" -#: lib/subs.php:140 +#: lib/subs.php:133 +msgid "Couldn't delete self-subscription." +msgstr "Het was niet mogelijk het abonnement op uzelf te verwijderen." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Kon abonnement niet verwijderen." diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po index fdae960a3..0703217de 100644 --- a/locale/nn/LC_MESSAGES/statusnet.po +++ b/locale/nn/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:13+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:01+0000\n" "Language-Team: Norwegian Nynorsk\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nn\n" "X-Message-Group: out-statusnet\n" @@ -184,7 +184,12 @@ msgstr "Brukaren har inga profil." msgid "Could not save profile." msgstr "Kan ikkje lagra profil." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Kan ikkje oppdatera brukar." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Blokkering av brukar feila." @@ -574,7 +579,7 @@ msgstr "Skaler" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -835,110 +840,110 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Ugyldig storleik." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Denne sida er ikkje tilgjengleg i eit" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Endra passordet ditt" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Invitér" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Endra" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Statusmelding" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "Logg ut or sida" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Du kan lasta opp ein logo for gruppa." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "Endra passordet ditt" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "Kopla til" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Søk" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "Logg inn" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -948,7 +953,7 @@ msgstr "" msgid "Save" msgstr "Lagra" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1393,20 +1398,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Kan ikkje oppdatera brukar." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "Klarte ikkje Ã¥ lagra Twitter-innstillingane dine!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Synkroniserings innstillingar blei lagra." @@ -1724,7 +1729,7 @@ msgstr "Personleg melding" msgid "Optionally add a personal message to the invitation." msgstr "Eventuelt legg til ei personleg melding til invitasjonen." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Send" @@ -1825,11 +1830,11 @@ msgstr "Kunne ikkje fjerne %s fra %s gruppa " msgid "%s left group %s" msgstr "%s forlot %s gruppa" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Allereie logga inn." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Ugyldig notisinnhald" @@ -2045,8 +2050,8 @@ msgstr "Kopla til" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Ikkje eit støtta dataformat." @@ -4445,40 +4450,54 @@ msgstr "Notifikasjon pÃ¥." msgid "Can't turn on notification." msgstr "Kan ikkje slÃ¥ pÃ¥ notifikasjon." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Kunne ikkje lagre favoritt." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Du tingar ikkje oppdateringar til den profilen." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Du tingar allereie oppdatering frÃ¥ desse brukarane:" msgstr[1] "Du tingar allereie oppdatering frÃ¥ desse brukarane:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Kan ikkje tinga andre til deg." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Kan ikkje tinga andre til deg." msgstr[1] "Kan ikkje tinga andre til deg." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Du er ikkje medlem av den gruppa." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Du er ikkje medlem av den gruppa." msgstr[1] "Du er ikkje medlem av den gruppa." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4497,6 +4516,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4561,11 +4581,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Du kan laste opp ein personleg avatar." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -5028,7 +5044,7 @@ msgstr "Send ei direkte melding" msgid "To" msgstr "Til" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Tilgjenglege teikn" @@ -5041,11 +5057,11 @@ msgstr "Send ei melding" msgid "What's up, %s?" msgstr "Kva skjer, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5325,7 +5341,12 @@ msgstr "Kan ikkje tinga andre til deg." msgid "Not subscribed!" msgstr "Ikkje tinga." -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Kan ikkje sletta tinging." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Kan ikkje sletta tinging." diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po index 62d92064c..c8363f2a3 100644 --- a/locale/pl/LC_MESSAGES/statusnet.po +++ b/locale/pl/LC_MESSAGES/statusnet.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:31+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:09+0000\n" "Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n" "Language-Team: Polish <pl@li.org>\n" "MIME-Version: 1.0\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pl\n" "X-Message-Group: out-statusnet\n" @@ -194,7 +194,12 @@ msgstr "Użytkownik nie posiada profilu." msgid "Could not save profile." msgstr "Nie można zapisać profilu." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Nie można zablokować siebie." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Zablokowanie użytkownika nie powiodÅ‚o siÄ™." @@ -576,7 +581,7 @@ msgstr "Przytnij" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -828,100 +833,100 @@ msgstr "WyglÄ…d" msgid "Design settings for this StatusNet site." msgstr "Ustawienia wyglÄ…du tej strony StatusNet." -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "NieprawidÅ‚owy adres URL logo." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "Motyw nie jest dostÄ™pny: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "ZmieÅ„ logo" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "Logo strony" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "ZmieÅ„ motyw" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "Motyw strony" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "Motyw strony." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "ZmieÅ„ obraz tÅ‚a" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "TÅ‚o" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "Można wysÅ‚ać obraz tÅ‚a dla strony. Maksymalny rozmiar pliku to %1$s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "WÅ‚Ä…czone" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "WyÅ‚Ä…czone" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "WÅ‚Ä…cz lub wyÅ‚Ä…cz obraz tÅ‚a." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "Kafelkowy obraz tÅ‚a" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "ZmieÅ„ kolory" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Zawartość" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "Panel boczny" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Tekst" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "OdnoÅ›niki" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "Użycie domyÅ›lnych" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "Przywróć domyÅ›lny wyglÄ…d" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "Przywróć domyÅ›lne ustawienia" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -931,7 +936,7 @@ msgstr "Przywróć domyÅ›lne ustawienia" msgid "Save" msgstr "Zapisz" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "Zapisz wyglÄ…d" @@ -1368,18 +1373,18 @@ msgid "" "palette of your choice." msgstr "Dostosuj wyglÄ…d grupy za pomocÄ… wybranego obrazu tÅ‚a i palety kolorów." -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "Nie można zaktualizować wyglÄ…du." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "Nie można zapisać ustawieÅ„ wyglÄ…du." -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "Zapisano preferencje wyglÄ…du." @@ -1703,7 +1708,7 @@ msgstr "Osobista wiadomość" msgid "Optionally add a personal message to the invitation." msgstr "Opcjonalnie dodaj osobistÄ… wiadomość do zaproszenia." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "WyÅ›lij" @@ -1809,11 +1814,11 @@ msgstr "Nie można usunąć użytkownika %s z grupy %s" msgid "%s left group %s" msgstr "Użytkownik %s opuÅ›ciÅ‚ grupÄ™ %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "JesteÅ› już zalogowany." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "NieprawidÅ‚owy lub wygasÅ‚y token." @@ -2029,8 +2034,8 @@ msgstr "typ zawartoÅ›ci " msgid "Only " msgstr "Tylko " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "To nie jest obsÅ‚ugiwany format danych." @@ -2818,7 +2823,7 @@ msgstr "NieprawidÅ‚owy adres URL profilu (bÅ‚Ä™dny format)" #, fuzzy msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." msgstr "" -"To nie jest prawidÅ‚owy adres URL profilu (brak dokumentu YADIS lub okreÅ›lono " +"NieprawidÅ‚owy adres URL profilu (brak dokumentu YADIS lub okreÅ›lono " "nieprawidÅ‚owe XRDS)." #: actions/remotesubscribe.php:176 @@ -4432,40 +4437,54 @@ msgstr "WÅ‚Ä…czono powiadomienia." msgid "Can't turn on notification." msgstr "Nie można wÅ‚Ä…czyć powiadomieÅ„." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Nie można utworzyć aliasów." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 msgid "You are not subscribed to anyone." msgstr "Nie subskrybujesz nikogo." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Subskrybujesz tÄ™ osobÄ™:" msgstr[1] "Subskrybujesz te osoby:" msgstr[2] "Subskrybujesz te osoby:" -#: lib/command.php:614 +#: lib/command.php:645 msgid "No one is subscribed to you." msgstr "Nikt ciÄ™ nie subskrybuje." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Ta osoba ciÄ™ subskrybuje:" msgstr[1] "Te osoby ciÄ™ subskrybujÄ…:" msgstr[2] "Te osoby ciÄ™ subskrybujÄ…:" -#: lib/command.php:636 +#: lib/command.php:667 msgid "You are not a member of any groups." msgstr "Nie jesteÅ› czÅ‚onkiem żadnej grupy." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "JesteÅ› czÅ‚onkiem tej grupy:" msgstr[1] "JesteÅ› czÅ‚onkiem tych grup:" msgstr[2] "JesteÅ› czÅ‚onkiem tych grup:" -#: lib/command.php:652 +#: lib/command.php:683 #, fuzzy msgid "" "Commands:\n" @@ -4485,6 +4504,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4521,9 +4541,8 @@ msgstr "" "reply #<identyfikator_wpisu> - odpowiada na wpis z podanym identyfikatorem\n" "reply <pseudonim> - odpowiada na ostatni wpis użytkownika\n" "join <grupa> - doÅ‚Ä…cza do grupy\n" -"login - uzyskuje odnoÅ›nik do zalogowania siÄ™ w interfejsie WWW\n" "drop <grupa> - opuszcza grupÄ™\n" -"stats - uzyskuje twoje statystyki\n" +"stats - uzyskuje statystyki\n" "stop - to samo co \"off\"\n" "quit - to samo co \"off\"\n" "sub <pseudonim> - to samo co \"follow\"\n" @@ -4531,10 +4550,10 @@ msgstr "" "last <pseudonim> - to samo co \"get\"\n" "on <pseudonim> - jeszcze nie zaimplementowano.\n" "off <pseudonim> - jeszcze nie zaimplementowano.\n" -"nudge <pseudonim> - jeszcze nie zaimplementowano.\n" +"nudge <pseudonim> - przypomina użytkownikowi o aktualizacji.\n" "invite <numer telefonu> - jeszcze nie zaimplementowano.\n" -"track <sÅ‚owo> - jeszcze nie zaimplementowano.\n" -"untrack <sÅ‚owo> - jeszcze nie zaimplementowano.\n" +"track <wyraz> - jeszcze nie zaimplementowano.\n" +"untrack <wyraz> - jeszcze nie zaimplementowano.\n" "track off - jeszcze nie zaimplementowano.\n" "untrack all - jeszcze nie zaimplementowano.\n" "tracks - jeszcze nie zaimplementowano.\n" @@ -4581,11 +4600,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Można wysÅ‚ać osobisty obraz tÅ‚a. Maksymalny rozmiar pliku to 2 MB." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "BÅ‚Ä™dne domyÅ›lne ustawienia koloru: " - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "Przywrócono domyÅ›lny wyglÄ…d." @@ -5123,7 +5138,7 @@ msgstr "WyÅ›lij bezpoÅ›redni wpis" msgid "To" msgstr "Do" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "DostÄ™pne znaki" @@ -5136,11 +5151,11 @@ msgstr "WyÅ›lij wpis" msgid "What's up, %s?" msgstr "Co sÅ‚ychać, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "ZaÅ‚Ä…cz" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "ZaÅ‚Ä…cz plik" @@ -5407,7 +5422,12 @@ msgstr "Nie można subskrybować innych do ciebie." msgid "Not subscribed!" msgstr "Niesubskrybowane." -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Nie można usunąć autosubskrypcji." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Nie można usunąć subskrypcji." diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po index c5b3c9515..54cc569f2 100644 --- a/locale/pt/LC_MESSAGES/statusnet.po +++ b/locale/pt/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:35+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:13+0000\n" "Language-Team: Portuguese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt\n" "X-Message-Group: out-statusnet\n" @@ -96,8 +96,8 @@ msgid "" "You can try to [nudge %s](../%s) from his profile or [post something to his " "or her attention](%%%%action.newnotice%%%%?status_textarea=%s)." msgstr "" -"Tente [acotovelar o(a) %s](../%s) a partir do perfil ou [publicar qualquer " -"coisa à sua atenção](%%%%action.newnotice%%%%?status_textarea=%s)." +"Tente [acotovelar %s](../%s) a partir do perfil ou [publicar qualquer coisa " +"à sua atenção](%%%%action.newnotice%%%%?status_textarea=%s)." #: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202 #, php-format @@ -105,8 +105,8 @@ msgid "" "Why not [register an account](%%%%action.register%%%%) and then nudge %s or " "post a notice to his or her attention." msgstr "" -"Podia [registar uma conta](%%%%action.register%%%%) e depois acotovelar o(a) " -"%s ou publicar uma nota à sua atenção." +"Podia [registar uma conta](%%%%action.register%%%%) e depois acotovelar %s " +"ou publicar uma nota à sua atenção." #: actions/all.php:165 msgid "You and friends" @@ -115,7 +115,7 @@ msgstr "Você e amigos" #: actions/allrss.php:119 actions/apitimelinefriends.php:121 #, php-format msgid "Updates from %1$s and friends on %2$s!" -msgstr "Actualizações do(a) %1$s e amigos no %2$s!" +msgstr "Actualizações de %1$s e amigos no %2$s!" #: actions/apiaccountratelimitstatus.php:70 #: actions/apiaccountupdatedeliverydevice.php:93 @@ -187,7 +187,11 @@ msgstr "Utilizador não tem perfil." msgid "Could not save profile." msgstr "Não foi possÃvel gravar o perfil." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +msgid "You cannot block yourself!" +msgstr "Os utilizadores não podem bloquear-se a si próprios!" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Bloqueio do utilizador falhou." @@ -216,7 +220,7 @@ msgstr "" #: actions/apidirectmessage.php:89 #, php-format msgid "Direct messages from %s" -msgstr "Mensagens directas do(a) %s" +msgstr "Mensagens directas de %s" #: actions/apidirectmessage.php:93 #, php-format @@ -396,7 +400,7 @@ msgstr "Não foi possÃvel remover %s do grupo %s." #: actions/apigrouplistall.php:90 actions/usergroups.php:62 #, php-format msgid "%s groups" -msgstr "Grupos do(a) %s" +msgstr "Grupos de %s" #: actions/apigrouplistall.php:94 #, php-format @@ -549,7 +553,7 @@ msgstr "Original" #: actions/avatarsettings.php:141 actions/avatarsettings.php:214 #: actions/grouplogo.php:210 actions/grouplogo.php:271 msgid "Preview" -msgstr "Antever" +msgstr "Antevisão" #: actions/avatarsettings.php:148 lib/deleteuserform.php:66 #: lib/noticelist.php:550 @@ -568,7 +572,7 @@ msgstr "Cortar" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -822,45 +826,45 @@ msgstr "Design" msgid "Design settings for this StatusNet site." msgstr "Configurações do design deste site StatusNet." -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "URL do logótipo inválida." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "Tema não está disponÃvel: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "Alterar logótipo" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "Logótipo do site" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "Alterar tema" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "Tema do site" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "O tema para o site." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Alterar imagem de fundo" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" -msgstr "Imagem de fundo" +msgstr "Fundo" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" @@ -869,55 +873,55 @@ msgstr "" "Pode carregar uma imagem de fundo para o site. O tamanho máximo do ficheiro " "é %1$s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" -msgstr "" +msgstr "Ligar" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" -msgstr "" +msgstr "Desligar" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." -msgstr "" +msgstr "Ligar ou desligar a imagem de fundo." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "Repetir imagem de fundo em mosaico" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Alterar cores" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Conteúdo" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" -msgstr "Barra lateral" +msgstr "Lateral" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "Ligações" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "Usar predefinições" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "Repor designs predefinidos" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "Repor predefinição" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -927,7 +931,7 @@ msgstr "Repor predefinição" msgid "Save" msgstr "Gravar" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "Gravar o design" @@ -1201,7 +1205,7 @@ msgstr "" #: lib/personalgroupnav.php:115 #, php-format msgid "%s's favorite notices" -msgstr "Notas favoritas do(a) %s" +msgstr "Notas favoritas de %s" #: actions/favoritesrss.php:115 #, php-format @@ -1369,18 +1373,18 @@ msgstr "" "Personalize o aspecto do seu grupo com uma imagem de fundo e uma paleta de " "cores à sua escolha." -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "Não foi possÃvel actualizar o design." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "Não foi possÃvel actualizar as suas configurações do design!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "Preferências do design foram gravadas." @@ -1453,8 +1457,8 @@ msgid "" "Search for groups on %%site.name%% by their name, location, or description. " "Separate the terms by spaces; they must be 3 characters or more." msgstr "" -"Procure grupos em %%site.name%% pelo seu nome, localização ou descrição. " -"Separe os termos de busca com espaços; precisam de ter 3 ou mais caracteres." +"Procure grupos neste site pesquisando o nome, localização ou descrição. Os " +"termos de busca devem ter 3 ou mais caracteres e ser separados por espaços." #: actions/groupsearch.php:58 msgid "Group search" @@ -1631,7 +1635,8 @@ msgstr "Caixa de entrada de %s" #: actions/inbox.php:115 msgid "This is your inbox, which lists your incoming private messages." msgstr "" -"Esta é a sua caixa de entrada, que apresenta as mensagens privadas recebidas." +"Esta é a sua caixa de entrada, que apresenta as mensagens privadas que " +"recebeu." #: actions/invite.php:39 msgid "Invites have been disabled." @@ -1704,9 +1709,9 @@ msgstr "Mensagem pessoal" #: actions/invite.php:194 msgid "Optionally add a personal message to the invitation." -msgstr "Pode optar por acrescentar uma mensagem pessoal ao convite." +msgstr "Pode optar por acrescentar uma mensagem pessoal ao convite" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Enviar" @@ -1811,11 +1816,11 @@ msgstr "Não foi possÃvel remover o utilizador %s do grupo %s" msgid "%s left group %s" msgstr "%s deixou o grupo %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Sessão já foi iniciada." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "Chave inválida ou expirada." @@ -1958,8 +1963,8 @@ msgid "" "Search for notices on %%site.name%% by their contents. Separate search terms " "by spaces; they must be 3 characters or more." msgstr "" -"Procure notas em %%site.name%% pelo seu conteúdo. Separe os termos de busca " -"com espaços; precisam de ter 3 ou mais caracteres." +"Procure notas neste site pesquisando o seu conteúdo. Os termos de busca " +"devem ter 3 ou mais caracteres e ser separados por espaços." #: actions/noticesearch.php:78 msgid "Text search" @@ -2028,10 +2033,10 @@ msgstr "tipo de conteúdo " #: actions/oembed.php:160 msgid "Only " -msgstr "" +msgstr "Apenas " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Formato de dados não suportado." @@ -2061,15 +2066,15 @@ msgstr "Compactar URLs com" #: actions/othersettings.php:117 msgid "Automatic shortening service to use." -msgstr "Serviço de compactação automático a utilizar." +msgstr "Serviço de compactação automática que será usado" #: actions/othersettings.php:122 msgid "View profile designs" -msgstr "Ver designs de perfis" +msgstr "Ver o design dos perfis" #: actions/othersettings.php:123 msgid "Show or hide profile designs." -msgstr "Mostrar ou esconder designs de perfis" +msgstr "Mostrar ou esconder o design dos perfis" #: actions/othersettings.php:153 msgid "URL shortening service is too long (max 50 chars)." @@ -2088,7 +2093,7 @@ msgstr "Caixa de saÃda de %s" #: actions/outbox.php:116 msgid "This is your outbox, which lists private messages you have sent." msgstr "" -"Esta é a sua caixa de saÃda, que apresenta as mensagens privadas enviadas." +"Esta é a sua caixa de saÃda, que apresenta as mensagens privadas que enviou." #: actions/passwordsettings.php:58 msgid "Change password" @@ -2258,8 +2263,8 @@ msgid "" "Search for people on %%site.name%% by their name, location, or interests. " "Separate the terms by spaces; they must be 3 characters or more." msgstr "" -"Procure pessoas em %%site.name%% pelo seu nome, localidade ou interesses. " -"Separe os termos de busca com espaços; precisam de ter 3 ou mais caracteres." +"Procure pessoas neste site pesquisando o nome, localidade ou interesses. Os " +"termos de busca devem ter 3 ou mais caracteres e ser separados por espaços." #: actions/peoplesearch.php:58 msgid "People search" @@ -2316,7 +2321,8 @@ msgstr "Página de acolhimento" #: actions/profilesettings.php:117 actions/register.php:454 msgid "URL of your homepage, blog, or profile on another site" -msgstr "URL da uma página sua, blogue ou perfil noutro sÃtio na internet" +msgstr "" +"URL da sua página de acolhimento, blogue ou perfil noutro site na internet" #: actions/profilesettings.php:122 actions/register.php:460 #, php-format @@ -2708,7 +2714,7 @@ msgstr "Repita a palavra-chave acima. Obrigatório." #: actions/register.php:437 actions/register.php:441 #: actions/siteadminpanel.php:283 lib/accountsettingsaction.php:120 msgid "Email" -msgstr "Correio electrónico" +msgstr "Correio" #: actions/register.php:438 actions/register.php:442 msgid "Used only for updates, announcements, and password recovery" @@ -2753,7 +2759,8 @@ msgid "" "\n" "Thanks for signing up and we hope you enjoy using this service." msgstr "" -"Parabéns, %s! Bem-vindo(a) ao %%%%site.name%%%%. A partir daqui, pode...\n" +"Parabéns, %s! Bem-vindo(a) ao site %%%%site.name%%%%. A partir daqui, " +"pode...\n" "\n" "* Visitar o [seu perfil](%s) e enviar a primeira mensagem.\n" "* Adicionar um [endereço Jabber/GTalk](%%%%action.imsettings%%%%) de forma a " @@ -2821,11 +2828,10 @@ msgid "Invalid profile URL (bad format)" msgstr "URL de perfil inválido (formato incorrecto)" #: actions/remotesubscribe.php:168 -#, fuzzy msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." msgstr "" -"URL de perfil não é válida (nenhum documento Yadis ou nenhum XRDS inválido " -"definidos)." +"URL do perfil não é válida (não há um documento Yadis, ou foi definido um " +"XRDS inválido)." #: actions/remotesubscribe.php:176 msgid "That’s a local profile! Login to subscribe." @@ -3041,7 +3047,7 @@ msgid "" "their life and interests. [Join now](%%%%action.register%%%%) to become part " "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -"**%s** é um grupo de utilizadores em %%%%site.name%%%%, um serviço de " +"**%s** é um grupo de utilizadores no site %%%%site.name%%%%, um serviço de " "[microblogues](http://en.wikipedia.org/wiki/Micro-blogging) baseado na " "aplicação de Software Livre [StatusNet](http://status.net/). Os membros " "deste grupo partilham mensagens curtas acerca das suas vidas e interesses. " @@ -3056,7 +3062,7 @@ msgid "" "[StatusNet](http://status.net/) tool. Its members share short messages about " "their life and interests. " msgstr "" -"**%s** é um grupo de utilizadores em %%%%site.name%%%%, um serviço de " +"**%s** é um grupo de utilizadores no site %%%%site.name%%%%, um serviço de " "[microblogues](http://en.wikipedia.org/wiki/Micro-blogging) baseado na " "aplicação de Software Livre [StatusNet](http://status.net/). Os membros " "deste grupo partilham mensagens curtas acerca das suas vidas e interesses. " @@ -3152,7 +3158,7 @@ msgid "" "[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to " "follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" -"**%s** tem uma conta em %%%%site.name%%%%, um serviço de [microblogues]" +"**%s** tem uma conta no site %%%%site.name%%%%, um serviço de [microblogues]" "(http://en.wikipedia.org/wiki/Micro-blogging) baseado na aplicação de " "Software Livre [StatusNet](http://status.net/). [Registe-se agora](%%%%" "action.register%%%%) para seguir as notas de **%s** e de muitos mais! " @@ -3165,7 +3171,7 @@ msgid "" "wikipedia.org/wiki/Micro-blogging) service based on the Free Software " "[StatusNet](http://status.net/) tool. " msgstr "" -"**%s** tem uma conta em %%%%site.name%%%%, um serviço de [microblogues]" +"**%s** tem uma conta no site %%%%site.name%%%%, um serviço de [microblogues]" "(http://en.wikipedia.org/wiki/Micro-blogging) baseado na aplicação de " "Software Livre [StatusNet](http://status.net/). " @@ -3914,7 +3920,7 @@ msgstr "Tipo de imagem incorrecto para o avatar da URL ‘%s’." #: actions/userbyid.php:70 msgid "No id." -msgstr "" +msgstr "Nenhuma identificação." #: actions/userdesignsettings.php:76 lib/designsettings.php:65 msgid "Profile design" @@ -4141,7 +4147,7 @@ msgstr "Ajudem-me!" #: lib/action.php:464 lib/searchaction.php:127 msgid "Search" -msgstr "Pesquisar" +msgstr "Pesquisa" #: lib/action.php:464 msgid "Search for people or text" @@ -4181,7 +4187,7 @@ msgstr "Privacidade" #: lib/action.php:737 msgid "Source" -msgstr "Fonte" +msgstr "Código" #: lib/action.php:739 msgid "Contact" @@ -4201,8 +4207,8 @@ msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." "broughtby%%](%%site.broughtbyurl%%). " msgstr "" -"**%%site.name%%*** é um serviço de microblogues disponibilizado por [%%site." -"broughtby%%](%%site.broughtbyurl%%)." +"**%%site.name%%** é um serviço de microblogues disponibilizado por [%%site." +"broughtby%%](%%site.broughtbyurl%%). " #: lib/action.php:774 #, php-format @@ -4226,7 +4232,7 @@ msgstr "Licença de conteúdos do site" #: lib/action.php:799 msgid "All " -msgstr "" +msgstr "Tudo " #: lib/action.php:804 msgid "license." @@ -4404,7 +4410,7 @@ msgstr "Introduza o nome do utilizador para subscrever" #: lib/command.php:502 #, php-format msgid "Subscribed to %s" -msgstr "Subscreveu o(a) %s" +msgstr "Subscreveu %s" #: lib/command.php:523 msgid "Specify the name of the user to unsubscribe from" @@ -4413,7 +4419,7 @@ msgstr "Introduza o nome do utilizador para deixar de subscrever" #: lib/command.php:530 #, php-format msgid "Unsubscribed from %s" -msgstr "Deixou de subscrever o(a) %s" +msgstr "Deixou de subscrever %s" #: lib/command.php:548 lib/command.php:571 msgid "Command not yet implemented." @@ -4435,37 +4441,51 @@ msgstr "Notificação ligada." msgid "Can't turn on notification." msgstr "Não foi possÃvel ligar a notificação." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Não foi possÃvel criar cognomes." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 msgid "You are not subscribed to anyone." msgstr "Não subscreveu ninguém." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Subscreve esta pessoa:" msgstr[1] "Subscreve estas pessoas:" -#: lib/command.php:614 +#: lib/command.php:645 msgid "No one is subscribed to you." msgstr "Ninguém subscreve as suas notas." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Esta pessoa subscreve as suas notas:" msgstr[1] "Estas pessoas subscrevem as suas notas:" -#: lib/command.php:636 +#: lib/command.php:667 msgid "You are not a member of any groups." msgstr "Não está em nenhum grupo." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Está no grupo:" msgstr[1] "Está nos grupos:" -#: lib/command.php:652 +#: lib/command.php:683 #, fuzzy msgid "" "Commands:\n" @@ -4485,6 +4505,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4520,7 +4541,6 @@ msgstr "" "reply #<id_da_nota> - responder à nota com esta identificação\n" "reply <alcunha> - responder à última nota do utilizador\n" "join <grupo> - juntar-se ao grupo\n" -"login - Receber uma ligação para iniciar sessão na interface web\n" "drop <grupo> - afastar-se do grupo\n" "stats - receber as suas estatÃsticas\n" "stop - o mesmo que 'off'\n" @@ -4582,11 +4602,7 @@ msgstr "" "Pode carregar uma imagem de fundo pessoal. O tamanho máximo do ficheiro é " "2MB." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "Configurações inadequadas das cores por omissão: " - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "Predefinições do design repostas" @@ -5124,7 +5140,7 @@ msgstr "Enviar uma nota directa" msgid "To" msgstr "Para" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Caracteres disponÃveis" @@ -5137,11 +5153,11 @@ msgstr "Enviar uma nota" msgid "What's up, %s?" msgstr "Novidades, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "Anexar" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "Anexar um ficheiro" @@ -5408,7 +5424,11 @@ msgstr "Não foi possÃvel que outro o subscrevesse." msgid "Not subscribed!" msgstr "Não subscrito!" -#: lib/subs.php:140 +#: lib/subs.php:133 +msgid "Couldn't delete self-subscription." +msgstr "Não foi possÃvel apagar a auto-subscrição." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Não foi possÃvel apagar a subscrição." diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po index 31068710e..535520096 100644 --- a/locale/pt_BR/LC_MESSAGES/statusnet.po +++ b/locale/pt_BR/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:38+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:16+0000\n" "Language-Team: Brazilian Portuguese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt-br\n" "X-Message-Group: out-statusnet\n" @@ -184,7 +184,12 @@ msgstr "O usuário não tem perfil." msgid "Could not save profile." msgstr "Não foi possÃvel salvar o perfil." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Não foi possÃvel atualizar o usuário." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Não foi possÃvel bloquear o usuário." @@ -254,16 +259,14 @@ msgid "No status found with that ID." msgstr "Não foi encontrado nenhum status com esse ID." #: actions/apifavoritecreate.php:119 -#, fuzzy msgid "This status is already a favorite!" -msgstr "Essa mensagem já é uma favorita!" +msgstr "Esta mensagem já é favorita!" #: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 msgid "Could not create favorite." msgstr "Não foi possÃvel criar a favorita." #: actions/apifavoritedestroy.php:122 -#, fuzzy msgid "That status is not a favorite!" msgstr "Essa mensagem não é uma favorita!" @@ -573,7 +576,7 @@ msgstr "Cortar" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -833,51 +836,51 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Tamanho inválido." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Esta página não está disponÃvel em um " -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Altere a sua senha" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Convidar" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Alterar" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Nova mensagem" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "Sair deste site" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Alterar imagem de plano de fundo." -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" @@ -886,58 +889,58 @@ msgstr "" "Você pode enviar uma imagem de plano de fundo para o site. O tamanho máximo " "do arquivo é %l$s" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "Ligado" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "Altere a sua senha" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Conteúdo" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Procurar" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Texto" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "Lista" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "Usar o padrão." -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -947,7 +950,7 @@ msgstr "" msgid "Save" msgstr "Salvar" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1395,20 +1398,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Não foi possÃvel atualizar o usuário." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "Não foi possÃvel salvar suas configurações do Twitter!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "As preferências de sincronização foram salvas." @@ -1734,7 +1737,7 @@ msgstr "Mensagem pessoal" msgid "Optionally add a personal message to the invitation." msgstr "Você pode, opcionalmente, adicionar uma mensagem pessoal ao convite." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Enviar" @@ -1847,11 +1850,11 @@ msgstr "Não é possÃvel acompanhar o usuário: Usuário não encontrado." msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Já está logado." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "O conteúdo da mensagem é inválido" @@ -2069,8 +2072,8 @@ msgstr "" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Formato de dados não suportado." @@ -4495,40 +4498,54 @@ msgstr "Notificação ligada." msgid "Can't turn on notification." msgstr "Não é possÃvel ligar a notificação." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Não foi possÃvel criar a favorita." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Você não está assinando esse perfil." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Você já está assinando esses usuários:" msgstr[1] "Você já está assinando esses usuários:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Não foi possÃvel fazer com que o outros o sigam." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Não foi possÃvel fazer com que o outros o sigam." msgstr[1] "Não foi possÃvel fazer com que o outros o sigam." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Você não está assinando esse perfil." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Você não é membro deste grupo." msgstr[1] "Você não é membro deste grupo." -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4547,6 +4564,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4611,11 +4629,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "Você pode enviar seu avatar pessoal. O tamanho máximo do arquivo é %s" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -5080,7 +5094,7 @@ msgstr "Enviar uma mensagem direta" msgid "To" msgstr "Para" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "Caracteres disponÃveis" @@ -5093,11 +5107,11 @@ msgstr "Enviar uma mensagem" msgid "What's up, %s?" msgstr "E aÃ, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5378,7 +5392,12 @@ msgstr "Não foi possÃvel fazer com que o outros o sigam." msgid "Not subscribed!" msgstr "Não é seguido!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Não foi possÃvel excluir a assinatura." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Não foi possÃvel excluir a assinatura." diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po index 25e8d8e7c..713357714 100644 --- a/locale/ru/LC_MESSAGES/statusnet.po +++ b/locale/ru/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:42+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:20+0000\n" "Language-Team: Russian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: out-statusnet\n" @@ -190,7 +190,11 @@ msgstr "У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ профилÑ." msgid "Could not save profile." msgstr "Ðе удаётÑÑ Ñохранить профиль." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +msgid "You cannot block yourself!" +msgstr "Ð’Ñ‹ не можете заблокировать Ñамого ÑебÑ!" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Ðеудача при блокировке пользователÑ." @@ -577,7 +581,7 @@ msgstr "Обрезать" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -829,45 +833,45 @@ msgstr "Оформление" msgid "Design settings for this StatusNet site." msgstr "ÐаÑтройки Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñтого Ñайта StatusNet." -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "Ðеверный URL логотипа." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "Тема не доÑтупна: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "Изменить логотип" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "Логотип Ñайта" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "Изменить тему" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "Тема Ñайта" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "Тема Ð´Ð»Ñ Ñайта." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Изменение фонового изображениÑ" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "Фон" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" @@ -876,55 +880,55 @@ msgstr "" "Ð’Ñ‹ можете загрузить фоновое изображение Ð´Ð»Ñ Ñайта. МакÑимальный размер файла " "ÑоÑтавлÑет %1$s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "Включить" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "Отключить" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "Включить или отключить показ фонового изображениÑ." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "РаÑÑ‚Ñнуть фоновое изображение" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Изменение цветовой гаммы" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "Содержание" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "Ð‘Ð¾ÐºÐ¾Ð²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "ТекÑÑ‚" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "СÑылки" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "ИÑпользовать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "ВоÑÑтановить оформление по умолчанию" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "ВоÑÑтановить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -934,7 +938,7 @@ msgstr "ВоÑÑтановить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию" msgid "Save" msgstr "Сохранить" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "Сохранить оформление" @@ -1381,18 +1385,18 @@ msgstr "" "ÐаÑтройте внешний вид группы, уÑтановив фоновое изображение и цветовую гамму " "на ваш выбор." -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ ваше оформление." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "Ðе удаётÑÑ Ñохранить ваши наÑтройки оформлениÑ!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "ÐаÑтройки Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ñохранены." @@ -1719,7 +1723,7 @@ msgstr "Личное Ñообщение" msgid "Optionally add a personal message to the invitation." msgstr "Можно добавить к приглашению личное Ñообщение." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "ОК" @@ -1825,11 +1829,11 @@ msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s из гр msgid "%s left group %s" msgstr "%s покинул группу %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Ð’Ñ‹ уже авторизовалиÑÑŒ." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "Ðеверный или уÑтаревший ключ." @@ -2043,8 +2047,8 @@ msgstr "тип Ñодержимого " msgid "Only " msgstr "Только " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Ðеподдерживаемый формат данных." @@ -2830,11 +2834,8 @@ msgid "Invalid profile URL (bad format)" msgstr "Ðеверный URL Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (плохой формат)" #: actions/remotesubscribe.php:168 -#, fuzzy msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." -msgstr "" -"Ðеверный URL Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (не YADIS-документ либо не указан или указан неверный " -"XRDS)." +msgstr "Ðеправильный URL-профиль (нет YADIS-документа, либо неверный XRDS)." #: actions/remotesubscribe.php:176 msgid "That’s a local profile! Login to subscribe." @@ -4450,40 +4451,54 @@ msgstr "ЕÑÑ‚ÑŒ оповещение." msgid "Can't turn on notification." msgstr "ЕÑÑ‚ÑŒ оповещение." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Ðе удаётÑÑ Ñоздать алиаÑÑ‹." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 msgid "You are not subscribed to anyone." msgstr "Ð’Ñ‹ ни на кого не подпиÑаны." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ð’Ñ‹ подпиÑаны на Ñтих людей:" msgstr[1] "Ð’Ñ‹ подпиÑаны на Ñтих людей:" msgstr[2] "Ð’Ñ‹ подпиÑаны на Ñтих людей:" -#: lib/command.php:614 +#: lib/command.php:645 msgid "No one is subscribed to you." msgstr "Ðикто не подпиÑан на ваÑ." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Ðти люди подпиÑалиÑÑŒ на ваÑ:" msgstr[1] "Ðти люди подпиÑалиÑÑŒ на ваÑ:" msgstr[2] "Ðти люди подпиÑалиÑÑŒ на ваÑ:" -#: lib/command.php:636 +#: lib/command.php:667 msgid "You are not a member of any groups." msgstr "Ð’Ñ‹ не ÑоÑтоите ни в одной группе." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:" msgstr[1] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:" msgstr[2] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:" -#: lib/command.php:652 +#: lib/command.php:683 #, fuzzy msgid "" "Commands:\n" @@ -4503,6 +4518,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4538,7 +4554,6 @@ msgstr "" "reply #<notice_id> — ответить на запиÑÑŒ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ id\n" "reply <nickname> — ответить на поÑледнюю запиÑÑŒ пользователÑ\n" "join <group> — приÑоединитьÑÑ Ðº группе\n" -"login — получить ÑÑылку на вход в веб-интерфейÑ\n" "drop <group> — покинуть группу\n" "stats — получить Ñвою ÑтатиÑтику\n" "stop — то же, что и 'off'\n" @@ -4600,11 +4615,7 @@ msgstr "" "Ð’Ñ‹ можете загрузить ÑобÑтвенное фоновое изображение. МакÑимальный размер " "файла ÑоÑтавлÑет 2МБ." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "Плохие наÑтройки цвета по умолчанию: " - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "Оформление по умолчанию воÑÑтановлено." @@ -5141,7 +5152,7 @@ msgstr "ПоÑлать прÑмую запиÑÑŒ" msgid "To" msgstr "ДлÑ" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "6 или больше знаков" @@ -5154,11 +5165,11 @@ msgstr "ПоÑлать запиÑÑŒ" msgid "What's up, %s?" msgstr "Что нового, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "Прикрепить" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "Прикрепить файл" @@ -5425,7 +5436,11 @@ msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñать других на вашу лен msgid "Not subscribed!" msgstr "Ðе подпиÑаны!" -#: lib/subs.php:140 +#: lib/subs.php:133 +msgid "Couldn't delete self-subscription." +msgstr "Ðевозможно удалить ÑамоподпиÑку." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑку." diff --git a/locale/statusnet.po b/locale/statusnet.po index 0ab702ae5..dce6f6551 100644 --- a/locale/statusnet.po +++ b/locale/statusnet.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -176,7 +176,11 @@ msgstr "" msgid "Could not save profile." msgstr "" -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +msgid "You cannot block yourself!" +msgstr "" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -555,7 +559,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -800,100 +804,100 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "" -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -903,7 +907,7 @@ msgstr "" msgid "Save" msgstr "" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1325,18 +1329,18 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "" -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "" @@ -1632,7 +1636,7 @@ msgstr "" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "" @@ -1712,11 +1716,11 @@ msgstr "" msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "" -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "" @@ -1917,8 +1921,8 @@ msgstr "" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -4176,37 +4180,51 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, php-format +msgid "Could not create login token for %s" +msgstr "" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 msgid "You are not subscribed to anyone." msgstr "" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "" msgstr[1] "" -#: lib/command.php:614 +#: lib/command.php:645 msgid "No one is subscribed to you." msgstr "" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "" msgstr[1] "" -#: lib/command.php:636 +#: lib/command.php:667 msgid "You are not a member of any groups." msgstr "" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "" msgstr[1] "" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4225,6 +4243,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4285,11 +4304,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4733,7 +4748,7 @@ msgstr "" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "" @@ -4746,11 +4761,11 @@ msgstr "" msgid "What's up, %s?" msgstr "" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5017,7 +5032,11 @@ msgstr "" msgid "Not subscribed!" msgstr "" -#: lib/subs.php:140 +#: lib/subs.php:133 +msgid "Couldn't delete self-subscription." +msgstr "" + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "" diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po index 8421ccdb0..01e895f8e 100644 --- a/locale/sv/LC_MESSAGES/statusnet.po +++ b/locale/sv/LC_MESSAGES/statusnet.po @@ -1,5 +1,6 @@ # Translation of StatusNet to Swedish # +# Author@translatewiki.net: Jamminjohn # Author@translatewiki.net: McDutchie # -- # This file is distributed under the same license as the StatusNet package. @@ -8,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:46+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:23+0000\n" "Language-Team: Swedish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" "X-Message-Group: out-statusnet\n" @@ -21,9 +22,8 @@ msgstr "" #: actions/all.php:63 actions/public.php:97 actions/replies.php:92 #: actions/showfavorites.php:137 actions/tag.php:51 -#, fuzzy msgid "No such page" -msgstr "Inget sÃ¥dant meddelande." +msgstr "Ingen sÃ¥dan sida" #: actions/all.php:74 actions/allrss.php:68 #: actions/apiaccountupdatedeliverydevice.php:113 @@ -48,39 +48,39 @@ msgstr "Inget sÃ¥dant meddelande." #: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77 #: lib/subs.php:34 lib/subs.php:116 msgid "No such user." -msgstr "Ingen sÃ¥dan användare" +msgstr "Ingen sÃ¥dan användare." #: actions/all.php:84 -#, fuzzy, php-format +#, php-format msgid "%s and friends, page %d" -msgstr "%s med vänner" +msgstr "%s och vänner, sida %d" #: actions/all.php:86 actions/all.php:167 actions/allrss.php:115 #: actions/apitimelinefriends.php:114 lib/personalgroupnav.php:100 #, php-format msgid "%s and friends" -msgstr "%s med vänner" +msgstr "%s och vänner" #: actions/all.php:99 -#, fuzzy, php-format +#, php-format msgid "Feed for friends of %s (RSS 1.0)" -msgstr "Flöden för $s vänner" +msgstr "Flöden för %ss vänner (RSS 1.0)" #: actions/all.php:107 -#, fuzzy, php-format +#, php-format msgid "Feed for friends of %s (RSS 2.0)" -msgstr "Flöden för $s vänner" +msgstr "Flöden för %ss vänner (RSS 2.0)" #: actions/all.php:115 -#, fuzzy, php-format +#, php-format msgid "Feed for friends of %s (Atom)" -msgstr "Flöden för $s vänner" +msgstr "Flöden för %ss vänner (Atom)" #: actions/all.php:127 #, php-format msgid "" "This is the timeline for %s and friends but no one has posted anything yet." -msgstr "" +msgstr "Detta är tidslinjen för %s och vänner men ingen har postat nÃ¥got än." #: actions/all.php:132 #, php-format @@ -88,6 +88,8 @@ msgid "" "Try subscribing to more people, [join a group](%%action.groups%%) or post " "something yourself." msgstr "" +"Prova att prenumerera pÃ¥ fler personer, [gÃ¥ med i en grupp](%%action.groups%" +"%) eller posta nÃ¥got själv." #: actions/all.php:134 #, php-format @@ -95,6 +97,9 @@ msgid "" "You can try to [nudge %s](../%s) from his profile or [post something to his " "or her attention](%%%%action.newnotice%%%%?status_textarea=%s)." msgstr "" +"Du kan prova att [knuffa %s](../%s) frÃ¥n dennes profil eller [posta " +"nÃ¥gonting för hans eller hennes uppmärksamhet](%%%%action.newnotice%%%%?" +"status_textarea=%s)." #: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202 #, php-format @@ -102,11 +107,12 @@ msgid "" "Why not [register an account](%%%%action.register%%%%) and then nudge %s or " "post a notice to his or her attention." msgstr "" +"Varför inte [registrera ett konto](%%%%action.register%%%%) och sedan knuffa " +"%s eller posta en notis för hans eller hennes uppmärksamhet." #: actions/all.php:165 -#, fuzzy msgid "You and friends" -msgstr "%s med vänner" +msgstr "Du och vänner" #: actions/allrss.php:119 actions/apitimelinefriends.php:121 #, php-format @@ -118,9 +124,8 @@ msgstr "Uppdateringar frÃ¥n %1$s och vänner pÃ¥ %2$s!" #: actions/apiaccountupdateprofilebackgroundimage.php:94 #: actions/apiaccountupdateprofilecolors.php:118 #: actions/apiaccountupdateprofile.php:97 -#, fuzzy msgid "API method not found." -msgstr "API-metoden hittades inte!" +msgstr "API-metoden hittades inte" #: actions/apiaccountupdatedeliverydevice.php:85 #: actions/apiaccountupdateprofilebackgroundimage.php:86 @@ -139,10 +144,9 @@ msgstr "Denna metod kräver en POST." msgid "" "You must specify a parameter named 'device' with a value of one of: sms, im, " "none" -msgstr "" +msgstr "Du mÃ¥ste ange ett värdet pÃ¥ parametern 'device': sms, im, none" #: actions/apiaccountupdatedeliverydevice.php:132 -#, fuzzy msgid "Could not update user." msgstr "Kunde inte uppdatera användare." @@ -156,20 +160,20 @@ msgid "" "The server was unable to handle that much POST data (%s bytes) due to its " "current configuration." msgstr "" +"Servern kunde inte hantera sÃ¥ mycket POST-data (%s byte) pÃ¥ grund av sin " +"nuvarande konfiguration." #: actions/apiaccountupdateprofilebackgroundimage.php:136 #: actions/apiaccountupdateprofilebackgroundimage.php:146 #: actions/apiaccountupdateprofilecolors.php:164 #: actions/apiaccountupdateprofilecolors.php:174 -#, fuzzy msgid "Unable to save your design settings." -msgstr "Kunde inte spara dina Twitter inställningar!" +msgstr "Kunde inte spara dina utseendeinställningar." #: actions/apiaccountupdateprofilebackgroundimage.php:187 #: actions/apiaccountupdateprofilecolors.php:142 -#, fuzzy msgid "Could not update your design." -msgstr "Kunde inte uppdatera användare." +msgstr "Kunde inte uppdatera din profils utseende." #: actions/apiaccountupdateprofilebackgroundimage.php:194 #: actions/apiaccountupdateprofilecolors.php:185 @@ -181,45 +185,47 @@ msgid "User has no profile." msgstr "Användaren har ingen profil." #: actions/apiaccountupdateprofile.php:147 -#, fuzzy msgid "Could not save profile." msgstr "Kunde inte spara profil." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +msgid "You cannot block yourself!" +msgstr "Du kan inte blockera dig själv!" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." -msgstr "" +msgstr "Blockering av användare misslyckades." #: actions/apiblockdestroy.php:107 msgid "Unblock user failed." -msgstr "" +msgstr "Hävning av blockering av användare misslyckades." #: actions/apidirectmessagenew.php:126 msgid "No message text!" -msgstr "Ingen meddelande text!" +msgstr "Ingen meddelandetext!" #: actions/apidirectmessagenew.php:135 actions/newmessage.php:150 -#, fuzzy, php-format +#, php-format msgid "That's too long. Max message size is %d chars." -msgstr "Det är för lÃ¥ngt. Max är 140 tecken. " +msgstr "Detta är för lÃ¥ngt. Maximal meddelandestorlek är %d tecken." #: actions/apidirectmessagenew.php:146 msgid "Recipient user not found." -msgstr "Mottagaren kunde inte hittas." +msgstr "Mottagare hittades inte." #: actions/apidirectmessagenew.php:150 msgid "Can't send direct messages to users who aren't your friend." -msgstr "" -"Kan inte skicka direktmeddelanden till användare som inte är dina vänner." +msgstr "Kan inte skicka direktmeddelanden till användare som inte är din vän." #: actions/apidirectmessage.php:89 -#, fuzzy, php-format +#, php-format msgid "Direct messages from %s" -msgstr "Direktmeddelande till %s" +msgstr "Direktmeddelande frÃ¥n %s" #: actions/apidirectmessage.php:93 #, php-format msgid "All the direct messages sent from %s" -msgstr "Alla direktmeddelanden skickade ifrÃ¥n %s" +msgstr "Alla direktmeddelanden skickade frÃ¥n %s" #: actions/apidirectmessage.php:101 #, php-format @@ -251,57 +257,52 @@ msgstr "API-metoden hittades inte!" #: actions/apifavoritecreate.php:108 actions/apifavoritedestroy.php:109 #: actions/apistatusesdestroy.php:113 msgid "No status found with that ID." -msgstr "Ingen status hittad med det ID" +msgstr "Ingen status hittad med det ID:t." #: actions/apifavoritecreate.php:119 -#, fuzzy msgid "This status is already a favorite!" -msgstr "Detta inlägg är redan en favorit!" +msgstr "Denna status är redan en favorit!" #: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176 msgid "Could not create favorite." msgstr "Kunde inte skapa favorit." #: actions/apifavoritedestroy.php:122 -#, fuzzy msgid "That status is not a favorite!" -msgstr "Det inlägget är ingen favorit!" +msgstr "Denna status är inte en favorit!" #: actions/apifavoritedestroy.php:134 actions/disfavor.php:87 msgid "Could not delete favorite." -msgstr "Kunde inte tabort favoriten." +msgstr "Kunde inte ta bort favoriten." #: actions/apifriendshipscreate.php:109 msgid "Could not follow user: User not found." -msgstr "Kunde inte följa användaren: Användaren kunde inte hittas." +msgstr "Kunde inte följa användare: användare hittades inte." #: actions/apifriendshipscreate.php:118 #, php-format msgid "Could not follow user: %s is already on your list." -msgstr "Kunde inte följa användaren: %s finns redan i din lista." +msgstr "Kunde inte följa användare: %s finns redan i din lista." #: actions/apifriendshipsdestroy.php:109 -#, fuzzy msgid "Could not unfollow user: User not found." -msgstr "Kunde inte följa användaren: Användaren kunde inte hittas." +msgstr "Kunde inte sluta följa användaren: användaren hittades inte." #: actions/apifriendshipsdestroy.php:120 msgid "You cannot unfollow yourself!" -msgstr "" +msgstr "Du kan inte sluta följa dig själv!" #: actions/apifriendshipsexists.php:94 msgid "Two user ids or screen_names must be supplied." -msgstr "TvÃ¥ användarid eller namn mÃ¥ste läggas till." +msgstr "TvÃ¥ användar-ID:n eller screen_names mÃ¥ste tillhandahÃ¥llas." #: actions/apifriendshipsshow.php:135 -#, fuzzy msgid "Could not determine source user." -msgstr "Kunde inte ta emot favoritinläggen." +msgstr "" #: actions/apifriendshipsshow.php:143 -#, fuzzy msgid "Could not find target user." -msgstr "Kunde inte fÃ¥ fram status." +msgstr "" #: actions/apigroupcreate.php:164 actions/editgroup.php:182 #: actions/newgroup.php:126 actions/profilesettings.php:208 @@ -314,133 +315,129 @@ msgstr "" #: actions/newgroup.php:130 actions/profilesettings.php:231 #: actions/register.php:208 msgid "Nickname already in use. Try another one." -msgstr "Användarnamnet används redan, försök med ett annat." +msgstr "Smeknamnet används redan. Försök med ett annat." #: actions/apigroupcreate.php:180 actions/editgroup.php:189 #: actions/newgroup.php:133 actions/profilesettings.php:211 #: actions/register.php:210 msgid "Not a valid nickname." -msgstr "Det är inget giltigt användarnamn." +msgstr "Inte ett giltigt smeknamn." #: actions/apigroupcreate.php:196 actions/editgroup.php:195 #: actions/newgroup.php:139 actions/profilesettings.php:215 #: actions/register.php:217 msgid "Homepage is not a valid URL." -msgstr "Hemsidan har ingen giltig URL" +msgstr "Hemsida är inte en giltig URL." #: actions/apigroupcreate.php:205 actions/editgroup.php:198 #: actions/newgroup.php:142 actions/profilesettings.php:218 #: actions/register.php:220 msgid "Full name is too long (max 255 chars)." -msgstr "Ditt namn är för lÃ¥ngt (max 255 tecken)." +msgstr "Fullständigt namn är för lÃ¥ngt (max 255 tecken)." #: actions/apigroupcreate.php:213 -#, fuzzy, php-format +#, php-format msgid "Description is too long (max %d chars)." -msgstr "Biografin är för lÃ¥ng (max 140 tecken)" +msgstr "Beskrivning är för lÃ¥ng (max 140 tecken)" #: actions/apigroupcreate.php:224 actions/editgroup.php:204 #: actions/newgroup.php:148 actions/profilesettings.php:225 #: actions/register.php:227 msgid "Location is too long (max 255 chars)." -msgstr "Platse är för lÃ¥ng (max 255 tecken)." +msgstr "Beskrivning av plats är för lÃ¥ng (max 255 tecken)." #: actions/apigroupcreate.php:243 actions/editgroup.php:215 #: actions/newgroup.php:159 #, php-format msgid "Too many aliases! Maximum %d." -msgstr "" +msgstr "För mÃ¥nga alias! Maximum %d." #: actions/apigroupcreate.php:264 actions/editgroup.php:224 #: actions/newgroup.php:168 -#, fuzzy, php-format +#, php-format msgid "Invalid alias: \"%s\"" -msgstr "Ogiltig hemsideadress '%s'" +msgstr "Ogiltigt alias: \"%s\"" #: actions/apigroupcreate.php:273 actions/editgroup.php:228 #: actions/newgroup.php:172 -#, fuzzy, php-format +#, php-format msgid "Alias \"%s\" already in use. Try another one." -msgstr "Användarnamnet används redan, försök med ett annat." +msgstr "Alias \"%s\" används redan. Försök med ett annat." #: actions/apigroupcreate.php:286 actions/editgroup.php:234 #: actions/newgroup.php:178 msgid "Alias can't be the same as nickname." -msgstr "" +msgstr "Alias kan inte vara samma som smeknamn." #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 -#, fuzzy msgid "Group not found!" -msgstr "API-metoden hittades inte!" +msgstr "Grupp hittades inte!" #: actions/apigroupjoin.php:110 -#, fuzzy msgid "You are already a member of that group." -msgstr "Du prenumererar redan pÃ¥ dessa användare:" +msgstr "Du är redan en medlem i denna grupp." #: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221 msgid "You have been blocked from that group by the admin." -msgstr "" +msgstr "Du har blivit blockerad frÃ¥n denna grupp av administratören." #: actions/apigroupjoin.php:138 -#, fuzzy, php-format +#, php-format msgid "Could not join user %s to group %s." -msgstr "Kunde inte följa användaren: Användaren kunde inte hittas." +msgstr "Kunde inte ansluta användare % till grupp %s." #: actions/apigroupleave.php:114 -#, fuzzy msgid "You are not a member of this group." -msgstr "Du skickade inte oss den profilen" +msgstr "Du är inte en medlem i denna grupp." #: actions/apigroupleave.php:124 -#, fuzzy, php-format +#, php-format msgid "Could not remove user %s to group %s." -msgstr "Kunde inte följa användaren: Användaren kunde inte hittas." +msgstr "Kunde inte ta bort användare %s frÃ¥n grupp %s." #: actions/apigrouplistall.php:90 actions/usergroups.php:62 #, php-format msgid "%s groups" -msgstr "" +msgstr "%s grupper" #: actions/apigrouplistall.php:94 -#, fuzzy, php-format +#, php-format msgid "groups on %s" -msgstr "Sök personer pÃ¥ denna sida" +msgstr "grupper pÃ¥ %s" #: actions/apigrouplist.php:95 -#, fuzzy, php-format +#, php-format msgid "%s's groups" -msgstr "%s / Favoriter frÃ¥n %s" +msgstr "%ss grupper" #: actions/apigrouplist.php:103 -#, fuzzy, php-format +#, php-format msgid "Groups %s is a member of on %s." -msgstr "Du skickade inte oss den profilen" +msgstr "Grupper %s är en medlem i pÃ¥ %s." #: actions/apistatusesdestroy.php:107 msgid "This method requires a POST or DELETE." -msgstr "Denna metod kräver antingen skicka eller tabort." +msgstr "Denna metod kräver en POST eller en DELETE." #: actions/apistatusesdestroy.php:130 msgid "You may not delete another user's status." -msgstr "Du kan inte tabort nÃ¥n annan användares status." +msgstr "Du kan inte ta bort en annan användares status." #: actions/apistatusesshow.php:138 -#, fuzzy msgid "Status deleted." -msgstr "Användarbilden uppdaterad." +msgstr "Status borttagen." #: actions/apistatusesshow.php:144 msgid "No status with that ID found." -msgstr "Ingen status med det ID hittades." +msgstr "Ingen status med det ID:t hittades." #: actions/apistatusesupdate.php:157 actions/newnotice.php:155 #: scripts/maildaemon.php:71 -#, fuzzy, php-format +#, php-format msgid "That's too long. Max notice size is %d chars." -msgstr "För lÃ¥ngt. Maximalt 140 tecken" +msgstr "Det är för lÃ¥ngt. Maximal notisstorlek är %d tecken." #: actions/apistatusesupdate.php:198 msgid "Not found" @@ -449,12 +446,11 @@ msgstr "Hittades inte" #: actions/apistatusesupdate.php:227 actions/newnotice.php:183 #, php-format msgid "Max notice size is %d chars, including attachment URL." -msgstr "" +msgstr "Maximal notisstorlek är %d tecken, inklusive bilage-URL." #: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261 -#, fuzzy msgid "Unsupported format." -msgstr "Bildfilens format stödjs inte." +msgstr "Format som inte stödjs." #: actions/apitimelinefavorites.php:107 #, php-format @@ -464,7 +460,7 @@ msgstr "%s / Favoriter frÃ¥n %s" #: actions/apitimelinefavorites.php:119 #, php-format msgid "%s updates favorited by %s / %s." -msgstr "%s uppdaterade favoriter av %s / %s." +msgstr "%s uppdateringar markerade som favorit av %s / %s." #: actions/apitimelinegroup.php:108 actions/apitimelineuser.php:117 #: actions/grouprss.php:131 actions/userrss.php:90 @@ -479,14 +475,14 @@ msgid "Updates from %1$s on %2$s!" msgstr "Uppdateringar frÃ¥n %1$s pÃ¥ %2$s!" #: actions/apitimelinementions.php:116 -#, fuzzy, php-format +#, php-format msgid "%1$s / Updates mentioning %2$s" -msgstr "%1$s / Uppdateringar med svar till %2$s" +msgstr "%1$s / Uppdateringar som nämner %2$s" #: actions/apitimelinementions.php:126 #, php-format msgid "%1$s updates that reply to updates from %2$s / %3$s." -msgstr "%1$s uppdateringar med svar till uppdatering frÃ¥n %2$s / %3$s." +msgstr "%1$s uppdateringar med svar pÃ¥ uppdatering frÃ¥n %2$s / %3$s." #: actions/apitimelinepublic.php:106 actions/publicrss.php:103 #, php-format @@ -496,49 +492,48 @@ msgstr "%s publika tidslinje" #: actions/apitimelinepublic.php:110 actions/publicrss.php:105 #, php-format msgid "%s updates from everyone!" -msgstr "%s uppdateringar ifrÃ¥n allihop!" +msgstr "%s uppdateringar frÃ¥n alla!" #: actions/apitimelinetag.php:101 actions/tag.php:66 #, php-format msgid "Notices tagged with %s" -msgstr "Inlägg taggade med %s" +msgstr "Notiser taggade med %s" #: actions/apitimelinetag.php:107 actions/tagrss.php:64 -#, fuzzy, php-format +#, php-format msgid "Updates tagged with %1$s on %2$s!" -msgstr "Uppdateringar frÃ¥n %1$s pÃ¥ %2$s!" +msgstr "Uppdateringar taggade med %1$s pÃ¥ %2$s!" #: actions/apiusershow.php:96 -#, fuzzy msgid "Not found." -msgstr "Hittades inte" +msgstr "Hittades inte." #: actions/attachment.php:73 -#, fuzzy msgid "No such attachment." -msgstr "Inget sÃ¥dant dokument." +msgstr "Ingen sÃ¥dan bilaga." #: actions/avatarbynickname.php:59 actions/leavegroup.php:76 msgid "No nickname." -msgstr "Inget användarnamn" +msgstr "Inget smeknamn." #: actions/avatarbynickname.php:64 msgid "No size." -msgstr "Ingen storlek" +msgstr "Ingen storlek." #: actions/avatarbynickname.php:69 msgid "Invalid size." -msgstr "Felaktig storlek" +msgstr "Ogiltig storlek." #: actions/avatarsettings.php:67 actions/showgroup.php:221 #: lib/accountsettingsaction.php:112 msgid "Avatar" -msgstr "Användarbild" +msgstr "Avatar" #: actions/avatarsettings.php:78 -#, fuzzy, php-format +#, php-format msgid "You can upload your personal avatar. The maximum file size is %s." -msgstr "Du kan uppdatera din personliga profil här" +msgstr "" +"Du kan ladda upp din personliga avatar. Den maximala filstorleken är %s." #: actions/avatarsettings.php:106 actions/avatarsettings.php:182 #: actions/grouplogo.php:178 actions/remotesubscribe.php:191 @@ -548,23 +543,21 @@ msgstr "Användare utan matchande profil" #: actions/avatarsettings.php:119 actions/avatarsettings.php:194 #: actions/grouplogo.php:251 -#, fuzzy msgid "Avatar settings" -msgstr "Twitter inställningar" +msgstr "Avatarinställningar" #: actions/avatarsettings.php:126 actions/avatarsettings.php:202 #: actions/grouplogo.php:199 actions/grouplogo.php:259 msgid "Original" -msgstr "" +msgstr "Orginal" #: actions/avatarsettings.php:141 actions/avatarsettings.php:214 #: actions/grouplogo.php:210 actions/grouplogo.php:271 msgid "Preview" -msgstr "" +msgstr "Förhandsgranska" #: actions/avatarsettings.php:148 lib/deleteuserform.php:66 #: lib/noticelist.php:550 -#, fuzzy msgid "Delete" msgstr "Ta bort" @@ -574,13 +567,13 @@ msgstr "Ladda upp" #: actions/avatarsettings.php:228 actions/grouplogo.php:286 msgid "Crop" -msgstr "" +msgstr "Beskär" #: actions/avatarsettings.php:265 actions/disfavor.php:74 #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -589,89 +582,83 @@ msgstr "" #: actions/tagother.php:166 actions/unsubscribe.php:69 #: actions/userauthorization.php:52 lib/designsettings.php:294 msgid "There was a problem with your session token. Try again, please." -msgstr "Det var nÃ¥got problem med din session. Försök igen, tack." +msgstr "Det var ett problem med din sessions-token. Var vänlig försök igen." #: actions/avatarsettings.php:277 actions/designadminpanel.php:103 #: actions/emailsettings.php:256 actions/grouplogo.php:319 #: actions/imsettings.php:220 actions/recoverpassword.php:44 #: actions/smssettings.php:248 lib/designsettings.php:304 msgid "Unexpected form submission." -msgstr "Oväntat utskick av formuläret." +msgstr "Oväntat inskick av formulär." #: actions/avatarsettings.php:322 msgid "Pick a square area of the image to be your avatar" -msgstr "" +msgstr "Välj ett kvadratiskt omrÃ¥de i bilden som din avatar" #: actions/avatarsettings.php:337 actions/grouplogo.php:377 msgid "Lost our file data." -msgstr "" +msgstr "Förlorade vÃ¥r fildata." #: actions/avatarsettings.php:360 msgid "Avatar updated." -msgstr "Användarbilden uppdaterad." +msgstr "Avatar uppdaterad." #: actions/avatarsettings.php:363 msgid "Failed updating avatar." -msgstr "Uppdatering av profilbild misslyckades." +msgstr "Misslyckades uppdatera avatar." #: actions/avatarsettings.php:387 -#, fuzzy msgid "Avatar deleted." -msgstr "Användarbilden uppdaterad." +msgstr "Avatar borttagen." #: actions/blockedfromgroup.php:73 actions/editgroup.php:84 #: actions/groupdesignsettings.php:84 actions/grouplogo.php:86 #: actions/groupmembers.php:76 actions/grouprss.php:91 #: actions/joingroup.php:76 actions/showgroup.php:121 -#, fuzzy msgid "No nickname" -msgstr "Inget användarnamn" +msgstr "Inget smeknamn" #: actions/blockedfromgroup.php:80 actions/editgroup.php:96 #: actions/groupbyid.php:83 actions/groupdesignsettings.php:97 #: actions/grouplogo.php:99 actions/groupmembers.php:83 #: actions/grouprss.php:98 actions/joingroup.php:83 actions/showgroup.php:137 -#, fuzzy msgid "No such group" -msgstr "Ingen sÃ¥dan användare" +msgstr "Ingen sÃ¥dan grupp" #: actions/blockedfromgroup.php:90 -#, fuzzy, php-format +#, php-format msgid "%s blocked profiles" -msgstr "Användaren har ingen profil." +msgstr "%s blockerade profiler" #: actions/blockedfromgroup.php:93 -#, fuzzy, php-format +#, php-format msgid "%s blocked profiles, page %d" -msgstr "%s med vänner" +msgstr "%s blockerade profiler, sida %d" #: actions/blockedfromgroup.php:108 msgid "A list of the users blocked from joining this group." msgstr "" +"En lista med de användare som blockerats frÃ¥n att gÃ¥ med i denna grupp." #: actions/blockedfromgroup.php:281 -#, fuzzy msgid "Unblock user from group" -msgstr "Ingen sÃ¥dan användare" +msgstr "Häv blockering av användare frÃ¥n grupp" #: actions/blockedfromgroup.php:313 lib/unblockform.php:69 msgid "Unblock" -msgstr "" +msgstr "Häv blockering" #: actions/blockedfromgroup.php:313 lib/unblockform.php:80 -#, fuzzy msgid "Unblock this user" -msgstr "Ingen sÃ¥dan användare" +msgstr "Häv blockering av denna användare" #: actions/block.php:69 -#, fuzzy msgid "You already blocked that user." -msgstr "Du prenumererar redan pÃ¥ dessa användare:" +msgstr "Du har redan blockerat denna användare." #: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160 -#, fuzzy msgid "Block user" -msgstr "Ingen sÃ¥dan användare" +msgstr "Blockera användare" #: actions/block.php:130 msgid "" @@ -679,6 +666,9 @@ msgid "" "unsubscribed from you, unable to subscribe to you in the future, and you " "will not be notified of any @-replies from them." msgstr "" +"Är du säker pÃ¥ att du vill blockera denna användare? EfterÃ¥t kommer deras " +"prenumeration pÃ¥ dig tas bort, de kommer inte kunna prenumerera pÃ¥ dig i " +"framtiden och du kommer inte bli underrättad om nÃ¥gra @-svar frÃ¥n dem." #: actions/block.php:143 actions/deletenotice.php:145 #: actions/deleteuser.php:147 actions/groupblock.php:178 @@ -686,9 +676,8 @@ msgid "No" msgstr "Nej" #: actions/block.php:143 actions/deleteuser.php:147 -#, fuzzy msgid "Do not block this user" -msgstr "Ingen sÃ¥dan användare" +msgstr "Blockera inte denna användare" #: actions/block.php:144 actions/deletenotice.php:146 #: actions/deleteuser.php:148 actions/groupblock.php:179 @@ -696,17 +685,16 @@ msgid "Yes" msgstr "Ja" #: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80 -#, fuzzy msgid "Block this user" -msgstr "Ingen sÃ¥dan användare" +msgstr "Blockera denna användare" #: actions/block.php:162 msgid "Failed to save block information." -msgstr "" +msgstr "Misslyckades att spara blockeringsinformation." #: actions/bookmarklet.php:50 msgid "Post to " -msgstr "" +msgstr "Posta till " #: actions/confirmaddress.php:75 msgid "No confirmation code." @@ -714,20 +702,20 @@ msgstr "Ingen bekräftelsekod." #: actions/confirmaddress.php:80 msgid "Confirmation code not found." -msgstr "Bekräftelsekoden kunde inte hittas." +msgstr "Bekräftelsekod kunde inte hittas." #: actions/confirmaddress.php:85 msgid "That confirmation code is not for you!" -msgstr "Den bekräftelsekoden är inte för dig!" +msgstr "Denna bekräftelsekod är inte för dig!" #: actions/confirmaddress.php:90 #, php-format msgid "Unrecognized address type %s" -msgstr "Adresstypen känns inte igen %s" +msgstr "Adresstypen %s känns inte igen" #: actions/confirmaddress.php:94 msgid "That address has already been confirmed." -msgstr "Den adressen har redan blivit bekräftad en gÃ¥ng." +msgstr "Denna adress har redan blivit bekräftad." #: actions/confirmaddress.php:114 actions/emailsettings.php:296 #: actions/emailsettings.php:427 actions/imsettings.php:258 @@ -740,7 +728,7 @@ msgstr "Kunde inte uppdatera användare." #: actions/confirmaddress.php:126 actions/emailsettings.php:391 #: actions/imsettings.php:363 actions/smssettings.php:382 msgid "Couldn't delete email confirmation." -msgstr "Kunde inte radera epost bekräftelsen." +msgstr "Kunde inte ta bort e-postbekräftelse." #: actions/confirmaddress.php:144 msgid "Confirm Address" @@ -752,18 +740,17 @@ msgid "The address \"%s\" has been confirmed for your account." msgstr "Adressen \"%s\" har blivit bekräftad för ditt konto." #: actions/conversation.php:99 -#, fuzzy msgid "Conversation" -msgstr "Bekräftelsekod" +msgstr "Konversationer" #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87 #: lib/profileaction.php:216 lib/searchgroupnav.php:82 msgid "Notices" -msgstr "Inlägg" +msgstr "Notiser" #: actions/deletenotice.php:52 actions/shownotice.php:92 msgid "No such notice." -msgstr "Inget sÃ¥dant inlägg." +msgstr "Ingen sÃ¥dan notis." #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69 @@ -776,178 +763,165 @@ msgstr "Inte inloggad." #: actions/deletenotice.php:71 msgid "Can't delete this notice." -msgstr "Kan inte ta bort detta inlägg." +msgstr "Kan inte ta bort denna notis." #: actions/deletenotice.php:103 -#, fuzzy msgid "" "You are about to permanently delete a notice. Once this is done, it cannot " "be undone." msgstr "" -"Du hÃ¥ller pÃ¥ att tabort inlägget permanent. När det väl är gjort kan du inte " -"Ã¥ngra dig." +"Du hÃ¥ller pÃ¥ att ta bort en notis permanent. När det väl är gjort kan du " +"inte Ã¥ngra dig." #: actions/deletenotice.php:109 actions/deletenotice.php:141 msgid "Delete notice" -msgstr "Tabort inlägg" +msgstr "Ta bort notis" #: actions/deletenotice.php:144 msgid "Are you sure you want to delete this notice?" -msgstr "Är du säker pÃ¥ att du vill tabort detta inlägg?" +msgstr "Är du säker pÃ¥ att du vill ta bort denna notis?" #: actions/deletenotice.php:145 -#, fuzzy msgid "Do not delete this notice" -msgstr "Kan inte ta bort detta inlägg." +msgstr "Ta inte bort denna notis" #: actions/deletenotice.php:146 lib/noticelist.php:550 -#, fuzzy msgid "Delete this notice" -msgstr "Ta bort inlägg" +msgstr "Ta bort denna notis" #: actions/deletenotice.php:157 -#, fuzzy msgid "There was a problem with your session token. Try again, please." -msgstr "Det var nÃ¥got problem med din session. Försök igen, tack." +msgstr "Det var nÃ¥got problem med din sessions-token. Var vänlig försök igen." #: actions/deleteuser.php:67 -#, fuzzy msgid "You cannot delete users." -msgstr "Kunde inte uppdatera användare." +msgstr "Du kan inte ta bort användare." #: actions/deleteuser.php:74 -#, fuzzy msgid "You can only delete local users." -msgstr "Du kan inte tabort nÃ¥n annan användares status." +msgstr "Du kan bara ta bort lokala användare." #: actions/deleteuser.php:110 actions/deleteuser.php:133 -#, fuzzy msgid "Delete user" -msgstr "Ta bort" +msgstr "Ta bort användare" #: actions/deleteuser.php:135 msgid "" "Are you sure you want to delete this user? This will clear all data about " "the user from the database, without a backup." msgstr "" +"Är du säker pÃ¥ att du vill ta bort denna användare? Det kommer rensa all " +"data om användaren frÃ¥n databasen, utan en säkerhetskopia." #: actions/deleteuser.php:148 lib/deleteuserform.php:77 -#, fuzzy msgid "Delete this user" -msgstr "Ta bort inlägg" +msgstr "Ta bort denna användare" #: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124 #: lib/adminpanelaction.php:302 lib/groupnav.php:119 msgid "Design" -msgstr "" +msgstr "Utseende" #: actions/designadminpanel.php:73 msgid "Design settings for this StatusNet site." -msgstr "" +msgstr "Utseendeinställningar för denna StatusNet-webbplats." -#: actions/designadminpanel.php:270 -#, fuzzy +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." -msgstr "Felaktig storlek" +msgstr "Ogiltig logtyp-URL." -#: actions/designadminpanel.php:274 -#, fuzzy, php-format +#: actions/designadminpanel.php:279 +#, php-format msgid "Theme not available: %s" -msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat" +msgstr "Tema inte tillgängligt: %s" -#: actions/designadminpanel.php:370 -#, fuzzy +#: actions/designadminpanel.php:375 msgid "Change logo" -msgstr "Ändra ditt lösenord" +msgstr "Byt logotyp" -#: actions/designadminpanel.php:375 -#, fuzzy +#: actions/designadminpanel.php:380 msgid "Site logo" -msgstr "Bjud in" +msgstr "Webbplatslogotyp" -#: actions/designadminpanel.php:382 -#, fuzzy +#: actions/designadminpanel.php:387 msgid "Change theme" -msgstr "Ändra" +msgstr "Byt tema" -#: actions/designadminpanel.php:399 -#, fuzzy +#: actions/designadminpanel.php:404 msgid "Site theme" -msgstr "Nytt inlägg" +msgstr "Webbplatstema" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." -msgstr "" +msgstr "Tema för webbplatsen." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" -msgstr "" +msgstr "Ändra bakgrundsbild" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" -msgstr "" +msgstr "Bakgrund" -#: actions/designadminpanel.php:422 -#, fuzzy, php-format +#: actions/designadminpanel.php:427 +#, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." -msgstr "Du kan uppdatera din personliga profil här" +msgstr "" +"Du kan ladda upp en bakgrundsbild för denna webbplats. Den maximala " +"filstorleken är %1$s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" -msgstr "" +msgstr "PÃ¥" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" -msgstr "" +msgstr "Av" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." -msgstr "" +msgstr "Sätt pÃ¥ eller stäng av bakgrundsbild." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" -msgstr "" +msgstr "Upprepa bakgrundsbild" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 -#, fuzzy +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" -msgstr "Ändra ditt lösenord" +msgstr "Byt färger" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 -#, fuzzy +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" -msgstr "Anslut" +msgstr "InnehÃ¥ll" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 -#, fuzzy +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" -msgstr "Sök" +msgstr "Sidofält" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Text" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 -#, fuzzy +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" -msgstr "Logga in" +msgstr "Länkar" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" -msgstr "" +msgstr "Använd standardvärden" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" -msgstr "" +msgstr "Ã…terställ standardutseende" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" -msgstr "" +msgstr "Ã…terställ till standardvärde" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -957,18 +931,17 @@ msgstr "" msgid "Save" msgstr "Spara" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" -msgstr "" +msgstr "Spara utseende" #: actions/disfavor.php:81 msgid "This notice is not a favorite!" -msgstr "Det inlägget är ingen favorit!" +msgstr "Denna notis är inte en favorit!" #: actions/disfavor.php:94 -#, fuzzy msgid "Add to favorites" -msgstr "Feed för %s favoriter" +msgstr "Lägg till i favoriter" #: actions/doc.php:69 msgid "No such document." @@ -977,51 +950,46 @@ msgstr "Inget sÃ¥dant dokument." #: actions/editgroup.php:56 #, php-format msgid "Edit %s group" -msgstr "" +msgstr "Redigera %s grupp" #: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65 -#, fuzzy msgid "You must be logged in to create a group." -msgstr "du mÃ¥ste vara inloggad för att kunna bjuda in andra användare till %s" +msgstr "Du mÃ¥ste vara inloggad för att skapa en grupp." #: actions/editgroup.php:103 actions/editgroup.php:168 #: actions/groupdesignsettings.php:104 actions/grouplogo.php:106 -#, fuzzy msgid "You must be an admin to edit the group" -msgstr "du mÃ¥ste vara inloggad för att kunna bjuda in andra användare till %s" +msgstr "Du mÃ¥ste vara inloggad för att redigera gruppen" #: actions/editgroup.php:154 msgid "Use this form to edit the group." -msgstr "" +msgstr "Använd detta formulär för att redigera gruppen." #: actions/editgroup.php:201 actions/newgroup.php:145 -#, fuzzy, php-format +#, php-format msgid "description is too long (max %d chars)." -msgstr "Biografin är för lÃ¥ng (max 140 tecken)" +msgstr "beskrivning är för lÃ¥ng (max %d tecken)." #: actions/editgroup.php:253 -#, fuzzy msgid "Could not update group." -msgstr "Kunde inte uppdatera användare." +msgstr "Kunde inte uppdatera grupp." #: actions/editgroup.php:259 classes/User_group.php:390 -#, fuzzy msgid "Could not create aliases." -msgstr "Kunde inte skapa favorit." +msgstr "Kunde inte skapa alias." #: actions/editgroup.php:269 -#, fuzzy msgid "Options saved." -msgstr "Inställningar sparade." +msgstr "Alternativ sparade." #: actions/emailsettings.php:60 msgid "Email Settings" -msgstr "Email inställningar" +msgstr "E-postinställningar" #: actions/emailsettings.php:71 #, php-format msgid "Manage how you get email from %%site.name%%." -msgstr "Ställ in hur du tar emot email ifrÃ¥n %%site.name%%" +msgstr "Hantera hur du fÃ¥r e-post frÃ¥n %%site.name%%" #: actions/emailsettings.php:100 actions/imsettings.php:100 #: actions/smssettings.php:104 @@ -1030,7 +998,7 @@ msgstr "Adress" #: actions/emailsettings.php:105 msgid "Current confirmed email address." -msgstr "Nuvarande bekräftade emailadress." +msgstr "Aktuell, bekräftad e-postadress." #: actions/emailsettings.php:107 actions/emailsettings.php:140 #: actions/imsettings.php:108 actions/smssettings.php:115 @@ -1043,8 +1011,8 @@ msgid "" "Awaiting confirmation on this address. Check your inbox (and spam box!) for " "a message with further instructions." msgstr "" -"Väntar bekräftelse pÃ¥ denna adress. Kontrollera din inbox (och spamlÃ¥dan!) " -"efter meddelande om vidare instruktioner." +"Väntar bekräftelse av denna adress. Kontrollera din inkorg (och " +"skräppostkorg!) efter ett meddelande med vidare instruktioner." #: actions/emailsettings.php:117 actions/imsettings.php:120 #: actions/smssettings.php:126 @@ -1053,11 +1021,11 @@ msgstr "Avbryt" #: actions/emailsettings.php:121 msgid "Email Address" -msgstr "Emailadress" +msgstr "E-postadress" #: actions/emailsettings.php:123 msgid "Email address, like \"UserName@example.org\"" -msgstr "Emailadress sÃ¥som \"användare@example.org\"" +msgstr "E-postadress, sÃ¥som \"användarnamn@exempel.se\"" #: actions/emailsettings.php:126 actions/imsettings.php:133 #: actions/smssettings.php:145 @@ -1066,15 +1034,16 @@ msgstr "Lägg till" #: actions/emailsettings.php:133 actions/smssettings.php:152 msgid "Incoming email" -msgstr "Inkommande email" +msgstr "Inkommande e-post" #: actions/emailsettings.php:138 actions/smssettings.php:157 msgid "Send email to this address to post new notices." -msgstr "Skicka email till denna adress för att posta ett nya inlägg." +msgstr "Skicka e-post till denna adress för att posta nya notiser." #: actions/emailsettings.php:145 actions/smssettings.php:162 msgid "Make a new email address for posting to; cancels the old one." -msgstr "Skapa en ny emailadress för att posta till, avaktiverar den gamla" +msgstr "" +"Ange en ny e-postadress för att posta till; detta inaktiverar den gamla." #: actions/emailsettings.php:148 actions/smssettings.php:164 msgid "New" @@ -1087,7 +1056,7 @@ msgstr "Inställningar" #: actions/emailsettings.php:158 msgid "Send me notices of new subscriptions through email." -msgstr "Skicka meddelande till mig via email vid nya prenumerationer." +msgstr "Skicka notiser om nya prenumerationer till mig genom e-post." #: actions/emailsettings.php:163 msgid "Send me email when someone adds my notice as a favorite." @@ -1095,24 +1064,23 @@ msgstr "Skicka mig ett email när nÃ¥gon lägger till mitt inlägg som favorit." #: actions/emailsettings.php:169 msgid "Send me email when someone sends me a private message." -msgstr "Skicka mig ett email när nÃ¥gon sänder ett privat meddelande." +msgstr "Skicka mig e-post när nÃ¥gon skickar mig ett privat meddelande." #: actions/emailsettings.php:174 -#, fuzzy msgid "Send me email when someone sends me an \"@-reply\"." -msgstr "Skicka mig ett email när nÃ¥gon sänder ett privat meddelande." +msgstr "Skicka mig e-post när nÃ¥gon skickar ett \"@-svar\"." #: actions/emailsettings.php:179 msgid "Allow friends to nudge me and send me an email." -msgstr "" +msgstr "TillÃ¥t vänner att knuffa mig och skicka e-post till mig." #: actions/emailsettings.php:185 msgid "I want to post notices by email." -msgstr "Jag vill posta inlägg via min email." +msgstr "Jag vill posta notiser genom min e-post." #: actions/emailsettings.php:191 msgid "Publish a MicroID for my email address." -msgstr "Publicera ett MicroID för min emailadress." +msgstr "Publicera ett MicroID för min e-postadress." #: actions/emailsettings.php:302 actions/imsettings.php:264 #: actions/othersettings.php:180 actions/smssettings.php:284 @@ -1121,37 +1089,37 @@ msgstr "Inställningar sparade." #: actions/emailsettings.php:320 msgid "No email address." -msgstr "Ingen emailadress." +msgstr "Ingen e-postadress." #: actions/emailsettings.php:327 msgid "Cannot normalize that email address" -msgstr "Kan inte normalisera den emailadressen" +msgstr "Kan inte normalisera den e-postadressen" #: actions/emailsettings.php:331 actions/siteadminpanel.php:158 msgid "Not a valid email address" -msgstr "Ingen giltig emailadress" +msgstr "Inte en giltig e-postadress" #: actions/emailsettings.php:334 msgid "That is already your email address." -msgstr "Det är redan din emailadress." +msgstr "Detta är redan din e-postadress." #: actions/emailsettings.php:337 msgid "That email address already belongs to another user." -msgstr "Den emailadressen tillhör redan en annan användare." +msgstr "Den e-postadressen tillhör redan en annan användare." #: actions/emailsettings.php:353 actions/imsettings.php:317 #: actions/smssettings.php:337 msgid "Couldn't insert confirmation code." -msgstr "Kunde inte lägga till bekräftelsekoden." +msgstr "Kunde inte infoga bekräftelsekod." #: actions/emailsettings.php:359 msgid "" "A confirmation code was sent to the email address you added. Check your " "inbox (and spam box!) for the code and instructions on how to use it." msgstr "" -"En bekräftelsekod har skickats ut till email adressen du fyllde i. " -"Kontrollera din inbox (och spamlÃ¥dan!) efter kod och instruktioner hur du " -"använder den." +"En bekräftelsekod har skickats till e-postadressen du lade till. Kontrollera " +"din inkorg (och skräppostkorg!) för koden och instruktioner hur du använder " +"den." #: actions/emailsettings.php:379 actions/imsettings.php:351 #: actions/smssettings.php:370 @@ -1160,58 +1128,58 @@ msgstr "Ingen väntande bekräftelse att avbryta." #: actions/emailsettings.php:383 actions/imsettings.php:355 msgid "That is the wrong IM address." -msgstr "Det är fel IM adress." +msgstr "Detta är fel IM-adress." #: actions/emailsettings.php:395 actions/imsettings.php:367 #: actions/smssettings.php:386 msgid "Confirmation cancelled." -msgstr "Verifikation avbruten" +msgstr "Bekräftelse avbruten." #: actions/emailsettings.php:413 msgid "That is not your email address." -msgstr "Det är inte din emailadress." +msgstr "Detta är inte din e-postadress." #: actions/emailsettings.php:432 actions/imsettings.php:408 #: actions/smssettings.php:425 msgid "The address was removed." -msgstr "Adressen är borttagen." +msgstr "Adressen togs bort." #: actions/emailsettings.php:446 actions/smssettings.php:518 msgid "No incoming email address." -msgstr "Ingen inkommande emailadress." +msgstr "Ingen inkommande e-postadress." #: actions/emailsettings.php:456 actions/emailsettings.php:478 #: actions/smssettings.php:528 actions/smssettings.php:552 msgid "Couldn't update user record." -msgstr "Kunde inte uppdatera användarens inställningar." +msgstr "Kunde inte uppdatera användaruppgift." #: actions/emailsettings.php:459 actions/smssettings.php:531 msgid "Incoming email address removed." -msgstr "Inkommande emailadress borttagen." +msgstr "Inkommande e-postadress borttagen." #: actions/emailsettings.php:481 actions/smssettings.php:555 msgid "New incoming email address added." -msgstr "Ny inkommande emailadress inlagd." +msgstr "Ny inkommande e-postadress tillagd." #: actions/favorited.php:65 lib/popularnoticesection.php:88 #: lib/publicgroupnav.php:93 -#, fuzzy msgid "Popular notices" -msgstr "Inget sÃ¥dant inlägg." +msgstr "Populära notiser" #: actions/favorited.php:67 -#, fuzzy, php-format +#, php-format msgid "Popular notices, page %d" -msgstr "Inget sÃ¥dant inlägg." +msgstr "Populära notiser, sida %d" #: actions/favorited.php:79 -#, fuzzy msgid "The most popular notices on the site right now." -msgstr "Visar dom populäraste taggarna ifrÃ¥n den senaste veckan." +msgstr "De mest populära notiserna pÃ¥ webbplatsen just nu." #: actions/favorited.php:150 msgid "Favorite notices appear on this page but no one has favorited one yet." msgstr "" +"Favoritnotiser kommer upp pÃ¥ denna sida, men ingen har markerat nÃ¥gra " +"favoriter än." #: actions/favorited.php:153 msgid "" @@ -1225,26 +1193,27 @@ msgid "" "Why not [register an account](%%action.register%%) and be the first to add a " "notice to your favorites!" msgstr "" +"Varför inte [registrera ett konto](%%action.register%%) och bli först att " +"lägga en notis till dina favoriter!" #: actions/favoritesrss.php:111 actions/showfavorites.php:77 #: lib/personalgroupnav.php:115 #, php-format msgid "%s's favorite notices" -msgstr "" +msgstr "%ss favoritnotiser" #: actions/favoritesrss.php:115 -#, fuzzy, php-format +#, php-format msgid "Updates favored by %1$s on %2$s!" -msgstr "Uppdateringar frÃ¥n %1$s pÃ¥ %2$s!" +msgstr "Uppdateringar markerade som favorit av %1$s pÃ¥ %2$s!" #: actions/favor.php:79 msgid "This notice is already a favorite!" -msgstr "Detta inlägg är redan en favorit!" +msgstr "Denna notis är redan en favorit!" #: actions/favor.php:92 lib/disfavorform.php:140 -#, fuzzy msgid "Disfavor favorite" -msgstr "Avfavorisera" +msgstr "Ta bort märkning som favorit" #: actions/featured.php:69 lib/featureduserssection.php:87 #: lib/publicgroupnav.php:89 @@ -1262,114 +1231,99 @@ msgid "A selection of some of the great users on %s" msgstr "" #: actions/file.php:34 -#, fuzzy msgid "No notice id" -msgstr "Nytt inlägg" +msgstr "Ingen notis-ID" #: actions/file.php:38 -#, fuzzy msgid "No notice" -msgstr "Nytt inlägg" +msgstr "Ingen notis" #: actions/file.php:42 msgid "No attachments" -msgstr "" +msgstr "Inga bilagor" #: actions/file.php:51 msgid "No uploaded attachments" -msgstr "" +msgstr "Inga uppladdade bilagor" #: actions/finishremotesubscribe.php:69 msgid "Not expecting this response!" -msgstr "Väntade mig inte detta svar!" +msgstr "Väntade mig inte denna respons!" #: actions/finishremotesubscribe.php:80 -#, fuzzy msgid "User being listened to does not exist." -msgstr "Användaren som avlyssnas existerar inte." +msgstr "Användaren som lyssnas pÃ¥ existerar inte." #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59 msgid "You can use the local subscription!" -msgstr "Du kan använda lokala prenumerationer!" +msgstr "Du kan använda den lokala prenumerationen!" #: actions/finishremotesubscribe.php:99 msgid "That user has blocked you from subscribing." -msgstr "" +msgstr "Denna användaren har blockerat dig frÃ¥n att prenumerera." #: actions/finishremotesubscribe.php:110 -#, fuzzy msgid "You are not authorized." -msgstr "Inte tillstÃ¥nd ännu." +msgstr "Du har inte tillstÃ¥nd." #: actions/finishremotesubscribe.php:113 -#, fuzzy msgid "Could not convert request token to access token." -msgstr "Kunde inte konvertera förfrÃ¥gan tokens till Access tokens." +msgstr "Kunde inte konvertera förfrÃ¥gnings-token till access-token." #: actions/finishremotesubscribe.php:118 -#, fuzzy msgid "Remote service uses unknown version of OMB protocol." -msgstr "Okänd version av OMB protokollet." +msgstr "Fjärrtjänsten använder en okänd version av OMB-protokollet." #: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306 msgid "Error updating remote profile" -msgstr "Fel uppstog under uppdatering av fjärranvändare" +msgstr "Fel vid uppdatering av fjärrprofil" #: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86 #: actions/groupunblock.php:86 actions/leavegroup.php:83 #: actions/makeadmin.php:86 lib/command.php:212 lib/command.php:263 -#, fuzzy msgid "No such group." -msgstr "Inget sÃ¥dant meddelande." +msgstr "Ingen sÃ¥dan grupp." #: actions/getfile.php:75 -#, fuzzy msgid "No such file." -msgstr "Inget sÃ¥dant inlägg." +msgstr "Ingen sÃ¥dan fil." #: actions/getfile.php:79 -#, fuzzy msgid "Cannot read file." -msgstr "Inget sÃ¥dant inlägg." +msgstr "Kan inte läsa fil." #: actions/groupblock.php:71 actions/groupunblock.php:71 #: actions/makeadmin.php:71 actions/subedit.php:46 #: lib/profileformaction.php:70 -#, fuzzy msgid "No profile specified." -msgstr "Ingen mottagare tillagd." +msgstr "Ingen profil angiven." #: actions/groupblock.php:76 actions/groupunblock.php:76 #: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46 #: lib/profileformaction.php:77 -#, fuzzy msgid "No profile with that ID." -msgstr "Ingen status hittad med det ID" +msgstr "Ingen profil med det ID:t." #: actions/groupblock.php:81 actions/groupunblock.php:81 #: actions/makeadmin.php:81 -#, fuzzy msgid "No group specified." -msgstr "Ingen mottagare tillagd." +msgstr "Ingen grupp angiven." #: actions/groupblock.php:91 msgid "Only an admin can block group members." -msgstr "" +msgstr "Bara en administratör kan blockera gruppmedlemmar." #: actions/groupblock.php:95 -#, fuzzy msgid "User is already blocked from group." -msgstr "Användaren har ingen profil." +msgstr "Användaren är redan blockerad frÃ¥n grupp." #: actions/groupblock.php:100 -#, fuzzy msgid "User is not a member of group." -msgstr "Du skickade inte oss den profilen" +msgstr "Användare är inte en gruppmedlem." #: actions/groupblock.php:136 actions/groupmembers.php:314 -#, fuzzy msgid "Block user from group" -msgstr "Ingen sÃ¥dan användare" +msgstr "Blockera användare frÃ¥n grupp" #: actions/groupblock.php:162 #, php-format @@ -1378,141 +1332,137 @@ msgid "" "be removed from the group, unable to post, and unable to subscribe to the " "group in the future." msgstr "" +"Är du säker pÃ¥ att du vill blockera användare \"%s\" frÃ¥n gruppen \"%s\"? De " +"kommer bli borttagna frÃ¥n gruppen, inte kunna posta och inte kunna " +"prenumerera pÃ¥ gruppen i framtiden." #: actions/groupblock.php:178 -#, fuzzy msgid "Do not block this user from this group" -msgstr "Kunde inte följa användaren: Användaren kunde inte hittas." +msgstr "Blockera inte denna användare frÃ¥n denna grupp" #: actions/groupblock.php:179 -#, fuzzy msgid "Block this user from this group" -msgstr "Ingen sÃ¥dan användare" +msgstr "Blockera denna användare frÃ¥n denna grupp" #: actions/groupblock.php:196 msgid "Database error blocking user from group." -msgstr "" +msgstr "Databasfel vid blockering av användare frÃ¥n grupp." #: actions/groupbyid.php:74 msgid "No ID" -msgstr "" +msgstr "Ingen ID" #: actions/groupdesignsettings.php:68 -#, fuzzy msgid "You must be logged in to edit a group." -msgstr "du mÃ¥ste vara inloggad för att kunna bjuda in andra användare till %s" +msgstr "Du mÃ¥ste vara inloggad för att redigera en grupp." #: actions/groupdesignsettings.php:141 msgid "Group design" -msgstr "" +msgstr "Gruppens utseende" #: actions/groupdesignsettings.php:152 msgid "" "Customize the way your group looks with a background image and a colour " "palette of your choice." msgstr "" +"Anpassa hur din grupp ser ut genom att välja bakgrundbild och färgpalett." -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 -#, fuzzy +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." -msgstr "Kunde inte uppdatera användare." +msgstr "Kunde inte uppdatera dina utseendeinställningar." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 -#, fuzzy msgid "Unable to save your design settings!" -msgstr "Kunde inte spara dina Twitter inställningar!" +msgstr "Kunde inte spara dina utseendeinställningar!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 -#, fuzzy +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." -msgstr "Inställningar sparade." +msgstr "Utseendeinställningar sparade." #: actions/grouplogo.php:139 actions/grouplogo.php:192 msgid "Group logo" -msgstr "" +msgstr "Gruppens logotyp" #: actions/grouplogo.php:150 #, php-format msgid "" "You can upload a logo image for your group. The maximum file size is %s." msgstr "" +"Du kan ladda upp en logotypbild för din grupp. Den maximala filstorleken är %" +"s." #: actions/grouplogo.php:362 msgid "Pick a square area of the image to be the logo." -msgstr "" +msgstr "Välj ett kvadratiskt omrÃ¥de i bilden som logotyp" #: actions/grouplogo.php:396 -#, fuzzy msgid "Logo updated." -msgstr "Användarbilden uppdaterad." +msgstr "Logtyp uppdaterad." #: actions/grouplogo.php:398 -#, fuzzy msgid "Failed updating logo." -msgstr "Uppdatering av profilbild misslyckades." +msgstr "Misslyckades uppdatera logtyp." #: actions/groupmembers.php:93 lib/groupnav.php:92 #, php-format msgid "%s group members" -msgstr "" +msgstr "%s gruppmedlemmar" #: actions/groupmembers.php:96 #, php-format msgid "%s group members, page %d" -msgstr "" +msgstr "%s gruppmedlemmar, sida %d" #: actions/groupmembers.php:111 msgid "A list of the users in this group." -msgstr "" +msgstr "En lista av användarna i denna grupp." #: actions/groupmembers.php:175 lib/action.php:440 lib/groupnav.php:107 msgid "Admin" -msgstr "" +msgstr "Administratör" #: actions/groupmembers.php:346 lib/blockform.php:69 msgid "Block" -msgstr "" +msgstr "Blockera" #: actions/groupmembers.php:441 -#, fuzzy msgid "Make user an admin of the group" -msgstr "du mÃ¥ste vara inloggad för att kunna bjuda in andra användare till %s" +msgstr "Gör användare till en administratör för gruppen" #: actions/groupmembers.php:473 msgid "Make Admin" -msgstr "" +msgstr "Gör till administratör" #: actions/groupmembers.php:473 msgid "Make this user an admin" -msgstr "" +msgstr "Gör denna användare till administratör" #: actions/grouprss.php:133 -#, fuzzy, php-format +#, php-format msgid "Updates from members of %1$s on %2$s!" -msgstr "Uppdateringar frÃ¥n %1$s pÃ¥ %2$s!" +msgstr "Uppdateringar frÃ¥n medlemmar i %1$s pÃ¥ %2$s!" #: actions/groupsearch.php:52 -#, fuzzy, php-format +#, php-format msgid "" "Search for groups on %%site.name%% by their name, location, or description. " "Separate the terms by spaces; they must be 3 characters or more." msgstr "" -"Sök efter personer pÃ¥ %%site.name%% efter deras namn, plats eller intressen. " -"Skilj söktermerna Ã¥t med mellanslag; de mÃ¥ste vara minst tre tecken lÃ¥nga. " +"Sök efter grupper pÃ¥ %%site.name%% efter deras namn, plats eller " +"beskrivning. Skilj söktermerna Ã¥t med mellanslag; de mÃ¥ste vara minst tre " +"tecken lÃ¥nga." #: actions/groupsearch.php:58 -#, fuzzy msgid "Group search" -msgstr "Sökning personer" +msgstr "Gruppsökning" #: actions/groupsearch.php:79 actions/noticesearch.php:117 #: actions/peoplesearch.php:83 -#, fuzzy msgid "No results." -msgstr "Inget resultat" +msgstr "Inga resultat." #: actions/groupsearch.php:82 #, php-format @@ -1520,6 +1470,8 @@ msgid "" "If you can't find the group you're looking for, you can [create it](%%action." "newgroup%%) yourself." msgstr "" +"Om du inte kan hitta gruppen du söker efter kan du [skapa den](%%action." +"newgroup%%) själv." #: actions/groupsearch.php:85 #, php-format @@ -1527,16 +1479,18 @@ msgid "" "Why not [register an account](%%action.register%%) and [create the group](%%" "action.newgroup%%) yourself!" msgstr "" +"Varför inte [registrera ett konto](%%action.register%%) och [skapa gruppen](%" +"%action.newgroup%%) själv!" #: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98 msgid "Groups" -msgstr "" +msgstr "Grupper" #: actions/groups.php:64 #, php-format msgid "Groups, page %d" -msgstr "" +msgstr "Grupper, sida %d" #: actions/groups.php:90 #, php-format @@ -1547,29 +1501,31 @@ msgid "" "for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup" "%%%%)" msgstr "" +"%%%%site.name%%%% grupper lÃ¥ter dig hitta och prata med personer med " +"liknande intressen. Efter att ha gÃ¥tt med i en grupp kan du skicka " +"meddelanden till alla andra medlemmar mha. syntaxen \"!gruppnamn\". Ser du " +"inte nÃ¥gon grupp du gillar? Prova att [söka efter en](%%%%action.groupsearch%" +"%%%) eller [starta din egen!](%%%%action.newgroup%%%%)" #: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122 -#, fuzzy msgid "Create a new group" -msgstr "Skapa ett nytt konto" +msgstr "Skapa en ny grupp" #: actions/groupunblock.php:91 msgid "Only an admin can unblock group members." -msgstr "" +msgstr "Bara en administratör kan häva blockering av gruppmedlemmar." #: actions/groupunblock.php:95 -#, fuzzy msgid "User is not blocked from group." -msgstr "Användaren har ingen profil." +msgstr "Användare är inte blockerad frÃ¥n grupp." #: actions/groupunblock.php:128 actions/unblock.php:77 -#, fuzzy msgid "Error removing the block." -msgstr "Fel uppstog när användaren skulle sparas." +msgstr "Fel vid hävning av blockering." #: actions/imsettings.php:59 msgid "IM Settings" -msgstr "IM inställningar" +msgstr "IM-inställningar" #: actions/imsettings.php:70 #, php-format @@ -1577,13 +1533,12 @@ msgid "" "You can send and receive notices through Jabber/GTalk [instant messages](%%" "doc.im%%). Configure your address and settings below." msgstr "" -"Du kan skicka och ta emot inlägg genom Jabber/GTalk [instant messages](%%doc." -"im%%). Konfigurera din adress och inställningar nedan. " +"Du kan skicka och ta emot notiser genom Jabber/GTalk [snabbmeddelanden](%%" +"doc.im%%). Konfigurera din adress och dina inställningar nedan." #: actions/imsettings.php:89 -#, fuzzy msgid "IM is not available." -msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat" +msgstr "IM är inte tillgänglig." #: actions/imsettings.php:106 msgid "Current confirmed Jabber/GTalk address." @@ -1595,12 +1550,12 @@ msgid "" "Awaiting confirmation on this address. Check your Jabber/GTalk account for a " "message with further instructions. (Did you add %s to your buddy list?)" msgstr "" -"Väntar bekräftelse pÃ¥ denna adress. Kontrollera ditt Jabber/GTalk konto för " -"vidare instruktioner. (La du till %s i din vännerlista?)" +"Väntar bekräftelse av denna adress. Kontrollera ditt Jabber/GTalk-konto för " +"vidare instruktioner. (La du till %s i din kompislista?)" #: actions/imsettings.php:124 msgid "IM Address" -msgstr "IM adress" +msgstr "IM-adress" #: actions/imsettings.php:126 #, php-format @@ -1608,46 +1563,46 @@ msgid "" "Jabber or GTalk address, like \"UserName@example.org\". First, make sure to " "add %s to your buddy list in your IM client or on GTalk." msgstr "" -"Jabber eller GTalk adress liknande \"användare@exempel.se\". Först se till " -"att lägga till %s i din vännerlista i IM klienten eller GTalk." +"Jabber- eller GTalk-adress liknande \"användare@exempel.se\". Se först till " +"att lägga till %s i din kompislista i din IM-klient eller hos GTalk." #: actions/imsettings.php:143 msgid "Send me notices through Jabber/GTalk." -msgstr "Skicka inlägg till mig via Jabber/GTalk." +msgstr "Skicka notiser till mig genom Jabber/GTalk." #: actions/imsettings.php:148 msgid "Post a notice when my Jabber/GTalk status changes." -msgstr "Posta ett inlägg när min Jabber/GTalk status ändras." +msgstr "Posta en notis när min Jabber/GTalk-status ändras." #: actions/imsettings.php:153 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to." msgstr "" -"Skicka svar till mig via Jabber/GTalk frÃ¥n personer som inte jag " +"Skicka svar till mig genom Jabber/GTalk frÃ¥n personer som jag inte " "prenumererar pÃ¥." #: actions/imsettings.php:159 msgid "Publish a MicroID for my Jabber/GTalk address." -msgstr "Publicera ett MicroID för min Jabber/GTalk adress." +msgstr "Publicera ett MicroID för min Jabber/GTalk-adress." #: actions/imsettings.php:285 msgid "No Jabber ID." -msgstr "Inget Jabber ID." +msgstr "Inget Jabber-ID." #: actions/imsettings.php:292 msgid "Cannot normalize that Jabber ID" -msgstr "Kan inte normalisera det Jabber ID" +msgstr "Kan inte normalisera detta Jabber-ID" #: actions/imsettings.php:296 msgid "Not a valid Jabber ID" -msgstr "Det är inget giltigt Jabber ID" +msgstr "Inte ett giltigt Jabber-ID" #: actions/imsettings.php:299 msgid "That is already your Jabber ID." -msgstr "Det är redan din Jabber ID." +msgstr "Detta är redan ditt Jabber-ID" #: actions/imsettings.php:302 msgid "Jabber ID already belongs to another user." -msgstr "Jabber ID används redan utav en annan användare." +msgstr "Jabber-ID:t tillhör redan en annan användare." #: actions/imsettings.php:327 #, php-format @@ -1655,44 +1610,45 @@ msgid "" "A confirmation code was sent to the IM address you added. You must approve %" "s for sending messages to you." msgstr "" -"En bekräftelsekod har skickats till den IM-adress som du angav. Du mÃ¥ste " +"En bekräftelsekod har skickats till den IM-adress du angav. Du mÃ¥ste " "godkänna att %s fÃ¥r skicka meddelanden till dig." #: actions/imsettings.php:387 msgid "That is not your Jabber ID." -msgstr "Det är inte ditt Jabber ID." +msgstr "Detta är inte ditt Jabber-ID." #: actions/inbox.php:59 #, php-format msgid "Inbox for %s - page %d" -msgstr "Inbox för %s - sida %d" +msgstr "Inkorg för %s - sida %d" #: actions/inbox.php:62 #, php-format msgid "Inbox for %s" -msgstr "Inbox för %s" +msgstr "Inkorg för %s" #: actions/inbox.php:115 msgid "This is your inbox, which lists your incoming private messages." -msgstr "Detta är din inbox som innehÃ¥ller dina privata meddelanden." +msgstr "" +"Detta är din inkorg som innehÃ¥ller dina inkommande privata meddelanden." #: actions/invite.php:39 msgid "Invites have been disabled." -msgstr "" +msgstr "Inbjudningar har blivit inaktiverade." #: actions/invite.php:41 #, php-format msgid "You must be logged in to invite other users to use %s" -msgstr "du mÃ¥ste vara inloggad för att kunna bjuda in andra användare till %s" +msgstr "Du mÃ¥ste vara inloggad för att kunna bjuda in andra användare till %s" #: actions/invite.php:72 #, php-format msgid "Invalid email address: %s" -msgstr "Ogiltig emailadress: %s" +msgstr "Ogiltig e-postadress: %s" #: actions/invite.php:110 msgid "Invitation(s) sent" -msgstr "Inbjudan(ar) skickad" +msgstr "Inbjudan(ar) skickad(e)" #: actions/invite.php:112 msgid "Invite new users" @@ -1705,25 +1661,25 @@ msgstr "Du prenumererar redan pÃ¥ dessa användare:" #: actions/invite.php:131 actions/invite.php:139 #, php-format msgid "%s (%s)" -msgstr "%s(%s)" +msgstr "%s (%s)" #: actions/invite.php:136 msgid "" "These people are already users and you were automatically subscribed to them:" msgstr "" -"Dom personerna är redan registrerade användare och du blev nu automatiskt " -"prenumerant till dom:" +"Dessa personer är redan registrerade användare och du blev automatiskt " +"prenumerat hos dem:" #: actions/invite.php:144 msgid "Invitation(s) sent to the following people:" -msgstr "Inbjudan(ar) är skickade till följande personer:" +msgstr "Inbjudning(ar) har skickats till följande personer:" #: actions/invite.php:150 msgid "" "You will be notified when your invitees accept the invitation and register " "on the site. Thanks for growing the community!" msgstr "" -"du kommer bli meddelad när nÃ¥gon du bjudit in accepterar inbjudan och " +"Du kommer bli meddelad när nÃ¥gon du bjudit in accepterar inbjudan och " "registrerar sig. Tack för att du hjälper oss växa!" #: actions/invite.php:162 @@ -1731,11 +1687,11 @@ msgid "" "Use this form to invite your friends and colleagues to use this service." msgstr "" "Använd detta formulär för att bjuda in dina vänner och kollegor till denna " -"sida." +"webbplats." #: actions/invite.php:187 msgid "Email addresses" -msgstr "Emailadresser" +msgstr "E-postadresser" #: actions/invite.php:189 msgid "Addresses of friends to invite (one per line)" @@ -1747,16 +1703,16 @@ msgstr "Personligt meddelande" #: actions/invite.php:194 msgid "Optionally add a personal message to the invitation." -msgstr "Om du vill, skriv ett personligt meddelande med inbjudan." +msgstr "Om du vill, skriv ett personligt meddelande till inbjudan." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Skicka" #: actions/invite.php:226 #, php-format msgid "%1$s has invited you to join them on %2$s" -msgstr "%1$s har bjudit in dig till %2$s" +msgstr "%1$s har bjudit in dig att gÃ¥ med dem pÃ¥ %2$s" #: actions/invite.php:228 #, php-format @@ -1788,92 +1744,62 @@ msgid "" "\n" "Sincerely, %2$s\n" msgstr "" -"%1$s har bjudit in dig till %2$s (%3$s).\n" -"\n" -"%2$s är en mikroblogg service som lÃ¥ter dig via sidan hÃ¥lla direktkontakt " -"med människor du känner eller intresserar dig.\n" -"\n" -"Du kan även dela med dig utav nyheter om dig själv, dina tankar, eller ditt " -"liv online som känner igen dig. Det är ocksÃ¥ perfekt för att möta nya " -"personer som delar ditt intresse.\n" -"\n" -"%1$s sa:\n" -"\n" -"%4$s\n" -"\n" -"Du kan se %1$s's profilsida pÃ¥ %2$s här:\n" -"\n" -"%5$s\n" -"\n" -"Om du vill prova pÃ¥ denna service, klicka pÃ¥ länken nedan för att acceptera " -"denna inbjudan.\n" -"\n" -"%6$s\n" -"\n" -"Om inte, dÃ¥ kan du ignorera detta meddelande. Tack för att du tog dig\n" #: actions/joingroup.php:60 -#, fuzzy msgid "You must be logged in to join a group." -msgstr "du mÃ¥ste vara inloggad för att kunna bjuda in andra användare till %s" +msgstr "Du mÃ¥ste vara inloggad för att kunna gÃ¥ med i en grupp." #: actions/joingroup.php:90 lib/command.php:217 -#, fuzzy msgid "You are already a member of that group" -msgstr "Du prenumererar redan pÃ¥ dessa användare:" +msgstr "Du är redan en medlem i denna grupp" #: actions/joingroup.php:128 lib/command.php:234 -#, fuzzy, php-format +#, php-format msgid "Could not join user %s to group %s" -msgstr "Kunde inte följa användaren: Användaren kunde inte hittas." +msgstr "Kunde inte ansluta användare %s till groupp %s" #: actions/joingroup.php:135 lib/command.php:239 -#, fuzzy, php-format +#, php-format msgid "%s joined group %s" -msgstr "%s / Favoriter frÃ¥n %s" +msgstr "%s gick med i grupp %s" #: actions/leavegroup.php:60 -#, fuzzy msgid "You must be logged in to leave a group." -msgstr "du mÃ¥ste vara inloggad för att kunna bjuda in andra användare till %s" +msgstr "Du mÃ¥ste vara inloggad för att lämna en grupp." #: actions/leavegroup.php:90 lib/command.php:268 -#, fuzzy msgid "You are not a member of that group." -msgstr "Du skickade inte oss den profilen" +msgstr "Du är inte en medlem i den gruppen." #: actions/leavegroup.php:119 lib/command.php:278 -#, fuzzy msgid "Could not find membership record." -msgstr "Kunde inte uppdatera användarens inställningar." +msgstr "Kunde inte hitta uppgift om medlemskap." #: actions/leavegroup.php:127 lib/command.php:284 -#, fuzzy, php-format +#, php-format msgid "Could not remove user %s to group %s" -msgstr "Kunde inte följa användaren: Användaren kunde inte hittas." +msgstr "Kunde inte ta bort användare %s frÃ¥n grupp %s" #: actions/leavegroup.php:134 lib/command.php:289 #, php-format msgid "%s left group %s" -msgstr "" +msgstr "%s lämnade grupp %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Redan inloggad." -#: actions/login.php:108 actions/login.php:118 -#, fuzzy +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." -msgstr "Ogiltig innehÃ¥ll i inlägget " +msgstr "Ogiltig eller utgÃ¥ngen token." #: actions/login.php:146 msgid "Incorrect username or password." msgstr "Felaktigt användarnamn eller lösenord." #: actions/login.php:152 -#, fuzzy msgid "Error setting user. You are probably not authorized." -msgstr "Inte tillstÃ¥nd ännu." +msgstr "Fel vid inställning av användare. Du har sannolikt inte tillstÃ¥nd." #: actions/login.php:207 actions/login.php:260 lib/action.php:458 #: lib/logingroupnav.php:79 @@ -1882,7 +1808,7 @@ msgstr "Logga in" #: actions/login.php:246 msgid "Login to site" -msgstr "" +msgstr "Logga in pÃ¥ webbplatsen" #: actions/login.php:249 actions/profilesettings.php:106 #: actions/register.php:423 actions/showgroup.php:236 actions/tagother.php:94 @@ -1901,60 +1827,59 @@ msgstr "Kom ihÃ¥g mig" #: actions/login.php:256 actions/register.php:479 msgid "Automatically login in the future; not for shared computers!" -msgstr "Logga in automatiskt i framtiden; Ej för publika datorer!" +msgstr "Logga in automatiskt i framtiden; inte för delade datorer!" #: actions/login.php:266 msgid "Lost or forgotten password?" -msgstr "Glömt bort lösenord?" +msgstr "Tappat bort eller glömt ditt lösenord?" #: actions/login.php:285 msgid "" "For security reasons, please re-enter your user name and password before " "changing your settings." msgstr "" -"Av säkerhetsskäl, var vänlig skriv in ditt användarnamn och lösenord innan " -"du ändrar dina inställningar." +"Av säkerhetsskäl, var vänlig och skriv in ditt användarnamn och lösenord " +"igen innan du ändrar dina inställningar." #: actions/login.php:289 -#, fuzzy, php-format +#, php-format msgid "" "Login with your username and password. Don't have a username yet? [Register]" "(%%action.register%%) a new account." msgstr "" "Logga in med ditt användarnamn och lösenord. Har du inget användarnamn ännu? " -"[Registrera](%%action.register%%) ett nytt konto, eller testa [OpenID](%%" -"action.openidlogin%%)." +"[Registrera](%%action.register%%) ett nytt konto." #: actions/makeadmin.php:91 msgid "Only an admin can make another user an admin." -msgstr "" +msgstr "Bara en administratör kan göra en annan användare till administratör." #: actions/makeadmin.php:95 #, php-format msgid "%s is already an admin for group \"%s\"." -msgstr "" +msgstr "%s är redan en administratör för grupp \"%s\"." #: actions/makeadmin.php:132 #, php-format msgid "Can't get membership record for %s in group %s" -msgstr "" +msgstr "Kan inte hämta uppgift om medlemskap för %s i grupp %s" #: actions/makeadmin.php:145 #, php-format msgid "Can't make %s an admin for group %s" -msgstr "" +msgstr "Kan inte göra %s till en administratör för grupp %s" #: actions/microsummary.php:69 msgid "No current status" -msgstr "" +msgstr "Ingen aktuell status" #: actions/newgroup.php:53 msgid "New group" -msgstr "" +msgstr "Ny grupp" #: actions/newgroup.php:110 msgid "Use this form to create a new group." -msgstr "" +msgstr "Använd detta formulär för att skapa en ny grupp." #: actions/newmessage.php:71 actions/newmessage.php:231 msgid "New message" @@ -1962,7 +1887,7 @@ msgstr "Nytt meddelande" #: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:367 msgid "You can't send a message to this user." -msgstr "Du kan inte skicka meddelande till den användaren." +msgstr "Du kan inte skicka ett meddelande till den användaren." #: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:351 #: lib/command.php:424 @@ -1971,35 +1896,35 @@ msgstr "Inget innehÃ¥ll!" #: actions/newmessage.php:158 msgid "No recipient specified." -msgstr "Ingen mottagare tillagd." +msgstr "Ingen mottagare angiven." #: actions/newmessage.php:164 lib/command.php:370 msgid "" "Don't send a message to yourself; just say it to yourself quietly instead." -msgstr "Skicka inte meddelande till dig själv, viska lite tyst istället." +msgstr "" +"Skicka inte meddelande till dig själv; viska lite tyst till dig själv " +"istället." #: actions/newmessage.php:181 -#, fuzzy msgid "Message sent" -msgstr "Nytt meddelande" +msgstr "Meddelande skickat" #: actions/newmessage.php:185 lib/command.php:375 #, php-format msgid "Direct message to %s sent" -msgstr "" +msgstr "Direktmeddelande till %s skickat" #: actions/newmessage.php:210 actions/newnotice.php:240 lib/channel.php:170 msgid "Ajax Error" -msgstr "" +msgstr "AJAX-fel" #: actions/newnotice.php:69 msgid "New notice" -msgstr "Nytt inlägg" +msgstr "Ny notis" #: actions/newnotice.php:206 -#, fuzzy msgid "Notice posted" -msgstr "Inlägg" +msgstr "Notis postad" #: actions/noticesearch.php:68 #, php-format @@ -2007,17 +1932,17 @@ msgid "" "Search for notices on %%site.name%% by their contents. Separate search terms " "by spaces; they must be 3 characters or more." msgstr "" -"Sök efter innehÃ¥ll i inlägg pÃ¥ %%site.name%%. Skilj söktermerna Ã¥t med " -"mellanslag; dom mÃ¥ste vara minst tre tecken lÃ¥nga." +"Sök efter innehÃ¥ll i notiser pÃ¥ %%site.name%%. Skilj söktermerna Ã¥t med " +"mellanslag; de mÃ¥ste vara minst tre tecken lÃ¥nga." #: actions/noticesearch.php:78 msgid "Text search" -msgstr "Text sökning" +msgstr "Textsökning" #: actions/noticesearch.php:91 -#, fuzzy, php-format +#, php-format msgid "Search results for \"%s\" on %s" -msgstr "Sök i strömmen efter \"%s\"" +msgstr "Sökresultat för \"%s\" pÃ¥ %s" #: actions/noticesearch.php:121 #, php-format @@ -2025,6 +1950,8 @@ msgid "" "Be the first to [post on this topic](%%%%action.newnotice%%%%?" "status_textarea=%s)!" msgstr "" +"Bli först att [posta i detta ämne](%%%%action.newnotice%%%%?status_textarea=%" +"s)!" #: actions/noticesearch.php:124 #, php-format @@ -2032,123 +1959,121 @@ msgid "" "Why not [register an account](%%%%action.register%%%%) and be the first to " "[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!" msgstr "" +"Varför inte [registrera ett konto](%%%%action.register%%%%) och bli först " +"att [posta i detta ämne](%%%%action.newnotice%%%%?status_textarea=%s)!" #: actions/noticesearchrss.php:96 -#, fuzzy, php-format +#, php-format msgid "Updates with \"%s\"" -msgstr "Uppdateringar frÃ¥n %1$s pÃ¥ %2$s!" +msgstr "Uppdateringar med \"%s\"" #: actions/noticesearchrss.php:98 -#, fuzzy, php-format +#, php-format msgid "Updates matching search term \"%1$s\" on %2$s!" -msgstr "Alla uppdateringar som matchar söksträngen \"%s\"" +msgstr "Uppdateringar som matchar söksträngen \"%1$s\" pÃ¥ %2$s!" #: actions/nudge.php:85 msgid "" "This user doesn't allow nudges or hasn't confirmed or set his email yet." msgstr "" +"Denna användare har inte tillÃ¥tit knuffar eller har inte bekräftat eller " +"angett sitt e-post än." #: actions/nudge.php:94 msgid "Nudge sent" -msgstr "" +msgstr "Knuff sänd" #: actions/nudge.php:97 msgid "Nudge sent!" -msgstr "" +msgstr "Knuff sänd!" #: actions/oembed.php:79 actions/shownotice.php:100 msgid "Notice has no profile" -msgstr "Inlägget har ingen profil" +msgstr "Notisen har ingen profil" #: actions/oembed.php:86 actions/shownotice.php:180 #, php-format msgid "%1$s's status on %2$s" -msgstr "%1$s's status den %2$s" +msgstr "%1$ss status den %2$s" #: actions/oembed.php:157 -#, fuzzy msgid "content type " -msgstr "Anslut" +msgstr "innehÃ¥llstyp " #: actions/oembed.php:160 msgid "Only " -msgstr "" +msgstr "Bara " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." -msgstr "Ingen support för det formatet." +msgstr "Ett dataformat som inte stödjs" #: actions/opensearch.php:64 msgid "People Search" -msgstr "Personer sökning" +msgstr "Personsökning" #: actions/opensearch.php:67 msgid "Notice Search" -msgstr "Inlägg sökning" +msgstr "Notissökning" #: actions/othersettings.php:60 -#, fuzzy msgid "Other Settings" -msgstr "Twitter inställningar" +msgstr "Övriga inställningar" #: actions/othersettings.php:71 msgid "Manage various other options." -msgstr "" +msgstr "Hantera diverse andra alternativ." #: actions/othersettings.php:108 msgid " (free service)" -msgstr "" +msgstr "(fri tjänst)" #: actions/othersettings.php:116 msgid "Shorten URLs with" -msgstr "" +msgstr "Förkorta URL:er med" #: actions/othersettings.php:117 msgid "Automatic shortening service to use." -msgstr "" +msgstr "Automatiska förkortningstjänster att använda." #: actions/othersettings.php:122 -#, fuzzy msgid "View profile designs" -msgstr "Profil inställningar" +msgstr "Visa profilutseenden" #: actions/othersettings.php:123 msgid "Show or hide profile designs." -msgstr "" +msgstr "Visa eller göm profilutseenden." #: actions/othersettings.php:153 -#, fuzzy msgid "URL shortening service is too long (max 50 chars)." -msgstr "SprÃ¥ket är för lÃ¥ngt(max 50 tecken)." +msgstr "Namnet pÃ¥ URL-förkortningstjänsen är för lÃ¥ngt (max 50 tecken)." #: actions/outbox.php:58 #, php-format msgid "Outbox for %s - page %d" -msgstr "Outbox för %s - sida %d" +msgstr "Utkorg för %s - sida %d" #: actions/outbox.php:61 #, php-format msgid "Outbox for %s" -msgstr "Outbox för %s" +msgstr "Utkorg för %s" #: actions/outbox.php:116 msgid "This is your outbox, which lists private messages you have sent." -msgstr "Detta är din outbox som innehÃ¥ller meddelanden som du skickat." +msgstr "Detta är din utkorg som innehÃ¥ller privata meddelanden du har skickat." #: actions/passwordsettings.php:58 msgid "Change password" msgstr "Byt lösenord" #: actions/passwordsettings.php:69 -#, fuzzy msgid "Change your password." -msgstr "Ändra ditt lösenord" +msgstr "Byt ditt lösenord." #: actions/passwordsettings.php:96 actions/recoverpassword.php:231 -#, fuzzy msgid "Password change" -msgstr "Lösenord är sparat." +msgstr "Byte av lösenord" #: actions/passwordsettings.php:104 msgid "Old password" @@ -2185,127 +2110,120 @@ msgstr "Lösenorden matchar inte." #: actions/passwordsettings.php:165 msgid "Incorrect old password" -msgstr "Felaktigt, gammalt lösenord" +msgstr "Felaktigt gammalt lösenord" #: actions/passwordsettings.php:181 msgid "Error saving user; invalid." -msgstr "Fel uppstog när användare skulle sparas." +msgstr "Fel vid sparande av användare; ogiltig." #: actions/passwordsettings.php:186 actions/recoverpassword.php:368 msgid "Can't save new password." -msgstr "Kan inte spara det nya lösenordet." +msgstr "Kan inte spara nytt lösenord." #: actions/passwordsettings.php:192 actions/recoverpassword.php:211 msgid "Password saved." -msgstr "Lösenord är sparat." +msgstr "Lösenord sparat." #: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:308 msgid "Paths" -msgstr "" +msgstr "Sökvägar" #: actions/pathsadminpanel.php:70 msgid "Path and server settings for this StatusNet site." -msgstr "" +msgstr "Sökvägs- och serverinställningar för denna StatusNet-webbplats." #: actions/pathsadminpanel.php:140 -#, fuzzy, php-format +#, php-format msgid "Theme directory not readable: %s" -msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat" +msgstr "Katalog med teman är inte läsbar: %s" #: actions/pathsadminpanel.php:146 #, php-format msgid "Avatar directory not writable: %s" -msgstr "" +msgstr "Katalog med avatarer är inte skrivbar: %s" #: actions/pathsadminpanel.php:152 #, php-format msgid "Background directory not writable: %s" -msgstr "" +msgstr "Katalog med bakgrunder är inte skrivbar: %s" #: actions/pathsadminpanel.php:160 #, php-format msgid "Locales directory not readable: %s" -msgstr "" +msgstr "Katalog med lokaliseringfiler (locales) är inte läsbar. %s" #: actions/pathsadminpanel.php:212 actions/siteadminpanel.php:58 #: lib/adminpanelaction.php:299 -#, fuzzy msgid "Site" -msgstr "Bjud in" +msgstr "Webbplats" #: actions/pathsadminpanel.php:216 msgid "Path" -msgstr "" +msgstr "Sökväg" #: actions/pathsadminpanel.php:216 -#, fuzzy msgid "Site path" -msgstr "Nytt inlägg" +msgstr "Sökväg till webbplats" #: actions/pathsadminpanel.php:220 msgid "Path to locales" -msgstr "" +msgstr "Sökväg till lokaliseringfiler (locales)" #: actions/pathsadminpanel.php:220 msgid "Directory path to locales" -msgstr "" +msgstr "Katalogsökväg till lokaliseringfiler (locales)" #: actions/pathsadminpanel.php:227 msgid "Theme" -msgstr "" +msgstr "Teman" #: actions/pathsadminpanel.php:232 msgid "Theme server" -msgstr "" +msgstr "Server med teman" #: actions/pathsadminpanel.php:236 msgid "Theme path" -msgstr "" +msgstr "Sökväg till teman" #: actions/pathsadminpanel.php:240 msgid "Theme directory" -msgstr "" +msgstr "Katalog med teman" #: actions/pathsadminpanel.php:247 -#, fuzzy msgid "Avatars" -msgstr "Användarbild" +msgstr "Avatarer" #: actions/pathsadminpanel.php:252 -#, fuzzy msgid "Avatar server" -msgstr "Twitter inställningar" +msgstr "Server med avatarer" #: actions/pathsadminpanel.php:256 -#, fuzzy msgid "Avatar path" -msgstr "Användarbilden uppdaterad." +msgstr "Sökväg till avatarer" #: actions/pathsadminpanel.php:260 -#, fuzzy msgid "Avatar directory" -msgstr "Användarbilden uppdaterad." +msgstr "Katalog med avatarer" #: actions/pathsadminpanel.php:269 msgid "Backgrounds" -msgstr "" +msgstr "Bakgrunder" #: actions/pathsadminpanel.php:273 msgid "Background server" -msgstr "" +msgstr "Server med bakgrunder" #: actions/pathsadminpanel.php:277 msgid "Background path" -msgstr "" +msgstr "Sökväg till bakgrunder" #: actions/pathsadminpanel.php:281 msgid "Background directory" -msgstr "" +msgstr "Katalog med bakgrunder" #: actions/pathsadminpanel.php:297 -#, fuzzy msgid "Save paths" -msgstr "Nytt inlägg" +msgstr "Spara sökvägar" #: actions/peoplesearch.php:52 #, php-format @@ -2314,45 +2232,45 @@ msgid "" "Separate the terms by spaces; they must be 3 characters or more." msgstr "" "Sök efter personer pÃ¥ %%site.name%% efter deras namn, plats eller intressen. " -"Skilj söktermerna Ã¥t med mellanslag; de mÃ¥ste vara minst tre tecken lÃ¥nga. " +"Skilj söktermerna Ã¥t med mellanslag; de mÃ¥ste vara tre tecken lÃ¥nga." #: actions/peoplesearch.php:58 msgid "People search" -msgstr "Sökning personer" +msgstr "Personsökning" #: actions/peopletag.php:70 -#, fuzzy, php-format +#, php-format msgid "Not a valid people tag: %s" -msgstr "Ingen giltig emailadress" +msgstr "Inte en giltig persontagg: %s" #: actions/peopletag.php:144 #, php-format msgid "Users self-tagged with %s - page %d" -msgstr "" +msgstr "Användare som taggat sig själv med %s - sida %d" #: actions/postnotice.php:84 msgid "Invalid notice content" -msgstr "Ogiltig innehÃ¥ll i inlägget " +msgstr "Ogiltigt notisinnehÃ¥ll" #: actions/postnotice.php:90 #, php-format msgid "Notice license ‘%s’ is not compatible with site license ‘%s’." -msgstr "" +msgstr "Licensen för notiser ‘%s’ är inte förenlig webbplatslicensen ‘%s’." #: actions/profilesettings.php:60 msgid "Profile settings" -msgstr "Profil inställningar" +msgstr "Profilinställningar" #: actions/profilesettings.php:71 msgid "" "You can update your personal profile info here so people know more about you." msgstr "" -"Du kan uppdatera din personliga profil här sÃ¥ personer fÃ¥r veta mer om dig." +"Du kan uppdatera din personliga profilinformation här sÃ¥ personer fÃ¥r veta " +"mer om dig." #: actions/profilesettings.php:99 -#, fuzzy msgid "Profile information" -msgstr "Okänd profil" +msgstr "Profilinformation" #: actions/profilesettings.php:108 lib/groupeditform.php:154 msgid "1-64 lowercase letters or numbers, no punctuation or spaces" @@ -2362,7 +2280,7 @@ msgstr "1-64 smÃ¥ bokstäver eller nummer, inga punkter eller mellanslag" #: actions/showgroup.php:247 actions/tagother.php:104 #: lib/groupeditform.php:157 lib/userprofile.php:149 msgid "Full name" -msgstr "Ditt fulla namn." +msgstr "Fullständigt namn" #: actions/profilesettings.php:115 actions/register.php:452 #: lib/groupeditform.php:161 @@ -2371,17 +2289,16 @@ msgstr "Hemsida" #: actions/profilesettings.php:117 actions/register.php:454 msgid "URL of your homepage, blog, or profile on another site" -msgstr "URL till din hemsida, blog eller profil pÃ¥ en annan sida." +msgstr "URL till din hemsida, blogg eller profil pÃ¥ en annan webbplats." #: actions/profilesettings.php:122 actions/register.php:460 -#, fuzzy, php-format +#, php-format msgid "Describe yourself and your interests in %d chars" -msgstr "Berätta om dig själv och dina intressen inom 140 tecken" +msgstr "Beskriv dig själv och dina intressen med högst 140 tecken" #: actions/profilesettings.php:125 actions/register.php:463 -#, fuzzy msgid "Describe yourself and your interests" -msgstr "Berätta om dig själv och dina intressen inom 140 tecken" +msgstr "Beskriv dig själv och dina intressen" #: actions/profilesettings.php:127 actions/register.php:465 msgid "Bio" @@ -2408,6 +2325,8 @@ msgstr "Taggar" msgid "" "Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated" msgstr "" +"Taggar för dig själv (bokstäver, nummer, -, ., och _), separerade med " +"kommatecken eller mellanslag" #: actions/profilesettings.php:144 actions/siteadminpanel.php:307 msgid "Language" @@ -2415,7 +2334,7 @@ msgstr "SprÃ¥k" #: actions/profilesettings.php:145 msgid "Preferred language" -msgstr "SprÃ¥kval" +msgstr "Föredraget sprÃ¥k" #: actions/profilesettings.php:154 msgid "Timezone" @@ -2423,32 +2342,31 @@ msgstr "Tidszon" #: actions/profilesettings.php:155 msgid "What timezone are you normally in?" -msgstr "Vilken tidszon befinner du dig normalt?" +msgstr "I vilken tidszon befinner du dig normalt?" #: actions/profilesettings.php:160 msgid "" "Automatically subscribe to whoever subscribes to me (best for non-humans)" msgstr "" -"Automatisk prenummeration pÃ¥ den som prenumererar pÃ¥ mig. (Bäst för icke " -"mänsklig användare) " +"Prenumerera automatiskt pÃ¥ den prenumererar pÃ¥ mig (bäst för icke-människa) " #: actions/profilesettings.php:221 actions/register.php:223 -#, fuzzy, php-format +#, php-format msgid "Bio is too long (max %d chars)." -msgstr "Biografin är för lÃ¥ng (max 140 tecken)" +msgstr "Biografin är för lÃ¥ng (max %d tecken)." #: actions/profilesettings.php:228 actions/siteadminpanel.php:165 msgid "Timezone not selected." -msgstr "Du har inte valt tidszon" +msgstr "Tidszon inte valt." #: actions/profilesettings.php:234 msgid "Language is too long (max 50 chars)." -msgstr "SprÃ¥ket är för lÃ¥ngt(max 50 tecken)." +msgstr "SprÃ¥knamn är för lÃ¥ngt (max 50 tecken)." #: actions/profilesettings.php:246 actions/tagother.php:178 -#, fuzzy, php-format +#, php-format msgid "Invalid tag: \"%s\"" -msgstr "Ogiltig hemsideadress '%s'" +msgstr "Ogiltig tagg: \"%s\"" #: actions/profilesettings.php:295 msgid "Couldn't update user for autosubscribe." @@ -2459,9 +2377,8 @@ msgid "Couldn't save profile." msgstr "Kunde inte spara profil." #: actions/profilesettings.php:336 -#, fuzzy msgid "Couldn't save tags." -msgstr "Kunde inte spara profil." +msgstr "Kunde inte spara taggar." #: actions/profilesettings.php:344 lib/adminpanelaction.php:126 msgid "Settings saved." @@ -2470,36 +2387,32 @@ msgstr "Inställningar sparade." #: actions/public.php:83 #, php-format msgid "Beyond the page limit (%s)" -msgstr "" +msgstr "Bortom sidbegränsningen (%s)" #: actions/public.php:92 -#, fuzzy msgid "Could not retrieve public stream." -msgstr "Kunde inte ta emot favoritinläggen." +msgstr "Kunde inte hämta publik ström." #: actions/public.php:129 -#, fuzzy, php-format +#, php-format msgid "Public timeline, page %d" -msgstr "Publik tidslinje" +msgstr "Publik tidslinje, sida %d" #: actions/public.php:131 lib/publicgroupnav.php:79 msgid "Public timeline" msgstr "Publik tidslinje" #: actions/public.php:151 -#, fuzzy msgid "Public Stream Feed (RSS 1.0)" -msgstr "Publik ström" +msgstr "Publikt flöde av ström (RSS 1.0)" #: actions/public.php:155 -#, fuzzy msgid "Public Stream Feed (RSS 2.0)" -msgstr "Publik ström" +msgstr "Publikt flöde av ström (RSS 2.0)" #: actions/public.php:159 -#, fuzzy msgid "Public Stream Feed (Atom)" -msgstr "Publik ström" +msgstr "Publikt flöde av ström (Atom)" #: actions/public.php:179 #, php-format @@ -2507,16 +2420,20 @@ msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "" +"Detta är den publika tidslinjen för %%site.name%% men ingen har postat nÃ¥got " +"än." #: actions/public.php:182 msgid "Be the first to post!" -msgstr "" +msgstr "Bli först att posta!" #: actions/public.php:186 #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" +"Varför inte [registrera ett konto](%%action.register%%) och bli först att " +"posta!" #: actions/public.php:233 #, php-format @@ -2526,6 +2443,10 @@ msgid "" "tool. [Join now](%%action.register%%) to share notices about yourself with " "friends, family, and colleagues! ([Read more](%%doc.help%%))" msgstr "" +"Detta är %%site.name%%, en [mikroblogg](http://en.wikipedia.org/wiki/Micro-" +"blogging)-tjänst baserad pÃ¥ den fria programvaran [StatusNet](http://status." +"net/). [GÃ¥ med nu](%%action.register%%) för att dela notiser om dig själv " +"med vänner, familj och kollegor! ([Läs mer](%%doc.help%%))" #: actions/public.php:238 #, php-format @@ -2534,25 +2455,27 @@ msgid "" "blogging) service based on the Free Software [StatusNet](http://status.net/) " "tool." msgstr "" +"Detta är %%site.name%%, en [mikroblogg](http://en.wikipedia.org/wiki/Micro-" +"blogging)-tjänst baserad pÃ¥ den fria programvaran [StatusNet](http://status." +"net/)." #: actions/publictagcloud.php:57 -#, fuzzy msgid "Public tag cloud" -msgstr "Publik ström" +msgstr "Publikt taggmoln" #: actions/publictagcloud.php:63 #, php-format msgid "These are most popular recent tags on %s " -msgstr "" +msgstr "Dessa är de populäraste senaste taggarna pÃ¥ %s " #: actions/publictagcloud.php:69 #, php-format msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet." -msgstr "" +msgstr "Ingen har postat en notis med en [hashtagg](%%doc.tags%%) än." #: actions/publictagcloud.php:72 msgid "Be the first to post one!" -msgstr "" +msgstr "Bli först att posta en!" #: actions/publictagcloud.php:75 #, php-format @@ -2560,10 +2483,12 @@ msgid "" "Why not [register an account](%%action.register%%) and be the first to post " "one!" msgstr "" +"Varför inte [registrera ett konto](%%action.register%%) och bli först att " +"posta en!" #: actions/publictagcloud.php:135 msgid "Tag cloud" -msgstr "" +msgstr "Taggmoln" #: actions/recoverpassword.php:36 msgid "You are already logged in!" @@ -2571,53 +2496,56 @@ msgstr "Du är redan inloggad!" #: actions/recoverpassword.php:62 msgid "No such recovery code." -msgstr "Ingen sÃ¥dan Ã¥terställningskod. " +msgstr "Ingen sÃ¥dan Ã¥terskapningskod." #: actions/recoverpassword.php:66 msgid "Not a recovery code." -msgstr "Det är ingen kod för Ã¥terställning." +msgstr "Inte en Ã¥terskapningskod." #: actions/recoverpassword.php:73 msgid "Recovery code for unknown user." -msgstr "Kod för Ã¥terställning av okänd användare." +msgstr "Ã…terskapningskod för okänd användare." #: actions/recoverpassword.php:86 msgid "Error with confirmation code." -msgstr "Fel uppstog med bekräftelsekoden." +msgstr "Fel med bekräftelsekod." #: actions/recoverpassword.php:97 msgid "This confirmation code is too old. Please start again." -msgstr "Denna bekräftelsekod är för gammal. Du fÃ¥r starta om pÃ¥ nytt igen." +msgstr "Denna bekräftelsekod är för gammal. Var vänlig börja om igen." #: actions/recoverpassword.php:111 msgid "Could not update user with confirmed email address." -msgstr "Kunde inte uppdatera användaren med bekräftad emailadress." +msgstr "Kunde inte uppdatera användaren med bekräftad e-postadress." #: actions/recoverpassword.php:152 msgid "" "If you have forgotten or lost your password, you can get a new one sent to " "the email address you have stored in your account." msgstr "" +"Om du har glömt eller förlorat ditt lösenord kan du fÃ¥ ett nytt skickat till " +"den e-postadress du har sparat i ditt konto." #: actions/recoverpassword.php:158 msgid "You have been identified. Enter a new password below. " -msgstr "" +msgstr "Du har blivit identifierad. Ange ett nytt lösenord nedan. " #: actions/recoverpassword.php:188 msgid "Password recovery" -msgstr "" +msgstr "Ã…terskapande av lösenord" #: actions/recoverpassword.php:191 msgid "Nickname or email address" -msgstr "" +msgstr "Smeknamn eller e-postadress" #: actions/recoverpassword.php:193 msgid "Your nickname on this server, or your registered email address." -msgstr "Ditt användarnamn pÃ¥ denna server eller registrerad epost adress." +msgstr "" +"Ditt användarnamn pÃ¥ denna server, eller din registrerade e-postadress." #: actions/recoverpassword.php:199 actions/recoverpassword.php:200 msgid "Recover" -msgstr "Ã…terställ" +msgstr "Ã…terskapa" #: actions/recoverpassword.php:208 msgid "Reset password" @@ -2625,11 +2553,11 @@ msgstr "Ã…terställ lösenord" #: actions/recoverpassword.php:209 msgid "Recover password" -msgstr "Ã…terställ lösenord" +msgstr "Ã…terskapa lösenord" #: actions/recoverpassword.php:210 actions/recoverpassword.php:322 msgid "Password recovery requested" -msgstr "FörfrÃ¥gan om Ã¥terställning av lösenord" +msgstr "Ã…terskapande av lösenord begärd" #: actions/recoverpassword.php:213 msgid "Unknown action" @@ -2637,7 +2565,7 @@ msgstr "Okänd funktion" #: actions/recoverpassword.php:236 msgid "6 or more characters, and don't forget it!" -msgstr "Minst 6 tecken och glöm inte bort det!" +msgstr "Minst 6 tecken, och glöm inte bort det!" #: actions/recoverpassword.php:243 msgid "Reset" @@ -2645,35 +2573,35 @@ msgstr "Ã…terställ" #: actions/recoverpassword.php:252 msgid "Enter a nickname or email address." -msgstr "Skriv in ett smeknamn eller en epostadress." +msgstr "Skriv in ett smeknamn eller en e-postadress." #: actions/recoverpassword.php:272 msgid "No user with that email address or username." -msgstr "Ingen användare med den emailadressen eller användarnamn." +msgstr "Ingen användare med den e-postadressen eller användarnamn." #: actions/recoverpassword.php:287 msgid "No registered email address for that user." -msgstr "Ingen registrerad epost adress för den användaren." +msgstr "Ingen registrerad e-postadress för den användaren." #: actions/recoverpassword.php:301 msgid "Error saving address confirmation." -msgstr "Fel uppstog när adressen skulle bekräftas." +msgstr "Fel vid sparande av adressbekräftelse." #: actions/recoverpassword.php:325 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "" -"Instruktioner om hur du Ã¥terställer ditt lösenord har sänts till din e-" -"postadress " +"Instruktioner för att Ã¥terställa ditt lösenord har skickats till e-" +"postadressen som är registrerat till ditt konto " #: actions/recoverpassword.php:344 msgid "Unexpected password reset." -msgstr "Oväntad rensning av lösenord." +msgstr "Oväntad Ã¥terställning av lösenord." #: actions/recoverpassword.php:352 msgid "Password must be 6 chars or more." -msgstr "Lösenordet mÃ¥ste vara 6 tecken eller fler." +msgstr "Lösenordet mÃ¥ste vara minst 6 tecken." #: actions/recoverpassword.php:356 msgid "Password and confirmation do not match." @@ -2685,20 +2613,19 @@ msgstr "Fel uppstog i användarens inställning" #: actions/recoverpassword.php:382 msgid "New password successfully saved. You are now logged in." -msgstr "Nya lösenordet har blivit sparat. Du är nu även inloggad." +msgstr "Nya lösenordet sparat. Du är nu inloggad." #: actions/register.php:85 actions/register.php:189 actions/register.php:404 msgid "Sorry, only invited people can register." -msgstr "" +msgstr "Ledsen, bara inbjudna personer kan registrera sig." #: actions/register.php:92 -#, fuzzy msgid "Sorry, invalid invitation code." -msgstr "Fel uppstog med bekräftelsekoden." +msgstr "Ledsen, ogiltig inbjudningskod." #: actions/register.php:112 msgid "Registration successful" -msgstr "Registreringen är genomförd" +msgstr "Registreringen genomförd" #: actions/register.php:114 actions/register.php:502 lib/action.php:455 #: lib/logingroupnav.php:85 @@ -2707,29 +2634,31 @@ msgstr "Registrera" #: actions/register.php:135 msgid "Registration not allowed." -msgstr "Registrering är inte möjlig." +msgstr "Registrering inte tillÃ¥ten." #: actions/register.php:198 msgid "You can't register if you don't agree to the license." -msgstr "Du kan inte registrera dig om du inte godkänner licensvillkor." +msgstr "Du kan inte registrera dig om du inte godkänner licensen." #: actions/register.php:201 msgid "Not a valid email address." -msgstr "Det är ingen giltig epost adress." +msgstr "Inte en giltig e-postadress." #: actions/register.php:212 msgid "Email address already exists." -msgstr "Epostadressen finns redan." +msgstr "E-postadressen finns redan." #: actions/register.php:243 actions/register.php:264 msgid "Invalid username or password." -msgstr "Felaktigt användarnamn eller lösenord." +msgstr "Ogiltigt användarnamn eller lösenord." #: actions/register.php:342 msgid "" "With this form you can create a new account. You can then post notices and " "link up to friends and colleagues. " msgstr "" +"Med detta formulär kan du skapa ett nytt konto. Du kan sedan posta notiser " +"och ansluta till vänner och kollegor. " #: actions/register.php:424 msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required." @@ -2739,7 +2668,7 @@ msgstr "" #: actions/register.php:429 msgid "6 or more characters. Required." -msgstr "6 eller fler tecken. MÃ¥ste fyllas i." +msgstr "Minst 6 tecken. MÃ¥ste fyllas i." #: actions/register.php:433 msgid "Same as password above. Required." @@ -2748,32 +2677,32 @@ msgstr "Samma som lösenordet ovan. MÃ¥ste fyllas i." #: actions/register.php:437 actions/register.php:441 #: actions/siteadminpanel.php:283 lib/accountsettingsaction.php:120 msgid "Email" -msgstr "Epost" +msgstr "E-post" #: actions/register.php:438 actions/register.php:442 msgid "Used only for updates, announcements, and password recovery" msgstr "" -"Används endast för uppdateringar, annonsering och Ã¥terställning av lösenord" +"Används endast för uppdateringar, tillkännagivanden och Ã¥terskapande av " +"lösenord" #: actions/register.php:449 msgid "Longer name, preferably your \"real\" name" -msgstr "LÃ¥ngt namn, förslagsvis ditt \"riktiga\" namn" +msgstr "Längre namn, förslagsvis ditt \"verkliga\" namn" #: actions/register.php:493 msgid "My text and files are available under " -msgstr "Min text och filer finns tillgängliga under" +msgstr "Min text och mina filer är tillgängliga under " #: actions/register.php:495 msgid "Creative Commons Attribution 3.0" -msgstr "" +msgstr "Creative Commons Erkännande 3.0" #: actions/register.php:496 -#, fuzzy msgid "" " except this private data: password, email address, IM address, and phone " "number." msgstr "" -"förutom det här, som är privat: lösenord, epostadress, IM-adress, " +"med undantag av den här privata datan: lösenord, e-postadress, IM-adress, " "telefonnummer." #: actions/register.php:537 @@ -2794,28 +2723,14 @@ msgid "" "\n" "Thanks for signing up and we hope you enjoy using this service." msgstr "" -"Grattis, %s! Välkommen till %%%%site.name%%%%. HärifrÃ¥n, kanske du vill...\n" -"\n" -"* GÃ¥ till [din profil](%s) och göra ditt första inlägg.\n" -"* Lägg till en [Jabber/GTalk adress](%%%%action.imsettings%%%%) sÃ¥ du kan " -"skicka inlägg med en IM klient.\n" -"* [Sök efter personer](%%%%action.peoplesearch%%%%) som du kanske känner " -"eller delar dina intressen. \n" -"* Uppdatera din [profil inställning](%%%%action.profilesettings%%%%) för att " -"berätta lite mer om dig själv för andra här. \n" -"* Läs igenom [online dok](%%%%doc.help%%%%) efter funktioner som du kanske " -"missat. \n" -"\n" -"Tack för att du registrerade dig och vi hoppas du kommer trivas med denna " -"service." #: actions/register.php:561 msgid "" "(You should receive a message by email momentarily, with instructions on how " "to confirm your email address.)" msgstr "" -"(Du kommer fÃ¥ ett meddelande med email inom kort med instruktioner hur du " -"bekräftar din emailadress)" +"(Du kommer fÃ¥ ett meddelande med e-post inom kort med instruktioner hur du " +"bekräftar din e-postadress.)" #: actions/remotesubscribe.php:98 #, php-format @@ -2824,9 +2739,9 @@ msgid "" "register%%) a new account. If you already have an account on a [compatible " "microblogging site](%%doc.openmublog%%), enter your profile URL below." msgstr "" -"För att prenumerera sÃ¥ kan du [logga in](%%action.login%%) eller [registrera]" -"(%%action.register%%) ett nytt konto. Om du redan har ett konto pÃ¥ en " -"[kompatibel mikroblogg sida](%%doc.openmublog%%) fyll i din profils URL " +"För att prenumerera kan du [logga in](%%action.login%%) eller [registrera](%%" +"action.register%%) ett nytt konto. Om du redan har ett konto pÃ¥ en " +"[kompatibel mikrobloggwebbplats](%%doc.openmublog%%), fyll i din profils URL " "nedan." #: actions/remotesubscribe.php:112 @@ -2834,9 +2749,8 @@ msgid "Remote subscribe" msgstr "Fjärrprenumerera" #: actions/remotesubscribe.php:124 -#, fuzzy msgid "Subscribe to a remote user" -msgstr "Prenumerera pÃ¥ mina Twitter vänner här." +msgstr "Prenumerera pÃ¥ en fjärranvändare" #: actions/remotesubscribe.php:129 msgid "User nickname" @@ -2848,11 +2762,11 @@ msgstr "Smeknamnet pÃ¥ användaren du vill följa" #: actions/remotesubscribe.php:133 msgid "Profile URL" -msgstr "Profil URL" +msgstr "Profil-URL" #: actions/remotesubscribe.php:134 msgid "URL of your profile on another compatible microblogging service" -msgstr "URL till din profil pÃ¥ en annan kompatibel mikroblogg" +msgstr "URL till din profil pÃ¥ en annan kompatibel mikrobloggtjänst" #: actions/remotesubscribe.php:137 lib/subscribeform.php:139 #: lib/userprofile.php:365 @@ -2861,21 +2775,21 @@ msgstr "Prenumerera" #: actions/remotesubscribe.php:159 msgid "Invalid profile URL (bad format)" -msgstr "NÃ¥t är fel med profil URL (Format fel)" +msgstr "Ogiltig profil-URL (dÃ¥ligt format)" #: actions/remotesubscribe.php:168 -#, fuzzy msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." -msgstr "Det är ingen giltig profil URL (ingen YADIS angiven)." +msgstr "" +"Inte en giltig profil-URL (inget YADIS-dokument eller ogiltig XRDS " +"definerad)." #: actions/remotesubscribe.php:176 msgid "That’s a local profile! Login to subscribe." -msgstr "" +msgstr "Det där är en lokal profil! Logga in för att prenumerera." #: actions/remotesubscribe.php:183 -#, fuzzy msgid "Couldn’t get a request token." -msgstr "Kunde inte fÃ¥ en förfrÃ¥gan token." +msgstr "Kunde inte fÃ¥ en förfrÃ¥gnings-token." #: actions/replies.php:125 actions/repliesrss.php:68 #: lib/personalgroupnav.php:105 @@ -2884,24 +2798,24 @@ msgid "Replies to %s" msgstr "Svarat pÃ¥ %s" #: actions/replies.php:127 -#, fuzzy, php-format +#, php-format msgid "Replies to %s, page %d" -msgstr "Svarat pÃ¥ %s" +msgstr "Svar till %s, sida %d" #: actions/replies.php:144 -#, fuzzy, php-format +#, php-format msgid "Replies feed for %s (RSS 1.0)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde med svar för %s (RSS 1.0)" #: actions/replies.php:151 -#, fuzzy, php-format +#, php-format msgid "Replies feed for %s (RSS 2.0)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde med svar för %s (RSS 2.0)" #: actions/replies.php:158 -#, fuzzy, php-format +#, php-format msgid "Replies feed for %s (Atom)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde med svar för %s (Atom)" #: actions/replies.php:198 #, php-format @@ -2909,6 +2823,8 @@ msgid "" "This is the timeline showing replies to %s but %s hasn't received a notice " "to his attention yet." msgstr "" +"Detta är tidslinjen som visar svar till %s men %s har inte tagit emot en " +"notis för dennes uppmärksamhet än." #: actions/replies.php:203 #, php-format @@ -2916,6 +2832,8 @@ msgid "" "You can engage other users in a conversation, subscribe to more people or " "[join groups](%%action.groups%%)." msgstr "" +"Du kan engagera andra användare i en konversation, prenumerera pÃ¥ fler " +"personer eller [gÃ¥ med i grupper](%%action.groups%%)." #: actions/replies.php:205 #, php-format @@ -2923,45 +2841,47 @@ msgid "" "You can try to [nudge %s](../%s) or [post something to his or her attention]" "(%%%%action.newnotice%%%%?status_textarea=%s)." msgstr "" +"Du kan prova att [knuffa %s](../%s) eller [posta nÃ¥gonting för hans eller " +"hennes uppmärksamhet](%%%%action.newnotice%%%%?status_textarea=%s)." #: actions/repliesrss.php:72 -#, fuzzy, php-format +#, php-format msgid "Replies to %1$s on %2$s!" -msgstr "Meddelande till %1$s pÃ¥ %2$s" +msgstr "Svar till %1$s pÃ¥ %2$s" #: actions/sandbox.php:65 actions/unsandbox.php:65 #, fuzzy msgid "You cannot sandbox users on this site." -msgstr "Du kan inte skicka meddelande till den användaren." +msgstr "Du kan inte flytta användare till sandlÃ¥da pÃ¥ denna webbplats." #: actions/sandbox.php:72 #, fuzzy msgid "User is already sandboxed." -msgstr "Användaren har ingen profil." +msgstr "Användare är redan flyttad till sandlÃ¥da." #: actions/showfavorites.php:79 -#, fuzzy, php-format +#, php-format msgid "%s's favorite notices, page %d" -msgstr "%s favoriter" +msgstr "%ss favoritnotiser, sida %d" #: actions/showfavorites.php:132 msgid "Could not retrieve favorite notices." -msgstr "Kunde inte ta emot favoritinläggen." +msgstr "Kunde inte hämta favoritnotiser." #: actions/showfavorites.php:170 #, php-format msgid "Feed for favorites of %s (RSS 1.0)" -msgstr "Flöden för $s vänner" +msgstr "Flöde för %ss favoriter (RSS 1.0)" #: actions/showfavorites.php:177 #, php-format msgid "Feed for favorites of %s (RSS 2.0)" -msgstr "Flöden för $s vänner" +msgstr "Flöde för %ss favoriter (RSS 2.0)" #: actions/showfavorites.php:184 #, php-format msgid "Feed for favorites of %s (Atom)" -msgstr "Flöden för $s vänner" +msgstr "Flöde för %ss favoriter (Atom)" #: actions/showfavorites.php:205 msgid "" @@ -2986,85 +2906,81 @@ msgstr "" #: actions/showfavorites.php:242 msgid "This is a way to share what you like." -msgstr "" +msgstr "Detta är ett sätt att dela vad du gillar." #: actions/showgroup.php:82 lib/groupnav.php:86 #, php-format msgid "%s group" -msgstr "" +msgstr "%s grupp" #: actions/showgroup.php:84 #, php-format msgid "%s group, page %d" -msgstr "" +msgstr "%s grupp, sida %d" #: actions/showgroup.php:218 -#, fuzzy msgid "Group profile" -msgstr "Inget sÃ¥dant inlägg." +msgstr "Grupprofil" #: actions/showgroup.php:263 actions/tagother.php:118 #: actions/userauthorization.php:167 lib/userprofile.php:177 msgid "URL" -msgstr "" +msgstr "URL" #: actions/showgroup.php:274 actions/tagother.php:128 #: actions/userauthorization.php:179 lib/userprofile.php:194 -#, fuzzy msgid "Note" -msgstr "Inlägg" +msgstr "Notis" #: actions/showgroup.php:284 lib/groupeditform.php:184 msgid "Aliases" -msgstr "" +msgstr "Alias" #: actions/showgroup.php:293 msgid "Group actions" -msgstr "" +msgstr "GruppÃ¥tgärder" #: actions/showgroup.php:328 -#, fuzzy, php-format +#, php-format msgid "Notice feed for %s group (RSS 1.0)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för %s grupp (RSS 1.0)" #: actions/showgroup.php:334 -#, fuzzy, php-format +#, php-format msgid "Notice feed for %s group (RSS 2.0)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för %s grupp (RSS 2.0)" #: actions/showgroup.php:340 -#, fuzzy, php-format +#, php-format msgid "Notice feed for %s group (Atom)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för %s grupp (Atom)" #: actions/showgroup.php:345 #, php-format msgid "FOAF for %s group" -msgstr "Outbox för %s" +msgstr "FOAF för %s grupp" #: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91 -#, fuzzy msgid "Members" -msgstr "Medlem sedan" +msgstr "Medlemmar" #: actions/showgroup.php:386 lib/profileaction.php:117 #: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95 #: lib/tagcloudsection.php:71 msgid "(None)" -msgstr "" +msgstr "(Ingen)" #: actions/showgroup.php:392 msgid "All members" -msgstr "" +msgstr "Alla medlemmar" #: actions/showgroup.php:429 lib/profileaction.php:174 msgid "Statistics" msgstr "Statistik" #: actions/showgroup.php:432 -#, fuzzy msgid "Created" -msgstr "Skapa" +msgstr "Skapad" #: actions/showgroup.php:448 #, php-format @@ -3075,6 +2991,11 @@ msgid "" "their life and interests. [Join now](%%%%action.register%%%%) to become part " "of this group and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" +"**%s** är en användargrupp pÃ¥ %%%%site.name%%%%, en [mikroblogg](http://en." +"wikipedia.org/wiki/Micro-blogging)-tjänst baserad den fria programvaran " +"[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om " +"sina liv och intressen. [GÃ¥ med nu](%%%%action.register%%%%) för att bli en " +"del av denna grupp och mÃ¥nga fler! ([Läs mer](%%%%doc.help%%%%))" #: actions/showgroup.php:454 #, php-format @@ -3084,10 +3005,14 @@ msgid "" "[StatusNet](http://status.net/) tool. Its members share short messages about " "their life and interests. " msgstr "" +"**%s** är en användargrupp pÃ¥ %%%%site.name%%%%, en [mikroblogg](http://en." +"wikipedia.org/wiki/Micro-blogging)-tjänst baserad den fria programvaran " +"[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om " +"sina liv och intressen. " #: actions/showgroup.php:482 msgid "Admins" -msgstr "" +msgstr "Administratörer" #: actions/showmessage.php:81 msgid "No such message." @@ -3095,7 +3020,7 @@ msgstr "Inget sÃ¥dant meddelande." #: actions/showmessage.php:98 msgid "Only the sender and recipient may read this message." -msgstr "Endast den som skickat och mottagaren kan läsa detta meddelande." +msgstr "Endast avsändaren och mottagaren kan läsa detta meddelande." #: actions/showmessage.php:108 #, php-format @@ -3108,55 +3033,56 @@ msgid "Message from %1$s on %2$s" msgstr "Meddelande frÃ¥n %1$s pÃ¥ %2$s" #: actions/shownotice.php:90 -#, fuzzy msgid "Notice deleted." -msgstr "Inlägg" +msgstr "Notis borttagen." #: actions/showstream.php:73 -#, fuzzy, php-format +#, php-format msgid " tagged %s" -msgstr "Inlägg taggade med %s" +msgstr "taggade %s" #: actions/showstream.php:79 -#, fuzzy, php-format +#, php-format msgid "%s, page %d" -msgstr "Inbox för %s - sida %d" +msgstr "%s, sida %d" #: actions/showstream.php:122 -#, fuzzy, php-format +#, php-format msgid "Notice feed for %s tagged %s (RSS 1.0)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för %s taggade %s (RSS 1.0)" #: actions/showstream.php:129 -#, fuzzy, php-format +#, php-format msgid "Notice feed for %s (RSS 1.0)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för %s (RSS 1.0)" #: actions/showstream.php:136 -#, fuzzy, php-format +#, php-format msgid "Notice feed for %s (RSS 2.0)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för %s (RSS 2.0)" #: actions/showstream.php:143 -#, fuzzy, php-format +#, php-format msgid "Notice feed for %s (Atom)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för %s (Atom)" #: actions/showstream.php:148 -#, fuzzy, php-format +#, php-format msgid "FOAF for %s" -msgstr "Outbox för %s" +msgstr "FOAF för %s" #: actions/showstream.php:191 #, php-format msgid "This is the timeline for %s but %s hasn't posted anything yet." -msgstr "" +msgstr "Detta är tidslinjen för %s men %s har inte postat nÃ¥got än." #: actions/showstream.php:196 msgid "" "Seen anything interesting recently? You haven't posted any notices yet, now " "would be a good time to start :)" msgstr "" +"Sett nÃ¥got intressant nyligen? Du har inte postat nÃ¥gra notiser än. Varför " +"inte börja nu?" #: actions/showstream.php:198 #, php-format @@ -3164,6 +3090,8 @@ msgid "" "You can try to nudge %s or [post something to his or her attention](%%%%" "action.newnotice%%%%?status_textarea=%s)." msgstr "" +"Du kan prova att knuffa %s eller [posta nÃ¥got för hans eller hennes " +"uppmärksamhet](%%%%action.newnotice%%%%?status_textarea=%s)." #: actions/showstream.php:234 #, php-format @@ -3173,6 +3101,10 @@ msgid "" "[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to " "follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))" msgstr "" +"**%s** har ett konto pÃ¥ %%%%site.name%%%%, en [mikroblogg](http://en." +"wikipedia.org/wiki/Micro-blogging)-tjänst baserad pÃ¥ den fria programvaran " +"[StatusNet](http://status.net/). [GÃ¥ med nu](%%%%action.register%%%%) för " +"att följa **%s**s notiser och mÃ¥nga fler! ([Läs mer](%%%%doc.help%%%%))" #: actions/showstream.php:239 #, php-format @@ -3181,171 +3113,164 @@ msgid "" "wikipedia.org/wiki/Micro-blogging) service based on the Free Software " "[StatusNet](http://status.net/) tool. " msgstr "" +"**%s** har ett konto pÃ¥ %%%%site.name%%%%, en [mikroblogg](http://en." +"wikipedia.org/wiki/Micro-blogging)-tjänst baserad pÃ¥ den fria programvaran " +"[StatusNet](http://status.net/). " #: actions/silence.php:65 actions/unsilence.php:65 -#, fuzzy msgid "You cannot silence users on this site." -msgstr "Du kan inte skicka meddelande till den användaren." +msgstr "Du kan inte tysta ned användare pÃ¥ denna webbplats." #: actions/silence.php:72 -#, fuzzy msgid "User is already silenced." -msgstr "Användaren har ingen profil." +msgstr "Användaren är redan nedtystad." #: actions/siteadminpanel.php:69 msgid "Basic settings for this StatusNet site." -msgstr "" +msgstr "Grundinställningar för din StatusNet-webbplats" #: actions/siteadminpanel.php:147 msgid "Site name must have non-zero length." -msgstr "" +msgstr "Webbplatsnamnet mÃ¥ste vara minst ett tecken lÃ¥ngt." #: actions/siteadminpanel.php:155 -#, fuzzy msgid "You must have a valid contact email address" -msgstr "Ingen giltig emailadress" +msgstr "Du mÃ¥ste ha en giltig kontakte-postadress" #: actions/siteadminpanel.php:173 #, php-format msgid "Unknown language \"%s\"" -msgstr "" +msgstr "Okänt sprÃ¥k \"%s\"" #: actions/siteadminpanel.php:180 msgid "Invalid snapshot report URL." -msgstr "" +msgstr "Ogiltig rapport-URL för ögonblicksbild" #: actions/siteadminpanel.php:186 msgid "Invalid snapshot run value." -msgstr "" +msgstr "Ogiltigt körvärde för ögonblicksbild." #: actions/siteadminpanel.php:192 msgid "Snapshot frequency must be a number." -msgstr "" +msgstr "Frekvens för ögonblicksbilder mÃ¥ste vara ett nummer." #: actions/siteadminpanel.php:199 msgid "You must set an SSL server when enabling SSL." -msgstr "" +msgstr "Du mÃ¥ste ange en SSL-server när du aktiverar SSL." #: actions/siteadminpanel.php:204 msgid "Invalid SSL server. The maximum length is 255 characters." -msgstr "" +msgstr "Ogiltigt SSL-servernamn. Den maximala längden är 255 tecken." #: actions/siteadminpanel.php:210 msgid "Minimum text limit is 140 characters." -msgstr "" +msgstr "Minsta textbegränsning är 140 tecken." #: actions/siteadminpanel.php:216 msgid "Dupe limit must 1 or more seconds." -msgstr "" +msgstr "Begränsning av duplikat mÃ¥ste vara en eller fler sekuner." #: actions/siteadminpanel.php:266 msgid "General" -msgstr "" +msgstr "Allmänt" #: actions/siteadminpanel.php:269 -#, fuzzy msgid "Site name" -msgstr "Nytt inlägg" +msgstr "Webbplatsnamn" #: actions/siteadminpanel.php:270 msgid "The name of your site, like \"Yourcompany Microblog\"" -msgstr "" +msgstr "Namnet pÃ¥ din webbplats, t.ex. \"Företagsnamn mikroblogg\"" #: actions/siteadminpanel.php:274 msgid "Brought by" -msgstr "" +msgstr "TillhandahÃ¥llen av" #: actions/siteadminpanel.php:275 msgid "Text used for credits link in footer of each page" -msgstr "" +msgstr "Text som används för tillskrivningslänkar i sidfoten pÃ¥ varje sida." #: actions/siteadminpanel.php:279 msgid "Brought by URL" -msgstr "" +msgstr "TillhandahÃ¥llen av URL" #: actions/siteadminpanel.php:280 msgid "URL used for credits link in footer of each page" -msgstr "" +msgstr "URL som används för tillskrivningslänkar i sidfoten pÃ¥ varje sida" #: actions/siteadminpanel.php:284 -#, fuzzy msgid "Contact email address for your site" -msgstr "Ny emailadress för att skicka till %s" +msgstr "Kontakte-postadress för din webbplats" #: actions/siteadminpanel.php:290 -#, fuzzy msgid "Local" -msgstr "Plats" +msgstr "Lokal" #: actions/siteadminpanel.php:301 msgid "Default timezone" -msgstr "" +msgstr "Standardtidszon" #: actions/siteadminpanel.php:302 msgid "Default timezone for the site; usually UTC." -msgstr "" +msgstr "Standardtidzon för denna webbplats; vanligtvis UTC." #: actions/siteadminpanel.php:308 -#, fuzzy msgid "Default site language" -msgstr "SprÃ¥kval" +msgstr "Webbplatsens standardsprÃ¥k" #: actions/siteadminpanel.php:316 msgid "URLs" -msgstr "" +msgstr "URL:er" #: actions/siteadminpanel.php:319 -#, fuzzy msgid "Server" -msgstr "Ã…terställ" +msgstr "Server" #: actions/siteadminpanel.php:319 msgid "Site's server hostname." -msgstr "" +msgstr "Värdnamn för webbplatsens server." #: actions/siteadminpanel.php:323 msgid "Fancy URLs" -msgstr "" +msgstr "Utsmyckade URL:er" #: actions/siteadminpanel.php:325 msgid "Use fancy (more readable and memorable) URLs?" msgstr "" +"Skall utsmyckade URL:er användas (mer läsbara och lättare att komma ihÃ¥g)?" #: actions/siteadminpanel.php:331 -#, fuzzy msgid "Access" -msgstr "Acceptera" +msgstr "Ã…tkomst" #: actions/siteadminpanel.php:334 -#, fuzzy msgid "Private" -msgstr "Sekretesspolicy" +msgstr "Privat" #: actions/siteadminpanel.php:336 msgid "Prohibit anonymous users (not logged in) from viewing site?" msgstr "" +"Skall anonyma användare (inte inloggade) förhindras frÃ¥n att se webbplatsen?" #: actions/siteadminpanel.php:340 -#, fuzzy msgid "Invite only" -msgstr "Bjud in" +msgstr "Endast inbjudan" #: actions/siteadminpanel.php:342 msgid "Make registration invitation only." -msgstr "" +msgstr "Gör sÃ¥ att registrering endast sker genom inbjudan." #: actions/siteadminpanel.php:346 -#, fuzzy msgid "Closed" -msgstr "Ingen sÃ¥dan användare" +msgstr "Stängd" #: actions/siteadminpanel.php:348 msgid "Disable new registrations." -msgstr "" +msgstr "Inaktivera nya registreringar." #: actions/siteadminpanel.php:354 msgid "Snapshots" -msgstr "" +msgstr "Ögonblicksbild" #: actions/siteadminpanel.php:357 msgid "Randomly during Web hit" @@ -3353,113 +3278,109 @@ msgstr "" #: actions/siteadminpanel.php:358 msgid "In a scheduled job" -msgstr "" +msgstr "I ett schemalagt jobb" #: actions/siteadminpanel.php:359 actions/siteadminpanel.php:383 -#, fuzzy msgid "Never" -msgstr "Ã…terställ" +msgstr "Aldrig" #: actions/siteadminpanel.php:360 msgid "Data snapshots" -msgstr "" +msgstr "Ögonblicksbild av data" #: actions/siteadminpanel.php:361 msgid "When to send statistical data to status.net servers" -msgstr "" +msgstr "När statistikdata skall skickas till status.net-servrar" #: actions/siteadminpanel.php:366 msgid "Frequency" -msgstr "" +msgstr "Frekvens" #: actions/siteadminpanel.php:367 msgid "Snapshots will be sent once every N web hits" -msgstr "" +msgstr "Ögonblicksbild kommer skickas var N:te webbträff" #: actions/siteadminpanel.php:372 msgid "Report URL" -msgstr "" +msgstr "Rapport-URL" #: actions/siteadminpanel.php:373 msgid "Snapshots will be sent to this URL" -msgstr "" +msgstr "Ögonblicksbild kommer skickat till denna URL" #: actions/siteadminpanel.php:380 -#, fuzzy msgid "SSL" -msgstr "SMS" +msgstr "SSL" #: actions/siteadminpanel.php:384 -#, fuzzy msgid "Sometimes" -msgstr "Inlägg" +msgstr "Ibland" #: actions/siteadminpanel.php:385 msgid "Always" -msgstr "" +msgstr "Alltid" #: actions/siteadminpanel.php:387 msgid "Use SSL" -msgstr "" +msgstr "Använd SSL" #: actions/siteadminpanel.php:388 msgid "When to use SSL" -msgstr "" +msgstr "När SSL skall användas" #: actions/siteadminpanel.php:393 msgid "SSL Server" -msgstr "" +msgstr "SSL-server" #: actions/siteadminpanel.php:394 msgid "Server to direct SSL requests to" -msgstr "" +msgstr "Server att dirigera SSL-förfrÃ¥gningar till" #: actions/siteadminpanel.php:400 msgid "Limits" -msgstr "" +msgstr "Begränsningar" #: actions/siteadminpanel.php:403 msgid "Text limit" -msgstr "" +msgstr "Textbegränsning" #: actions/siteadminpanel.php:403 msgid "Maximum number of characters for notices." -msgstr "" +msgstr "Maximala antalet tecken för notiser." #: actions/siteadminpanel.php:407 msgid "Dupe limit" -msgstr "" +msgstr "Duplikatbegränsning" #: actions/siteadminpanel.php:407 msgid "How long users must wait (in seconds) to post the same thing again." msgstr "" +"Hur länge användare mÃ¥ste vänta (i sekunder) för att posta samma sak igen." #: actions/siteadminpanel.php:421 actions/useradminpanel.php:313 -#, fuzzy msgid "Save site settings" -msgstr "Twitter inställningar" +msgstr "Spara webbplatsinställningar" #: actions/smssettings.php:58 msgid "SMS Settings" -msgstr "SMS Inställningar" +msgstr "SMS-inställningar" #: actions/smssettings.php:69 #, php-format msgid "You can receive SMS messages through email from %%site.name%%." -msgstr "Du kan ta emot SMS meddelande via email frÃ¥n %%site.name%%." +msgstr "Du kan ta emot SMS-meddelande genom e-post frÃ¥n %%site.name%%." #: actions/smssettings.php:91 -#, fuzzy msgid "SMS is not available." -msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat" +msgstr "SMS är inte tillgängligt." #: actions/smssettings.php:112 msgid "Current confirmed SMS-enabled phone number." -msgstr "Nuvarande bekäftat SMS telefonnummer" +msgstr "Nuvarande bekäftat telefonnummer för SMS." #: actions/smssettings.php:123 msgid "Awaiting confirmation on this phone number." -msgstr "Väntar bekräftelse pÃ¥ detta telefonnummer. " +msgstr "Väntar bekräftelse för detta telefonnummer." #: actions/smssettings.php:130 msgid "Confirmation code" @@ -3471,7 +3392,7 @@ msgstr "Fyll i koden du mottog i din telefon." #: actions/smssettings.php:138 msgid "SMS Phone number" -msgstr "SMS Telefonnummer" +msgstr "Telefonnummer för SMS" #: actions/smssettings.php:140 msgid "Phone number, no punctuation or spaces, with area code" @@ -3482,7 +3403,7 @@ msgid "" "Send me notices through SMS; I understand I may incur exorbitant charges " "from my carrier." msgstr "" -"Skicka inlägg till mig via SMS; Jag är införstÃ¥dd att min operatör kan " +"Skicka notiser till mig via SMS. Jag är införstÃ¥dd med att min operatör kan " "debitera mig." #: actions/smssettings.php:306 @@ -3495,34 +3416,31 @@ msgstr "Ingen operatör vald." #: actions/smssettings.php:318 msgid "That is already your phone number." -msgstr "Det är redan ditt telefonnummer." +msgstr "Detta är redan ditt telefonnummer." #: actions/smssettings.php:321 msgid "That phone number already belongs to another user." -msgstr "Det numret tillhör en annan användare." +msgstr "Detta telefonnumr tillhör redan en annan användare." #: actions/smssettings.php:347 -#, fuzzy msgid "" "A confirmation code was sent to the phone number you added. Check your phone " "for the code and instructions on how to use it." msgstr "" -"En bekräftelsekod har skickats ut till telefonnumret du fyllde i. " -"Kontrollera din inbox (och spamlÃ¥dan!) efter kod och instruktioner hur du " -"använder den." +"En bekräftelsekod skickades till det telefonnummer du lagt till. Kontrollera " +"din telefon för koden och instruktioner om hur du använder den." #: actions/smssettings.php:374 msgid "That is the wrong confirmation number." -msgstr "Det är fel nummer i bekräftelsen" +msgstr "Detta är fel bekräftelsenummer." #: actions/smssettings.php:405 msgid "That is not your phone number." -msgstr "Det är inte ditt telefonnummer." +msgstr "Detta är inte ditt telefonnummer." #: actions/smssettings.php:465 -#, fuzzy msgid "Mobile carrier" -msgstr "Välj en operatör" +msgstr "Mobiloperatör" #: actions/smssettings.php:469 msgid "Select a carrier" @@ -3534,63 +3452,61 @@ msgid "" "Mobile carrier for your phone. If you know a carrier that accepts SMS over " "email but isn't listed here, send email to let us know at %s." msgstr "" -"Mobiloperatör för din telefon. Vet du nÃ¥n operatör som kan taemot SMS över " -"email som inte finns med i listan, skicka ett email till oss och tala det " -"hit %s" +"Mobiloperatör för din telefon. Känner du till en operatör som kan ta emot " +"SMS via e-post men som inte finns med i listan, skicka ett e-post till oss " +"pÃ¥ %s och berätta." #: actions/smssettings.php:498 msgid "No code entered" -msgstr "Ingen kod är ifylld" +msgstr "Ingen kod ifylld" #: actions/subedit.php:70 -#, fuzzy msgid "You are not subscribed to that profile." -msgstr "Du skickade inte oss den profilen" +msgstr "Du är inte prenumerat hos den profilen." #: actions/subedit.php:83 -#, fuzzy msgid "Could not save subscription." -msgstr "Kunde inte skapa prenumeration." +msgstr "Kunde inte spara prenumeration." #: actions/subscribe.php:55 -#, fuzzy msgid "Not a local user." -msgstr "Ingen sÃ¥dan användare" +msgstr "Inte en lokal användare." #: actions/subscribe.php:69 -#, fuzzy msgid "Subscribed" -msgstr "Prenumerera" +msgstr "Prenumerant" #: actions/subscribers.php:50 -#, fuzzy, php-format +#, php-format msgid "%s subscribers" -msgstr "Prenumerant" +msgstr "%s prenumeranter" #: actions/subscribers.php:52 #, php-format msgid "%s subscribers, page %d" -msgstr "" +msgstr "%s prenumeranter, sida %d" #: actions/subscribers.php:63 msgid "These are the people who listen to your notices." -msgstr "Dessa personer är dom som lyssnar pÃ¥ dina inlägg." +msgstr "Det är dessa personer som lyssnar pÃ¥ dina notiser." #: actions/subscribers.php:67 #, php-format msgid "These are the people who listen to %s's notices." -msgstr "Dessa personer är dom som lyssnar pÃ¥ %s inlägg." +msgstr "Det är dessa personer som lyssnar pÃ¥ %ss notiser." #: actions/subscribers.php:108 msgid "" "You have no subscribers. Try subscribing to people you know and they might " "return the favor" msgstr "" +"Du har inga prenumeranter. Prova att prenumerera pÃ¥ personer du känner och " +"de kommer kanske Ã¥tergälda tjänsten" #: actions/subscribers.php:110 #, php-format msgid "%s has no subscribers. Want to be the first?" -msgstr "" +msgstr "%s har inte nÃ¥gra prenumeranter. Vill du bli först?" #: actions/subscribers.php:114 #, php-format @@ -3598,25 +3514,27 @@ msgid "" "%s has no subscribers. Why not [register an account](%%%%action.register%%%" "%) and be the first?" msgstr "" +"%s har inte nÃ¥gra prenumeranter. Varför inte [registrera ett konto](%%%%" +"action.register%%%%) och bli först?" #: actions/subscriptions.php:52 -#, fuzzy, php-format +#, php-format msgid "%s subscriptions" -msgstr "Alla prenumerationer" +msgstr "%s prenumerationer" #: actions/subscriptions.php:54 -#, fuzzy, php-format +#, php-format msgid "%s subscriptions, page %d" -msgstr "Alla prenumerationer" +msgstr "%s prenumerationer, sida %d" #: actions/subscriptions.php:65 msgid "These are the people whose notices you listen to." -msgstr "Detta är personer och inlägg som du lyssnar pÃ¥." +msgstr "Dessa är de personer vars notiser du lyssnar pÃ¥." #: actions/subscriptions.php:69 #, php-format msgid "These are the people whose notices %s listens to." -msgstr "Detta är personer och inlägg som %s lyssnar pÃ¥." +msgstr "Dessa är de personer vars notiser %s lyssnar pÃ¥." #: actions/subscriptions.php:121 #, php-format @@ -3629,153 +3547,148 @@ msgid "" msgstr "" #: actions/subscriptions.php:123 actions/subscriptions.php:127 -#, fuzzy, php-format +#, php-format msgid "%s is not listening to anyone." -msgstr "%1$s lyssnar nu pÃ¥ dina meddelanden i %2$s." +msgstr "%s lyssnar inte pÃ¥ nÃ¥gon." #: actions/subscriptions.php:194 -#, fuzzy msgid "Jabber" -msgstr "Inget Jabber ID." +msgstr "Jabber" #: actions/subscriptions.php:199 lib/connectsettingsaction.php:115 msgid "SMS" msgstr "SMS" #: actions/tagother.php:33 -#, fuzzy msgid "Not logged in" -msgstr "Inte inloggad." +msgstr "Inte inloggad" #: actions/tagother.php:39 -#, fuzzy msgid "No id argument." -msgstr "Inget sÃ¥dant dokument." +msgstr "Inget ID-argument." #: actions/tagother.php:65 -#, fuzzy, php-format +#, php-format msgid "Tag %s" -msgstr "Taggar" +msgstr "Tagg %s" #: actions/tagother.php:77 lib/userprofile.php:75 -#, fuzzy msgid "User profile" -msgstr "Användaren har ingen profil." +msgstr "Användarprofil" #: actions/tagother.php:81 lib/userprofile.php:102 msgid "Photo" -msgstr "" +msgstr "Foto" #: actions/tagother.php:141 -#, fuzzy msgid "Tag user" -msgstr "Taggar" +msgstr "Tagga användare" #: actions/tagother.php:151 msgid "" "Tags for this user (letters, numbers, -, ., and _), comma- or space- " "separated" msgstr "" +"Taggar för denna användare (bokstäver, nummer, -, ., och _), separerade med " +"kommatecken eller mellanslag" #: actions/tagother.php:193 msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" +"Du kan bara tagga personer du prenumererar pÃ¥ eller som prenumererar pÃ¥ dig." #: actions/tagother.php:200 -#, fuzzy msgid "Could not save tags." -msgstr "Kunde inte spara informationen om användarbild" +msgstr "Kunde inte spara taggar." #: actions/tagother.php:236 msgid "Use this form to add tags to your subscribers or subscriptions." msgstr "" +"Använd detta formulär för att lägga till taggar till dina prenumeranter " +"eller prenumerationer." #: actions/tag.php:68 -#, fuzzy, php-format +#, php-format msgid "Notices tagged with %s, page %d" -msgstr "Inlägg taggade med %s" +msgstr "Notiser taggade med %s, sida %d" #: actions/tag.php:86 -#, fuzzy, php-format +#, php-format msgid "Notice feed for tag %s (RSS 1.0)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för tagg %s (RSS 1.0)" #: actions/tag.php:92 -#, fuzzy, php-format +#, php-format msgid "Notice feed for tag %s (RSS 2.0)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för tagg %s (RSS 2.0)" #: actions/tag.php:98 -#, fuzzy, php-format +#, php-format msgid "Notice feed for tag %s (Atom)" -msgstr "Inlägg flöde för %s" +msgstr "Flöde av notiser för tagg %s (Atom)" #: actions/tagrss.php:35 -#, fuzzy msgid "No such tag." -msgstr "Inget sÃ¥dant meddelande." +msgstr "Ingen sÃ¥dan tagg." #: actions/twitapitrends.php:87 msgid "API method under construction." msgstr "API-metoden är under uppbyggnad." #: actions/unblock.php:59 -#, fuzzy msgid "You haven't blocked that user." -msgstr "Du prenumererar redan pÃ¥ dessa användare:" +msgstr "Du har inte blockerat denna användared." #: actions/unsandbox.php:72 #, fuzzy msgid "User is not sandboxed." -msgstr "Användaren har ingen profil." +msgstr "Användare är inte flyttad till sandlÃ¥da." #: actions/unsilence.php:72 -#, fuzzy msgid "User is not silenced." -msgstr "Användaren har ingen profil." +msgstr "Användare är inte nedtystad." #: actions/unsubscribe.php:77 -#, fuzzy msgid "No profile id in request." -msgstr "Ingen profil URL lämnades ut av servern." +msgstr "Ingen profil-ID i begäran." #: actions/unsubscribe.php:84 -#, fuzzy msgid "No profile with that id." -msgstr "Ingen status hittad med det ID" +msgstr "Ingen profil med det ID:t." #: actions/unsubscribe.php:98 -#, fuzzy msgid "Unsubscribed" -msgstr "Lämnar pren." +msgstr "Prenumeration avslutad" #: actions/updateprofile.php:62 actions/userauthorization.php:330 #, php-format msgid "Listenee stream license ‘%s’ is not compatible with site license ‘%s’." msgstr "" +"Licensen för lyssnarströmmen '%s' är inte förenlig med webbplatslicensen '%" +"s'." #: actions/useradminpanel.php:58 lib/adminpanelaction.php:305 #: lib/personalgroupnav.php:115 msgid "User" -msgstr "" +msgstr "Användare" #: actions/useradminpanel.php:69 msgid "User settings for this StatusNet site." -msgstr "" +msgstr "Användarinställningar för denna StatusNet-webbplats" #: actions/useradminpanel.php:149 msgid "Invalid bio limit. Must be numeric." -msgstr "" +msgstr "Ogiltig begränsning av biografi. MÃ¥ste vara numerisk." #: actions/useradminpanel.php:155 msgid "Invalid welcome text. Max length is 255 characters." -msgstr "" +msgstr "Ogiltig välkomsttext. Maximal längd är 255 tecken." #: actions/useradminpanel.php:165 #, php-format msgid "Invalid default subscripton: '%1$s' is not user." -msgstr "" +msgstr "Ogiltig standardprenumeration: '%1$s' är inte användare." #: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108 #: lib/personalgroupnav.php:109 @@ -3784,89 +3697,83 @@ msgstr "Profil" #: actions/useradminpanel.php:222 msgid "Bio Limit" -msgstr "" +msgstr "Begränsning av biografi" #: actions/useradminpanel.php:223 msgid "Maximum length of a profile bio in characters." -msgstr "" +msgstr "Maximal teckenlängd av profilbiografi." #: actions/useradminpanel.php:231 -#, fuzzy msgid "New users" -msgstr "Bjud in nya användare" +msgstr "Nya användare" #: actions/useradminpanel.php:235 msgid "New user welcome" -msgstr "" +msgstr "Välkomnande av ny användare" #: actions/useradminpanel.php:236 msgid "Welcome text for new users (Max 255 chars)." -msgstr "" +msgstr "Välkomsttext för nya användare (max 255 tecken)." #: actions/useradminpanel.php:241 -#, fuzzy msgid "Default subscription" -msgstr "Alla prenumerationer" +msgstr "Standardprenumerationer" #: actions/useradminpanel.php:242 -#, fuzzy msgid "Automatically subscribe new users to this user." msgstr "" -"Automatisk prenummeration pÃ¥ den som prenumererar pÃ¥ mig. (Bäst för icke " -"mänsklig användare) " +"Lägg automatiskt till en prenumeration pÃ¥ denna användare för alla nya " +"användare." #: actions/useradminpanel.php:251 -#, fuzzy msgid "Invitations" -msgstr "Inbjudan(ar) skickad" +msgstr "Inbjudningar" #: actions/useradminpanel.php:256 -#, fuzzy msgid "Invitations enabled" -msgstr "Inbjudan(ar) skickad" +msgstr "Inbjudningar aktiverade" #: actions/useradminpanel.php:258 msgid "Whether to allow users to invite new users." -msgstr "" +msgstr "Hurvida användare skall tillÃ¥tas bjuda in nya användare." #: actions/useradminpanel.php:265 msgid "Sessions" -msgstr "" +msgstr "Sessioner" #: actions/useradminpanel.php:270 msgid "Handle sessions" -msgstr "" +msgstr "Hantera sessioner" #: actions/useradminpanel.php:272 msgid "Whether to handle sessions ourselves." -msgstr "" +msgstr "Hurvida sessioner skall hanteras av oss själva." #: actions/useradminpanel.php:276 msgid "Session debugging" -msgstr "" +msgstr "Sessionsfelsökning" #: actions/useradminpanel.php:278 msgid "Turn on debugging output for sessions." -msgstr "" +msgstr "Sätt pÃ¥ felsökningsutdata för sessioner." #: actions/userauthorization.php:105 msgid "Authorize subscription" -msgstr "TillÃ¥t prenumeration." +msgstr "Godkänn prenumeration" #: actions/userauthorization.php:110 -#, fuzzy msgid "" "Please check these details to make sure that you want to subscribe to this " "user’s notices. If you didn’t just ask to subscribe to someone’s notices, " "click “Rejectâ€." msgstr "" -"Kontrollera dessa detajer noga sÃ¥ att du verkligen vet att du vill " -"prenumerera pÃ¥ denna användares inlägg. Om du inte frÃ¥gade efter att " -"prenumerera pÃ¥ nÃ¥gons inlägg, klicka pÃ¥ \"Cancel\"" +"Vänligen kontrollera dessa uppgifter för att försäkra dig om att du vill " +"prenumerera pÃ¥ den här användarens notiser. Om du inte bett att prenumerera " +"pÃ¥ nÃ¥gons meddelanden, klicka pÃ¥ \"Avvisa\"." #: actions/userauthorization.php:188 msgid "License" -msgstr "" +msgstr "Licens" #: actions/userauthorization.php:209 msgid "Accept" @@ -3874,101 +3781,98 @@ msgstr "Acceptera" #: actions/userauthorization.php:210 lib/subscribeform.php:115 #: lib/subscribeform.php:139 -#, fuzzy msgid "Subscribe to this user" -msgstr "Prenumerera pÃ¥ mina Twitter vänner här." +msgstr "Prenumerera pÃ¥ denna användare" #: actions/userauthorization.php:211 msgid "Reject" msgstr "Avvisa" #: actions/userauthorization.php:212 -#, fuzzy msgid "Reject this subscription" -msgstr "Alla prenumerationer" +msgstr "Avvisa denna prenumeration" #: actions/userauthorization.php:225 msgid "No authorization request!" -msgstr "Ingen rättighet förfrÃ¥gan!" +msgstr "Ingen auktoriseringsförfrÃ¥gan!" #: actions/userauthorization.php:247 msgid "Subscription authorized" -msgstr "Prenumeration accepterad" +msgstr "Prenumeration godkänd" #: actions/userauthorization.php:249 -#, fuzzy msgid "" "The subscription has been authorized, but no callback URL was passed. Check " "with the site’s instructions for details on how to authorize the " "subscription. Your subscription token is:" msgstr "" "Prenumerationen har blivit bekräftad, men ingen URL har gÃ¥tt igenom. Kolla " -"med sidans instruktioner hur du bekräftar en prenumeration. Din " -"prenumerering token är:" +"med webbplatsens instruktioner hur du bekräftar en prenumeration. Din " +"prenumerations-token är:" #: actions/userauthorization.php:259 msgid "Subscription rejected" msgstr "Prenumeration avvisad" #: actions/userauthorization.php:261 -#, fuzzy msgid "" "The subscription has been rejected, but no callback URL was passed. Check " "with the site’s instructions for details on how to fully reject the " "subscription." msgstr "" -"Prenumerationen har blivit avvisad, men inga URL har gÃ¥tt igenom. Kolla med " -"sidans instruktioner hur du avvisar en prenumeration." +"Prenumerationen har blivit avvisad, men ingen URL har gÃ¥tt igenom. Kolla med " +"webbplatsens instruktioner för detaljer om hur du fullständingt avvisar " +"prenumerationen." #: actions/userauthorization.php:296 #, php-format msgid "Listener URI ‘%s’ not found here" -msgstr "" +msgstr "Lyssnar-URI '%s' hittades inte här" #: actions/userauthorization.php:301 #, php-format msgid "Listenee URI ‘%s’ is too long." -msgstr "" +msgstr "Lyssnar-URI '%s' är för lÃ¥ng." #: actions/userauthorization.php:307 #, php-format msgid "Listenee URI ‘%s’ is a local user." -msgstr "" +msgstr "Lyssnar-URI '%s' är en lokal användare." #: actions/userauthorization.php:322 #, php-format msgid "Profile URL ‘%s’ is for a local user." -msgstr "" +msgstr "Profil-URL ‘%s’ är för en lokal användare." #: actions/userauthorization.php:338 #, php-format msgid "Avatar URL ‘%s’ is not valid." -msgstr "" +msgstr "Avatar-URL ‘%s’ är inte giltig." #: actions/userauthorization.php:343 -#, fuzzy, php-format +#, php-format msgid "Can’t read avatar URL ‘%s’." -msgstr "Kan inte läsa användarbild URL '%s'" +msgstr "Kan inte läsa avatar-URL '%s'." #: actions/userauthorization.php:348 -#, fuzzy, php-format +#, php-format msgid "Wrong image type for avatar URL ‘%s’." -msgstr "Fel filtyp för bild '%s'" +msgstr "Fel bildtyp för avatar-URL '%s'." #: actions/userbyid.php:70 msgid "No id." -msgstr "Inget id." +msgstr "Ingen ID." #: actions/userdesignsettings.php:76 lib/designsettings.php:65 -#, fuzzy msgid "Profile design" -msgstr "Profil inställningar" +msgstr "Profilutseende" #: actions/userdesignsettings.php:87 lib/designsettings.php:76 msgid "" "Customize the way your profile looks with a background image and a colour " "palette of your choice." msgstr "" +"Anpassa hur din profil ser ut genom att välja bakgrundbild och färgpalett." #: actions/userdesignsettings.php:282 msgid "Enjoy your hotdog!" @@ -3977,21 +3881,22 @@ msgstr "" #: actions/usergroups.php:64 #, php-format msgid "%s groups, page %d" -msgstr "" +msgstr "%s grupper, sida %d" #: actions/usergroups.php:130 msgid "Search for more groups" -msgstr "" +msgstr "Sök efter fler grupper" #: actions/usergroups.php:153 -#, fuzzy, php-format +#, php-format msgid "%s is not a member of any group." -msgstr "Du skickade inte oss den profilen" +msgstr "%s är inte en medlem i nÃ¥gon grupp." #: actions/usergroups.php:158 #, php-format msgid "Try [searching for groups](%%action.groupsearch%%) and joining them." msgstr "" +"Prova att [söka efter grupper](%%action.groupsearch%%) och gÃ¥ med i dem." #: classes/File.php:137 #, php-format @@ -3999,91 +3904,92 @@ msgid "" "No file may be larger than %d bytes and the file you sent was %d bytes. Try " "to upload a smaller version." msgstr "" +"Inga filer fÃ¥r vara större än %d byte och filen du skickade var %d byte. " +"Prova att ladda upp en mindre version." #: classes/File.php:147 #, php-format msgid "A file this large would exceed your user quota of %d bytes." -msgstr "" +msgstr "En sÃ¥ här stor fil skulle överskrida din användarkvot pÃ¥ %d byte." #: classes/File.php:154 #, php-format msgid "A file this large would exceed your monthly quota of %d bytes." -msgstr "" +msgstr "En sÃ¥dan här stor fil skulle överskrida din mÃ¥natliga kvot pÃ¥ %d byte." #: classes/Message.php:45 msgid "You are banned from sending direct messages." -msgstr "" +msgstr "Du är utestängd frÃ¥n att skicka direktmeddelanden." #: classes/Message.php:61 msgid "Could not insert message." -msgstr "" +msgstr "Kunde inte infoga meddelande." #: classes/Message.php:71 msgid "Could not update message with new URI." -msgstr "" +msgstr "Kunde inte uppdatera meddelande med ny URI." #: classes/Notice.php:164 #, php-format msgid "DB error inserting hashtag: %s" -msgstr "DB error vid infog av hashtag: %s" +msgstr "Databasfel vid infogning av hashtag: %s" #: classes/Notice.php:179 -#, fuzzy msgid "Problem saving notice. Too long." -msgstr "Det var ett problem när inlägget sparades." +msgstr "Problem vid sparande av notis. För lÃ¥ngt." #: classes/Notice.php:183 -#, fuzzy msgid "Problem saving notice. Unknown user." -msgstr "Det var ett problem när inlägget sparades." +msgstr "Problem vid sparande av notis. Okänd användare." #: classes/Notice.php:188 msgid "" "Too many notices too fast; take a breather and post again in a few minutes." msgstr "" +"För mÃ¥nga notiser för snabbt; ta en vilopaus och posta igen om ett par " +"minuter." #: classes/Notice.php:194 msgid "" "Too many duplicate messages too quickly; take a breather and post again in a " "few minutes." msgstr "" +"För mÃ¥nga duplicerade meddelanden för snabbt; ta en vilopaus och posta igen " +"om ett par minuter." #: classes/Notice.php:200 msgid "You are banned from posting notices on this site." -msgstr "" +msgstr "Du är utestängd frÃ¥n att posta notiser pÃ¥ denna webbplats." #: classes/Notice.php:265 classes/Notice.php:290 msgid "Problem saving notice." -msgstr "Det var ett problem när inlägget sparades." +msgstr "Problem med att spara notis." #: classes/Notice.php:1124 #, php-format msgid "DB error inserting reply: %s" -msgstr "Databasfel för svar: %s" +msgstr "Databasfel vid infogning av svar: %s" #: classes/User_group.php:380 -#, fuzzy msgid "Could not create group." -msgstr "Kunde inte skapa favorit." +msgstr "Kunde inte skapa grupp." #: classes/User_group.php:409 -#, fuzzy msgid "Could not set group membership." -msgstr "Kunde inte skapa prenumeration." +msgstr "Kunde inte ställa in gruppmedlemskap." #: classes/User.php:347 -#, fuzzy, php-format +#, php-format msgid "Welcome to %1$s, @%2$s!" -msgstr "Meddelande till %1$s pÃ¥ %2$s" +msgstr "Välkommen till %1$s, @%2$s!" #: lib/accountsettingsaction.php:108 msgid "Change your profile settings" msgstr "Ändra dina profilinställningar" #: lib/accountsettingsaction.php:112 -#, fuzzy msgid "Upload an avatar" -msgstr "Uppdatering av profilbild misslyckades." +msgstr "Ladda upp en avatar" #: lib/accountsettingsaction.php:116 msgid "Change your password" @@ -4091,33 +3997,32 @@ msgstr "Ändra ditt lösenord" #: lib/accountsettingsaction.php:120 msgid "Change email handling" -msgstr "Ändra email hantering" +msgstr "Ändra e-posthantering" #: lib/accountsettingsaction.php:124 -#, fuzzy msgid "Design your profile" -msgstr "Användaren har ingen profil." +msgstr "Designa din profil" #: lib/accountsettingsaction.php:128 msgid "Other" -msgstr "" +msgstr "Övrigt" #: lib/accountsettingsaction.php:128 msgid "Other options" -msgstr "" +msgstr "Övriga alternativ" #: lib/action.php:144 -#, fuzzy, php-format +#, php-format msgid "%s - %s" -msgstr "%s(%s)" +msgstr "%s - %s" #: lib/action.php:159 msgid "Untitled page" -msgstr "" +msgstr "Namnlös sida" #: lib/action.php:425 msgid "Primary site navigation" -msgstr "" +msgstr "Primär webbplatsnavigation" #: lib/action.php:431 msgid "Home" @@ -4125,42 +4030,36 @@ msgstr "Hem" #: lib/action.php:431 msgid "Personal profile and friends timeline" -msgstr "" +msgstr "Personlig profil och vänners tidslinje" #: lib/action.php:433 -#, fuzzy msgid "Account" -msgstr "Om" +msgstr "Konto" #: lib/action.php:433 -#, fuzzy msgid "Change your email, avatar, password, profile" -msgstr "Ändra ditt lösenord" +msgstr "Ändra din e-post, avatar, lösenord, profil" #: lib/action.php:436 msgid "Connect" msgstr "Anslut" #: lib/action.php:436 -#, fuzzy msgid "Connect to services" -msgstr "Kunde inte skicka vidare till servern: %s" +msgstr "Anslut till tjänster" #: lib/action.php:440 -#, fuzzy msgid "Change site configuration" -msgstr "Prenumerationer" +msgstr "Ändra webbplatskonfiguration" #: lib/action.php:444 lib/subgroupnav.php:105 msgid "Invite" msgstr "Bjud in" #: lib/action.php:445 lib/subgroupnav.php:106 -#, fuzzy, php-format +#, php-format msgid "Invite friends and colleagues to join you on %s" -msgstr "" -"Använd detta formulär för att bjuda in dina vänner och kollegor till denna " -"sida." +msgstr "Bjud in vänner och kollegor att gÃ¥ med dig pÃ¥ %s" #: lib/action.php:450 msgid "Logout" @@ -4168,25 +4067,23 @@ msgstr "Logga ut" #: lib/action.php:450 msgid "Logout from the site" -msgstr "" +msgstr "Logga ut frÃ¥n webbplatsen" #: lib/action.php:455 -#, fuzzy msgid "Create an account" -msgstr "Skapa ett nytt konto" +msgstr "Skapa ett konto" #: lib/action.php:458 msgid "Login to the site" -msgstr "" +msgstr "Logga in pÃ¥ webbplatsen" #: lib/action.php:461 lib/action.php:724 msgid "Help" msgstr "Hjälp" #: lib/action.php:461 -#, fuzzy msgid "Help me!" -msgstr "Hjälp" +msgstr "Hjälp mig!" #: lib/action.php:464 lib/searchaction.php:127 msgid "Search" @@ -4194,26 +4091,23 @@ msgstr "Sök" #: lib/action.php:464 msgid "Search for people or text" -msgstr "" +msgstr "Sök efter personer eller text" #: lib/action.php:485 -#, fuzzy msgid "Site notice" -msgstr "Nytt inlägg" +msgstr "Webbplatsnotis" #: lib/action.php:551 msgid "Local views" -msgstr "" +msgstr "Lokala vyer" #: lib/action.php:617 -#, fuzzy msgid "Page notice" -msgstr "Nytt inlägg" +msgstr "Sidnotis" #: lib/action.php:719 -#, fuzzy msgid "Secondary site navigation" -msgstr "Prenumerationer" +msgstr "Sekundär webbplatsnavigation" #: lib/action.php:726 msgid "About" @@ -4225,11 +4119,11 @@ msgstr "FrÃ¥gor & svar" #: lib/action.php:732 msgid "TOS" -msgstr "" +msgstr "Användarvillkor" #: lib/action.php:735 msgid "Privacy" -msgstr "Sekretesspolicy" +msgstr "Sekretess" #: lib/action.php:737 msgid "Source" @@ -4237,15 +4131,15 @@ msgstr "Källa" #: lib/action.php:739 msgid "Contact" -msgstr "Kontakta" +msgstr "Kontakt" #: lib/action.php:741 msgid "Badge" -msgstr "" +msgstr "Emblem" #: lib/action.php:769 msgid "StatusNet software license" -msgstr "" +msgstr "Programvarulicens för StatusNet" #: lib/action.php:772 #, php-format @@ -4253,13 +4147,13 @@ msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." "broughtby%%](%%site.broughtbyurl%%). " msgstr "" -"**%%site.name%%** är en mikroblogg service för dig ifrÃ¥n [%%site.broughtby%%]" -"(%%site.broughtbyurl%%)" +"**%%site.name%%** är en mikrobloggtjänst tillhandahÃ¥llen av [%%site.broughtby" +"%%](%%site.broughtbyurl%%)" #: lib/action.php:774 #, php-format msgid "**%%site.name%%** is a microblogging service. " -msgstr "**%%site.name%%** är en mikroblogg service." +msgstr "**%%site.name%%** är en mikrobloggtjänst." #: lib/action.php:776 #, php-format @@ -4268,125 +4162,115 @@ msgid "" "s, available under the [GNU Affero General Public License](http://www.fsf." "org/licensing/licenses/agpl-3.0.html)." msgstr "" -"Det drivs med [StatusNet](http://status.net/) mikroblogging software, " -"version %s, tillgängligt under [GNU Affero General Public License](http://" -"www.fsf.org/licensing/licenses/agpl-3.0.html)." +"Den drivs med mikroblogg-programvaran [StatusNet](http://status.net/), " +"version %s, tillgänglig under [GNU Affero General Public License](http://www." +"fsf.org/licensing/licenses/agpl-3.0.html)." #: lib/action.php:790 -#, fuzzy msgid "Site content license" -msgstr "Sök innehÃ¥ll i inlägg" +msgstr "Licens för webbplatsinnehÃ¥ll" #: lib/action.php:799 msgid "All " -msgstr "" +msgstr "Alla " #: lib/action.php:804 msgid "license." -msgstr "" +msgstr "licens." #: lib/action.php:1068 msgid "Pagination" -msgstr "" +msgstr "Numrering av sidor" #: lib/action.php:1077 -#, fuzzy msgid "After" -msgstr "« Nyare" +msgstr "Senare" #: lib/action.php:1085 -#, fuzzy msgid "Before" -msgstr "Tidigare »" +msgstr "Tidigare" #: lib/action.php:1133 -#, fuzzy msgid "There was a problem with your session token." -msgstr "Det var nÃ¥got problem med din session. Försök igen, tack." +msgstr "Det var ett problem med din sessions-token." #: lib/adminpanelaction.php:96 -#, fuzzy msgid "You cannot make changes to this site." -msgstr "Du kan inte skicka meddelande till den användaren." +msgstr "Du kan inte göra förändringar av denna webbplats." #: lib/adminpanelaction.php:195 msgid "showForm() not implemented." -msgstr "" +msgstr "showForm() är inte implementerat." #: lib/adminpanelaction.php:224 msgid "saveSettings() not implemented." -msgstr "" +msgstr "saveSetting() är inte implementerat." #: lib/adminpanelaction.php:247 -#, fuzzy msgid "Unable to delete design setting." -msgstr "Kunde inte spara dina Twitter inställningar!" +msgstr "Kunde inte ta bort utseendeinställning." #: lib/adminpanelaction.php:300 -#, fuzzy msgid "Basic site configuration" -msgstr "Bekräfta epostadress" +msgstr "Grundläggande webbplatskonfiguration" #: lib/adminpanelaction.php:303 -#, fuzzy msgid "Design configuration" -msgstr "SMS Bekräftelse" +msgstr "Konfiguration av utseende" #: lib/adminpanelaction.php:306 lib/adminpanelaction.php:309 -#, fuzzy msgid "Paths configuration" -msgstr "SMS Bekräftelse" +msgstr "Konfiguration av sökvägar" #: lib/attachmentlist.php:87 msgid "Attachments" -msgstr "" +msgstr "Bilagor" #: lib/attachmentlist.php:265 msgid "Author" -msgstr "" +msgstr "Författare" #: lib/attachmentlist.php:278 -#, fuzzy msgid "Provider" -msgstr "Profil" +msgstr "TillhandahÃ¥llare" #: lib/attachmentnoticesection.php:67 msgid "Notices where this attachment appears" -msgstr "" +msgstr "Notiser där denna bilaga förekommer" #: lib/attachmenttagcloudsection.php:48 msgid "Tags for this attachment" -msgstr "" +msgstr "Taggar för denna billaga" #: lib/channel.php:138 lib/channel.php:158 msgid "Command results" -msgstr "" +msgstr "Resultat av kommando" #: lib/channel.php:210 msgid "Command complete" -msgstr "" +msgstr "Kommando komplett" #: lib/channel.php:221 msgid "Command failed" -msgstr "" +msgstr "Kommando misslyckades" #: lib/command.php:44 msgid "Sorry, this command is not yet implemented." -msgstr "" +msgstr "Ledsen, detta kommando är inte implementerat än." #: lib/command.php:88 -#, fuzzy, php-format +#, php-format msgid "Could not find a user with nickname %s" -msgstr "Kunde inte uppdatera användaren med bekräftad emailadress." +msgstr "Kunde inte hitta en användare med smeknamnet %s" #: lib/command.php:92 msgid "It does not make a lot of sense to nudge yourself!" -msgstr "" +msgstr "Det verkar inte vara särskilt meningsfullt att knuffa dig själv!" #: lib/command.php:99 #, php-format msgid "Nudge sent to %s" -msgstr "" +msgstr "Knuff skickad till %s" #: lib/command.php:126 #, php-format @@ -4395,28 +4279,31 @@ msgid "" "Subscribers: %2$s\n" "Notices: %3$s" msgstr "" +"Prenumerationer: %1$s\n" +"Prenumeranter: %2$s\n" +"Notiser: %3$s" #: lib/command.php:152 lib/command.php:400 msgid "Notice with that id does not exist" -msgstr "" +msgstr "Notis med den ID:n finns inte" #: lib/command.php:168 lib/command.php:416 lib/command.php:471 msgid "User has no last notice" -msgstr "" +msgstr "Användare har ingen sista notis" #: lib/command.php:190 msgid "Notice marked as fave." -msgstr "" +msgstr "Notis markerad som favorit." #: lib/command.php:315 #, php-format msgid "%1$s (%2$s)" -msgstr "%1$s (%2$s)" +msgstr "" #: lib/command.php:318 #, php-format msgid "Fullname: %s" -msgstr "Fullt namn: %s" +msgstr "Fullständigt namn: %s" #: lib/command.php:321 #, php-format @@ -4436,99 +4323,109 @@ msgstr "Om: %s" #: lib/command.php:358 scripts/xmppdaemon.php:321 #, php-format msgid "Message too long - maximum is %d characters, you sent %d" -msgstr "" +msgstr "Meddelande för lÃ¥ngt - maximum är %d tecken, du skickade %d" #: lib/command.php:377 msgid "Error sending direct message." -msgstr "" +msgstr "Fel vid sändning av direktmeddelande." #: lib/command.php:431 #, php-format msgid "Notice too long - maximum is %d characters, you sent %d" -msgstr "" +msgstr "Notis för lÃ¥ngt - maximum är %d tecken, du skickade %d" #: lib/command.php:439 -#, fuzzy, php-format +#, php-format msgid "Reply to %s sent" -msgstr "Svara pÃ¥ detta inlägg" +msgstr "Svar pÃ¥ %s skickat" #: lib/command.php:441 -#, fuzzy msgid "Error saving notice." -msgstr "Det var ett problem när inlägget sparades." +msgstr "Fel vid sparande av notis." #: lib/command.php:495 msgid "Specify the name of the user to subscribe to" -msgstr "" +msgstr "Ange namnet pÃ¥ användaren att prenumerara pÃ¥" #: lib/command.php:502 #, php-format msgid "Subscribed to %s" -msgstr "" +msgstr "Prenumerar pÃ¥ %s" #: lib/command.php:523 msgid "Specify the name of the user to unsubscribe from" -msgstr "" +msgstr "Ange namnet pÃ¥ användaren att avsluta prenumeration pÃ¥" #: lib/command.php:530 #, php-format msgid "Unsubscribed from %s" -msgstr "" +msgstr "Prenumeration hos %s avslutad" #: lib/command.php:548 lib/command.php:571 msgid "Command not yet implemented." -msgstr "" +msgstr "Kommando inte implementerat än." #: lib/command.php:551 msgid "Notification off." -msgstr "" +msgstr "Notifikation av." #: lib/command.php:553 msgid "Can't turn off notification." -msgstr "" +msgstr "Kan inte sätta pÃ¥ notifikation." #: lib/command.php:574 msgid "Notification on." -msgstr "" +msgstr "Notifikation pÃ¥." #: lib/command.php:576 msgid "Can't turn on notification." +msgstr "Kan inte stänga av notifikation." + +#: lib/command.php:588 +msgid "Login command is disabled" msgstr "" -#: lib/command.php:592 -#, fuzzy +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Kunde inte skapa alias." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 msgid "You are not subscribed to anyone." -msgstr "Du skickade inte oss den profilen" +msgstr "Du prenumererar inte pÃ¥ nÃ¥gon." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" -msgstr[0] "Du prenumererar redan pÃ¥ dessa användare:" -msgstr[1] "Du prenumererar redan pÃ¥ dessa användare:" +msgstr[0] "Du prenumererar pÃ¥ denna person:" +msgstr[1] "Du prenumererar pÃ¥ dessa personer:" -#: lib/command.php:614 -#, fuzzy +#: lib/command.php:645 msgid "No one is subscribed to you." -msgstr "Kunde inte prenumerera pÃ¥ annat Ã¥t dig." +msgstr "Ingen prenumerar pÃ¥ dig." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" -msgstr[0] "Kunde inte prenumerera pÃ¥ annat Ã¥t dig." -msgstr[1] "Kunde inte prenumerera pÃ¥ annat Ã¥t dig." +msgstr[0] "Denna person prenumererar pÃ¥ dig:" +msgstr[1] "Dessa personer prenumererar pÃ¥ dig:" -#: lib/command.php:636 -#, fuzzy +#: lib/command.php:667 msgid "You are not a member of any groups." -msgstr "Du skickade inte oss den profilen" +msgstr "Du är inte medlem i nÃ¥gra grupper." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" -msgstr[0] "Du skickade inte oss den profilen" -msgstr[1] "Du skickade inte oss den profilen" +msgstr[0] "Du är en medlem i denna grupp:" +msgstr[1] "Du är en medlem i dessa grupper:" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4547,6 +4444,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4567,21 +4465,20 @@ msgid "" msgstr "" #: lib/common.php:199 -#, fuzzy msgid "No configuration file found. " -msgstr "Ingen bekräftelsekod." +msgstr "Ingen konfigurationsfil hittades. " #: lib/common.php:200 msgid "I looked for configuration files in the following places: " -msgstr "" +msgstr "Jag letade efter konfigurationsfiler pÃ¥ följande platser: " #: lib/common.php:201 msgid "You may wish to run the installer to fix this." -msgstr "" +msgstr "Du kanske vill köra installeraren för att Ã¥tgärda detta." #: lib/common.php:202 msgid "Go to the installer." -msgstr "" +msgstr "GÃ¥ till installeraren." #: lib/connectsettingsaction.php:110 msgid "IM" @@ -4589,7 +4486,7 @@ msgstr "IM" #: lib/connectsettingsaction.php:111 msgid "Updates by instant messenger (IM)" -msgstr "Uppdateringar via instant messenger (IM)" +msgstr "Uppdateringar via snabbmeddelande (IM)" #: lib/connectsettingsaction.php:116 msgid "Updates by SMS" @@ -4597,174 +4494,159 @@ msgstr "Uppdateringar via SMS" #: lib/dberroraction.php:60 msgid "Database error" -msgstr "" +msgstr "Databasfel" #: lib/designsettings.php:105 -#, fuzzy msgid "Upload file" -msgstr "Ladda upp" +msgstr "Ladda upp fil" #: lib/designsettings.php:109 -#, fuzzy msgid "" "You can upload your personal background image. The maximum file size is 2MB." -msgstr "Du kan uppdatera din personliga profil här" - -#: lib/designsettings.php:372 -msgid "Bad default color settings: " msgstr "" +"Du kan ladda upp din personliga bakgrundbild. Den maximala filstorleken är " +"2MB." -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." -msgstr "" +msgstr "Standardvärden för utseende Ã¥terställda." #: lib/disfavorform.php:114 lib/disfavorform.php:140 -#, fuzzy msgid "Disfavor this notice" -msgstr "%s favoriter" +msgstr "Avmarkera denna notis som favorit" #: lib/favorform.php:114 lib/favorform.php:140 -#, fuzzy msgid "Favor this notice" -msgstr "%s favoriter" +msgstr "Markera denna notis som favorit" #: lib/favorform.php:140 msgid "Favor" -msgstr "Favorisera" +msgstr "Markera som favorit" #: lib/feedlist.php:64 msgid "Export data" -msgstr "" +msgstr "Exportdata" #: lib/feed.php:85 msgid "RSS 1.0" -msgstr "" +msgstr "RSS 1.0" #: lib/feed.php:87 msgid "RSS 2.0" -msgstr "" +msgstr "RSS 2.0" #: lib/feed.php:89 msgid "Atom" -msgstr "" +msgstr "Atom" #: lib/feed.php:91 msgid "FOAF" -msgstr "" +msgstr "FOAF" #: lib/galleryaction.php:121 -#, fuzzy msgid "Filter tags" -msgstr "Feed för taggar %s" +msgstr "Filtrera taggar" #: lib/galleryaction.php:131 msgid "All" -msgstr "" +msgstr "Alla" #: lib/galleryaction.php:139 -#, fuzzy msgid "Select tag to filter" -msgstr "Välj en operatör" +msgstr "Välj tagg att filtrera" #: lib/galleryaction.php:140 -#, fuzzy msgid "Tag" -msgstr "Taggar" +msgstr "Tagg" #: lib/galleryaction.php:141 msgid "Choose a tag to narrow list" -msgstr "" +msgstr "Välj en tagg för att begränsa lista" #: lib/galleryaction.php:143 msgid "Go" -msgstr "" +msgstr "GÃ¥" #: lib/groupeditform.php:163 -#, fuzzy msgid "URL of the homepage or blog of the group or topic" -msgstr "URL till din hemsida, blog eller profil pÃ¥ en annan sida." +msgstr "URL till gruppen eller ämnets hemsida eller blogg" #: lib/groupeditform.php:168 -#, fuzzy msgid "Describe the group or topic" -msgstr "Berätta om dig själv och dina intressen inom 140 tecken" +msgstr "Beskriv gruppen eller ämnet" #: lib/groupeditform.php:170 -#, fuzzy, php-format +#, php-format msgid "Describe the group or topic in %d characters" -msgstr "Berätta om dig själv och dina intressen inom 140 tecken" +msgstr "Beskriv gruppen eller ämnet med högst %d tecken" #: lib/groupeditform.php:172 -#, fuzzy msgid "Description" -msgstr "Prenumerationer" +msgstr "Beskrivning" #: lib/groupeditform.php:179 -#, fuzzy msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"" -msgstr "Var du hÃ¥ller till, sÃ¥som \"Stad, Län, Land\"" +msgstr "Plats för gruppen, om den finns, sÃ¥som \"Stad, Län, Land\"" #: lib/groupeditform.php:187 #, php-format msgid "Extra nicknames for the group, comma- or space- separated, max %d" -msgstr "" +msgstr "Extra smeknamn för gruppen, komma- eller mellanslagsseparerade, max &d" #: lib/groupnav.php:85 msgid "Group" -msgstr "" +msgstr "Grupp" #: lib/groupnav.php:101 -#, fuzzy msgid "Blocked" -msgstr "Ingen sÃ¥dan användare" +msgstr "Blockerad" #: lib/groupnav.php:102 -#, fuzzy, php-format +#, php-format msgid "%s blocked users" -msgstr "Ingen sÃ¥dan användare" +msgstr "%s blockerade användare" #: lib/groupnav.php:108 #, php-format msgid "Edit %s group properties" -msgstr "" +msgstr "Redigera %s gruppegenskaper" #: lib/groupnav.php:113 -#, fuzzy msgid "Logo" -msgstr "Logga ut" +msgstr "Logotyp" #: lib/groupnav.php:114 #, php-format msgid "Add or edit %s logo" -msgstr "" +msgstr "Lägg till eller redigera %s logotyp" #: lib/groupnav.php:120 #, php-format msgid "Add or edit %s design" -msgstr "" +msgstr "Lägg till eller redigera %s utseende" #: lib/groupsbymemberssection.php:71 msgid "Groups with most members" -msgstr "" +msgstr "Grupper med flest medlemmar" #: lib/groupsbypostssection.php:71 msgid "Groups with most posts" -msgstr "" +msgstr "Grupper med flest inlägg" #: lib/grouptagcloudsection.php:56 #, php-format msgid "Tags in %s group's notices" -msgstr "" +msgstr "Taggar i %s grupps notiser" #: lib/htmloutputter.php:103 msgid "This page is not available in a media type you accept" msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat" #: lib/imagefile.php:75 -#, fuzzy, php-format +#, php-format msgid "That file is too big. The maximum file size is %s." -msgstr "Du kan uppdatera din personliga profil här" +msgstr "Denna fil är för stor. Den maximala filstorleken är %s." #: lib/imagefile.php:80 msgid "Partial upload." @@ -4772,33 +4654,31 @@ msgstr "Bitvis uppladdad." #: lib/imagefile.php:88 lib/mediafile.php:170 msgid "System error uploading file." -msgstr "Systemfel när filen laddades upp." +msgstr "Systemfel vid uppladdning av fil." #: lib/imagefile.php:96 msgid "Not an image or corrupt file." -msgstr "Det verkar inte vara en bildfil, annars korrupt." +msgstr "Inte en bildfil eller sÃ¥ är filen korrupt." #: lib/imagefile.php:105 msgid "Unsupported image file format." msgstr "Bildfilens format stödjs inte." #: lib/imagefile.php:118 -#, fuzzy msgid "Lost our file." -msgstr "Inget sÃ¥dant inlägg." +msgstr "Förlorade vÃ¥r fil." #: lib/imagefile.php:150 lib/imagefile.php:197 -#, fuzzy msgid "Unknown file type" -msgstr "okänd fil typ" +msgstr "Okänd filtyp" #: lib/imagefile.php:217 msgid "MB" -msgstr "" +msgstr "MB" #: lib/imagefile.php:219 msgid "kB" -msgstr "" +msgstr "kB" #: lib/jabber.php:191 #, php-format @@ -4806,43 +4686,41 @@ msgid "[%s]" msgstr "" #: lib/joinform.php:114 -#, fuzzy msgid "Join" -msgstr "Logga in" +msgstr "GÃ¥ med" #: lib/leaveform.php:114 -#, fuzzy msgid "Leave" -msgstr "Spara" +msgstr "Lämna" #: lib/logingroupnav.php:80 -#, fuzzy msgid "Login with a username and password" -msgstr "Logga in med ditt användarnamn och lösenord." +msgstr "Logga in med ett användarnamn och lösenord" #: lib/logingroupnav.php:86 -#, fuzzy msgid "Sign up for a new account" -msgstr "Skapa ett nytt konto" +msgstr "Registrera dig för ett nytt konto" #: lib/mailbox.php:89 msgid "Only the user can read their own mailboxes." -msgstr "" +msgstr "Bara användaren kan läsa sina egna brevlÃ¥dor." #: lib/mailbox.php:139 msgid "" "You have no private messages. You can send private message to engage other " "users in conversation. People can send you messages for your eyes only." msgstr "" +"Du har inga privata meddelanden. Du kan skicka privata meddelanden för att " +"engagera andra användare i konversationen. Folk kan skicka meddelanden till " +"dig som bara du ser." #: lib/mailbox.php:227 lib/noticelist.php:452 -#, fuzzy msgid "from" msgstr "frÃ¥n" #: lib/mail.php:172 msgid "Email address confirmation" -msgstr "Bekräfta epostadress" +msgstr "E-postadressbekräftelse" #: lib/mail.php:174 #, php-format @@ -4864,10 +4742,10 @@ msgstr "" #: lib/mail.php:236 #, php-format msgid "%1$s is now listening to your notices on %2$s." -msgstr "%1$s lyssnar nu pÃ¥ dina meddelanden i %2$s." +msgstr "%1$s lyssnar nu pÃ¥ dina notiser pÃ¥ %2$s." #: lib/mail.php:241 -#, fuzzy, php-format +#, php-format msgid "" "%1$s is now listening to your notices on %2$s.\n" "\n" @@ -4880,18 +4758,14 @@ msgid "" "----\n" "Change your email address or notification options at %8$s\n" msgstr "" -"%1$s lyssnar nu pÃ¥ dina meddelanden i %1$s.\n" -"\n" -"\tHälsningar,\n" -"%4$s.\n" #: lib/mail.php:254 -#, fuzzy, php-format +#, php-format msgid "Location: %s\n" msgstr "Plats: %s\n" #: lib/mail.php:256 -#, fuzzy, php-format +#, php-format msgid "Homepage: %s\n" msgstr "Hemsida: %s\n" @@ -4901,11 +4775,13 @@ msgid "" "Bio: %s\n" "\n" msgstr "" +"Biografi: %s\n" +"\n" #: lib/mail.php:286 #, php-format msgid "New email address for posting to %s" -msgstr "Ny emailadress för att skicka till %s" +msgstr "Ny e-postadress för att skicka till %s" #: lib/mail.php:289 #, php-format @@ -4919,13 +4795,13 @@ msgid "" "Faithfully yours,\n" "%4$s" msgstr "" -"Du har en ny adress %1$s.\n" +"Du har en ny adress pÃ¥ %1$s.\n" "\n" -"Skicka email till %2$s för att göra ett nytt inlägg.\n" +"Skicka e-post till %2$s för att posta nya meddelanden.\n" "\n" -"Mer information fÃ¥r du pÃ¥ %3$s.\n" +"Mer e-postinstruktioner pÃ¥ %3$s.\n" "\n" -"Mvh,\n" +"Med vänliga hälsningar,\n" "%4$s" #: lib/mail.php:413 @@ -4935,12 +4811,12 @@ msgstr "%s status" #: lib/mail.php:439 msgid "SMS confirmation" -msgstr "SMS Bekräftelse" +msgstr "SMS-bekräftelse" #: lib/mail.php:463 -#, fuzzy, php-format +#, php-format msgid "You've been nudged by %s" -msgstr "Du är identifierad. Skriv in" +msgstr "Du har blivit knuffad av %s" #: lib/mail.php:467 #, php-format @@ -4961,7 +4837,7 @@ msgstr "" #: lib/mail.php:510 #, php-format msgid "New private message from %s" -msgstr "" +msgstr "Nytt privat meddelande frÃ¥n %s" #: lib/mail.php:514 #, php-format @@ -4983,9 +4859,9 @@ msgid "" msgstr "" #: lib/mail.php:559 -#, fuzzy, php-format +#, php-format msgid "%s (@%s) added your notice as a favorite" -msgstr "%s la till ditt inlägg som favorit" +msgstr "%s (@%s) lade till din notis som en favorit" #: lib/mail.php:561 #, php-format @@ -5011,7 +4887,7 @@ msgstr "" #: lib/mail.php:620 #, php-format msgid "%s (@%s) sent a notice to your attention" -msgstr "" +msgstr "%s (@%s) skickade en notis för din uppmärksamhet" #: lib/mail.php:622 #, php-format @@ -5031,86 +4907,87 @@ msgstr "" #: lib/mediafile.php:98 lib/mediafile.php:123 msgid "There was a database error while saving your file. Please try again." msgstr "" +"Det var ett databasfel vid sparandet av din profil. Var vänlig försök igen." #: lib/mediafile.php:142 msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini." msgstr "" +"Den uppladdade filen överstiger upload_max_filesize-direktivet i php.ini." #: lib/mediafile.php:147 msgid "" "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " "the HTML form." msgstr "" +"Den uppladdade filen överstiger MAX_FILE_SIZE-direktivet som var angivet i " +"HTML-formuläret." #: lib/mediafile.php:152 msgid "The uploaded file was only partially uploaded." -msgstr "" +msgstr "Den uppladdade filen var bara delvis uppladdad." #: lib/mediafile.php:159 msgid "Missing a temporary folder." -msgstr "" +msgstr "Saknar en tillfällig mapp." #: lib/mediafile.php:162 msgid "Failed to write file to disk." -msgstr "" +msgstr "Misslyckades att skriva fil till disk." #: lib/mediafile.php:165 msgid "File upload stopped by extension." -msgstr "" +msgstr "Filuppladdningen stoppad pga filändelse" #: lib/mediafile.php:179 lib/mediafile.php:216 msgid "File exceeds user's quota!" -msgstr "" +msgstr "Fil överstiger användaren kvot!" #: lib/mediafile.php:196 lib/mediafile.php:233 msgid "File could not be moved to destination directory." -msgstr "" +msgstr "Fil kunde inte flyttas till destinationskatalog." #: lib/mediafile.php:201 lib/mediafile.php:237 msgid "Could not determine file's mime-type!" -msgstr "Kunde inte ta emot favoritinläggen." +msgstr "Kunde inte fastställa filens MIME-typ!" #: lib/mediafile.php:270 #, php-format msgid " Try using another %s format." -msgstr "" +msgstr "Försök använda ett annat %s-format." #: lib/mediafile.php:275 #, php-format msgid "%s is not a supported filetype on this server." -msgstr "" +msgstr "%s är en filtyp som saknar stöd pÃ¥ denna server." #: lib/messageform.php:120 -#, fuzzy msgid "Send a direct notice" -msgstr "Tabort inlägg" +msgstr "Skicka ett direktinlägg" #: lib/messageform.php:146 msgid "To" -msgstr "" +msgstr "Till" -#: lib/messageform.php:162 lib/noticeform.php:186 -#, fuzzy +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" -msgstr "Minst 6 tecken" +msgstr "Tillgängliga tecken" #: lib/noticeform.php:158 -#, fuzzy msgid "Send a notice" -msgstr "Skicka ett meddelande" +msgstr "Skicka ett inlägg" #: lib/noticeform.php:171 #, php-format msgid "What's up, %s?" msgstr "Vad är pÃ¥ gÃ¥ng, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" -msgstr "" +msgstr "Bifoga" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" -msgstr "" +msgstr "Bifoga en fil" #: lib/noticelist.php:403 #, php-format @@ -5118,78 +4995,72 @@ msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s" msgstr "" #: lib/noticelist.php:404 -#, fuzzy msgid "N" -msgstr "Nej" +msgstr "N" #: lib/noticelist.php:404 msgid "S" -msgstr "" +msgstr "S" #: lib/noticelist.php:405 msgid "E" -msgstr "" +msgstr "Ö" #: lib/noticelist.php:405 msgid "W" -msgstr "" +msgstr "V" #: lib/noticelist.php:411 msgid "at" -msgstr "" +msgstr "pÃ¥" #: lib/noticelist.php:506 -#, fuzzy msgid "in context" -msgstr "Inget innehÃ¥ll!" +msgstr "i sammanhang" #: lib/noticelist.php:526 -#, fuzzy msgid "Reply to this notice" msgstr "Svara pÃ¥ detta inlägg" #: lib/noticelist.php:527 -#, fuzzy msgid "Reply" -msgstr "svar" +msgstr "Svara" #: lib/nudgeform.php:116 msgid "Nudge this user" -msgstr "" +msgstr "Knuffa denna användare" #: lib/nudgeform.php:128 msgid "Nudge" -msgstr "" +msgstr "Knuffa" #: lib/nudgeform.php:128 -#, fuzzy msgid "Send a nudge to this user" -msgstr "Du kan inte skicka meddelande till den användaren." +msgstr "Skicka en knuff till den användaren." #: lib/oauthstore.php:283 msgid "Error inserting new profile" -msgstr "Fel uppstog när nya profilen skulle läggas till" +msgstr "Fel vid infogning av ny profil" #: lib/oauthstore.php:291 msgid "Error inserting avatar" -msgstr "Fel uppstog när användarbild skulle läggas till" +msgstr "Fel vid infogning av avatar" #: lib/oauthstore.php:311 msgid "Error inserting remote profile" -msgstr "Fel uppstog när fjärrprofilen skulle läggas till" +msgstr "Fel vid infogning av fjärrprofilen" #: lib/oauthstore.php:345 -#, fuzzy msgid "Duplicate notice" -msgstr "Tabort inlägg" +msgstr "Duplicera notis" #: lib/oauthstore.php:467 lib/subs.php:48 msgid "You have been banned from subscribing." -msgstr "" +msgstr "Du har blivit utestängd frÃ¥n att prenumerera." #: lib/oauthstore.php:492 msgid "Couldn't insert new subscription." -msgstr "Kunde inte lägga till ny prenumeration." +msgstr "Kunde inte infoga ny prenumeration." #: lib/personalgroupnav.php:99 msgid "Personal" @@ -5201,28 +5072,28 @@ msgstr "Svar" #: lib/personalgroupnav.php:114 msgid "Favorites" -msgstr "" +msgstr "Favoriter" #: lib/personalgroupnav.php:124 msgid "Inbox" -msgstr "" +msgstr "Inkorg" #: lib/personalgroupnav.php:125 msgid "Your incoming messages" -msgstr "" +msgstr "Dina inkommande meddelanden" #: lib/personalgroupnav.php:129 msgid "Outbox" -msgstr "" +msgstr "Utkorg" #: lib/personalgroupnav.php:130 msgid "Your sent messages" -msgstr "" +msgstr "Dina skickade meddelanden" #: lib/personaltagcloudsection.php:56 #, php-format msgid "Tags in %s's notices" -msgstr "" +msgstr "Taggar i %ss notiser" #: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82 msgid "Subscriptions" @@ -5234,16 +5105,15 @@ msgstr "Alla prenumerationer" #: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90 msgid "Subscribers" -msgstr "Prenumerant" +msgstr "Prenumeranter" #: lib/profileaction.php:157 -#, fuzzy msgid "All subscribers" -msgstr "Prenumerant" +msgstr "Alla prenumeranter" #: lib/profileaction.php:178 msgid "User ID" -msgstr "" +msgstr "Användar-ID" #: lib/profileaction.php:183 msgid "Member since" @@ -5251,16 +5121,15 @@ msgstr "Medlem sedan" #: lib/profileaction.php:245 msgid "All groups" -msgstr "" +msgstr "Alla grupper" #: lib/profileformaction.php:123 -#, fuzzy msgid "No return-to arguments" -msgstr "Inget sÃ¥dant dokument." +msgstr "Inga \"return-to\"-argument" #: lib/profileformaction.php:137 msgid "unimplemented method" -msgstr "" +msgstr "inte implementerad metod" #: lib/publicgroupnav.php:78 msgid "Public" @@ -5268,44 +5137,41 @@ msgstr "Publik" #: lib/publicgroupnav.php:82 msgid "User groups" -msgstr "" +msgstr "Användargrupper" #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85 -#, fuzzy msgid "Recent tags" -msgstr "Tidigare taggar" +msgstr "Senaste taggar" #: lib/publicgroupnav.php:88 msgid "Featured" msgstr "" #: lib/publicgroupnav.php:92 -#, fuzzy msgid "Popular" -msgstr "Personer" +msgstr "Populärt" #: lib/sandboxform.php:67 +#, fuzzy msgid "Sandbox" -msgstr "" +msgstr "Flytta till sandlÃ¥da" #: lib/sandboxform.php:78 #, fuzzy msgid "Sandbox this user" -msgstr "Ingen sÃ¥dan användare" +msgstr "Flytta denna användare till sandlÃ¥da" #: lib/searchaction.php:120 -#, fuzzy msgid "Search site" -msgstr "Sök" +msgstr "Sök webbplats" #: lib/searchaction.php:126 msgid "Keyword(s)" -msgstr "" +msgstr "Nyckelord" #: lib/searchaction.php:162 -#, fuzzy msgid "Search help" -msgstr "Sök" +msgstr "Sök hjälp" #: lib/searchgroupnav.php:80 msgid "People" @@ -5313,49 +5179,46 @@ msgstr "Personer" #: lib/searchgroupnav.php:81 msgid "Find people on this site" -msgstr "Sök personer pÃ¥ denna sida" +msgstr "Hitta personer pÃ¥ denna webbplats" #: lib/searchgroupnav.php:83 msgid "Find content of notices" -msgstr "Sök innehÃ¥ll i inlägg" +msgstr "Hitta innehÃ¥ll i notiser" #: lib/searchgroupnav.php:85 -#, fuzzy msgid "Find groups on this site" -msgstr "Sök personer pÃ¥ denna sida" +msgstr "Hitta grupper pÃ¥ denna webbplats" #: lib/section.php:89 msgid "Untitled section" -msgstr "" +msgstr "Namnlös sektion" #: lib/section.php:106 msgid "More..." -msgstr "" +msgstr "Mer..." #: lib/silenceform.php:67 -#, fuzzy msgid "Silence" -msgstr "Nytt inlägg" +msgstr "Tysta ned" #: lib/silenceform.php:78 -#, fuzzy msgid "Silence this user" -msgstr "Ingen sÃ¥dan användare" +msgstr "Tysta ned denna användare" #: lib/subgroupnav.php:83 -#, fuzzy, php-format +#, php-format msgid "People %s subscribes to" -msgstr "Fjärrprenumerera" +msgstr "Personer %s prenumererar pÃ¥" #: lib/subgroupnav.php:91 -#, fuzzy, php-format +#, php-format msgid "People subscribed to %s" -msgstr "Fjärrprenumerera" +msgstr "Personer som prenumererar pÃ¥ %s" #: lib/subgroupnav.php:99 #, php-format msgid "Groups %s is a member of" -msgstr "" +msgstr "Grupper %s är en medlem i" #: lib/subscriberspeopleselftagcloudsection.php:48 #: lib/subscriptionspeopleselftagcloudsection.php:48 @@ -5369,16 +5232,15 @@ msgstr "" #: lib/subscriptionlist.php:126 msgid "(none)" -msgstr "" +msgstr "(ingen)" #: lib/subs.php:52 msgid "Already subscribed!" -msgstr "" +msgstr "Redan prenumerant!" #: lib/subs.php:56 -#, fuzzy msgid "User has blocked you." -msgstr "Användaren har ingen profil." +msgstr "Användaren har blockerat dig." #: lib/subs.php:60 msgid "Could not subscribe." @@ -5386,80 +5248,77 @@ msgstr "Kunde inte prenumerera." #: lib/subs.php:79 msgid "Could not subscribe other to you." -msgstr "Kunde inte prenumerera pÃ¥ annat Ã¥t dig." +msgstr "Kunde inte göra andra till prenumeranter hos dig." #: lib/subs.php:128 -#, fuzzy msgid "Not subscribed!" -msgstr "Ingen prenumerant!" +msgstr "Inte prenumerant!" + +#: lib/subs.php:133 +msgid "Couldn't delete self-subscription." +msgstr "Kunde inte ta bort själv-prenumeration." -#: lib/subs.php:140 +#: lib/subs.php:146 msgid "Couldn't delete subscription." -msgstr "Kunde inte radera prenumerationen. " +msgstr "Kunde inte ta bort prenumeration." #: lib/tagcloudsection.php:56 -#, fuzzy msgid "None" -msgstr "Nej" +msgstr "Ingen" #: lib/topposterssection.php:74 msgid "Top posters" -msgstr "" +msgstr "Toppostare" #: lib/unsandboxform.php:69 +#, fuzzy msgid "Unsandbox" -msgstr "" +msgstr "Flytta frÃ¥n sandlÃ¥da" #: lib/unsandboxform.php:80 #, fuzzy msgid "Unsandbox this user" -msgstr "Ingen sÃ¥dan användare" +msgstr "Flytta denna användare frÃ¥n sandlÃ¥da" #: lib/unsilenceform.php:67 msgid "Unsilence" -msgstr "" +msgstr "Häv nedtystning" #: lib/unsilenceform.php:78 -#, fuzzy msgid "Unsilence this user" -msgstr "Ingen sÃ¥dan användare" +msgstr "Häv nedtystning av denna användare" #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137 msgid "Unsubscribe from this user" -msgstr "" +msgstr "Avsluta prenumerationen pÃ¥ denna användare" #: lib/unsubscribeform.php:137 msgid "Unsubscribe" -msgstr "Lämnar pren." +msgstr "Avsluta pren." #: lib/userprofile.php:116 -#, fuzzy msgid "Edit Avatar" -msgstr "Användarbild" +msgstr "Redigera avatar" #: lib/userprofile.php:236 -#, fuzzy msgid "User actions" -msgstr "Okänd funktion" +msgstr "AnvändarÃ¥tgärd" #: lib/userprofile.php:248 -#, fuzzy msgid "Edit profile settings" -msgstr "Profil inställningar" +msgstr "Redigera profilinställningar" #: lib/userprofile.php:249 msgid "Edit" -msgstr "" +msgstr "Redigera" #: lib/userprofile.php:272 -#, fuzzy msgid "Send a direct message to this user" -msgstr "Du kan inte skicka meddelande till den användaren." +msgstr "Skicka ett direktmeddelande till denna användare" #: lib/userprofile.php:273 -#, fuzzy msgid "Message" -msgstr "Nytt meddelande" +msgstr "Meddelande" #: lib/userprofile.php:311 msgid "Moderate" @@ -5510,27 +5369,27 @@ msgid "about a year ago" msgstr "för ett Ã¥r sedan" #: lib/webcolor.php:82 -#, fuzzy, php-format +#, php-format msgid "%s is not a valid color!" -msgstr "Hemsidan har ingen giltig URL" +msgstr "%s är inte en giltig färg!" #: lib/webcolor.php:123 #, php-format msgid "%s is not a valid color! Use 3 or 6 hex chars." -msgstr "" +msgstr "%s är inte en giltig färg! Använd 3 eller 6 hexadecimala tecken." #: scripts/maildaemon.php:48 msgid "Could not parse message." -msgstr "" +msgstr "Kunde inte tolka meddelande." #: scripts/maildaemon.php:53 msgid "Not a registered user." -msgstr "Inte registrerad användare." +msgstr "Inte en registrerad användare." #: scripts/maildaemon.php:57 msgid "Sorry, that is not your incoming email address." -msgstr "Ledsen, men det är inte din inkommande emailadress." +msgstr "Ledsen, det är inte din inkommande e-postadress." #: scripts/maildaemon.php:61 msgid "Sorry, no incoming email allowed." -msgstr "Ledsen, men inga inkommande email är tillÃ¥tna." +msgstr "Ledsen, ingen inkommande e-post tillÃ¥ts." diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po index fd3695343..4e3b165ac 100644 --- a/locale/te/LC_MESSAGES/statusnet.po +++ b/locale/te/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:50+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:26+0000\n" "Language-Team: Telugu\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: out-statusnet\n" @@ -182,7 +182,12 @@ msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±." msgid "Could not save profile." msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à±à°¨à°¿ à°à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°¨à°¾à°‚." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "వాడà±à°•à°°à°¿ నిరోధం విఫలమైంది." @@ -566,7 +571,7 @@ msgstr "à°•à°¤à±à°¤à°¿à°°à°¿à°‚à°šà±" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -818,101 +823,101 @@ msgstr "రూపà±à°°à±‡à°–à°²à±" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "తపà±à°ªà±à°¡à± పరిమాణం." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "అలంకారం à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ లేదà±: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "à°šà°¿à°¹à±à°¨à°¾à°¨à±à°¨à°¿ మారà±à°šà±" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "సైటౠచిహà±à°¨à°‚" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "అలంకారానà±à°¨à°¿ మారà±à°šà±" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "సైటౠఅలంకారం" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "సైటà±à°•à°¿ అలంకారం." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "నేపథà±à°¯ à°šà°¿à°¤à±à°°à°¾à°¨à±à°¨à°¿ మారà±à°šà±" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "నేపథà±à°¯à°‚" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "మీ à°¸à±à°µà°‚à°¤ నేపథà±à°¯à°ªà± à°šà°¿à°¤à±à°°à°¾à°¨à±à°¨à°¿ మీరౠఎకà±à°•à°¿à°‚చవచà±à°šà±. à°—à°°à°¿à°·à±à° ఫైలౠపరిమాణం 2మెబై." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "à°°à°‚à°—à±à°²à°¨à± మారà±à°šà±" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "విషయం" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "పకà±à°•à°ªà°Ÿà±à°Ÿà±€" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "పాఠà±à°¯à°‚" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "లంకెలà±" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -922,7 +927,7 @@ msgstr "" msgid "Save" msgstr "à°à°¦à±à°°à°ªà°°à°šà±" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "రూపà±à°°à±‡à°–లని à°à°¦à±à°°à°ªà°°à°šà±" @@ -1346,19 +1351,19 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "à°…à°à°¿à°°à±à°šà±à°²à± à°à°¦à±à°°à°®à°¯à±à°¯à°¾à°¯à°¿." @@ -1659,7 +1664,7 @@ msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ సందేశం" msgid "Optionally add a personal message to the invitation." msgstr "à°à°šà±à°›à°¿à°•à°‚à°—à°¾ ఆహà±à°µà°¾à°¨à°¾à°¨à°¿à°•à°¿ à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ సందేశం చేరà±à°šà°‚à°¡à°¿." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "పంపించà±" @@ -1739,11 +1744,11 @@ msgstr "ఓపెనà±à°à°¡à±€ ఫారమà±à°¨à± సృషà±à°Ÿà°¿à°‚à°šà msgid "%s left group %s" msgstr "%2$s à°—à±à°‚పౠనà±à°‚à°¡à°¿ %1$s వైదొలిగారà±" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "ఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "సందేశపౠవిషయం సరైనది కాదà±" @@ -1949,8 +1954,8 @@ msgstr "విషయ à°°à°•à°‚ " msgid "Only " msgstr "మాతà±à°°à°®à±‡ " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -4279,40 +4284,54 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "మారà±à°ªà±‡à°°à±à°²à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!" msgstr[1] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4331,6 +4350,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4394,11 +4414,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "మీ à°¸à±à°µà°‚à°¤ నేపథà±à°¯à°ªà± à°šà°¿à°¤à±à°°à°¾à°¨à±à°¨à°¿ మీరౠఎకà±à°•à°¿à°‚చవచà±à°šà±. à°—à°°à°¿à°·à±à° ఫైలౠపరిమాణం 2మెబై." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4850,7 +4866,7 @@ msgstr "" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ ఉనà±à°¨ à°…à°•à±à°·à°°à°¾à°²à±" @@ -4864,11 +4880,11 @@ msgstr "కొతà±à°¤ సందేశం" msgid "What's up, %s?" msgstr "%s, సంగతà±à°²à±‡à°®à°¿à°Ÿà°¿?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "జోడించà±" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "à°’à°• ఫైలà±à°¨à°¿ జోడించà±" @@ -5145,7 +5161,12 @@ msgstr "" msgid "Not subscribed!" msgstr "చందాదారà±à°²à±" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "చందాని తొలగించలేకపోయాం." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "చందాని తొలగించలేకపోయాం." diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po index bbb9c2df9..3d9661e7d 100644 --- a/locale/tr/LC_MESSAGES/statusnet.po +++ b/locale/tr/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:53+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:29+0000\n" "Language-Team: Turkish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tr\n" "X-Message-Group: out-statusnet\n" @@ -183,7 +183,12 @@ msgstr "Kullanıcının profili yok." msgid "Could not save profile." msgstr "Profil kaydedilemedi." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Kullanıcı güncellenemedi." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -577,7 +582,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -836,50 +841,50 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "Geçersiz büyüklük." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Bu sayfa kabul ettiÄŸiniz ortam türünde kullanılabilir deÄŸil" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Parolayı deÄŸiÅŸtir" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "Yeni durum mesajı" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "DeÄŸiÅŸtir" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Yeni durum mesajı" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" @@ -887,59 +892,59 @@ msgid "" msgstr "" "Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "Parolayı deÄŸiÅŸtir" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "BaÄŸlan" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Ara" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "GiriÅŸ" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -949,7 +954,7 @@ msgstr "" msgid "Save" msgstr "Kaydet" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1387,19 +1392,19 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Kullanıcı güncellenemedi." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Tercihler kaydedildi." @@ -1716,7 +1721,7 @@ msgstr "" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Gönder" @@ -1798,11 +1803,11 @@ msgstr "OpenID formu yaratılamadı: %s" msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Zaten giriÅŸ yapılmış." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Geçersiz durum mesajı" @@ -2015,8 +2020,8 @@ msgstr "BaÄŸlan" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -4382,37 +4387,51 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Avatar bilgisi kaydedilemedi" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Bize o profili yollamadınız" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Bize o profili yollamadınız" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Uzaktan abonelik" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Uzaktan abonelik" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Bize o profili yollamadınız" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Bize o profili yollamadınız" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4431,6 +4450,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4495,11 +4515,7 @@ msgid "" msgstr "" "Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4964,7 +4980,7 @@ msgstr "" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "6 veya daha fazla karakter" @@ -4979,11 +4995,11 @@ msgstr "Yeni durum mesajı" msgid "What's up, %s?" msgstr "N'aber %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5263,7 +5279,12 @@ msgstr "" msgid "Not subscribed!" msgstr "Bu kullanıcıyı zaten takip etmiyorsunuz!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Abonelik silinemedi." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Abonelik silinemedi." diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po index b3fb43465..0d8674bfd 100644 --- a/locale/uk/LC_MESSAGES/statusnet.po +++ b/locale/uk/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:20:56+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:33+0000\n" "Language-Team: Ukrainian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: out-statusnet\n" @@ -189,7 +189,11 @@ msgstr "КориÑтувач не має профілю." msgid "Could not save profile." msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ профіль." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +msgid "You cannot block yourself!" +msgstr "Ви не можете блокувати Ñамого Ñебе!" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "Спроба заблокувати кориÑтувача невдала." @@ -573,7 +577,7 @@ msgstr "Ð’Ñ‚Ñти" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -825,45 +829,45 @@ msgstr "Дизайн" msgid "Design settings for this StatusNet site." msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ñƒ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту StatusNet." -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 msgid "Invalid logo URL." msgstr "Помилкова URL-адреÑа логотипу." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, php-format msgid "Theme not available: %s" msgstr "Тема не доÑтупна: %s" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 msgid "Change logo" msgstr "Змінити логотип" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 msgid "Site logo" msgstr "Логотип Ñайту" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 msgid "Change theme" msgstr "Змінити тему" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 msgid "Site theme" msgstr "Тема Ñайту" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "Тема Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту." -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "Змінити фонове зображеннÑ" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "Фон" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" @@ -872,55 +876,55 @@ msgstr "" "Ви можете завантажити фонове Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñайту. МакÑимальний розмір файлу " "%1$s." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "Увімк." -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "Вимк." -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "Увімкнути або вимкнути фонове зображеннÑ." -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "ЗамоÑтити фон" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 msgid "Change colours" msgstr "Змінити кольори" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 msgid "Content" msgstr "ЗміÑÑ‚" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "Бічна панель" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "ТекÑÑ‚" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 msgid "Links" msgstr "ПоÑиланнÑ" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "За замовч." -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "Оновити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° замовчуваннÑм" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "ПовернутиÑÑŒ до початкових налаштувань" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -930,7 +934,7 @@ msgstr "ПовернутиÑÑŒ до початкових налаштувань" msgid "Save" msgstr "Зберегти" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "Зберегти дизайн" @@ -1366,18 +1370,18 @@ msgstr "" "Ðалаштуйте виглÑд Ñторінки групи, викориÑтовуючи фонове Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– кольори " "на Ñвій Ñмак." -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 msgid "Couldn't update your design." msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ дизайн." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "Ðе маю можливоÑÑ‚Ñ– зберегти Ваші Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ñƒ!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "Преференції дизайну збережно." @@ -1705,7 +1709,7 @@ msgstr "ОÑобиÑÑ‚Ñ– повідомленнÑ" msgid "Optionally add a personal message to the invitation." msgstr "Можна додати перÑональне Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¾ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ (опціонально)." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Так!" @@ -1812,11 +1816,11 @@ msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувача %s з гру msgid "%s left group %s" msgstr "%s залишив групу %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Тепер Ви увійшли." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "ÐедійÑний або неправильний токен." @@ -2033,8 +2037,8 @@ msgstr "тип зміÑту " msgid "Only " msgstr "Лише " -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Такий формат даних не підтримуєтьÑÑ." @@ -2823,11 +2827,9 @@ msgid "Invalid profile URL (bad format)" msgstr "ÐедійÑна URL-адреÑа профілю (неправильний формат)" #: actions/remotesubscribe.php:168 -#, fuzzy msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." msgstr "" -"Це недійÑна URL-адреÑа профілю (немає документа YADIS; немає або помилкове " -"Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ XRDS)." +"Ðеправильна URL-адреÑа профілю (немає документа YADIS, або помилковий XRDS)." #: actions/remotesubscribe.php:176 msgid "That’s a local profile! Login to subscribe." @@ -4439,40 +4441,54 @@ msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¾." msgid "Can't turn on notification." msgstr "Ðе можна увімкнути ÑповіщеннÑ." -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Ðеможна призначити додаткові імена." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 msgid "You are not subscribed to anyone." msgstr "Ви не маєте жодних підпиÑок." -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Ви підпиÑані до цієї оÑоби:" msgstr[1] "Ви підпиÑані до цих людей:" msgstr[2] "Ви підпиÑані до цих людей:" -#: lib/command.php:614 +#: lib/command.php:645 msgid "No one is subscribed to you." msgstr "До Ð’Ð°Ñ Ð½Ñ–Ñ…Ñ‚Ð¾ не підпиÑаний." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Ð¦Ñ Ð¾Ñоба Ñ” підпиÑаною до ВаÑ:" msgstr[1] "Ці люди підпиÑані до ВаÑ:" msgstr[2] "Ці люди підпиÑані до ВаÑ:" -#: lib/command.php:636 +#: lib/command.php:667 msgid "You are not a member of any groups." msgstr "Ви не Ñ” учаÑником жодної групи." -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Ви Ñ” учаÑником групи:" msgstr[1] "Ви Ñ” учаÑником таких груп:" msgstr[2] "Ви Ñ” учаÑником таких груп:" -#: lib/command.php:652 +#: lib/command.php:683 #, fuzzy msgid "" "Commands:\n" @@ -4492,6 +4508,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4511,40 +4528,40 @@ msgid "" "tracking - not yet implemented.\n" msgstr "" "Команди:\n" -"on - увімкнути ÑповіщеннÑ\n" -"off - вимкнути ÑповіщеннÑ\n" -"help - ÑпиÑок команд\n" -"follow <nickname> - підпиÑатиÑÑŒ до кориÑтувача\n" -"groups - групи, до Ñких Ви входите\n" -"subscriptions - кориÑтувачі, до Ñких Ви підпиÑані\n" -"subscribers - кориÑтувачі, Ñкі підпиÑані до ВаÑ\n" -"leave <nickname> - відпиÑатиÑÑŒ від кориÑтувача\n" -"d <nickname> <text> - надіÑлати оÑобиÑте повідомленнÑ\n" -"get <nickname> - отримати оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n" -"whois <nickname> - інфо про кориÑтувача\n" -"fav <nickname> - додати оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача до обраних\n" -"fav #<notice_id> - додати Ð´Ð¾Ð¿Ð¸Ñ #номер до обраних\n" -"reply #<notice_id> - відповіÑти на Ð´Ð¾Ð¿Ð¸Ñ #номер\n" -"reply <nickname> - відповіÑти на оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n" -"join <group> - приєднатиÑÑ Ð´Ð¾ групи\n" -"login - отримати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ у веб-інтерфейÑ\n" -"drop <group> - залишити групу\n" -"stats - отримати ÑтатиÑтику\n" -"stop - те Ñаме що Ñ– 'off'\n" -"quit - те Ñаме що Ñ– 'off'\n" -"sub <nickname> - те Ñаме що Ñ– 'follow'\n" -"unsub <nickname> - те Ñаме що Ñ– 'leave'\n" -"last <nickname> - те Ñаме що Ñ– 'get'\n" -"on <nickname> - наразі не виконуєтьÑÑ\n" -"off <nickname> - наразі не виконуєтьÑÑ\n" -"nudge <nickname> - «розштовхати»\n" -"invite <phone number> - наразі не виконуєтьÑÑ\n" -"track <word> - наразі не виконуєтьÑÑ\n" -"untrack <word> - наразі не виконуєтьÑÑ\n" -"track off - наразі не виконуєтьÑÑ\n" -"untrack all - наразі не виконуєтьÑÑ\n" -"tracks - наразі не виконуєтьÑÑ\n" -"tracking - наразі не виконуєтьÑÑ\n" +"on — увімкнути ÑповіщеннÑ\n" +"off — вимкнути ÑповіщеннÑ\n" +"help — ÑпиÑок команд\n" +"follow <nickname> — підпиÑатиÑÑŒ до кориÑтувача\n" +"groups — групи, до Ñких Ви входите\n" +"subscriptions — кориÑтувачі, до Ñких Ви підпиÑані\n" +"subscribers — кориÑтувачі, Ñкі підпиÑані до ВаÑ\n" +"leave <nickname> — відпиÑатиÑÑŒ від кориÑтувача\n" +"d <nickname> <text> — надіÑлати оÑобиÑте повідомленнÑ\n" +"get <nickname> — отримати оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n" +"whois <nickname> — інфо про кориÑтувача\n" +"fav <nickname> — додати оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача до обраних\n" +"fav #<notice_id> — додати Ð´Ð¾Ð¿Ð¸Ñ Ð´Ð¾ обраних\n" +"reply #<notice_id> — відповіÑти на допиÑ\n" +"reply <nickname> — відповіÑти на оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n" +"join <group> — приєднатиÑÑ Ð´Ð¾ групи\n" +"login — отримати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ у веб-інтерфейÑ\n" +"drop <group> — залишити групу\n" +"stats — отримати ÑтатиÑтику\n" +"stop — те Ñаме що Ñ– 'off'\n" +"quit — те Ñаме що Ñ– 'off'\n" +"sub <nickname> — те Ñаме що Ñ– 'follow'\n" +"unsub <nickname> — те Ñаме що Ñ– 'leave'\n" +"last <nickname> — те Ñаме що Ñ– 'get'\n" +"on <nickname> — наразі не виконуєтьÑÑ\n" +"off <nickname> — наразі не виконуєтьÑÑ\n" +"nudge <nickname> — «розштовхати»\n" +"invite <phone number> — наразі не виконуєтьÑÑ\n" +"track <word> — наразі не виконуєтьÑÑ\n" +"untrack <word> — наразі не виконуєтьÑÑ\n" +"track off — наразі не виконуєтьÑÑ\n" +"untrack all — наразі не виконуєтьÑÑ\n" +"tracks — наразі не виконуєтьÑÑ\n" +"tracking — наразі не виконуєтьÑÑ\n" #: lib/common.php:199 msgid "No configuration file found. " @@ -4589,11 +4606,7 @@ msgstr "" "Ви можете завантажити влаÑне фонове зображеннÑ. МакÑимальний розмір файлу " "Ñтановить 2Мб." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "Помилка кольорів за замовчуваннÑм: " - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "Дизайн за замовчуваннÑм відновлено." @@ -5128,7 +5141,7 @@ msgstr "ÐадіÑлати прÑмий допиÑ" msgid "To" msgstr "До" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 msgid "Available characters" msgstr "ЛишилоÑÑŒ знаків" @@ -5141,11 +5154,11 @@ msgstr "ÐадіÑлати допиÑ" msgid "What's up, %s?" msgstr "Що нового, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "ВклаÑти" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "ВклаÑти файл" @@ -5412,7 +5425,11 @@ msgstr "Ðе вдалоÑÑ Ð¿Ñ–Ð´Ð¿Ð¸Ñати інших до ВаÑ." msgid "Not subscribed!" msgstr "Ðе підпиÑано!" -#: lib/subs.php:140 +#: lib/subs.php:133 +msgid "Couldn't delete self-subscription." +msgstr "Ðе можу видалити ÑамопідпиÑку." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ підпиÑку." diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po index b77e2e8fc..8e29eac3c 100644 --- a/locale/vi/LC_MESSAGES/statusnet.po +++ b/locale/vi/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:21:00+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:36+0000\n" "Language-Team: Vietnamese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: vi\n" "X-Message-Group: out-statusnet\n" @@ -184,7 +184,12 @@ msgstr "NgÆ°á»i dùng không có thông tin." msgid "Could not save profile." msgstr "Không thể lÆ°u hồ sÆ¡ cá nhân." -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "Không thể cáºp nháºt thà nh viên." + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -584,7 +589,7 @@ msgstr "Nhóm" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -846,52 +851,52 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "KÃch thÆ°á»›c không hợp lệ." -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "Trang nà y không phải là phÆ°Æ¡ng tiện truyá»n thông mà bạn chấp nháºn." -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "Thay đổi máºt khẩu của bạn" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "ThÆ° má»i" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "Thay đổi" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "Thông báo má»›i" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 #, fuzzy msgid "Change background image" msgstr "Background Theme:" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 #, fuzzy msgid "Background" msgstr "Background Theme:" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" @@ -900,60 +905,60 @@ msgstr "" "Bạn có thể cáºp nháºt hồ sÆ¡ cá nhân tại đây để má»i ngÆ°á»i có thể biết thông tin " "vá» bạn." -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 #, fuzzy msgid "Tile background image" msgstr "Background Theme:" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "Thay đổi máºt khẩu của bạn" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "Kết nối" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "Tìm kiếm" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "Chuá»—i bất kỳ" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "Äăng nháºp" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -963,7 +968,7 @@ msgstr "" msgid "Save" msgstr "LÆ°u" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 #, fuzzy msgid "Save design" msgstr "LÆ°u" @@ -1431,20 +1436,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "Không thể cáºp nháºt thà nh viên." -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "Không thể lÆ°u thông tin Twitter của bạn!" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "Các tÃnh năng đã được lÆ°u." @@ -1772,7 +1777,7 @@ msgstr "Tin nhắn cá nhân" msgid "Optionally add a personal message to the invitation." msgstr "Không bắt buá»™c phải thêm thông Ä‘iệp và o thÆ° má»i." -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "Gá»i" @@ -1883,11 +1888,11 @@ msgstr "Không thể theo bạn nà y: %s đã có trong danh sách bạn bè cá» msgid "%s left group %s" msgstr "%s và nhóm" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "Äã đăng nháºp." -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "Ná»™i dung tin nhắn không hợp lệ" @@ -2106,8 +2111,8 @@ msgstr "Kết nối" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "Không há»— trợ định dạng dữ liệu nà y." @@ -4550,37 +4555,51 @@ msgstr "Không có mã số xác nháºn." msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "Không thể tạo favorite." + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "Bạn chÆ°a cáºp nháºt thông tin riêng" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "Bạn đã theo những ngÆ°á»i nà y:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "Không thể tạo favorite." -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "Không thể tạo favorite." -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "Bạn chÆ°a cáºp nháºt thông tin riêng" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Bạn chÆ°a cáºp nháºt thông tin riêng" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4599,6 +4618,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4664,11 +4684,7 @@ msgstr "" "Bạn có thể cáºp nháºt hồ sÆ¡ cá nhân tại đây để má»i ngÆ°á»i có thể biết thông tin " "vá» bạn." -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -5189,7 +5205,7 @@ msgstr "Xóa tin nhắn" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "Nhiá»u hÆ¡n 6 ký tá»±" @@ -5204,11 +5220,11 @@ msgstr "Thông báo má»›i" msgid "What's up, %s?" msgstr "Bạn Ä‘ang là m gì thế, %s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5499,7 +5515,12 @@ msgstr "Không thể tạo favorite." msgid "Not subscribed!" msgstr "ChÆ°a đăng nháºn!" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "Không thể xóa đăng nháºn." + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "Không thể xóa đăng nháºn." diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po index 2d0853339..4e306a76b 100644 --- a/locale/zh_CN/LC_MESSAGES/statusnet.po +++ b/locale/zh_CN/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:21:03+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:39+0000\n" "Language-Team: Simplified Chinese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: out-statusnet\n" @@ -186,7 +186,12 @@ msgstr "用户没有个人信æ¯ã€‚" msgid "Could not save profile." msgstr "æ— æ³•ä¿å˜ä¸ªäººä¿¡æ¯ã€‚" -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "æ— æ³•æ›´æ–°ç”¨æˆ·ã€‚" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "阻æ¢ç”¨æˆ·å¤±è´¥ã€‚" @@ -578,7 +583,7 @@ msgstr "剪è£" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -842,110 +847,110 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "大å°ä¸æ£ç¡®ã€‚" -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "这个页é¢ä¸æ供您想è¦çš„媒体类型" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "修改密ç " -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "邀请" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "修改" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "新通告" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 #, fuzzy msgid "Theme for the site." msgstr "登出本站" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, fuzzy, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "ä½ å¯ä»¥ç»™ä½ 的组上载一个logo图。" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "修改密ç " -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "连接" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 #, fuzzy msgid "Sidebar" msgstr "æœç´¢" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "文本" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "登录" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -955,7 +960,7 @@ msgstr "" msgid "Save" msgstr "ä¿å˜" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1404,20 +1409,20 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "æ— æ³•æ›´æ–°ç”¨æˆ·ã€‚" -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 #, fuzzy msgid "Unable to save your design settings!" msgstr "æ— æ³•ä¿å˜ Twitter 设置ï¼" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 #, fuzzy msgid "Design preferences saved." msgstr "åŒæ¥é€‰é¡¹å·²ä¿å˜ã€‚" @@ -1731,7 +1736,7 @@ msgstr "个人消æ¯" msgid "Optionally add a personal message to the invitation." msgstr "在邀请ä¸åŠ å‡ å¥è¯(å¯é€‰)。" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "å‘é€" @@ -1835,11 +1840,11 @@ msgstr "æ— æ³•è®¢é˜…ç”¨æˆ·ï¼šæœªæ‰¾åˆ°ã€‚" msgid "%s left group %s" msgstr "%s 离开群 %s" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "已登录。" -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 #, fuzzy msgid "Invalid or expired token." msgstr "通告内容ä¸æ£ç¡®" @@ -2048,8 +2053,8 @@ msgstr "连接" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "ä¸æ”¯æŒçš„æ•°æ®æ ¼å¼ã€‚" @@ -4455,37 +4460,51 @@ msgstr "通告开å¯ã€‚" msgid "Can't turn on notification." msgstr "æ— æ³•å¼€å¯é€šå‘Šã€‚" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "æ— æ³•åˆ›å»ºæ”¶è—。" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "您未告知æ¤ä¸ªäººä¿¡æ¯" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "您已订阅这些用户:" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "æ— æ³•è®¢é˜…ä»–äººæ›´æ–°ã€‚" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "æ— æ³•è®¢é˜…ä»–äººæ›´æ–°ã€‚" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "您未告知æ¤ä¸ªäººä¿¡æ¯" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "您未告知æ¤ä¸ªäººä¿¡æ¯" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4504,6 +4523,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4568,11 +4588,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "您å¯ä»¥åœ¨è¿™é‡Œä¸Šä¼ 个人头åƒã€‚" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -5048,7 +5064,7 @@ msgstr "åˆ é™¤é€šå‘Š" msgid "To" msgstr "到" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "6 个或更多å—符" @@ -5063,11 +5079,11 @@ msgstr "å‘é€æ¶ˆæ¯" msgid "What's up, %s?" msgstr "æ€Žä¹ˆæ ·ï¼Œ%s?" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5355,7 +5371,12 @@ msgstr "æ— æ³•è®¢é˜…ä»–äººæ›´æ–°ã€‚" msgid "Not subscribed!" msgstr "未订阅ï¼" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "æ— æ³•åˆ é™¤è®¢é˜…ã€‚" + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "æ— æ³•åˆ é™¤è®¢é˜…ã€‚" diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po index 17a54af33..ad7d1fbae 100644 --- a/locale/zh_TW/LC_MESSAGES/statusnet.po +++ b/locale/zh_TW/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-02 23:18+0000\n" -"PO-Revision-Date: 2009-12-02 23:21:06+0000\n" +"POT-Creation-Date: 2009-12-07 21:25+0000\n" +"PO-Revision-Date: 2009-12-07 21:27:42+0000\n" "Language-Team: Traditional Chinese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n" +"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hant\n" "X-Message-Group: out-statusnet\n" @@ -183,7 +183,12 @@ msgstr "" msgid "Could not save profile." msgstr "無法儲å˜å€‹äººè³‡æ–™" -#: actions/apiblockcreate.php:108 +#: actions/apiblockcreate.php:105 +#, fuzzy +msgid "You cannot block yourself!" +msgstr "無法更新使用者" + +#: actions/apiblockcreate.php:119 msgid "Block user failed." msgstr "" @@ -571,7 +576,7 @@ msgstr "" #: actions/emailsettings.php:238 actions/favor.php:75 #: actions/groupblock.php:66 actions/grouplogo.php:309 #: actions/groupunblock.php:66 actions/imsettings.php:206 -#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66 +#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66 #: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80 #: actions/othersettings.php:145 actions/passwordsettings.php:138 #: actions/profilesettings.php:187 actions/recoverpassword.php:337 @@ -830,108 +835,108 @@ msgstr "" msgid "Design settings for this StatusNet site." msgstr "" -#: actions/designadminpanel.php:270 +#: actions/designadminpanel.php:275 #, fuzzy msgid "Invalid logo URL." msgstr "尺寸錯誤" -#: actions/designadminpanel.php:274 +#: actions/designadminpanel.php:279 #, fuzzy, php-format msgid "Theme not available: %s" msgstr "個人首é ä½å€éŒ¯èª¤" -#: actions/designadminpanel.php:370 +#: actions/designadminpanel.php:375 #, fuzzy msgid "Change logo" msgstr "更改密碼" -#: actions/designadminpanel.php:375 +#: actions/designadminpanel.php:380 #, fuzzy msgid "Site logo" msgstr "新訊æ¯" -#: actions/designadminpanel.php:382 +#: actions/designadminpanel.php:387 #, fuzzy msgid "Change theme" msgstr "更改" -#: actions/designadminpanel.php:399 +#: actions/designadminpanel.php:404 #, fuzzy msgid "Site theme" msgstr "新訊æ¯" -#: actions/designadminpanel.php:400 +#: actions/designadminpanel.php:405 msgid "Theme for the site." msgstr "" -#: actions/designadminpanel.php:412 lib/designsettings.php:101 +#: actions/designadminpanel.php:417 lib/designsettings.php:101 msgid "Change background image" msgstr "" -#: actions/designadminpanel.php:417 actions/designadminpanel.php:492 +#: actions/designadminpanel.php:422 actions/designadminpanel.php:497 #: lib/designsettings.php:178 msgid "Background" msgstr "" -#: actions/designadminpanel.php:422 +#: actions/designadminpanel.php:427 #, php-format msgid "" "You can upload a background image for the site. The maximum file size is %1" "$s." msgstr "" -#: actions/designadminpanel.php:452 lib/designsettings.php:139 +#: actions/designadminpanel.php:457 lib/designsettings.php:139 msgid "On" msgstr "" -#: actions/designadminpanel.php:468 lib/designsettings.php:155 +#: actions/designadminpanel.php:473 lib/designsettings.php:155 msgid "Off" msgstr "" -#: actions/designadminpanel.php:469 lib/designsettings.php:156 +#: actions/designadminpanel.php:474 lib/designsettings.php:156 msgid "Turn background image on or off." msgstr "" -#: actions/designadminpanel.php:474 lib/designsettings.php:161 +#: actions/designadminpanel.php:479 lib/designsettings.php:161 msgid "Tile background image" msgstr "" -#: actions/designadminpanel.php:483 lib/designsettings.php:170 +#: actions/designadminpanel.php:488 lib/designsettings.php:170 #, fuzzy msgid "Change colours" msgstr "更改密碼" -#: actions/designadminpanel.php:505 lib/designsettings.php:191 +#: actions/designadminpanel.php:510 lib/designsettings.php:191 #, fuzzy msgid "Content" msgstr "連çµ" -#: actions/designadminpanel.php:518 lib/designsettings.php:204 +#: actions/designadminpanel.php:523 lib/designsettings.php:204 msgid "Sidebar" msgstr "" -#: actions/designadminpanel.php:531 lib/designsettings.php:217 +#: actions/designadminpanel.php:536 lib/designsettings.php:217 msgid "Text" msgstr "" -#: actions/designadminpanel.php:544 lib/designsettings.php:230 +#: actions/designadminpanel.php:549 lib/designsettings.php:230 #, fuzzy msgid "Links" msgstr "登入" -#: actions/designadminpanel.php:572 lib/designsettings.php:247 +#: actions/designadminpanel.php:577 lib/designsettings.php:247 msgid "Use defaults" msgstr "" -#: actions/designadminpanel.php:573 lib/designsettings.php:248 +#: actions/designadminpanel.php:578 lib/designsettings.php:248 msgid "Restore default designs" msgstr "" -#: actions/designadminpanel.php:579 lib/designsettings.php:254 +#: actions/designadminpanel.php:584 lib/designsettings.php:254 msgid "Reset back to default" msgstr "" -#: actions/designadminpanel.php:581 actions/emailsettings.php:195 +#: actions/designadminpanel.php:586 actions/emailsettings.php:195 #: actions/imsettings.php:163 actions/othersettings.php:126 #: actions/pathsadminpanel.php:296 actions/profilesettings.php:167 #: actions/siteadminpanel.php:421 actions/smssettings.php:181 @@ -941,7 +946,7 @@ msgstr "" msgid "Save" msgstr "" -#: actions/designadminpanel.php:582 lib/designsettings.php:257 +#: actions/designadminpanel.php:587 lib/designsettings.php:257 msgid "Save design" msgstr "" @@ -1375,19 +1380,19 @@ msgid "" "palette of your choice." msgstr "" -#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186 -#: lib/designsettings.php:434 lib/designsettings.php:464 +#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186 +#: lib/designsettings.php:391 lib/designsettings.php:413 #, fuzzy msgid "Couldn't update your design." msgstr "無法更新使用者" -#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296 +#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273 msgid "Unable to save your design settings!" msgstr "" -#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231 +#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231 msgid "Design preferences saved." msgstr "" @@ -1691,7 +1696,7 @@ msgstr "" msgid "Optionally add a personal message to the invitation." msgstr "" -#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225 +#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224 msgid "Send" msgstr "" @@ -1771,11 +1776,11 @@ msgstr "無法從 %s 建立OpenID" msgid "%s left group %s" msgstr "" -#: actions/login.php:79 actions/register.php:137 +#: actions/login.php:82 actions/register.php:137 msgid "Already logged in." msgstr "已登入" -#: actions/login.php:108 actions/login.php:118 +#: actions/login.php:113 actions/login.php:123 msgid "Invalid or expired token." msgstr "" @@ -1977,8 +1982,8 @@ msgstr "連çµ" msgid "Only " msgstr "" -#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999 -#: lib/api.php:1027 lib/api.php:1137 +#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996 +#: lib/api.php:1024 lib/api.php:1134 msgid "Not a supported data format." msgstr "" @@ -4299,37 +4304,51 @@ msgstr "" msgid "Can't turn on notification." msgstr "" -#: lib/command.php:592 +#: lib/command.php:588 +msgid "Login command is disabled" +msgstr "" + +#: lib/command.php:602 +#, fuzzy, php-format +msgid "Could not create login token for %s" +msgstr "無法å˜å–個人圖åƒè³‡æ–™" + +#: lib/command.php:607 +#, php-format +msgid "This link is useable only once, and is good for only 2 minutes: %s" +msgstr "" + +#: lib/command.php:623 #, fuzzy msgid "You are not subscribed to anyone." msgstr "æ¤å¸³è™Ÿå·²è¨»å†Š" -#: lib/command.php:594 +#: lib/command.php:625 msgid "You are subscribed to this person:" msgid_plural "You are subscribed to these people:" msgstr[0] "æ¤å¸³è™Ÿå·²è¨»å†Š" -#: lib/command.php:614 +#: lib/command.php:645 #, fuzzy msgid "No one is subscribed to you." msgstr "ç„¡æ¤è¨‚é–±" -#: lib/command.php:616 +#: lib/command.php:647 msgid "This person is subscribed to you:" msgid_plural "These people are subscribed to you:" msgstr[0] "ç„¡æ¤è¨‚é–±" -#: lib/command.php:636 +#: lib/command.php:667 #, fuzzy msgid "You are not a member of any groups." msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s" -#: lib/command.php:638 +#: lib/command.php:669 msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "無法連çµåˆ°ä¼ºæœå™¨:%s" -#: lib/command.php:652 +#: lib/command.php:683 msgid "" "Commands:\n" "on - turn on notifications\n" @@ -4348,6 +4367,7 @@ msgid "" "reply #<notice_id> - reply to notice with a given id\n" "reply <nickname> - reply to the last notice from user\n" "join <group> - join group\n" +"login - Get a link to login to the web interface\n" "drop <group> - leave group\n" "stats - get your stats\n" "stop - same as 'off'\n" @@ -4410,11 +4430,7 @@ msgid "" "You can upload your personal background image. The maximum file size is 2MB." msgstr "" -#: lib/designsettings.php:372 -msgid "Bad default color settings: " -msgstr "" - -#: lib/designsettings.php:468 +#: lib/designsettings.php:418 msgid "Design defaults restored." msgstr "" @@ -4875,7 +4891,7 @@ msgstr "" msgid "To" msgstr "" -#: lib/messageform.php:162 lib/noticeform.php:186 +#: lib/messageform.php:161 lib/noticeform.php:185 #, fuzzy msgid "Available characters" msgstr "6個以上å—å…ƒ" @@ -4890,11 +4906,11 @@ msgstr "新訊æ¯" msgid "What's up, %s?" msgstr "" -#: lib/noticeform.php:193 +#: lib/noticeform.php:192 msgid "Attach" msgstr "" -#: lib/noticeform.php:197 +#: lib/noticeform.php:196 msgid "Attach a file" msgstr "" @@ -5169,7 +5185,12 @@ msgstr "" msgid "Not subscribed!" msgstr "æ¤å¸³è™Ÿå·²è¨»å†Š" -#: lib/subs.php:140 +#: lib/subs.php:133 +#, fuzzy +msgid "Couldn't delete self-subscription." +msgstr "無法刪除帳號" + +#: lib/subs.php:146 msgid "Couldn't delete subscription." msgstr "無法刪除帳號" diff --git a/plugins/Facebook/FBConnectAuth.php b/plugins/Facebook/FBConnectAuth.php index b909a4977..51bfc3865 100644 --- a/plugins/Facebook/FBConnectAuth.php +++ b/plugins/Facebook/FBConnectAuth.php @@ -48,8 +48,8 @@ class FBConnectauthAction extends Action common_log(LOG_WARNING, 'Facebook Connect Plugin - ' . "Failed auth attempt, proxy = $proxy, ip = $ip."); - $this->clientError(_('You must be logged into Facebook to ' . - 'use Facebook Connect.')); + $this->clientError(_m('You must be logged into Facebook to ' . + 'use Facebook Connect.')); } return true; @@ -74,7 +74,7 @@ class FBConnectauthAction extends Action // We don't want these cookies getFacebook()->clear_cookie_state(); - $this->clientError(_('There is already a local user linked with this Facebook.')); + $this->clientError(_m('There is already a local user linked with this Facebook.')); } else { @@ -87,12 +87,12 @@ class FBConnectauthAction extends Action $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { - $this->showForm(_('There was a problem with your session token. Try again, please.')); + $this->showForm(_m('There was a problem with your session token. Try again, please.')); return; } if ($this->arg('create')) { if (!$this->boolean('license')) { - $this->showForm(_('You can\'t register if you don\'t agree to the license.'), + $this->showForm(_m('You can\'t register if you don\'t agree to the license.'), $this->trimmed('newname')); return; } @@ -102,7 +102,7 @@ class FBConnectauthAction extends Action } else { common_debug('Facebook Connect Plugin - ' . print_r($this->args, true)); - $this->showForm(_('Something weird happened.'), + $this->showForm(_m('Something weird happened.'), $this->trimmed('newname')); } } else { @@ -116,13 +116,13 @@ class FBConnectauthAction extends Action $this->element('div', array('class' => 'error'), $this->error); } else { $this->element('div', 'instructions', - sprintf(_('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name'))); + sprintf(_m('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name'))); } } function title() { - return _('Facebook Account Setup'); + return _m('Facebook Account Setup'); } function showForm($error=null, $username=null) @@ -150,7 +150,7 @@ class FBConnectauthAction extends Action 'class' => 'form_settings', 'action' => common_local_url('FBConnectAuth'))); $this->elementStart('fieldset', array('id' => 'settings_facebook_connect_options')); - $this->element('legend', null, _('Connection options')); + $this->element('legend', null, _m('Connection options')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); $this->element('input', array('type' => 'checkbox', @@ -159,10 +159,10 @@ class FBConnectauthAction extends Action 'name' => 'license', 'value' => 'true')); $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license')); - $this->text(_('My text and files are available under ')); + $this->text(_m('My text and files are available under ')); $this->element('a', array('href' => common_config('license', 'url')), common_config('license', 'title')); - $this->text(_(' except this private data: password, email address, IM address, phone number.')); + $this->text(_m(' except this private data: password, email address, IM address, phone number.')); $this->elementEnd('label'); $this->elementEnd('li'); $this->elementEnd('ul'); @@ -170,33 +170,33 @@ class FBConnectauthAction extends Action $this->elementStart('fieldset'); $this->hidden('token', common_session_token()); $this->element('legend', null, - _('Create new account')); + _m('Create new account')); $this->element('p', null, - _('Create a new user with this nickname.')); + _m('Create a new user with this nickname.')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); - $this->input('newname', _('New nickname'), + $this->input('newname', _m('New nickname'), ($this->username) ? $this->username : '', - _('1-64 lowercase letters or numbers, no punctuation or spaces')); + _m('1-64 lowercase letters or numbers, no punctuation or spaces')); $this->elementEnd('li'); $this->elementEnd('ul'); - $this->submit('create', _('Create')); + $this->submit('create', _m('Create')); $this->elementEnd('fieldset'); $this->elementStart('fieldset'); $this->element('legend', null, - _('Connect existing account')); + _m('Connect existing account')); $this->element('p', null, - _('If you already have an account, login with your username and password to connect it to your Facebook.')); + _m('If you already have an account, login with your username and password to connect it to your Facebook.')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); - $this->input('nickname', _('Existing nickname')); + $this->input('nickname', _m('Existing nickname')); $this->elementEnd('li'); $this->elementStart('li'); - $this->password('password', _('Password')); + $this->password('password', _m('Password')); $this->elementEnd('li'); $this->elementEnd('ul'); - $this->submit('connect', _('Connect')); + $this->submit('connect', _m('Connect')); $this->elementEnd('fieldset'); $this->elementEnd('fieldset'); @@ -212,7 +212,7 @@ class FBConnectauthAction extends Action function createNewUser() { if (common_config('site', 'closed')) { - $this->clientError(_('Registration not allowed.')); + $this->clientError(_m('Registration not allowed.')); return; } @@ -221,14 +221,14 @@ class FBConnectauthAction extends Action if (common_config('site', 'inviteonly')) { $code = $_SESSION['invitecode']; if (empty($code)) { - $this->clientError(_('Registration not allowed.')); + $this->clientError(_m('Registration not allowed.')); return; } $invite = Invitation::staticGet($code); if (empty($invite)) { - $this->clientError(_('Not a valid invitation code.')); + $this->clientError(_m('Not a valid invitation code.')); return; } } @@ -238,17 +238,17 @@ class FBConnectauthAction extends Action if (!Validate::string($nickname, array('min_length' => 1, 'max_length' => 64, 'format' => NICKNAME_FMT))) { - $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.')); + $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.')); return; } if (!User::allowed_nickname($nickname)) { - $this->showForm(_('Nickname not allowed.')); + $this->showForm(_m('Nickname not allowed.')); return; } if (User::staticGet('nickname', $nickname)) { - $this->showForm(_('Nickname already in use. Try another one.')); + $this->showForm(_m('Nickname already in use. Try another one.')); return; } @@ -266,7 +266,7 @@ class FBConnectauthAction extends Action $result = $this->flinkUser($user->id, $this->fbuid); if (!$result) { - $this->serverError(_('Error connecting user to Facebook.')); + $this->serverError(_m('Error connecting user to Facebook.')); return; } @@ -286,7 +286,7 @@ class FBConnectauthAction extends Action $password = $this->trimmed('password'); if (!common_check_user($nickname, $password)) { - $this->showForm(_('Invalid username or password.')); + $this->showForm(_m('Invalid username or password.')); return; } @@ -300,7 +300,7 @@ class FBConnectauthAction extends Action $result = $this->flinkUser($user->id, $this->fbuid); if (!$result) { - $this->serverError(_('Error connecting user to Facebook.')); + $this->serverError(_m('Error connecting user to Facebook.')); return; } @@ -320,7 +320,7 @@ class FBConnectauthAction extends Action $result = $this->flinkUser($user->id, $this->fbuid); if (empty($result)) { - $this->serverError(_('Error connecting user to Facebook.')); + $this->serverError(_m('Error connecting user to Facebook.')); return; } diff --git a/plugins/Facebook/FBConnectLogin.php b/plugins/Facebook/FBConnectLogin.php index d2bb8054c..20c409f3e 100644 --- a/plugins/Facebook/FBConnectLogin.php +++ b/plugins/Facebook/FBConnectLogin.php @@ -30,7 +30,7 @@ class FBConnectLoginAction extends Action parent::handle($args); if (common_is_real_login()) { - $this->clientError(_('Already logged in.')); + $this->clientError(_m('Already logged in.')); } $this->showPage(); @@ -38,7 +38,7 @@ class FBConnectLoginAction extends Action function getInstructions() { - return _('Login with your Facebook Account'); + return _m('Login with your Facebook Account'); } function showPageNotice() @@ -52,7 +52,7 @@ class FBConnectLoginAction extends Action function title() { - return _('Facebook Login'); + return _m('Facebook Login'); } function showContent() { diff --git a/plugins/Facebook/FBConnectSettings.php b/plugins/Facebook/FBConnectSettings.php index 911c56787..590dffd8a 100644 --- a/plugins/Facebook/FBConnectSettings.php +++ b/plugins/Facebook/FBConnectSettings.php @@ -53,7 +53,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction function title() { - return _('Facebook Connect Settings'); + return _m('Facebook Connect Settings'); } /** @@ -64,7 +64,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction function getInstructions() { - return _('Manage how your account connects to Facebook'); + return _m('Manage how your account connects to Facebook'); } /** @@ -89,7 +89,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction if (!$flink) { $this->element('p', 'instructions', - _('There is no Facebook user connected to this account.')); + _m('There is no Facebook user connected to this account.')); $this->element('fb:login-button', array('onlogin' => 'goto_login()', 'length' => 'long')); @@ -97,7 +97,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction } else { $this->element('p', 'form_note', - _('Connected Facebook user')); + _m('Connected Facebook user')); $this->elementStart('p', array('class' => 'facebook-user-display')); $this->elementStart('fb:profile-pic', @@ -116,18 +116,18 @@ class FBConnectSettingsAction extends ConnectSettingsAction $this->elementStart('fieldset'); - $this->element('legend', null, _('Disconnect my account from Facebook')); + $this->element('legend', null, _m('Disconnect my account from Facebook')); if (!$user->password) { $this->elementStart('p', array('class' => 'form_guide')); - $this->text(_('Disconnecting your Faceboook ' . - 'would make it impossible to log in! Please ')); + $this->text(_m('Disconnecting your Faceboook ' . + 'would make it impossible to log in! Please ')); $this->element('a', array('href' => common_local_url('passwordsettings')), - _('set a password')); + _m('set a password')); - $this->text(_(' first.')); + $this->text(_m(' first.')); $this->elementEnd('p'); } else { @@ -139,7 +139,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction $this->element('p', 'instructions', sprintf($note, $site, $site)); - $this->submit('disconnect', _('Disconnect')); + $this->submit('disconnect', _m('Disconnect')); } $this->elementEnd('fieldset'); @@ -161,8 +161,8 @@ class FBConnectSettingsAction extends ConnectSettingsAction // CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { - $this->showForm(_('There was a problem with your session token. '. - 'Try again, please.')); + $this->showForm(_m('There was a problem with your session token. '. + 'Try again, please.')); return; } @@ -175,7 +175,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction if ($result === false) { common_log_db_error($user, 'DELETE', __FILE__); - $this->serverError(_('Couldn\'t delete link to Facebook.')); + $this->serverError(_m('Couldn\'t delete link to Facebook.')); return; } @@ -191,10 +191,10 @@ class FBConnectSettingsAction extends ConnectSettingsAction $e->getMessage()); } - $this->showForm(_('You have disconnected from Facebook.'), true); + $this->showForm(_m('You have disconnected from Facebook.'), true); } else { - $this->showForm(_('Not sure what you\'re trying to do.')); + $this->showForm(_m('Not sure what you\'re trying to do.')); return; } diff --git a/plugins/Facebook/FacebookPlugin.php b/plugins/Facebook/FacebookPlugin.php index 047477d9c..39b2ef287 100644 --- a/plugins/Facebook/FacebookPlugin.php +++ b/plugins/Facebook/FacebookPlugin.php @@ -185,7 +185,6 @@ class FacebookPlugin extends Plugin // XXX: Facebook says we don't need this FB_RequireFeatures(), // but we actually do, for IE and Safari. Gar. - $js = '<script type="text/javascript">'; $js .= ' $(document).ready(function () {'; $js .= ' FB_RequireFeatures('; $js .= ' ["XFBML"], function() {'; @@ -219,7 +218,6 @@ class FacebookPlugin extends Plugin $js .= ' }'; $js .= ' );'; $js .= ' });'; - $js .= '</script>'; $js = sprintf($js, $apikey, $login_url, $logout_url); @@ -227,7 +225,7 @@ class FacebookPlugin extends Plugin $js = str_replace(' ', '', $js); - $action->raw(" $js"); // leading two spaces to make it line up + $action->inlineScript($js); } } @@ -408,9 +406,9 @@ class FacebookPlugin extends Plugin $action_name = $action->trimmed('action'); $action->menuItem(common_local_url('FBConnectLogin'), - _('Facebook'), - _('Login or register using Facebook'), - 'FBConnectLogin' === $action_name); + _m('Facebook'), + _m('Login or register using Facebook'), + 'FBConnectLogin' === $action_name); return true; } @@ -428,8 +426,8 @@ class FacebookPlugin extends Plugin $action_name = $action->trimmed('action'); $action->menuItem(common_local_url('FBConnectSettings'), - _('Facebook'), - _('Facebook Connect Settings'), + _m('Facebook'), + _m('Facebook Connect Settings'), $action_name === 'FBConnectSettings'); return true; diff --git a/plugins/Facebook/facebookaction.php b/plugins/Facebook/facebookaction.php index c852bbf5e..705bb2780 100644 --- a/plugins/Facebook/facebookaction.php +++ b/plugins/Facebook/facebookaction.php @@ -44,7 +44,7 @@ class FacebookAction extends Action var $app_uri = null; var $app_name = null; - function __construct($output='php://output', $indent=true, $facebook=null, $flink=null) + function __construct($output='php://output', $indent=null, $facebook=null, $flink=null) { parent::__construct($output, $indent); @@ -168,7 +168,7 @@ class FacebookAction extends Action $this->elementStart('li', array('class' => ($this->action == 'facebookhome') ? 'current' : 'facebook_home')); $this->element('a', - array('href' => 'index.php', 'title' => _('Home')), _('Home')); + array('href' => 'index.php', 'title' => _m('Home')), _m('Home')); $this->elementEnd('li'); if (common_config('invite', 'enabled')) { @@ -176,7 +176,7 @@ class FacebookAction extends Action array('class' => ($this->action == 'facebookinvite') ? 'current' : 'facebook_invite')); $this->element('a', - array('href' => 'invite.php', 'title' => _('Invite')), _('Invite')); + array('href' => 'invite.php', 'title' => _m('Invite')), _m('Invite')); $this->elementEnd('li'); } @@ -185,7 +185,7 @@ class FacebookAction extends Action ($this->action == 'facebooksettings') ? 'current' : 'facebook_settings')); $this->element('a', array('href' => 'settings.php', - 'title' => _('Settings')), _('Settings')); + 'title' => _m('Settings')), _m('Settings')); $this->elementEnd('li'); $this->elementEnd('ul'); @@ -225,15 +225,15 @@ class FacebookAction extends Action $this->elementStart('dl', array('class' => 'system_notice')); $this->element('dt', null, 'Page Notice'); - $loginmsg_part1 = _('To use the %s Facebook Application you need to login ' . + $loginmsg_part1 = _m('To use the %s Facebook Application you need to login ' . 'with your username and password. Don\'t have a username yet? '); - $loginmsg_part2 = _(' a new account.'); + $loginmsg_part2 = _m(' a new account.'); $this->elementStart('dd'); $this->elementStart('p'); $this->text(sprintf($loginmsg_part1, common_config('site', 'name'))); $this->element('a', - array('href' => common_local_url('register')), _('Register')); + array('href' => common_local_url('register')), _m('Register')); $this->text($loginmsg_part2); $this->elementEnd('p'); $this->elementEnd('dd'); @@ -246,7 +246,7 @@ class FacebookAction extends Action { $this->elementStart('div', array('id' => 'content')); - $this->element('h1', null, _('Login')); + $this->element('h1', null, _m('Login')); if ($msg) { $this->element('fb:error', array('message' => $msg)); @@ -265,20 +265,20 @@ class FacebookAction extends Action $this->elementStart('ul', array('class' => 'form_datas')); $this->elementStart('li'); - $this->input('nickname', _('Nickname')); + $this->input('nickname', _m('Nickname')); $this->elementEnd('li'); $this->elementStart('li'); - $this->password('password', _('Password')); + $this->password('password', _m('Password')); $this->elementEnd('li'); $this->elementEnd('ul'); - $this->submit('submit', _('Login')); + $this->submit('submit', _m('Login')); $this->elementEnd('fieldset'); $this->elementEnd('form'); $this->elementStart('p'); $this->element('a', array('href' => common_local_url('recoverpassword')), - _('Lost or forgotten password?')); + _m('Lost or forgotten password?')); $this->elementEnd('p'); $this->elementEnd('div'); @@ -383,7 +383,7 @@ class FacebookAction extends Action // Does a little before-after block for next/prev page if ($have_before || $have_after) { $this->elementStart('dl', 'pagination'); - $this->element('dt', null, _('Pagination')); + $this->element('dt', null, _m('Pagination')); $this->elementStart('dd', null); $this->elementStart('ul', array('class' => 'nav')); } @@ -392,7 +392,7 @@ class FacebookAction extends Action $newargs = $args ? array_merge($args, $pargs) : $pargs; $this->elementStart('li', array('class' => 'nav_prev')); $this->element('a', array('href' => "$this->app_uri/$action?page=$newargs[page]", 'rel' => 'prev'), - _('After')); + _m('After')); $this->elementEnd('li'); } if ($have_after) { @@ -400,7 +400,7 @@ class FacebookAction extends Action $newargs = $args ? array_merge($args, $pargs) : $pargs; $this->elementStart('li', array('class' => 'nav_next')); $this->element('a', array('href' => "$this->app_uri/$action?page=$newargs[page]", 'rel' => 'next'), - _('Before')); + _m('Before')); $this->elementEnd('li'); } if ($have_before || $have_after) { @@ -418,13 +418,13 @@ class FacebookAction extends Action $content = $this->trimmed('status_textarea'); if (!$content) { - $this->showPage(_('No notice content!')); + $this->showPage(_m('No notice content!')); return; } else { $content_shortened = common_shorten_links($content); if (Notice::contentTooLong($content_shortened)) { - $this->showPage(sprintf(_('That\'s too long. Max notice size is %d chars.'), + $this->showPage(sprintf(_m('That\'s too long. Max notice size is %d chars.'), Notice::maxContent())); return; } @@ -520,7 +520,7 @@ class FacebookNoticeList extends NoticeList function show() { $this->out->elementStart('div', array('id' =>'notices_primary')); - $this->out->element('h2', null, _('Notices')); + $this->out->element('h2', null, _m('Notices')); $this->out->elementStart('ul', array('class' => 'notices')); $cnt = 0; diff --git a/plugins/Facebook/facebookhome.php b/plugins/Facebook/facebookhome.php index ea141c2c2..60782f63c 100644 --- a/plugins/Facebook/facebookhome.php +++ b/plugins/Facebook/facebookhome.php @@ -108,7 +108,7 @@ class FacebookhomeAction extends FacebookAction $user = User::staticGet('nickname', $nickname); if (!$user) { - $this->showLoginForm(_("Server error - couldn't get user!")); + $this->showLoginForm(_m("Server error - couldn't get user!")); } $flink = DB_DataObject::factory('foreign_link'); @@ -128,7 +128,7 @@ class FacebookhomeAction extends FacebookAction return; } else { - $msg = _('Incorrect username or password.'); + $msg = _m('Incorrect username or password.'); } } @@ -155,9 +155,9 @@ class FacebookhomeAction extends FacebookAction function title() { if ($this->page > 1) { - return sprintf(_("%s and friends, page %d"), $this->user->nickname, $this->page); + return sprintf(_m("%s and friends, page %d"), $this->user->nickname, $this->page); } else { - return sprintf(_("%s and friends"), $this->user->nickname); + return sprintf(_m("%s and friends"), $this->user->nickname); } } @@ -186,7 +186,7 @@ class FacebookhomeAction extends FacebookAction $this->elementStart('div', array('class' => 'facebook_guide')); - $instructions = sprintf(_('If you would like the %s app to automatically update ' . + $instructions = sprintf(_m('If you would like the %s app to automatically update ' . 'your Facebook status with your latest notice, you need ' . 'to give it permission.'), $this->app_name); @@ -210,13 +210,13 @@ class FacebookhomeAction extends FacebookAction $this->elementStart('span', array('class' => 'facebook-button')); $this->element('a', array('href' => $auth_url), - sprintf(_('Okay, do it!'), $this->app_name)); + sprintf(_m('Okay, do it!'), $this->app_name)); $this->elementEnd('span'); $this->elementEnd('li'); $this->elementStart('li', array('id' => 'fb-permissions-item')); - $this->submit('skip', _('Skip')); + $this->submit('skip', _m('Skip')); $this->elementEnd('li'); $this->elementEnd('ul'); @@ -245,7 +245,7 @@ class FacebookhomeAction extends FacebookAction if ($have_before || $have_after) { $this->elementStart('dl', 'pagination'); - $this->element('dt', null, _('Pagination')); + $this->element('dt', null, _m('Pagination')); $this->elementStart('dd', null); $this->elementStart('ul', array('class' => 'nav')); } @@ -254,7 +254,7 @@ class FacebookhomeAction extends FacebookAction $newargs = $args ? array_merge($args, $pargs) : $pargs; $this->elementStart('li', array('class' => 'nav_prev')); $this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'prev'), - _('After')); + _m('After')); $this->elementEnd('li'); } if ($have_after) { @@ -262,7 +262,7 @@ class FacebookhomeAction extends FacebookAction $newargs = $args ? array_merge($args, $pargs) : $pargs; $this->elementStart('li', array('class' => 'nav_next')); $this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'next'), - _('Before')); + _m('Before')); $this->elementEnd('li'); } if ($have_before || $have_after) { diff --git a/plugins/Facebook/facebookinvite.php b/plugins/Facebook/facebookinvite.php index 3380b4c85..e02c7bf3e 100644 --- a/plugins/Facebook/facebookinvite.php +++ b/plugins/Facebook/facebookinvite.php @@ -69,9 +69,9 @@ class FacebookinviteAction extends FacebookAction function showSuccessContent() { - $this->element('h2', null, sprintf(_('Thanks for inviting your friends to use %s'), + $this->element('h2', null, sprintf(_m('Thanks for inviting your friends to use %s'), common_config('site', 'name'))); - $this->element('p', null, _('Invitations have been sent to the following users:')); + $this->element('p', null, _m('Invitations have been sent to the following users:')); $friend_ids = $_POST['ids']; // XXX: Hmm... is this the best way to access the list? @@ -91,7 +91,7 @@ class FacebookinviteAction extends FacebookAction function showFormContent() { - $content = sprintf(_('You have been invited to %s'), common_config('site', 'name')) . + $content = sprintf(_m('You have been invited to %s'), common_config('site', 'name')) . htmlentities('<fb:req-choice url="' . $this->app_uri . '" label="Add"/>'); $this->elementStart('fb:request-form', array('action' => 'invite.php', @@ -100,7 +100,7 @@ class FacebookinviteAction extends FacebookAction 'type' => common_config('site', 'name'), 'content' => $content)); $this->hidden('invite', 'true'); - $actiontext = sprintf(_('Invite your friends to use %s'), common_config('site', 'name')); + $actiontext = sprintf(_m('Invite your friends to use %s'), common_config('site', 'name')); $multi_params = array('showborder' => 'false'); $multi_params['actiontext'] = $actiontext; @@ -122,7 +122,7 @@ class FacebookinviteAction extends FacebookAction if ($exclude_ids) { - $this->element('h2', null, sprintf(_('Friends already using %s:'), + $this->element('h2', null, sprintf(_m('Friends already using %s:'), common_config('site', 'name'))); $this->elementStart('ul', array('id' => 'facebook-friends')); @@ -140,7 +140,7 @@ class FacebookinviteAction extends FacebookAction function title() { - return sprintf(_('Send invitations')); + return sprintf(_m('Send invitations')); } } diff --git a/plugins/Facebook/facebooklogin.php b/plugins/Facebook/facebooklogin.php index f77aecca3..7a173ddae 100644 --- a/plugins/Facebook/facebooklogin.php +++ b/plugins/Facebook/facebooklogin.php @@ -88,7 +88,7 @@ class FacebookinviteAction extends FacebookAction function title() { - return sprintf(_('Login')); + return sprintf(_m('Login')); } function redirectHome() diff --git a/plugins/Facebook/facebookremove.php b/plugins/Facebook/facebookremove.php index 8531a8e6e..09cb33342 100644 --- a/plugins/Facebook/facebookremove.php +++ b/plugins/Facebook/facebookremove.php @@ -55,7 +55,7 @@ class FacebookremoveAction extends FacebookAction if (!$result) { common_log_db_error($flink, 'DELETE', __FILE__); - $this->serverError(_('Couldn\'t remove Facebook user.')); + $this->serverError(_m('Couldn\'t remove Facebook user.')); return; } diff --git a/plugins/Facebook/facebooksettings.php b/plugins/Facebook/facebooksettings.php index d1269f101..766d0e199 100644 --- a/plugins/Facebook/facebooksettings.php +++ b/plugins/Facebook/facebooksettings.php @@ -71,9 +71,9 @@ class FacebooksettingsAction extends FacebookAction $trimmed); if ($result === false) { - $this->showForm(_('There was a problem saving your sync preferences!')); + $this->showForm(_m('There was a problem saving your sync preferences!')); } else { - $this->showForm(_('Sync preferences saved.'), true); + $this->showForm(_m('Sync preferences saved.'), true); } } @@ -96,14 +96,14 @@ class FacebooksettingsAction extends FacebookAction $this->elementStart('li'); - $this->checkbox('noticesync', _('Automatically update my Facebook status with my notices.'), + $this->checkbox('noticesync', _m('Automatically update my Facebook status with my notices.'), ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND) : true); $this->elementEnd('li'); $this->elementStart('li'); - $this->checkbox('replysync', _('Send "@" replies to Facebook.'), + $this->checkbox('replysync', _m('Send "@" replies to Facebook.'), ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true); $this->elementEnd('li'); @@ -112,15 +112,15 @@ class FacebooksettingsAction extends FacebookAction $prefix = trim($this->facebook->api_client->data_getUserPreference(FACEBOOK_NOTICE_PREFIX)); - $this->input('prefix', _('Prefix'), + $this->input('prefix', _m('Prefix'), ($prefix) ? $prefix : null, - _('A string to prefix notices with.')); + _m('A string to prefix notices with.')); $this->elementEnd('li'); $this->elementStart('li'); - $this->submit('save', _('Save')); + $this->submit('save', _m('Save')); $this->elementEnd('li'); @@ -130,7 +130,7 @@ class FacebooksettingsAction extends FacebookAction } else { - $instructions = sprintf(_('If you would like %s to automatically update ' . + $instructions = sprintf(_m('If you would like %s to automatically update ' . 'your Facebook status with your latest notice, you need ' . 'to give it permission.'), $this->app_name); @@ -143,7 +143,7 @@ class FacebooksettingsAction extends FacebookAction $this->elementStart('fb:prompt-permission', array('perms' => 'publish_stream', 'next_fbjs' => 'document.setLocation(\'' . "$this->app_uri/settings.php" . '\')')); $this->element('span', array('class' => 'facebook-button'), - sprintf(_('Allow %s to update my Facebook status'), common_config('site', 'name'))); + sprintf(_m('Allow %s to update my Facebook status'), common_config('site', 'name'))); $this->elementEnd('fb:prompt-permission'); $this->elementEnd('li'); $this->elementEnd('ul'); @@ -153,7 +153,7 @@ class FacebooksettingsAction extends FacebookAction function title() { - return _('Sync preferences'); + return _m('Sync preferences'); } } diff --git a/plugins/Facebook/facebookutil.php b/plugins/Facebook/facebookutil.php index 6f50c173a..2ec6db6b8 100644 --- a/plugins/Facebook/facebookutil.php +++ b/plugins/Facebook/facebookutil.php @@ -168,7 +168,7 @@ function facebookBroadcastNotice($notice) function updateProfileBox($facebook, $flink, $notice) { $fbaction = new FacebookAction($output = 'php://output', - $indent = true, $facebook, $flink); + $indent = null, $facebook, $flink); $fbaction->updateProfileBox($notice); } @@ -277,10 +277,10 @@ function mail_facebook_app_removed($user) $site_name = common_config('site', 'name'); $subject = sprintf( - _('Your %1$s Facebook application access has been disabled.', + _m('Your %1$s Facebook application access has been disabled.', $site_name)); - $body = sprintf(_("Hi, %1\$s. We're sorry to inform you that we are " . + $body = sprintf(_m("Hi, %1\$s. We're sorry to inform you that we are " . 'unable to update your Facebook status from %2$s, and have disabled ' . 'the Facebook application for your account. This may be because ' . 'you have removed the Facebook application\'s authorization, or ' . diff --git a/plugins/Facebook/locale/Facebook.po b/plugins/Facebook/locale/Facebook.po new file mode 100644 index 000000000..5b313c8c5 --- /dev/null +++ b/plugins/Facebook/locale/Facebook.po @@ -0,0 +1,394 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-12-07 20:38-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: facebookaction.php:171 +msgid "Home" +msgstr "" + +#: facebookaction.php:179 +msgid "Invite" +msgstr "" + +#: facebookaction.php:188 +msgid "Settings" +msgstr "" + +#: facebookaction.php:228 +#, php-format +msgid "" +"To use the %s Facebook Application you need to login with your username and " +"password. Don't have a username yet? " +msgstr "" + +#: facebookaction.php:230 +msgid " a new account." +msgstr "" + +#: facebookaction.php:236 +msgid "Register" +msgstr "" + +#: facebookaction.php:249 facebookaction.php:275 facebooklogin.php:91 +msgid "Login" +msgstr "" + +#: facebookaction.php:268 +msgid "Nickname" +msgstr "" + +#: facebookaction.php:271 FBConnectAuth.php:196 +msgid "Password" +msgstr "" + +#: facebookaction.php:281 +msgid "Lost or forgotten password?" +msgstr "" + +#: facebookaction.php:386 facebookhome.php:248 +msgid "Pagination" +msgstr "" + +#: facebookaction.php:395 facebookhome.php:257 +msgid "After" +msgstr "" + +#: facebookaction.php:403 facebookhome.php:265 +msgid "Before" +msgstr "" + +#: facebookaction.php:421 +msgid "No notice content!" +msgstr "" + +#: facebookaction.php:427 +#, php-format +msgid "That's too long. Max notice size is %d chars." +msgstr "" + +#: facebookaction.php:523 +msgid "Notices" +msgstr "" + +#: facebookutil.php:280 +#, php-format +msgid "Your %1$s Facebook application access has been disabled." +msgstr "" + +#: facebookutil.php:283 +#, php-format +msgid "" +"Hi, %1$s. We're sorry to inform you that we are unable to update your " +"Facebook status from %2$s, and have disabled the Facebook application for " +"your account. This may be because you have removed the Facebook " +"application's authorization, or have deleted your Facebook account. You can " +"re-enable the Facebook application and automatic status updating by re-" +"installing the %2$s Facebook application.\n" +"\n" +"Regards,\n" +"\n" +"%2$s" +msgstr "" + +#: FBConnectLogin.php:33 +msgid "Already logged in." +msgstr "" + +#: FBConnectLogin.php:41 +msgid "Login with your Facebook Account" +msgstr "" + +#: FBConnectLogin.php:55 +msgid "Facebook Login" +msgstr "" + +#: facebookhome.php:111 +msgid "Server error - couldn't get user!" +msgstr "" + +#: facebookhome.php:131 +msgid "Incorrect username or password." +msgstr "" + +#: facebookhome.php:158 +#, php-format +msgid "%s and friends, page %d" +msgstr "" + +#: facebookhome.php:160 +#, php-format +msgid "%s and friends" +msgstr "" + +#: facebookhome.php:189 +#, php-format +msgid "" +"If you would like the %s app to automatically update your Facebook status " +"with your latest notice, you need to give it permission." +msgstr "" + +#: facebookhome.php:213 +msgid "Okay, do it!" +msgstr "" + +#: facebookhome.php:219 +msgid "Skip" +msgstr "" + +#: facebooksettings.php:74 +msgid "There was a problem saving your sync preferences!" +msgstr "" + +#: facebooksettings.php:76 +msgid "Sync preferences saved." +msgstr "" + +#: facebooksettings.php:99 +msgid "Automatically update my Facebook status with my notices." +msgstr "" + +#: facebooksettings.php:106 +msgid "Send \"@\" replies to Facebook." +msgstr "" + +#: facebooksettings.php:115 +msgid "Prefix" +msgstr "" + +#: facebooksettings.php:117 +msgid "A string to prefix notices with." +msgstr "" + +#: facebooksettings.php:123 +msgid "Save" +msgstr "" + +#: facebooksettings.php:133 +#, php-format +msgid "" +"If you would like %s to automatically update your Facebook status with your " +"latest notice, you need to give it permission." +msgstr "" + +#: facebooksettings.php:146 +#, php-format +msgid "Allow %s to update my Facebook status" +msgstr "" + +#: facebooksettings.php:156 +msgid "Sync preferences" +msgstr "" + +#: facebookinvite.php:72 +#, php-format +msgid "Thanks for inviting your friends to use %s" +msgstr "" + +#: facebookinvite.php:74 +msgid "Invitations have been sent to the following users:" +msgstr "" + +#: facebookinvite.php:94 +#, php-format +msgid "You have been invited to %s" +msgstr "" + +#: facebookinvite.php:103 +#, php-format +msgid "Invite your friends to use %s" +msgstr "" + +#: facebookinvite.php:125 +#, php-format +msgid "Friends already using %s:" +msgstr "" + +#: facebookinvite.php:143 +msgid "Send invitations" +msgstr "" + +#: facebookremove.php:58 +msgid "Couldn't remove Facebook user." +msgstr "" + +#: FBConnectSettings.php:56 FacebookPlugin.php:430 +msgid "Facebook Connect Settings" +msgstr "" + +#: FBConnectSettings.php:67 +msgid "Manage how your account connects to Facebook" +msgstr "" + +#: FBConnectSettings.php:92 +msgid "There is no Facebook user connected to this account." +msgstr "" + +#: FBConnectSettings.php:100 +msgid "Connected Facebook user" +msgstr "" + +#: FBConnectSettings.php:119 +msgid "Disconnect my account from Facebook" +msgstr "" + +#: FBConnectSettings.php:124 +msgid "" +"Disconnecting your Faceboook would make it impossible to log in! Please " +msgstr "" + +#: FBConnectSettings.php:128 +msgid "set a password" +msgstr "" + +#: FBConnectSettings.php:130 +msgid " first." +msgstr "" + +#: FBConnectSettings.php:142 +msgid "Disconnect" +msgstr "" + +#: FBConnectSettings.php:164 FBConnectAuth.php:90 +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#: FBConnectSettings.php:178 +msgid "Couldn't delete link to Facebook." +msgstr "" + +#: FBConnectSettings.php:194 +msgid "You have disconnected from Facebook." +msgstr "" + +#: FBConnectSettings.php:197 +msgid "Not sure what you're trying to do." +msgstr "" + +#: FBConnectAuth.php:51 +msgid "You must be logged into Facebook to use Facebook Connect." +msgstr "" + +#: FBConnectAuth.php:77 +msgid "There is already a local user linked with this Facebook." +msgstr "" + +#: FBConnectAuth.php:95 +msgid "You can't register if you don't agree to the license." +msgstr "" + +#: FBConnectAuth.php:105 +msgid "Something weird happened." +msgstr "" + +#: FBConnectAuth.php:119 +#, php-format +msgid "" +"This is the first time you've logged into %s so we must connect your " +"Facebook to a local account. You can either create a new account, or connect " +"with your existing account, if you have one." +msgstr "" + +#: FBConnectAuth.php:125 +msgid "Facebook Account Setup" +msgstr "" + +#: FBConnectAuth.php:153 +msgid "Connection options" +msgstr "" + +#: FBConnectAuth.php:162 +msgid "My text and files are available under " +msgstr "" + +#: FBConnectAuth.php:165 +msgid "" +" except this private data: password, email address, IM address, phone number." +msgstr "" + +#: FBConnectAuth.php:173 +msgid "Create new account" +msgstr "" + +#: FBConnectAuth.php:175 +msgid "Create a new user with this nickname." +msgstr "" + +#: FBConnectAuth.php:178 +msgid "New nickname" +msgstr "" + +#: FBConnectAuth.php:180 +msgid "1-64 lowercase letters or numbers, no punctuation or spaces" +msgstr "" + +#: FBConnectAuth.php:183 +msgid "Create" +msgstr "" + +#: FBConnectAuth.php:188 +msgid "Connect existing account" +msgstr "" + +#: FBConnectAuth.php:190 +msgid "" +"If you already have an account, login with your username and password to " +"connect it to your Facebook." +msgstr "" + +#: FBConnectAuth.php:193 +msgid "Existing nickname" +msgstr "" + +#: FBConnectAuth.php:199 +msgid "Connect" +msgstr "" + +#: FBConnectAuth.php:215 FBConnectAuth.php:224 +msgid "Registration not allowed." +msgstr "" + +#: FBConnectAuth.php:231 +msgid "Not a valid invitation code." +msgstr "" + +#: FBConnectAuth.php:241 +msgid "Nickname must have only lowercase letters and numbers and no spaces." +msgstr "" + +#: FBConnectAuth.php:246 +msgid "Nickname not allowed." +msgstr "" + +#: FBConnectAuth.php:251 +msgid "Nickname already in use. Try another one." +msgstr "" + +#: FBConnectAuth.php:269 FBConnectAuth.php:303 FBConnectAuth.php:323 +msgid "Error connecting user to Facebook." +msgstr "" + +#: FBConnectAuth.php:289 +msgid "Invalid username or password." +msgstr "" + +#: FacebookPlugin.php:409 FacebookPlugin.php:429 +msgid "Facebook" +msgstr "" + +#: FacebookPlugin.php:410 +msgid "Login or register using Facebook" +msgstr "" diff --git a/plugins/FeedSub/FeedSubPlugin.php b/plugins/FeedSub/FeedSubPlugin.php index 36d4e7802..857a9794d 100644 --- a/plugins/FeedSub/FeedSubPlugin.php +++ b/plugins/FeedSub/FeedSubPlugin.php @@ -51,7 +51,6 @@ class FeedSubPlugin extends Plugin * @param Net_URL_Mapper $m path-to-action mapper * @return boolean hook return */ - function onRouterInitialized($m) { $m->connect('feedsub/callback/:feed', @@ -74,8 +73,8 @@ class FeedSubPlugin extends Plugin $action_name = $action->trimmed('action'); $action->menuItem(common_local_url('feedsubsettings'), - dgettext('FeebSubPlugin', 'Feeds'), - dgettext('FeedSubPlugin', 'Feed subscription options'), + _m('Feeds'), + _m('Feed subscription options'), $action_name === 'feedsubsettings'); return true; diff --git a/plugins/FeedSub/actions/feedsubsettings.php b/plugins/FeedSub/actions/feedsubsettings.php index 242224fac..0fba20a39 100644 --- a/plugins/FeedSub/actions/feedsubsettings.php +++ b/plugins/FeedSub/actions/feedsubsettings.php @@ -38,7 +38,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction function title() { - return dgettext('FeedSubPlugin', 'Feed subscriptions'); + return _m('Feed subscriptions'); } /** @@ -49,9 +49,8 @@ class FeedSubSettingsAction extends ConnectSettingsAction function getInstructions() { - return dgettext('FeedSubPlugin', - 'You can subscribe to feeds from other sites; ' . - 'updates will appear in your personal timeline.'); + return _m('You can subscribe to feeds from other sites; ' . + 'updates will appear in your personal timeline.'); } /** @@ -94,9 +93,9 @@ class FeedSubSettingsAction extends ConnectSettingsAction $this->elementEnd('ul'); if ($this->preview) { - $this->submit('subscribe', dgettext('FeedSubPlugin', 'Subscribe')); + $this->submit('subscribe', _m('Subscribe')); } else { - $this->submit('validate', dgettext('FeedSubPlugin', 'Continue')); + $this->submit('validate', _m('Continue')); } $this->elementEnd('fieldset'); @@ -149,8 +148,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction $feedurl = trim($this->arg('feedurl')); if ($feedurl == '') { - $this->showForm(dgettext('FeedSubPlugin', - 'Empty feed URL!')); + $this->showForm(_m('Empty feed URL!')); return; } $this->feedurl = $feedurl; @@ -160,26 +158,26 @@ class FeedSubSettingsAction extends ConnectSettingsAction $discover = new FeedDiscovery(); $uri = $discover->discoverFromURL($feedurl); } catch (FeedSubBadURLException $e) { - $this->showForm(dgettext('FeedSubPlugin', 'Invalid URL or could not reach server.')); + $this->showForm(_m('Invalid URL or could not reach server.')); return false; } catch (FeedSubBadResponseException $e) { - $this->showForm(dgettext('FeedSubPlugin', 'Cannot read feed; server returned error.')); + $this->showForm(_m('Cannot read feed; server returned error.')); return false; } catch (FeedSubEmptyException $e) { - $this->showForm(dgettext('FeedSubPlugin', 'Cannot read feed; server returned an empty page.')); + $this->showForm(_m('Cannot read feed; server returned an empty page.')); return false; } catch (FeedSubBadHTMLException $e) { - $this->showForm(dgettext('FeedSubPlugin', 'Bad HTML, could not find feed link.')); + $this->showForm(_m('Bad HTML, could not find feed link.')); return false; } catch (FeedSubNoFeedException $e) { - $this->showForm(dgettext('FeedSubPlugin', 'Could not find a feed linked from this URL.')); + $this->showForm(_m('Could not find a feed linked from this URL.')); return false; } catch (FeedSubUnrecognizedTypeException $e) { - $this->showForm(dgettext('FeedSubPlugin', 'Not a recognized feed type.')); + $this->showForm(_m('Not a recognized feed type.')); return false; } catch (FeedSubException $e) { // Any new ones we forgot about - $this->showForm(dgettext('FeedSubPlugin', 'Bad feed URL.')); + $this->showForm(_m('Bad feed URL.')); return false; } @@ -187,7 +185,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction $this->feedinfo = $this->munger->feedInfo(); if ($this->feedinfo->huburi == '') { - $this->showForm(dgettext('FeedSubPlugin', 'Feed is not PuSH-enabled; cannot subscribe.')); + $this->showForm(_m('Feed is not PuSH-enabled; cannot subscribe.')); return false; } @@ -207,7 +205,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction $ok = $this->feedinfo->subscribe(); common_log(LOG_INFO, __METHOD__ . ": sub was $ok"); if (!$ok) { - $this->showForm(dgettext('FeedSubPlugin', 'Feed subscription failed! Bad response from hub.')); + $this->showForm(_m('Feed subscription failed! Bad response from hub.')); return; } } @@ -217,11 +215,11 @@ class FeedSubSettingsAction extends ConnectSettingsAction $profile = $this->feedinfo->getProfile(); if ($user->isSubscribed($profile)) { - $this->showForm(dgettext('FeedSubPlugin', 'Already subscribed!')); + $this->showForm(_m('Already subscribed!')); } elseif ($user->subscribeTo($profile)) { - $this->showForm(dgettext('FeedSubPlugin', 'Feed subscribed!')); + $this->showForm(_m('Feed subscribed!')); } else { - $this->showForm(dgettext('FeedSubPlugin', 'Feed subscription failed!')); + $this->showForm(_m('Feed subscription failed!')); } } } @@ -230,7 +228,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction { if ($this->validateFeed()) { $this->preview = true; - $this->showForm(dgettext('FeedSubPlugin', 'Previewing feed:')); + $this->showForm(_m('Previewing feed:')); } } diff --git a/plugins/FeedSub/feedmunger.php b/plugins/FeedSub/feedmunger.php index bb8075da9..f3618b8eb 100644 --- a/plugins/FeedSub/feedmunger.php +++ b/plugins/FeedSub/feedmunger.php @@ -212,7 +212,7 @@ class FeedMunger // try adding #hashtags from the categories/tags on a post. // @todo Should we force a language here? - $format = dgettext("FeedSubPlugin", 'New post: "%1$s" %2$s'); + $format = _m('New post: "%1$s" %2$s'); $title = $entry->title; $link = $this->getAltLink($entry); $out = sprintf($format, $title, $link); diff --git a/plugins/FeedSub/locale/FeedSub.po b/plugins/FeedSub/locale/FeedSub.po new file mode 100644 index 000000000..dedc018e3 --- /dev/null +++ b/plugins/FeedSub/locale/FeedSub.po @@ -0,0 +1,104 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-12-07 20:38-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tests/gettext-speedtest.php:57 FeedSubPlugin.php:76 +msgid "Feeds" +msgstr "" + +#: FeedSubPlugin.php:77 +msgid "Feed subscription options" +msgstr "" + +#: feedmunger.php:215 +#, php-format +msgid "New post: \"%1$s\" %2$s" +msgstr "" + +#: actions/feedsubsettings.php:41 +msgid "Feed subscriptions" +msgstr "" + +#: actions/feedsubsettings.php:52 +msgid "" +"You can subscribe to feeds from other sites; updates will appear in your " +"personal timeline." +msgstr "" + +#: actions/feedsubsettings.php:96 +msgid "Subscribe" +msgstr "" + +#: actions/feedsubsettings.php:98 +msgid "Continue" +msgstr "" + +#: actions/feedsubsettings.php:151 +msgid "Empty feed URL!" +msgstr "" + +#: actions/feedsubsettings.php:161 +msgid "Invalid URL or could not reach server." +msgstr "" + +#: actions/feedsubsettings.php:164 +msgid "Cannot read feed; server returned error." +msgstr "" + +#: actions/feedsubsettings.php:167 +msgid "Cannot read feed; server returned an empty page." +msgstr "" + +#: actions/feedsubsettings.php:170 +msgid "Bad HTML, could not find feed link." +msgstr "" + +#: actions/feedsubsettings.php:173 +msgid "Could not find a feed linked from this URL." +msgstr "" + +#: actions/feedsubsettings.php:176 +msgid "Not a recognized feed type." +msgstr "" + +#: actions/feedsubsettings.php:180 +msgid "Bad feed URL." +msgstr "" + +#: actions/feedsubsettings.php:188 +msgid "Feed is not PuSH-enabled; cannot subscribe." +msgstr "" + +#: actions/feedsubsettings.php:208 +msgid "Feed subscription failed! Bad response from hub." +msgstr "" + +#: actions/feedsubsettings.php:218 +msgid "Already subscribed!" +msgstr "" + +#: actions/feedsubsettings.php:220 +msgid "Feed subscribed!" +msgstr "" + +#: actions/feedsubsettings.php:222 +msgid "Feed subscription failed!" +msgstr "" + +#: actions/feedsubsettings.php:231 +msgid "Previewing feed:" +msgstr "" diff --git a/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po b/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po new file mode 100644 index 000000000..f17dfa50a --- /dev/null +++ b/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po @@ -0,0 +1,106 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-12-07 14:14-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: FeedSubPlugin.php:77 +msgid "Feeds" +msgstr "Flux" + +#: FeedSubPlugin.php:78 +msgid "Feed subscription options" +msgstr "Préférences pour abonnement flux" + +#: feedmunger.php:215 +#, php-format +msgid "New post: \"%1$s\" %2$s" +msgstr "Nouveau: \"%1$s\" %2$s" + +#: actions/feedsubsettings.php:41 +msgid "Feed subscriptions" +msgstr "Abonnements aux fluxes" + +#: actions/feedsubsettings.php:52 +msgid "" +"You can subscribe to feeds from other sites; updates will appear in your " +"personal timeline." +msgstr "" +"Abonner aux fluxes RSS ou Atom des autres sites web; les temps se trouverair" +"en votre flux personnel." + +#: actions/feedsubsettings.php:96 +msgid "Subscribe" +msgstr "Abonner" + +#: actions/feedsubsettings.php:98 +msgid "Continue" +msgstr "Prochaine" + +#: actions/feedsubsettings.php:151 +msgid "Empty feed URL!" +msgstr "" + +#: actions/feedsubsettings.php:161 +msgid "Invalid URL or could not reach server." +msgstr "" + +#: actions/feedsubsettings.php:164 +msgid "Cannot read feed; server returned error." +msgstr "" + +#: actions/feedsubsettings.php:167 +msgid "Cannot read feed; server returned an empty page." +msgstr "" + +#: actions/feedsubsettings.php:170 +msgid "Bad HTML, could not find feed link." +msgstr "" + +#: actions/feedsubsettings.php:173 +msgid "Could not find a feed linked from this URL." +msgstr "" + +#: actions/feedsubsettings.php:176 +msgid "Not a recognized feed type." +msgstr "" + +#: actions/feedsubsettings.php:180 +msgid "Bad feed URL." +msgstr "" + +#: actions/feedsubsettings.php:188 +msgid "Feed is not PuSH-enabled; cannot subscribe." +msgstr "" + +#: actions/feedsubsettings.php:208 +msgid "Feed subscription failed! Bad response from hub." +msgstr "" + +#: actions/feedsubsettings.php:218 +msgid "Already subscribed!" +msgstr "" + +#: actions/feedsubsettings.php:220 +msgid "Feed subscribed!" +msgstr "" + +#: actions/feedsubsettings.php:222 +msgid "Feed subscription failed!" +msgstr "" + +#: actions/feedsubsettings.php:231 +msgid "Previewing feed:" +msgstr "" diff --git a/plugins/FeedSub/tests/gettext-speedtest.php b/plugins/FeedSub/tests/gettext-speedtest.php new file mode 100644 index 000000000..8bbdf5e89 --- /dev/null +++ b/plugins/FeedSub/tests/gettext-speedtest.php @@ -0,0 +1,78 @@ +<?php + +if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { + print "This script must be run from the command line\n"; + exit(); +} + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); +define('STATUSNET', true); +define('LACONICA', true); + +require_once INSTALLDIR . '/scripts/commandline.inc'; +require_once INSTALLDIR . '/extlib/php-gettext/gettext.inc'; + +common_init_locale("en_US"); +common_init_locale('fr'); + + +putenv("LANG=fr"); +putenv("LANGUAGE=fr"); +setlocale('fr.utf8'); +_setlocale('fr.utf8'); + +_bindtextdomain("statusnet", INSTALLDIR . '/locale'); +_bindtextdomain("FeedSub", INSTALLDIR . '/plugins/FeedSub/locale'); + +$times = 10000; +$delta = array(); + +$start = microtime(true); +for($i = 0; $i < $times; $i++) { + $result = _("Send"); +} +$delta["_"] = array((microtime(true) - $start) / $times, $result); + +$start = microtime(true); +for($i = 0; $i < $times; $i++) { + $result = __("Send"); +} +$delta["__"] = array((microtime(true) - $start) / $times, $result); + +$start = microtime(true); +for($i = 0; $i < $times; $i++) { + $result = dgettext("FeedSub", "Feeds"); +} +$delta["dgettext"] = array((microtime(true) - $start) / $times, $result); + +$start = microtime(true); +for($i = 0; $i < $times; $i++) { + $result = _dgettext("FeedSub", "Feeds"); +} +$delta["_dgettext"] = array((microtime(true) - $start) / $times, $result); + + +$start = microtime(true); +for($i = 0; $i < $times; $i++) { + $result = _m("Feeds"); +} +$delta["_m"] = array((microtime(true) - $start) / $times, $result); + + +$start = microtime(true); +for($i = 0; $i < $times; $i++) { + $result = fake("Feeds"); +} +$delta["fake"] = array((microtime(true) - $start) / $times, $result); + +foreach ($delta as $func => $bits) { + list($time, $result) = $bits; + $ms = $time * 1000.0; + printf("%10s %2.4fms %s\n", $func, $ms, $result); +} + + +function fake($str) { + return $str; +} + diff --git a/plugins/FirePHP/FirePHPPlugin.php b/plugins/FirePHP/FirePHPPlugin.php new file mode 100644 index 000000000..37b397796 --- /dev/null +++ b/plugins/FirePHP/FirePHPPlugin.php @@ -0,0 +1,59 @@ +<?php +/* +StatusNet Plugin: 0.9 +Plugin Name: FirePHP +Description: Sends StatusNet log output to FirePHP +Version: 0.1 +Author: Craig Andrews <candrews@integralblue.com> +Author URI: http://candrews.integralblue.com/ +*/ + +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2009, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * @package MinifyPlugin + * @maintainer Craig Andrews <candrews@integralblue.com> + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } + +// We bundle the FirePHP library... +set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/FirePHP/lib'); + +class FirePHPPlugin extends Plugin +{ + private $firephp; + + function onInitializePlugin() + { + //Output buffering has to be enabled so FirePHP can send the HTTP headers it needs + ob_start(); + require_once('FirePHPCore/FirePHP.class.php'); + $this->firephp = FirePHP::getInstance(true); + } + + function onStartLog(&$priority, &$msg, &$filename) + { + static $firephp_priorities = array(FirePHP::ERROR, FirePHP::ERROR, FirePHP::ERROR, FirePHP::ERROR, + FirePHP::WARN, FirePHP::LOG, FirePHP::LOG, FirePHP::INFO); + $priority = $firephp_priorities[$priority]; + $this->firephp->fb($msg, $priority); + } +} + diff --git a/plugins/FirePHP/README b/plugins/FirePHP/README new file mode 100644 index 000000000..ee22794d5 --- /dev/null +++ b/plugins/FirePHP/README @@ -0,0 +1,21 @@ +The FirePHP writes StatusNet's log output to FirePHP. + +Using FirePHP on production sites can expose sensitive information. + You must protect the security of your application by disabling FirePHP + logging on your live site. + +Installation +============ +add "addPlugin('FirePHP', + array('setting'=>'value', 'setting2'=>'value2', ...);" +to the bottom of your config.php + +Settings +======== +None at the moment. + +Example +======= + +addPlugin('FirePHP', array()); + diff --git a/plugins/FirePHP/extlib/FirePHP/CHANGELOG b/plugins/FirePHP/extlib/FirePHP/CHANGELOG new file mode 100644 index 000000000..619198079 --- /dev/null +++ b/plugins/FirePHP/extlib/FirePHP/CHANGELOG @@ -0,0 +1,110 @@ + +2008-06-14 - Release Version: 0.3.1 + + - (Issue 108) ignore class name case in object filter + +2009-05-11 - Release Version: 0.3 +2009-05-01 - Release Version: 0.3.rc.1 + + - (Issue 90) PHP4 compatible version of FirePHPCore + - (Issue 98) Thrown exceptions don't send an HTTP 500 if the FirePHP exception handler is enabled + - (Issue 85) Support associative arrays in encodeTable method in FirePHP.class.php + - (Issue 66) Add a new getOptions() public method in API + - (Issue 82) Define $this->options outside of __construct + - (Issue 72) Message error if group name is null + - (Issue 68) registerErrorHandler() and registerExceptionHandler() should returns previous handlers defined + - (Issue 69) Add the missing register handler in the triumvirate (error, exception, assert) + - (Issue 75) [Error & Exception Handling] Option to not exit script execution + - (Issue 83) Exception handler can't throw exceptions + - (Issue 80) Auto/Pre collapsing groups AND Custom group row colors + +2008-11-09 - Release Version: 0.2.1 + + - (Issue 70) Problem when logging resources + +2008-10-21 - Release Version: 0.2.0 + + - Updated version to 0.2.0 + - Switched to using __sleep instead of __wakeup + - Added support to exclude object members when encoding + - Add support to enable/disable logging + +2008-10-17 - Release Version: 0.2.b.8 + + - New implementation for is_utf8() + - (Issue 55) maxObjectDepth Option not working correctly when using TABLE and EXCEPTION Type + - Bugfix for max[Object|Array]Depth when encoding nested array/object graphs + - Bugfix for FB::setOptions() + +2008-10-16 - Release Version: 0.2.b.7 + + - (Issue 45) Truncate dump when string have non utf8 cars + - (Issue 52) logging will not work when firephp object gets stored in the session. + +2008-10-16 - Release Version: 0.2.b.6 + + - (Issue 37) Display file and line information for each log message + - (Issue 51) Limit output of object graphs + - Bugfix for encoding object members set to NULL|false|'' + +2008-10-14 - Release Version: 0.2.b.5 + + - Updated JsonStream wildfire protocol to be more robust + - (Issue 33) PHP error notices running demos + - (Issue 48) Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 0 given + +2008-10-08 - Release Version: 0.2.b.4 + + - Bugfix for logging objects with recursion + +2008-10-08 - Release Version: 0.2.b.3 + + - (Issue 43) Notice message in 0.2b2 + - Added support for PHP's native json_encode() if available + - Revised object encoder to detect object recursion + +2008-10-07 - Release Version: 0.2.b.2 + + - (Issue 28) Need solution for logging private and protected object variables + - Added trace() and table() aliases in FirePHP class + - (Issue 41) Use PHP doc in FirePHP + - (Issue 39) Static logging method for object oriented API + +2008-10-01 - Release Version: 0.2.b.1 + + - Added support for error and exception handling + - Updated min PHP version for PEAR package to 5.2 + - Added version constant for library + - Gave server library it's own wildfire plugin namespace + - Migrated communication protocol to Wildfire JsonStream + - Added support for console groups using "group" and "groupEnd" + - Added support for log, info, warn and error logging aliases + - (Issue 29) problem with TRACE when using with error_handler + - (Issue 33) PHP error notices running demos + - (Issue 12) undefined index php notice + - Removed closing ?> php tags + - (Issue 13) the code in the fb() function has a second return statement that will never be reached + +2008-07-30 - Release Version: 0.1.1.3 + + - Include __className property in JSON string if variable was an object + - Bugfix - Mis-spelt "Exception" in JSON encoding code + +2008-06-13 - Release Version: 0.1.1.1 + + - Bugfix - Standardize windows paths in stack traces + - Bugfix - Display correct stack trace info in windows environments + - Bugfix - Check $_SERVER['HTTP_USER_AGENT'] before returning + +2008-06-13 - Release Version: 0.1.1 + + - Added support for FirePHP::TRACE log style + - Changed license to New BSD License + +2008-06-06 - Release Version: 0.0.2 + + - Bugfix - Added usleep() to header writing loop to ensure unique index + - Bugfix - Ensure chunk_split does not generate trailing "\n" with empty data header + - Added support for FirePHP::TABLE log style + +
\ No newline at end of file diff --git a/plugins/FirePHP/extlib/FirePHP/CREDITS b/plugins/FirePHP/extlib/FirePHP/CREDITS new file mode 100644 index 000000000..5f0d463d1 --- /dev/null +++ b/plugins/FirePHP/extlib/FirePHP/CREDITS @@ -0,0 +1,12 @@ + _______________________________ + F i r e P H P C o r e + + Current Development + ------------------- + + Christoph Dorn <christoph@christophdorn.com> + Michael Day <manveru.alma@gmail.com> + + If you've done work on FirePHPCore and you are not listed here, + please feel free to add yourself. + diff --git a/plugins/FirePHP/extlib/FirePHP/README b/plugins/FirePHP/extlib/FirePHP/README new file mode 100644 index 000000000..033719fae --- /dev/null +++ b/plugins/FirePHP/extlib/FirePHP/README @@ -0,0 +1,32 @@ + +Version: 0.3.1 + +------------------------------------------------------ + Requirements +------------------------------------------------------ + +Client Side: + + - Firefox - http://www.getfirefox.com/ + - Firebug - http://www.getfirebug.com/ + - FirePHP - http://www.firephp.org/ + +Server Side: + + - PHP 5 (complete functionality) + - PHP 4 (most functionality) + + +------------------------------------------------------ + Install Tutorial +------------------------------------------------------ + + http://www.firephp.org/HQ/Install.htm + + +------------------------------------------------------ + Support +------------------------------------------------------ + + http://forum.firephp.org/ + diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php new file mode 100644 index 000000000..d8ae13f34 --- /dev/null +++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php @@ -0,0 +1,1529 @@ +<?php +/** + * *** BEGIN LICENSE BLOCK ***** + * + * This file is part of FirePHP (http://www.firephp.org/). + * + * Software License Agreement (New BSD License) + * + * Copyright (c) 2006-2009, Christoph Dorn + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Christoph Dorn nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** + * + * @copyright Copyright (C) 2007-2009 Christoph Dorn + * @author Christoph Dorn <christoph@christophdorn.com> + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHP + */ + + +/** + * Sends the given data to the FirePHP Firefox Extension. + * The data can be displayed in the Firebug Console or in the + * "Server" request tab. + * + * For more information see: http://www.firephp.org/ + * + * @copyright Copyright (C) 2007-2009 Christoph Dorn + * @author Christoph Dorn <christoph@christophdorn.com> + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHP + */ +class FirePHP { + + /** + * FirePHP version + * + * @var string + */ + const VERSION = '0.3'; + + /** + * Firebug LOG level + * + * Logs a message to firebug console. + * + * @var string + */ + const LOG = 'LOG'; + + /** + * Firebug INFO level + * + * Logs a message to firebug console and displays an info icon before the message. + * + * @var string + */ + const INFO = 'INFO'; + + /** + * Firebug WARN level + * + * Logs a message to firebug console, displays an warning icon before the message and colors the line turquoise. + * + * @var string + */ + const WARN = 'WARN'; + + /** + * Firebug ERROR level + * + * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count. + * + * @var string + */ + const ERROR = 'ERROR'; + + /** + * Dumps a variable to firebug's server panel + * + * @var string + */ + const DUMP = 'DUMP'; + + /** + * Displays a stack trace in firebug console + * + * @var string + */ + const TRACE = 'TRACE'; + + /** + * Displays an exception in firebug console + * + * Increments the firebug error count. + * + * @var string + */ + const EXCEPTION = 'EXCEPTION'; + + /** + * Displays an table in firebug console + * + * @var string + */ + const TABLE = 'TABLE'; + + /** + * Starts a group in firebug console + * + * @var string + */ + const GROUP_START = 'GROUP_START'; + + /** + * Ends a group in firebug console + * + * @var string + */ + const GROUP_END = 'GROUP_END'; + + /** + * Singleton instance of FirePHP + * + * @var FirePHP + */ + protected static $instance = null; + + /** + * Flag whether we are logging from within the exception handler + * + * @var boolean + */ + protected $inExceptionHandler = false; + + /** + * Flag whether to throw PHP errors that have been converted to ErrorExceptions + * + * @var boolean + */ + protected $throwErrorExceptions = true; + + /** + * Flag whether to convert PHP assertion errors to Exceptions + * + * @var boolean + */ + protected $convertAssertionErrorsToExceptions = true; + + /** + * Flag whether to throw PHP assertion errors that have been converted to Exceptions + * + * @var boolean + */ + protected $throwAssertionExceptions = false; + + /** + * Wildfire protocol message index + * + * @var int + */ + protected $messageIndex = 1; + + /** + * Options for the library + * + * @var array + */ + protected $options = array('maxObjectDepth' => 10, + 'maxArrayDepth' => 20, + 'useNativeJsonEncode' => true, + 'includeLineNumbers' => true); + + /** + * Filters used to exclude object members when encoding + * + * @var array + */ + protected $objectFilters = array(); + + /** + * A stack of objects used to detect recursion during object encoding + * + * @var object + */ + protected $objectStack = array(); + + /** + * Flag to enable/disable logging + * + * @var boolean + */ + protected $enabled = true; + + /** + * The object constructor + */ + function __construct() { + } + + /** + * When the object gets serialized only include specific object members. + * + * @return array + */ + public function __sleep() { + return array('options','objectFilters','enabled'); + } + + /** + * Gets singleton instance of FirePHP + * + * @param boolean $AutoCreate + * @return FirePHP + */ + public static function getInstance($AutoCreate=false) { + if($AutoCreate===true && !self::$instance) { + self::init(); + } + return self::$instance; + } + + /** + * Creates FirePHP object and stores it for singleton access + * + * @return FirePHP + */ + public static function init() { + return self::$instance = new self(); + } + + /** + * Enable and disable logging to Firebug + * + * @param boolean $Enabled TRUE to enable, FALSE to disable + * @return void + */ + public function setEnabled($Enabled) { + $this->enabled = $Enabled; + } + + /** + * Check if logging is enabled + * + * @return boolean TRUE if enabled + */ + public function getEnabled() { + return $this->enabled; + } + + /** + * Specify a filter to be used when encoding an object + * + * Filters are used to exclude object members. + * + * @param string $Class The class name of the object + * @param array $Filter An array of members to exclude + * @return void + */ + public function setObjectFilter($Class, $Filter) { + $this->objectFilters[strtolower($Class)] = $Filter; + } + + /** + * Set some options for the library + * + * Options: + * - maxObjectDepth: The maximum depth to traverse objects (default: 10) + * - maxArrayDepth: The maximum depth to traverse arrays (default: 20) + * - useNativeJsonEncode: If true will use json_encode() (default: true) + * - includeLineNumbers: If true will include line numbers and filenames (default: true) + * + * @param array $Options The options to be set + * @return void + */ + public function setOptions($Options) { + $this->options = array_merge($this->options,$Options); + } + + /** + * Get options from the library + * + * @return array The currently set options + */ + public function getOptions() { + return $this->options; + } + + /** + * Register FirePHP as your error handler + * + * Will throw exceptions for each php error. + * + * @return mixed Returns a string containing the previously defined error handler (if any) + */ + public function registerErrorHandler($throwErrorExceptions=true) + { + //NOTE: The following errors will not be caught by this error handler: + // E_ERROR, E_PARSE, E_CORE_ERROR, + // E_CORE_WARNING, E_COMPILE_ERROR, + // E_COMPILE_WARNING, E_STRICT + + $this->throwErrorExceptions = $throwErrorExceptions; + + return set_error_handler(array($this,'errorHandler')); + } + + /** + * FirePHP's error handler + * + * Throws exception for each php error that will occur. + * + * @param int $errno + * @param string $errstr + * @param string $errfile + * @param int $errline + * @param array $errcontext + */ + public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext) + { + // Don't throw exception if error reporting is switched off + if (error_reporting() == 0) { + return; + } + // Only throw exceptions for errors we are asking for + if (error_reporting() & $errno) { + + $exception = new ErrorException($errstr, 0, $errno, $errfile, $errline); + if($this->throwErrorExceptions) { + throw $exception; + } else { + $this->fb($exception); + } + } + } + + /** + * Register FirePHP as your exception handler + * + * @return mixed Returns the name of the previously defined exception handler, + * or NULL on error. + * If no previous handler was defined, NULL is also returned. + */ + public function registerExceptionHandler() + { + return set_exception_handler(array($this,'exceptionHandler')); + } + + /** + * FirePHP's exception handler + * + * Logs all exceptions to your firebug console and then stops the script. + * + * @param Exception $Exception + * @throws Exception + */ + function exceptionHandler($Exception) { + + $this->inExceptionHandler = true; + + header('HTTP/1.1 500 Internal Server Error'); + + $this->fb($Exception); + + $this->inExceptionHandler = false; + } + + /** + * Register FirePHP driver as your assert callback + * + * @param boolean $convertAssertionErrorsToExceptions + * @param boolean $throwAssertionExceptions + * @return mixed Returns the original setting or FALSE on errors + */ + public function registerAssertionHandler($convertAssertionErrorsToExceptions=true, $throwAssertionExceptions=false) + { + $this->convertAssertionErrorsToExceptions = $convertAssertionErrorsToExceptions; + $this->throwAssertionExceptions = $throwAssertionExceptions; + + if($throwAssertionExceptions && !$convertAssertionErrorsToExceptions) { + throw $this->newException('Cannot throw assertion exceptions as assertion errors are not being converted to exceptions!'); + } + + return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler')); + } + + /** + * FirePHP's assertion handler + * + * Logs all assertions to your firebug console and then stops the script. + * + * @param string $file File source of assertion + * @param int $line Line source of assertion + * @param mixed $code Assertion code + */ + public function assertionHandler($file, $line, $code) + { + + if($this->convertAssertionErrorsToExceptions) { + + $exception = new ErrorException('Assertion Failed - Code[ '.$code.' ]', 0, null, $file, $line); + + if($this->throwAssertionExceptions) { + throw $exception; + } else { + $this->fb($exception); + } + + } else { + + $this->fb($code, 'Assertion Failed', FirePHP::ERROR, array('File'=>$file,'Line'=>$line)); + + } + } + + /** + * Set custom processor url for FirePHP + * + * @param string $URL + */ + public function setProcessorUrl($URL) + { + $this->setHeader('X-FirePHP-ProcessorURL', $URL); + } + + /** + * Set custom renderer url for FirePHP + * + * @param string $URL + */ + public function setRendererUrl($URL) + { + $this->setHeader('X-FirePHP-RendererURL', $URL); + } + + /** + * Start a group for following messages. + * + * Options: + * Collapsed: [true|false] + * Color: [#RRGGBB|ColorName] + * + * @param string $Name + * @param array $Options OPTIONAL Instructions on how to log the group + * @return true + * @throws Exception + */ + public function group($Name, $Options=null) { + + if(!$Name) { + throw $this->newException('You must specify a label for the group!'); + } + + if($Options) { + if(!is_array($Options)) { + throw $this->newException('Options must be defined as an array!'); + } + if(array_key_exists('Collapsed', $Options)) { + $Options['Collapsed'] = ($Options['Collapsed'])?'true':'false'; + } + } + + return $this->fb(null, $Name, FirePHP::GROUP_START, $Options); + } + + /** + * Ends a group you have started before + * + * @return true + * @throws Exception + */ + public function groupEnd() { + return $this->fb(null, null, FirePHP::GROUP_END); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::LOG + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function log($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP::LOG); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::INFO + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function info($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP::INFO); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::WARN + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function warn($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP::WARN); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::ERROR + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function error($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP::ERROR); + } + + /** + * Dumps key and variable to firebug server panel + * + * @see FirePHP::DUMP + * @param string $Key + * @param mixed $Variable + * @return true + * @throws Exception + */ + public function dump($Key, $Variable) { + return $this->fb($Variable, $Key, FirePHP::DUMP); + } + + /** + * Log a trace in the firebug console + * + * @see FirePHP::TRACE + * @param string $Label + * @return true + * @throws Exception + */ + public function trace($Label) { + return $this->fb($Label, FirePHP::TRACE); + } + + /** + * Log a table in the firebug console + * + * @see FirePHP::TABLE + * @param string $Label + * @param string $Table + * @return true + * @throws Exception + */ + public function table($Label, $Table) { + return $this->fb($Table, $Label, FirePHP::TABLE); + } + + /** + * Check if FirePHP is installed on client + * + * @return boolean + */ + public function detectClientExtension() { + /* Check if FirePHP is installed on client */ + if(!@preg_match_all('/\sFirePHP\/([\.|\d]*)\s?/si',$this->getUserAgent(),$m) || + !version_compare($m[1][0],'0.0.6','>=')) { + return false; + } + return true; + } + + /** + * Log varible to Firebug + * + * @see http://www.firephp.org/Wiki/Reference/Fb + * @param mixed $Object The variable to be logged + * @return true Return TRUE if message was added to headers, FALSE otherwise + * @throws Exception + */ + public function fb($Object) { + + if(!$this->enabled) { + return false; + } + + if (headers_sent($filename, $linenum)) { + // If we are logging from within the exception handler we cannot throw another exception + if($this->inExceptionHandler) { + // Simply echo the error out to the page + echo '<div style="border: 2px solid red; font-family: Arial; font-size: 12px; background-color: lightgray; padding: 5px;"><span style="color: red; font-weight: bold;">FirePHP ERROR:</span> Headers already sent in <b>'.$filename.'</b> on line <b>'.$linenum.'</b>. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.</div>'; + } else { + throw $this->newException('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.'); + } + } + + $Type = null; + $Label = null; + $Options = array(); + + if(func_num_args()==1) { + } else + if(func_num_args()==2) { + switch(func_get_arg(1)) { + case self::LOG: + case self::INFO: + case self::WARN: + case self::ERROR: + case self::DUMP: + case self::TRACE: + case self::EXCEPTION: + case self::TABLE: + case self::GROUP_START: + case self::GROUP_END: + $Type = func_get_arg(1); + break; + default: + $Label = func_get_arg(1); + break; + } + } else + if(func_num_args()==3) { + $Type = func_get_arg(2); + $Label = func_get_arg(1); + } else + if(func_num_args()==4) { + $Type = func_get_arg(2); + $Label = func_get_arg(1); + $Options = func_get_arg(3); + } else { + throw $this->newException('Wrong number of arguments to fb() function!'); + } + + + if(!$this->detectClientExtension()) { + return false; + } + + $meta = array(); + $skipFinalObjectEncode = false; + + if($Object instanceof Exception) { + + $meta['file'] = $this->_escapeTraceFile($Object->getFile()); + $meta['line'] = $Object->getLine(); + + $trace = $Object->getTrace(); + if($Object instanceof ErrorException + && isset($trace[0]['function']) + && $trace[0]['function']=='errorHandler' + && isset($trace[0]['class']) + && $trace[0]['class']=='FirePHP') { + + $severity = false; + switch($Object->getSeverity()) { + case E_WARNING: $severity = 'E_WARNING'; break; + case E_NOTICE: $severity = 'E_NOTICE'; break; + case E_USER_ERROR: $severity = 'E_USER_ERROR'; break; + case E_USER_WARNING: $severity = 'E_USER_WARNING'; break; + case E_USER_NOTICE: $severity = 'E_USER_NOTICE'; break; + case E_STRICT: $severity = 'E_STRICT'; break; + case E_RECOVERABLE_ERROR: $severity = 'E_RECOVERABLE_ERROR'; break; + case E_DEPRECATED: $severity = 'E_DEPRECATED'; break; + case E_USER_DEPRECATED: $severity = 'E_USER_DEPRECATED'; break; + } + + $Object = array('Class'=>get_class($Object), + 'Message'=>$severity.': '.$Object->getMessage(), + 'File'=>$this->_escapeTraceFile($Object->getFile()), + 'Line'=>$Object->getLine(), + 'Type'=>'trigger', + 'Trace'=>$this->_escapeTrace(array_splice($trace,2))); + $skipFinalObjectEncode = true; + } else { + $Object = array('Class'=>get_class($Object), + 'Message'=>$Object->getMessage(), + 'File'=>$this->_escapeTraceFile($Object->getFile()), + 'Line'=>$Object->getLine(), + 'Type'=>'throw', + 'Trace'=>$this->_escapeTrace($trace)); + $skipFinalObjectEncode = true; + } + $Type = self::EXCEPTION; + + } else + if($Type==self::TRACE) { + + $trace = debug_backtrace(); + if(!$trace) return false; + for( $i=0 ; $i<sizeof($trace) ; $i++ ) { + + if(isset($trace[$i]['class']) + && isset($trace[$i]['file']) + && ($trace[$i]['class']=='FirePHP' + || $trace[$i]['class']=='FB') + && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' + || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { + /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ + } else + if(isset($trace[$i]['class']) + && isset($trace[$i+1]['file']) + && $trace[$i]['class']=='FirePHP' + && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip fb() */ + } else + if($trace[$i]['function']=='fb' + || $trace[$i]['function']=='trace' + || $trace[$i]['function']=='send') { + $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'', + 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'', + 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'', + 'Message'=>$trace[$i]['args'][0], + 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'', + 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'', + 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'', + 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1))); + + $skipFinalObjectEncode = true; + $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; + $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; + break; + } + } + + } else + if($Type==self::TABLE) { + + if(isset($Object[0]) && is_string($Object[0])) { + $Object[1] = $this->encodeTable($Object[1]); + } else { + $Object = $this->encodeTable($Object); + } + + $skipFinalObjectEncode = true; + + } else + if($Type==self::GROUP_START) { + + if(!$Label) { + throw $this->newException('You must specify a label for the group!'); + } + + } else { + if($Type===null) { + $Type = self::LOG; + } + } + + if($this->options['includeLineNumbers']) { + if(!isset($meta['file']) || !isset($meta['line'])) { + + $trace = debug_backtrace(); + for( $i=0 ; $trace && $i<sizeof($trace) ; $i++ ) { + + if(isset($trace[$i]['class']) + && isset($trace[$i]['file']) + && ($trace[$i]['class']=='FirePHP' + || $trace[$i]['class']=='FB') + && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' + || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { + /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ + } else + if(isset($trace[$i]['class']) + && isset($trace[$i+1]['file']) + && $trace[$i]['class']=='FirePHP' + && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip fb() */ + } else + if(isset($trace[$i]['file']) + && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip FB::fb() */ + } else { + $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; + $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; + break; + } + } + + } + } else { + unset($meta['file']); + unset($meta['line']); + } + + $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2'); + $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.self::VERSION); + + $structure_index = 1; + if($Type==self::DUMP) { + $structure_index = 2; + $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1'); + } else { + $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'); + } + + if($Type==self::DUMP) { + $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}'; + } else { + $msg_meta = $Options; + $msg_meta['Type'] = $Type; + if($Label!==null) { + $msg_meta['Label'] = $Label; + } + if(isset($meta['file']) && !isset($msg_meta['File'])) { + $msg_meta['File'] = $meta['file']; + } + if(isset($meta['line']) && !isset($msg_meta['Line'])) { + $msg_meta['Line'] = $meta['line']; + } + $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']'; + } + + $parts = explode("\n",chunk_split($msg, 5000, "\n")); + + for( $i=0 ; $i<count($parts) ; $i++) { + + $part = $parts[$i]; + if ($part) { + + if(count($parts)>2) { + // Message needs to be split into multiple parts + $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, + (($i==0)?strlen($msg):'') + . '|' . $part . '|' + . (($i<count($parts)-2)?'\\':'')); + } else { + $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, + strlen($part) . '|' . $part . '|'); + } + + $this->messageIndex++; + + if ($this->messageIndex > 99999) { + throw $this->newException('Maximum number (99,999) of messages reached!'); + } + } + } + + $this->setHeader('X-Wf-1-Index',$this->messageIndex-1); + + return true; + } + + /** + * Standardizes path for windows systems. + * + * @param string $Path + * @return string + */ + protected function _standardizePath($Path) { + return preg_replace('/\\\\+/','/',$Path); + } + + /** + * Escape trace path for windows systems + * + * @param array $Trace + * @return array + */ + protected function _escapeTrace($Trace) { + if(!$Trace) return $Trace; + for( $i=0 ; $i<sizeof($Trace) ; $i++ ) { + if(isset($Trace[$i]['file'])) { + $Trace[$i]['file'] = $this->_escapeTraceFile($Trace[$i]['file']); + } + if(isset($Trace[$i]['args'])) { + $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']); + } + } + return $Trace; + } + + /** + * Escape file information of trace for windows systems + * + * @param string $File + * @return string + */ + protected function _escapeTraceFile($File) { + /* Check if we have a windows filepath */ + if(strpos($File,'\\')) { + /* First strip down to single \ */ + + $file = preg_replace('/\\\\+/','\\',$File); + + return $file; + } + return $File; + } + + /** + * Send header + * + * @param string $Name + * @param string_type $Value + */ + protected function setHeader($Name, $Value) { + return header($Name.': '.$Value); + } + + /** + * Get user agent + * + * @return string|false + */ + protected function getUserAgent() { + if(!isset($_SERVER['HTTP_USER_AGENT'])) return false; + return $_SERVER['HTTP_USER_AGENT']; + } + + /** + * Returns a new exception + * + * @param string $Message + * @return Exception + */ + protected function newException($Message) { + return new Exception($Message); + } + + /** + * Encode an object into a JSON string + * + * Uses PHP's jeson_encode() if available + * + * @param object $Object The object to be encoded + * @return string The JSON string + */ + public function jsonEncode($Object, $skipObjectEncode=false) + { + if(!$skipObjectEncode) { + $Object = $this->encodeObject($Object); + } + + if(function_exists('json_encode') + && $this->options['useNativeJsonEncode']!=false) { + + return json_encode($Object); + } else { + return $this->json_encode($Object); + } + } + + /** + * Encodes a table by encoding each row and column with encodeObject() + * + * @param array $Table The table to be encoded + * @return array + */ + protected function encodeTable($Table) { + + if(!$Table) return $Table; + + $new_table = array(); + foreach($Table as $row) { + + if(is_array($row)) { + $new_row = array(); + + foreach($row as $item) { + $new_row[] = $this->encodeObject($item); + } + + $new_table[] = $new_row; + } + } + + return $new_table; + } + + /** + * Encodes an object including members with + * protected and private visibility + * + * @param Object $Object The object to be encoded + * @param int $Depth The current traversal depth + * @return array All members of the object + */ + protected function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1) + { + $return = array(); + + if (is_resource($Object)) { + + return '** '.(string)$Object.' **'; + + } else + if (is_object($Object)) { + + if ($ObjectDepth > $this->options['maxObjectDepth']) { + return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **'; + } + + foreach ($this->objectStack as $refVal) { + if ($refVal === $Object) { + return '** Recursion ('.get_class($Object).') **'; + } + } + array_push($this->objectStack, $Object); + + $return['__className'] = $class = get_class($Object); + $class_lower = strtolower($class); + + $reflectionClass = new ReflectionClass($class); + $properties = array(); + foreach( $reflectionClass->getProperties() as $property) { + $properties[$property->getName()] = $property; + } + + $members = (array)$Object; + + foreach( $properties as $raw_name => $property ) { + + $name = $raw_name; + if($property->isStatic()) { + $name = 'static:'.$name; + } + if($property->isPublic()) { + $name = 'public:'.$name; + } else + if($property->isPrivate()) { + $name = 'private:'.$name; + $raw_name = "\0".$class."\0".$raw_name; + } else + if($property->isProtected()) { + $name = 'protected:'.$name; + $raw_name = "\0".'*'."\0".$raw_name; + } + + if(!(isset($this->objectFilters[$class_lower]) + && is_array($this->objectFilters[$class_lower]) + && in_array($raw_name,$this->objectFilters[$class_lower]))) { + + if(array_key_exists($raw_name,$members) + && !$property->isStatic()) { + + $return[$name] = $this->encodeObject($members[$raw_name], $ObjectDepth + 1, 1); + + } else { + if(method_exists($property,'setAccessible')) { + $property->setAccessible(true); + $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1); + } else + if($property->isPublic()) { + $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1); + } else { + $return[$name] = '** Need PHP 5.3 to get value **'; + } + } + } else { + $return[$name] = '** Excluded by Filter **'; + } + } + + // Include all members that are not defined in the class + // but exist in the object + foreach( $members as $raw_name => $value ) { + + $name = $raw_name; + + if ($name{0} == "\0") { + $parts = explode("\0", $name); + $name = $parts[2]; + } + + if(!isset($properties[$name])) { + $name = 'undeclared:'.$name; + + if(!(isset($this->objectFilters[$class_lower]) + && is_array($this->objectFilters[$class_lower]) + && in_array($raw_name,$this->objectFilters[$class_lower]))) { + + $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1); + } else { + $return[$name] = '** Excluded by Filter **'; + } + } + } + + array_pop($this->objectStack); + + } elseif (is_array($Object)) { + + if ($ArrayDepth > $this->options['maxArrayDepth']) { + return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **'; + } + + foreach ($Object as $key => $val) { + + // Encoding the $GLOBALS PHP array causes an infinite loop + // if the recursion is not reset here as it contains + // a reference to itself. This is the only way I have come up + // with to stop infinite recursion in this case. + if($key=='GLOBALS' + && is_array($val) + && array_key_exists('GLOBALS',$val)) { + $val['GLOBALS'] = '** Recursion (GLOBALS) **'; + } + + $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1); + } + } else { + if(self::is_utf8($Object)) { + return $Object; + } else { + return utf8_encode($Object); + } + } + return $return; + } + + /** + * Returns true if $string is valid UTF-8 and false otherwise. + * + * @param mixed $str String to be tested + * @return boolean + */ + protected static function is_utf8($str) { + $c=0; $b=0; + $bits=0; + $len=strlen($str); + for($i=0; $i<$len; $i++){ + $c=ord($str[$i]); + if($c > 128){ + if(($c >= 254)) return false; + elseif($c >= 252) $bits=6; + elseif($c >= 248) $bits=5; + elseif($c >= 240) $bits=4; + elseif($c >= 224) $bits=3; + elseif($c >= 192) $bits=2; + else return false; + if(($i+$bits) > $len) return false; + while($bits > 1){ + $i++; + $b=ord($str[$i]); + if($b < 128 || $b > 191) return false; + $bits--; + } + } + } + return true; + } + + /** + * Converts to and from JSON format. + * + * JSON (JavaScript Object Notation) is a lightweight data-interchange + * format. It is easy for humans to read and write. It is easy for machines + * to parse and generate. It is based on a subset of the JavaScript + * Programming Language, Standard ECMA-262 3rd Edition - December 1999. + * This feature can also be found in Python. JSON is a text format that is + * completely language independent but uses conventions that are familiar + * to programmers of the C-family of languages, including C, C++, C#, Java, + * JavaScript, Perl, TCL, and many others. These properties make JSON an + * ideal data-interchange language. + * + * This package provides a simple encoder and decoder for JSON notation. It + * is intended for use with client-side Javascript applications that make + * use of HTTPRequest to perform server communication functions - data can + * be encoded into JSON notation for use in a client-side javascript, or + * decoded from incoming Javascript requests. JSON format is native to + * Javascript, and can be directly eval()'ed with no further parsing + * overhead + * + * All strings should be in ASCII or UTF-8 format! + * + * LICENSE: Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: Redistributions of source code must retain the + * above copyright notice, this list of conditions and the following + * disclaimer. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * @category + * @package Services_JSON + * @author Michal Migurski <mike-json@teczno.com> + * @author Matt Knapp <mdknapp[at]gmail[dot]com> + * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com> + * @author Christoph Dorn <christoph@christophdorn.com> + * @copyright 2005 Michal Migurski + * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + + + /** + * Keep a list of objects as we descend into the array so we can detect recursion. + */ + private $json_objectStack = array(); + + + /** + * convert a string from one UTF-8 char to one UTF-16 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf8 UTF-8 character + * @return string UTF-16 character + * @access private + */ + private function json_utf82utf16($utf8) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + } + + switch(strlen($utf8)) { + case 1: + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; + + case 2: + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8{0}) >> 2)) + . chr((0xC0 & (ord($utf8{0}) << 6)) + | (0x3F & ord($utf8{1}))); + + case 3: + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8{0}) << 4)) + | (0x0F & (ord($utf8{1}) >> 2))) + . chr((0xC0 & (ord($utf8{1}) << 6)) + | (0x7F & ord($utf8{2}))); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + private function json_encode($var) + { + + if(is_object($var)) { + if(in_array($var,$this->json_objectStack)) { + return '"** Recursion **"'; + } + } + + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return (int) $var; + + case 'double': + case 'float': + return (float) $var; + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = strlen($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var{$c}); + + switch (true) { + case $ord_var_c == 0x08: + $ascii .= '\b'; + break; + case $ord_var_c == 0x09: + $ascii .= '\t'; + break; + case $ord_var_c == 0x0A: + $ascii .= '\n'; + break; + case $ord_var_c == 0x0C: + $ascii .= '\f'; + break; + case $ord_var_c == 0x0D: + $ascii .= '\r'; + break; + + case $ord_var_c == 0x22: + case $ord_var_c == 0x2F: + case $ord_var_c == 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var{$c}; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var{$c}; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, ord($var{$c + 1})); + $c += 1; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2})); + $c += 2; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3})); + $c += 3; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4})); + $c += 4; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4}), + ord($var{$c + 5})); + $c += 5; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + + $this->json_objectStack[] = $var; + + $properties = array_map(array($this, 'json_name_value'), + array_keys($var), + array_values($var)); + + array_pop($this->json_objectStack); + + foreach($properties as $property) { + if($property instanceof Exception) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + } + + $this->json_objectStack[] = $var; + + // treat it like a regular array + $elements = array_map(array($this, 'json_encode'), $var); + + array_pop($this->json_objectStack); + + foreach($elements as $element) { + if($element instanceof Exception) { + return $element; + } + } + + return '[' . join(',', $elements) . ']'; + + case 'object': + $vars = self::encodeObject($var); + + $this->json_objectStack[] = $var; + + $properties = array_map(array($this, 'json_name_value'), + array_keys($vars), + array_values($vars)); + + array_pop($this->json_objectStack); + + foreach($properties as $property) { + if($property instanceof Exception) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + + default: + return null; + } + } + + /** + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + private function json_name_value($name, $value) + { + // Encoding the $GLOBALS PHP array causes an infinite loop + // if the recursion is not reset here as it contains + // a reference to itself. This is the only way I have come up + // with to stop infinite recursion in this case. + if($name=='GLOBALS' + && is_array($value) + && array_key_exists('GLOBALS',$value)) { + $value['GLOBALS'] = '** Recursion **'; + } + + $encoded_value = $this->json_encode($value); + + if($encoded_value instanceof Exception) { + return $encoded_value; + } + + return $this->json_encode(strval($name)) . ':' . $encoded_value; + } +} diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php4 b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php4 new file mode 100644 index 000000000..7cc4bfb04 --- /dev/null +++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php4 @@ -0,0 +1,1292 @@ +<?php +/** + * *** BEGIN LICENSE BLOCK ***** + * + * This file is part of FirePHP (http://www.firephp.org/). + * + * Software License Agreement (New BSD License) + * + * Copyright (c) 2006-2009, Christoph Dorn + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Christoph Dorn nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** + * + * This verion of FirePHPCore is for use with PHP4. If you do not require PHP4 + * compatibility, it is suggested you use FirePHPCore.class.php instead. + * + * @copyright Copyright (C) 2007-2009 Christoph Dorn + * @author Christoph Dorn <christoph@christophdorn.com> + * @author Michael Day <manveru.alma@gmail.com> + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHP + */ + +/** + * FirePHP version + * + * @var string + */ +define('FirePHP_VERSION', '0.3'); + +/** + * Firebug LOG level + * + * Logs a message to firebug console + * + * @var string + */ +define('FirePHP_LOG', 'LOG'); + +/** + * Firebug INFO level + * + * Logs a message to firebug console and displays an info icon before the message + * + * @var string + */ +define('FirePHP_INFO', 'INFO'); + +/** + * Firebug WARN level + * + * Logs a message to firebug console, displays a warning icon before the message and colors the line turquoise + * + * @var string + */ +define('FirePHP_WARN', 'WARN'); + +/** + * Firebug ERROR level + * + * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count. + * + * @var string + */ +define('FirePHP_ERROR', 'ERROR'); + +/** + * Dumps a variable to firebug's server panel + * + * @var string + */ +define('FirePHP_DUMP', 'DUMP'); + +/** + * Displays a stack trace in firebug console + * + * @var string + */ +define('FirePHP_TRACE', 'TRACE'); + +/** + * Displays a table in firebug console + * + * @var string + */ +define('FirePHP_TABLE', 'TABLE'); + +/** + * Starts a group in firebug console + * + * @var string + */ +define('FirePHP_GROUP_START', 'GROUP_START'); + +/** + * Ends a group in firebug console + * + * @var string + */ +define('FirePHP_GROUP_END', 'GROUP_END'); + +/** + * Sends the given data to the FirePHP Firefox Extension. + * The data can be displayed in the Firebug Console or in the + * "Server" request tab. + * + * For more information see: http://www.firephp.org/ + * + * @copyright Copyright (C) 2007-2009 Christoph Dorn + * @author Christoph Dorn <christoph@christophdorn.com> + * @author Michael Day <manveru.alma@gmail.com> + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHP + */ +class FirePHP { + /** + * Wildfire protocol message index + * + * @var int + */ + var $messageIndex = 1; + + /** + * Options for the library + * + * @var array + */ + var $options = array('maxObjectDepth' => 10, + 'maxArrayDepth' => 20, + 'useNativeJsonEncode' => true, + 'includeLineNumbers' => true); + + /** + * Filters used to exclude object members when encoding + * + * @var array + */ + var $objectFilters = array(); + + /** + * A stack of objects used to detect recursion during object encoding + * + * @var object + */ + var $objectStack = array(); + + /** + * Flag to enable/disable logging + * + * @var boolean + */ + var $enabled = true; + + /** + * The object constructor + */ + function FirePHP() { + } + + + /** + * When the object gets serialized only include specific object members. + * + * @return array + */ + function __sleep() { + return array('options','objectFilters','enabled'); + } + + /** + * Gets singleton instance of FirePHP + * + * @param boolean $AutoCreate + * @return FirePHP + */ + function &getInstance($AutoCreate=false) { + global $FirePHP_Instance; + + if($AutoCreate===true && !$FirePHP_Instance) { + $FirePHP_Instance = new FirePHP(); + } + + return $FirePHP_Instance; + } + + /** + * Enable and disable logging to Firebug + * + * @param boolean $Enabled TRUE to enable, FALSE to disable + * @return void + */ + function setEnabled($Enabled) { + $this->enabled = $Enabled; + } + + /** + * Check if logging is enabled + * + * @return boolean TRUE if enabled + */ + function getEnabled() { + return $this->enabled; + } + + /** + * Specify a filter to be used when encoding an object + * + * Filters are used to exclude object members. + * + * @param string $Class The class name of the object + * @param array $Filter An array of members to exclude + * @return void + */ + function setObjectFilter($Class, $Filter) { + $this->objectFilters[strtolower($Class)] = $Filter; + } + + /** + * Set some options for the library + * + * Options: + * - maxObjectDepth: The maximum depth to traverse objects (default: 10) + * - maxArrayDepth: The maximum depth to traverse arrays (default: 20) + * - useNativeJsonEncode: If true will use json_encode() (default: true) + * - includeLineNumbers: If true will include line numbers and filenames (default: true) + * + * @param array $Options The options to be set + * @return void + */ + function setOptions($Options) { + $this->options = array_merge($this->options,$Options); + } + + /** + * Get options from the library + * + * @return array The currently set options + */ + function getOptions() { + return $this->options; + } + + /** + * Register FirePHP as your error handler + * + * Will use FirePHP to log each php error. + * + * @return mixed Returns a string containing the previously defined error handler (if any) + */ + function registerErrorHandler() + { + //NOTE: The following errors will not be caught by this error handler: + // E_ERROR, E_PARSE, E_CORE_ERROR, + // E_CORE_WARNING, E_COMPILE_ERROR, + // E_COMPILE_WARNING, E_STRICT + + return set_error_handler(array($this,'errorHandler')); + } + + /** + * FirePHP's error handler + * + * Logs each php error that will occur. + * + * @param int $errno + * @param string $errstr + * @param string $errfile + * @param int $errline + * @param array $errcontext + */ + function errorHandler($errno, $errstr, $errfile, $errline, $errcontext) + { + global $FirePHP_Instance; + // Don't log error if error reporting is switched off + if (error_reporting() == 0) { + return; + } + // Only log error for errors we are asking for + if (error_reporting() & $errno) { + $FirePHP_Instance->group($errstr); + $FirePHP_Instance->error("{$errfile}, line $errline"); + $FirePHP_Instance->groupEnd(); + } + } + + /** + * Register FirePHP driver as your assert callback + * + * @return mixed Returns the original setting + */ + function registerAssertionHandler() + { + return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler')); + } + + /** + * FirePHP's assertion handler + * + * Logs all assertions to your firebug console and then stops the script. + * + * @param string $file File source of assertion + * @param int $line Line source of assertion + * @param mixed $code Assertion code + */ + function assertionHandler($file, $line, $code) + { + $this->fb($code, 'Assertion Failed', FirePHP_ERROR, array('File'=>$file,'Line'=>$line)); + } + + /** + * Set custom processor url for FirePHP + * + * @param string $URL + */ + function setProcessorUrl($URL) + { + $this->setHeader('X-FirePHP-ProcessorURL', $URL); + } + + /** + * Set custom renderer url for FirePHP + * + * @param string $URL + */ + function setRendererUrl($URL) + { + $this->setHeader('X-FirePHP-RendererURL', $URL); + } + + /** + * Start a group for following messages. + * + * Options: + * Collapsed: [true|false] + * Color: [#RRGGBB|ColorName] + * + * @param string $Name + * @param array $Options OPTIONAL Instructions on how to log the group + * @return true + * @throws Exception + */ + function group($Name, $Options=null) { + + if(!$Name) { + trigger_error('You must specify a label for the group!'); + } + + if($Options) { + if(!is_array($Options)) { + trigger_error('Options must be defined as an array!'); + } + if(array_key_exists('Collapsed', $Options)) { + $Options['Collapsed'] = ($Options['Collapsed'])?'true':'false'; + } + } + + return $this->fb(null, $Name, FirePHP_GROUP_START, $Options); + } + + /** + * Ends a group you have started before + * + * @return true + * @throws Exception + */ + function groupEnd() { + return $this->fb(null, null, FirePHP_GROUP_END); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::LOG + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + function log($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP_LOG); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::INFO + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + function info($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP_INFO); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::WARN + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + function warn($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP_WARN); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::ERROR + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + function error($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP_ERROR); + } + + /** + * Dumps key and variable to firebug server panel + * + * @see FirePHP::DUMP + * @param string $Key + * @param mixed $Variable + * @return true + * @throws Exception + */ + function dump($Key, $Variable) { + return $this->fb($Variable, $Key, FirePHP_DUMP); + } + + /** + * Log a trace in the firebug console + * + * @see FirePHP::TRACE + * @param string $Label + * @return true + * @throws Exception + */ + function trace($Label) { + return $this->fb($Label, FirePHP_TRACE); + } + + /** + * Log a table in the firebug console + * + * @see FirePHP::TABLE + * @param string $Label + * @param string $Table + * @return true + * @throws Exception + */ + function table($Label, $Table) { + return $this->fb($Table, $Label, FirePHP_TABLE); + } + + /** + * Check if FirePHP is installed on client + * + * @return boolean + */ + function detectClientExtension() { + /* Check if FirePHP is installed on client */ + if(!@preg_match_all('/\sFirePHP\/([\.|\d]*)\s?/si',$this->getUserAgent(),$m) || + !version_compare($m[1][0],'0.0.6','>=')) { + return false; + } + return true; + } + + /** + * Log varible to Firebug + * + * @see http://www.firephp.org/Wiki/Reference/Fb + * @param mixed $Object The variable to be logged + * @return true Return TRUE if message was added to headers, FALSE otherwise + * @throws Exception + */ + function fb($Object) { + + if(!$this->enabled) { + return false; + } + + if (headers_sent($filename, $linenum)) { + trigger_error('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.'); + } + + $Type = null; + $Label = null; + $Options = array(); + + if(func_num_args()==1) { + } else + if(func_num_args()==2) { + switch(func_get_arg(1)) { + case FirePHP_LOG: + case FirePHP_INFO: + case FirePHP_WARN: + case FirePHP_ERROR: + case FirePHP_DUMP: + case FirePHP_TRACE: + case FirePHP_TABLE: + case FirePHP_GROUP_START: + case FirePHP_GROUP_END: + $Type = func_get_arg(1); + break; + default: + $Label = func_get_arg(1); + break; + } + } else + if(func_num_args()==3) { + $Type = func_get_arg(2); + $Label = func_get_arg(1); + } else + if(func_num_args()==4) { + $Type = func_get_arg(2); + $Label = func_get_arg(1); + $Options = func_get_arg(3); + } else { + trigger_error('Wrong number of arguments to fb() function!'); + } + + + if(!$this->detectClientExtension()) { + return false; + } + + $meta = array(); + $skipFinalObjectEncode = false; + + if($Type==FirePHP_TRACE) { + + $trace = debug_backtrace(); + if(!$trace) return false; + for( $i=0 ; $i<sizeof($trace) ; $i++ ) { + + if(isset($trace[$i]['class']) + && isset($trace[$i]['file']) + && ($trace[$i]['class']=='FirePHP' + || $trace[$i]['class']=='FB') + && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' + || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { + /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ + } else + if(isset($trace[$i]['class']) + && isset($trace[$i+1]['file']) + && $trace[$i]['class']=='FirePHP' + && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip fb() */ + } else + if($trace[$i]['function']=='fb' + || $trace[$i]['function']=='trace' + || $trace[$i]['function']=='send') { + $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'', + 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'', + 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'', + 'Message'=>$trace[$i]['args'][0], + 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'', + 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'', + 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'', + 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1))); + + $skipFinalObjectEncode = true; + $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; + $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; + break; + } + } + + } else + if($Type==FirePHP_TABLE) { + + if(isset($Object[0]) && is_string($Object[0])) { + $Object[1] = $this->encodeTable($Object[1]); + } else { + $Object = $this->encodeTable($Object); + } + + $skipFinalObjectEncode = true; + + } else + if($Type==FirePHP_GROUP_START) { + + if(!$Label) { + trigger_error('You must specify a label for the group!'); + } + } else { + if($Type===null) { + $Type = FirePHP_LOG; + } + } + + if($this->options['includeLineNumbers']) { + if(!isset($meta['file']) || !isset($meta['line'])) { + + $trace = debug_backtrace(); + for( $i=0 ; $trace && $i<sizeof($trace) ; $i++ ) { + + if(isset($trace[$i]['class']) + && isset($trace[$i]['file']) + && ($trace[$i]['class']=='FirePHP' + || $trace[$i]['class']=='FB') + && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' + || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { + /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ + } else + if(isset($trace[$i]['class']) + && isset($trace[$i+1]['file']) + && $trace[$i]['class']=='FirePHP' + && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip fb() */ + } else + if(isset($trace[$i]['file']) + && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip FB::fb() */ + } else { + $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; + $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; + break; + } + } + + } + } else { + unset($meta['file']); + unset($meta['line']); + } + + $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2'); + $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.FirePHP_VERSION); + + $structure_index = 1; + if($Type==FirePHP_DUMP) { + $structure_index = 2; + $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1'); + } else { + $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'); + } + + if($Type==FirePHP_DUMP) { + $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}'; + } else { + $msg_meta = $Options; + $msg_meta['Type'] = $Type; + if($Label!==null) { + $msg_meta['Label'] = $Label; + } + if(isset($meta['file']) && !isset($msg_meta['File'])) { + $msg_meta['File'] = $meta['file']; + } + if(isset($meta['line']) && !isset($msg_meta['Line'])) { + $msg_meta['Line'] = $meta['line']; + } + $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']'; + } + + $parts = explode("\n",chunk_split($msg, 5000, "\n")); + + for( $i=0 ; $i<count($parts) ; $i++) { + + $part = $parts[$i]; + if ($part) { + + if(count($parts)>2) { + // Message needs to be split into multiple parts + $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, + (($i==0)?strlen($msg):'') + . '|' . $part . '|' + . (($i<count($parts)-2)?'\\':'')); + } else { + $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, + strlen($part) . '|' . $part . '|'); + } + + $this->messageIndex++; + + if ($this->messageIndex > 99999) { + trigger_error('Maximum number (99,999) of messages reached!'); + } + } + } + + $this->setHeader('X-Wf-1-Index',$this->messageIndex-1); + + return true; + } + + + /** + * Standardizes path for windows systems. + * + * @param string $Path + * @return string + */ + function _standardizePath($Path) { + return preg_replace('/\\\\+/','/',$Path); + } + + /** + * Escape trace path for windows systems + * + * @param array $Trace + * @return array + */ + function _escapeTrace($Trace) { + if(!$Trace) return $Trace; + for( $i=0 ; $i<sizeof($Trace) ; $i++ ) { + if(isset($Trace[$i]['file'])) { + $Trace[$i]['file'] = $this->_escapeTraceFile($Trace[$i]['file']); + } + if(isset($Trace[$i]['args'])) { + $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']); + } + } + return $Trace; + } + + /** + * Escape file information of trace for windows systems + * + * @param string $File + * @return string + */ + function _escapeTraceFile($File) { + /* Check if we have a windows filepath */ + if(strpos($File,'\\')) { + /* First strip down to single \ */ + + $file = preg_replace('/\\\\+/','\\',$File); + + return $file; + } + return $File; + } + + /** + * Send header + * + * @param string $Name + * @param string_type $Value + */ + function setHeader($Name, $Value) { + return header($Name.': '.$Value); + } + + /** + * Get user agent + * + * @return string|false + */ + function getUserAgent() { + if(!isset($_SERVER['HTTP_USER_AGENT'])) return false; + return $_SERVER['HTTP_USER_AGENT']; + } + + /** + * Encode an object into a JSON string + * + * Uses PHP's jeson_encode() if available + * + * @param object $Object The object to be encoded + * @return string The JSON string + */ + function jsonEncode($Object, $skipObjectEncode=false) + { + if(!$skipObjectEncode) { + $Object = $this->encodeObject($Object); + } + + if(function_exists('json_encode') + && $this->options['useNativeJsonEncode']!=false) { + + return json_encode($Object); + } else { + return $this->json_encode($Object); + } + } + + /** + * Encodes a table by encoding each row and column with encodeObject() + * + * @param array $Table The table to be encoded + * @return array + */ + function encodeTable($Table) { + + if(!$Table) return $Table; + + $new_table = array(); + foreach($Table as $row) { + + if(is_array($row)) { + $new_row = array(); + + foreach($row as $item) { + $new_row[] = $this->encodeObject($item); + } + + $new_table[] = $new_row; + } + } + + return $new_table; + } + + /** + * Encodes an object + * + * @param Object $Object The object to be encoded + * @param int $Depth The current traversal depth + * @return array All members of the object + */ + function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1) + { + $return = array(); + + if (is_resource($Object)) { + + return '** '.(string)$Object.' **'; + + } else + if (is_object($Object)) { + + if ($ObjectDepth > $this->options['maxObjectDepth']) { + return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **'; + } + + foreach ($this->objectStack as $refVal) { + if ($refVal === $Object) { + return '** Recursion ('.get_class($Object).') **'; + } + } + array_push($this->objectStack, $Object); + + $return['__className'] = $class = get_class($Object); + $class_lower = strtolower($class); + + $members = (array)$Object; + + // Include all members that are not defined in the class + // but exist in the object + foreach( $members as $raw_name => $value ) { + + $name = $raw_name; + + if ($name{0} == "\0") { + $parts = explode("\0", $name); + $name = $parts[2]; + } + + if(!isset($properties[$name])) { + $name = 'undeclared:'.$name; + + if(!(isset($this->objectFilters[$class_lower]) + && is_array($this->objectFilters[$class_lower]) + && in_array($raw_name,$this->objectFilters[$class_lower]))) { + + $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1); + } else { + $return[$name] = '** Excluded by Filter **'; + } + } + } + + array_pop($this->objectStack); + + } elseif (is_array($Object)) { + + if ($ArrayDepth > $this->options['maxArrayDepth']) { + return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **'; + } + + foreach ($Object as $key => $val) { + + // Encoding the $GLOBALS PHP array causes an infinite loop + // if the recursion is not reset here as it contains + // a reference to itself. This is the only way I have come up + // with to stop infinite recursion in this case. + if($key=='GLOBALS' + && is_array($val) + && array_key_exists('GLOBALS',$val)) { + $val['GLOBALS'] = '** Recursion (GLOBALS) **'; + } + + $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1); + } + } else { + if($this->is_utf8($Object)) { + return $Object; + } else { + return utf8_encode($Object); + } + } + return $return; + + } + + /** + * Returns true if $string is valid UTF-8 and false otherwise. + * + * @param mixed $str String to be tested + * @return boolean + */ + function is_utf8($str) { + $c=0; $b=0; + $bits=0; + $len=strlen($str); + for($i=0; $i<$len; $i++){ + $c=ord($str[$i]); + if($c > 128){ + if(($c >= 254)) return false; + elseif($c >= 252) $bits=6; + elseif($c >= 248) $bits=5; + elseif($c >= 240) $bits=4; + elseif($c >= 224) $bits=3; + elseif($c >= 192) $bits=2; + else return false; + if(($i+$bits) > $len) return false; + while($bits > 1){ + $i++; + $b=ord($str[$i]); + if($b < 128 || $b > 191) return false; + $bits--; + } + } + } + return true; + } + + /** + * Converts to and from JSON format. + * + * JSON (JavaScript Object Notation) is a lightweight data-interchange + * format. It is easy for humans to read and write. It is easy for machines + * to parse and generate. It is based on a subset of the JavaScript + * Programming Language, Standard ECMA-262 3rd Edition - December 1999. + * This feature can also be found in Python. JSON is a text format that is + * completely language independent but uses conventions that are familiar + * to programmers of the C-family of languages, including C, C++, C#, Java, + * JavaScript, Perl, TCL, and many others. These properties make JSON an + * ideal data-interchange language. + * + * This package provides a simple encoder and decoder for JSON notation. It + * is intended for use with client-side Javascript applications that make + * use of HTTPRequest to perform server communication functions - data can + * be encoded into JSON notation for use in a client-side javascript, or + * decoded from incoming Javascript requests. JSON format is native to + * Javascript, and can be directly eval()'ed with no further parsing + * overhead + * + * All strings should be in ASCII or UTF-8 format! + * + * LICENSE: Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: Redistributions of source code must retain the + * above copyright notice, this list of conditions and the following + * disclaimer. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * @category + * @package Services_JSON + * @author Michal Migurski <mike-json@teczno.com> + * @author Matt Knapp <mdknapp[at]gmail[dot]com> + * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com> + * @author Christoph Dorn <christoph@christophdorn.com> + * @copyright 2005 Michal Migurski + * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + + + /** + * Keep a list of objects as we descend into the array so we can detect recursion. + */ + var $json_objectStack = array(); + + + /** + * convert a string from one UTF-8 char to one UTF-16 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf8 UTF-8 character + * @return string UTF-16 character + * @access private + */ + function json_utf82utf16($utf8) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + } + + switch(strlen($utf8)) { + case 1: + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; + + case 2: + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8{0}) >> 2)) + . chr((0xC0 & (ord($utf8{0}) << 6)) + | (0x3F & ord($utf8{1}))); + + case 3: + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8{0}) << 4)) + | (0x0F & (ord($utf8{1}) >> 2))) + . chr((0xC0 & (ord($utf8{1}) << 6)) + | (0x7F & ord($utf8{2}))); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + function json_encode($var) + { + + if(is_object($var)) { + if(in_array($var,$this->json_objectStack)) { + return '"** Recursion **"'; + } + } + + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return (int) $var; + + case 'double': + case 'float': + return (float) $var; + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = strlen($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var{$c}); + + switch (true) { + case $ord_var_c == 0x08: + $ascii .= '\b'; + break; + case $ord_var_c == 0x09: + $ascii .= '\t'; + break; + case $ord_var_c == 0x0A: + $ascii .= '\n'; + break; + case $ord_var_c == 0x0C: + $ascii .= '\f'; + break; + case $ord_var_c == 0x0D: + $ascii .= '\r'; + break; + + case $ord_var_c == 0x22: + case $ord_var_c == 0x2F: + case $ord_var_c == 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var{$c}; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var{$c}; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, ord($var{$c + 1})); + $c += 1; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2})); + $c += 2; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3})); + $c += 3; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4})); + $c += 4; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4}), + ord($var{$c + 5})); + $c += 5; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + + $this->json_objectStack[] = $var; + + $properties = array_map(array($this, 'json_name_value'), + array_keys($var), + array_values($var)); + + array_pop($this->json_objectStack); + + return '{' . join(',', $properties) . '}'; + } + + $this->json_objectStack[] = $var; + + // treat it like a regular array + $elements = array_map(array($this, 'json_encode'), $var); + + array_pop($this->json_objectStack); + + return '[' . join(',', $elements) . ']'; + + case 'object': + $vars = FirePHP::encodeObject($var); + + $this->json_objectStack[] = $var; + + $properties = array_map(array($this, 'json_name_value'), + array_keys($vars), + array_values($vars)); + + array_pop($this->json_objectStack); + + return '{' . join(',', $properties) . '}'; + + default: + return null; + } + } + + /** + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + function json_name_value($name, $value) + { + // Encoding the $GLOBALS PHP array causes an infinite loop + // if the recursion is not reset here as it contains + // a reference to itself. This is the only way I have come up + // with to stop infinite recursion in this case. + if($name=='GLOBALS' + && is_array($value) + && array_key_exists('GLOBALS',$value)) { + $value['GLOBALS'] = '** Recursion **'; + } + + $encoded_value = $this->json_encode($value); + + return $this->json_encode(strval($name)) . ':' . $encoded_value; + } +} + diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/LICENSE b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/LICENSE new file mode 100644 index 000000000..3e390f9d9 --- /dev/null +++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/LICENSE @@ -0,0 +1,29 @@ +Software License Agreement (New BSD License) + +Copyright (c) 2006-2009, Christoph Dorn +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of Christoph Dorn nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php new file mode 100644 index 000000000..9d1857cbc --- /dev/null +++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php @@ -0,0 +1,261 @@ +<?php + +/* ***** BEGIN LICENSE BLOCK ***** + * + * This file is part of FirePHP (http://www.firephp.org/). + * + * Software License Agreement (New BSD License) + * + * Copyright (c) 2006-2009, Christoph Dorn + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Christoph Dorn nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** + * + * @copyright Copyright (C) 2007-2009 Christoph Dorn + * @author Christoph Dorn <christoph@christophdorn.com> + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHP + */ + +require_once dirname(__FILE__).'/FirePHP.class.php'; + +/** + * Sends the given data to the FirePHP Firefox Extension. + * The data can be displayed in the Firebug Console or in the + * "Server" request tab. + * + * @see http://www.firephp.org/Wiki/Reference/Fb + * @param mixed $Object + * @return true + * @throws Exception + */ +function fb() +{ + $instance = FirePHP::getInstance(true); + + $args = func_get_args(); + return call_user_func_array(array($instance,'fb'),$args); +} + + +class FB +{ + /** + * Enable and disable logging to Firebug + * + * @see FirePHP->setEnabled() + * @param boolean $Enabled TRUE to enable, FALSE to disable + * @return void + */ + public static function setEnabled($Enabled) { + $instance = FirePHP::getInstance(true); + $instance->setEnabled($Enabled); + } + + /** + * Check if logging is enabled + * + * @see FirePHP->getEnabled() + * @return boolean TRUE if enabled + */ + public static function getEnabled() { + $instance = FirePHP::getInstance(true); + return $instance->getEnabled(); + } + + /** + * Specify a filter to be used when encoding an object + * + * Filters are used to exclude object members. + * + * @see FirePHP->setObjectFilter() + * @param string $Class The class name of the object + * @param array $Filter An array or members to exclude + * @return void + */ + public static function setObjectFilter($Class, $Filter) { + $instance = FirePHP::getInstance(true); + $instance->setObjectFilter($Class, $Filter); + } + + /** + * Set some options for the library + * + * @see FirePHP->setOptions() + * @param array $Options The options to be set + * @return void + */ + public static function setOptions($Options) { + $instance = FirePHP::getInstance(true); + $instance->setOptions($Options); + } + + /** + * Get options for the library + * + * @see FirePHP->getOptions() + * @return array The options + */ + public static function getOptions() { + $instance = FirePHP::getInstance(true); + return $instance->getOptions(); + } + + /** + * Log object to firebug + * + * @see http://www.firephp.org/Wiki/Reference/Fb + * @param mixed $Object + * @return true + * @throws Exception + */ + public static function send() + { + $instance = FirePHP::getInstance(true); + $args = func_get_args(); + return call_user_func_array(array($instance,'fb'),$args); + } + + /** + * Start a group for following messages + * + * Options: + * Collapsed: [true|false] + * Color: [#RRGGBB|ColorName] + * + * @param string $Name + * @param array $Options OPTIONAL Instructions on how to log the group + * @return true + */ + public static function group($Name, $Options=null) { + $instance = FirePHP::getInstance(true); + return $instance->group($Name, $Options); + } + + /** + * Ends a group you have started before + * + * @return true + * @throws Exception + */ + public static function groupEnd() { + return self::send(null, null, FirePHP::GROUP_END); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::LOG + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public static function log($Object, $Label=null) { + return self::send($Object, $Label, FirePHP::LOG); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::INFO + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public static function info($Object, $Label=null) { + return self::send($Object, $Label, FirePHP::INFO); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::WARN + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public static function warn($Object, $Label=null) { + return self::send($Object, $Label, FirePHP::WARN); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::ERROR + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public static function error($Object, $Label=null) { + return self::send($Object, $Label, FirePHP::ERROR); + } + + /** + * Dumps key and variable to firebug server panel + * + * @see FirePHP::DUMP + * @param string $Key + * @param mixed $Variable + * @return true + * @throws Exception + */ + public static function dump($Key, $Variable) { + return self::send($Variable, $Key, FirePHP::DUMP); + } + + /** + * Log a trace in the firebug console + * + * @see FirePHP::TRACE + * @param string $Label + * @return true + * @throws Exception + */ + public static function trace($Label) { + return self::send($Label, FirePHP::TRACE); + } + + /** + * Log a table in the firebug console + * + * @see FirePHP::TABLE + * @param string $Label + * @param string $Table + * @return true + * @throws Exception + */ + public static function table($Label, $Table) { + return self::send($Table, $Label, FirePHP::TABLE); + } + +} + diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php4 b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php4 new file mode 100644 index 000000000..5b69e3487 --- /dev/null +++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php4 @@ -0,0 +1,251 @@ +<?php + +/* ***** BEGIN LICENSE BLOCK ***** + * + * This file is part of FirePHP (http://www.firephp.org/). + * + * Software License Agreement (New BSD License) + * + * Copyright (c) 2006-2009, Christoph Dorn + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Christoph Dorn nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** + * + * @copyright Copyright (C) 2007-2009 Christoph Dorn + * @author Christoph Dorn <christoph@christophdorn.com> + * @author Michael Day <manveru.alma@gmail.com> + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHP + */ + +require_once dirname(__FILE__).'/FirePHP.class.php4'; + +/** + * Sends the given data to the FirePHP Firefox Extension. + * The data can be displayed in the Firebug Console or in the + * "Server" request tab. + * + * @see http://www.firephp.org/Wiki/Reference/Fb + * @param mixed $Object + * @return true + * @throws Exception + */ +function fb() +{ + $instance =& FirePHP::getInstance(true); + + $args = func_get_args(); + return call_user_func_array(array(&$instance,'fb'),$args); +} + + +class FB +{ + /** + * Enable and disable logging to Firebug + * + * @see FirePHP->setEnabled() + * @param boolean $Enabled TRUE to enable, FALSE to disable + * @return void + */ + function setEnabled($Enabled) { + $instance =& FirePHP::getInstance(true); + $instance->setEnabled($Enabled); + } + + /** + * Check if logging is enabled + * + * @see FirePHP->getEnabled() + * @return boolean TRUE if enabled + */ + function getEnabled() { + $instance =& FirePHP::getInstance(true); + return $instance->getEnabled(); + } + + /** + * Specify a filter to be used when encoding an object + * + * Filters are used to exclude object members. + * + * @see FirePHP->setObjectFilter() + * @param string $Class The class name of the object + * @param array $Filter An array or members to exclude + * @return void + */ + function setObjectFilter($Class, $Filter) { + $instance =& FirePHP::getInstance(true); + $instance->setObjectFilter($Class, $Filter); + } + + /** + * Set some options for the library + * + * @see FirePHP->setOptions() + * @param array $Options The options to be set + * @return void + */ + function setOptions($Options) { + $instance =& FirePHP::getInstance(true); + $instance->setOptions($Options); + } + + /** + * Get options for the library + * + * @see FirePHP->getOptions() + * @return array The options + */ + function getOptions() { + $instance =& FirePHP::getInstance(true); + return $instance->getOptions(); + } + + /** + * Log object to firebug + * + * @see http://www.firephp.org/Wiki/Reference/Fb + * @param mixed $Object + * @return true + */ + function send() + { + $instance =& FirePHP::getInstance(true); + $args = func_get_args(); + return call_user_func_array(array(&$instance,'fb'),$args); + } + + /** + * Start a group for following messages + * + * Options: + * Collapsed: [true|false] + * Color: [#RRGGBB|ColorName] + * + * @param string $Name + * @param array $Options OPTIONAL Instructions on how to log the group + * @return true + */ + function group($Name, $Options=null) { + $instance =& FirePHP::getInstance(true); + return $instance->group($Name, $Options); + } + + /** + * Ends a group you have started before + * + * @return true + */ + function groupEnd() { + return FB::send(null, null, FirePHP_GROUP_END); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::LOG + * @param mixes $Object + * @param string $Label + * @return true + */ + function log($Object, $Label=null) { + return FB::send($Object, $Label, FirePHP_LOG); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::INFO + * @param mixes $Object + * @param string $Label + * @return true + */ + function info($Object, $Label=null) { + return FB::send($Object, $Label, FirePHP_INFO); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::WARN + * @param mixes $Object + * @param string $Label + * @return true + */ + function warn($Object, $Label=null) { + return FB::send($Object, $Label, FirePHP_WARN); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::ERROR + * @param mixes $Object + * @param string $Label + * @return true + */ + function error($Object, $Label=null) { + return FB::send($Object, $Label, FirePHP_ERROR); + } + + /** + * Dumps key and variable to firebug server panel + * + * @see FirePHP::DUMP + * @param string $Key + * @param mixed $Variable + * @return true + */ + function dump($Key, $Variable) { + return FB::send($Variable, $Key, FirePHP_DUMP); + } + + /** + * Log a trace in the firebug console + * + * @see FirePHP::TRACE + * @param string $Label + * @return true + */ + function trace($Label) { + return FB::send($Label, FirePHP_TRACE); + } + + /** + * Log a table in the firebug console + * + * @see FirePHP::TABLE + * @param string $Label + * @param string $Table + * @return true + */ + function table($Label, $Table) { + return FB::send($Table, $Label, FirePHP_TABLE); + } +} diff --git a/plugins/GeonamesPlugin.php b/plugins/GeonamesPlugin.php index 340a6f0bf..a750f1242 100644 --- a/plugins/GeonamesPlugin.php +++ b/plugins/GeonamesPlugin.php @@ -51,6 +51,11 @@ class GeonamesPlugin extends Plugin { const LOCATION_NS = 1; + public $host = 'ws.geonames.org'; + public $username = null; + public $token = null; + public $expiry = 7776000; // 90-day expiry + /** * convert a name into a Location object * @@ -75,12 +80,11 @@ class GeonamesPlugin extends Plugin // XXX: break down a name by commas, narrow by each - $str = http_build_query(array('maxRows' => 1, - 'q' => $name, - 'lang' => $language, - 'type' => 'json')); - - $result = $client->get('http://ws.geonames.org/search?'.$str); + $result = $client->get($this->wsUrl('search', + array('maxRows' => 1, + 'q' => $name, + 'lang' => $language, + 'type' => 'json'))); if ($result->isOk()) { $rj = json_decode($result->getBody()); @@ -135,10 +139,9 @@ class GeonamesPlugin extends Plugin $client = HTTPClient::start(); - $str = http_build_query(array('geonameId' => $id, - 'lang' => $language)); - - $result = $client->get('http://ws.geonames.org/hierarchyJSON?'.$str); + $result = $client->get($this->wsUrl('hierarchyJSON', + array('geonameId' => $id, + 'lang' => $language))); if ($result->isOk()) { @@ -195,6 +198,9 @@ class GeonamesPlugin extends Plugin function onLocationFromLatLon($lat, $lon, $language, &$location) { + $lat = rtrim($lat, "0"); + $lon = rtrim($lon, "0"); + $loc = $this->getCache(array('lat' => $lat, 'lon' => $lon)); @@ -205,12 +211,11 @@ class GeonamesPlugin extends Plugin $client = HTTPClient::start(); - $str = http_build_query(array('lat' => $lat, - 'lng' => $lon, - 'lang' => $language)); - $result = - $client->get('http://ws.geonames.org/findNearbyPlaceNameJSON?'.$str); + $client->get($this->wsUrl('findNearbyPlaceNameJSON', + array('lat' => $lat, + 'lng' => $lon, + 'lang' => $language))); if ($result->isOk()) { @@ -286,10 +291,9 @@ class GeonamesPlugin extends Plugin $client = HTTPClient::start(); - $str = http_build_query(array('geonameId' => $location->location_id, - 'lang' => $language)); - - $result = $client->get('http://ws.geonames.org/hierarchyJSON?'.$str); + $result = $client->get($this->wsUrl('hierarchyJSON', + array('geonameId' => $location->location_id, + 'lang' => $language))); if ($result->isOk()) { @@ -376,33 +380,30 @@ class GeonamesPlugin extends Plugin { $c = common_memcache(); - if (!$c) { + if (empty($c)) { return null; } - return $c->get($this->cacheKey($attrs)); + $key = $this->cacheKey($attrs); + + $value = $c->get($key); + + return $value; } function setCache($attrs, $loc) { $c = common_memcache(); - if (!$c) { + if (empty($c)) { return null; } - $c->set($this->cacheKey($attrs), $loc); - } - - function clearCache($attrs) - { - $c = common_memcache(); + $key = $this->cacheKey($attrs); - if (!$c) { - return null; - } + $result = $c->set($key, $loc, 0, time() + $this->expiry); - $c->delete($this->cacheKey($attrs)); + return $result; } function cacheKey($attrs) @@ -411,4 +412,19 @@ class GeonamesPlugin extends Plugin implode(',', array_keys($attrs)) . ':'. common_keyize(implode(',', array_values($attrs)))); } + + function wsUrl($method, $params) + { + if (!empty($this->username)) { + $params['username'] = $this->username; + } + + if (!empty($this->token)) { + $params['token'] = $this->token; + } + + $str = http_build_query($params); + + return 'http://'.$this->host.'/'.$method.'?'.$str; + } } diff --git a/plugins/GoogleAnalyticsPlugin.php b/plugins/GoogleAnalyticsPlugin.php index 7f3d209ee..6891ee6a7 100644 --- a/plugins/GoogleAnalyticsPlugin.php +++ b/plugins/GoogleAnalyticsPlugin.php @@ -67,11 +67,7 @@ class GoogleAnalyticsPlugin extends Plugin 'pageTracker._trackPageview();'. '} catch(err) {}', $this->code); - $action->elementStart('script', array('type' => 'text/javascript')); - $action->raw($js1); - $action->elementEnd('script'); - $action->elementStart('script', array('type' => 'text/javascript')); - $action->raw($js2); - $action->elementEnd('script'); + $action->inlineScript($js1); + $action->inlineScript($js2); } } diff --git a/plugins/Mapstraction/MapstractionPlugin.php b/plugins/Mapstraction/MapstractionPlugin.php index c0c2c5b8e..93679e56c 100644 --- a/plugins/Mapstraction/MapstractionPlugin.php +++ b/plugins/Mapstraction/MapstractionPlugin.php @@ -90,6 +90,7 @@ class MapstractionPlugin extends Plugin { case 'AllmapAction': case 'UsermapAction': + case 'MapAction': include_once INSTALLDIR.'/plugins/Mapstraction/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; default: @@ -110,9 +111,9 @@ class MapstractionPlugin extends Plugin function onEndShowScripts($action) { $actionName = $action->trimmed('action'); - // These are the ones that have maps on 'em + if (!in_array($actionName, - array('showstream', 'all', 'allmap', 'usermap'))) { + array('showstream', 'all', 'usermap', 'allmap'))) { return true; } @@ -147,43 +148,20 @@ class MapstractionPlugin extends Plugin $action->script(common_path('plugins/Mapstraction/usermap.js')); - $action->elementStart('script', array('type' => 'text/javascript')); - $action->raw(sprintf('var _provider = "%s";', $this->provider)); - $action->elementEnd('script'); + $action->inlineScript(sprintf('var _provider = "%s";', $this->provider)); - switch ($actionName) { - case 'usermap': - case 'showstream': - $notice = empty($action->tag) - ? $action->user->getNotices(($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1) - : $action->user->getTaggedNotices($action->tag, ($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1, 0, 0, null); - break; - case 'all': - case 'allmap': - $cur = common_current_user(); - if (!empty($cur) && $cur->id == $action->user->id) { - $notice = $action->user->noticeInbox(($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); - } else { - $notice = $action->user->noticesWithFriends(($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); - } - break; - } - - $jsonArray = array(); + // usermap and allmap handle this themselves - while ($notice->fetch()) { - if (!empty($notice->lat) && !empty($notice->lon)) { - $jsonNotice = $this->noticeAsJson($notice); - $jsonArray[] = $jsonNotice; - } + if (in_array($actionName, + array('showstream', 'all'))) { + $action->inlineScript('$(document).ready(function() { '. + ' var user = null; '. + (($actionName == 'showstream') ? ' user = scrapeUser(); ' : '') . + ' var notices = scrapeNotices(user); ' . + ' showMapstraction($("#map_canvas"), notices); '. + '});'); } - $action->elementStart('script', array('type' => 'text/javascript')); - $action->raw('/*<![CDATA[*/'); // XHTML compat for Safari - $action->raw('var _notices = ' . json_encode($jsonArray)); - $action->raw('/*]]>*/'); // XHTML compat for Safari - $action->elementEnd('script'); - return true; } @@ -199,7 +177,7 @@ class MapstractionPlugin extends Plugin $action->elementStart('div', array('id' => 'entity_map', 'class' => 'section')); - $action->element('h2', null, _('Map')); + $action->element('h2', null, _m('Map')); $action->element('div', array('id' => 'map_canvas', 'class' => 'gray smallmap', @@ -210,38 +188,8 @@ class MapstractionPlugin extends Plugin array('nickname' => $action->trimmed('nickname'))); $action->element('a', array('href' => $mapUrl), - _("Full size")); + _m("Full size")); $action->elementEnd('div'); } - - function noticeAsJson($notice) - { - // FIXME: this code should be abstracted to a neutral third - // party, like Notice::asJson(). I'm not sure of the ethics - // of refactoring from within a plugin, so I'm just abusing - // the ApiAction method. Don't do this unless you're me! - - require_once(INSTALLDIR.'/lib/api.php'); - - $act = new ApiAction('/dev/null'); - - $arr = $act->twitterStatusArray($notice, true); - $arr['url'] = $notice->bestUrl(); - $arr['html'] = $notice->rendered; - $arr['source'] = $arr['source']; - - if (!empty($notice->reply_to)) { - $reply_to = Notice::staticGet('id', $notice->reply_to); - if (!empty($reply_to)) { - $arr['in_reply_to_status_url'] = $reply_to->bestUrl(); - } - $reply_to = null; - } - - $profile = $notice->getProfile(); - $arr['user']['profile_url'] = $profile->profileurl; - - return $arr; - } } diff --git a/plugins/Mapstraction/allmap.php b/plugins/Mapstraction/allmap.php index 6a48b141f..e73aa76e8 100644 --- a/plugins/Mapstraction/allmap.php +++ b/plugins/Mapstraction/allmap.php @@ -37,59 +37,26 @@ if (!defined('STATUSNET')) { * @category Mapstraction * @package StatusNet * @author Evan Prodromou <evan@status.net> + * @author Craig Andrews <candrews@integralblue.com> * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ -class AllmapAction extends OwnerDesignAction +class AllmapAction extends MapAction { - var $profile = null; - var $page = null; - var $notices = null; - - public $plugin = null; - function prepare($args) { - parent::prepare($args); - - $nickname_arg = $this->arg('nickname'); - $nickname = common_canonical_nickname($nickname_arg); - - // Permanent redirect on non-canonical nickname - - if ($nickname_arg != $nickname) { - $args = array('nickname' => $nickname); - if ($this->arg('page') && $this->arg('page') != 1) { - $args['page'] = $this->arg['page']; + if(parent::prepare($args)) { + $cur = common_current_user(); + if (!empty($cur) && $cur->id == $this->user->id) { + $this->notice = $this->user->noticeInbox(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); + } else { + $this->notice = $this->user->noticesWithFriends(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); } - common_redirect(common_local_url($this->trimmed('action'), $args), 301); - return false; - } - - $this->user = User::staticGet('nickname', $nickname); - - if (!$this->user) { - $this->clientError(_('No such user.'), 404); - return false; - } - - $this->profile = $this->user->getProfile(); - - if (!$this->profile) { - $this->serverError(_('User has no profile.')); + return true; + }else{ return false; } - - $page = $this->trimmed('page'); - - if (!empty($page) && Validate::number($page)) { - $this->page = $page+0; - } else { - $this->page = 1; - } - - return true; } function title() @@ -101,25 +68,12 @@ class AllmapAction extends OwnerDesignAction } if ($this->page == 1) { - return sprintf(_("%s friends map"), + return sprintf(_m("%s friends map"), $base); } else { - return sprintf(_("%s friends map, page %d"), + return sprintf(_m("%s friends map, page %d"), $base, $this->page); } } - - function handle($args) - { - parent::handle($args); - $this->showPage(); - } - - function showContent() - { - $this->element('div', array('id' => 'map_canvas', - 'class' => 'gray smallmap', - 'style' => "width: 100%; height: 400px")); - } -}
\ No newline at end of file +} diff --git a/plugins/Mapstraction/locale/Mapstraction.po b/plugins/Mapstraction/locale/Mapstraction.po new file mode 100644 index 000000000..c1c50bf50 --- /dev/null +++ b/plugins/Mapstraction/locale/Mapstraction.po @@ -0,0 +1,48 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-12-07 20:38-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: allmap.php:71 +#, php-format +msgid "%s friends map" +msgstr "" + +#: allmap.php:74 +#, php-format +msgid "%s friends map, page %d" +msgstr "" + +#: map.php:72 +msgid "No such user." +msgstr "" + +#: map.php:79 +msgid "User has no profile." +msgstr "" + +#: usermap.php:71 +#, php-format +msgid "%s map, page %d" +msgstr "" + +#: MapstractionPlugin.php:180 +msgid "Map" +msgstr "" + +#: MapstractionPlugin.php:191 +msgid "Full size" +msgstr "" diff --git a/plugins/Mapstraction/map.php b/plugins/Mapstraction/map.php new file mode 100644 index 000000000..a33dfc736 --- /dev/null +++ b/plugins/Mapstraction/map.php @@ -0,0 +1,167 @@ +<?php +/** + * StatusNet, the distributed open-source microblogging tool + * + * Show a map of user's notices + * + * PHP version 5 + * + * LICENCE: This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @category Mapstraction + * @package StatusNet + * @author Evan Prodromou <evan@status.net> + * @copyright 2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Show a map of notices + * + * @category Mapstraction + * @package StatusNet + * @author Evan Prodromou <evan@status.net> + * @author Craig Andrews <candrews@integralblue.com> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class MapAction extends OwnerDesignAction +{ + var $profile = null; + var $page = null; + var $notices = null; + + function prepare($args) + { + parent::prepare($args); + + $nickname_arg = $this->arg('nickname'); + $nickname = common_canonical_nickname($nickname_arg); + + // Permanent redirect on non-canonical nickname + + if ($nickname_arg != $nickname) { + $args = array('nickname' => $nickname); + if ($this->arg('page') && $this->arg('page') != 1) { + $args['page'] = $this->arg['page']; + } + common_redirect(common_local_url($this->trimmed('action'), $args), 301); + return false; + } + + $this->user = User::staticGet('nickname', $nickname); + + if (!$this->user) { + $this->clientError(_m('No such user.'), 404); + return false; + } + + $this->profile = $this->user->getProfile(); + + if (!$this->profile) { + $this->serverError(_m('User has no profile.')); + return false; + } + + $page = $this->trimmed('page'); + + if (!empty($page) && Validate::number($page)) { + $this->page = $page+0; + } else { + $this->page = 1; + } + + $this->notices = empty($this->tag) + ? $this->user->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1) + : $this->user->getTaggedNotices($this->tag, ($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1, 0, 0, null); + + return true; + } + + function handle($args) + { + parent::handle($args); + $this->showPage(); + } + + function showContent() + { + $this->element('div', array('id' => 'map_canvas', + 'class' => 'gray smallmap', + 'style' => "width: 100%; height: 400px")); + } + + /** + * Hook for adding extra JavaScript + * + * @param Action $action Action object for the page + * + * @return boolean event handler return + */ + + function showScripts() + { + parent::showScripts(); + $jsonArray = array(); + + while ($this->notice->fetch()) { + if (!empty($this->notice->lat) && !empty($this->notice->lon)) { + $jsonNotice = $this->noticeAsJson($this->notice); + $jsonArray[] = $jsonNotice; + } + } + + $this->inlineScript('$(document).ready(function() { '. + ' var _notices = ' . json_encode($jsonArray).'; ' . + 'showMapstraction($("#map_canvas"), _notices); });'); + + return true; + } + + function noticeAsJson($notice) + { + // FIXME: this code should be abstracted to a neutral third + // party, like Notice::asJson(). I'm not sure of the ethics + // of refactoring from within a plugin, so I'm just abusing + // the ApiAction method. Don't do this unless you're me! + + require_once(INSTALLDIR.'/lib/api.php'); + + $act = new ApiAction('/dev/null'); + + $arr = $act->twitterStatusArray($notice, true); + $arr['url'] = $notice->bestUrl(); + $arr['html'] = $notice->rendered; + $arr['source'] = $arr['source']; + + if (!empty($notice->reply_to)) { + $reply_to = Notice::staticGet('id', $notice->reply_to); + if (!empty($reply_to)) { + $arr['in_reply_to_status_url'] = $reply_to->bestUrl(); + } + $reply_to = null; + } + + $profile = $notice->getProfile(); + $arr['user']['profile_url'] = $profile->profileurl; + + return $arr; + } +} diff --git a/plugins/Mapstraction/usermap.js b/plugins/Mapstraction/usermap.js index e667dd579..4b7a6c26b 100644 --- a/plugins/Mapstraction/usermap.js +++ b/plugins/Mapstraction/usermap.js @@ -1,40 +1,32 @@ -$(document).ready(function() { +function scrapeNotices(user) +{ var notices = []; $(".notice").each(function(){ - var notice = getNoticeFromElement($(this)); - if(notice['geo']) - notices.push(notice); + var notice = getNoticeFromElement($(this)); + if (user) { + notice['user'] = user; + } else { + notice['user'] = getUserFromElement($(this)); + } + if(notice['geo']) + notices.push(notice); }); - if($("#map_canvas").length && notices.length>0) - { - showMapstraction($("#map_canvas"), notices); - } - $('.geo').click(function(){ - var noticeElement = $(this).closest(".notice"); - notice = getNoticeFromElement(noticeElement); - - $.fn.jOverlay.options = { - color : '#000', - opacity : '0.6', - zIndex : 99, - center : false, - bgClickToClose : true, - autoHide : true, - css : {'max-width':'542px', 'top':'5%', 'left':'32.5%'} - }; - var html="<div id='map_canvas_popup' class='gray smallmap' style='width: 542px; height: 500px' />"; - html+="<button class='close'>×</button>"; - html+=$("<div/>").append($(this).clone()).html(); - $().jOverlay({ "html": html }); - $('#jOverlayContent').show(); - $('#jOverlayContent button').click($.closeOverlay); - - showMapstraction($("#map_canvas_popup"), notice); - - return false; - }); -}); + return notices; +} + +function scrapeUser() +{ + var avatarURL = $(".entity_profile .entity_depiction img.avatar").attr('src'); + var profileURL = $(".entity_profile .entity_nickname .url").attr('href'); + var nickname = $(".entity_profile .entity_nickname .nickname").text(); + + return { + 'profile_image_url': avatarURL, + 'profile_url': profileURL, + 'screen_name': nickname + }; +} function getMicroformatValue(element) { @@ -48,23 +40,34 @@ function getMicroformatValue(element) function getNoticeFromElement(noticeElement) { var notice = {}; - if(noticeElement.find(".geo").length){ + + if(noticeElement.find(".geo").length) { var latlon = noticeElement.find(".geo").attr('title').split(";"); notice['geo']={'coordinates': [ parseFloat(latlon[0]), parseFloat(latlon[1])] }; } - notice['user']={ - 'profile_image_url': noticeElement.find("img.avatar").attr('src'), - 'profile_url': noticeElement.find(".author a.url").attr('href'), - 'screen_name': noticeElement.find(".author .nickname").text() - }; - notice['html']=noticeElement.find(".entry-content").html(); - notice['url']=noticeElement.find("a.timestamp").attr('href'); - notice['created_at']=noticeElement.find("abbr.published").text(); + + notice['html'] = noticeElement.find(".entry-content").html(); + notice['url'] = noticeElement.find("a.timestamp").attr('href'); + notice['created_at'] = noticeElement.find("abbr.published").text(); + return notice; } +function getUserFromElement(noticeElement) +{ + var avatarURL = noticeElement.find("img.avatar").attr('src'); + var profileURL = noticeElement.find(".author a.url").attr('href'); + var nickname = noticeElement.find(".author .nickname").text(); + + return { + 'profile_image_url': avatarURL, + 'profile_url': profileURL, + 'screen_name': nickname + }; +} + function showMapstraction(element, notices) { if(element instanceof jQuery) element = element[0]; if(! $.isArray(notices)) notices = [notices]; diff --git a/plugins/Mapstraction/usermap.php b/plugins/Mapstraction/usermap.php index fbf1469c3..ff47b6ada 100644 --- a/plugins/Mapstraction/usermap.php +++ b/plugins/Mapstraction/usermap.php @@ -37,61 +37,24 @@ if (!defined('STATUSNET')) { * @category Mapstraction * @package StatusNet * @author Evan Prodromou <evan@status.net> + * @author Craig Andrews <candrews@integralblue.com> * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ -class UsermapAction extends OwnerDesignAction +class UsermapAction extends MapAction { - var $profile = null; - var $page = null; - var $notices = null; - - public $plugin = null; function prepare($args) { - parent::prepare($args); - - $nickname_arg = $this->arg('nickname'); - $nickname = common_canonical_nickname($nickname_arg); - - // Permanent redirect on non-canonical nickname - - if ($nickname_arg != $nickname) { - $args = array('nickname' => $nickname); - if ($this->arg('page') && $this->arg('page') != 1) { - $args['page'] = $this->arg['page']; - } - common_redirect(common_local_url($this->trimmed('action'), $args), 301); + if(parent::prepare($args)) { + $this->notice = empty($this->tag) + ? $this->user->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1) + : $this->user->getTaggedNotices($this->tag, ($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1, 0, 0, null); + return true; + }else{ return false; } - - $this->user = User::staticGet('nickname', $nickname); - - if (!$this->user) { - $this->clientError(_('No such user.'), 404); - return false; - } - - $this->profile = $this->user->getProfile(); - - if (!$this->profile) { - $this->serverError(_('User has no profile.')); - return false; - } - - $page = $this->trimmed('page'); - - if (!empty($page) && Validate::number($page)) { - $this->page = $page+0; - } else { - $this->page = 1; - } - - $this->notices = $this->user->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); - - return true; } function title() @@ -105,22 +68,9 @@ class UsermapAction extends OwnerDesignAction if ($this->page == 1) { return $base; } else { - return sprintf(_("%s map, page %d"), + return sprintf(_m("%s map, page %d"), $base, $this->page); } } - - function handle($args) - { - parent::handle($args); - $this->showPage(); - } - - function showContent() - { - $this->element('div', array('id' => 'map_canvas', - 'class' => 'gray smallmap', - 'style' => "width: 100%; height: 400px")); - } -}
\ No newline at end of file +} diff --git a/plugins/Minify/MinifyPlugin.php b/plugins/Minify/MinifyPlugin.php new file mode 100644 index 000000000..71fade19a --- /dev/null +++ b/plugins/Minify/MinifyPlugin.php @@ -0,0 +1,168 @@ +<?php +/* +StatusNet Plugin: 0.9 +Plugin Name: Minify +Description: Minifies resources (Javascript and CSS) +Version: 0.1 +Author: Craig Andrews <candrews@integralblue.com> +Author URI: http://candrews.integralblue.com/ +*/ + +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2009, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * @package MinifyPlugin + * @maintainer Craig Andrews <candrews@integralblue.com> + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } + +// We bundle the minify library... +set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/minify/min/lib'); + +class MinifyPlugin extends Plugin +{ + private $minifyInlineJs = true; + private $minifyInlineCss = true; + + const cacheKey = 'minify'; + + /** + * Add Minification related paths to the router table + * + * Hook for RouterInitialized event. + * + * @return boolean hook return + */ + + function onStartInitializeRouter($m) + { + $m->connect('main/min', + array('action' => 'minify')); + return true; + } + + function onAutoload($cls) + { + switch ($cls) + { + case 'MinifyAction': + require_once(INSTALLDIR.'/plugins/Minify/' . strtolower(mb_substr($cls, 0, -6)) . '.php'); + return false; + default: + return true; + } + } + + function onLoginAction($action, &$login) + { + switch ($action) + { + case 'minify': + $login = true; + return false; + default: + return true; + } + } + + function onStartScriptElement($action,&$src,&$type) { + $url = parse_url($src); + if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment)) + { + $src = $this->minifyUrl($src); + } + } + + function onStartCssLinkElement($action,&$src,&$theme,&$media) { + $allowThemeMinification = + is_null(common_config('theme', 'dir')) + && is_null(common_config('theme', 'path')) + && is_null(common_config('theme', 'server')); + $url = parse_url($src); + if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment)) + { + if(!isset($theme)) { + $theme = common_config('site', 'theme'); + } + if($allowThemeMinification && file_exists(INSTALLDIR.'/local/theme/'.$theme.'/'.$src)) { + $src = $this->minifyUrl('local/theme/'.$theme.'/'.$src); + } else if($allowThemeMinification && file_exists(INSTALLDIR.'/theme/'.$theme.'/'.$src)) { + $src = $this->minifyUrl('theme/'.$theme.'/'.$src); + }else if(file_exists(INSTALLDIR.'/'.$src)){ + $src = $this->minifyUrl($src); + } + } + } + + function onStartInlineScriptElement($action,&$code,&$type) + { + if($this->minifyInlineJs && $type=='text/javascript'){ + $c = common_memcache(); + if (!empty($c)) { + $cacheKey = common_cache_key(self::cacheKey . ':' . crc32($code)); + $out = $c->get($cacheKey); + } + if(empty($out)) { + $out = $this->minifyJs($code); + } + if (!empty($c)) { + $c->set($cacheKey, $out); + } + if(!empty($out)) { + $code = $out; + } + } + } + + function onStartStyleElement($action,&$code,&$type,&$media) + { + if($this->minifyInlineCss && $type=='text/css'){ + $c = common_memcache(); + if (!empty($c)) { + $cacheKey = common_cache_key(self::cacheKey . ':' . crc32($code)); + $out = $c->get($cacheKey); + } + if(empty($out)) { + $out = $this->minifyCss($code); + } + if (!empty($c)) { + $c->set($cacheKey, $out); + } + if(!empty($out)) { + $code = $out; + } + } + } + + function minifyUrl($src) { + return common_local_url('minify',null,array('f' => $src ,v => STATUSNET_VERSION)); + } + + static function minifyJs($code) { + require_once('JSMin.php'); + return JSMin::minify($code); + } + + static function minifyCss($code, $options = array()) { + require_once('Minify/CSS.php'); + return Minify_CSS::minify($code,$options); + } +} + diff --git a/plugins/Minify/README b/plugins/Minify/README new file mode 100644 index 000000000..f7763735e --- /dev/null +++ b/plugins/Minify/README @@ -0,0 +1,34 @@ +The Minify plugin minifies your CSS and Javascript, removing whitespace and comments. + +Note that if enabled this plugin and use a theme server, + (if any of $config['theme']['server'], $config['theme']['path'], + $config['theme']['dir'] are set) theme CSS will not be minified. + +This plugin will use memcache, if it is available, for storing minified inline + and file javascript and css. Because minification is non-trivial, using + memcache is recommended. + +Installation +============ +add "addPlugin('minify', + array('setting'=>'value', 'setting2'=>'value2', ...);" +to the bottom of your config.php + +Settings +======== +minifyInlineJs (true): Minify inline javascript. + Because caching isn'tas effective for inline resources (due to its more + dynamic nature) than static files, minifying inline resources may adversely + affect performance for higher volume sites. Testing (and memcache usage) + are highly recommended. +minifyInlineCss (true): Minify inline CSS. + Because caching isn'tas effective for inline resources (due to its more + dynamic nature) than static files, minifying inline resources may adversely + affect performance for higher volume sites. Testing (and memcache usage) + are highly recommended. + +Example +======= + +addPlugin('minify', array()); + diff --git a/plugins/Minify/extlib/minify/HISTORY.txt b/plugins/Minify/extlib/minify/HISTORY.txt new file mode 100644 index 000000000..95a46c87e --- /dev/null +++ b/plugins/Minify/extlib/minify/HISTORY.txt @@ -0,0 +1,75 @@ +Minify Release History + +Version 2.1.3 + * HTTP fixes + * ETag generation now valid (different when gzipped) + * Vary header always sent when Accept-Encoding is sniffed + * Cache-Control no longer has "must-revalidate" due to webkit bug + See: http://mrclay.org/index.php/2009/02/24/safari-4-beta-cache-controlmust-revalidate-bug/ + * Dropped deflate encoding. Browser and proxy support could be buggy. + See: http://stackoverflow.com/questions/883841/ + * File cache now works w/o setting $min_cachePath + * Allow setting contentType in Minify_Source objects + * No more 5.3 deprecation warnings: split() removed + +Version 2.1.2 + * Javascript fixes + * Debug mode no longer confused by "*/*" in strings/RegExps (jQuery) + * quote characters inside RegExp literals no longer cause exception + * files ending in single-line comments no longer cause code loss + * CSS: data: URLs no longer mangled + * Optional error logging to Firefox's FirePHP extension + * Unit tests to check for common DOCUMENT_ROOT problems + * DOCUMENT_ROOT no longer overwritten on IIS servers + * Builder app doesn't fail on systems without gzdeflate() + * APC caching class included + +Version 2.1.1 + * Bug fix release + * Detection and workarounds for zlib.output_compression and non-PHP encoding modules + * Zlib not required (mod_rewrite, et.al., can still be used for encoding) + * HTML : More IE conditional comments preserved + * Minify_groupUri() utility fixed + +Version 2.1.0 + * "min" default application for quick deployment + * Minify URI Builder app & bookmarklet for quickly creating minify URIs + * Relative URIs in CSS file are fixed automatically by default + * "debug" mode for revealing original line #s in combined files + * Better IIS support + * Improved minifier classes: + * JS: preserves IE conditional comments + * CSS: smaller output, preserves more hacks and valid CSS syntax, + shorter line lengths, other bug fixes + * HTML: smaller output, shorter line lengths, other bug fixes + * Default Cache-Control: max-age of 30 minutes + * Conditional GETs supported even when max-age sent + * Experimental memcache cache class (default is files) + * Minify_Cache_File has flock()s (by default) + * Workaround for Windows mtime reporting bug + +Version 2.0.2 beta (2008-06-24) + * Fast new cache system. Cached files served almost 3x as fast. + * Dropped support of compress encoding (though HTTP_Encoder still supports it) + +Version 2.0.1 (2008-05-31) + * E_STRICT compliance (Cache_Lite_File). + +Version 2.0.0 (2008-05-22) + * Complete code overhaul. Minify is now a PEAR-style class and toolkit + for building customized minifying file servers. + * Content-Encoding: deflate/gzip/compress, based on request headers + * Expanded CSS and HTML minifiers with test cases + * Easily plug-in 3rd-party minifiers (like Packer) + * Plug-able front end controller allows changing the way files are chosen + * Compression & encoding modules lazy-loaded as needed (304 responses use + use minimal code) + * Separate utility classes for HTTP encoding and cache control + +Version 1.0.1 (2007-05-05) + * Fixed various problems resolving pathnames when hosted on an NFS mount. + * Fixed 'undefined constant' notice. + * Replaced old JSMin library with a much faster custom implementation. + +Version 1.0.0 (2007-05-02) + * First release.
\ No newline at end of file diff --git a/plugins/Minify/extlib/minify/LICENSE.txt b/plugins/Minify/extlib/minify/LICENSE.txt new file mode 100644 index 000000000..8f008adb5 --- /dev/null +++ b/plugins/Minify/extlib/minify/LICENSE.txt @@ -0,0 +1,26 @@ +Copyright (c) 2008 Ryan Grove <ryan@wonko.com> +Copyright (c) 2008 Steve Clay <steve@mrclay.org> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of this project nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugins/Minify/extlib/minify/README.txt b/plugins/Minify/extlib/minify/README.txt new file mode 100644 index 000000000..3899b9953 --- /dev/null +++ b/plugins/Minify/extlib/minify/README.txt @@ -0,0 +1,53 @@ +WELCOME TO MINIFY 2.1! + +Minify is an HTTP content server. It compresses sources of content +(usually files), combines the result and serves it with appropriate +HTTP headers. These headers can allow clients to perform conditional +GETs (serving content only when clients do not have a valid cache) +and tell clients to cache the file for a period of time. +More info: http://code.google.com/p/minify/ + + +UPGRADING + +See UPGRADING.txt for instructions. + + +INSTALLATION AND USAGE: + +1. Place the /min/ directory as a child of your DOCUMENT_ROOT +directory: i.e. you will have: /home/user/www/public_html/min + +2. Open http://yourdomain/min/ in a web browser. This will forward +you to the Minify URI Builder application, which will help you +quickly start using Minify to serve content on your site. + + +UNIT TESTING: + +1. Place the /min_unit_tests/ directory as a child of your DOCUMENT_ROOT +directory: i.e. you will have: /home/user/www/public_html/min_unit_tests + +2. To run unit tests, access: http://yourdomain/min_unit_tests/test_all.php + +(If you wish, the other test_*.php files can be run to test individual +components with more verbose output.) + +3. Remove /min_unit_tests/ from your DOCUMENT_ROOT when you are done. + + +EXTRAS: + +The min_extras folder contains files for benchmarking using Apache ab on Windows +and a couple single-use tools. DO NOT place this on your production server. + + +FILE ENCODINGS + +Minify *should* work fine with files encoded in UTF-8 or other 8-bit +encodings like ISO 8859/Windows-1252. By default Minify appends +";charset=utf-8" to the Content-Type headers it sends. + +Leading UTF-8 BOMs are stripped from all sources to prevent +duplication in output files, and files are converted to Unix newlines. + diff --git a/plugins/Minify/extlib/minify/UPGRADING.txt b/plugins/Minify/extlib/minify/UPGRADING.txt new file mode 100644 index 000000000..5025faf9b --- /dev/null +++ b/plugins/Minify/extlib/minify/UPGRADING.txt @@ -0,0 +1,35 @@ +Minify Upgrade Guide + +UPGRADING FROM 2.1.* + +1. Rename the following files: + + /min/config.php --> /min/old_config.php
+ /min/groupsConfig.php --> /min/old_groupsConfig.php + +2. Overwrite all files in /min (and /min_unit_tests) with those from this zip. + +3. Delete /min/groupsConfig.php + +4. Rename /min/old_groupsConfig.php --> /min/groupsConfig.php + +5. Merge your settings in old_config.php into config.php. + + * If you've set $_SERVER['DOCUMENT_ROOT'], instead set the new option + $min_documentRoot. This is advantageous on IIS systems because Minify + will no longer overwrite the path you specified. + + * $min_errorLogger adds the ability to enable FirePHP logging. + +6. (optional) Delete /min/old_config.php and the Minify files from your cache + directory (specified in $min_cachePath). + + +INSTALLING FRESH + +See README.txt for instructions on installing this app for the first time. + + +SUPPORT + +Send a message to http://groups.google.com/group/minify
\ No newline at end of file diff --git a/plugins/Minify/extlib/minify/min/README.txt b/plugins/Minify/extlib/minify/min/README.txt new file mode 100644 index 000000000..a7cf774a1 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/README.txt @@ -0,0 +1,132 @@ +The files in this directory represent the default Minify setup designed to ease +integration with your site. This app will combine and minify your Javascript or +CSS files and serve them with HTTP compression and cache headers. + + +RECOMMENDED + +It's recommended to edit config.php to set $min_cachePath to a writeable +(by PHP) directory on your system. This will improve performance. + + +GETTING STARTED + +The quickest way to get started is to use the Minify URI Builder application +on your website: http://example.com/min/builder/ + + +MINIFYING A SINGLE FILE + +Let's say you want to serve this file: + http://example.com/wp-content/themes/default/default.css + +Here's the "Minify URL" for this file: + http://example.com/min/?f=wp-content/themes/default/default.css + +In other words, the "f" argument is set to the file path from root without the +initial "/". As CSS files may contain relative URIs, Minify will automatically +"fix" these by rewriting them as root relative. + + +COMBINING MULTIPLE FILES IN ONE DOWNLOAD + +Separate the paths given to "f" with commas. + +Let's say you have CSS files at these URLs: + http://example.com/scripts/jquery-1.2.6.js + http://example.com/scripts/site.js + +You can combine these files through Minify by requesting this URL: + http://example.com/min/?f=scripts/jquery-1.2.6.js,scripts/site.js + + +SIMPLIFYING URLS WITH A BASE PATH + +If you're combining files that share the same ancestor directory, you can use +the "b" argument to set the base directory for the "f" argument. Do not include +the leading or trailing "/" characters. + +E.g., the following URLs will serve the exact same content: + http://example.com/min/?f=scripts/jquery-1.2.6.js,scripts/site.js,scripts/home.js + http://example.com/min/?b=scripts&f=jquery-1.2.6.js,site.js,home.js + + +MINIFY URLS IN HTML + +In (X)HTML files, don't forget to replace any "&" characters with "&". + + +SPECIFYING ALLOWED DIRECTORIES + +By default, Minify will serve any *.css/*.js files within the DOCUMENT_ROOT. If +you'd prefer to limit Minify's access to certain directories, set the +$min_serveOptions['minApp']['allowDirs'] array in config.php. E.g. to limit +to the /js and /themes/default directories, use: + +$min_serveOptions['minApp']['allowDirs'] = array('//js', '//themes/default'); + + +GROUPS: FASTER PERFORMANCE AND BETTER URLS + +For the best performance, edit groupsConfig.php to pre-specify groups of files +to be combined under preset keys. E.g., here's an example configuration in +groupsConfig.php: + +return array(
+ 'js' => array('//js/Class.js', '//js/email.js')
+); + +This pre-selects the following files to be combined under the key "js": + http://example.com/js/Class.js + http://example.com/js/email.js + +You can now serve these files with this simple URL: + http://example.com/min/?g=js + + +GROUPS: SPECIFYING FILES OUTSIDE THE DOC_ROOT + +In the groupsConfig.php array, the "//" in the file paths is a shortcut for +the DOCUMENT_ROOT, but you can also specify paths from the root of the filesystem +or relative to the DOC_ROOT: + +return array( + 'js' => array( + '//js/file.js' // file within DOC_ROOT + ,'//../file.js' // file in parent directory of DOC_ROOT + ,'C:/Users/Steve/file.js' // file anywhere on filesystem + ) +); + + +FAR-FUTURE EXPIRES HEADERS + +Minify can send far-future (one year) Expires headers. To enable this you must +add a number to the querystring (e.g. /min/?g=js&1234 or /min/f=file.js&1234) +and alter it whenever a source file is changed. If you have a build process you +can use a build/source control revision number. + +If you serve files as a group, you can use the utility function Minify_groupUri() +to get a "versioned" Minify URI for use in your HTML. E.g.: + +<?php +// add /min/lib to your include_path first! +require $_SERVER['DOCUMENT_ROOT'] . '/min/utils.php'; + +$jsUri = Minify_groupUri('js'); +echo "<script type='text/javascript' src='{$jsUri}'></script>"; + + +DEBUG MODE + +In debug mode, instead of compressing files, Minify sends combined files with +comments prepended to each line to show the line number in the original source +file. To enable this, set $min_allowDebugFlag to true in config.php and append +"&debug=1" to your URIs. E.g. /min/?f=script1.js,script2.js&debug=1 + +Known issue: files with comment-like strings/regexps can cause problems in this mode. + + +QUESTIONS? + +http://groups.google.com/group/minify
\ No newline at end of file diff --git a/plugins/Minify/extlib/minify/min/builder/_index.js b/plugins/Minify/extlib/minify/min/builder/_index.js new file mode 100644 index 000000000..8e5313a3b --- /dev/null +++ b/plugins/Minify/extlib/minify/min/builder/_index.js @@ -0,0 +1,242 @@ +var MUB = { + _uid : 0 + ,_minRoot : '/min/?' + ,checkRewrite : function () { + var testUri = location.pathname.replace(/\/[^\/]*$/, '/rewriteTest.js').substr(1); + function fail() { + $('#minRewriteFailed')[0].className = 'topNote'; + }; + $.ajax({ + url : '../f=' + testUri + '&' + (new Date()).getTime() + ,success : function (data) { + if (data === '1') { + MUB._minRoot = '/min/'; + $('span.minRoot').html('/min/'); + } else + fail(); + } + ,error : fail + }); + } + /** + * Get markup for new source LI element + */ + ,newLi : function () { + return '<li id="li' + MUB._uid + '">http://' + location.host + '/<input type=text size=20>' + + ' <button title="Remove">x</button> <button title="Include Earlier">↑</button>' + + ' <button title="Include Later">↓</button> <span></span></li>'; + } + /** + * Add new empty source LI and attach handlers to buttons + */ + ,addLi : function () { + $('#sources').append(MUB.newLi()); + var li = $('#li' + MUB._uid)[0]; + $('button[title=Remove]', li).click(function () { + $('#results').hide(); + var hadValue = !!$('input', li)[0].value; + $(li).remove(); + }); + $('button[title$=Earlier]', li).click(function () { + $(li).prev('li').find('input').each(function () { + $('#results').hide(); + // this = previous li input + var tmp = this.value; + this.value = $('input', li).val(); + $('input', li).val(tmp); + MUB.updateAllTestLinks(); + }); + }); + $('button[title$=Later]', li).click(function () { + $(li).next('li').find('input').each(function () { + $('#results').hide(); + // this = next li input + var tmp = this.value; + this.value = $('input', li).val(); + $('input', li).val(tmp); + MUB.updateAllTestLinks(); + }); + }); + ++MUB._uid; + } + /** + * In the context of a source LI element, this will analyze the URI in + * the INPUT and check the URL on the site. + */ + ,liUpdateTestLink : function () { // call in context of li element + if (! $('input', this)[0].value) + return; + var li = this; + $('span', this).html(''); + var url = 'http://' + location.host + '/' + + $('input', this)[0].value.replace(/^\//, ''); + $.ajax({ + url : url + ,complete : function (xhr, stat) { + if ('success' == stat) + $('span', li).html('✓'); + else { + $('span', li).html('<button><b>404! </b> recheck</button>') + .find('button').click(function () { + MUB.liUpdateTestLink.call(li); + }); + } + } + ,dataType : 'text' + }); + } + /** + * Check all source URLs + */ + ,updateAllTestLinks : function () { + $('#sources li').each(MUB.liUpdateTestLink); + } + /** + * In a given array of strings, find the character they all have at + * a particular index + * @param Array arr array of strings + * @param Number pos index to check + * @return mixed a common char or '' if any do not match + */ + ,getCommonCharAtPos : function (arr, pos) { + var i + ,l = arr.length + ,c = arr[0].charAt(pos); + if (c === '' || l === 1) + return c; + for (i = 1; i < l; ++i) + if (arr[i].charAt(pos) !== c) + return ''; + return c; + } + /** + * Get the shortest URI to minify the set of source files + * @param Array sources URIs + */ + ,getBestUri : function (sources) { + var pos = 0 + ,base = '' + ,c; + while (true) { + c = MUB.getCommonCharAtPos(sources, pos); + if (c === '') + break; + else + base += c; + ++pos; + } + base = base.replace(/[^\/]+$/, ''); + var uri = MUB._minRoot + 'f=' + sources.join(','); + if (base.charAt(base.length - 1) === '/') { + // we have a base dir! + var basedSources = sources + ,i + ,l = sources.length; + for (i = 0; i < l; ++i) { + basedSources[i] = sources[i].substr(base.length); + } + base = base.substr(0, base.length - 1); + var bUri = MUB._minRoot + 'b=' + base + '&f=' + basedSources.join(','); + //window.console && console.log([uri, bUri]); + uri = uri.length < bUri.length + ? uri + : bUri; + } + return uri; + } + /** + * Create the Minify URI for the sources + */ + ,update : function () { + MUB.updateAllTestLinks(); + var sources = [] + ,ext = false + ,fail = false; + $('#sources input').each(function () { + var m, val; + if (! fail && this.value && (m = this.value.match(/\.(css|js)$/))) { + var thisExt = m[1]; + if (ext === false) + ext = thisExt; + else if (thisExt !== ext) { + fail = true; + return alert('extensions must match!'); + } + this.value = this.value.replace(/^\//, ''); + if (-1 != $.inArray(this.value, sources)) { + fail = true; + return alert('duplicate file!'); + } + sources.push(this.value); + } + }); + if (fail || ! sources.length) + return; + $('#groupConfig').val(" 'keyName' => array('//" + sources.join("', '//") + "'),"); + var uri = MUB.getBestUri(sources) + ,uriH = uri.replace(/</, '<').replace(/>/, '>').replace(/&/, '&'); + $('#uriA').html(uriH)[0].href = uri; + $('#uriHtml').val( + ext === 'js' + ? '<script type="text/javascript" src="' + uriH + '"></script>' + : '<link type="text/css" rel="stylesheet" href="' + uriH + '" />' + ); + $('#results').show(); + } + /** + * Handler for the "Add file +" button + */ + ,addButtonClick : function () { + $('#results').hide(); + MUB.addLi(); + MUB.updateAllTestLinks(); + $('#update').show().click(MUB.update); + $('#sources li:last input')[0].focus(); + } + /** + * Runs on DOMready + */ + ,init : function () { + $('#app').show(); + $('#sources').html(''); + $('#add button').click(MUB.addButtonClick); + // make easier to copy text out of + $('#uriHtml, #groupConfig').click(function () { + this.select(); + }).focus(function () { + this.select(); + }); + $('a.ext').attr({target:'_blank'}); + if (location.hash) { + // make links out of URIs from bookmarklet + $('#getBm').hide(); + $('#bmUris').html('<p><strong>Found by bookmarklet:</strong> /<a href=#>' + + location.hash.substr(1).split(',').join('</a> | /<a href=#>') + + '</a></p>' + ); + $('#bmUris a').click(function () { + MUB.addButtonClick(); + $('#sources li:last input').val(this.innerHTML) + MUB.liUpdateTestLink.call($('#sources li:last')[0]); + $('#results').hide(); + return false; + }).attr({title:'Add file +'}); + } else { + // copy bookmarklet code into href + var bmUri = location.pathname.replace(/\/[^\/]*$/, '/bm.js').substr(1); + $.ajax({ + url : '../?f=' + bmUri + ,success : function (code) { + $('#bm')[0].href = code + .replace('%BUILDER_URL%', location.href) + .replace(/\n/g, ' '); + } + ,dataType : 'text' + }); + $.browser.msie && $('#getBm p:last').append(' Sorry, not supported in MSIE!'); + MUB.addButtonClick(); + } + MUB.checkRewrite(); + } +}; +window.onload = MUB.init;
\ No newline at end of file diff --git a/plugins/Minify/extlib/minify/min/builder/bm.js b/plugins/Minify/extlib/minify/min/builder/bm.js new file mode 100644 index 000000000..10d194381 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/builder/bm.js @@ -0,0 +1,36 @@ +javascript:(function() { + var d = document + ,uris = [] + ,i = 0 + ,o + ,home = (location + '').split('/').splice(0, 3).join('/') + '/'; + function add(uri) { + return (0 === uri.indexOf(home)) + && (!/[\?&]/.test(uri)) + && uris.push(escape(uri.substr(home.length))); + }; + function sheet(ss) { + // we must check the domain with add() before accessing ss.cssRules + // otherwise a security exception will be thrown + if (ss.href && add(ss.href) && ss.cssRules) { + var i = 0, r; + while (r = ss.cssRules[i++]) + r.styleSheet && sheet(r.styleSheet); + } + }; + while (o = d.getElementsByTagName('script')[i++]) + o.src && !(o.type && /vbs/i.test(o.type)) && add(o.src); + i = 0; + while (o = d.styleSheets[i++]) + /* http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-DocumentStyle-styleSheets + document.styleSheet is a list property where [0] accesses the 1st element and + [outOfRange] returns null. In IE, styleSheets is a function, and also throws an + exception when you check the out of bounds index. (sigh) */ + sheet(o); + if (uris.length) + window.open('%BUILDER_URL%#' + uris.join(',')); + else + alert('No js/css files found with URLs within "' + + home.split('/')[2] + + '".\n(This tool is limited to URLs with the same domain.)'); +})();
\ No newline at end of file diff --git a/plugins/Minify/extlib/minify/min/builder/index.php b/plugins/Minify/extlib/minify/min/builder/index.php new file mode 100644 index 000000000..1b2098222 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/builder/index.php @@ -0,0 +1,182 @@ +<?php + +if (phpversion() < 5) { + exit('Minify requires PHP5 or greater.'); +} + +// check for auto-encoding +$encodeOutput = (function_exists('gzdeflate') + && !ini_get('zlib.output_compression')); + +require dirname(__FILE__) . '/../config.php'; + +if (! $min_enableBuilder) { + header('Location: /'); + exit(); +} + +ob_start(); +?> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<head> + <meta name="ROBOTS" content="NOINDEX, NOFOLLOW"> + <title>Minify URI Builder</title> + <style type="text/css"> +body {margin:1em 60px;} +h1, h2, h3 {margin-left:-25px; position:relative;} +h1 {margin-top:0;} +#sources {margin:0; padding:0;} +#sources li {margin:0 0 0 40px} +#sources li input {margin-left:2px} +#add {margin:5px 0 1em 40px} +.hide {display:none} +#uriTable {border-collapse:collapse;} +#uriTable td, #uriTable th {padding-top:10px;} +#uriTable th {padding-right:10px;} +#groupConfig {font-family:monospace;} +b {color:#c00} +.topNote {background: #ff9; display:inline-block; padding:.5em .6em; margin:0 0 1em;} +.topWarning {background:#c00; color:#fff; padding:.5em .6em; margin:0 0 1em;} + </style> +</head> + +<?php if (! isset($min_cachePath)): ?> +<p class=topNote><strong>Note:</strong> Please set <code>$min_cachePath</code> +in /min/config.php to improve performance.</p> +<?php endIf; ?> + +<p id=minRewriteFailed class="hide"><strong>Note:</strong> Your webserver does not seem to + support mod_rewrite (used in /min/.htaccess). Your Minify URIs will contain "?", which +<a href="http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/" +>may reduce the benefit of proxy cache servers</a>.</p> + +<h1>Minify URI Builder</h1> + +<noscript><p class="topNote">Javascript and a browser supported by jQuery 1.2.6 is required +for this application.</p></noscript> + +<div id=app class=hide> + +<p>Create a list of Javascript or CSS files (or 1 is fine) you'd like to combine +and click [Update].</p> + +<ol id=sources><li></li></ol> +<div id=add><button>Add file +</button></div> + +<div id=bmUris></div> + +<p><button id=update class=hide>Update</button></p> + +<div id=results class=hide> + +<h2>Minify URI</h2> +<p>Place this URI in your HTML to serve the files above combined, minified, compressed and +with cache headers.</p> +<table id=uriTable> + <tr><th>URI</th><td><a id=uriA class=ext>/min</a> <small>(opens in new window)</small></td></tr> + <tr><th>HTML</th><td><input id=uriHtml type=text size=100 readonly></td></tr> +</table> + +<h2>How to serve these files as a group</h2> +<p>For the best performance you can serve these files as a pre-defined group with a URI +like: <code><span class=minRoot>/min/?</span>g=keyName</code></p> +<p>To do this, add a line like this to /min/groupsConfig.php:</p> + +<pre><code>return array( + <span style="color:#666">... your existing groups here ...</span> +<input id=groupConfig size=100 type=text readonly> +);</code></pre> + +<p><em>Make sure to replace <code>keyName</code> with a unique key for this group.</em></p> +</div> + +<div id=getBm> +<h3>Find URIs on a Page</h3> +<p>You can use the bookmarklet below to fetch all CSS & Javascript URIs from a page +on your site. When you active it, this page will open in a new window with a list of +available URIs to add.</p> + +<p><a id=bm>Create Minify URIs</a> <small>(right-click, add to bookmarks)</small></p> +</div> + +<h3>Combining CSS files that contain <code>@import</code></h3> +<p>If your CSS files contain <code>@import</code> declarations, Minify will not +remove them. Therefore, you will want to remove those that point to files already +in your list, and move any others to the top of the first file in your list +(imports below any styles will be ignored by browsers as invalid).</p> +<p>If you desire, you can use Minify URIs in imports and they will not be touched +by Minify. E.g. <code>@import "<span class=minRoot>/min/?</span>g=css2";</code></p> + +</div><!-- #app --> + +<hr> +<p>Need help? Search or post to the <a class=ext +href="http://groups.google.com/group/minify">Minify discussion list</a>.</p> +<p><small>This app is minified :) <a class=ext +href="http://code.google.com/p/minify/source/browse/trunk/min/builder/index.php">view +source</a></small></p> + +<script type="text/javascript" +src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> + +<script type="text/javascript"> +$(function () { + // detection of double output encoding + var msg = '<\p class=topWarning><\strong>Warning:<\/strong> '; + var url = 'ocCheck.php?' + (new Date()).getTime(); + $.get(url, function (ocStatus) { + $.get(url + '&hello=1', function (ocHello) { + if (ocHello != 'World!') { + msg += 'It appears output is being automatically compressed, interfering ' + + ' with Minify\'s own compression. '; + if (ocStatus == '1') + msg += 'The option "zlib.output_compression" is enabled in your PHP configuration. ' + + 'Minify set this to "0", but it had no effect. This option must be disabled ' + + 'in php.ini or .htaccess.'; + else + msg += 'The option "zlib.output_compression" is disabled in your PHP configuration ' + + 'so this behavior is likely due to a server option.'; + $(document.body).prepend(msg + '<\/p>'); + } else + if (ocStatus == '1') + $(document.body).prepend('<\p class=topNote><\strong>Note:</\strong> The option ' + + '"zlib.output_compression" is enabled in your PHP configuration, but has been ' + + 'successfully disabled via ini_set(). If you experience mangled output you ' + + 'may want to consider disabling this option in your PHP configuration.<\/p>' + ); + }); + }); +}); +</script> +<script type="text/javascript"> + // workaround required to test when /min isn't child of web root + var src = location.pathname.replace(/\/[^\/]*$/, '/_index.js').substr(1); + document.write('<\script type="text/javascript" src="../?f=' + src + '"><\/script>'); +</script> + +<?php + +$serveOpts = array( + 'content' => ob_get_contents() + ,'id' => __FILE__ + ,'lastModifiedTime' => max( + // regenerate cache if either of these change + filemtime(__FILE__) + ,filemtime(dirname(__FILE__) . '/../config.php') + ) + ,'minifyAll' => true + ,'encodeOutput' => $encodeOutput +); +ob_end_clean(); + +set_include_path(dirname(__FILE__) . '/../lib' . PATH_SEPARATOR . get_include_path()); + +require 'Minify.php'; + +if (0 === stripos(PHP_OS, 'win')) { + Minify::setDocRoot(); // we may be on IIS +} +Minify::setCache(isset($min_cachePath) ? $min_cachePath : null); +Minify::$uploaderHoursBehind = $min_uploaderHoursBehind; + +Minify::serve('Page', $serveOpts); diff --git a/plugins/Minify/extlib/minify/min/builder/ocCheck.php b/plugins/Minify/extlib/minify/min/builder/ocCheck.php new file mode 100644 index 000000000..c47baa33d --- /dev/null +++ b/plugins/Minify/extlib/minify/min/builder/ocCheck.php @@ -0,0 +1,36 @@ +<?php +/** + * AJAX checks for zlib.output_compression + * + * @package Minify + */ + +$_oc = ini_get('zlib.output_compression'); + +// allow access only if builder is enabled +require dirname(__FILE__) . '/../config.php'; +if (! $min_enableBuilder) { + header('Location: /'); + exit(); +} + +if (isset($_GET['hello'])) { + // echo 'World!' + + // try to prevent double encoding (may not have an effect) + ini_set('zlib.output_compression', '0'); + + require $min_libPath . '/HTTP/Encoder.php'; + HTTP_Encoder::$encodeToIe6 = true; // just in case + $he = new HTTP_Encoder(array( + 'content' => 'World!' + ,'method' => 'deflate' + )); + $he->encode();
+ $he->sendAll();
+ +} else { + // echo status "0" or "1" + header('Content-Type: text/plain'); + echo (int)$_oc; +} diff --git a/plugins/Minify/extlib/minify/min/builder/rewriteTest.js b/plugins/Minify/extlib/minify/min/builder/rewriteTest.js new file mode 100644 index 000000000..56a6051ca --- /dev/null +++ b/plugins/Minify/extlib/minify/min/builder/rewriteTest.js @@ -0,0 +1 @@ +1
\ No newline at end of file diff --git a/plugins/Minify/extlib/minify/min/groupsConfig.php b/plugins/Minify/extlib/minify/min/groupsConfig.php new file mode 100644 index 000000000..9e2514d7a --- /dev/null +++ b/plugins/Minify/extlib/minify/min/groupsConfig.php @@ -0,0 +1,34 @@ +<?php +/** + * Groups configuration for default Minify implementation + * @package Minify + */ + +/** + * You may wish to use the Minify URI Builder app to suggest + * changes. http://yourdomain/min/builder/ + **/ + +return array( + // 'js' => array('//js/file1.js', '//js/file2.js'), + // 'css' => array('//css/file1.css', '//css/file2.css'), + + // custom source example + /*'js2' => array( + dirname(__FILE__) . '/../min_unit_tests/_test_files/js/before.js', + // do NOT process this file + new Minify_Source(array( + 'filepath' => dirname(__FILE__) . '/../min_unit_tests/_test_files/js/before.js', + 'minifier' => create_function('$a', 'return $a;') + )) + ),//*/ + + /*'js3' => array( + dirname(__FILE__) . '/../min_unit_tests/_test_files/js/before.js', + // do NOT process this file + new Minify_Source(array( + 'filepath' => dirname(__FILE__) . '/../min_unit_tests/_test_files/js/before.js', + 'minifier' => array('Minify_Packer', 'minify') + )) + ),//*/ +);
\ No newline at end of file diff --git a/plugins/Minify/extlib/minify/min/index.php b/plugins/Minify/extlib/minify/min/index.php new file mode 100644 index 000000000..51c352569 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/index.php @@ -0,0 +1,66 @@ +<?php +/** + * Front controller for default Minify implementation + * + * DO NOT EDIT! Configure this utility via config.php and groupsConfig.php + * + * @package Minify + */ + +define('MINIFY_MIN_DIR', dirname(__FILE__)); + +// load config +require MINIFY_MIN_DIR . '/config.php'; + +// setup include path +set_include_path($min_libPath . PATH_SEPARATOR . get_include_path()); + +require 'Minify.php'; + +Minify::$uploaderHoursBehind = $min_uploaderHoursBehind; +Minify::setCache( + isset($min_cachePath) ? $min_cachePath : '' + ,$min_cacheFileLocking +); + +if ($min_documentRoot) { + $_SERVER['DOCUMENT_ROOT'] = $min_documentRoot; +} elseif (0 === stripos(PHP_OS, 'win')) { + Minify::setDocRoot(); // IIS may need help +} + +$min_serveOptions['minifierOptions']['text/css']['symlinks'] = $min_symlinks; + +if ($min_allowDebugFlag && isset($_GET['debug'])) { + $min_serveOptions['debug'] = true; +} + +if ($min_errorLogger) { + require_once 'Minify/Logger.php'; + if (true === $min_errorLogger) { + require_once 'FirePHP.php'; + Minify_Logger::setLogger(FirePHP::getInstance(true)); + } else { + Minify_Logger::setLogger($min_errorLogger); + } +} + +// check for URI versioning +if (preg_match('/&\\d/', $_SERVER['QUERY_STRING'])) { + $min_serveOptions['maxAge'] = 31536000; +} +if (isset($_GET['g'])) { + // well need groups config + $min_serveOptions['minApp']['groups'] = (require MINIFY_MIN_DIR . '/groupsConfig.php'); +} +if (isset($_GET['f']) || isset($_GET['g'])) { + // serve! + Minify::serve('MinApp', $min_serveOptions); + +} elseif ($min_enableBuilder) { + header('Location: builder/'); + exit(); +} else { + header("Location: /"); + exit(); +} diff --git a/plugins/Minify/extlib/minify/min/lib/FirePHP.php b/plugins/Minify/extlib/minify/min/lib/FirePHP.php new file mode 100644 index 000000000..d301a641a --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/FirePHP.php @@ -0,0 +1,1370 @@ +<?php +/** + * *** BEGIN LICENSE BLOCK ***** + * + * This file is part of FirePHP (http://www.firephp.org/). + * + * Software License Agreement (New BSD License) + * + * Copyright (c) 2006-2008, Christoph Dorn + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of Christoph Dorn nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** + * + * @copyright Copyright (C) 2007-2008 Christoph Dorn + * @author Christoph Dorn <christoph@christophdorn.com> + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHP + */ + + +/** + * Sends the given data to the FirePHP Firefox Extension. + * The data can be displayed in the Firebug Console or in the + * "Server" request tab. + * + * For more information see: http://www.firephp.org/ + * + * @copyright Copyright (C) 2007-2008 Christoph Dorn + * @author Christoph Dorn <christoph@christophdorn.com> + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHP + */ +class FirePHP { + + /** + * FirePHP version + * + * @var string + */ + const VERSION = '0.2.0'; + + /** + * Firebug LOG level + * + * Logs a message to firebug console. + * + * @var string + */ + const LOG = 'LOG'; + + /** + * Firebug INFO level + * + * Logs a message to firebug console and displays an info icon before the message. + * + * @var string + */ + const INFO = 'INFO'; + + /** + * Firebug WARN level + * + * Logs a message to firebug console, displays an warning icon before the message and colors the line turquoise. + * + * @var string + */ + const WARN = 'WARN'; + + /** + * Firebug ERROR level + * + * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count. + * + * @var string + */ + const ERROR = 'ERROR'; + + /** + * Dumps a variable to firebug's server panel + * + * @var string + */ + const DUMP = 'DUMP'; + + /** + * Displays a stack trace in firebug console + * + * @var string + */ + const TRACE = 'TRACE'; + + /** + * Displays an exception in firebug console + * + * Increments the firebug error count. + * + * @var string + */ + const EXCEPTION = 'EXCEPTION'; + + /** + * Displays an table in firebug console + * + * @var string + */ + const TABLE = 'TABLE'; + + /** + * Starts a group in firebug console + * + * @var string + */ + const GROUP_START = 'GROUP_START'; + + /** + * Ends a group in firebug console + * + * @var string + */ + const GROUP_END = 'GROUP_END'; + + /** + * Singleton instance of FirePHP + * + * @var FirePHP + */ + protected static $instance = null; + + /** + * Wildfire protocol message index + * + * @var int + */ + protected $messageIndex = 1; + + /** + * Options for the library + * + * @var array + */ + protected $options = array(); + + /** + * Filters used to exclude object members when encoding + * + * @var array + */ + protected $objectFilters = array(); + + /** + * A stack of objects used to detect recursion during object encoding + * + * @var object + */ + protected $objectStack = array(); + + /** + * Flag to enable/disable logging + * + * @var boolean + */ + protected $enabled = true; + + /** + * The object constructor + */ + function __construct() { + $this->options['maxObjectDepth'] = 10; + $this->options['maxArrayDepth'] = 20; + $this->options['useNativeJsonEncode'] = true; + $this->options['includeLineNumbers'] = true; + } + + /** + * When the object gets serialized only include specific object members. + * + * @return array + */ + public function __sleep() { + return array('options','objectFilters','enabled'); + } + + /** + * Gets singleton instance of FirePHP + * + * @param boolean $AutoCreate + * @return FirePHP + */ + public static function getInstance($AutoCreate=false) { + if($AutoCreate===true && !self::$instance) { + self::init(); + } + return self::$instance; + } + + /** + * Creates FirePHP object and stores it for singleton access + * + * @return FirePHP + */ + public static function init() { + return self::$instance = new self(); + } + + /** + * Enable and disable logging to Firebug + * + * @param boolean $Enabled TRUE to enable, FALSE to disable + * @return void + */ + public function setEnabled($Enabled) { + $this->enabled = $Enabled; + } + + /** + * Check if logging is enabled + * + * @return boolean TRUE if enabled + */ + public function getEnabled() { + return $this->enabled; + } + + /** + * Specify a filter to be used when encoding an object + * + * Filters are used to exclude object members. + * + * @param string $Class The class name of the object + * @param array $Filter An array or members to exclude + * @return void + */ + public function setObjectFilter($Class, $Filter) { + $this->objectFilters[$Class] = $Filter; + } + + /** + * Set some options for the library + * + * Options: + * - maxObjectDepth: The maximum depth to traverse objects (default: 10) + * - maxArrayDepth: The maximum depth to traverse arrays (default: 20) + * - useNativeJsonEncode: If true will use json_encode() (default: true) + * - includeLineNumbers: If true will include line numbers and filenames (default: true) + * + * @param array $Options The options to be set + * @return void + */ + public function setOptions($Options) { + $this->options = array_merge($this->options,$Options); + } + + /** + * Register FirePHP as your error handler + * + * Will throw exceptions for each php error. + */ + public function registerErrorHandler() + { + //NOTE: The following errors will not be caught by this error handler: + // E_ERROR, E_PARSE, E_CORE_ERROR, + // E_CORE_WARNING, E_COMPILE_ERROR, + // E_COMPILE_WARNING, E_STRICT + + set_error_handler(array($this,'errorHandler')); + } + + /** + * FirePHP's error handler + * + * Throws exception for each php error that will occur. + * + * @param int $errno + * @param string $errstr + * @param string $errfile + * @param int $errline + * @param array $errcontext + */ + public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext) + { + // Don't throw exception if error reporting is switched off + if (error_reporting() == 0) { + return; + } + // Only throw exceptions for errors we are asking for + if (error_reporting() & $errno) { + throw new ErrorException($errstr, 0, $errno, $errfile, $errline); + } + } + + /** + * Register FirePHP as your exception handler + */ + public function registerExceptionHandler() + { + set_exception_handler(array($this,'exceptionHandler')); + } + + /** + * FirePHP's exception handler + * + * Logs all exceptions to your firebug console and then stops the script. + * + * @param Exception $Exception + * @throws Exception + */ + function exceptionHandler($Exception) { + $this->fb($Exception); + } + + /** + * Set custom processor url for FirePHP + * + * @param string $URL + */ + public function setProcessorUrl($URL) + { + $this->setHeader('X-FirePHP-ProcessorURL', $URL); + } + + /** + * Set custom renderer url for FirePHP + * + * @param string $URL + */ + public function setRendererUrl($URL) + { + $this->setHeader('X-FirePHP-RendererURL', $URL); + } + + /** + * Start a group for following messages + * + * @param string $Name + * @return true + * @throws Exception + */ + public function group($Name) { + return $this->fb(null, $Name, FirePHP::GROUP_START); + } + + /** + * Ends a group you have started before + * + * @return true + * @throws Exception + */ + public function groupEnd() { + return $this->fb(null, null, FirePHP::GROUP_END); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::LOG + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function log($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP::LOG); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::INFO + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function info($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP::INFO); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::WARN + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function warn($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP::WARN); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::ERROR + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function error($Object, $Label=null) { + return $this->fb($Object, $Label, FirePHP::ERROR); + } + + /** + * Dumps key and variable to firebug server panel + * + * @see FirePHP::DUMP + * @param string $Key + * @param mixed $Variable + * @return true + * @throws Exception + */ + public function dump($Key, $Variable) { + return $this->fb($Variable, $Key, FirePHP::DUMP); + } + + /** + * Log a trace in the firebug console + * + * @see FirePHP::TRACE + * @param string $Label + * @return true + * @throws Exception + */ + public function trace($Label) { + return $this->fb($Label, FirePHP::TRACE); + } + + /** + * Log a table in the firebug console + * + * @see FirePHP::TABLE + * @param string $Label + * @param string $Table + * @return true + * @throws Exception + */ + public function table($Label, $Table) { + return $this->fb($Table, $Label, FirePHP::TABLE); + } + + /** + * Check if FirePHP is installed on client + * + * @return boolean + */ + public function detectClientExtension() { + /* Check if FirePHP is installed on client */ + if(!@preg_match_all('/\sFirePHP\/([\.|\d]*)\s?/si',$this->getUserAgent(),$m) || + !version_compare($m[1][0],'0.0.6','>=')) { + return false; + } + return true; + } + + /** + * Log varible to Firebug + * + * @see http://www.firephp.org/Wiki/Reference/Fb + * @param mixed $Object The variable to be logged + * @return true Return TRUE if message was added to headers, FALSE otherwise + * @throws Exception + */ + public function fb($Object) { + + if(!$this->enabled) { + return false; + } + + if (headers_sent($filename, $linenum)) { + throw $this->newException('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.'); + } + + $Type = null; + $Label = null; + + if(func_num_args()==1) { + } else + if(func_num_args()==2) { + switch(func_get_arg(1)) { + case self::LOG: + case self::INFO: + case self::WARN: + case self::ERROR: + case self::DUMP: + case self::TRACE: + case self::EXCEPTION: + case self::TABLE: + case self::GROUP_START: + case self::GROUP_END: + $Type = func_get_arg(1); + break; + default: + $Label = func_get_arg(1); + break; + } + } else + if(func_num_args()==3) { + $Type = func_get_arg(2); + $Label = func_get_arg(1); + } else { + throw $this->newException('Wrong number of arguments to fb() function!'); + } + + + if(!$this->detectClientExtension()) { + return false; + } + + $meta = array(); + $skipFinalObjectEncode = false; + + if($Object instanceof Exception) { + + $meta['file'] = $this->_escapeTraceFile($Object->getFile()); + $meta['line'] = $Object->getLine(); + + $trace = $Object->getTrace(); + if($Object instanceof ErrorException + && isset($trace[0]['function']) + && $trace[0]['function']=='errorHandler' + && isset($trace[0]['class']) + && $trace[0]['class']=='FirePHP') { + + $severity = false; + switch($Object->getSeverity()) { + case E_WARNING: $severity = 'E_WARNING'; break; + case E_NOTICE: $severity = 'E_NOTICE'; break; + case E_USER_ERROR: $severity = 'E_USER_ERROR'; break; + case E_USER_WARNING: $severity = 'E_USER_WARNING'; break; + case E_USER_NOTICE: $severity = 'E_USER_NOTICE'; break; + case E_STRICT: $severity = 'E_STRICT'; break; + case E_RECOVERABLE_ERROR: $severity = 'E_RECOVERABLE_ERROR'; break; + case E_DEPRECATED: $severity = 'E_DEPRECATED'; break; + case E_USER_DEPRECATED: $severity = 'E_USER_DEPRECATED'; break; + } + + $Object = array('Class'=>get_class($Object), + 'Message'=>$severity.': '.$Object->getMessage(), + 'File'=>$this->_escapeTraceFile($Object->getFile()), + 'Line'=>$Object->getLine(), + 'Type'=>'trigger', + 'Trace'=>$this->_escapeTrace(array_splice($trace,2))); + $skipFinalObjectEncode = true; + } else { + $Object = array('Class'=>get_class($Object), + 'Message'=>$Object->getMessage(), + 'File'=>$this->_escapeTraceFile($Object->getFile()), + 'Line'=>$Object->getLine(), + 'Type'=>'throw', + 'Trace'=>$this->_escapeTrace($trace)); + $skipFinalObjectEncode = true; + } + $Type = self::EXCEPTION; + + } else + if($Type==self::TRACE) { + + $trace = debug_backtrace(); + if(!$trace) return false; + for( $i=0 ; $i<sizeof($trace) ; $i++ ) { + + if(isset($trace[$i]['class']) + && isset($trace[$i]['file']) + && ($trace[$i]['class']=='FirePHP' + || $trace[$i]['class']=='FB') + && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' + || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { + /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ + } else + if(isset($trace[$i]['class']) + && isset($trace[$i+1]['file']) + && $trace[$i]['class']=='FirePHP' + && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip fb() */ + } else + if($trace[$i]['function']=='fb' + || $trace[$i]['function']=='trace' + || $trace[$i]['function']=='send') { + $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'', + 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'', + 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'', + 'Message'=>$trace[$i]['args'][0], + 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'', + 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'', + 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'', + 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1))); + + $skipFinalObjectEncode = true; + $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; + $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; + break; + } + } + + } else + if($Type==self::TABLE) { + + if(isset($Object[0]) && is_string($Object[0])) { + $Object[1] = $this->encodeTable($Object[1]); + } else { + $Object = $this->encodeTable($Object); + } + + $skipFinalObjectEncode = true; + + } else { + if($Type===null) { + $Type = self::LOG; + } + } + + if($this->options['includeLineNumbers']) { + if(!isset($meta['file']) || !isset($meta['line'])) { + + $trace = debug_backtrace(); + for( $i=0 ; $trace && $i<sizeof($trace) ; $i++ ) { + + if(isset($trace[$i]['class']) + && isset($trace[$i]['file']) + && ($trace[$i]['class']=='FirePHP' + || $trace[$i]['class']=='FB') + && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' + || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { + /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ + } else + if(isset($trace[$i]['class']) + && isset($trace[$i+1]['file']) + && $trace[$i]['class']=='FirePHP' + && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip fb() */ + } else + if(isset($trace[$i]['file']) + && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip FB::fb() */ + } else { + $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; + $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; + break; + } + } + + } + } else { + unset($meta['file']); + unset($meta['line']); + } + + $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2'); + $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.self::VERSION); + + $structure_index = 1; + if($Type==self::DUMP) { + $structure_index = 2; + $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1'); + } else { + $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'); + } + + if($Type==self::DUMP) { + $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}'; + } else { + $msg_meta = array('Type'=>$Type); + if($Label!==null) { + $msg_meta['Label'] = $Label; + } + if(isset($meta['file'])) { + $msg_meta['File'] = $meta['file']; + } + if(isset($meta['line'])) { + $msg_meta['Line'] = $meta['line']; + } + $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']'; + } + + $parts = explode("\n",chunk_split($msg, 5000, "\n")); + + for( $i=0 ; $i<count($parts) ; $i++) { + + $part = $parts[$i]; + if ($part) { + + if(count($parts)>2) { + // Message needs to be split into multiple parts + $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, + (($i==0)?strlen($msg):'') + . '|' . $part . '|' + . (($i<count($parts)-2)?'\\':'')); + } else { + $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, + strlen($part) . '|' . $part . '|'); + } + + $this->messageIndex++; + + if ($this->messageIndex > 99999) { + throw new Exception('Maximum number (99,999) of messages reached!'); + } + } + } + + $this->setHeader('X-Wf-1-Index',$this->messageIndex-1); + + return true; + } + + /** + * Standardizes path for windows systems. + * + * @param string $Path + * @return string + */ + protected function _standardizePath($Path) { + return preg_replace('/\\\\+/','/',$Path); + } + + /** + * Escape trace path for windows systems + * + * @param array $Trace + * @return array + */ + protected function _escapeTrace($Trace) { + if(!$Trace) return $Trace; + for( $i=0 ; $i<sizeof($Trace) ; $i++ ) { + if(isset($Trace[$i]['file'])) { + $Trace[$i]['file'] = $this->_escapeTraceFile($Trace[$i]['file']); + } + if(isset($Trace[$i]['args'])) { + $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']); + } + } + return $Trace; + } + + /** + * Escape file information of trace for windows systems + * + * @param string $File + * @return string + */ + protected function _escapeTraceFile($File) { + /* Check if we have a windows filepath */ + if(strpos($File,'\\')) { + /* First strip down to single \ */ + + $file = preg_replace('/\\\\+/','\\',$File); + + return $file; + } + return $File; + } + + /** + * Send header + * + * @param string $Name + * @param string_type $Value + */ + protected function setHeader($Name, $Value) { + return header($Name.': '.$Value); + } + + /** + * Get user agent + * + * @return string|false + */ + protected function getUserAgent() { + if(!isset($_SERVER['HTTP_USER_AGENT'])) return false; + return $_SERVER['HTTP_USER_AGENT']; + } + + /** + * Returns a new exception + * + * @param string $Message + * @return Exception + */ + protected function newException($Message) { + return new Exception($Message); + } + + /** + * Encode an object into a JSON string + * + * Uses PHP's jeson_encode() if available + * + * @param object $Object The object to be encoded + * @return string The JSON string + */ + protected function jsonEncode($Object, $skipObjectEncode=false) + { + if(!$skipObjectEncode) { + $Object = $this->encodeObject($Object); + } + + if(function_exists('json_encode') + && $this->options['useNativeJsonEncode']!=false) { + + return json_encode($Object); + } else { + return $this->json_encode($Object); + } + } + + /** + * Encodes a table by encoding each row and column with encodeObject() + * + * @param array $Table The table to be encoded + * @return array + */ + protected function encodeTable($Table) { + if(!$Table) return $Table; + for( $i=0 ; $i<count($Table) ; $i++ ) { + if(is_array($Table[$i])) { + for( $j=0 ; $j<count($Table[$i]) ; $j++ ) { + $Table[$i][$j] = $this->encodeObject($Table[$i][$j]); + } + } + } + return $Table; + } + + /** + * Encodes an object including members with + * protected and private visibility + * + * @param Object $Object The object to be encoded + * @param int $Depth The current traversal depth + * @return array All members of the object + */ + protected function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1) + { + $return = array(); + + if (is_object($Object)) { + + if ($ObjectDepth > $this->options['maxObjectDepth']) { + return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **'; + } + + foreach ($this->objectStack as $refVal) { + if ($refVal === $Object) { + return '** Recursion ('.get_class($Object).') **'; + } + } + array_push($this->objectStack, $Object); + + $return['__className'] = $class = get_class($Object); + + $reflectionClass = new ReflectionClass($class); + $properties = array(); + foreach( $reflectionClass->getProperties() as $property) { + $properties[$property->getName()] = $property; + } + + $members = (array)$Object; + + foreach( $properties as $raw_name => $property ) { + + $name = $raw_name; + if($property->isStatic()) { + $name = 'static:'.$name; + } + if($property->isPublic()) { + $name = 'public:'.$name; + } else + if($property->isPrivate()) { + $name = 'private:'.$name; + $raw_name = "\0".$class."\0".$raw_name; + } else + if($property->isProtected()) { + $name = 'protected:'.$name; + $raw_name = "\0".'*'."\0".$raw_name; + } + + if(!(isset($this->objectFilters[$class]) + && is_array($this->objectFilters[$class]) + && in_array($raw_name,$this->objectFilters[$class]))) { + + if(array_key_exists($raw_name,$members) + && !$property->isStatic()) { + + $return[$name] = $this->encodeObject($members[$raw_name], $ObjectDepth + 1, 1); + + } else { + if(method_exists($property,'setAccessible')) { + $property->setAccessible(true); + $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1); + } else + if($property->isPublic()) { + $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1); + } else { + $return[$name] = '** Need PHP 5.3 to get value **'; + } + } + } else { + $return[$name] = '** Excluded by Filter **'; + } + } + + // Include all members that are not defined in the class + // but exist in the object + foreach( $members as $raw_name => $value ) { + + $name = $raw_name; + + if ($name{0} == "\0") { + $parts = explode("\0", $name); + $name = $parts[2]; + } + + if(!isset($properties[$name])) { + $name = 'undeclared:'.$name; + + if(!(isset($this->objectFilters[$class]) + && is_array($this->objectFilters[$class]) + && in_array($raw_name,$this->objectFilters[$class]))) { + + $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1); + } else { + $return[$name] = '** Excluded by Filter **'; + } + } + } + + array_pop($this->objectStack); + + } elseif (is_array($Object)) { + + if ($ArrayDepth > $this->options['maxArrayDepth']) { + return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **'; + } + + foreach ($Object as $key => $val) { + + // Encoding the $GLOBALS PHP array causes an infinite loop + // if the recursion is not reset here as it contains + // a reference to itself. This is the only way I have come up + // with to stop infinite recursion in this case. + if($key=='GLOBALS' + && is_array($val) + && array_key_exists('GLOBALS',$val)) { + $val['GLOBALS'] = '** Recursion (GLOBALS) **'; + } + + $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1); + } + } else { + if(self::is_utf8($Object)) { + return $Object; + } else { + return utf8_encode($Object); + } + } + return $return; + } + + /** + * Returns true if $string is valid UTF-8 and false otherwise. + * + * @param mixed $str String to be tested + * @return boolean + */ + protected static function is_utf8($str) { + $c=0; $b=0; + $bits=0; + $len=strlen($str); + for($i=0; $i<$len; $i++){ + $c=ord($str[$i]); + if($c > 128){ + if(($c >= 254)) return false; + elseif($c >= 252) $bits=6; + elseif($c >= 248) $bits=5; + elseif($c >= 240) $bits=4; + elseif($c >= 224) $bits=3; + elseif($c >= 192) $bits=2; + else return false; + if(($i+$bits) > $len) return false; + while($bits > 1){ + $i++; + $b=ord($str[$i]); + if($b < 128 || $b > 191) return false; + $bits--; + } + } + } + return true; + } + + /** + * Converts to and from JSON format. + * + * JSON (JavaScript Object Notation) is a lightweight data-interchange + * format. It is easy for humans to read and write. It is easy for machines + * to parse and generate. It is based on a subset of the JavaScript + * Programming Language, Standard ECMA-262 3rd Edition - December 1999. + * This feature can also be found in Python. JSON is a text format that is + * completely language independent but uses conventions that are familiar + * to programmers of the C-family of languages, including C, C++, C#, Java, + * JavaScript, Perl, TCL, and many others. These properties make JSON an + * ideal data-interchange language. + * + * This package provides a simple encoder and decoder for JSON notation. It + * is intended for use with client-side Javascript applications that make + * use of HTTPRequest to perform server communication functions - data can + * be encoded into JSON notation for use in a client-side javascript, or + * decoded from incoming Javascript requests. JSON format is native to + * Javascript, and can be directly eval()'ed with no further parsing + * overhead + * + * All strings should be in ASCII or UTF-8 format! + * + * LICENSE: Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: Redistributions of source code must retain the + * above copyright notice, this list of conditions and the following + * disclaimer. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * @category + * @package Services_JSON + * @author Michal Migurski <mike-json@teczno.com> + * @author Matt Knapp <mdknapp[at]gmail[dot]com> + * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com> + * @author Christoph Dorn <christoph@christophdorn.com> + * @copyright 2005 Michal Migurski + * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + + + /** + * Keep a list of objects as we descend into the array so we can detect recursion. + */ + private $json_objectStack = array(); + + + /** + * convert a string from one UTF-8 char to one UTF-16 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf8 UTF-8 character + * @return string UTF-16 character + * @access private + */ + private function json_utf82utf16($utf8) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + } + + switch(strlen($utf8)) { + case 1: + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; + + case 2: + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8{0}) >> 2)) + . chr((0xC0 & (ord($utf8{0}) << 6)) + | (0x3F & ord($utf8{1}))); + + case 3: + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8{0}) << 4)) + | (0x0F & (ord($utf8{1}) >> 2))) + . chr((0xC0 & (ord($utf8{1}) << 6)) + | (0x7F & ord($utf8{2}))); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + private function json_encode($var) + { + + if(is_object($var)) { + if(in_array($var,$this->json_objectStack)) { + return '"** Recursion **"'; + } + } + + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return (int) $var; + + case 'double': + case 'float': + return (float) $var; + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = strlen($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var{$c}); + + switch (true) { + case $ord_var_c == 0x08: + $ascii .= '\b'; + break; + case $ord_var_c == 0x09: + $ascii .= '\t'; + break; + case $ord_var_c == 0x0A: + $ascii .= '\n'; + break; + case $ord_var_c == 0x0C: + $ascii .= '\f'; + break; + case $ord_var_c == 0x0D: + $ascii .= '\r'; + break; + + case $ord_var_c == 0x22: + case $ord_var_c == 0x2F: + case $ord_var_c == 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var{$c}; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var{$c}; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, ord($var{$c + 1})); + $c += 1; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2})); + $c += 2; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3})); + $c += 3; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4})); + $c += 4; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4}), + ord($var{$c + 5})); + $c += 5; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + + $this->json_objectStack[] = $var; + + $properties = array_map(array($this, 'json_name_value'), + array_keys($var), + array_values($var)); + + array_pop($this->json_objectStack); + + foreach($properties as $property) { + if($property instanceof Exception) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + } + + $this->json_objectStack[] = $var; + + // treat it like a regular array + $elements = array_map(array($this, 'json_encode'), $var); + + array_pop($this->json_objectStack); + + foreach($elements as $element) { + if($element instanceof Exception) { + return $element; + } + } + + return '[' . join(',', $elements) . ']'; + + case 'object': + $vars = self::encodeObject($var); + + $this->json_objectStack[] = $var; + + $properties = array_map(array($this, 'json_name_value'), + array_keys($vars), + array_values($vars)); + + array_pop($this->json_objectStack); + + foreach($properties as $property) { + if($property instanceof Exception) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + + default: + return null; + } + } + + /** + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + private function json_name_value($name, $value) + { + // Encoding the $GLOBALS PHP array causes an infinite loop + // if the recursion is not reset here as it contains + // a reference to itself. This is the only way I have come up + // with to stop infinite recursion in this case. + if($name=='GLOBALS' + && is_array($value) + && array_key_exists('GLOBALS',$value)) { + $value['GLOBALS'] = '** Recursion **'; + } + + $encoded_value = $this->json_encode($value); + + if($encoded_value instanceof Exception) { + return $encoded_value; + } + + return $this->json_encode(strval($name)) . ':' . $encoded_value; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/HTTP/ConditionalGet.php b/plugins/Minify/extlib/minify/min/lib/HTTP/ConditionalGet.php new file mode 100644 index 000000000..823db058f --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/HTTP/ConditionalGet.php @@ -0,0 +1,348 @@ +<?php +/** + * Class HTTP_ConditionalGet + * @package Minify + * @subpackage HTTP + */ + +/** + * Implement conditional GET via a timestamp or hash of content + * + * E.g. Content from DB with update time: + * <code> + * list($updateTime, $content) = getDbUpdateAndContent(); + * $cg = new HTTP_ConditionalGet(array( + * 'lastModifiedTime' => $updateTime + * ,'isPublic' => true + * )); + * $cg->sendHeaders(); + * if ($cg->cacheIsValid) { + * exit(); + * } + * echo $content; + * </code> + * + * E.g. Shortcut for the above + * <code> + * HTTP_ConditionalGet::check($updateTime, true); // exits if client has cache + * echo $content; + * </code> + * + * E.g. Content from DB with no update time: + * <code> + * $content = getContentFromDB(); + * $cg = new HTTP_ConditionalGet(array( + * 'contentHash' => md5($content) + * )); + * $cg->sendHeaders(); + * if ($cg->cacheIsValid) { + * exit(); + * } + * echo $content; + * </code> + * + * E.g. Static content with some static includes: + * <code> + * // before content + * $cg = new HTTP_ConditionalGet(array( + * 'lastUpdateTime' => max( + * filemtime(__FILE__) + * ,filemtime('/path/to/header.inc') + * ,filemtime('/path/to/footer.inc') + * ) + * )); + * $cg->sendHeaders(); + * if ($cg->cacheIsValid) { + * exit(); + * } + * </code> + * @package Minify + * @subpackage HTTP + * @author Stephen Clay <steve@mrclay.org> + */ +class HTTP_ConditionalGet { + + /** + * Does the client have a valid copy of the requested resource? + * + * You'll want to check this after instantiating the object. If true, do + * not send content, just call sendHeaders() if you haven't already. + * + * @var bool + */ + public $cacheIsValid = null; + + /** + * @param array $spec options + * + * 'isPublic': (bool) if true, the Cache-Control header will contain + * "public", allowing proxies to cache the content. Otherwise "private" will + * be sent, allowing only browser caching. (default false) + * + * 'lastModifiedTime': (int) if given, both ETag AND Last-Modified headers + * will be sent with content. This is recommended. + * + * 'encoding': (string) if set, the header "Vary: Accept-Encoding" will + * always be sent and a truncated version of the encoding will be appended + * to the ETag. E.g. "pub123456;gz". This will also trigger a more lenient + * checking of the client's If-None-Match header, as the encoding portion of + * the ETag will be stripped before comparison. + * + * 'contentHash': (string) if given, only the ETag header can be sent with + * content (only HTTP1.1 clients can conditionally GET). The given string + * should be short with no quote characters and always change when the + * resource changes (recommend md5()). This is not needed/used if + * lastModifiedTime is given. + * + * 'eTag': (string) if given, this will be used as the ETag header rather + * than values based on lastModifiedTime or contentHash. Also the encoding + * string will not be appended to the given value as described above. + * + * 'invalidate': (bool) if true, the client cache will be considered invalid + * without testing. Effectively this disables conditional GET. + * (default false) + * + * 'maxAge': (int) if given, this will set the Cache-Control max-age in + * seconds, and also set the Expires header to the equivalent GMT date. + * After the max-age period has passed, the browser will again send a + * conditional GET to revalidate its cache. + * + * @return null + */ + public function __construct($spec) + { + $scope = (isset($spec['isPublic']) && $spec['isPublic']) + ? 'public' + : 'private'; + $maxAge = 0; + // backwards compatibility (can be removed later) + if (isset($spec['setExpires']) + && is_numeric($spec['setExpires']) + && ! isset($spec['maxAge'])) { + $spec['maxAge'] = $spec['setExpires'] - $_SERVER['REQUEST_TIME']; + } + if (isset($spec['maxAge'])) { + $maxAge = $spec['maxAge']; + $this->_headers['Expires'] = self::gmtDate( + $_SERVER['REQUEST_TIME'] + $spec['maxAge'] + ); + } + $etagAppend = ''; + if (isset($spec['encoding'])) { + $this->_stripEtag = true; + $this->_headers['Vary'] = 'Accept-Encoding'; + if ('' !== $spec['encoding']) { + if (0 === strpos($spec['encoding'], 'x-')) { + $spec['encoding'] = substr($spec['encoding'], 2); + } + $etagAppend = ';' . substr($spec['encoding'], 0, 2); + } + } + if (isset($spec['lastModifiedTime'])) { + $this->_setLastModified($spec['lastModifiedTime']); + if (isset($spec['eTag'])) { // Use it + $this->_setEtag($spec['eTag'], $scope); + } else { // base both headers on time + $this->_setEtag($spec['lastModifiedTime'] . $etagAppend, $scope); + } + } elseif (isset($spec['eTag'])) { // Use it + $this->_setEtag($spec['eTag'], $scope); + } elseif (isset($spec['contentHash'])) { // Use the hash as the ETag + $this->_setEtag($spec['contentHash'] . $etagAppend, $scope); + } + $this->_headers['Cache-Control'] = "max-age={$maxAge}, {$scope}"; + // invalidate cache if disabled, otherwise check + $this->cacheIsValid = (isset($spec['invalidate']) && $spec['invalidate']) + ? false + : $this->_isCacheValid(); + } + + /** + * Get array of output headers to be sent + * + * In the case of 304 responses, this array will only contain the response + * code header: array('_responseCode' => 'HTTP/1.0 304 Not Modified') + * + * Otherwise something like: + * <code> + * array( + * 'Cache-Control' => 'max-age=0, public' + * ,'ETag' => '"foobar"' + * ) + * </code> + * + * @return array + */ + public function getHeaders() + { + return $this->_headers; + } + + /** + * Set the Content-Length header in bytes + * + * With most PHP configs, as long as you don't flush() output, this method + * is not needed and PHP will buffer all output and set Content-Length for + * you. Otherwise you'll want to call this to let the client know up front. + * + * @param int $bytes + * + * @return int copy of input $bytes + */ + public function setContentLength($bytes) + { + return $this->_headers['Content-Length'] = $bytes; + } + + /** + * Send headers + * + * @see getHeaders() + * + * Note this doesn't "clear" the headers. Calling sendHeaders() will + * call header() again (but probably have not effect) and getHeaders() will + * still return the headers. + * + * @return null + */ + public function sendHeaders() + { + $headers = $this->_headers; + if (array_key_exists('_responseCode', $headers)) { + header($headers['_responseCode']); + unset($headers['_responseCode']); + } + foreach ($headers as $name => $val) { + header($name . ': ' . $val); + } + } + + /** + * Exit if the client's cache is valid for this resource + * + * This is a convenience method for common use of the class + * + * @param int $lastModifiedTime if given, both ETag AND Last-Modified headers + * will be sent with content. This is recommended. + * + * @param bool $isPublic (default false) if true, the Cache-Control header + * will contain "public", allowing proxies to cache the content. Otherwise + * "private" will be sent, allowing only browser caching. + * + * @param array $options (default empty) additional options for constructor + * + * @return null + */ + public static function check($lastModifiedTime = null, $isPublic = false, $options = array()) + { + if (null !== $lastModifiedTime) { + $options['lastModifiedTime'] = (int)$lastModifiedTime; + } + $options['isPublic'] = (bool)$isPublic; + $cg = new HTTP_ConditionalGet($options); + $cg->sendHeaders(); + if ($cg->cacheIsValid) { + exit(); + } + } + + + /** + * Get a GMT formatted date for use in HTTP headers + * + * <code> + * header('Expires: ' . HTTP_ConditionalGet::gmtdate($time)); + * </code> + * + * @param int $time unix timestamp + * + * @return string + */ + public static function gmtDate($time) + { + return gmdate('D, d M Y H:i:s \G\M\T', $time); + } + + protected $_headers = array(); + protected $_lmTime = null; + protected $_etag = null; + protected $_stripEtag = false; + + protected function _setEtag($hash, $scope) + { + $this->_etag = '"' . substr($scope, 0, 3) . $hash . '"'; + $this->_headers['ETag'] = $this->_etag; + } + + protected function _setLastModified($time) + { + $this->_lmTime = (int)$time; + $this->_headers['Last-Modified'] = self::gmtDate($time); + } + + /** + * Determine validity of client cache and queue 304 header if valid + */ + protected function _isCacheValid() + { + if (null === $this->_etag) { + // lmTime is copied to ETag, so this condition implies that the + // server sent neither ETag nor Last-Modified, so the client can't + // possibly has a valid cache. + return false; + } + $isValid = ($this->resourceMatchedEtag() || $this->resourceNotModified()); + if ($isValid) { + $this->_headers['_responseCode'] = 'HTTP/1.0 304 Not Modified'; + } + return $isValid; + } + + protected function resourceMatchedEtag() + { + if (!isset($_SERVER['HTTP_IF_NONE_MATCH'])) { + return false; + } + $clientEtagList = get_magic_quotes_gpc() + ? stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) + : $_SERVER['HTTP_IF_NONE_MATCH']; + $clientEtags = explode(',', $clientEtagList); + + $compareTo = $this->normalizeEtag($this->_etag); + foreach ($clientEtags as $clientEtag) { + if ($this->normalizeEtag($clientEtag) === $compareTo) { + // respond with the client's matched ETag, even if it's not what + // we would've sent by default + $this->_headers['ETag'] = trim($clientEtag); + return true; + } + } + return false; + } + + protected function normalizeEtag($etag) { + $etag = trim($etag); + return $this->_stripEtag + ? preg_replace('/;\\w\\w"$/', '"', $etag) + : $etag; + } + + protected function resourceNotModified() + { + if (!isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { + return false; + } + $ifModifiedSince = $_SERVER['HTTP_IF_MODIFIED_SINCE']; + if (false !== ($semicolon = strrpos($ifModifiedSince, ';'))) { + // IE has tacked on extra data to this header, strip it + $ifModifiedSince = substr($ifModifiedSince, 0, $semicolon); + } + if ($ifModifiedSince == self::gmtDate($this->_lmTime)) { + // Apache 2.2's behavior. If there was no ETag match, send the + // non-encoded version of the ETag value. + $this->_headers['ETag'] = $this->normalizeEtag($this->_etag); + return true; + } + return false; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/HTTP/Encoder.php b/plugins/Minify/extlib/minify/min/lib/HTTP/Encoder.php new file mode 100644 index 000000000..66c26789c --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/HTTP/Encoder.php @@ -0,0 +1,326 @@ +<?php +/** + * Class HTTP_Encoder + * @package Minify + * @subpackage HTTP + */ + +/** + * Encode and send gzipped/deflated content + * + * The "Vary: Accept-Encoding" header is sent. If the client allows encoding, + * Content-Encoding and Content-Length are added. + * + * <code> + * // Send a CSS file, compressed if possible + * $he = new HTTP_Encoder(array( + * 'content' => file_get_contents($cssFile) + * ,'type' => 'text/css' + * )); + * $he->encode(); + * $he->sendAll(); + * </code> + * + * <code> + * // Shortcut to encoding output + * header('Content-Type: text/css'); // needed if not HTML + * HTTP_Encoder::output($css); + * </code> + * + * <code> + * // Just sniff for the accepted encoding + * $encoding = HTTP_Encoder::getAcceptedEncoding(); + * </code> + * + * For more control over headers, use getHeaders() and getData() and send your + * own output.
+ *
+ * Note: If you don't need header mgmt, use PHP's native gzencode, gzdeflate,
+ * and gzcompress functions for gzip, deflate, and compress-encoding
+ * respectively.
+ * + * @package Minify + * @subpackage HTTP + * @author Stephen Clay <steve@mrclay.org> + */ +class HTTP_Encoder { + + /** + * Should the encoder allow HTTP encoding to IE6? + * + * If you have many IE6 users and the bandwidth savings is worth troubling + * some of them, set this to true. + * + * By default, encoding is only offered to IE7+. When this is true, + * getAcceptedEncoding() will return an encoding for IE6 if its user agent + * string contains "SV1". This has been documented in many places as "safe", + * but there seem to be remaining, intermittent encoding bugs in patched + * IE6 on the wild web. + * + * @var bool + */ + public static $encodeToIe6 = false; + + + /** + * Default compression level for zlib operations + * + * This level is used if encode() is not given a $compressionLevel + * + * @var int + */ + public static $compressionLevel = 6; + + + /** + * Get an HTTP Encoder object + * + * @param array $spec options + * + * 'content': (string required) content to be encoded + * + * 'type': (string) if set, the Content-Type header will have this value. + * + * 'method: (string) only set this if you are forcing a particular encoding + * method. If not set, the best method will be chosen by getAcceptedEncoding() + * The available methods are 'gzip', 'deflate', 'compress', and '' (no + * encoding) + * + * @return null + */ + public function __construct($spec)
+ { + $this->_content = $spec['content']; + $this->_headers['Content-Length'] = (string)strlen($this->_content); + if (isset($spec['type'])) { + $this->_headers['Content-Type'] = $spec['type']; + } + if (isset($spec['method']) + && in_array($spec['method'], array('gzip', 'deflate', 'compress', ''))) + { + $this->_encodeMethod = array($spec['method'], $spec['method']); + } else { + $this->_encodeMethod = self::getAcceptedEncoding(); + } + } + + /** + * Get content in current form + * + * Call after encode() for encoded content. + * + * return string + */ + public function getContent()
+ { + return $this->_content; + } + + /** + * Get array of output headers to be sent + * + * E.g. + * <code> + * array( + * 'Content-Length' => '615' + * ,'Content-Encoding' => 'x-gzip' + * ,'Vary' => 'Accept-Encoding' + * ) + * </code> + * + * @return array + */ + public function getHeaders()
+ { + return $this->_headers; + } + + /** + * Send output headers + * + * You must call this before headers are sent and it probably cannot be + * used in conjunction with zlib output buffering / mod_gzip. Errors are + * not handled purposefully. + * + * @see getHeaders() + * + * @return null + */ + public function sendHeaders()
+ { + foreach ($this->_headers as $name => $val) { + header($name . ': ' . $val); + } + } + + /** + * Send output headers and content + * + * A shortcut for sendHeaders() and echo getContent() + * + * You must call this before headers are sent and it probably cannot be + * used in conjunction with zlib output buffering / mod_gzip. Errors are + * not handled purposefully. + * + * @return null + */ + public function sendAll()
+ { + $this->sendHeaders(); + echo $this->_content; + } + + /** + * Determine the client's best encoding method from the HTTP Accept-Encoding + * header. + * + * If no Accept-Encoding header is set, or the browser is IE before v6 SP2, + * this will return ('', ''), the "identity" encoding. + * + * A syntax-aware scan is done of the Accept-Encoding, so the method must + * be non 0. The methods are favored in order of gzip, deflate, then + * compress. Deflate is always smallest and generally faster, but is + * rarely sent by servers, so client support could be buggier. + *
+ * @param bool $allowCompress allow the older compress encoding + * + * @param bool $allowDeflate allow the more recent deflate encoding
+ * + * @return array two values, 1st is the actual encoding method, 2nd is the + * alias of that method to use in the Content-Encoding header (some browsers + * call gzip "x-gzip" etc.) + */ + public static function getAcceptedEncoding($allowCompress = true, $allowDeflate = true)
+ { + // @link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html + + if (! isset($_SERVER['HTTP_ACCEPT_ENCODING']) + || self::_isBuggyIe()) + { + return array('', ''); + } + $ae = $_SERVER['HTTP_ACCEPT_ENCODING']; + // gzip checks (quick) + if (0 === strpos($ae, 'gzip,') // most browsers + || 0 === strpos($ae, 'deflate, gzip,') // opera + ) { + return array('gzip', 'gzip'); + } + // gzip checks (slow) + if (preg_match( + '@(?:^|,)\\s*((?:x-)?gzip)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@' + ,$ae + ,$m)) { + return array('gzip', $m[1]); + } + if ($allowDeflate) { + // deflate checks + $aeRev = strrev($ae); + if (0 === strpos($aeRev, 'etalfed ,') // ie, webkit + || 0 === strpos($aeRev, 'etalfed,') // gecko + || 0 === strpos($ae, 'deflate,') // opera + // slow parsing + || preg_match( + '@(?:^|,)\\s*deflate\\s*(?:$|,|;\\s*q=(?:0\\.|1))@', $ae)) { + return array('deflate', 'deflate'); + } + } + if ($allowCompress && preg_match( + '@(?:^|,)\\s*((?:x-)?compress)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@' + ,$ae + ,$m)) { + return array('compress', $m[1]); + } + return array('', ''); + } + + /** + * Encode (compress) the content + * + * If the encode method is '' (none) or compression level is 0, or the 'zlib' + * extension isn't loaded, we return false. + * + * Then the appropriate gz_* function is called to compress the content. If + * this fails, false is returned. + * + * The header "Vary: Accept-Encoding" is added. If encoding is successful, + * the Content-Length header is updated, and Content-Encoding is also added.
+ *
+ * @param int $compressionLevel given to zlib functions. If not given, the + * class default will be used. + * + * @return bool success true if the content was actually compressed + */ + public function encode($compressionLevel = null)
+ { + $this->_headers['Vary'] = 'Accept-Encoding'; + if (null === $compressionLevel) { + $compressionLevel = self::$compressionLevel; + } + if ('' === $this->_encodeMethod[0] + || ($compressionLevel == 0) + || !extension_loaded('zlib')) + { + return false; + }
+ if ($this->_encodeMethod[0] === 'deflate') {
+ $encoded = gzdeflate($this->_content, $compressionLevel);
+ } elseif ($this->_encodeMethod[0] === 'gzip') { + $encoded = gzencode($this->_content, $compressionLevel); + } else { + $encoded = gzcompress($this->_content, $compressionLevel); + } + if (false === $encoded) { + return false; + } + $this->_headers['Content-Length'] = strlen($encoded); + $this->_headers['Content-Encoding'] = $this->_encodeMethod[1]; + $this->_content = $encoded; + return true; + } + + /** + * Encode and send appropriate headers and content + * + * This is a convenience method for common use of the class + * + * @param string $content + *
+ * @param int $compressionLevel given to zlib functions. If not given, the + * class default will be used. + * + * @return bool success true if the content was actually compressed + */ + public static function output($content, $compressionLevel = null) + { + if (null === $compressionLevel) { + $compressionLevel = self::$compressionLevel; + } + $he = new HTTP_Encoder(array('content' => $content));
+ $ret = $he->encode($compressionLevel);
+ $he->sendAll(); + return $ret; + }
+
+ protected $_content = ''; + protected $_headers = array(); + protected $_encodeMethod = array('', ''); + + /** + * Is the browser an IE version earlier than 6 SP2? + */ + protected static function _isBuggyIe() + { + $ua = $_SERVER['HTTP_USER_AGENT']; + // quick escape for non-IEs + if (0 !== strpos($ua, 'Mozilla/4.0 (compatible; MSIE ') + || false !== strpos($ua, 'Opera')) { + return false; + } + // no regex = faaast + $version = (float)substr($ua, 30); + return self::$encodeToIe6 + ? ($version < 6 || ($version == 6 && false === strpos($ua, 'SV1'))) + : ($version < 7); + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/JSMin.php b/plugins/Minify/extlib/minify/min/lib/JSMin.php new file mode 100644 index 000000000..770e1c610 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/JSMin.php @@ -0,0 +1,314 @@ +<?php +/** + * jsmin.php - PHP implementation of Douglas Crockford's JSMin. + * + * This is a direct port of jsmin.c to PHP with a few PHP performance tweaks and + * modifications to preserve some comments (see below). Also, rather than using + * stdin/stdout, JSMin::minify() accepts a string as input and returns another + * string as output. + * + * Comments containing IE conditional compilation are preserved, as are multi-line + * comments that begin with "/*!" (for documentation purposes). In the latter case + * newlines are inserted around the comment to enhance readability. + * + * PHP 5 or higher is required. + * + * Permission is hereby granted to use this version of the library under the + * same terms as jsmin.c, which has the following license: + * + * -- + * Copyright (c) 2002 Douglas Crockford (www.crockford.com) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * The Software shall be used for Good, not Evil. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * -- + * + * @package JSMin + * @author Ryan Grove <ryan@wonko.com> (PHP port) + * @author Steve Clay <steve@mrclay.org> (modifications + cleanup) + * @author Andrea Giammarchi <http://www.3site.eu> (spaceBeforeRegExp) + * @copyright 2002 Douglas Crockford <douglas@crockford.com> (jsmin.c) + * @copyright 2008 Ryan Grove <ryan@wonko.com> (PHP port) + * @license http://opensource.org/licenses/mit-license.php MIT License + * @link http://code.google.com/p/jsmin-php/ + */ + +class JSMin { + const ORD_LF = 10; + const ORD_SPACE = 32; + const ACTION_KEEP_A = 1; + const ACTION_DELETE_A = 2; + const ACTION_DELETE_A_B = 3; + + protected $a = "\n"; + protected $b = ''; + protected $input = ''; + protected $inputIndex = 0; + protected $inputLength = 0; + protected $lookAhead = null; + protected $output = ''; + + /** + * Minify Javascript + * + * @param string $js Javascript to be minified + * @return string + */ + public static function minify($js) + { + $jsmin = new JSMin($js); + return $jsmin->min(); + } + + /** + * Setup process + */ + public function __construct($input) + { + $this->input = str_replace("\r\n", "\n", $input); + $this->inputLength = strlen($this->input); + } + + /** + * Perform minification, return result + */ + public function min() + { + if ($this->output !== '') { // min already run + return $this->output; + } + $this->action(self::ACTION_DELETE_A_B); + + while ($this->a !== null) { + // determine next command + $command = self::ACTION_KEEP_A; // default + if ($this->a === ' ') { + if (! $this->isAlphaNum($this->b)) { + $command = self::ACTION_DELETE_A; + } + } elseif ($this->a === "\n") { + if ($this->b === ' ') { + $command = self::ACTION_DELETE_A_B; + } elseif (false === strpos('{[(+-', $this->b) + && ! $this->isAlphaNum($this->b)) { + $command = self::ACTION_DELETE_A; + } + } elseif (! $this->isAlphaNum($this->a)) { + if ($this->b === ' ' + || ($this->b === "\n" + && (false === strpos('}])+-"\'', $this->a)))) { + $command = self::ACTION_DELETE_A_B; + } + } + $this->action($command); + } + $this->output = trim($this->output); + return $this->output; + } + + /** + * ACTION_KEEP_A = Output A. Copy B to A. Get the next B. + * ACTION_DELETE_A = Copy B to A. Get the next B. + * ACTION_DELETE_A_B = Get the next B. + */ + protected function action($command) + { + switch ($command) { + case self::ACTION_KEEP_A: + $this->output .= $this->a; + // fallthrough + case self::ACTION_DELETE_A: + $this->a = $this->b; + if ($this->a === "'" || $this->a === '"') { // string literal + $str = $this->a; // in case needed for exception + while (true) { + $this->output .= $this->a; + $this->a = $this->get(); + if ($this->a === $this->b) { // end quote + break; + } + if (ord($this->a) <= self::ORD_LF) { + throw new JSMin_UnterminatedStringException( + 'Unterminated String: ' . var_export($str, true)); + } + $str .= $this->a; + if ($this->a === '\\') { + $this->output .= $this->a; + $this->a = $this->get(); + $str .= $this->a; + } + } + } + // fallthrough + case self::ACTION_DELETE_A_B: + $this->b = $this->next(); + if ($this->b === '/' && $this->isRegexpLiteral()) { // RegExp literal + $this->output .= $this->a . $this->b; + $pattern = '/'; // in case needed for exception + while (true) { + $this->a = $this->get(); + $pattern .= $this->a; + if ($this->a === '/') { // end pattern + break; // while (true) + } elseif ($this->a === '\\') { + $this->output .= $this->a; + $this->a = $this->get(); + $pattern .= $this->a; + } elseif (ord($this->a) <= self::ORD_LF) { + throw new JSMin_UnterminatedRegExpException( + 'Unterminated RegExp: '. var_export($pattern, true)); + } + $this->output .= $this->a; + } + $this->b = $this->next(); + } + // end case ACTION_DELETE_A_B + } + } + + protected function isRegexpLiteral() + { + if (false !== strpos("\n{;(,=:[!&|?", $this->a)) { // we aren't dividing + return true; + } + if (' ' === $this->a) { + $length = strlen($this->output); + if ($length < 2) { // weird edge case + return true; + } + // you can't divide a keyword + if (preg_match('/(?:case|else|in|return|typeof)$/', $this->output, $m)) { + if ($this->output === $m[0]) { // odd but could happen + return true; + } + // make sure it's a keyword, not end of an identifier + $charBeforeKeyword = substr($this->output, $length - strlen($m[0]) - 1, 1); + if (! $this->isAlphaNum($charBeforeKeyword)) { + return true; + } + } + } + return false; + } + + /** + * Get next char. Convert ctrl char to space. + */ + protected function get() + { + $c = $this->lookAhead; + $this->lookAhead = null; + if ($c === null) { + if ($this->inputIndex < $this->inputLength) { + $c = $this->input[$this->inputIndex]; + $this->inputIndex += 1; + } else { + return null; + } + } + if ($c === "\r" || $c === "\n") { + return "\n"; + } + if (ord($c) < self::ORD_SPACE) { // control char + return ' '; + } + return $c; + } + + /** + * Get next char. If is ctrl character, translate to a space or newline. + */ + protected function peek() + { + $this->lookAhead = $this->get(); + return $this->lookAhead; + } + + /** + * Is $c a letter, digit, underscore, dollar sign, escape, or non-ASCII? + */ + protected function isAlphaNum($c) + { + return (preg_match('/^[0-9a-zA-Z_\\$\\\\]$/', $c) || ord($c) > 126); + } + + protected function singleLineComment() + { + $comment = ''; + while (true) { + $get = $this->get(); + $comment .= $get; + if (ord($get) <= self::ORD_LF) { // EOL reached + // if IE conditional comment + if (preg_match('/^\\/@(?:cc_on|if|elif|else|end)\\b/', $comment)) { + return "/{$comment}"; + } + return $get; + } + } + } + + protected function multipleLineComment() + { + $this->get(); + $comment = ''; + while (true) { + $get = $this->get(); + if ($get === '*') { + if ($this->peek() === '/') { // end of comment reached + $this->get(); + // if comment preserved by YUI Compressor + if (0 === strpos($comment, '!')) { + return "\n/*" . substr($comment, 1) . "*/\n"; + } + // if IE conditional comment + if (preg_match('/^@(?:cc_on|if|elif|else|end)\\b/', $comment)) { + return "/*{$comment}*/"; + } + return ' '; + } + } elseif ($get === null) { + throw new JSMin_UnterminatedCommentException('Unterminated Comment: ' . var_export('/*' . $comment, true)); + } + $comment .= $get; + } + } + + /** + * Get the next character, skipping over comments. + * Some comments may be preserved. + */ + protected function next() + { + $get = $this->get(); + if ($get !== '/') { + return $get; + } + switch ($this->peek()) { + case '/': return $this->singleLineComment(); + case '*': return $this->multipleLineComment(); + default: return $get; + } + } +} + +class JSMin_UnterminatedStringException extends Exception {} +class JSMin_UnterminatedCommentException extends Exception {} +class JSMin_UnterminatedRegExpException extends Exception {} diff --git a/plugins/Minify/extlib/minify/min/lib/JSMinPlus.php b/plugins/Minify/extlib/minify/min/lib/JSMinPlus.php new file mode 100644 index 000000000..31a1a5cb4 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/JSMinPlus.php @@ -0,0 +1,1872 @@ +<?php + +/** + * JSMinPlus version 1.1 + * + * Minifies a javascript file using a javascript parser + * + * This implements a PHP port of Brendan Eich's Narcissus open source javascript engine (in javascript) + * References: http://en.wikipedia.org/wiki/Narcissus_(JavaScript_engine) + * Narcissus sourcecode: http://mxr.mozilla.org/mozilla/source/js/narcissus/ + * JSMinPlus weblog: http://crisp.tweakblogs.net/blog/cat/716 + * + * Tino Zijdel <crisp@tweakers.net> + * + * Usage: $minified = JSMinPlus::minify($script [, $filename]) + * + * Versionlog (see also changelog.txt): + * 12-04-2009 - some small bugfixes and performance improvements + * 09-04-2009 - initial open sourced version 1.0 + * + * Latest version of this script: http://files.tweakers.net/jsminplus/jsminplus.zip + * + */ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Narcissus JavaScript engine. + * + * The Initial Developer of the Original Code is + * Brendan Eich <brendan@mozilla.org>. + * Portions created by the Initial Developer are Copyright (C) 2004 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): Tino Zijdel <crisp@tweakers.net> + * PHP port, modifications and minifier routine are (C) 2009 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +define('TOKEN_END', 1); +define('TOKEN_NUMBER', 2); +define('TOKEN_IDENTIFIER', 3); +define('TOKEN_STRING', 4); +define('TOKEN_REGEXP', 5); +define('TOKEN_NEWLINE', 6); +define('TOKEN_CONDCOMMENT_MULTILINE', 7); + +define('JS_SCRIPT', 100); +define('JS_BLOCK', 101); +define('JS_LABEL', 102); +define('JS_FOR_IN', 103); +define('JS_CALL', 104); +define('JS_NEW_WITH_ARGS', 105); +define('JS_INDEX', 106); +define('JS_ARRAY_INIT', 107); +define('JS_OBJECT_INIT', 108); +define('JS_PROPERTY_INIT', 109); +define('JS_GETTER', 110); +define('JS_SETTER', 111); +define('JS_GROUP', 112); +define('JS_LIST', 113); + +define('DECLARED_FORM', 0); +define('EXPRESSED_FORM', 1); +define('STATEMENT_FORM', 2); + +class JSMinPlus +{ + private $parser; + private $reserved = array( + 'break', 'case', 'catch', 'continue', 'default', 'delete', 'do', + 'else', 'finally', 'for', 'function', 'if', 'in', 'instanceof', + 'new', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'var', + 'void', 'while', 'with', + // Words reserved for future use + 'abstract', 'boolean', 'byte', 'char', 'class', 'const', 'debugger', + 'double', 'enum', 'export', 'extends', 'final', 'float', 'goto', + 'implements', 'import', 'int', 'interface', 'long', 'native', + 'package', 'private', 'protected', 'public', 'short', 'static', + 'super', 'synchronized', 'throws', 'transient', 'volatile', + // These are not reserved, but should be taken into account + // in isValidIdentifier (See jslint source code) + 'arguments', 'eval', 'true', 'false', 'Infinity', 'NaN', 'null', 'undefined' + ); + + private function __construct() + { + $this->parser = new JSParser(); + } + + public static function minify($js, $filename='') + { + static $instance; + + // this is a singleton + if(!$instance) + $instance = new JSMinPlus(); + + return $instance->min($js, $filename); + } + + private function min($js, $filename) + { + try + { + $n = $this->parser->parse($js, $filename, 1); + return $this->parseTree($n); + } + catch(Exception $e) + { + echo $e->getMessage() . "\n"; + } + + return false; + } + + private function parseTree($n, $noBlockGrouping = false) + { + $s = ''; + + switch ($n->type) + { + case KEYWORD_FUNCTION: + $s .= 'function' . ($n->name ? ' ' . $n->name : '') . '('; + $params = $n->params; + for ($i = 0, $j = count($params); $i < $j; $i++) + $s .= ($i ? ',' : '') . $params[$i]; + $s .= '){' . $this->parseTree($n->body, true) . '}'; + break; + + case JS_SCRIPT: + // we do nothing with funDecls or varDecls + $noBlockGrouping = true; + // fall through + case JS_BLOCK: + $childs = $n->treeNodes; + for ($c = 0, $i = 0, $j = count($childs); $i < $j; $i++) + { + $t = $this->parseTree($childs[$i]); + if (strlen($t)) + { + if ($c) + { + if ($childs[$i]->type == KEYWORD_FUNCTION && $childs[$i]->functionForm == DECLARED_FORM) + $s .= "\n"; // put declared functions on a new line + else + $s .= ';'; + } + + $s .= $t; + + $c++; + } + } + + if ($c > 1 && !$noBlockGrouping) + { + $s = '{' . $s . '}'; + } + break; + + case KEYWORD_IF: + $s = 'if(' . $this->parseTree($n->condition) . ')'; + $thenPart = $this->parseTree($n->thenPart); + $elsePart = $n->elsePart ? $this->parseTree($n->elsePart) : null; + + // quite a rancid hack to see if we should enclose the thenpart in brackets + if ($thenPart[0] != '{') + { + if (strpos($thenPart, 'if(') !== false) + $thenPart = '{' . $thenPart . '}'; + elseif ($elsePart) + $thenPart .= ';'; + } + + $s .= $thenPart; + + if ($elsePart) + { + $s .= 'else'; + + if ($elsePart[0] != '{') + $s .= ' '; + + $s .= $elsePart; + } + break; + + case KEYWORD_SWITCH: + $s = 'switch(' . $this->parseTree($n->discriminant) . '){'; + $cases = $n->cases; + for ($i = 0, $j = count($cases); $i < $j; $i++) + { + $case = $cases[$i]; + if ($case->type == KEYWORD_CASE) + $s .= 'case' . ($case->caseLabel->type != TOKEN_STRING ? ' ' : '') . $this->parseTree($case->caseLabel) . ':'; + else + $s .= 'default:'; + + $statement = $this->parseTree($case->statements); + if ($statement) + $s .= $statement . ';'; + } + $s = rtrim($s, ';') . '}'; + break; + + case KEYWORD_FOR: + $s = 'for(' . ($n->setup ? $this->parseTree($n->setup) : '') + . ';' . ($n->condition ? $this->parseTree($n->condition) : '') + . ';' . ($n->update ? $this->parseTree($n->update) : '') . ')' + . $this->parseTree($n->body); + break; + + case KEYWORD_WHILE: + $s = 'while(' . $this->parseTree($n->condition) . ')' . $this->parseTree($n->body); + break; + + case JS_FOR_IN: + $s = 'for(' . ($n->varDecl ? $this->parseTree($n->varDecl) : $this->parseTree($n->iterator)) . ' in ' . $this->parseTree($n->object) . ')' . $this->parseTree($n->body); + break; + + case KEYWORD_DO: + $s = 'do{' . $this->parseTree($n->body, true) . '}while(' . $this->parseTree($n->condition) . ')'; + break; + + case KEYWORD_BREAK: + case KEYWORD_CONTINUE: + $s = $n->value . ($n->label ? ' ' . $n->label : ''); + break; + + case KEYWORD_TRY: + $s = 'try{' . $this->parseTree($n->tryBlock, true) . '}'; + $catchClauses = $n->catchClauses; + for ($i = 0, $j = count($catchClauses); $i < $j; $i++) + { + $t = $catchClauses[$i]; + $s .= 'catch(' . $t->varName . ($t->guard ? ' if ' . $this->parseTree($t->guard) : '') . '){' . $this->parseTree($t->block, true) . '}'; + } + if ($n->finallyBlock) + $s .= 'finally{' . $this->parseTree($n->finallyBlock, true) . '}'; + break; + + case KEYWORD_THROW: + $s = 'throw ' . $this->parseTree($n->exception); + break; + + case KEYWORD_RETURN: + $s = 'return' . ($n->value ? ' ' . $this->parseTree($n->value) : ''); + break; + + case KEYWORD_WITH: + $s = 'with(' . $this->parseTree($n->object) . ')' . $this->parseTree($n->body); + break; + + case KEYWORD_VAR: + case KEYWORD_CONST: + $s = $n->value . ' '; + $childs = $n->treeNodes; + for ($i = 0, $j = count($childs); $i < $j; $i++) + { + $t = $childs[$i]; + $s .= ($i ? ',' : '') . $t->name; + $u = $t->initializer; + if ($u) + $s .= '=' . $this->parseTree($u); + } + break; + + case KEYWORD_DEBUGGER: + throw new Exception('NOT IMPLEMENTED: DEBUGGER'); + break; + + case TOKEN_CONDCOMMENT_MULTILINE: + $s = $n->value . ' '; + $childs = $n->treeNodes; + for ($i = 0, $j = count($childs); $i < $j; $i++) + $s .= $this->parseTree($childs[$i]); + break; + + case OP_SEMICOLON: + if ($expression = $n->expression) + $s = $this->parseTree($expression); + break; + + case JS_LABEL: + $s = $n->label . ':' . $this->parseTree($n->statement); + break; + + case OP_COMMA: + $childs = $n->treeNodes; + for ($i = 0, $j = count($childs); $i < $j; $i++) + $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]); + break; + + case OP_ASSIGN: + $s = $this->parseTree($n->treeNodes[0]) . $n->value . $this->parseTree($n->treeNodes[1]); + break; + + case OP_HOOK: + $s = $this->parseTree($n->treeNodes[0]) . '?' . $this->parseTree($n->treeNodes[1]) . ':' . $this->parseTree($n->treeNodes[2]); + break; + + case OP_OR: case OP_AND: + case OP_BITWISE_OR: case OP_BITWISE_XOR: case OP_BITWISE_AND: + case OP_EQ: case OP_NE: case OP_STRICT_EQ: case OP_STRICT_NE: + case OP_LT: case OP_LE: case OP_GE: case OP_GT: + case OP_LSH: case OP_RSH: case OP_URSH: + case OP_MUL: case OP_DIV: case OP_MOD: + $s = $this->parseTree($n->treeNodes[0]) . $n->type . $this->parseTree($n->treeNodes[1]); + break; + + case OP_PLUS: + case OP_MINUS: + $s = $this->parseTree($n->treeNodes[0]) . $n->type; + $nextTokenType = $n->treeNodes[1]->type; + if ( $nextTokenType == OP_PLUS || $nextTokenType == OP_MINUS || + $nextTokenType == OP_INCREMENT || $nextTokenType == OP_DECREMENT || + $nextTokenType == OP_UNARY_PLUS || $nextTokenType == OP_UNARY_MINUS + ) + $s .= ' '; + $s .= $this->parseTree($n->treeNodes[1]); + break; + + case KEYWORD_IN: + $s = $this->parseTree($n->treeNodes[0]) . ' in ' . $this->parseTree($n->treeNodes[1]); + break; + + case KEYWORD_INSTANCEOF: + $s = $this->parseTree($n->treeNodes[0]) . ' instanceof ' . $this->parseTree($n->treeNodes[1]); + break; + + case KEYWORD_DELETE: + $s = 'delete ' . $this->parseTree($n->treeNodes[0]); + break; + + case KEYWORD_VOID: + $s = 'void(' . $this->parseTree($n->treeNodes[0]) . ')'; + break; + + case KEYWORD_TYPEOF: + $s = 'typeof ' . $this->parseTree($n->treeNodes[0]); + break; + + case OP_NOT: + case OP_BITWISE_NOT: + case OP_UNARY_PLUS: + case OP_UNARY_MINUS: + $s = $n->value . $this->parseTree($n->treeNodes[0]); + break; + + case OP_INCREMENT: + case OP_DECREMENT: + if ($n->postfix) + $s = $this->parseTree($n->treeNodes[0]) . $n->value; + else + $s = $n->value . $this->parseTree($n->treeNodes[0]); + break; + + case OP_DOT: + $s = $this->parseTree($n->treeNodes[0]) . '.' . $this->parseTree($n->treeNodes[1]); + break; + + case JS_INDEX: + $s = $this->parseTree($n->treeNodes[0]); + // See if we can replace named index with a dot saving 3 bytes + if ( $n->treeNodes[0]->type == TOKEN_IDENTIFIER && + $n->treeNodes[1]->type == TOKEN_STRING && + $this->isValidIdentifier(substr($n->treeNodes[1]->value, 1, -1)) + ) + $s .= '.' . substr($n->treeNodes[1]->value, 1, -1); + else + $s .= '[' . $this->parseTree($n->treeNodes[1]) . ']'; + break; + + case JS_LIST: + $childs = $n->treeNodes; + for ($i = 0, $j = count($childs); $i < $j; $i++) + $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]); + break; + + case JS_CALL: + $s = $this->parseTree($n->treeNodes[0]) . '(' . $this->parseTree($n->treeNodes[1]) . ')'; + break; + + case KEYWORD_NEW: + case JS_NEW_WITH_ARGS: + $s = 'new ' . $this->parseTree($n->treeNodes[0]) . '(' . ($n->type == JS_NEW_WITH_ARGS ? $this->parseTree($n->treeNodes[1]) : '') . ')'; + break; + + case JS_ARRAY_INIT: + $s = '['; + $childs = $n->treeNodes; + for ($i = 0, $j = count($childs); $i < $j; $i++) + { + $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]); + } + $s .= ']'; + break; + + case JS_OBJECT_INIT: + $s = '{'; + $childs = $n->treeNodes; + for ($i = 0, $j = count($childs); $i < $j; $i++) + { + $t = $childs[$i]; + if ($i) + $s .= ','; + if ($t->type == JS_PROPERTY_INIT) + { + // Ditch the quotes when the index is a valid identifier + if ( $t->treeNodes[0]->type == TOKEN_STRING && + $this->isValidIdentifier(substr($t->treeNodes[0]->value, 1, -1)) + ) + $s .= substr($t->treeNodes[0]->value, 1, -1); + else + $s .= $t->treeNodes[0]->value; + + $s .= ':' . $this->parseTree($t->treeNodes[1]); + } + else + { + $s .= $t->type == JS_GETTER ? 'get' : 'set'; + $s .= ' ' . $t->name . '('; + $params = $t->params; + for ($i = 0, $j = count($params); $i < $j; $i++) + $s .= ($i ? ',' : '') . $params[$i]; + $s .= '){' . $this->parseTree($t->body, true) . '}'; + } + } + $s .= '}'; + break; + + case KEYWORD_NULL: case KEYWORD_THIS: case KEYWORD_TRUE: case KEYWORD_FALSE: + case TOKEN_IDENTIFIER: case TOKEN_NUMBER: case TOKEN_STRING: case TOKEN_REGEXP: + $s = $n->value; + break; + + case JS_GROUP: + $s = '(' . $this->parseTree($n->treeNodes[0]) . ')'; + break; + + default: + throw new Exception('UNKNOWN TOKEN TYPE: ' . $n->type); + } + + return $s; + } + + private function isValidIdentifier($string) + { + return preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $string) && !in_array($string, $this->reserved); + } +} + +class JSParser +{ + private $t; + + private $opPrecedence = array( + ';' => 0, + ',' => 1, + '=' => 2, '?' => 2, ':' => 2, + // The above all have to have the same precedence, see bug 330975. + '||' => 4, + '&&' => 5, + '|' => 6, + '^' => 7, + '&' => 8, + '==' => 9, '!=' => 9, '===' => 9, '!==' => 9, + '<' => 10, '<=' => 10, '>=' => 10, '>' => 10, 'in' => 10, 'instanceof' => 10, + '<<' => 11, '>>' => 11, '>>>' => 11, + '+' => 12, '-' => 12, + '*' => 13, '/' => 13, '%' => 13, + 'delete' => 14, 'void' => 14, 'typeof' => 14, + '!' => 14, '~' => 14, 'U+' => 14, 'U-' => 14, + '++' => 15, '--' => 15, + 'new' => 16, + '.' => 17, + JS_NEW_WITH_ARGS => 0, JS_INDEX => 0, JS_CALL => 0, + JS_ARRAY_INIT => 0, JS_OBJECT_INIT => 0, JS_GROUP => 0 + ); + + private $opArity = array( + ',' => -2, + '=' => 2, + '?' => 3, + '||' => 2, + '&&' => 2, + '|' => 2, + '^' => 2, + '&' => 2, + '==' => 2, '!=' => 2, '===' => 2, '!==' => 2, + '<' => 2, '<=' => 2, '>=' => 2, '>' => 2, 'in' => 2, 'instanceof' => 2, + '<<' => 2, '>>' => 2, '>>>' => 2, + '+' => 2, '-' => 2, + '*' => 2, '/' => 2, '%' => 2, + 'delete' => 1, 'void' => 1, 'typeof' => 1, + '!' => 1, '~' => 1, 'U+' => 1, 'U-' => 1, + '++' => 1, '--' => 1, + 'new' => 1, + '.' => 2, + JS_NEW_WITH_ARGS => 2, JS_INDEX => 2, JS_CALL => 2, + JS_ARRAY_INIT => 1, JS_OBJECT_INIT => 1, JS_GROUP => 1, + TOKEN_CONDCOMMENT_MULTILINE => 1 + ); + + public function __construct() + { + $this->t = new JSTokenizer(); + } + + public function parse($s, $f, $l) + { + // initialize tokenizer + $this->t->init($s, $f, $l); + + $x = new JSCompilerContext(false); + $n = $this->Script($x); + if (!$this->t->isDone()) + throw $this->t->newSyntaxError('Syntax error'); + + return $n; + } + + private function Script($x) + { + $n = $this->Statements($x); + $n->type = JS_SCRIPT; + $n->funDecls = $x->funDecls; + $n->varDecls = $x->varDecls; + + return $n; + } + + private function Statements($x) + { + $n = new JSNode($this->t, JS_BLOCK); + array_push($x->stmtStack, $n); + + while (!$this->t->isDone() && $this->t->peek() != OP_RIGHT_CURLY) + $n->addNode($this->Statement($x)); + + array_pop($x->stmtStack); + + return $n; + } + + private function Block($x) + { + $this->t->mustMatch(OP_LEFT_CURLY); + $n = $this->Statements($x); + $this->t->mustMatch(OP_RIGHT_CURLY); + + return $n; + } + + private function Statement($x) + { + $tt = $this->t->get(); + $n2 = null; + + // Cases for statements ending in a right curly return early, avoiding the + // common semicolon insertion magic after this switch. + switch ($tt) + { + case KEYWORD_FUNCTION: + return $this->FunctionDefinition( + $x, + true, + count($x->stmtStack) > 1 ? STATEMENT_FORM : DECLARED_FORM + ); + break; + + case OP_LEFT_CURLY: + $n = $this->Statements($x); + $this->t->mustMatch(OP_RIGHT_CURLY); + return $n; + + case KEYWORD_IF: + $n = new JSNode($this->t); + $n->condition = $this->ParenExpression($x); + array_push($x->stmtStack, $n); + $n->thenPart = $this->Statement($x); + $n->elsePart = $this->t->match(KEYWORD_ELSE) ? $this->Statement($x) : null; + array_pop($x->stmtStack); + return $n; + + case KEYWORD_SWITCH: + $n = new JSNode($this->t); + $this->t->mustMatch(OP_LEFT_PAREN); + $n->discriminant = $this->Expression($x); + $this->t->mustMatch(OP_RIGHT_PAREN); + $n->cases = array(); + $n->defaultIndex = -1; + + array_push($x->stmtStack, $n); + + $this->t->mustMatch(OP_LEFT_CURLY); + + while (($tt = $this->t->get()) != OP_RIGHT_CURLY) + { + switch ($tt) + { + case KEYWORD_DEFAULT: + if ($n->defaultIndex >= 0) + throw $this->t->newSyntaxError('More than one switch default'); + // FALL THROUGH + case KEYWORD_CASE: + $n2 = new JSNode($this->t); + if ($tt == KEYWORD_DEFAULT) + $n->defaultIndex = count($n->cases); + else + $n2->caseLabel = $this->Expression($x, OP_COLON); + break; + default: + throw $this->t->newSyntaxError('Invalid switch case'); + } + + $this->t->mustMatch(OP_COLON); + $n2->statements = new JSNode($this->t, JS_BLOCK); + while (($tt = $this->t->peek()) != KEYWORD_CASE && $tt != KEYWORD_DEFAULT && $tt != OP_RIGHT_CURLY) + $n2->statements->addNode($this->Statement($x)); + + array_push($n->cases, $n2); + } + + array_pop($x->stmtStack); + return $n; + + case KEYWORD_FOR: + $n = new JSNode($this->t); + $n->isLoop = true; + $this->t->mustMatch(OP_LEFT_PAREN); + + if (($tt = $this->t->peek()) != OP_SEMICOLON) + { + $x->inForLoopInit = true; + if ($tt == KEYWORD_VAR || $tt == KEYWORD_CONST) + { + $this->t->get(); + $n2 = $this->Variables($x); + } + else + { + $n2 = $this->Expression($x); + } + $x->inForLoopInit = false; + } + + if ($n2 && $this->t->match(KEYWORD_IN)) + { + $n->type = JS_FOR_IN; + if ($n2->type == KEYWORD_VAR) + { + if (count($n2->treeNodes) != 1) + { + throw $this->t->SyntaxError( + 'Invalid for..in left-hand side', + $this->t->filename, + $n2->lineno + ); + } + + // NB: n2[0].type == IDENTIFIER and n2[0].value == n2[0].name. + $n->iterator = $n2->treeNodes[0]; + $n->varDecl = $n2; + } + else + { + $n->iterator = $n2; + $n->varDecl = null; + } + + $n->object = $this->Expression($x); + } + else + { + $n->setup = $n2 ? $n2 : null; + $this->t->mustMatch(OP_SEMICOLON); + $n->condition = $this->t->peek() == OP_SEMICOLON ? null : $this->Expression($x); + $this->t->mustMatch(OP_SEMICOLON); + $n->update = $this->t->peek() == OP_RIGHT_PAREN ? null : $this->Expression($x); + } + + $this->t->mustMatch(OP_RIGHT_PAREN); + $n->body = $this->nest($x, $n); + return $n; + + case KEYWORD_WHILE: + $n = new JSNode($this->t); + $n->isLoop = true; + $n->condition = $this->ParenExpression($x); + $n->body = $this->nest($x, $n); + return $n; + + case KEYWORD_DO: + $n = new JSNode($this->t); + $n->isLoop = true; + $n->body = $this->nest($x, $n, KEYWORD_WHILE); + $n->condition = $this->ParenExpression($x); + if (!$x->ecmaStrictMode) + { + // <script language="JavaScript"> (without version hints) may need + // automatic semicolon insertion without a newline after do-while. + // See http://bugzilla.mozilla.org/show_bug.cgi?id=238945. + $this->t->match(OP_SEMICOLON); + return $n; + } + break; + + case KEYWORD_BREAK: + case KEYWORD_CONTINUE: + $n = new JSNode($this->t); + + if ($this->t->peekOnSameLine() == TOKEN_IDENTIFIER) + { + $this->t->get(); + $n->label = $this->t->currentToken()->value; + } + + $ss = $x->stmtStack; + $i = count($ss); + $label = $n->label; + if ($label) + { + do + { + if (--$i < 0) + throw $this->t->newSyntaxError('Label not found'); + } + while ($ss[$i]->label != $label); + } + else + { + do + { + if (--$i < 0) + throw $this->t->newSyntaxError('Invalid ' . $tt); + } + while (!$ss[$i]->isLoop && ($tt != KEYWORD_BREAK || $ss[$i]->type != KEYWORD_SWITCH)); + } + + $n->target = $ss[$i]; + break; + + case KEYWORD_TRY: + $n = new JSNode($this->t); + $n->tryBlock = $this->Block($x); + $n->catchClauses = array(); + + while ($this->t->match(KEYWORD_CATCH)) + { + $n2 = new JSNode($this->t); + $this->t->mustMatch(OP_LEFT_PAREN); + $n2->varName = $this->t->mustMatch(TOKEN_IDENTIFIER)->value; + + if ($this->t->match(KEYWORD_IF)) + { + if ($x->ecmaStrictMode) + throw $this->t->newSyntaxError('Illegal catch guard'); + + if (count($n->catchClauses) && !end($n->catchClauses)->guard) + throw $this->t->newSyntaxError('Guarded catch after unguarded'); + + $n2->guard = $this->Expression($x); + } + else + { + $n2->guard = null; + } + + $this->t->mustMatch(OP_RIGHT_PAREN); + $n2->block = $this->Block($x); + array_push($n->catchClauses, $n2); + } + + if ($this->t->match(KEYWORD_FINALLY)) + $n->finallyBlock = $this->Block($x); + + if (!count($n->catchClauses) && !$n->finallyBlock) + throw $this->t->newSyntaxError('Invalid try statement'); + return $n; + + case KEYWORD_CATCH: + case KEYWORD_FINALLY: + throw $this->t->newSyntaxError($tt + ' without preceding try'); + + case KEYWORD_THROW: + $n = new JSNode($this->t); + $n->exception = $this->Expression($x); + break; + + case KEYWORD_RETURN: + if (!$x->inFunction) + throw $this->t->newSyntaxError('Invalid return'); + + $n = new JSNode($this->t); + $tt = $this->t->peekOnSameLine(); + if ($tt != TOKEN_END && $tt != TOKEN_NEWLINE && $tt != OP_SEMICOLON && $tt != OP_RIGHT_CURLY) + $n->value = $this->Expression($x); + else + $n->value = null; + break; + + case KEYWORD_WITH: + $n = new JSNode($this->t); + $n->object = $this->ParenExpression($x); + $n->body = $this->nest($x, $n); + return $n; + + case KEYWORD_VAR: + case KEYWORD_CONST: + $n = $this->Variables($x); + break; + + case TOKEN_CONDCOMMENT_MULTILINE: + $n = new JSNode($this->t); + return $n; + + case KEYWORD_DEBUGGER: + $n = new JSNode($this->t); + break; + + case TOKEN_NEWLINE: + case OP_SEMICOLON: + $n = new JSNode($this->t, OP_SEMICOLON); + $n->expression = null; + return $n; + + default: + if ($tt == TOKEN_IDENTIFIER) + { + $this->t->scanOperand = false; + $tt = $this->t->peek(); + $this->t->scanOperand = true; + if ($tt == OP_COLON) + { + $label = $this->t->currentToken()->value; + $ss = $x->stmtStack; + for ($i = count($ss) - 1; $i >= 0; --$i) + { + if ($ss[$i]->label == $label) + throw $this->t->newSyntaxError('Duplicate label'); + } + + $this->t->get(); + $n = new JSNode($this->t, JS_LABEL); + $n->label = $label; + $n->statement = $this->nest($x, $n); + + return $n; + } + } + + $n = new JSNode($this->t, OP_SEMICOLON); + $this->t->unget(); + $n->expression = $this->Expression($x); + $n->end = $n->expression->end; + break; + } + + if ($this->t->lineno == $this->t->currentToken()->lineno) + { + $tt = $this->t->peekOnSameLine(); + if ($tt != TOKEN_END && $tt != TOKEN_NEWLINE && $tt != OP_SEMICOLON && $tt != OP_RIGHT_CURLY) + throw $this->t->newSyntaxError('Missing ; before statement'); + } + + $this->t->match(OP_SEMICOLON); + + return $n; + } + + private function FunctionDefinition($x, $requireName, $functionForm) + { + $f = new JSNode($this->t); + + if ($f->type != KEYWORD_FUNCTION) + $f->type = ($f->value == 'get') ? JS_GETTER : JS_SETTER; + + if ($this->t->match(TOKEN_IDENTIFIER)) + $f->name = $this->t->currentToken()->value; + elseif ($requireName) + throw $this->t->newSyntaxError('Missing function identifier'); + + $this->t->mustMatch(OP_LEFT_PAREN); + $f->params = array(); + + while (($tt = $this->t->get()) != OP_RIGHT_PAREN) + { + if ($tt != TOKEN_IDENTIFIER) + throw $this->t->newSyntaxError('Missing formal parameter'); + + array_push($f->params, $this->t->currentToken()->value); + + if ($this->t->peek() != OP_RIGHT_PAREN) + $this->t->mustMatch(OP_COMMA); + } + + $this->t->mustMatch(OP_LEFT_CURLY); + + $x2 = new JSCompilerContext(true); + $f->body = $this->Script($x2); + + $this->t->mustMatch(OP_RIGHT_CURLY); + $f->end = $this->t->currentToken()->end; + + $f->functionForm = $functionForm; + if ($functionForm == DECLARED_FORM) + array_push($x->funDecls, $f); + + return $f; + } + + private function Variables($x) + { + $n = new JSNode($this->t); + + do + { + $this->t->mustMatch(TOKEN_IDENTIFIER); + + $n2 = new JSNode($this->t); + $n2->name = $n2->value; + + if ($this->t->match(OP_ASSIGN)) + { + if ($this->t->currentToken()->assignOp) + throw $this->t->newSyntaxError('Invalid variable initialization'); + + $n2->initializer = $this->Expression($x, OP_COMMA); + } + + $n2->readOnly = $n->type == KEYWORD_CONST; + + $n->addNode($n2); + array_push($x->varDecls, $n2); + } + while ($this->t->match(OP_COMMA)); + + return $n; + } + + private function Expression($x, $stop=false) + { + $operators = array(); + $operands = array(); + $n = false; + + $bl = $x->bracketLevel; + $cl = $x->curlyLevel; + $pl = $x->parenLevel; + $hl = $x->hookLevel; + + while (($tt = $this->t->get()) != TOKEN_END) + { + if ($tt == $stop && + $x->bracketLevel == $bl && + $x->curlyLevel == $cl && + $x->parenLevel == $pl && + $x->hookLevel == $hl + ) + { + // Stop only if tt matches the optional stop parameter, and that + // token is not quoted by some kind of bracket. + break; + } + + switch ($tt) + { + case OP_SEMICOLON: + // NB: cannot be empty, Statement handled that. + break 2; + + case OP_ASSIGN: + case OP_HOOK: + case OP_COLON: + if ($this->t->scanOperand) + break 2; + + // Use >, not >=, for right-associative ASSIGN and HOOK/COLON. + while ( !empty($operators) && + ( $this->opPrecedence[end($operators)->type] > $this->opPrecedence[$tt] || + ($tt == OP_COLON && end($operators)->type == OP_ASSIGN) + ) + ) + $this->reduce($operators, $operands); + + if ($tt == OP_COLON) + { + $n = end($operators); + if ($n->type != OP_HOOK) + throw $this->t->newSyntaxError('Invalid label'); + + --$x->hookLevel; + } + else + { + array_push($operators, new JSNode($this->t)); + if ($tt == OP_ASSIGN) + end($operands)->assignOp = $this->t->currentToken()->assignOp; + else + ++$x->hookLevel; + } + + $this->t->scanOperand = true; + break; + + case KEYWORD_IN: + // An in operator should not be parsed if we're parsing the head of + // a for (...) loop, unless it is in the then part of a conditional + // expression, or parenthesized somehow. + if ($x->inForLoopInit && !$x->hookLevel && + !$x->bracketLevel && !$x->curlyLevel && + !$x->parenLevel + ) + { + break 2; + } + // FALL THROUGH + case OP_COMMA: + // Treat comma as left-associative so reduce can fold left-heavy + // COMMA trees into a single array. + // FALL THROUGH + case OP_OR: + case OP_AND: + case OP_BITWISE_OR: + case OP_BITWISE_XOR: + case OP_BITWISE_AND: + case OP_EQ: case OP_NE: case OP_STRICT_EQ: case OP_STRICT_NE: + case OP_LT: case OP_LE: case OP_GE: case OP_GT: + case KEYWORD_INSTANCEOF: + case OP_LSH: case OP_RSH: case OP_URSH: + case OP_PLUS: case OP_MINUS: + case OP_MUL: case OP_DIV: case OP_MOD: + case OP_DOT: + if ($this->t->scanOperand) + break 2; + + while ( !empty($operators) && + $this->opPrecedence[end($operators)->type] >= $this->opPrecedence[$tt] + ) + $this->reduce($operators, $operands); + + if ($tt == OP_DOT) + { + $this->t->mustMatch(TOKEN_IDENTIFIER); + array_push($operands, new JSNode($this->t, OP_DOT, array_pop($operands), new JSNode($this->t))); + } + else + { + array_push($operators, new JSNode($this->t)); + $this->t->scanOperand = true; + } + break; + + case KEYWORD_DELETE: case KEYWORD_VOID: case KEYWORD_TYPEOF: + case OP_NOT: case OP_BITWISE_NOT: case OP_UNARY_PLUS: case OP_UNARY_MINUS: + case KEYWORD_NEW: + if (!$this->t->scanOperand) + break 2; + + array_push($operators, new JSNode($this->t)); + break; + + case OP_INCREMENT: case OP_DECREMENT: + if ($this->t->scanOperand) + { + array_push($operators, new JSNode($this->t)); // prefix increment or decrement + } + else + { + // Don't cross a line boundary for postfix {in,de}crement. + $t = $this->t->tokens[($this->t->tokenIndex + $this->t->lookahead - 1) & 3]; + if ($t && $t->lineno != $this->t->lineno) + break 2; + + if (!empty($operators)) + { + // Use >, not >=, so postfix has higher precedence than prefix. + while ($this->opPrecedence[end($operators)->type] > $this->opPrecedence[$tt]) + $this->reduce($operators, $operands); + } + + $n = new JSNode($this->t, $tt, array_pop($operands)); + $n->postfix = true; + array_push($operands, $n); + } + break; + + case KEYWORD_FUNCTION: + if (!$this->t->scanOperand) + break 2; + + array_push($operands, $this->FunctionDefinition($x, false, EXPRESSED_FORM)); + $this->t->scanOperand = false; + break; + + case KEYWORD_NULL: case KEYWORD_THIS: case KEYWORD_TRUE: case KEYWORD_FALSE: + case TOKEN_IDENTIFIER: case TOKEN_NUMBER: case TOKEN_STRING: case TOKEN_REGEXP: + if (!$this->t->scanOperand) + break 2; + + array_push($operands, new JSNode($this->t)); + $this->t->scanOperand = false; + break; + + case TOKEN_CONDCOMMENT_MULTILINE: + if ($this->t->scanOperand) + array_push($operators, new JSNode($this->t)); + else + array_push($operands, new JSNode($this->t)); + break; + + case OP_LEFT_BRACKET: + if ($this->t->scanOperand) + { + // Array initialiser. Parse using recursive descent, as the + // sub-grammar here is not an operator grammar. + $n = new JSNode($this->t, JS_ARRAY_INIT); + while (($tt = $this->t->peek()) != OP_RIGHT_BRACKET) + { + if ($tt == OP_COMMA) + { + $this->t->get(); + $n->addNode(null); + continue; + } + + $n->addNode($this->Expression($x, OP_COMMA)); + if (!$this->t->match(OP_COMMA)) + break; + } + + $this->t->mustMatch(OP_RIGHT_BRACKET); + array_push($operands, $n); + $this->t->scanOperand = false; + } + else + { + // Property indexing operator. + array_push($operators, new JSNode($this->t, JS_INDEX)); + $this->t->scanOperand = true; + ++$x->bracketLevel; + } + break; + + case OP_RIGHT_BRACKET: + if ($this->t->scanOperand || $x->bracketLevel == $bl) + break 2; + + while ($this->reduce($operators, $operands)->type != JS_INDEX) + continue; + + --$x->bracketLevel; + break; + + case OP_LEFT_CURLY: + if (!$this->t->scanOperand) + break 2; + + // Object initialiser. As for array initialisers (see above), + // parse using recursive descent. + ++$x->curlyLevel; + $n = new JSNode($this->t, JS_OBJECT_INIT); + while (!$this->t->match(OP_RIGHT_CURLY)) + { + do + { + $tt = $this->t->get(); + $tv = $this->t->currentToken()->value; + if (($tv == 'get' || $tv == 'set') && $this->t->peek() == TOKEN_IDENTIFIER) + { + if ($x->ecmaStrictMode) + throw $this->t->newSyntaxError('Illegal property accessor'); + + $n->addNode($this->FunctionDefinition($x, true, EXPRESSED_FORM)); + } + else + { + switch ($tt) + { + case TOKEN_IDENTIFIER: + case TOKEN_NUMBER: + case TOKEN_STRING: + $id = new JSNode($this->t); + break; + + case OP_RIGHT_CURLY: + if ($x->ecmaStrictMode) + throw $this->t->newSyntaxError('Illegal trailing ,'); + break 3; + + default: + throw $this->t->newSyntaxError('Invalid property name'); + } + + $this->t->mustMatch(OP_COLON); + $n->addNode(new JSNode($this->t, JS_PROPERTY_INIT, $id, $this->Expression($x, OP_COMMA))); + } + } + while ($this->t->match(OP_COMMA)); + + $this->t->mustMatch(OP_RIGHT_CURLY); + break; + } + + array_push($operands, $n); + $this->t->scanOperand = false; + --$x->curlyLevel; + break; + + case OP_RIGHT_CURLY: + if (!$this->t->scanOperand && $x->curlyLevel != $cl) + throw new Exception('PANIC: right curly botch'); + break 2; + + case OP_LEFT_PAREN: + if ($this->t->scanOperand) + { + array_push($operators, new JSNode($this->t, JS_GROUP)); + } + else + { + while ( !empty($operators) && + $this->opPrecedence[end($operators)->type] > $this->opPrecedence[KEYWORD_NEW] + ) + $this->reduce($operators, $operands); + + // Handle () now, to regularize the n-ary case for n > 0. + // We must set scanOperand in case there are arguments and + // the first one is a regexp or unary+/-. + $n = end($operators); + $this->t->scanOperand = true; + if ($this->t->match(OP_RIGHT_PAREN)) + { + if ($n && $n->type == KEYWORD_NEW) + { + array_pop($operators); + $n->addNode(array_pop($operands)); + } + else + { + $n = new JSNode($this->t, JS_CALL, array_pop($operands), new JSNode($this->t, JS_LIST)); + } + + array_push($operands, $n); + $this->t->scanOperand = false; + break; + } + + if ($n && $n->type == KEYWORD_NEW) + $n->type = JS_NEW_WITH_ARGS; + else + array_push($operators, new JSNode($this->t, JS_CALL)); + } + + ++$x->parenLevel; + break; + + case OP_RIGHT_PAREN: + if ($this->t->scanOperand || $x->parenLevel == $pl) + break 2; + + while (($tt = $this->reduce($operators, $operands)->type) != JS_GROUP && + $tt != JS_CALL && $tt != JS_NEW_WITH_ARGS + ) + { + continue; + } + + if ($tt != JS_GROUP) + { + $n = end($operands); + if ($n->treeNodes[1]->type != OP_COMMA) + $n->treeNodes[1] = new JSNode($this->t, JS_LIST, $n->treeNodes[1]); + else + $n->treeNodes[1]->type = JS_LIST; + } + + --$x->parenLevel; + break; + + // Automatic semicolon insertion means we may scan across a newline + // and into the beginning of another statement. If so, break out of + // the while loop and let the t.scanOperand logic handle errors. + default: + break 2; + } + } + + if ($x->hookLevel != $hl) + throw $this->t->newSyntaxError('Missing : after ?'); + + if ($x->parenLevel != $pl) + throw $this->t->newSyntaxError('Missing ) in parenthetical'); + + if ($x->bracketLevel != $bl) + throw $this->t->newSyntaxError('Missing ] in index expression'); + + if ($this->t->scanOperand) + throw $this->t->newSyntaxError('Missing operand'); + + // Resume default mode, scanning for operands, not operators. + $this->t->scanOperand = true; + $this->t->unget(); + + while (count($operators)) + $this->reduce($operators, $operands); + + return array_pop($operands); + } + + private function ParenExpression($x) + { + $this->t->mustMatch(OP_LEFT_PAREN); + $n = $this->Expression($x); + $this->t->mustMatch(OP_RIGHT_PAREN); + + return $n; + } + + // Statement stack and nested statement handler. + private function nest($x, $node, $end = false) + { + array_push($x->stmtStack, $node); + $n = $this->statement($x); + array_pop($x->stmtStack); + + if ($end) + $this->t->mustMatch($end); + + return $n; + } + + private function reduce(&$operators, &$operands) + { + $n = array_pop($operators); + $op = $n->type; + $arity = $this->opArity[$op]; + $c = count($operands); + if ($arity == -2) + { + // Flatten left-associative trees + if ($c >= 2) + { + $left = $operands[$c - 2]; + if ($left->type == $op) + { + $right = array_pop($operands); + $left->addNode($right); + return $left; + } + } + $arity = 2; + } + + // Always use push to add operands to n, to update start and end + $a = array_splice($operands, $c - $arity); + for ($i = 0; $i < $arity; $i++) + $n->addNode($a[$i]); + + // Include closing bracket or postfix operator in [start,end] + $te = $this->t->currentToken()->end; + if ($n->end < $te) + $n->end = $te; + + array_push($operands, $n); + + return $n; + } +} + +class JSCompilerContext +{ + public $inFunction = false; + public $inForLoopInit = false; + public $ecmaStrictMode = false; + public $bracketLevel = 0; + public $curlyLevel = 0; + public $parenLevel = 0; + public $hookLevel = 0; + + public $stmtStack = array(); + public $funDecls = array(); + public $varDecls = array(); + + public function __construct($inFunction) + { + $this->inFunction = $inFunction; + } +} + +class JSNode +{ + private $type; + private $value; + private $lineno; + private $start; + private $end; + + public $treeNodes = array(); + public $funDecls = array(); + public $varDecls = array(); + + public function __construct($t, $type=0) + { + if ($token = $t->currentToken()) + { + $this->type = $type ? $type : $token->type; + $this->value = $token->value; + $this->lineno = $token->lineno; + $this->start = $token->start; + $this->end = $token->end; + } + else + { + $this->type = $type; + $this->lineno = $t->lineno; + } + + if (($numargs = func_num_args()) > 2) + { + $args = func_get_args();; + for ($i = 2; $i < $numargs; $i++) + $this->addNode($args[$i]); + } + } + + // we don't want to bloat our object with all kind of specific properties, so we use overloading + public function __set($name, $value) + { + $this->$name = $value; + } + + public function __get($name) + { + if (isset($this->$name)) + return $this->$name; + + return null; + } + + public function addNode($node) + { + $this->treeNodes[] = $node; + } +} + +class JSTokenizer +{ + private $cursor = 0; + private $source; + + public $tokens = array(); + public $tokenIndex = 0; + public $lookahead = 0; + public $scanNewlines = false; + public $scanOperand = true; + + public $filename; + public $lineno; + + private $keywords = array( + 'break', + 'case', 'catch', 'const', 'continue', + 'debugger', 'default', 'delete', 'do', + 'else', 'enum', + 'false', 'finally', 'for', 'function', + 'if', 'in', 'instanceof', + 'new', 'null', + 'return', + 'switch', + 'this', 'throw', 'true', 'try', 'typeof', + 'var', 'void', + 'while', 'with' + ); + + private $opTypeNames = array( + ';' => 'SEMICOLON', + ',' => 'COMMA', + '?' => 'HOOK', + ':' => 'COLON', + '||' => 'OR', + '&&' => 'AND', + '|' => 'BITWISE_OR', + '^' => 'BITWISE_XOR', + '&' => 'BITWISE_AND', + '===' => 'STRICT_EQ', + '==' => 'EQ', + '=' => 'ASSIGN', + '!==' => 'STRICT_NE', + '!=' => 'NE', + '<<' => 'LSH', + '<=' => 'LE', + '<' => 'LT', + '>>>' => 'URSH', + '>>' => 'RSH', + '>=' => 'GE', + '>' => 'GT', + '++' => 'INCREMENT', + '--' => 'DECREMENT', + '+' => 'PLUS', + '-' => 'MINUS', + '*' => 'MUL', + '/' => 'DIV', + '%' => 'MOD', + '!' => 'NOT', + '~' => 'BITWISE_NOT', + '.' => 'DOT', + '[' => 'LEFT_BRACKET', + ']' => 'RIGHT_BRACKET', + '{' => 'LEFT_CURLY', + '}' => 'RIGHT_CURLY', + '(' => 'LEFT_PAREN', + ')' => 'RIGHT_PAREN', + '@*/' => 'CONDCOMMENT_END' + ); + + private $assignOps = array('|', '^', '&', '<<', '>>', '>>>', '+', '-', '*', '/', '%'); + private $opRegExp; + + public function __construct() + { + $this->opRegExp = '#^(' . implode('|', array_map('preg_quote', array_keys($this->opTypeNames))) . ')#'; + + // this is quite a hidden yet convenient place to create the defines for operators and keywords + foreach ($this->opTypeNames as $operand => $name) + define('OP_' . $name, $operand); + + define('OP_UNARY_PLUS', 'U+'); + define('OP_UNARY_MINUS', 'U-'); + + foreach ($this->keywords as $keyword) + define('KEYWORD_' . strtoupper($keyword), $keyword); + } + + public function init($source, $filename = '', $lineno = 1) + { + $this->source = $source; + $this->filename = $filename ? $filename : '[inline]'; + $this->lineno = $lineno; + + $this->cursor = 0; + $this->tokens = array(); + $this->tokenIndex = 0; + $this->lookahead = 0; + $this->scanNewlines = false; + $this->scanOperand = true; + } + + public function getInput($chunksize) + { + if ($chunksize) + return substr($this->source, $this->cursor, $chunksize); + + return substr($this->source, $this->cursor); + } + + public function isDone() + { + return $this->peek() == TOKEN_END; + } + + public function match($tt) + { + return $this->get() == $tt || $this->unget(); + } + + public function mustMatch($tt) + { + if (!$this->match($tt)) + throw $this->newSyntaxError('Unexpected token; token ' . $tt . ' expected'); + + return $this->currentToken(); + } + + public function peek() + { + if ($this->lookahead) + { + $next = $this->tokens[($this->tokenIndex + $this->lookahead) & 3]; + if ($this->scanNewlines && $next->lineno != $this->lineno) + $tt = TOKEN_NEWLINE; + else + $tt = $next->type; + } + else + { + $tt = $this->get(); + $this->unget(); + } + + return $tt; + } + + public function peekOnSameLine() + { + $this->scanNewlines = true; + $tt = $this->peek(); + $this->scanNewlines = false; + + return $tt; + } + + public function currentToken() + { + if (!empty($this->tokens)) + return $this->tokens[$this->tokenIndex]; + } + + public function get($chunksize = 1000) + { + while($this->lookahead) + { + $this->lookahead--; + $this->tokenIndex = ($this->tokenIndex + 1) & 3; + $token = $this->tokens[$this->tokenIndex]; + if ($token->type != TOKEN_NEWLINE || $this->scanNewlines) + return $token->type; + } + + $conditional_comment = false; + + // strip whitespace and comments + while(true) + { + $input = $this->getInput($chunksize); + + // whitespace handling; gobble up \r as well (effectively we don't have support for MAC newlines!) + $re = $this->scanNewlines ? '/^[ \r\t]+/' : '/^\s+/'; + if (preg_match($re, $input, $match)) + { + $spaces = $match[0]; + $spacelen = strlen($spaces); + $this->cursor += $spacelen; + if (!$this->scanNewlines) + $this->lineno += substr_count($spaces, "\n"); + + if ($spacelen == $chunksize) + continue; // complete chunk contained whitespace + + $input = $this->getInput($chunksize); + if ($input == '' || $input[0] != '/') + break; + } + + // Comments + if (!preg_match('/^\/(?:\*(@(?:cc_on|if|elif|else|end))?(?:.|\n)*?\*\/|\/.*)/', $input, $match)) + { + if (!$chunksize) + break; + + // retry with a full chunk fetch; this also prevents breakage of long regular expressions (which will never match a comment) + $chunksize = null; + continue; + } + + // check if this is a conditional (JScript) comment + if (!empty($match[1])) + { + //$match[0] = '/*' . $match[1]; + $conditional_comment = true; + break; + } + else + { + $this->cursor += strlen($match[0]); + $this->lineno += substr_count($match[0], "\n"); + } + } + + if ($input == '') + { + $tt = TOKEN_END; + $match = array(''); + } + elseif ($conditional_comment) + { + $tt = TOKEN_CONDCOMMENT_MULTILINE; + } + else + { + switch ($input[0]) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + if (preg_match('/^\d+\.\d*(?:[eE][-+]?\d+)?|^\d+(?:\.\d*)?[eE][-+]?\d+/', $input, $match)) + { + $tt = TOKEN_NUMBER; + } + elseif (preg_match('/^0[xX][\da-fA-F]+|^0[0-7]*|^\d+/', $input, $match)) + { + // this should always match because of \d+ + $tt = TOKEN_NUMBER; + } + break; + + case '"': + case "'": + if (preg_match('/^"(?:\\\\(?:.|\r?\n)|[^\\\\"\r\n])*"|^\'(?:\\\\(?:.|\r?\n)|[^\\\\\'\r\n])*\'/', $input, $match)) + { + $tt = TOKEN_STRING; + } + else + { + if ($chunksize) + return $this->get(null); // retry with a full chunk fetch + + throw $this->newSyntaxError('Unterminated string literal'); + } + break; + + case '/': + if ($this->scanOperand && preg_match('/^\/((?:\\\\.|\[(?:\\\\.|[^\]])*\]|[^\/])+)\/([gimy]*)/', $input, $match)) + { + $tt = TOKEN_REGEXP; + break; + } + // fall through + + case '|': + case '^': + case '&': + case '<': + case '>': + case '+': + case '-': + case '*': + case '%': + case '=': + case '!': + // should always match + preg_match($this->opRegExp, $input, $match); + $op = $match[0]; + if (in_array($op, $this->assignOps) && $input[strlen($op)] == '=') + { + $tt = OP_ASSIGN; + $match[0] .= '='; + } + else + { + $tt = $op; + if ($this->scanOperand) + { + if ($op == OP_PLUS) + $tt = OP_UNARY_PLUS; + elseif ($op == OP_MINUS) + $tt = OP_UNARY_MINUS; + } + $op = null; + } + break; + + case '.': + if (preg_match('/^\.\d+(?:[eE][-+]?\d+)?/', $input, $match)) + { + $tt = TOKEN_NUMBER; + break; + } + // fall through + + case ';': + case ',': + case '?': + case ':': + case '~': + case '[': + case ']': + case '{': + case '}': + case '(': + case ')': + // these are all single + $match = array($input[0]); + $tt = $input[0]; + break; + + case '@': + throw $this->newSyntaxError('Illegal token'); + break; + + case "\n": + if ($this->scanNewlines) + { + $match = array("\n"); + $tt = TOKEN_NEWLINE; + } + else + throw $this->newSyntaxError('Illegal token'); + break; + + default: + // FIXME: add support for unicode and unicode escape sequence \uHHHH + if (preg_match('/^[$\w]+/', $input, $match)) + { + $tt = in_array($match[0], $this->keywords) ? $match[0] : TOKEN_IDENTIFIER; + } + else + throw $this->newSyntaxError('Illegal token'); + } + } + + $this->tokenIndex = ($this->tokenIndex + 1) & 3; + + if (!isset($this->tokens[$this->tokenIndex])) + $this->tokens[$this->tokenIndex] = new JSToken(); + + $token = $this->tokens[$this->tokenIndex]; + $token->type = $tt; + + if ($tt == OP_ASSIGN) + $token->assignOp = $op; + + $token->start = $this->cursor; + + $token->value = $match[0]; + $this->cursor += strlen($match[0]); + + $token->end = $this->cursor; + $token->lineno = $this->lineno; + + return $tt; + } + + public function unget() + { + if (++$this->lookahead == 4) + throw $this->newSyntaxError('PANIC: too much lookahead!'); + + $this->tokenIndex = ($this->tokenIndex - 1) & 3; + } + + public function newSyntaxError($m) + { + return new Exception('Parse error: ' . $m . ' in file \'' . $this->filename . '\' on line ' . $this->lineno); + } +} + +class JSToken +{ + public $type; + public $value; + public $start; + public $end; + public $lineno; + public $assignOp; +} + +?>
\ No newline at end of file diff --git a/plugins/Minify/extlib/minify/min/lib/Minify.php b/plugins/Minify/extlib/minify/min/lib/Minify.php new file mode 100644 index 000000000..2c0ca346c --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify.php @@ -0,0 +1,532 @@ +<?php +/** + * Class Minify + * @package Minify + */ + +/** + * Minify_Source + */ +require_once 'Minify/Source.php'; + +/** + * Minify - Combines, minifies, and caches JavaScript and CSS files on demand. + * + * See README for usage instructions (for now). + * + * This library was inspired by {@link mailto:flashkot@mail.ru jscsscomp by Maxim Martynyuk} + * and by the article {@link http://www.hunlock.com/blogs/Supercharged_Javascript "Supercharged JavaScript" by Patrick Hunlock}. + * + * Requires PHP 5.1.0. + * Tested on PHP 5.1.6. + * + * @package Minify + * @author Ryan Grove <ryan@wonko.com> + * @author Stephen Clay <steve@mrclay.org> + * @copyright 2008 Ryan Grove, Stephen Clay. All rights reserved. + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://code.google.com/p/minify/ + */ +class Minify { + + const VERSION = '2.1.3'; + const TYPE_CSS = 'text/css'; + const TYPE_HTML = 'text/html'; + // there is some debate over the ideal JS Content-Type, but this is the + // Apache default and what Yahoo! uses.. + const TYPE_JS = 'application/x-javascript'; + + /** + * How many hours behind are the file modification times of uploaded files? + * + * If you upload files from Windows to a non-Windows server, Windows may report + * incorrect mtimes for the files. Immediately after modifying and uploading a + * file, use the touch command to update the mtime on the server. If the mtime + * jumps ahead by a number of hours, set this variable to that number. If the mtime + * moves back, this should not be needed. + * + * @var int $uploaderHoursBehind + */ + public static $uploaderHoursBehind = 0; + + /** + * If this string is not empty AND the serve() option 'bubbleCssImports' is + * NOT set, then serve() will check CSS files for @import declarations that + * appear too late in the combined stylesheet. If found, serve() will prepend + * the output with this warning. + * + * @var string $importWarning + */ + public static $importWarning = "/* See http://code.google.com/p/minify/wiki/CommonProblems#@imports_can_appear_in_invalid_locations_in_combined_CSS_files */\n"; + + /** + * Specify a cache object (with identical interface as Minify_Cache_File) or + * a path to use with Minify_Cache_File. + * + * If not called, Minify will not use a cache and, for each 200 response, will + * need to recombine files, minify and encode the output. + * + * @param mixed $cache object with identical interface as Minify_Cache_File or + * a directory path, or null to disable caching. (default = '') + * + * @param bool $fileLocking (default = true) This only applies if the first + * parameter is a string. + * + * @return null + */ + public static function setCache($cache = '', $fileLocking = true) + { + if (is_string($cache)) { + require_once 'Minify/Cache/File.php'; + self::$_cache = new Minify_Cache_File($cache, $fileLocking); + } else { + self::$_cache = $cache; + } + } + + /** + * Serve a request for a minified file. + * + * Here are the available options and defaults in the base controller: + * + * 'isPublic' : send "public" instead of "private" in Cache-Control + * headers, allowing shared caches to cache the output. (default true) + * + * 'quiet' : set to true to have serve() return an array rather than sending + * any headers/output (default false) + * + * 'encodeOutput' : set to false to disable content encoding, and not send + * the Vary header (default true) + * + * 'encodeMethod' : generally you should let this be determined by + * HTTP_Encoder (leave null), but you can force a particular encoding + * to be returned, by setting this to 'gzip' or '' (no encoding) + * + * 'encodeLevel' : level of encoding compression (0 to 9, default 9) + * + * 'contentTypeCharset' : appended to the Content-Type header sent. Set to a falsey + * value to remove. (default 'utf-8') + * + * 'maxAge' : set this to the number of seconds the client should use its cache + * before revalidating with the server. This sets Cache-Control: max-age and the + * Expires header. Unlike the old 'setExpires' setting, this setting will NOT + * prevent conditional GETs. Note this has nothing to do with server-side caching. + * + * 'rewriteCssUris' : If true, serve() will automatically set the 'currentDir' + * minifier option to enable URI rewriting in CSS files (default true) + * + * 'bubbleCssImports' : If true, all @import declarations in combined CSS + * files will be move to the top. Note this may alter effective CSS values + * due to a change in order. (default false) + * + * 'debug' : set to true to minify all sources with the 'Lines' controller, which + * eases the debugging of combined files. This also prevents 304 responses. + * @see Minify_Lines::minify() + * + * 'minifiers' : to override Minify's default choice of minifier function for + * a particular content-type, specify your callback under the key of the + * content-type: + * <code> + * // call customCssMinifier($css) for all CSS minification + * $options['minifiers'][Minify::TYPE_CSS] = 'customCssMinifier'; + * + * // don't minify Javascript at all + * $options['minifiers'][Minify::TYPE_JS] = ''; + * </code> + * + * 'minifierOptions' : to send options to the minifier function, specify your options + * under the key of the content-type. E.g. To send the CSS minifier an option: + * <code> + * // give CSS minifier array('optionName' => 'optionValue') as 2nd argument + * $options['minifierOptions'][Minify::TYPE_CSS]['optionName'] = 'optionValue'; + * </code> + * + * 'contentType' : (optional) this is only needed if your file extension is not + * js/css/html. The given content-type will be sent regardless of source file + * extension, so this should not be used in a Groups config with other + * Javascript/CSS files. + * + * Any controller options are documented in that controller's setupSources() method. + * + * @param mixed instance of subclass of Minify_Controller_Base or string name of + * controller. E.g. 'Files' + * + * @param array $options controller/serve options + * + * @return mixed null, or, if the 'quiet' option is set to true, an array + * with keys "success" (bool), "statusCode" (int), "content" (string), and + * "headers" (array). + */ + public static function serve($controller, $options = array()) + { + if (is_string($controller)) { + // make $controller into object + $class = 'Minify_Controller_' . $controller; + if (! class_exists($class, false)) { + require_once "Minify/Controller/" + . str_replace('_', '/', $controller) . ".php"; + } + $controller = new $class(); + } + + // set up controller sources and mix remaining options with + // controller defaults + $options = $controller->setupSources($options); + $options = $controller->analyzeSources($options); + self::$_options = $controller->mixInDefaultOptions($options); + + // check request validity + if (! $controller->sources) { + // invalid request! + if (! self::$_options['quiet']) { + header(self::$_options['badRequestHeader']); + echo self::$_options['badRequestHeader']; + return; + } else { + list(,$statusCode) = explode(' ', self::$_options['badRequestHeader']); + return array( + 'success' => false + ,'statusCode' => (int)$statusCode + ,'content' => '' + ,'headers' => array() + ); + } + } + + self::$_controller = $controller; + + if (self::$_options['debug']) { + self::_setupDebug($controller->sources); + self::$_options['maxAge'] = 0; + } + + // determine encoding + if (self::$_options['encodeOutput']) { + if (self::$_options['encodeMethod'] !== null) { + // controller specifically requested this + $contentEncoding = self::$_options['encodeMethod']; + } else { + // sniff request header + require_once 'HTTP/Encoder.php'; + // depending on what the client accepts, $contentEncoding may be + // 'x-gzip' while our internal encodeMethod is 'gzip'. Calling + // getAcceptedEncoding(false, false) leaves out compress and deflate as options. + list(self::$_options['encodeMethod'], $contentEncoding) = HTTP_Encoder::getAcceptedEncoding(false, false); + } + } else { + self::$_options['encodeMethod'] = ''; // identity (no encoding) + } + + // check client cache + require_once 'HTTP/ConditionalGet.php'; + $cgOptions = array( + 'lastModifiedTime' => self::$_options['lastModifiedTime'] + ,'isPublic' => self::$_options['isPublic'] + ,'encoding' => self::$_options['encodeMethod'] + ); + if (self::$_options['maxAge'] > 0) { + $cgOptions['maxAge'] = self::$_options['maxAge']; + } + $cg = new HTTP_ConditionalGet($cgOptions); + if ($cg->cacheIsValid) { + // client's cache is valid + if (! self::$_options['quiet']) { + $cg->sendHeaders(); + return; + } else { + return array( + 'success' => true + ,'statusCode' => 304 + ,'content' => '' + ,'headers' => $cg->getHeaders() + ); + } + } else { + // client will need output + $headers = $cg->getHeaders(); + unset($cg); + } + + if (self::$_options['contentType'] === self::TYPE_CSS + && self::$_options['rewriteCssUris']) { + reset($controller->sources); + while (list($key, $source) = each($controller->sources)) { + if ($source->filepath + && !isset($source->minifyOptions['currentDir']) + && !isset($source->minifyOptions['prependRelativePath']) + ) { + $source->minifyOptions['currentDir'] = dirname($source->filepath); + } + } + } + + // check server cache + if (null !== self::$_cache) { + // using cache + // the goal is to use only the cache methods to sniff the length and + // output the content, as they do not require ever loading the file into + // memory. + $cacheId = 'minify_' . self::_getCacheId(); + $fullCacheId = (self::$_options['encodeMethod']) + ? $cacheId . '.gz' + : $cacheId; + // check cache for valid entry + $cacheIsReady = self::$_cache->isValid($fullCacheId, self::$_options['lastModifiedTime']); + if ($cacheIsReady) { + $cacheContentLength = self::$_cache->getSize($fullCacheId); + } else { + // generate & cache content + $content = self::_combineMinify(); + self::$_cache->store($cacheId, $content); + if (function_exists('gzencode')) { + self::$_cache->store($cacheId . '.gz', gzencode($content, self::$_options['encodeLevel'])); + } + } + } else { + // no cache + $cacheIsReady = false; + $content = self::_combineMinify(); + } + if (! $cacheIsReady && self::$_options['encodeMethod']) { + // still need to encode + $content = gzencode($content, self::$_options['encodeLevel']); + } + + // add headers + $headers['Content-Length'] = $cacheIsReady + ? $cacheContentLength + : strlen($content); + $headers['Content-Type'] = self::$_options['contentTypeCharset'] + ? self::$_options['contentType'] . '; charset=' . self::$_options['contentTypeCharset'] + : self::$_options['contentType']; + if (self::$_options['encodeMethod'] !== '') { + $headers['Content-Encoding'] = $contentEncoding; + } + if (self::$_options['encodeOutput']) { + $headers['Vary'] = 'Accept-Encoding'; + } + + if (! self::$_options['quiet']) { + // output headers & content + foreach ($headers as $name => $val) { + header($name . ': ' . $val); + } + if ($cacheIsReady) { + self::$_cache->display($fullCacheId); + } else { + echo $content; + } + } else { + return array( + 'success' => true + ,'statusCode' => 200 + ,'content' => $cacheIsReady + ? self::$_cache->fetch($fullCacheId) + : $content + ,'headers' => $headers + ); + } + } + + /** + * Return combined minified content for a set of sources + * + * No internal caching will be used and the content will not be HTTP encoded. + * + * @param array $sources array of filepaths and/or Minify_Source objects + * + * @param array $options (optional) array of options for serve. By default + * these are already set: quiet = true, encodeMethod = '', lastModifiedTime = 0. + * + * @return string + */ + public static function combine($sources, $options = array()) + { + $cache = self::$_cache; + self::$_cache = null; + $options = array_merge(array( + 'files' => (array)$sources + ,'quiet' => true + ,'encodeMethod' => '' + ,'lastModifiedTime' => 0 + ), $options); + $out = self::serve('Files', $options); + self::$_cache = $cache; + return $out['content']; + } + + /** + * On IIS, create $_SERVER['DOCUMENT_ROOT'] + * + * @param bool $unsetPathInfo (default false) if true, $_SERVER['PATH_INFO'] + * will be unset (it is inconsistent with Apache's setting) + * + * @return null + */ + public static function setDocRoot($unsetPathInfo = false) + { + if (isset($_SERVER['SERVER_SOFTWARE']) + && 0 === strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/') + ) { + $_SERVER['DOCUMENT_ROOT'] = rtrim(substr( + $_SERVER['PATH_TRANSLATED'] + ,0 + ,strlen($_SERVER['PATH_TRANSLATED']) - strlen($_SERVER['SCRIPT_NAME']) + ), '\\'); + if ($unsetPathInfo) { + unset($_SERVER['PATH_INFO']); + } + require_once 'Minify/Logger.php'; + Minify_Logger::log("setDocRoot() set DOCUMENT_ROOT to \"{$_SERVER['DOCUMENT_ROOT']}\""); + } + } + + /** + * @var mixed Minify_Cache_* object or null (i.e. no server cache is used) + */ + private static $_cache = null; + + /** + * @var Minify_Controller active controller for current request + */ + protected static $_controller = null; + + /** + * @var array options for current request + */ + protected static $_options = null; + + /** + * Set up sources to use Minify_Lines + * + * @param array $sources Minify_Source instances + * + * @return null + */ + protected static function _setupDebug($sources) + { + foreach ($sources as $source) { + $source->minifier = array('Minify_Lines', 'minify'); + $id = $source->getId(); + $source->minifyOptions = array( + 'id' => (is_file($id) ? basename($id) : $id) + ); + } + } + + /** + * Combines sources and minifies the result. + * + * @return string + */ + protected static function _combineMinify() + { + $type = self::$_options['contentType']; // ease readability + + // when combining scripts, make sure all statements separated and + // trailing single line comment is terminated + $implodeSeparator = ($type === self::TYPE_JS) + ? "\n;" + : ''; + // allow the user to pass a particular array of options to each + // minifier (designated by type). source objects may still override + // these + $defaultOptions = isset(self::$_options['minifierOptions'][$type]) + ? self::$_options['minifierOptions'][$type] + : array(); + // if minifier not set, default is no minification. source objects + // may still override this + $defaultMinifier = isset(self::$_options['minifiers'][$type]) + ? self::$_options['minifiers'][$type] + : false; + + if (Minify_Source::haveNoMinifyPrefs(self::$_controller->sources)) { + // all source have same options/minifier, better performance + // to combine, then minify once + foreach (self::$_controller->sources as $source) { + $pieces[] = $source->getContent(); + } + $content = implode($implodeSeparator, $pieces); + if ($defaultMinifier) { + self::$_controller->loadMinifier($defaultMinifier); + $content = call_user_func($defaultMinifier, $content, $defaultOptions); + } + } else { + // minify each source with its own options and minifier, then combine + foreach (self::$_controller->sources as $source) { + // allow the source to override our minifier and options + $minifier = (null !== $source->minifier) + ? $source->minifier + : $defaultMinifier; + $options = (null !== $source->minifyOptions) + ? array_merge($defaultOptions, $source->minifyOptions) + : $defaultOptions; + if ($minifier) { + self::$_controller->loadMinifier($minifier); + // get source content and minify it + $pieces[] = call_user_func($minifier, $source->getContent(), $options); + } else { + $pieces[] = $source->getContent(); + } + } + $content = implode($implodeSeparator, $pieces); + } + + if ($type === self::TYPE_CSS && false !== strpos($content, '@import')) { + $content = self::_handleCssImports($content); + } + + // do any post-processing (esp. for editing build URIs) + if (self::$_options['postprocessorRequire']) { + require_once self::$_options['postprocessorRequire']; + } + if (self::$_options['postprocessor']) { + $content = call_user_func(self::$_options['postprocessor'], $content, $type); + } + return $content; + } + + /** + * Make a unique cache id for for this request. + * + * Any settings that could affect output are taken into consideration + * + * @return string + */ + protected static function _getCacheId() + { + return md5(serialize(array( + Minify_Source::getDigest(self::$_controller->sources) + ,self::$_options['minifiers'] + ,self::$_options['minifierOptions'] + ,self::$_options['postprocessor'] + ,self::$_options['bubbleCssImports'] + ))); + } + + /** + * Bubble CSS @imports to the top or prepend a warning if an + * @import is detected not at the top. + */ + protected static function _handleCssImports($css) + { + if (self::$_options['bubbleCssImports']) { + // bubble CSS imports + preg_match_all('/@import.*?;/', $css, $imports);
+ $css = implode('', $imports[0]) . preg_replace('/@import.*?;/', '', $css); + } else if ('' !== self::$importWarning) { + // remove comments so we don't mistake { in a comment as a block + $noCommentCss = preg_replace('@/\\*[\\s\\S]*?\\*/@', '', $css); + $lastImportPos = strrpos($noCommentCss, '@import'); + $firstBlockPos = strpos($noCommentCss, '{'); + if (false !== $lastImportPos + && false !== $firstBlockPos + && $firstBlockPos < $lastImportPos + ) { + // { appears before @import : prepend warning + $css = self::$importWarning . $css; + } + } + return $css; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Build.php b/plugins/Minify/extlib/minify/min/lib/Minify/Build.php new file mode 100644 index 000000000..e625165e5 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Build.php @@ -0,0 +1,103 @@ +<?php +/** + * Class Minify_Build + * @package Minify + */ + +require_once 'Minify/Source.php'; + +/** + * Maintain a single last modification time for a group of Minify sources to + * allow use of far off Expires headers in Minify. + * + * <code> + * // in config file + * $groupSources = array( + * 'js' => array('file1.js', 'file2.js') + * ,'css' => array('file1.css', 'file2.css', 'file3.css') + * ) + * + * // during HTML generation + * $jsBuild = new Minify_Build($groupSources['js']); + * $cssBuild = new Minify_Build($groupSources['css']); + * + * $script = "<script type='text/javascript' src='" + * . $jsBuild->uri('/min.php/js') . "'></script>"; + * $link = "<link rel='stylesheet' type='text/css' href='" + * . $cssBuild->uri('/min.php/css') . "'>"; + * + * // in min.php + * Minify::serve('Groups', array( + * 'groups' => $groupSources + * ,'setExpires' => (time() + 86400 * 365) + * )); + * </code> + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_Build { + + /** + * Last modification time of all files in the build + * + * @var int + */ + public $lastModified = 0; + + /** + * String to use as ampersand in uri(). Set this to '&' if + * you are not HTML-escaping URIs. + * + * @var string + */ + public static $ampersand = '&'; + + /** + * Get a time-stamped URI + * + * <code> + * echo $b->uri('/site.js'); + * // outputs "/site.js?1678242" + * + * echo $b->uri('/scriptaculous.js?load=effects'); + * // outputs "/scriptaculous.js?load=effects&1678242" + * </code> + * + * @param string $uri + * @param boolean $forceAmpersand (default = false) Force the use of ampersand to + * append the timestamp to the URI. + * @return string + */ + public function uri($uri, $forceAmpersand = false) { + $sep = ($forceAmpersand || strpos($uri, '?') !== false) + ? self::$ampersand + : '?'; + return "{$uri}{$sep}{$this->lastModified}"; + } + + /** + * Create a build object + * + * @param array $sources array of Minify_Source objects and/or file paths + * + * @return null + */ + public function __construct($sources) + { + $max = 0; + foreach ((array)$sources as $source) { + if ($source instanceof Minify_Source) { + $max = max($max, $source->lastModified); + } elseif (is_string($source)) { + if (0 === strpos($source, '//')) { + $source = $_SERVER['DOCUMENT_ROOT'] . substr($source, 1); + } + if (is_file($source)) { + $max = max($max, filemtime($source)); + } + } + } + $this->lastModified = $max; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/CSS.php b/plugins/Minify/extlib/minify/min/lib/Minify/CSS.php new file mode 100644 index 000000000..2220cf221 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/CSS.php @@ -0,0 +1,83 @@ +<?php
+/**
+ * Class Minify_CSS
+ * @package Minify
+ */
+
+/**
+ * Minify CSS
+ *
+ * This class uses Minify_CSS_Compressor and Minify_CSS_UriRewriter to
+ * minify CSS and rewrite relative URIs.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ * @author http://code.google.com/u/1stvamp/ (Issue 64 patch)
+ */
+class Minify_CSS {
+
+ /**
+ * Minify a CSS string
+ *
+ * @param string $css
+ *
+ * @param array $options available options:
+ *
+ * 'preserveComments': (default true) multi-line comments that begin
+ * with "/*!" will be preserved with newlines before and after to
+ * enhance readability.
+ *
+ * 'prependRelativePath': (default null) if given, this string will be
+ * prepended to all relative URIs in import/url declarations
+ *
+ * 'currentDir': (default null) if given, this is assumed to be the
+ * directory of the current CSS file. Using this, minify will rewrite
+ * all relative URIs in import/url declarations to correctly point to
+ * the desired files. For this to work, the files *must* exist and be
+ * visible by the PHP process.
+ *
+ * 'symlinks': (default = array()) If the CSS file is stored in + * a symlink-ed directory, provide an array of link paths to + * target paths, where the link paths are within the document root. Because + * paths need to be normalized for this to work, use "//" to substitute + * the doc root in the link paths (the array keys). E.g.: + * <code> + * array('//symlink' => '/real/target/path') // unix + * array('//static' => 'D:\\staticStorage') // Windows + * </code>
+ *
+ * @return string
+ */
+ public static function minify($css, $options = array())
+ {
+ require_once 'Minify/CSS/Compressor.php';
+ if (isset($options['preserveComments'])
+ && !$options['preserveComments']) {
+ $css = Minify_CSS_Compressor::process($css, $options);
+ } else {
+ require_once 'Minify/CommentPreserver.php';
+ $css = Minify_CommentPreserver::process(
+ $css
+ ,array('Minify_CSS_Compressor', 'process')
+ ,array($options)
+ );
+ }
+ if (! isset($options['currentDir']) && ! isset($options['prependRelativePath'])) {
+ return $css;
+ }
+ require_once 'Minify/CSS/UriRewriter.php';
+ if (isset($options['currentDir'])) {
+ return Minify_CSS_UriRewriter::rewrite(
+ $css
+ ,$options['currentDir']
+ ,isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT']
+ ,isset($options['symlinks']) ? $options['symlinks'] : array()
+ );
+ } else {
+ return Minify_CSS_UriRewriter::prepend(
+ $css
+ ,$options['prependRelativePath']
+ );
+ }
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/CSS/Compressor.php b/plugins/Minify/extlib/minify/min/lib/Minify/CSS/Compressor.php new file mode 100644 index 000000000..a34828681 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/CSS/Compressor.php @@ -0,0 +1,250 @@ +<?php
+/**
+ * Class Minify_CSS_Compressor
+ * @package Minify
+ */
+
+/**
+ * Compress CSS
+ *
+ * This is a heavy regex-based removal of whitespace, unnecessary
+ * comments and tokens, and some CSS value minimization, where practical.
+ * Many steps have been taken to avoid breaking comment-based hacks,
+ * including the ie5/mac filter (and its inversion), but expect tricky
+ * hacks involving comment tokens in 'content' value strings to break
+ * minimization badly. A test suite is available.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ * @author http://code.google.com/u/1stvamp/ (Issue 64 patch)
+ */
+class Minify_CSS_Compressor {
+
+ /**
+ * Minify a CSS string
+ *
+ * @param string $css
+ *
+ * @param array $options (currently ignored)
+ *
+ * @return string
+ */
+ public static function process($css, $options = array())
+ {
+ $obj = new Minify_CSS_Compressor($options);
+ return $obj->_process($css);
+ }
+
+ /**
+ * @var array options
+ */
+ protected $_options = null;
+
+ /**
+ * @var bool Are we "in" a hack?
+ *
+ * I.e. are some browsers targetted until the next comment?
+ */
+ protected $_inHack = false;
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options (currently ignored)
+ *
+ * @return null
+ */
+ private function __construct($options) {
+ $this->_options = $options;
+ }
+
+ /**
+ * Minify a CSS string
+ *
+ * @param string $css
+ *
+ * @return string
+ */
+ protected function _process($css)
+ {
+ $css = str_replace("\r\n", "\n", $css);
+
+ // preserve empty comment after '>'
+ // http://www.webdevout.net/css-hacks#in_css-selectors
+ $css = preg_replace('@>/\\*\\s*\\*/@', '>/*keep*/', $css);
+
+ // preserve empty comment between property and value
+ // http://css-discuss.incutio.com/?page=BoxModelHack
+ $css = preg_replace('@/\\*\\s*\\*/\\s*:@', '/*keep*/:', $css);
+ $css = preg_replace('@:\\s*/\\*\\s*\\*/@', ':/*keep*/', $css);
+
+ // apply callback to all valid comments (and strip out surrounding ws
+ $css = preg_replace_callback('@\\s*/\\*([\\s\\S]*?)\\*/\\s*@'
+ ,array($this, '_commentCB'), $css);
+
+ // remove ws around { } and last semicolon in declaration block
+ $css = preg_replace('/\\s*{\\s*/', '{', $css);
+ $css = preg_replace('/;?\\s*}\\s*/', '}', $css);
+
+ // remove ws surrounding semicolons
+ $css = preg_replace('/\\s*;\\s*/', ';', $css);
+
+ // remove ws around urls
+ $css = preg_replace('/
+ url\\( # url(
+ \\s*
+ ([^\\)]+?) # 1 = the URL (really just a bunch of non right parenthesis)
+ \\s*
+ \\) # )
+ /x', 'url($1)', $css);
+
+ // remove ws between rules and colons
+ $css = preg_replace('/
+ \\s*
+ ([{;]) # 1 = beginning of block or rule separator
+ \\s*
+ ([\\*_]?[\\w\\-]+) # 2 = property (and maybe IE filter)
+ \\s*
+ :
+ \\s*
+ (\\b|[#\'"]) # 3 = first character of a value
+ /x', '$1$2:$3', $css);
+
+ // remove ws in selectors
+ $css = preg_replace_callback('/
+ (?: # non-capture
+ \\s*
+ [^~>+,\\s]+ # selector part
+ \\s*
+ [,>+~] # combinators
+ )+
+ \\s*
+ [^~>+,\\s]+ # selector part
+ { # open declaration block
+ /x'
+ ,array($this, '_selectorsCB'), $css);
+
+ // minimize hex colors
+ $css = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i'
+ , '$1#$2$3$4$5', $css);
+
+ // remove spaces between font families
+ $css = preg_replace_callback('/font-family:([^;}]+)([;}])/'
+ ,array($this, '_fontFamilyCB'), $css);
+
+ $css = preg_replace('/@import\\s+url/', '@import url', $css);
+
+ // replace any ws involving newlines with a single newline
+ $css = preg_replace('/[ \\t]*\\n+\\s*/', "\n", $css);
+
+ // separate common descendent selectors w/ newlines (to limit line lengths)
+ $css = preg_replace('/([\\w#\\.\\*]+)\\s+([\\w#\\.\\*]+){/', "$1\n$2{", $css);
+
+ // Use newline after 1st numeric value (to limit line lengths).
+ $css = preg_replace('/
+ ((?:padding|margin|border|outline):\\d+(?:px|em)?) # 1 = prop : 1st numeric value
+ \\s+
+ /x'
+ ,"$1\n", $css);
+
+ // prevent triggering IE6 bug: http://www.crankygeek.com/ie6pebug/
+ $css = preg_replace('/:first-l(etter|ine)\\{/', ':first-l$1 {', $css);
+
+ return trim($css);
+ }
+
+ /**
+ * Replace what looks like a set of selectors
+ *
+ * @param array $m regex matches
+ *
+ * @return string
+ */
+ protected function _selectorsCB($m)
+ {
+ // remove ws around the combinators
+ return preg_replace('/\\s*([,>+~])\\s*/', '$1', $m[0]);
+ }
+
+ /**
+ * Process a comment and return a replacement
+ *
+ * @param array $m regex matches
+ *
+ * @return string
+ */
+ protected function _commentCB($m)
+ {
+ $hasSurroundingWs = (trim($m[0]) !== $m[1]);
+ $m = $m[1];
+ // $m is the comment content w/o the surrounding tokens,
+ // but the return value will replace the entire comment.
+ if ($m === 'keep') {
+ return '/**/';
+ }
+ if ($m === '" "') {
+ // component of http://tantek.com/CSS/Examples/midpass.html
+ return '/*" "*/';
+ }
+ if (preg_match('@";\\}\\s*\\}/\\*\\s+@', $m)) {
+ // component of http://tantek.com/CSS/Examples/midpass.html
+ return '/*";}}/* */';
+ }
+ if ($this->_inHack) {
+ // inversion: feeding only to one browser
+ if (preg_match('@
+ ^/ # comment started like /*/
+ \\s*
+ (\\S[\\s\\S]+?) # has at least some non-ws content
+ \\s*
+ /\\* # ends like /*/ or /**/
+ @x', $m, $n)) {
+ // end hack mode after this comment, but preserve the hack and comment content
+ $this->_inHack = false;
+ return "/*/{$n[1]}/**/";
+ }
+ }
+ if (substr($m, -1) === '\\') { // comment ends like \*/
+ // begin hack mode and preserve hack
+ $this->_inHack = true;
+ return '/*\\*/';
+ }
+ if ($m !== '' && $m[0] === '/') { // comment looks like /*/ foo */
+ // begin hack mode and preserve hack
+ $this->_inHack = true;
+ return '/*/*/';
+ }
+ if ($this->_inHack) {
+ // a regular comment ends hack mode but should be preserved
+ $this->_inHack = false;
+ return '/**/';
+ }
+ // Issue 107: if there's any surrounding whitespace, it may be important, so
+ // replace the comment with a single space
+ return $hasSurroundingWs // remove all other comments
+ ? ' '
+ : '';
+ }
+
+ /**
+ * Process a font-family listing and return a replacement
+ *
+ * @param array $m regex matches
+ *
+ * @return string
+ */
+ protected function _fontFamilyCB($m)
+ {
+ $m[1] = preg_replace('/
+ \\s*
+ (
+ "[^"]+" # 1 = family in double qutoes
+ |\'[^\']+\' # or 1 = family in single quotes
+ |[\\w\\-]+ # or 1 = unquoted family
+ )
+ \\s*
+ /x', '$1', $m[1]);
+ return 'font-family:' . $m[1] . $m[2];
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/CSS/UriRewriter.php b/plugins/Minify/extlib/minify/min/lib/Minify/CSS/UriRewriter.php new file mode 100644 index 000000000..824c6bb2a --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/CSS/UriRewriter.php @@ -0,0 +1,270 @@ +<?php +/** + * Class Minify_CSS_UriRewriter + * @package Minify + */ + +/** + * Rewrite file-relative URIs as root-relative in CSS files + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_CSS_UriRewriter { + + /** + * Defines which class to call as part of callbacks, change this + * if you extend Minify_CSS_UriRewriter + * @var string + */ + protected static $className = 'Minify_CSS_UriRewriter'; + + /** + * rewrite() and rewriteRelative() append debugging information here + * @var string + */ + public static $debugText = ''; + + /** + * Rewrite file relative URIs as root relative in CSS files + * + * @param string $css + * + * @param string $currentDir The directory of the current CSS file. + * + * @param string $docRoot The document root of the web site in which + * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']). + * + * @param array $symlinks (default = array()) If the CSS file is stored in + * a symlink-ed directory, provide an array of link paths to + * target paths, where the link paths are within the document root. Because + * paths need to be normalized for this to work, use "//" to substitute + * the doc root in the link paths (the array keys). E.g.: + * <code> + * array('//symlink' => '/real/target/path') // unix + * array('//static' => 'D:\\staticStorage') // Windows + * </code> + * + * @return string + */ + public static function rewrite($css, $currentDir, $docRoot = null, $symlinks = array()) + { + self::$_docRoot = self::_realpath( + $docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT'] + ); + self::$_currentDir = self::_realpath($currentDir); + self::$_symlinks = array(); + + // normalize symlinks + foreach ($symlinks as $link => $target) { + $link = ($link === '//') + ? self::$_docRoot + : str_replace('//', self::$_docRoot . '/', $link); + $link = strtr($link, '/', DIRECTORY_SEPARATOR); + self::$_symlinks[$link] = self::_realpath($target); + } + + self::$debugText .= "docRoot : " . self::$_docRoot . "\n" + . "currentDir : " . self::$_currentDir . "\n"; + if (self::$_symlinks) { + self::$debugText .= "symlinks : " . var_export(self::$_symlinks, 1) . "\n"; + } + self::$debugText .= "\n"; + + $css = self::_trimUrls($css); + + // rewrite + $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/' + ,array(self::$className, '_processUriCB'), $css); + $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/' + ,array(self::$className, '_processUriCB'), $css); + + return $css; + } + + /** + * Prepend a path to relative URIs in CSS files + * + * @param string $css + * + * @param string $path The path to prepend. + * + * @return string + */ + public static function prepend($css, $path) + { + self::$_prependPath = $path; + + $css = self::_trimUrls($css); + + // append + $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/' + ,array(self::$className, '_processUriCB'), $css); + $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/' + ,array(self::$className, '_processUriCB'), $css); + + self::$_prependPath = null; + return $css; + } + + + /** + * @var string directory of this stylesheet + */ + private static $_currentDir = ''; + + /** + * @var string DOC_ROOT + */ + private static $_docRoot = ''; + + /**
+ * @var array directory replacements to map symlink targets back to their
+ * source (within the document root) E.g. '/var/www/symlink' => '/var/realpath'
+ */ + private static $_symlinks = array(); + + /** + * @var string path to prepend + */ + private static $_prependPath = null; + + private static function _trimUrls($css) + { + return preg_replace('/ + url\\( # url( + \\s* + ([^\\)]+?) # 1 = URI (assuming does not contain ")") + \\s* + \\) # ) + /x', 'url($1)', $css); + } + + private static function _processUriCB($m) + { + // $m matched either '/@import\\s+([\'"])(.*?)[\'"]/' or '/url\\(\\s*([^\\)\\s]+)\\s*\\)/' + $isImport = ($m[0][0] === '@'); + // determine URI and the quote character (if any) + if ($isImport) { + $quoteChar = $m[1]; + $uri = $m[2]; + } else { + // $m[1] is either quoted or not + $quoteChar = ($m[1][0] === "'" || $m[1][0] === '"') + ? $m[1][0] + : ''; + $uri = ($quoteChar === '') + ? $m[1] + : substr($m[1], 1, strlen($m[1]) - 2); + } + // analyze URI + if ('/' !== $uri[0] // root-relative + && false === strpos($uri, '//') // protocol (non-data) + && 0 !== strpos($uri, 'data:') // data protocol + ) { + // URI is file-relative: rewrite depending on options + $uri = (self::$_prependPath !== null) + ? (self::$_prependPath . $uri) + : self::rewriteRelative($uri, self::$_currentDir, self::$_docRoot, self::$_symlinks); + } + return $isImport + ? "@import {$quoteChar}{$uri}{$quoteChar}" + : "url({$quoteChar}{$uri}{$quoteChar})"; + } + + /** + * Rewrite a file relative URI as root relative + * + * <code> + * Minify_CSS_UriRewriter::rewriteRelative( + * '../img/hello.gif' + * , '/home/user/www/css' // path of CSS file + * , '/home/user/www' // doc root + * ); + * // returns '/img/hello.gif' + * + * // example where static files are stored in a symlinked directory + * Minify_CSS_UriRewriter::rewriteRelative( + * 'hello.gif' + * , '/var/staticFiles/theme' + * , '/home/user/www' + * , array('/home/user/www/static' => '/var/staticFiles') + * ); + * // returns '/static/theme/hello.gif' + * </code> + * + * @param string $uri file relative URI + * + * @param string $realCurrentDir realpath of the current file's directory. + * + * @param string $realDocRoot realpath of the site document root. + * + * @param array $symlinks (default = array()) If the file is stored in + * a symlink-ed directory, provide an array of link paths to + * real target paths, where the link paths "appear" to be within the document + * root. E.g.: + * <code> + * array('/home/foo/www/not/real/path' => '/real/target/path') // unix + * array('C:\\htdocs\\not\\real' => 'D:\\real\\target\\path') // Windows + * </code> + * + * @return string + */ + public static function rewriteRelative($uri, $realCurrentDir, $realDocRoot, $symlinks = array()) + { + // prepend path with current dir separator (OS-independent) + $path = strtr($realCurrentDir, '/', DIRECTORY_SEPARATOR) + . DIRECTORY_SEPARATOR . strtr($uri, '/', DIRECTORY_SEPARATOR); + + self::$debugText .= "file-relative URI : {$uri}\n" + . "path prepended : {$path}\n"; + + // "unresolve" a symlink back to doc root
+ foreach ($symlinks as $link => $target) {
+ if (0 === strpos($path, $target)) {
+ // replace $target with $link
+ $path = $link . substr($path, strlen($target)); + + self::$debugText .= "symlink unresolved : {$path}\n";
+ + break;
+ }
+ } + // strip doc root + $path = substr($path, strlen($realDocRoot)); + + self::$debugText .= "docroot stripped : {$path}\n"; + + // fix to root-relative URI + + $uri = strtr($path, '/\\', '//'); + + // remove /./ and /../ where possible + $uri = str_replace('/./', '/', $uri); + // inspired by patch from Oleg Cherniy + do { + $uri = preg_replace('@/[^/]+/\\.\\./@', '/', $uri, 1, $changed); + } while ($changed); + + self::$debugText .= "traversals removed : {$uri}\n\n"; + + return $uri; + } + + /** + * Get realpath with any trailing slash removed. If realpath() fails, + * just remove the trailing slash. + * + * @param string $path + * + * @return mixed path with no trailing slash + */ + protected static function _realpath($path) + { + $realPath = realpath($path); + if ($realPath !== false) { + $path = $realPath; + } + return rtrim($path, '/\\'); + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Cache/APC.php b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/APC.php new file mode 100644 index 000000000..ca84d2998 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/APC.php @@ -0,0 +1,130 @@ +<?php +/** + * Class Minify_Cache_APC + * @package Minify + */ + +/** + * APC-based cache class for Minify + * + * <code> + * Minify::setCache(new Minify_Cache_APC()); + * </code> + * + * @package Minify + * @author Chris Edwards + **/ +class Minify_Cache_APC { + + /** + * Create a Minify_Cache_APC object, to be passed to + * Minify::setCache(). + * + * + * @param int $expire seconds until expiration (default = 0 + * meaning the item will not get an expiration date) + * + * @return null + */ + public function __construct($expire = 0) + { + $this->_exp = $expire; + } + + /** + * Write data to cache. + * + * @param string $id cache id + * + * @param string $data + * + * @return bool success + */ + public function store($id, $data) + { + return apc_store($id, "{$_SERVER['REQUEST_TIME']}|{$data}", $this->_exp); + } + + /** + * Get the size of a cache entry + * + * @param string $id cache id + * + * @return int size in bytes + */ + public function getSize($id) + { + return $this->_fetch($id) + ? strlen($this->_data) + : false; + } + + /** + * Does a valid cache entry exist? + * + * @param string $id cache id + * + * @param int $srcMtime mtime of the original source file(s) + * + * @return bool exists + */ + public function isValid($id, $srcMtime) + { + return ($this->_fetch($id) && ($this->_lm >= $srcMtime)); + } + + /** + * Send the cached content to output + * + * @param string $id cache id + */ + public function display($id) + { + echo $this->_fetch($id) + ? $this->_data + : ''; + } + + /** + * Fetch the cached content + * + * @param string $id cache id + * + * @return string + */ + public function fetch($id) + { + return $this->_fetch($id) + ? $this->_data + : ''; + } + + private $_exp = null; + + // cache of most recently fetched id + private $_lm = null; + private $_data = null; + private $_id = null; + + /** + * Fetch data and timestamp from apc, store in instance + * + * @param string $id + * + * @return bool success + */ + private function _fetch($id) + { + if ($this->_id === $id) { + return true; + } + $ret = apc_fetch($id); + if (false === $ret) { + $this->_id = null; + return false; + } + list($this->_lm, $this->_data) = explode('|', $ret, 2); + $this->_id = $id; + return true; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Cache/File.php b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/File.php new file mode 100644 index 000000000..8744a7e04 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/File.php @@ -0,0 +1,125 @@ +<?php +/** + * Class Minify_Cache_File + * @package Minify + */ + +class Minify_Cache_File { + + public function __construct($path = '', $fileLocking = false) + { + if (! $path) { + require_once 'Solar/Dir.php'; + $path = rtrim(Solar_Dir::tmp(), DIRECTORY_SEPARATOR); + }
+ $this->_locking = $fileLocking; + $this->_path = $path; + } + + /** + * Write data to cache. + * + * @param string $id cache id (e.g. a filename) + * + * @param string $data + * + * @return bool success + */ + public function store($id, $data) + { + $flag = $this->_locking
+ ? LOCK_EX
+ : null;
+ if (is_file($this->_path . '/' . $id)) {
+ @unlink($this->_path . '/' . $id);
+ }
+ if (! @file_put_contents($this->_path . '/' . $id, $data, $flag)) {
+ return false;
+ } + // write control
+ if ($data !== $this->fetch($id)) {
+ @unlink($file);
+ return false;
+ }
+ return true; + } + + /** + * Get the size of a cache entry + * + * @param string $id cache id (e.g. a filename) + * + * @return int size in bytes + */ + public function getSize($id) + { + return filesize($this->_path . '/' . $id); + } + + /** + * Does a valid cache entry exist? + * + * @param string $id cache id (e.g. a filename) + * + * @param int $srcMtime mtime of the original source file(s) + * + * @return bool exists + */ + public function isValid($id, $srcMtime) + { + $file = $this->_path . '/' . $id; + return (is_file($file) && (filemtime($file) >= $srcMtime)); + } + + /** + * Send the cached content to output + * + * @param string $id cache id (e.g. a filename) + */ + public function display($id) + { + if ($this->_locking) {
+ $fp = fopen($this->_path . '/' . $id, 'rb');
+ flock($fp, LOCK_SH);
+ fpassthru($fp);
+ flock($fp, LOCK_UN);
+ fclose($fp);
+ } else {
+ readfile($this->_path . '/' . $id);
+ }
+ } + + /** + * Fetch the cached content + * + * @param string $id cache id (e.g. a filename) + * + * @return string + */ + public function fetch($id) + { + if ($this->_locking) {
+ $fp = fopen($this->_path . '/' . $id, 'rb');
+ flock($fp, LOCK_SH);
+ $ret = stream_get_contents($fp);
+ flock($fp, LOCK_UN);
+ fclose($fp);
+ return $ret;
+ } else {
+ return file_get_contents($this->_path . '/' . $id);
+ } + } + + /** + * Fetch the cache path used + * + * @return string + */ + public function getPath() + { + return $this->_path; + } + + private $_path = null; + private $_locking = null;
+} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Cache/Memcache.php b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/Memcache.php new file mode 100644 index 000000000..2b81e7a32 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/Memcache.php @@ -0,0 +1,137 @@ +<?php +/** + * Class Minify_Cache_Memcache + * @package Minify + */ + +/** + * Memcache-based cache class for Minify + * + * <code> + * // fall back to disk caching if memcache can't connect + * $memcache = new Memcache; + * if ($memcache->connect('localhost', 11211)) { + * Minify::setCache(new Minify_Cache_Memcache($memcache)); + * } else { + * Minify::setCache(); + * } + * </code> + **/ +class Minify_Cache_Memcache { + + /** + * Create a Minify_Cache_Memcache object, to be passed to + * Minify::setCache(). + * + * @param Memcache $memcache already-connected instance + * + * @param int $expire seconds until expiration (default = 0 + * meaning the item will not get an expiration date) + * + * @return null + */ + public function __construct($memcache, $expire = 0) + { + $this->_mc = $memcache; + $this->_exp = $expire; + } + + /** + * Write data to cache. + * + * @param string $id cache id + * + * @param string $data + * + * @return bool success + */ + public function store($id, $data) + { + return $this->_mc->set($id, "{$_SERVER['REQUEST_TIME']}|{$data}", 0, $this->_exp); + } + + + /** + * Get the size of a cache entry + * + * @param string $id cache id + * + * @return int size in bytes + */ + public function getSize($id) + { + return $this->_fetch($id) + ? strlen($this->_data) + : false; + } + + /** + * Does a valid cache entry exist? + * + * @param string $id cache id + * + * @param int $srcMtime mtime of the original source file(s) + * + * @return bool exists + */ + public function isValid($id, $srcMtime) + { + return ($this->_fetch($id) && ($this->_lm >= $srcMtime)); + } + + /** + * Send the cached content to output + * + * @param string $id cache id + */ + public function display($id) + { + echo $this->_fetch($id) + ? $this->_data + : ''; + } + + /** + * Fetch the cached content + * + * @param string $id cache id + * + * @return string + */ + public function fetch($id) + { + return $this->_fetch($id) + ? $this->_data + : ''; + } + + private $_mc = null; + private $_exp = null; + + // cache of most recently fetched id + private $_lm = null; + private $_data = null; + private $_id = null; + + /** + * Fetch data and timestamp from memcache, store in instance + * + * @param string $id + * + * @return bool success + */ + private function _fetch($id) + { + if ($this->_id === $id) { + return true; + } + $ret = $this->_mc->get($id); + if (false === $ret) { + $this->_id = null; + return false; + } + list($this->_lm, $this->_data) = explode('|', $ret, 2); + $this->_id = $id; + return true; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/CommentPreserver.php b/plugins/Minify/extlib/minify/min/lib/Minify/CommentPreserver.php new file mode 100644 index 000000000..f56eb3461 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/CommentPreserver.php @@ -0,0 +1,90 @@ +<?php +/** + * Class Minify_CommentPreserver + * @package Minify + */ + +/** + * Process a string in pieces preserving C-style comments that begin with "/*!" + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_CommentPreserver { + + /** + * String to be prepended to each preserved comment + * + * @var string + */ + public static $prepend = "\n"; + + /** + * String to be appended to each preserved comment + * + * @var string + */ + public static $append = "\n"; + + /** + * Process a string outside of C-style comments that begin with "/*!" + * + * On each non-empty string outside these comments, the given processor + * function will be called. The first "!" will be removed from the + * preserved comments, and the comments will be surrounded by + * Minify_CommentPreserver::$preprend and Minify_CommentPreserver::$append. + * + * @param string $content + * @param callback $processor function + * @param array $args array of extra arguments to pass to the processor + * function (default = array()) + * @return string + */ + public static function process($content, $processor, $args = array()) + { + $ret = ''; + while (true) { + list($beforeComment, $comment, $afterComment) = self::_nextComment($content); + if ('' !== $beforeComment) { + $callArgs = $args; + array_unshift($callArgs, $beforeComment); + $ret .= call_user_func_array($processor, $callArgs); + } + if (false === $comment) { + break; + } + $ret .= $comment; + $content = $afterComment; + } + return $ret; + } + + /** + * Extract comments that YUI Compressor preserves. + * + * @param string $in input + * + * @return array 3 elements are returned. If a YUI comment is found, the + * 2nd element is the comment and the 1st and 2nd are the surrounding + * strings. If no comment is found, the entire string is returned as the + * 1st element and the other two are false. + */ + private static function _nextComment($in) + { + if ( + false === ($start = strpos($in, '/*!')) + || false === ($end = strpos($in, '*/', $start + 3)) + ) { + return array($in, false, false); + } + $ret = array( + substr($in, 0, $start) + ,self::$prepend . '/*' . substr($in, $start + 3, $end - $start - 1) . self::$append + ); + $endChars = (strlen($in) - $end - 2); + $ret[] = (0 === $endChars) + ? '' + : substr($in, -$endChars); + return $ret; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Base.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Base.php new file mode 100644 index 000000000..84889b3f0 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Base.php @@ -0,0 +1,202 @@ +<?php +/** + * Class Minify_Controller_Base + * @package Minify + */ + +/** + * Base class for Minify controller + * + * The controller class validates a request and uses it to create sources + * for minification and set options like contentType. It's also responsible + * for loading minifier code upon request. + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +abstract class Minify_Controller_Base { + + /** + * Setup controller sources and set an needed options for Minify::source + * + * You must override this method in your subclass controller to set + * $this->sources. If the request is NOT valid, make sure $this->sources + * is left an empty array. Then strip any controller-specific options from + * $options and return it. To serve files, $this->sources must be an array of + * Minify_Source objects. + * + * @param array $options controller and Minify options + * + * return array $options Minify::serve options + */ + abstract public function setupSources($options); + + /** + * Get default Minify options for this controller. + * + * Override in subclass to change defaults + * + * @return array options for Minify + */ + public function getDefaultMinifyOptions() { + return array( + 'isPublic' => true + ,'encodeOutput' => function_exists('gzdeflate') + ,'encodeMethod' => null // determine later + ,'encodeLevel' => 9 + ,'minifierOptions' => array() // no minifier options + ,'contentTypeCharset' => 'utf-8' + ,'maxAge' => 1800 // 30 minutes + ,'rewriteCssUris' => true + ,'bubbleCssImports' => false + ,'quiet' => false // serve() will send headers and output + ,'debug' => false + + // if you override this, the response code MUST be directly after + // the first space. + ,'badRequestHeader' => 'HTTP/1.0 400 Bad Request' + + // callback function to see/modify content of all sources + ,'postprocessor' => null + // file to require to load preprocessor + ,'postprocessorRequire' => null + ); + } + + /** + * Get default minifiers for this controller. + * + * Override in subclass to change defaults + * + * @return array minifier callbacks for common types + */ + public function getDefaultMinifers() { + $ret[Minify::TYPE_JS] = array('JSMin', 'minify'); + $ret[Minify::TYPE_CSS] = array('Minify_CSS', 'minify'); + $ret[Minify::TYPE_HTML] = array('Minify_HTML', 'minify'); + return $ret; + } + + /** + * Load any code necessary to execute the given minifier callback. + * + * The controller is responsible for loading minification code on demand + * via this method. This built-in function will only load classes for + * static method callbacks where the class isn't already defined. It uses + * the PEAR convention, so, given array('Jimmy_Minifier', 'minCss'), this + * function will include 'Jimmy/Minifier.php'. + * + * If you need code loaded on demand and this doesn't suit you, you'll need + * to override this function in your subclass. + * @see Minify_Controller_Page::loadMinifier() + * + * @param callback $minifierCallback callback of minifier function + * + * @return null + */ + public function loadMinifier($minifierCallback) + { + if (is_array($minifierCallback) + && is_string($minifierCallback[0]) + && !class_exists($minifierCallback[0], false)) { + + require str_replace('_', '/', $minifierCallback[0]) . '.php'; + } + } + + /** + * Is a user-given file within an allowable directory, existing, + * and having an extension js/css/html/txt ? + * + * This is a convenience function for controllers that have to accept + * user-given paths + * + * @param string $file full file path (already processed by realpath()) + * + * @param array $safeDirs directories where files are safe to serve. Files can also + * be in subdirectories of these directories. + * + * @return bool file is safe + */ + public static function _fileIsSafe($file, $safeDirs) + { + $pathOk = false; + foreach ((array)$safeDirs as $safeDir) { + if (strpos($file, $safeDir) === 0) { + $pathOk = true; + break; + } + } + $base = basename($file); + if (! $pathOk || ! is_file($file) || $base[0] === '.') { + return false; + } + list($revExt) = explode('.', strrev($base)); + return in_array(strrev($revExt), array('js', 'css', 'html', 'txt')); + } + + /** + * @var array instances of Minify_Source, which provide content and + * any individual minification needs. + * + * @see Minify_Source + */ + public $sources = array(); + + /** + * Mix in default controller options with user-given options + * + * @param array $options user options + * + * @return array mixed options + */ + public final function mixInDefaultOptions($options) + { + $ret = array_merge( + $this->getDefaultMinifyOptions(), $options + ); + if (! isset($options['minifiers'])) { + $options['minifiers'] = array(); + } + $ret['minifiers'] = array_merge( + $this->getDefaultMinifers(), $options['minifiers'] + ); + return $ret; + } + + /** + * Analyze sources (if there are any) and set $options 'contentType' + * and 'lastModifiedTime' if they already aren't. + * + * @param array $options options for Minify + * + * @return array options for Minify + */ + public final function analyzeSources($options = array()) + { + if ($this->sources) { + if (! isset($options['contentType'])) { + $options['contentType'] = Minify_Source::getContentType($this->sources); + } + // last modified is needed for caching, even if setExpires is set + if (! isset($options['lastModifiedTime'])) { + $max = 0; + foreach ($this->sources as $source) { + $max = max($source->lastModified, $max); + } + $options['lastModifiedTime'] = $max; + } + } + return $options; + } + + /** + * Send message to the Minify logger + * @param string $msg + * @return null + */ + protected function log($msg) { + require_once 'Minify/Logger.php'; + Minify_Logger::log($msg); + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Files.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Files.php new file mode 100644 index 000000000..83f028adf --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Files.php @@ -0,0 +1,78 @@ +<?php +/** + * Class Minify_Controller_Files + * @package Minify + */ + +require_once 'Minify/Controller/Base.php'; + +/** + * Controller class for minifying a set of files + * + * E.g. the following would serve the minified Javascript for a site + * <code> + * Minify::serve('Files', array( + * 'files' => array( + * '//js/jquery.js' + * ,'//js/plugins.js' + * ,'/home/username/file.js' + * ) + * )); + * </code> + * + * As a shortcut, the controller will replace "//" at the beginning + * of a filename with $_SERVER['DOCUMENT_ROOT'] . '/'. + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_Controller_Files extends Minify_Controller_Base { + + /** + * Set up file sources + * + * @param array $options controller and Minify options + * @return array Minify options + * + * Controller options: + * + * 'files': (required) array of complete file paths, or a single path + */ + public function setupSources($options) { + // strip controller options + + $files = $options['files']; + // if $files is a single object, casting will break it + if (is_object($files)) { + $files = array($files); + } elseif (! is_array($files)) { + $files = (array)$files; + } + unset($options['files']); + + $sources = array(); + foreach ($files as $file) { + if ($file instanceof Minify_Source) { + $sources[] = $file; + continue; + } + if (0 === strpos($file, '//')) { + $file = $_SERVER['DOCUMENT_ROOT'] . substr($file, 1); + } + $realPath = realpath($file); + if (is_file($realPath)) { + $sources[] = new Minify_Source(array( + 'filepath' => $realPath + )); + } else { + $this->log("The path \"{$file}\" could not be found (or was not a file)"); + return $options; + } + } + if ($sources) { + $this->sources = $sources; + } + return $options; + } +} + diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Groups.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Groups.php new file mode 100644 index 000000000..1ac57703a --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Groups.php @@ -0,0 +1,94 @@ +<?php +/** + * Class Minify_Controller_Groups + * @package Minify + */ + +require_once 'Minify/Controller/Base.php'; + +/** + * Controller class for serving predetermined groups of minimized sets, selected + * by PATH_INFO + * + * <code> + * Minify::serve('Groups', array( + * 'groups' => array( + * 'css' => array('//css/type.css', '//css/layout.css') + * ,'js' => array('//js/jquery.js', '//js/site.js') + * ) + * )); + * </code> + * + * If the above code were placed in /serve.php, it would enable the URLs + * /serve.php/js and /serve.php/css + * + * As a shortcut, the controller will replace "//" at the beginning + * of a filename with $_SERVER['DOCUMENT_ROOT'] . '/'. + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_Controller_Groups extends Minify_Controller_Base { + + /** + * Set up groups of files as sources + * + * @param array $options controller and Minify options + * @return array Minify options + * + * Controller options: + * + * 'groups': (required) array mapping PATH_INFO strings to arrays + * of complete file paths. @see Minify_Controller_Groups + */ + public function setupSources($options) { + // strip controller options + $groups = $options['groups']; + unset($options['groups']); + + // mod_fcgid places PATH_INFO in ORIG_PATH_INFO + $pi = isset($_SERVER['ORIG_PATH_INFO']) + ? substr($_SERVER['ORIG_PATH_INFO'], 1) + : (isset($_SERVER['PATH_INFO']) + ? substr($_SERVER['PATH_INFO'], 1) + : false + ); + if (false === $pi || ! isset($groups[$pi])) { + // no PATH_INFO or not a valid group + $this->log("Missing PATH_INFO or no group set for \"$pi\""); + return $options; + } + $sources = array(); + + $files = $groups[$pi]; + // if $files is a single object, casting will break it + if (is_object($files)) { + $files = array($files); + } elseif (! is_array($files)) { + $files = (array)$files; + } + foreach ($files as $file) { + if ($file instanceof Minify_Source) { + $sources[] = $file; + continue; + } + if (0 === strpos($file, '//')) { + $file = $_SERVER['DOCUMENT_ROOT'] . substr($file, 1); + } + $realPath = realpath($file); + if (is_file($realPath)) { + $sources[] = new Minify_Source(array( + 'filepath' => $realPath + )); + } else { + $this->log("The path \"{$file}\" could not be found (or was not a file)"); + return $options; + } + } + if ($sources) { + $this->sources = $sources; + } + return $options; + } +} + diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/MinApp.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/MinApp.php new file mode 100644 index 000000000..9582d292c --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/MinApp.php @@ -0,0 +1,132 @@ +<?php +/** + * Class Minify_Controller_MinApp + * @package Minify + */ + +require_once 'Minify/Controller/Base.php'; + +/** + * Controller class for requests to /min/index.php + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_Controller_MinApp extends Minify_Controller_Base { + + /** + * Set up groups of files as sources + * + * @param array $options controller and Minify options + * @return array Minify options + * + */ + public function setupSources($options) { + // filter controller options + $cOptions = array_merge( + array( + 'allowDirs' => '//' + ,'groupsOnly' => false + ,'groups' => array() + ,'maxFiles' => 10 + ) + ,(isset($options['minApp']) ? $options['minApp'] : array()) + ); + unset($options['minApp']); + $sources = array(); + if (isset($_GET['g'])) { + // try groups + if (! isset($cOptions['groups'][$_GET['g']])) { + $this->log("A group configuration for \"{$_GET['g']}\" was not set"); + return $options; + } + + $files = $cOptions['groups'][$_GET['g']]; + // if $files is a single object, casting will break it + if (is_object($files)) { + $files = array($files); + } elseif (! is_array($files)) { + $files = (array)$files; + } + foreach ($files as $file) { + if ($file instanceof Minify_Source) { + $sources[] = $file; + continue; + } + if (0 === strpos($file, '//')) { + $file = $_SERVER['DOCUMENT_ROOT'] . substr($file, 1); + } + $file = realpath($file); + if (is_file($file)) { + $sources[] = new Minify_Source(array( + 'filepath' => $file + )); + } else { + $this->log("The path \"{$file}\" could not be found (or was not a file)"); + return $options; + } + } + } elseif (! $cOptions['groupsOnly'] && isset($_GET['f'])) { + // try user files + // The following restrictions are to limit the URLs that minify will + // respond to. Ideally there should be only one way to reference a file. + if (// verify at least one file, files are single comma separated, + // and are all same extension + ! preg_match('/^[^,]+\\.(css|js)(?:,[^,]+\\.\\1)*$/', $_GET['f']) + // no "//" + || strpos($_GET['f'], '//') !== false + // no "\" + || strpos($_GET['f'], '\\') !== false + // no "./" + || preg_match('/(?:^|[^\\.])\\.\\//', $_GET['f']) + ) { + $this->log("GET param 'f' invalid (see MinApp.php line 63)"); + return $options; + } + $files = explode(',', $_GET['f']); + if (count($files) > $cOptions['maxFiles'] || $files != array_unique($files)) { + $this->log("Too many or duplicate files specified"); + return $options; + } + if (isset($_GET['b'])) { + // check for validity + if (preg_match('@^[^/]+(?:/[^/]+)*$@', $_GET['b']) + && false === strpos($_GET['b'], '..') + && $_GET['b'] !== '.') { + // valid base + $base = "/{$_GET['b']}/"; + } else { + $this->log("GET param 'b' invalid (see MinApp.php line 84)"); + return $options; + } + } else { + $base = '/'; + } + $allowDirs = array(); + foreach ((array)$cOptions['allowDirs'] as $allowDir) { + $allowDirs[] = realpath(str_replace('//', $_SERVER['DOCUMENT_ROOT'] . '/', $allowDir)); + } + foreach ($files as $file) { + $path = $_SERVER['DOCUMENT_ROOT'] . $base . $file; + $file = realpath($path); + if (false === $file) { + $this->log("Path \"{$path}\" failed realpath()"); + return $options; + } elseif (! parent::_fileIsSafe($file, $allowDirs)) { + $this->log("Path \"{$path}\" failed Minify_Controller_Base::_fileIsSafe()"); + return $options; + } else { + $sources[] = new Minify_Source(array( + 'filepath' => $file + )); + } + } + } + if ($sources) { + $this->sources = $sources; + } else { + $this->log("No sources to serve"); + } + return $options; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Page.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Page.php new file mode 100644 index 000000000..fa4599abd --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Page.php @@ -0,0 +1,82 @@ +<?php +/** + * Class Minify_Controller_Page + * @package Minify + */ + +require_once 'Minify/Controller/Base.php'; + +/** + * Controller class for serving a single HTML page + * + * @link http://code.google.com/p/minify/source/browse/trunk/web/examples/1/index.php#59 + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_Controller_Page extends Minify_Controller_Base { + + /** + * Set up source of HTML content + * + * @param array $options controller and Minify options + * @return array Minify options + * + * Controller options: + * + * 'content': (required) HTML markup + * + * 'id': (required) id of page (string for use in server-side caching) + * + * 'lastModifiedTime': timestamp of when this content changed. This + * is recommended to allow both server and client-side caching. + * + * 'minifyAll': should all CSS and Javascript blocks be individually + * minified? (default false) + * + * @todo Add 'file' option to read HTML file. + */ + public function setupSources($options) { + if (isset($options['file'])) { + $sourceSpec = array( + 'filepath' => $options['file'] + ); + } else { + // strip controller options + $sourceSpec = array( + 'content' => $options['content'] + ,'id' => $options['id'] + ); + unset($options['content'], $options['id']); + } + if (isset($options['minifyAll'])) { + // this will be the 2nd argument passed to Minify_HTML::minify() + $sourceSpec['minifyOptions'] = array( + 'cssMinifier' => array('Minify_CSS', 'minify') + ,'jsMinifier' => array('JSMin', 'minify') + ); + $this->_loadCssJsMinifiers = true; + unset($options['minifyAll']); + } + $this->sources[] = new Minify_Source($sourceSpec); + + $options['contentType'] = Minify::TYPE_HTML; + return $options; + } + + protected $_loadCssJsMinifiers = false; + + /** + * @see Minify_Controller_Base::loadMinifier() + */ + public function loadMinifier($minifierCallback) + { + if ($this->_loadCssJsMinifiers) { + // Minify will not call for these so we must manually load + // them when Minify/HTML.php is called for. + require_once 'Minify/CSS.php'; + require_once 'JSMin.php'; + } + parent::loadMinifier($minifierCallback); // load Minify/HTML.php + } +} + diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php new file mode 100644 index 000000000..1861aabc1 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php @@ -0,0 +1,118 @@ +<?php +/** + * Class Minify_Controller_Version1 + * @package Minify + */ + +require_once 'Minify/Controller/Base.php'; + +/** + * Controller class for emulating version 1 of minify.php + * + * <code> + * Minify::serve('Version1'); + * </code> + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_Controller_Version1 extends Minify_Controller_Base { + + /** + * Set up groups of files as sources + * + * @param array $options controller and Minify options + * @return array Minify options + * + */ + public function setupSources($options) { + self::_setupDefines(); + if (MINIFY_USE_CACHE) { + $cacheDir = defined('MINIFY_CACHE_DIR') + ? MINIFY_CACHE_DIR + : ''; + Minify::setCache($cacheDir); + } + $options['badRequestHeader'] = 'HTTP/1.0 404 Not Found'; + $options['contentTypeCharset'] = MINIFY_ENCODING; + + // The following restrictions are to limit the URLs that minify will + // respond to. Ideally there should be only one way to reference a file. + if (! isset($_GET['files']) + // verify at least one file, files are single comma separated, + // and are all same extension + || ! preg_match('/^[^,]+\\.(css|js)(,[^,]+\\.\\1)*$/', $_GET['files'], $m) + // no "//" (makes URL rewriting easier) + || strpos($_GET['files'], '//') !== false + // no "\" + || strpos($_GET['files'], '\\') !== false + // no "./" + || preg_match('/(?:^|[^\\.])\\.\\//', $_GET['files']) + ) { + return $options; + } + $extension = $m[1]; + + $files = explode(',', $_GET['files']); + if (count($files) > MINIFY_MAX_FILES) { + return $options; + } + + // strings for prepending to relative/absolute paths + $prependRelPaths = dirname($_SERVER['SCRIPT_FILENAME']) + . DIRECTORY_SEPARATOR; + $prependAbsPaths = $_SERVER['DOCUMENT_ROOT']; + + $sources = array(); + $goodFiles = array(); + $hasBadSource = false; + + $allowDirs = isset($options['allowDirs']) + ? $options['allowDirs'] + : MINIFY_BASE_DIR; + + foreach ($files as $file) { + // prepend appropriate string for abs/rel paths + $file = ($file[0] === '/' ? $prependAbsPaths : $prependRelPaths) . $file; + // make sure a real file! + $file = realpath($file); + // don't allow unsafe or duplicate files + if (parent::_fileIsSafe($file, $allowDirs) + && !in_array($file, $goodFiles)) + { + $goodFiles[] = $file; + $srcOptions = array( + 'filepath' => $file + ); + $this->sources[] = new Minify_Source($srcOptions); + } else { + $hasBadSource = true; + break; + } + } + if ($hasBadSource) { + $this->sources = array(); + } + if (! MINIFY_REWRITE_CSS_URLS) { + $options['rewriteCssUris'] = false; + } + return $options; + } + + private static function _setupDefines() + { + $defaults = array( + 'MINIFY_BASE_DIR' => realpath($_SERVER['DOCUMENT_ROOT']) + ,'MINIFY_ENCODING' => 'utf-8' + ,'MINIFY_MAX_FILES' => 16 + ,'MINIFY_REWRITE_CSS_URLS' => true + ,'MINIFY_USE_CACHE' => true + ); + foreach ($defaults as $const => $val) { + if (! defined($const)) { + define($const, $val); + } + } + } +} + diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/HTML.php b/plugins/Minify/extlib/minify/min/lib/Minify/HTML.php new file mode 100644 index 000000000..fb5c1e982 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/HTML.php @@ -0,0 +1,245 @@ +<?php +/** + * Class Minify_HTML + * @package Minify + */ + +/** + * Compress HTML + * + * This is a heavy regex-based removal of whitespace, unnecessary comments and + * tokens. IE conditional comments are preserved. There are also options to have + * STYLE and SCRIPT blocks compressed by callback functions. + * + * A test suite is available. + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_HTML { + + /** + * "Minify" an HTML page + * + * @param string $html + * + * @param array $options + * + * 'cssMinifier' : (optional) callback function to process content of STYLE + * elements. + * + * 'jsMinifier' : (optional) callback function to process content of SCRIPT + * elements. Note: the type attribute is ignored. + * + * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If + * unset, minify will sniff for an XHTML doctype. + * + * @return string + */ + public static function minify($html, $options = array()) { + $min = new Minify_HTML($html, $options); + return $min->process(); + } + + + /** + * Create a minifier object + * + * @param string $html + * + * @param array $options + * + * 'cssMinifier' : (optional) callback function to process content of STYLE + * elements. + * + * 'jsMinifier' : (optional) callback function to process content of SCRIPT + * elements. Note: the type attribute is ignored. + * + * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If + * unset, minify will sniff for an XHTML doctype. + * + * @return null + */ + public function __construct($html, $options = array()) + { + $this->_html = str_replace("\r\n", "\n", trim($html)); + if (isset($options['xhtml'])) { + $this->_isXhtml = (bool)$options['xhtml']; + } + if (isset($options['cssMinifier'])) { + $this->_cssMinifier = $options['cssMinifier']; + } + if (isset($options['jsMinifier'])) { + $this->_jsMinifier = $options['jsMinifier']; + } + } + + + /** + * Minify the markeup given in the constructor + * + * @return string + */ + public function process() + { + if ($this->_isXhtml === null) { + $this->_isXhtml = (false !== strpos($this->_html, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML')); + } + + $this->_replacementHash = 'MINIFYHTML' . md5($_SERVER['REQUEST_TIME']); + $this->_placeholders = array(); + + // replace SCRIPTs (and minify) with placeholders + $this->_html = preg_replace_callback( + '/(\\s*)(<script\\b[^>]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i' + ,array($this, '_removeScriptCB') + ,$this->_html); + + // replace STYLEs (and minify) with placeholders + $this->_html = preg_replace_callback( + '/\\s*(<style\\b[^>]*?>)([\\s\\S]*?)<\\/style>\\s*/i' + ,array($this, '_removeStyleCB') + ,$this->_html); + + // remove HTML comments (not containing IE conditional comments). + $this->_html = preg_replace_callback( + '/<!--([\\s\\S]*?)-->/' + ,array($this, '_commentCB') + ,$this->_html); + + // replace PREs with placeholders + $this->_html = preg_replace_callback('/\\s*(<pre\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/i' + ,array($this, '_removePreCB') + ,$this->_html); + + // replace TEXTAREAs with placeholders + $this->_html = preg_replace_callback( + '/\\s*(<textarea\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/i' + ,array($this, '_removeTextareaCB') + ,$this->_html); + + // trim each line. + // @todo take into account attribute values that span multiple lines. + $this->_html = preg_replace('/^\\s+|\\s+$/m', '', $this->_html); + + // remove ws around block/undisplayed elements + $this->_html = preg_replace('/\\s+(<\\/?(?:area|base(?:font)?|blockquote|body' + .'|caption|center|cite|col(?:group)?|dd|dir|div|dl|dt|fieldset|form' + .'|frame(?:set)?|h[1-6]|head|hr|html|legend|li|link|map|menu|meta' + .'|ol|opt(?:group|ion)|p|param|t(?:able|body|head|d|h||r|foot|itle)' + .'|ul)\\b[^>]*>)/i', '$1', $this->_html); + + // remove ws outside of all elements + $this->_html = preg_replace_callback( + '/>([^<]+)</' + ,array($this, '_outsideTagCB') + ,$this->_html); + + // use newlines before 1st attribute in open tags (to limit line lengths) + $this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $this->_html); + + // fill placeholders + $this->_html = str_replace( + array_keys($this->_placeholders) + ,array_values($this->_placeholders) + ,$this->_html + ); + return $this->_html; + } + + protected function _commentCB($m) + { + return (0 === strpos($m[1], '[') || false !== strpos($m[1], '<![')) + ? $m[0] + : ''; + } + + protected function _reservePlace($content) + { + $placeholder = '%' . $this->_replacementHash . count($this->_placeholders) . '%'; + $this->_placeholders[$placeholder] = $content; + return $placeholder; + } + + protected $_isXhtml = null; + protected $_replacementHash = null; + protected $_placeholders = array(); + protected $_cssMinifier = null; + protected $_jsMinifier = null; + + protected function _outsideTagCB($m) + { + return '>' . preg_replace('/^\\s+|\\s+$/', ' ', $m[1]) . '<'; + } + + protected function _removePreCB($m) + { + return $this->_reservePlace($m[1]); + } + + protected function _removeTextareaCB($m) + { + return $this->_reservePlace($m[1]); + } + + protected function _removeStyleCB($m) + { + $openStyle = $m[1]; + $css = $m[2]; + // remove HTML comments + $css = preg_replace('/(?:^\\s*<!--|-->\\s*$)/', '', $css); + + // remove CDATA section markers + $css = $this->_removeCdata($css); + + // minify + $minifier = $this->_cssMinifier + ? $this->_cssMinifier + : 'trim'; + $css = call_user_func($minifier, $css); + + return $this->_reservePlace($this->_needsCdata($css) + ? "{$openStyle}/*<![CDATA[*/{$css}/*]]>*/</style>" + : "{$openStyle}{$css}</style>" + ); + } + + protected function _removeScriptCB($m) + { + $openScript = $m[2]; + $js = $m[3]; + + // whitespace surrounding? preserve at least one space + $ws1 = ($m[1] === '') ? '' : ' '; + $ws2 = ($m[4] === '') ? '' : ' '; + + // remove HTML comments (and ending "//" if present) + $js = preg_replace('/(?:^\\s*<!--\\s*|\\s*(?:\\/\\/)?\\s*-->\\s*$)/', '', $js); + + // remove CDATA section markers + $js = $this->_removeCdata($js); + + // minify + $minifier = $this->_jsMinifier + ? $this->_jsMinifier + : 'trim'; + $js = call_user_func($minifier, $js); + + return $this->_reservePlace($this->_needsCdata($js) + ? "{$ws1}{$openScript}/*<![CDATA[*/{$js}/*]]>*/</script>{$ws2}" + : "{$ws1}{$openScript}{$js}</script>{$ws2}" + ); + } + + protected function _removeCdata($str) + { + return (false !== strpos($str, '<![CDATA[')) + ? str_replace(array('<![CDATA[', ']]>'), '', $str) + : $str; + } + + protected function _needsCdata($str) + { + return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str)); + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/ImportProcessor.php b/plugins/Minify/extlib/minify/min/lib/Minify/ImportProcessor.php new file mode 100644 index 000000000..0d6d90a81 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/ImportProcessor.php @@ -0,0 +1,157 @@ +<?php +/** + * Class Minify_ImportProcessor + * @package Minify + */ + +/** + * Linearize a CSS/JS file by including content specified by CSS import + * declarations. In CSS files, relative URIs are fixed. + * + * @imports will be processed regardless of where they appear in the source + * files; i.e. @imports commented out or in string content will still be + * processed! + * + * This has a unit test but should be considered "experimental". + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_ImportProcessor { + + public static $filesIncluded = array(); + + public static function process($file) + { + self::$filesIncluded = array(); + self::$_isCss = (strtolower(substr($file, -4)) === '.css'); + $obj = new Minify_ImportProcessor(dirname($file)); + return $obj->_getContent($file); + } + + // allows callback funcs to know the current directory + private $_currentDir = null; + + // allows _importCB to write the fetched content back to the obj + private $_importedContent = ''; + + private static $_isCss = null; + + private function __construct($currentDir) + { + $this->_currentDir = $currentDir; + } + + private function _getContent($file) + { + $file = realpath($file); + if (! $file + || in_array($file, self::$filesIncluded) + || false === ($content = @file_get_contents($file)) + ) { + // file missing, already included, or failed read + return ''; + } + self::$filesIncluded[] = realpath($file); + $this->_currentDir = dirname($file); + + // remove UTF-8 BOM if present + if (pack("CCC",0xef,0xbb,0xbf) === substr($content, 0, 3)) { + $content = substr($content, 3); + } + // ensure uniform EOLs + $content = str_replace("\r\n", "\n", $content); + + // process @imports + $content = preg_replace_callback( + '/ + @import\\s+ + (?:url\\(\\s*)? # maybe url( + [\'"]? # maybe quote + (.*?) # 1 = URI + [\'"]? # maybe end quote + (?:\\s*\\))? # maybe ) + ([a-zA-Z,\\s]*)? # 2 = media list + ; # end token + /x' + ,array($this, '_importCB') + ,$content + ); + + if (self::$_isCss) { + // rewrite remaining relative URIs + $content = preg_replace_callback( + '/url\\(\\s*([^\\)\\s]+)\\s*\\)/' + ,array($this, '_urlCB') + ,$content + ); + } + + return $this->_importedContent . $content; + } + + private function _importCB($m) + { + $url = $m[1]; + $mediaList = preg_replace('/\\s+/', '', $m[2]); + + if (strpos($url, '://') > 0) { + // protocol, leave in place for CSS, comment for JS + return self::$_isCss + ? $m[0] + : "/* Minify_ImportProcessor will not include remote content */"; + } + if ('/' === $url[0]) { + // protocol-relative or root path + $url = ltrim($url, '/'); + $file = realpath($_SERVER['DOCUMENT_ROOT']) . DIRECTORY_SEPARATOR + . strtr($url, '/', DIRECTORY_SEPARATOR); + } else { + // relative to current path + $file = $this->_currentDir . DIRECTORY_SEPARATOR + . strtr($url, '/', DIRECTORY_SEPARATOR); + } + $obj = new Minify_ImportProcessor(dirname($file)); + $content = $obj->_getContent($file); + if ('' === $content) { + // failed. leave in place for CSS, comment for JS + return self::$_isCss + ? $m[0] + : "/* Minify_ImportProcessor could not fetch '{$file}' */";; + } + return (!self::$_isCss || preg_match('@(?:^$|\\ball\\b)@', $mediaList)) + ? $content + : "@media {$mediaList} {\n{$content}\n}\n"; + } + + private function _urlCB($m) + { + // $m[1] is either quoted or not + $quote = ($m[1][0] === "'" || $m[1][0] === '"') + ? $m[1][0] + : ''; + $url = ($quote === '') + ? $m[1] + : substr($m[1], 1, strlen($m[1]) - 2); + if ('/' !== $url[0]) { + if (strpos($url, '//') > 0) { + // probably starts with protocol, do not alter + } else { + // prepend path with current dir separator (OS-independent) + $path = $this->_currentDir + . DIRECTORY_SEPARATOR . strtr($url, '/', DIRECTORY_SEPARATOR); + // strip doc root + $path = substr($path, strlen(realpath($_SERVER['DOCUMENT_ROOT']))); + // fix to absolute URL + $url = strtr($path, '/\\', '//'); + // remove /./ and /../ where possible + $url = str_replace('/./', '/', $url); + // inspired by patch from Oleg Cherniy + do { + $url = preg_replace('@/[^/]+/\\.\\./@', '/', $url, 1, $changed); + } while ($changed); + } + } + return "url({$quote}{$url}{$quote})"; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Lines.php b/plugins/Minify/extlib/minify/min/lib/Minify/Lines.php new file mode 100644 index 000000000..6f94fb63c --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Lines.php @@ -0,0 +1,131 @@ +<?php +/** + * Class Minify_Lines + * @package Minify + */ + +/** + * Add line numbers in C-style comments for easier debugging of combined content + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + * @author Adam Pedersen (Issue 55 fix) + */ +class Minify_Lines { + + /** + * Add line numbers in C-style comments + * + * This uses a very basic parser easily fooled by comment tokens inside + * strings or regexes, but, otherwise, generally clean code will not be + * mangled. URI rewriting can also be performed. + * + * @param string $content + * + * @param array $options available options: + * + * 'id': (optional) string to identify file. E.g. file name/path + * + * 'currentDir': (default null) if given, this is assumed to be the
+ * directory of the current CSS file. Using this, minify will rewrite
+ * all relative URIs in import/url declarations to correctly point to
+ * the desired files, and prepend a comment with debugging information about + * this process. + * + * @return string + */ + public static function minify($content, $options = array()) + { + $id = (isset($options['id']) && $options['id']) + ? $options['id'] + : ''; + $content = str_replace("\r\n", "\n", $content); + $lines = explode("\n", $content); + $numLines = count($lines); + // determine left padding + $padTo = strlen($numLines); + $inComment = false; + $i = 0; + $newLines = array(); + while (null !== ($line = array_shift($lines))) { + if (('' !== $id) && (0 == $i % 50)) { + array_push($newLines, '', "/* {$id} */", ''); + } + ++$i; + $newLines[] = self::_addNote($line, $i, $inComment, $padTo); + $inComment = self::_eolInComment($line, $inComment); + } + $content = implode("\n", $newLines) . "\n"; + + // check for desired URI rewriting + if (isset($options['currentDir'])) { + require_once 'Minify/CSS/UriRewriter.php'; + Minify_CSS_UriRewriter::$debugText = ''; + $content = Minify_CSS_UriRewriter::rewrite( + $content + ,$options['currentDir'] + ,isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT']
+ ,isset($options['symlinks']) ? $options['symlinks'] : array() + ); + $content = "/* Minify_CSS_UriRewriter::\$debugText\n\n" + . Minify_CSS_UriRewriter::$debugText . "*/\n" + . $content; + } + + return $content; + } + + /** + * Is the parser within a C-style comment at the end of this line? + * + * @param string $line current line of code + * + * @param bool $inComment was the parser in a comment at the + * beginning of the line? + * + * @return bool + */ + private static function _eolInComment($line, $inComment) + { + while (strlen($line)) { + $search = $inComment + ? '*/' + : '/*'; + $pos = strpos($line, $search); + if (false === $pos) { + return $inComment; + } else { + if ($pos == 0 + || ($inComment + ? substr($line, $pos, 3) + : substr($line, $pos-1, 3)) != '*/*') + { + $inComment = ! $inComment; + } + $line = substr($line, $pos + 2); + } + } + return $inComment; + } + + /** + * Prepend a comment (or note) to the given line + * + * @param string $line current line of code + * + * @param string $note content of note/comment + * + * @param bool $inComment was the parser in a comment at the + * beginning of the line? + * + * @param int $padTo minimum width of comment + * + * @return string + */ + private static function _addNote($line, $note, $inComment, $padTo) + { + return $inComment + ? '/* ' . str_pad($note, $padTo, ' ', STR_PAD_RIGHT) . ' *| ' . $line + : '/* ' . str_pad($note, $padTo, ' ', STR_PAD_RIGHT) . ' */ ' . $line; + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Logger.php b/plugins/Minify/extlib/minify/min/lib/Minify/Logger.php new file mode 100644 index 000000000..7844eea35 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Logger.php @@ -0,0 +1,45 @@ +<?php +/** + * Class Minify_Logger + * @package Minify + */ + +/** + * Message logging class + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_Logger { + + /** + * Set logger object. + * + * The object should have a method "log" that accepts a value as 1st argument and + * an optional string label as the 2nd. + * + * @param mixed $obj or a "falsey" value to disable + * @return null + */ + public static function setLogger($obj = null) { + self::$_logger = $obj + ? $obj + : null; + } + + /** + * Pass a message to the logger (if set) + * + * @param string $msg message to log + * @return null + */ + public static function log($msg, $label = 'Minify') { + if (! self::$_logger) return; + self::$_logger->log($msg, $label); + } + + /** + * @var mixed logger object (like FirePHP) or null (i.e. no logger available) + */ + private static $_logger = null; +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Packer.php b/plugins/Minify/extlib/minify/min/lib/Minify/Packer.php new file mode 100644 index 000000000..949c3eef0 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Packer.php @@ -0,0 +1,37 @@ +<?php +/** + * Class Minify_Packer + * + * To use this class you must first download the PHP port of Packer + * and place the file "class.JavaScriptPacker.php" in /lib (or your + * include_path). + * @link http://joliclic.free.fr/php/javascript-packer/en/ + * + * Be aware that, as long as HTTP encoding is used, scripts minified with JSMin + * will provide better client-side performance, as they need not be unpacked in + * client-side code. + * + * @package Minify + */ + +if (false === (@include 'class.JavaScriptPacker.php')) { + trigger_error( + 'The script "class.JavaScriptPacker.php" is required. Please see: http:' + .'//code.google.com/p/minify/source/browse/trunk/min/lib/Minify/Packer.php' + ,E_USER_ERROR + ); +} + +/** + * Minify Javascript using Dean Edward's Packer + * + * @package Minify + */ +class Minify_Packer { + public static function minify($code, $options = array()) + { + // @todo: set encoding options based on $options :) + $packer = new JavascriptPacker($code, 'Normal', true, false); + return trim($packer->pack()); + } +} diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Source.php b/plugins/Minify/extlib/minify/min/lib/Minify/Source.php new file mode 100644 index 000000000..5a85d10d0 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/Source.php @@ -0,0 +1,187 @@ +<?php +/** + * Class Minify_Source + * @package Minify + */ + +/** + * A content source to be minified by Minify. + * + * This allows per-source minification options and the mixing of files with + * content from other sources. + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_Source { + + /** + * @var int time of last modification + */ + public $lastModified = null; + + /** + * @var callback minifier function specifically for this source. + */ + public $minifier = null; + + /** + * @var array minification options specific to this source. + */ + public $minifyOptions = null; + + /** + * @var string full path of file + */ + public $filepath = null; + + /** + * @var string HTTP Content Type (Minify requires one of the constants Minify::TYPE_*) + */ + public $contentType = null; + + /** + * Create a Minify_Source + * + * In the $spec array(), you can either provide a 'filepath' to an existing + * file (existence will not be checked!) or give 'id' (unique string for + * the content), 'content' (the string content) and 'lastModified' + * (unixtime of last update). + * + * As a shortcut, the controller will replace "//" at the beginning + * of a filepath with $_SERVER['DOCUMENT_ROOT'] . '/'. + * + * @param array $spec options + */ + public function __construct($spec) + { + if (isset($spec['filepath'])) { + if (0 === strpos($spec['filepath'], '//')) { + $spec['filepath'] = $_SERVER['DOCUMENT_ROOT'] . substr($spec['filepath'], 1); + } + $segments = explode('.', $spec['filepath']); + $ext = strtolower(array_pop($segments)); + switch ($ext) { + case 'js' : $this->contentType = 'application/x-javascript'; + break; + case 'css' : $this->contentType = 'text/css'; + break; + case 'htm' : // fallthrough + case 'html' : $this->contentType = 'text/html'; + break; + } + $this->filepath = $spec['filepath']; + $this->_id = $spec['filepath']; + $this->lastModified = filemtime($spec['filepath']) + // offset for Windows uploaders with out of sync clocks + + round(Minify::$uploaderHoursBehind * 3600); + } elseif (isset($spec['id'])) { + $this->_id = 'id::' . $spec['id']; + if (isset($spec['content'])) { + $this->_content = $spec['content']; + } else { + $this->_getContentFunc = $spec['getContentFunc']; + } + $this->lastModified = isset($spec['lastModified']) + ? $spec['lastModified'] + : time(); + } + if (isset($spec['contentType'])) { + $this->contentType = $spec['contentType']; + } + if (isset($spec['minifier'])) { + $this->minifier = $spec['minifier']; + } + if (isset($spec['minifyOptions'])) { + $this->minifyOptions = $spec['minifyOptions']; + } + } + + /** + * Get content + * + * @return string + */ + public function getContent() + { + $content = (null !== $this->filepath) + ? file_get_contents($this->filepath) + : ((null !== $this->_content) + ? $this->_content + : call_user_func($this->_getContentFunc, $this->_id) + ); + // remove UTF-8 BOM if present + return (pack("CCC",0xef,0xbb,0xbf) === substr($content, 0, 3)) + ? substr($content, 3) + : $content; + } + + /** + * Get id + * + * @return string + */ + public function getId() + { + return $this->_id; + } + + /** + * Verifies a single minification call can handle all sources + * + * @param array $sources Minify_Source instances + * + * @return bool true iff there no sources with specific minifier preferences. + */ + public static function haveNoMinifyPrefs($sources) + { + foreach ($sources as $source) { + if (null !== $source->minifier + || null !== $source->minifyOptions) { + return false; + } + } + return true; + } + + /** + * Get unique string for a set of sources + * + * @param array $sources Minify_Source instances + * + * @return string + */ + public static function getDigest($sources) + { + foreach ($sources as $source) { + $info[] = array( + $source->_id, $source->minifier, $source->minifyOptions + ); + } + return md5(serialize($info)); + } + + /** + * Get content type from a group of sources + * + * This is called if the user doesn't pass in a 'contentType' options + * + * @param array $sources Minify_Source instances + * + * @return string content type. e.g. 'text/css' + */ + public static function getContentType($sources) + { + foreach ($sources as $source) { + if ($source->contentType !== null) { + return $source->contentType; + } + } + return 'text/plain'; + } + + protected $_content = null; + protected $_getContentFunc = null; + protected $_id = null; +} + diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/YUICompressor.php b/plugins/Minify/extlib/minify/min/lib/Minify/YUICompressor.php new file mode 100644 index 000000000..7cb61adbe --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Minify/YUICompressor.php @@ -0,0 +1,139 @@ +<?php +/** + * Class Minify_YUICompressor + * @package Minify + */ + +/** + * Compress Javascript/CSS using the YUI Compressor + * + * You must set $jarFile and $tempDir before calling the minify functions. + * Also, depending on your shell's environment, you may need to specify + * the full path to java in $javaExecutable or use putenv() to setup the + * Java environment. + * + * <code> + * Minify_YUICompressor::$jarFile = '/path/to/yuicompressor-2.3.5.jar'; + * Minify_YUICompressor::$tempDir = '/tmp'; + * $code = Minify_YUICompressor::minifyJs( + * $code + * ,array('nomunge' => true, 'line-break' => 1000) + * ); + * </code> + * + * @todo unit tests, $options docs + * + * @package Minify + * @author Stephen Clay <steve@mrclay.org> + */ +class Minify_YUICompressor { + + /** + * Filepath of the YUI Compressor jar file. This must be set before + * calling minifyJs() or minifyCss(). + * + * @var string + */ + public static $jarFile = null; + + /** + * Writable temp directory. This must be set before calling minifyJs() + * or minifyCss(). + * + * @var string + */ + public static $tempDir = null; + + /** + * Filepath of "java" executable (may be needed if not in shell's PATH) + * + * @var string + */ + public static $javaExecutable = 'java'; + + /** + * Minify a Javascript string + * + * @param string $js + * + * @param array $options (verbose is ignored) + * + * @see http://www.julienlecomte.net/yuicompressor/README + * + * @return string + */ + public static function minifyJs($js, $options = array()) + { + return self::_minify('js', $js, $options); + } + + /** + * Minify a CSS string + * + * @param string $css + * + * @param array $options (verbose is ignored) + * + * @see http://www.julienlecomte.net/yuicompressor/README + * + * @return string + */ + public static function minifyCss($css, $options = array()) + { + return self::_minify('css', $css, $options); + } + + private static function _minify($type, $content, $options) + { + self::_prepare(); + if (! ($tmpFile = tempnam(self::$tempDir, 'yuic_'))) { + throw new Exception('Minify_YUICompressor : could not create temp file.'); + } + file_put_contents($tmpFile, $content); + exec(self::_getCmd($options, $type, $tmpFile), $output); + unlink($tmpFile); + return implode("\n", $output); + } + + private static function _getCmd($userOptions, $type, $tmpFile) + { + $o = array_merge( + array( + 'charset' => '' + ,'line-break' => 5000 + ,'type' => $type + ,'nomunge' => false + ,'preserve-semi' => false + ,'disable-optimizations' => false + ) + ,$userOptions + ); + $cmd = self::$javaExecutable . ' -jar ' . escapeshellarg(self::$jarFile) + . " --type {$type}" + . (preg_match('/^[a-zA-Z\\-]+$/', $o['charset']) + ? " --charset {$o['charset']}" + : '') + . (is_numeric($o['line-break']) && $o['line-break'] >= 0 + ? ' --line-break ' . (int)$o['line-break'] + : ''); + if ($type === 'js') { + foreach (array('nomunge', 'preserve-semi', 'disable-optimizations') as $opt) { + $cmd .= $o[$opt] + ? " --{$opt}" + : ''; + } + } + return $cmd . ' ' . escapeshellarg($tmpFile); + } + + private static function _prepare() + { + if (! is_file(self::$jarFile) + || ! is_dir(self::$tempDir) + || ! is_writable(self::$tempDir) + ) { + throw new Exception('Minify_YUICompressor : $jarFile and $tempDir must be set.'); + } + } +} + diff --git a/plugins/Minify/extlib/minify/min/lib/Solar/Dir.php b/plugins/Minify/extlib/minify/min/lib/Solar/Dir.php new file mode 100644 index 000000000..37f716962 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/lib/Solar/Dir.php @@ -0,0 +1,199 @@ +<?php +/** + * + * Utility class for static directory methods. + * + * @category Solar + * + * @package Solar + * + * @author Paul M. Jones <pmjones@solarphp.com> + * + * @license http://opensource.org/licenses/bsd-license.php BSD + * + * @version $Id: Dir.php 2926 2007-11-09 16:25:44Z pmjones $ + * + */ +class Solar_Dir { + + /** + * + * The OS-specific temporary directory location. + * + * @var string + * + */ + protected static $_tmp; + + /** + * + * Hack for [[php::is_dir() | ]] that checks the include_path. + * + * Use this to see if a directory exists anywhere in the include_path. + * + * {{code: php + * $dir = Solar_Dir::exists('path/to/dir') + * if ($dir) { + * $files = scandir($dir); + * } else { + * echo "Not found in the include-path."; + * } + * }} + * + * @param string $dir Check for this directory in the include_path. + * + * @return mixed If the directory exists in the include_path, returns the + * absolute path; if not, returns boolean false. + * + */ + public static function exists($dir) + { + // no file requested? + $dir = trim($dir); + if (! $dir) { + return false; + } + + // using an absolute path for the file? + // dual check for Unix '/' and Windows '\', + // or Windows drive letter and a ':'. + $abs = ($dir[0] == '/' || $dir[0] == '\\' || $dir[1] == ':'); + if ($abs && is_dir($dir)) { + return $dir; + } + + // using a relative path on the file + $path = explode(PATH_SEPARATOR, ini_get('include_path')); + foreach ($path as $base) { + // strip Unix '/' and Windows '\' + $target = rtrim($base, '\\/') . DIRECTORY_SEPARATOR . $dir; + if (is_dir($target)) { + return $target; + } + } + + // never found it + return false; + } + + /** + * + * "Fixes" a directory string for the operating system. + * + * Use slashes anywhere you need a directory separator. Then run the + * string through fixdir() and the slashes will be converted to the + * proper separator (for example '\' on Windows). + * + * Always adds a final trailing separator. + * + * @param string $dir The directory string to 'fix'. + * + * @return string The "fixed" directory string. + * + */ + public static function fix($dir) + { + $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir); + return rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; + } + + /** + * + * Convenience method for dirname() and higher-level directories. + * + * @param string $file Get the dirname() of this file. + * + * @param int $up Move up in the directory structure this many + * times, default 0. + * + * @return string The dirname() of the file. + * + */ + public static function name($file, $up = 0) + { + $dir = dirname($file); + while ($up --) { + $dir = dirname($dir); + } + return $dir; + } + + /** + * + * Returns the OS-specific directory for temporary files. + * + * @param string $sub Add this subdirectory to the returned temporary + * directory name. + * + * @return string The temporary directory path. + * + */ + public static function tmp($sub = '') + { + // find the tmp dir if needed + if (! Solar_Dir::$_tmp) { + + // use the system if we can + if (function_exists('sys_get_temp_dir')) { + $tmp = sys_get_temp_dir(); + } else { + $tmp = Solar_Dir::_tmp(); + } + + // remove trailing separator and save + Solar_Dir::$_tmp = rtrim($tmp, DIRECTORY_SEPARATOR); + } + + // do we have a subdirectory request? + $sub = trim($sub); + if ($sub) { + // remove leading and trailing separators, and force exactly + // one trailing separator + $sub = trim($sub, DIRECTORY_SEPARATOR) + . DIRECTORY_SEPARATOR; + } + + return Solar_Dir::$_tmp . DIRECTORY_SEPARATOR . $sub; + } + + /** + * + * Returns the OS-specific temporary directory location. + * + * @return string The temp directory path. + * + */ + protected static function _tmp() + { + // non-Windows system? + if (strtolower(substr(PHP_OS, 0, 3)) != 'win') { + $tmp = empty($_ENV['TMPDIR']) ? getenv('TMPDIR') : $_ENV['TMPDIR']; + if ($tmp) { + return $tmp; + } else { + return '/tmp'; + } + } + + // Windows 'TEMP' + $tmp = empty($_ENV['TEMP']) ? getenv('TEMP') : $_ENV['TEMP']; + if ($tmp) { + return $tmp; + } + + // Windows 'TMP' + $tmp = empty($_ENV['TMP']) ? getenv('TMP') : $_ENV['TMP']; + if ($tmp) { + return $tmp; + } + + // Windows 'windir' + $tmp = empty($_ENV['windir']) ? getenv('windir') : $_ENV['windir']; + if ($tmp) { + return $tmp; + } + + // final fallback for Windows + return getenv('SystemRoot') . '\\temp'; + } +}
\ No newline at end of file diff --git a/plugins/Minify/extlib/minify/min/utils.php b/plugins/Minify/extlib/minify/min/utils.php new file mode 100644 index 000000000..c73594152 --- /dev/null +++ b/plugins/Minify/extlib/minify/min/utils.php @@ -0,0 +1,90 @@ +<?php +/** + * Utility functions for generating group URIs in HTML files + * + * Before including this file, /min/lib must be in your include_path. + * + * @package Minify + */ + +require_once 'Minify/Build.php'; + + +/** + * Get a timestamped URI to a minified resource using the default Minify install + * + * <code> + * <link rel="stylesheet" type="text/css" href="<?php echo Minify_groupUri('css'); ?>" /> + * <script type="text/javascript" src="<?php echo Minify_groupUri('js'); ?>"></script> + * </code> + * + * If you do not want ampersands as HTML entities, set Minify_Build::$ampersand = "&" + * before using this function. + * + * @param string $group a key from groupsConfig.php + * @param boolean $forceAmpersand (default false) Set to true if the RewriteRule + * directives in .htaccess are functional. This will remove the "?" from URIs, making them + * more cacheable by proxies. + * @return string + */ +function Minify_groupUri($group, $forceAmpersand = false) +{ + $path = $forceAmpersand + ? "/g={$group}" + : "/?g={$group}"; + return _Minify_getBuild($group)->uri( + '/' . basename(dirname(__FILE__)) . $path + ,$forceAmpersand + ); +} + + +/** + * Get the last modification time of the source js/css files used by Minify to + * build the page. + * + * If you're caching the output of Minify_groupUri(), you'll want to rebuild + * the cache if it's older than this timestamp. + * + * <code> + * // simplistic HTML cache system + * $file = '/path/to/cache/file'; + * if (! file_exists($file) || filemtime($file) < Minify_groupsMtime(array('js', 'css'))) { + * // (re)build cache + * $page = buildPage(); // this calls Minify_groupUri() for js and css + * file_put_contents($file, $page); + * echo $page; + * exit(); + * } + * readfile($file); + * </code> + * + * @param array $groups an array of keys from groupsConfig.php + * @return int Unix timestamp of the latest modification + */ +function Minify_groupsMtime($groups) +{ + $max = 0; + foreach ((array)$groups as $group) { + $max = max($max, _Minify_getBuild($group)->lastModified); + } + return $max; +} + +/** + * @param string $group a key from groupsConfig.php + * @return Minify_Build + * @private + */ +function _Minify_getBuild($group) +{ + static $builds = array(); + static $gc = false; + if (false === $gc) { + $gc = (require dirname(__FILE__) . '/groupsConfig.php'); + } + if (! isset($builds[$group])) { + $builds[$group] = new Minify_Build($gc[$group]); + } + return $builds[$group]; +} diff --git a/plugins/Minify/minify.php b/plugins/Minify/minify.php new file mode 100644 index 000000000..64727f5e7 --- /dev/null +++ b/plugins/Minify/minify.php @@ -0,0 +1,117 @@ +<?php +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2008, 2009, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } + +class MinifyAction extends Action +{ + const TYPE_CSS = 'text/css'; + const TYPE_HTML = 'text/html'; + // there is some debate over the ideal JS Content-Type, but this is the + // Apache default and what Yahoo! uses.. + const TYPE_JS = 'application/x-javascript'; + + var $file; + var $v; + + function isReadOnly($args) + { + return true; + } + + function prepare($args) + { + parent::prepare($args); + $this->v = $args['v']; + + $f = $this->arg('f'); + if(isset($f)) { + $this->file = INSTALLDIR.'/'.$f; + if(file_exists($this->file)) { + return true; + } else { + $this->clientError(_('f parameter is not a valid path'),404); + return false; + } + }else{ + $this->clientError(_('f parameter is required'),500); + return false; + } + } + + function etag() + { + if(isset($this->v)) { + return "\"" . crc32($this->file . $this->v) . "\""; + }else{ + $stat = stat($this->file); + return '"' . $stat['ino'] . '-' . $stat['size'] . '-' . $stat['mtime'] . '"'; + } + } + + function lastModified() + { + return filemtime($this->file); + } + + function handle($args) + { + parent::handle($args); + + $c = common_memcache(); + if (!empty($c)) { + $cacheKey = common_cache_key(MinifyPlugin::cacheKey . ':' . $this->file . '?v=' . empty($this->v)?'':$this->v); + $out = $c->get($cacheKey); + } + if(empty($out)) { + $out = $this->minify($this->file); + } + if (!empty($c)) { + $c->set($cacheKey, $out); + } + + $sec = session_cache_expire() * 60; + header('Cache-Control: public, max-age=' . $sec); + header('Pragma: public'); + $this->raw($out); + } + + function minify($file) + { + $info = pathinfo($file); + switch(strtolower($info['extension'])){ + case 'js': + $out = MinifyPlugin::minifyJs(file_get_contents($file)); + header('Content-Type: ' . self::TYPE_JS); + break; + case 'css': + $options = array(); + $options['currentDir'] = dirname($file); + $options['docRoot'] = INSTALLDIR; + $out = MinifyPlugin::minifyCss(file_get_contents($file),$options); + header('Content-Type: ' . self::TYPE_CSS); + break; + default: + $this->clientError(_('File type not supported'),500); + return false; + } + return $out; + } +} + diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php index 0b1e4de28..35678bedd 100644 --- a/plugins/MobileProfile/MobileProfilePlugin.php +++ b/plugins/MobileProfile/MobileProfilePlugin.php @@ -243,19 +243,13 @@ class MobileProfilePlugin extends WAP20Plugin if (file_exists(Theme::file('css/mp-screen.css'))) { $action->cssLink('css/mp-screen.css', null, 'screen'); } else { - $action->element('link', array('rel' => 'stylesheet', - 'type' => 'text/css', - 'href' => common_path('plugins/MobileProfile/mp-screen.css') . '?version=' . STATUSNET_VERSION, - 'media' => 'screen')); + $action->cssLink('plugins/MobileProfile/mp-screen.css',null,'screen'); } if (file_exists(Theme::file('css/mp-handheld.css'))) { $action->cssLink('css/mp-handheld.css', null, 'handheld'); } else { - $action->element('link', array('rel' => 'stylesheet', - 'type' => 'text/css', - 'href' => common_path('plugins/MobileProfile/mp-handheld.css') . '?version=' . STATUSNET_VERSION, - 'media' => 'handheld')); + $action->cssLink('plugins/MobileProfile/mp-handheld.css',null,'handheld'); } return false; @@ -358,8 +352,7 @@ class MobileProfilePlugin extends WAP20Plugin $contentLimit = Notice::maxContent(); - $form->out->element('script', array('type' => 'text/javascript'), - 'maxLength = ' . $contentLimit . ';'); + $form->out->inlineScript('maxLength = ' . $contentLimit . ';'); if ($contentLimit > 0) { $form->out->element('div', array('id' => 'notice_text-count'), diff --git a/plugins/OpenID/OpenIDPlugin.php b/plugins/OpenID/OpenIDPlugin.php index e86725d70..a37d5465e 100644 --- a/plugins/OpenID/OpenIDPlugin.php +++ b/plugins/OpenID/OpenIDPlugin.php @@ -120,8 +120,8 @@ class OpenIDPlugin extends Plugin $action_name = $action->trimmed('action'); $action->menuItem(common_local_url('openidlogin'), - _('OpenID'), - _('Login or register with OpenID'), + _m('OpenID'), + _m('Login or register with OpenID'), $action_name === 'openidlogin'); return true; @@ -132,8 +132,8 @@ class OpenIDPlugin extends Plugin $action_name = $action->trimmed('action'); $action->menuItem(common_local_url('openidsettings'), - _('OpenID'), - _('Add or remove OpenIDs'), + _m('OpenID'), + _m('Add or remove OpenIDs'), $action_name === 'openidsettings'); return true; diff --git a/plugins/OpenID/finishaddopenid.php b/plugins/OpenID/finishaddopenid.php index 6e889205d..991e6584e 100644 --- a/plugins/OpenID/finishaddopenid.php +++ b/plugins/OpenID/finishaddopenid.php @@ -64,7 +64,7 @@ class FinishaddopenidAction extends Action { parent::handle($args); if (!common_logged_in()) { - $this->clientError(_('Not logged in.')); + $this->clientError(_m('Not logged in.')); } else { $this->tryLogin(); } @@ -80,16 +80,16 @@ class FinishaddopenidAction extends Action function tryLogin() { - $consumer =& oid_consumer(); + $consumer = oid_consumer(); $response = $consumer->complete(common_local_url('finishaddopenid')); if ($response->status == Auth_OpenID_CANCEL) { - $this->message(_('OpenID authentication cancelled.')); + $this->message(_m('OpenID authentication cancelled.')); return; } else if ($response->status == Auth_OpenID_FAILURE) { // Authentication failed; display the error message. - $this->message(sprintf(_('OpenID authentication failed: %s'), + $this->message(sprintf(_m('OpenID authentication failed: %s'), $response->message)); } else if ($response->status == Auth_OpenID_SUCCESS) { @@ -103,15 +103,15 @@ class FinishaddopenidAction extends Action $sreg = $sreg_resp->contents(); } - $cur =& common_current_user(); + $cur = common_current_user(); $other = oid_get_user($canonical); if ($other) { if ($other->id == $cur->id) { - $this->message(_('You already have this OpenID!')); + $this->message(_m('You already have this OpenID!')); } else { - $this->message(_('Someone else already has this OpenID.')); + $this->message(_m('Someone else already has this OpenID.')); } return; } @@ -123,12 +123,12 @@ class FinishaddopenidAction extends Action $result = oid_link_user($cur->id, $canonical, $display); if (!$result) { - $this->message(_('Error connecting user.')); + $this->message(_m('Error connecting user.')); return; } if ($sreg) { if (!oid_update_user($cur, $sreg)) { - $this->message(_('Error updating profile')); + $this->message(_m('Error updating profile')); return; } } @@ -167,7 +167,7 @@ class FinishaddopenidAction extends Action function title() { - return _('OpenID Login'); + return _m('OpenID Login'); } /** diff --git a/plugins/OpenID/finishopenidlogin.php b/plugins/OpenID/finishopenidlogin.php index e5551b412..987fa9213 100644 --- a/plugins/OpenID/finishopenidlogin.php +++ b/plugins/OpenID/finishopenidlogin.php @@ -31,16 +31,16 @@ class FinishopenidloginAction extends Action { parent::handle($args); if (common_is_real_login()) { - $this->clientError(_('Already logged in.')); + $this->clientError(_m('Already logged in.')); } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { - $this->showForm(_('There was a problem with your session token. Try again, please.')); + $this->showForm(_m('There was a problem with your session token. Try again, please.')); return; } if ($this->arg('create')) { if (!$this->boolean('license')) { - $this->showForm(_('You can\'t register if you don\'t agree to the license.'), + $this->showForm(_m('You can\'t register if you don\'t agree to the license.'), $this->trimmed('newname')); return; } @@ -49,7 +49,7 @@ class FinishopenidloginAction extends Action $this->connectUser(); } else { common_debug(print_r($this->args, true), __FILE__); - $this->showForm(_('Something weird happened.'), + $this->showForm(_m('Something weird happened.'), $this->trimmed('newname')); } } else { @@ -63,13 +63,13 @@ class FinishopenidloginAction extends Action $this->element('div', array('class' => 'error'), $this->error); } else { $this->element('div', 'instructions', - sprintf(_('This is the first time you\'ve logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name'))); + sprintf(_m('This is the first time you\'ve logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name'))); } } function title() { - return _('OpenID Account Setup'); + return _m('OpenID Account Setup'); } function showForm($error=null, $username=null) @@ -94,14 +94,14 @@ class FinishopenidloginAction extends Action $this->hidden('token', common_session_token()); $this->elementStart('fieldset', array('id' => 'form_openid_createaccount')); $this->element('legend', null, - _('Create new account')); + _m('Create new account')); $this->element('p', null, - _('Create a new user with this nickname.')); + _m('Create a new user with this nickname.')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); - $this->input('newname', _('New nickname'), + $this->input('newname', _m('New nickname'), ($this->username) ? $this->username : '', - _('1-64 lowercase letters or numbers, no punctuation or spaces')); + _m('1-64 lowercase letters or numbers, no punctuation or spaces')); $this->elementEnd('li'); $this->elementStart('li'); $this->element('input', array('type' => 'checkbox', @@ -111,30 +111,30 @@ class FinishopenidloginAction extends Action 'value' => 'true')); $this->elementStart('label', array('for' => 'license', 'class' => 'checkbox')); - $this->text(_('My text and files are available under ')); + $this->text(_m('My text and files are available under ')); $this->element('a', array('href' => common_config('license', 'url')), common_config('license', 'title')); - $this->text(_(' except this private data: password, email address, IM address, phone number.')); + $this->text(_m(' except this private data: password, email address, IM address, phone number.')); $this->elementEnd('label'); $this->elementEnd('li'); $this->elementEnd('ul'); - $this->submit('create', _('Create')); + $this->submit('create', _m('Create')); $this->elementEnd('fieldset'); $this->elementStart('fieldset', array('id' => 'form_openid_createaccount')); $this->element('legend', null, - _('Connect existing account')); + _m('Connect existing account')); $this->element('p', null, - _('If you already have an account, login with your username and password to connect it to your OpenID.')); + _m('If you already have an account, login with your username and password to connect it to your OpenID.')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); - $this->input('nickname', _('Existing nickname')); + $this->input('nickname', _m('Existing nickname')); $this->elementEnd('li'); $this->elementStart('li'); - $this->password('password', _('Password')); + $this->password('password', _m('Password')); $this->elementEnd('li'); $this->elementEnd('ul'); - $this->submit('connect', _('Connect')); + $this->submit('connect', _m('Connect')); $this->elementEnd('fieldset'); $this->elementEnd('form'); } @@ -146,11 +146,11 @@ class FinishopenidloginAction extends Action $response = $consumer->complete(common_local_url('finishopenidlogin')); if ($response->status == Auth_OpenID_CANCEL) { - $this->message(_('OpenID authentication cancelled.')); + $this->message(_m('OpenID authentication cancelled.')); return; } else if ($response->status == Auth_OpenID_FAILURE) { // Authentication failed; display the error message. - $this->message(sprintf(_('OpenID authentication failed: %s'), $response->message)); + $this->message(sprintf(_m('OpenID authentication failed: %s'), $response->message)); } else if ($response->status == Auth_OpenID_SUCCESS) { // This means the authentication succeeded; extract the // identity URL and Simple Registration data (if it was @@ -212,7 +212,7 @@ class FinishopenidloginAction extends Action # FIXME: save invite code before redirect, and check here if (common_config('site', 'closed')) { - $this->clientError(_('Registration not allowed.')); + $this->clientError(_m('Registration not allowed.')); return; } @@ -221,14 +221,14 @@ class FinishopenidloginAction extends Action if (common_config('site', 'inviteonly')) { $code = $_SESSION['invitecode']; if (empty($code)) { - $this->clientError(_('Registration not allowed.')); + $this->clientError(_m('Registration not allowed.')); return; } $invite = Invitation::staticGet($code); if (empty($invite)) { - $this->clientError(_('Not a valid invitation code.')); + $this->clientError(_m('Not a valid invitation code.')); return; } } @@ -238,24 +238,24 @@ class FinishopenidloginAction extends Action if (!Validate::string($nickname, array('min_length' => 1, 'max_length' => 64, 'format' => NICKNAME_FMT))) { - $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.')); + $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.')); return; } if (!User::allowed_nickname($nickname)) { - $this->showForm(_('Nickname not allowed.')); + $this->showForm(_m('Nickname not allowed.')); return; } if (User::staticGet('nickname', $nickname)) { - $this->showForm(_('Nickname already in use. Try another one.')); + $this->showForm(_m('Nickname already in use. Try another one.')); return; } list($display, $canonical, $sreg) = $this->getSavedValues(); if (!$display || !$canonical) { - $this->serverError(_('Stored OpenID not found.')); + $this->serverError(_m('Stored OpenID not found.')); return; } @@ -264,7 +264,7 @@ class FinishopenidloginAction extends Action $other = oid_get_user($canonical); if ($other) { - $this->serverError(_('Creating new account for OpenID that already has a user.')); + $this->serverError(_m('Creating new account for OpenID that already has a user.')); return; } @@ -324,7 +324,7 @@ class FinishopenidloginAction extends Action $password = $this->trimmed('password'); if (!common_check_user($nickname, $password)) { - $this->showForm(_('Invalid username or password.')); + $this->showForm(_m('Invalid username or password.')); return; } @@ -335,14 +335,14 @@ class FinishopenidloginAction extends Action list($display, $canonical, $sreg) = $this->getSavedValues(); if (!$display || !$canonical) { - $this->serverError(_('Stored OpenID not found.')); + $this->serverError(_m('Stored OpenID not found.')); return; } $result = oid_link_user($user->id, $canonical, $display); if (!$result) { - $this->serverError(_('Error connecting user to OpenID.')); + $this->serverError(_m('Error connecting user to OpenID.')); return; } diff --git a/plugins/OpenID/locale/OpenID.po b/plugins/OpenID/locale/OpenID.po new file mode 100644 index 000000000..34738bc75 --- /dev/null +++ b/plugins/OpenID/locale/OpenID.po @@ -0,0 +1,344 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-12-07 20:38-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: openidlogin.php:30 finishopenidlogin.php:34 +msgid "Already logged in." +msgstr "" + +#: openidlogin.php:37 openidsettings.php:194 finishopenidlogin.php:38 +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#: openidlogin.php:66 +#, php-format +msgid "" +"For security reasons, please re-login with your [OpenID](%%doc.openid%%) " +"before changing your settings." +msgstr "" + +#: openidlogin.php:70 +#, php-format +msgid "Login with an [OpenID](%%doc.openid%%) account." +msgstr "" + +#: openidlogin.php:95 finishaddopenid.php:170 +msgid "OpenID Login" +msgstr "" + +#: openidlogin.php:112 +msgid "OpenID login" +msgstr "" + +#: openidlogin.php:117 openidsettings.php:107 +msgid "OpenID URL" +msgstr "" + +#: openidlogin.php:119 +msgid "Your OpenID URL" +msgstr "" + +#: openidlogin.php:122 +msgid "Remember me" +msgstr "" + +#: openidlogin.php:123 +msgid "Automatically login in the future; not for shared computers!" +msgstr "" + +#: openidlogin.php:127 +msgid "Login" +msgstr "" + +#: openidserver.php:106 +#, php-format +msgid "You are not authorized to use the identity %s" +msgstr "" + +#: openidserver.php:126 +msgid "Just an OpenID provider. Nothing to see here, move along..." +msgstr "" + +#: OpenIDPlugin.php:123 OpenIDPlugin.php:135 +msgid "OpenID" +msgstr "" + +#: OpenIDPlugin.php:124 +msgid "Login or register with OpenID" +msgstr "" + +#: OpenIDPlugin.php:136 +msgid "Add or remove OpenIDs" +msgstr "" + +#: openid.php:141 +msgid "Cannot instantiate OpenID consumer object." +msgstr "" + +#: openid.php:151 +msgid "Not a valid OpenID." +msgstr "" + +#: openid.php:153 +#, php-format +msgid "OpenID failure: %s" +msgstr "" + +#: openid.php:180 +#, php-format +msgid "Could not redirect to server: %s" +msgstr "" + +#: openid.php:198 +#, php-format +msgid "Could not create OpenID form: %s" +msgstr "" + +#: openid.php:214 +msgid "" +"This form should automatically submit itself. If not, click the submit " +"button to go to your OpenID provider." +msgstr "" + +#: openid.php:246 +msgid "Error saving the profile." +msgstr "" + +#: openid.php:257 +msgid "Error saving the user." +msgstr "" + +#: openid.php:277 +msgid "OpenID Auto-Submit" +msgstr "" + +#: openidtrust.php:51 +msgid "OpenID Identity Verification" +msgstr "" + +#: openidtrust.php:69 +msgid "" +"This page should only be reached during OpenID processing, not directly." +msgstr "" + +#: openidtrust.php:118 +#, php-format +msgid "" +"%s has asked to verify your identity. Click Continue to verify your " +"identity and login without creating a new password." +msgstr "" + +#: openidtrust.php:136 +msgid "Continue" +msgstr "" + +#: openidtrust.php:137 +msgid "Cancel" +msgstr "" + +#: finishaddopenid.php:67 +msgid "Not logged in." +msgstr "" + +#: finishaddopenid.php:88 finishopenidlogin.php:149 +msgid "OpenID authentication cancelled." +msgstr "" + +#: finishaddopenid.php:92 finishopenidlogin.php:153 +#, php-format +msgid "OpenID authentication failed: %s" +msgstr "" + +#: finishaddopenid.php:112 +msgid "You already have this OpenID!" +msgstr "" + +#: finishaddopenid.php:114 +msgid "Someone else already has this OpenID." +msgstr "" + +#: finishaddopenid.php:126 +msgid "Error connecting user." +msgstr "" + +#: finishaddopenid.php:131 +msgid "Error updating profile" +msgstr "" + +#: openidsettings.php:59 +msgid "OpenID settings" +msgstr "" + +#: openidsettings.php:70 +#, php-format +msgid "" +"[OpenID](%%doc.openid%%) lets you log into many sites with the same user " +"account. Manage your associated OpenIDs from here." +msgstr "" + +#: openidsettings.php:99 +msgid "Add OpenID" +msgstr "" + +#: openidsettings.php:102 +msgid "" +"If you want to add an OpenID to your account, enter it in the box below and " +"click \"Add\"." +msgstr "" + +#: openidsettings.php:117 +msgid "Add" +msgstr "" + +#: openidsettings.php:129 +msgid "Remove OpenID" +msgstr "" + +#: openidsettings.php:134 +msgid "" +"Removing your only OpenID would make it impossible to log in! If you need to " +"remove it, add another OpenID first." +msgstr "" + +#: openidsettings.php:149 +msgid "" +"You can remove an OpenID from your account by clicking the button marked " +"\"Remove\"." +msgstr "" + +#: openidsettings.php:172 +msgid "Remove" +msgstr "" + +#: openidsettings.php:208 finishopenidlogin.php:52 +msgid "Something weird happened." +msgstr "" + +#: openidsettings.php:228 +msgid "No such OpenID." +msgstr "" + +#: openidsettings.php:233 +msgid "That OpenID does not belong to you." +msgstr "" + +#: openidsettings.php:237 +msgid "OpenID removed." +msgstr "" + +#: finishopenidlogin.php:43 +msgid "You can't register if you don't agree to the license." +msgstr "" + +#: finishopenidlogin.php:66 +#, php-format +msgid "" +"This is the first time you've logged into %s so we must connect your OpenID " +"to a local account. You can either create a new account, or connect with " +"your existing account, if you have one." +msgstr "" + +#: finishopenidlogin.php:72 +msgid "OpenID Account Setup" +msgstr "" + +#: finishopenidlogin.php:97 +msgid "Create new account" +msgstr "" + +#: finishopenidlogin.php:99 +msgid "Create a new user with this nickname." +msgstr "" + +#: finishopenidlogin.php:102 +msgid "New nickname" +msgstr "" + +#: finishopenidlogin.php:104 +msgid "1-64 lowercase letters or numbers, no punctuation or spaces" +msgstr "" + +#: finishopenidlogin.php:114 +msgid "My text and files are available under " +msgstr "" + +#: finishopenidlogin.php:117 +msgid "" +" except this private data: password, email address, IM address, phone number." +msgstr "" + +#: finishopenidlogin.php:121 +msgid "Create" +msgstr "" + +#: finishopenidlogin.php:126 +msgid "Connect existing account" +msgstr "" + +#: finishopenidlogin.php:128 +msgid "" +"If you already have an account, login with your username and password to " +"connect it to your OpenID." +msgstr "" + +#: finishopenidlogin.php:131 +msgid "Existing nickname" +msgstr "" + +#: finishopenidlogin.php:134 +msgid "Password" +msgstr "" + +#: finishopenidlogin.php:137 +msgid "Connect" +msgstr "" + +#: finishopenidlogin.php:215 finishopenidlogin.php:224 +msgid "Registration not allowed." +msgstr "" + +#: finishopenidlogin.php:231 +msgid "Not a valid invitation code." +msgstr "" + +#: finishopenidlogin.php:241 +msgid "Nickname must have only lowercase letters and numbers and no spaces." +msgstr "" + +#: finishopenidlogin.php:246 +msgid "Nickname not allowed." +msgstr "" + +#: finishopenidlogin.php:251 +msgid "Nickname already in use. Try another one." +msgstr "" + +#: finishopenidlogin.php:258 finishopenidlogin.php:338 +msgid "Stored OpenID not found." +msgstr "" + +#: finishopenidlogin.php:267 +msgid "Creating new account for OpenID that already has a user." +msgstr "" + +#: finishopenidlogin.php:327 +msgid "Invalid username or password." +msgstr "" + +#: finishopenidlogin.php:345 +msgid "Error connecting user to OpenID." +msgstr "" diff --git a/plugins/OpenID/openid.php b/plugins/OpenID/openid.php index dd628e773..8f949c9c5 100644 --- a/plugins/OpenID/openid.php +++ b/plugins/OpenID/openid.php @@ -138,7 +138,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false) $consumer = oid_consumer(); if (!$consumer) { - common_server_error(_('Cannot instantiate OpenID consumer object.')); + common_server_error(_m('Cannot instantiate OpenID consumer object.')); return false; } @@ -148,9 +148,9 @@ function oid_authenticate($openid_url, $returnto, $immediate=false) // Handle failure status return values. if (!$auth_request) { - return _('Not a valid OpenID.'); + return _m('Not a valid OpenID.'); } else if (Auth_OpenID::isFailure($auth_request)) { - return sprintf(_('OpenID failure: %s'), $auth_request->message); + return sprintf(_m('OpenID failure: %s'), $auth_request->message); } $sreg_request = Auth_OpenID_SRegRequest::build(// Required @@ -177,7 +177,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false) $immediate); if (!$redirect_url) { } else if (Auth_OpenID::isFailure($redirect_url)) { - return sprintf(_('Could not redirect to server: %s'), $redirect_url->message); + return sprintf(_m('Could not redirect to server: %s'), $redirect_url->message); } else { common_redirect($redirect_url, 303); } @@ -195,7 +195,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false) // Display an error if the form markup couldn't be generated; // otherwise, render the HTML. if (Auth_OpenID::isFailure($form_html)) { - common_server_error(sprintf(_('Could not create OpenID form: %s'), $form_html->message)); + common_server_error(sprintf(_m('Could not create OpenID form: %s'), $form_html->message)); } else { $action = new AutosubmitAction(); // see below $action->form_html = $form_html; @@ -211,7 +211,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false) function _oid_print_instructions() { common_element('div', 'instructions', - _('This form should automatically submit itself. '. + _m('This form should automatically submit itself. '. 'If not, click the submit button to go to your '. 'OpenID provider.')); } @@ -243,7 +243,7 @@ function oid_update_user(&$user, &$sreg) # XXX save timezone if it's passed if (!$profile->update($orig_profile)) { - common_server_error(_('Error saving the profile.')); + common_server_error(_m('Error saving the profile.')); return false; } @@ -254,7 +254,7 @@ function oid_update_user(&$user, &$sreg) } if (!$user->update($orig_user)) { - common_server_error(_('Error saving the user.')); + common_server_error(_m('Error saving the user.')); return false; } @@ -274,7 +274,7 @@ class AutosubmitAction extends Action function title() { - return _('OpenID Auto-Submit'); + return _m('OpenID Auto-Submit'); } function showContent() diff --git a/plugins/OpenID/openidlogin.php b/plugins/OpenID/openidlogin.php index 29e89234e..9ba55911c 100644 --- a/plugins/OpenID/openidlogin.php +++ b/plugins/OpenID/openidlogin.php @@ -27,14 +27,14 @@ class OpenidloginAction extends Action { parent::handle($args); if (common_is_real_login()) { - $this->clientError(_('Already logged in.')); + $this->clientError(_m('Already logged in.')); } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { $openid_url = $this->trimmed('openid_url'); # CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { - $this->showForm(_('There was a problem with your session token. Try again, please.'), $openid_url); + $this->showForm(_m('There was a problem with your session token. Try again, please.'), $openid_url); return; } @@ -63,11 +63,11 @@ class OpenidloginAction extends Action common_get_returnto()) { // rememberme logins have to reauthenticate before // changing any profile settings (cookie-stealing protection) - return _('For security reasons, please re-login with your ' . + return _m('For security reasons, please re-login with your ' . '[OpenID](%%doc.openid%%) ' . 'before changing your settings.'); } else { - return _('Login with an [OpenID](%%doc.openid%%) account.'); + return _m('Login with an [OpenID](%%doc.openid%%) account.'); } } @@ -92,7 +92,7 @@ class OpenidloginAction extends Action function title() { - return _('OpenID Login'); + return _m('OpenID Login'); } function showForm($error=null, $openid_url) @@ -109,22 +109,22 @@ class OpenidloginAction extends Action 'class' => 'form_settings', 'action' => $formaction)); $this->elementStart('fieldset'); - $this->element('legend', null, _('OpenID login')); + $this->element('legend', null, _m('OpenID login')); $this->hidden('token', common_session_token()); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); - $this->input('openid_url', _('OpenID URL'), + $this->input('openid_url', _m('OpenID URL'), $this->openid_url, - _('Your OpenID URL')); + _m('Your OpenID URL')); $this->elementEnd('li'); $this->elementStart('li', array('id' => 'settings_rememberme')); - $this->checkbox('rememberme', _('Remember me'), false, - _('Automatically login in the future; ' . + $this->checkbox('rememberme', _m('Remember me'), false, + _m('Automatically login in the future; ' . 'not for shared computers!')); $this->elementEnd('li'); $this->elementEnd('ul'); - $this->submit('submit', _('Login')); + $this->submit('submit', _m('Login')); $this->elementEnd('fieldset'); $this->elementEnd('form'); } diff --git a/plugins/OpenID/openidserver.php b/plugins/OpenID/openidserver.php index dab97c93e..181cbdf45 100644 --- a/plugins/OpenID/openidserver.php +++ b/plugins/OpenID/openidserver.php @@ -103,7 +103,7 @@ class OpenidserverAction extends Action $response = $this->generateDenyResponse($request); } else { //invalid - $this->clientError(sprintf(_('You are not authorized to use the identity %s'),$request->identity),$code=403); + $this->clientError(sprintf(_m('You are not authorized to use the identity %s'),$request->identity),$code=403); } } else { $response = $this->oserver->handleRequest($request); @@ -123,7 +123,7 @@ class OpenidserverAction extends Action } $this->raw($response->body); }else{ - $this->clientError(_('Just an OpenID provider. Nothing to see here, move along...'),$code=500); + $this->clientError(_m('Just an OpenID provider. Nothing to see here, move along...'),$code=500); } } diff --git a/plugins/OpenID/openidsettings.php b/plugins/OpenID/openidsettings.php index 3ad46f5f5..3fc3d6128 100644 --- a/plugins/OpenID/openidsettings.php +++ b/plugins/OpenID/openidsettings.php @@ -56,7 +56,7 @@ class OpenidsettingsAction extends AccountSettingsAction function title() { - return _('OpenID settings'); + return _m('OpenID settings'); } /** @@ -67,7 +67,7 @@ class OpenidsettingsAction extends AccountSettingsAction function getInstructions() { - return _('[OpenID](%%doc.openid%%) lets you log into many sites' . + return _m('[OpenID](%%doc.openid%%) lets you log into many sites' . ' with the same user account.'. ' Manage your associated OpenIDs from here.'); } @@ -96,15 +96,15 @@ class OpenidsettingsAction extends AccountSettingsAction 'action' => common_local_url('openidsettings'))); $this->elementStart('fieldset', array('id' => 'settings_openid_add')); - $this->element('legend', null, _('Add OpenID')); + $this->element('legend', null, _m('Add OpenID')); $this->hidden('token', common_session_token()); $this->element('p', 'form_guide', - _('If you want to add an OpenID to your account, ' . + _m('If you want to add an OpenID to your account, ' . 'enter it in the box below and click "Add".')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); $this->element('label', array('for' => 'openid_url'), - _('OpenID URL')); + _m('OpenID URL')); $this->element('input', array('name' => 'openid_url', 'type' => 'text', 'id' => 'openid_url')); @@ -114,7 +114,7 @@ class OpenidsettingsAction extends AccountSettingsAction 'id' => 'settings_openid_add_action-submit', 'name' => 'add', 'class' => 'submit', - 'value' => _('Add'))); + 'value' => _m('Add'))); $this->elementEnd('fieldset'); $this->elementEnd('form'); @@ -126,12 +126,12 @@ class OpenidsettingsAction extends AccountSettingsAction if ($cnt > 0) { - $this->element('h2', null, _('Remove OpenID')); + $this->element('h2', null, _m('Remove OpenID')); if ($cnt == 1 && !$user->password) { $this->element('p', 'form_guide', - _('Removing your only OpenID '. + _m('Removing your only OpenID '. 'would make it impossible to log in! ' . 'If you need to remove it, '. 'add another OpenID first.')); @@ -146,7 +146,7 @@ class OpenidsettingsAction extends AccountSettingsAction } else { $this->element('p', 'form_guide', - _('You can remove an OpenID from your account '. + _m('You can remove an OpenID from your account '. 'by clicking the button marked "Remove".')); $idx = 0; @@ -169,7 +169,7 @@ class OpenidsettingsAction extends AccountSettingsAction 'id' => 'remove'.$idx, 'name' => 'remove', 'class' => 'submit remove', - 'value' => _('Remove'))); + 'value' => _m('Remove'))); $this->elementEnd('fieldset'); $this->elementEnd('form'); $idx++; @@ -191,7 +191,7 @@ class OpenidsettingsAction extends AccountSettingsAction // CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { - $this->showForm(_('There was a problem with your session token. '. + $this->showForm(_m('There was a problem with your session token. '. 'Try again, please.')); return; } @@ -205,7 +205,7 @@ class OpenidsettingsAction extends AccountSettingsAction } else if ($this->arg('remove')) { $this->removeOpenid(); } else { - $this->showForm(_('Something weird happened.')); + $this->showForm(_m('Something weird happened.')); } } @@ -225,16 +225,16 @@ class OpenidsettingsAction extends AccountSettingsAction $oid = User_openid::staticGet('canonical', $openid_url); if (!$oid) { - $this->showForm(_('No such OpenID.')); + $this->showForm(_m('No such OpenID.')); return; } $cur = common_current_user(); if (!$cur || $oid->user_id != $cur->id) { - $this->showForm(_('That OpenID does not belong to you.')); + $this->showForm(_m('That OpenID does not belong to you.')); return; } $oid->delete(); - $this->showForm(_('OpenID removed.'), true); + $this->showForm(_m('OpenID removed.'), true); return; } } diff --git a/plugins/OpenID/openidtrust.php b/plugins/OpenID/openidtrust.php index 29c7bdc23..fa7ea36e2 100644 --- a/plugins/OpenID/openidtrust.php +++ b/plugins/OpenID/openidtrust.php @@ -48,7 +48,7 @@ class OpenidtrustAction extends Action function title() { - return _('OpenID Identity Verification'); + return _m('OpenID Identity Verification'); } function prepare($args) @@ -66,7 +66,7 @@ class OpenidtrustAction extends Action $this->allowUrl = $_SESSION['openid_allow_url']; $this->denyUrl = $_SESSION['openid_deny_url']; if(empty($this->trust_root) || empty($this->allowUrl) || empty($this->denyUrl)){ - $this->clientError(_('This page should only be reached during OpenID processing, not directly.')); + $this->clientError(_m('This page should only be reached during OpenID processing, not directly.')); return; } return true; @@ -115,7 +115,7 @@ class OpenidtrustAction extends Action function showPageNotice() { - $this->element('p',null,sprintf(_('%s has asked to verify your identity. Click Continue to verify your identity and login without creating a new password.'),$this->trust_root)); + $this->element('p',null,sprintf(_m('%s has asked to verify your identity. Click Continue to verify your identity and login without creating a new password.'),$this->trust_root)); } /** @@ -133,8 +133,8 @@ class OpenidtrustAction extends Action 'class' => 'form_settings', 'action' => common_local_url('openidtrust'))); $this->elementStart('fieldset'); - $this->submit('allow', _('Continue')); - $this->submit('deny', _('Cancel')); + $this->submit('allow', _m('Continue')); + $this->submit('deny', _m('Cancel')); $this->elementEnd('fieldset'); $this->elementEnd('form'); diff --git a/plugins/PiwikAnalyticsPlugin.php b/plugins/PiwikAnalyticsPlugin.php index 54faa0bdb..fefd09867 100644 --- a/plugins/PiwikAnalyticsPlugin.php +++ b/plugins/PiwikAnalyticsPlugin.php @@ -81,25 +81,20 @@ class PiwikAnalyticsPlugin extends Plugin function onEndShowScripts($action) { - $piwikCode = <<<ENDOFPIWIK - -<!-- Piwik --> -<script type="text/javascript"> + $piwikCode1 = <<<ENDOFPIWIK var pkBaseURL = (("https:" == document.location.protocol) ? "https://{$this->piwikroot}" : "http://{$this->piwikroot}"); document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E")); -</script> -<script type="text/javascript"> +ENDOFPIWIK; + $piwikCode2 = <<<ENDOFPIWIK try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {$this->piwikId}); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {} -</script> -<!-- End Piwik Tag --> - ENDOFPIWIK; - $action->raw($piwikCode); + $action->inlineScript($piwikCode1); + $action->inlineScript($piwikCode2); return true; } } diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php index cbfa6bae0..3e33fdaf1 100644 --- a/plugins/Realtime/RealtimePlugin.php +++ b/plugins/Realtime/RealtimePlugin.php @@ -105,22 +105,18 @@ class RealtimePlugin extends Plugin $realtimeUI = ' RealtimeUpdate.initActions("'.$url.'", "'.$timeline.'", "'. $pluginPath .'");'; } - $action->elementStart('script', array('type' => 'text/javascript')); - $script = ' $(document).ready(function() { '. $realtimeUI. $this->_updateInitialize($timeline, $user_id). '}); '; - $action->raw($script); - - $action->elementEnd('script'); + $action->inlineScript($script); return true; } function onEndShowStatusNetStyles($action) { - $action->cssLink(common_path('plugins/Realtime/realtimeupdate.css'), + $action->cssLink(common_path('plugins/Realtime/realtimeupdate.css'), null, 'screen, projection, tv'); return true; } @@ -293,13 +289,6 @@ class RealtimePlugin extends Plugin return $tags; } - // Push this up to Plugin - - function log($level, $msg) - { - common_log($level, get_class($this) . ': '.$msg); - } - function _getScripts() { return array('plugins/Realtime/realtimeupdate.js', diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js index ce0297339..56a52433f 100644 --- a/plugins/Realtime/realtimeupdate.js +++ b/plugins/Realtime/realtimeupdate.js @@ -191,8 +191,7 @@ RealtimeUpdate = { initActions: function(url, timeline, path) { - var NP = $('#notices_primary'); - NP.prepend('<ul id="realtime_actions"><li id="realtime_playpause"></li><li id="realtime_timeline"></li></ul>'); + $('#notices_primary').prepend('<ul id="realtime_actions"><li id="realtime_playpause"></li><li id="realtime_timeline"></li></ul>'); RealtimeUpdate._pluginPath = path; @@ -202,19 +201,30 @@ RealtimeUpdate = { initPlayPause: function() { - RealtimeUpdate.showPause(); + if (typeof(localStorage) == 'undefined') { + RealtimeUpdate.showPause(); + } + else { + if (localStorage.getItem('RealtimeUpdate_paused') === 'true') { + RealtimeUpdate.showPlay(); + } + else { + RealtimeUpdate.showPause(); + } + } }, showPause: function() { - RT_PP = $('#realtime_playpause'); - RT_PP.empty(); - RT_PP.append('<button id="realtime_pause" class="pause" title="Pause">Pause</button>'); + RealtimeUpdate.setPause(false); + RealtimeUpdate.showQueuedNotices(); + RealtimeUpdate.addNoticesHover(); - RT_P = $('#realtime_pause'); - RT_P.bind('click', function() { - RealtimeUpdate._paused = true; + $('#realtime_playpause').remove(); + $('#realtime_actions').prepend('<li id="realtime_playpause"><button id="realtime_pause" class="pause" title="Pause">Pause</button></li>'); + $('#realtime_pause').bind('click', function() { + RealtimeUpdate.removeNoticesHover(); RealtimeUpdate.showPlay(); return false; }); @@ -222,22 +232,24 @@ RealtimeUpdate = { showPlay: function() { - RT_PP = $('#realtime_playpause'); - RT_PP.empty(); - RT_PP.append('<span id="queued_counter"></span> <button id="realtime_play" class="play" title="Play">Play</button>'); - - RT_P = $('#realtime_play'); - RT_P.bind('click', function() { - RealtimeUpdate._paused = false; + RealtimeUpdate.setPause(true); + $('#realtime_playpause').remove(); + $('#realtime_actions').prepend('<li id="realtime_playpause"><span id="queued_counter"></span> <button id="realtime_play" class="play" title="Play">Play</button></li>'); + $('#realtime_play').bind('click', function() { RealtimeUpdate.showPause(); - - RealtimeUpdate.showQueuedNotices(); - return false; }); }, + setPause: function(state) + { + RealtimeUpdate._paused = state; + if (typeof(localStorage) != 'undefined') { + localStorage.setItem('RealtimeUpdate_paused', RealtimeUpdate._paused); + } + }, + showQueuedNotices: function() { $.each(RealtimeUpdate._queuedNotices, function(i, n) { @@ -259,13 +271,32 @@ RealtimeUpdate = { $('#realtime_playpause #queued_counter').empty(); }, + addNoticesHover: function() + { + $('#notices_primary .notices').hover( + function() { + if (RealtimeUpdate._paused === false) { + RealtimeUpdate.showPlay(); + } + }, + function() { + if (RealtimeUpdate._paused === true) { + RealtimeUpdate.showPause(); + } + } + ); + }, + + removeNoticesHover: function() + { + $('#notices_primary .notices').unbind(); + }, + initAddPopup: function(url, timeline, path) { - var NP = $('#realtime_timeline'); - NP.append('<button id="realtime_popup" title="Pop up in a window">Pop up</button>'); + $('#realtime_timeline').append('<button id="realtime_popup" title="Pop up in a window">Pop up</button>'); - var PP = $('#realtime_popup'); - PP.bind('click', function() { + $('#realtime_popup').bind('click', function() { window.open(url, '', 'toolbar=no,resizable=yes,scrollbars=yes,status=no,menubar=no,personalbar=no,location=no,width=500,height=550'); diff --git a/plugins/Recaptcha/RecaptchaPlugin.php b/plugins/Recaptcha/RecaptchaPlugin.php index 1a51b16be..db118dbb8 100644 --- a/plugins/Recaptcha/RecaptchaPlugin.php +++ b/plugins/Recaptcha/RecaptchaPlugin.php @@ -44,11 +44,11 @@ class RecaptchaPlugin extends Plugin var $ssl; function onInitializePlugin(){ - if(!isset($this->private_key)){ - common_log(LOG_ERR, "Recaptcha: Must specify private_key in config.php"); + if(!isset($this->private_key)) { + common_log(LOG_ERR, 'Recaptcha: Must specify private_key in config.php'); } - if(!isset($this->public_key)){ - common_log(LOG_ERR, "Recaptcha: Must specify public_key in config.php"); + if(!isset($this->public_key)) { + common_log(LOG_ERR, 'Recaptcha: Must specify public_key in config.php'); } } @@ -59,25 +59,13 @@ class RecaptchaPlugin extends Plugin return false; } - function onStartShowHTML($action) - { - //XXX: Horrible hack to make Safari, FF2, and Chrome work with - //reChapcha. reChapcha beaks xhtml strict - header('Content-Type: text/html'); - - $action->extraHeaders(); - - $action->startXML('html'); - - $action->raw('<style type="text/css">#recaptcha_area{float:left;}</style>'); - return false; - } function onEndRegistrationFormData($action) { + $action->style('#recaptcha_area{float:left;}'); $action->elementStart('li'); $action->raw('<label for="recaptcha_area">Captcha</label>'); - if($this->checkssl() === true){ + if($this->checkssl() === true) { $action->raw(recaptcha_get_html($this->public_key), null, true); } else { $action->raw(recaptcha_get_html($this->public_key)); @@ -93,11 +81,9 @@ class RecaptchaPlugin extends Plugin $action->trimmed('recaptcha_challenge_field'), $action->trimmed('recaptcha_response_field')); - if (!$resp->is_valid) - { - if($this->display_errors) - { - $action->showForm ("(reCAPTCHA said: " . $resp->error . ")"); + if (!$resp->is_valid) { + if($this->display_errors) { + $action->showForm ("(reCAPTCHA error: " . $resp->error . ")"); } $action->showForm("Captcha does not match!"); return false; diff --git a/plugins/RequireValidatedEmail/README b/plugins/RequireValidatedEmail/README new file mode 100644 index 000000000..ccd94d271 --- /dev/null +++ b/plugins/RequireValidatedEmail/README @@ -0,0 +1,21 @@ +This plugin disables posting for accounts that do not have a +validated email address. + +Example: + + addPlugin('RequireValidatedEmail'); + +If you don't want to apply the validationr equirement to existing +accounts, you can specify a cutoff date to grandfather in users +registered prior to that timestamp. + + addPlugin('RequireValidatedEmail', + array('grandfatherCutoff' => 'Dec 7, 2009'); + + +Todo: +* make email field required on registration form +* add a more visible indicator that validation is still outstanding +* localization for UI strings +* test with XMPP, API posting + diff --git a/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php b/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php index 4806538a0..04adbf00e 100644 --- a/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php +++ b/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php @@ -21,7 +21,7 @@ * * @category Plugin * @package StatusNet - * @author Craig Andrews <candrews@integralblue.com> + * @author Craig Andrews <candrews@integralblue.com>, Brion Vibber <brion@status.net> * @copyright 2009 Craig Andrews http://candrews.integralblue.com * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ @@ -33,20 +33,68 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { class RequireValidatedEmailPlugin extends Plugin { + // Users created before this time will be grandfathered in + // without the validation requirement. + public $grandfatherCutoff=null; + function __construct() { parent::__construct(); } + /** + * Event handler for notice saves; rejects the notice + * if user's address isn't validated. + * + * @param Notice $notice + * @return bool hook result code + */ function onStartNoticeSave($notice) { $user = User::staticGet('id', $notice->profile_id); if (!empty($user)) { // it's a remote notice - if (empty($user->email)) { + if (!$this->validated($user)) { throw new ClientException(_("You must validate your email address before posting.")); } } return true; } + + /** + * Check if a user has a validated email address or has been + * otherwise grandfathered in. + * + * @param User $user + * @return bool + */ + protected function validated($user) + { + if ($this->grandfathered($user)) { + return true; + } + + // The email field is only stored after validation... + // Until then you'll find them in confirm_address. + return !empty($user->email); + } + + /** + * Check if a user was created before the grandfathering cutoff. + * If so, we won't need to check for validation. + * + * @param User $user + * @return bool + */ + protected function grandfathered($user) + { + if ($this->grandfatherCutoff) { + $created = strtotime($user->created . " GMT"); + $cutoff = strtotime($this->grandfatherCutoff); + if ($created < $cutoff) { + return true; + } + } + return false; + } } diff --git a/plugins/Sample/SamplePlugin.php b/plugins/Sample/SamplePlugin.php new file mode 100644 index 000000000..6e361aafb --- /dev/null +++ b/plugins/Sample/SamplePlugin.php @@ -0,0 +1,59 @@ +<?php +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2009, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * @package SamplePlugin + * @maintainer Your Name <you@example.com> + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +class SamplePlugin extends Plugin +{ + function onInitializePlugin() + { + // Event handlers normally return true to indicate that all is well. + // + // Returning false will cancel further processing of any other + // plugins or core code hooking the same event. + return true; + } + + /** + * Hook for RouterInitialized event. + * + * @param Net_URL_Mapper $m path-to-action mapper + * @return boolean hook return + */ + + function onRouterInitialized($m) + { + $m->connect(':nickname/samples', + array('action' => 'showsamples'), + array('feed' => '[A-Za-z0-9_-]+')); + $m->connect('settings/sample', + array('action' => 'samplesettings')); + return true; + } +} + diff --git a/plugins/TwitterBridge/TwitterBridgePlugin.php b/plugins/TwitterBridge/TwitterBridgePlugin.php index ad3c2e551..de1181903 100644 --- a/plugins/TwitterBridge/TwitterBridgePlugin.php +++ b/plugins/TwitterBridge/TwitterBridgePlugin.php @@ -86,8 +86,8 @@ class TwitterBridgePlugin extends Plugin $action_name = $action->trimmed('action'); $action->menuItem(common_local_url('twittersettings'), - _('Twitter'), - _('Twitter integration options'), + _m('Twitter'), + _m('Twitter integration options'), $action_name === 'twittersettings'); return true; @@ -127,7 +127,12 @@ class TwitterBridgePlugin extends Plugin */ function onStartEnqueueNotice($notice, &$transports) { - array_push($transports, 'twitter'); + // Avoid a possible loop + + if ($notice->source != 'twitter') { + array_push($transports, 'twitter'); + } + return true; } diff --git a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php index b5428316b..b4ca12be2 100755 --- a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php +++ b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php @@ -109,7 +109,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon $flink->find(); $flinks = array(); - common_log(LOG_INFO, "hello"); while ($flink->fetch()) { @@ -210,7 +209,13 @@ class TwitterStatusFetcher extends ParallelizingDaemon continue; } - $this->saveStatus($status, $flink); + $notice = null; + + $notice = $this->saveStatus($status, $flink); + + if (!empty($notice)) { + common_broadcast_notice($notice); + } } // Okay, record the time we synced with Twitter for posterity @@ -236,12 +241,14 @@ class TwitterStatusFetcher extends ParallelizingDaemon $uri = 'http://twitter.com/' . $status->user->screen_name . '/status/' . $status->id; - $notice = Notice::staticGet('uri', $uri); - // check to see if we've already imported the status + $notice = Notice::staticGet('uri', $uri); + if (empty($notice)) { + // XXX: transaction here? + $notice = new Notice(); $notice->profile_id = $id; @@ -258,6 +265,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon $id = $notice->insert(); Event::handle('EndNoticeSave', array($notice)); } + } if (!Notice_inbox::pkeyGet(array('notice_id' => $notice->id, @@ -271,7 +279,12 @@ class TwitterStatusFetcher extends ParallelizingDaemon $inbox->source = NOTICE_INBOX_SOURCE_GATEWAY; // From a private source $inbox->insert(); + } + + $notice->blowCaches(); + + return $notice; } function ensureProfile($user) diff --git a/plugins/TwitterBridge/locale/TwitterBridge.po b/plugins/TwitterBridge/locale/TwitterBridge.po new file mode 100644 index 000000000..14c30f1c9 --- /dev/null +++ b/plugins/TwitterBridge/locale/TwitterBridge.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-12-07 20:38-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: twitterauthorization.php:81 +msgid "Not logged in." +msgstr "" + +#: twitterauthorization.php:131 twitterauthorization.php:150 +#: twitterauthorization.php:170 twitterauthorization.php:217 +msgid "Couldn't link your Twitter account." +msgstr "" + +#: TwitterBridgePlugin.php:89 +msgid "Twitter" +msgstr "" + +#: TwitterBridgePlugin.php:90 +msgid "Twitter integration options" +msgstr "" + +#: twittersettings.php:59 +msgid "Twitter settings" +msgstr "" + +#: twittersettings.php:70 +msgid "" +"Connect your Twitter account to share your updates with your Twitter friends " +"and vice-versa." +msgstr "" + +#: twittersettings.php:118 +msgid "Twitter account" +msgstr "" + +#: twittersettings.php:123 +msgid "Connected Twitter account" +msgstr "" + +#: twittersettings.php:125 +msgid "Remove" +msgstr "" + +#: twittersettings.php:131 +msgid "Preferences" +msgstr "" + +#: twittersettings.php:135 +msgid "Automatically send my notices to Twitter." +msgstr "" + +#: twittersettings.php:142 +msgid "Send local \"@\" replies to Twitter." +msgstr "" + +#: twittersettings.php:149 +msgid "Subscribe to my Twitter friends here." +msgstr "" + +#: twittersettings.php:158 +msgid "Import my Friends Timeline." +msgstr "" + +#: twittersettings.php:174 +msgid "Save" +msgstr "" + +#: twittersettings.php:176 +msgid "Add" +msgstr "" + +#: twittersettings.php:201 +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#: twittersettings.php:211 +msgid "Unexpected form submission." +msgstr "" + +#: twittersettings.php:230 +msgid "Couldn't remove Twitter user." +msgstr "" + +#: twittersettings.php:234 +msgid "Twitter account removed." +msgstr "" + +#: twittersettings.php:255 twittersettings.php:265 +msgid "Couldn't save Twitter preferences." +msgstr "" + +#: twittersettings.php:269 +msgid "Twitter preferences saved." +msgstr "" + +#: twitter.php:333 +msgid "Your Twitter bridge has been disabled." +msgstr "" + +#: twitter.php:337 +#, php-format +msgid "" +"Hi, %1$s. We're sorry to inform you that your link to Twitter has been " +"disabled. We no longer seem to have permission to update your Twitter " +"status. (Did you revoke %3$s's access?)\n" +"\n" +"You can re-enable your Twitter bridge by visiting your Twitter settings " +"page:\n" +"\n" +"\t%2$s\n" +"\n" +"Regards,\n" +"%3$s\n" +msgstr "" diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php index fd5150638..b338a200d 100644 --- a/plugins/TwitterBridge/twitter.php +++ b/plugins/TwitterBridge/twitter.php @@ -330,11 +330,11 @@ function mail_twitter_bridge_removed($user) $profile = $user->getProfile(); - $subject = sprintf(_('Your Twitter bridge has been disabled.')); + $subject = sprintf(_m('Your Twitter bridge has been disabled.')); $site_name = common_config('site', 'name'); - $body = sprintf(_('Hi, %1$s. We\'re sorry to inform you that your ' . + $body = sprintf(_m('Hi, %1$s. We\'re sorry to inform you that your ' . 'link to Twitter has been disabled. We no longer seem to have ' . 'permission to update your Twitter status. (Did you revoke ' . '%3$s\'s access?)' . "\n\n" . diff --git a/plugins/TwitterBridge/twitterauthorization.php b/plugins/TwitterBridge/twitterauthorization.php index f1daefab1..4af2f0394 100644 --- a/plugins/TwitterBridge/twitterauthorization.php +++ b/plugins/TwitterBridge/twitterauthorization.php @@ -78,7 +78,7 @@ class TwitterauthorizationAction extends Action parent::handle($args); if (!common_logged_in()) { - $this->clientError(_('Not logged in.'), 403); + $this->clientError(_m('Not logged in.'), 403); } $user = common_current_user(); @@ -128,7 +128,7 @@ class TwitterauthorizationAction extends Action } catch (OAuthClientException $e) { $msg = sprintf('OAuth client cURL error - code: %1s, msg: %2s', $e->getCode(), $e->getMessage()); - $this->serverError(_('Couldn\'t link your Twitter account.')); + $this->serverError(_m('Couldn\'t link your Twitter account.')); } common_redirect($auth_link); @@ -147,7 +147,7 @@ class TwitterauthorizationAction extends Action // token we sent them if ($_SESSION['twitter_request_token'] != $this->oauth_token) { - $this->serverError(_('Couldn\'t link your Twitter account.')); + $this->serverError(_m('Couldn\'t link your Twitter account.')); } try { @@ -167,7 +167,7 @@ class TwitterauthorizationAction extends Action } catch (OAuthClientException $e) { $msg = sprintf('OAuth client cURL error - code: %1$s, msg: %2$s', $e->getCode(), $e->getMessage()); - $this->serverError(_('Couldn\'t link your Twitter account.')); + $this->serverError(_m('Couldn\'t link your Twitter account.')); } // Save the access token and Twitter user info @@ -214,7 +214,7 @@ class TwitterauthorizationAction extends Action if (empty($flink_id)) { common_log_db_error($flink, 'INSERT', __FILE__); - $this->serverError(_('Couldn\'t link your Twitter account.')); + $this->serverError(_m('Couldn\'t link your Twitter account.')); } save_twitter_user($twitter_user->id, $twitter_user->screen_name); diff --git a/plugins/TwitterBridge/twittersettings.php b/plugins/TwitterBridge/twittersettings.php index ca22c9553..bc9a636a1 100644 --- a/plugins/TwitterBridge/twittersettings.php +++ b/plugins/TwitterBridge/twittersettings.php @@ -56,7 +56,7 @@ class TwittersettingsAction extends ConnectSettingsAction function title() { - return _('Twitter settings'); + return _m('Twitter settings'); } /** @@ -67,8 +67,8 @@ class TwittersettingsAction extends ConnectSettingsAction function getInstructions() { - return _('Connect your Twitter account to share your updates ' . - 'with your Twitter friends and vice-versa.'); + return _m('Connect your Twitter account to share your updates ' . + 'with your Twitter friends and vice-versa.'); } /** @@ -115,38 +115,38 @@ class TwittersettingsAction extends ConnectSettingsAction $this->elementEnd('fieldset'); } else { - $this->element('legend', null, _('Twitter account')); + $this->element('legend', null, _m('Twitter account')); $this->elementStart('p', array('id' => 'form_confirmed')); $this->element('a', array('href' => $fuser->uri), $fuser->nickname); $this->elementEnd('p'); $this->element('p', 'form_note', - _('Connected Twitter account')); + _m('Connected Twitter account')); - $this->submit('remove', _('Remove')); + $this->submit('remove', _m('Remove')); $this->elementEnd('fieldset'); $this->elementStart('fieldset', array('id' => 'settings_twitter_preferences')); - $this->element('legend', null, _('Preferences')); + $this->element('legend', null, _m('Preferences')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); $this->checkbox('noticesend', - _('Automatically send my notices to Twitter.'), + _m('Automatically send my notices to Twitter.'), ($flink) ? ($flink->noticesync & FOREIGN_NOTICE_SEND) : true); $this->elementEnd('li'); $this->elementStart('li'); $this->checkbox('replysync', - _('Send local "@" replies to Twitter.'), + _m('Send local "@" replies to Twitter.'), ($flink) ? ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true); $this->elementEnd('li'); $this->elementStart('li'); $this->checkbox('friendsync', - _('Subscribe to my Twitter friends here.'), + _m('Subscribe to my Twitter friends here.'), ($flink) ? ($flink->friendsync & FOREIGN_FRIEND_RECV) : false); @@ -155,7 +155,7 @@ class TwittersettingsAction extends ConnectSettingsAction if (common_config('twitterimport','enabled')) { $this->elementStart('li'); $this->checkbox('noticerecv', - _('Import my Friends Timeline.'), + _m('Import my Friends Timeline.'), ($flink) ? ($flink->noticesync & FOREIGN_NOTICE_RECV) : false); @@ -171,9 +171,9 @@ class TwittersettingsAction extends ConnectSettingsAction $this->elementEnd('ul'); if ($flink) { - $this->submit('save', _('Save')); + $this->submit('save', _m('Save')); } else { - $this->submit('add', _('Add')); + $this->submit('add', _m('Add')); } $this->elementEnd('fieldset'); @@ -198,8 +198,8 @@ class TwittersettingsAction extends ConnectSettingsAction // CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { - $this->showForm(_('There was a problem with your session token. '. - 'Try again, please.')); + $this->showForm(_m('There was a problem with your session token. '. + 'Try again, please.')); return; } @@ -208,7 +208,7 @@ class TwittersettingsAction extends ConnectSettingsAction } else if ($this->arg('remove')) { $this->removeTwitterAccount(); } else { - $this->showForm(_('Unexpected form submission.')); + $this->showForm(_m('Unexpected form submission.')); } } @@ -227,11 +227,11 @@ class TwittersettingsAction extends ConnectSettingsAction if (empty($result)) { common_log_db_error($flink, 'DELETE', __FILE__); - $this->serverError(_('Couldn\'t remove Twitter user.')); + $this->serverError(_m('Couldn\'t remove Twitter user.')); return; } - $this->showForm(_('Twitter account removed.'), true); + $this->showForm(_m('Twitter account removed.'), true); } /** @@ -252,7 +252,7 @@ class TwittersettingsAction extends ConnectSettingsAction if (empty($flink)) { common_log_db_error($flink, 'SELECT', __FILE__); - $this->showForm(_('Couldn\'t save Twitter preferences.')); + $this->showForm(_m('Couldn\'t save Twitter preferences.')); return; } @@ -262,11 +262,11 @@ class TwittersettingsAction extends ConnectSettingsAction if ($result === false) { common_log_db_error($flink, 'UPDATE', __FILE__); - $this->showForm(_('Couldn\'t save Twitter preferences.')); + $this->showForm(_m('Couldn\'t save Twitter preferences.')); return; } - $this->showForm(_('Twitter preferences saved.'), true); + $this->showForm(_m('Twitter preferences saved.'), true); } } diff --git a/plugins/UserFlag/UserFlagPlugin.php b/plugins/UserFlag/UserFlagPlugin.php index 60c0c2c0a..75dcca4fc 100644 --- a/plugins/UserFlag/UserFlagPlugin.php +++ b/plugins/UserFlag/UserFlagPlugin.php @@ -68,7 +68,7 @@ class UserFlagPlugin extends Plugin return true; } - function onRouterInitialized(&$m) { + function onRouterInitialized($m) { $m->connect('main/flag/profile', array('action' => 'flagprofile')); $m->connect('admin/profile/flag', array('action' => 'adminprofileflag')); return true; @@ -145,9 +145,7 @@ class UserFlagPlugin extends Plugin function onEndShowScripts($action) { - $action->elementStart('script', array('type' => 'text/javascript')); - $action->raw('/*<![CDATA[*/ if ($(".form_entity_flag").length > 0) { SN.U.FormXHR($(".form_entity_flag")); } /*]]>*/'); - $action->elementEnd('script'); + $action->inlineScript('if ($(".form_entity_flag").length > 0) { SN.U.FormXHR($(".form_entity_flag")); }'); return true; } } diff --git a/scripts/fixup_utf8.php b/scripts/fixup_utf8.php index 5a9fba7c3..30befadfd 100755 --- a/scripts/fixup_utf8.php +++ b/scripts/fixup_utf8.php @@ -145,7 +145,7 @@ class UTF8FixerUpper echo "$id..."; - $result =& $this->dbu->execute($sth, array($content, $rendered, $id)); + $result = $this->dbu->execute($sth, array($content, $rendered, $id)); if (PEAR::isError($result)) { echo "ERROR: " . $result->getMessage() . "\n"; @@ -209,7 +209,7 @@ class UTF8FixerUpper echo "$id..."; - $result =& $this->dbu->execute($sth, array($fullname, $location, $bio, $id)); + $result = $this->dbu->execute($sth, array($fullname, $location, $bio, $id)); if (PEAR::isError($result)) { echo "ERROR: " . $result->getMessage() . "\n"; @@ -273,7 +273,7 @@ class UTF8FixerUpper echo "$id..."; - $result =& $this->dbu->execute($sth, array($fullname, $location, $description, $id)); + $result = $this->dbu->execute($sth, array($fullname, $location, $description, $id)); if (PEAR::isError($result)) { echo "ERROR: " . $result->getMessage() . "\n"; @@ -330,7 +330,7 @@ class UTF8FixerUpper echo "$id..."; - $result =& $this->dbu->execute($sth, array($content, $rendered, $id)); + $result = $this->dbu->execute($sth, array($content, $rendered, $id)); if (PEAR::isError($result)) { echo "ERROR: " . $result->getMessage() . "\n"; diff --git a/scripts/setup_status_network.sh b/scripts/setup_status_network.sh index d40d4724f..777711fb5 100755 --- a/scripts/setup_status_network.sh +++ b/scripts/setup_status_network.sh @@ -19,8 +19,8 @@ done mysql -h $DBHOST -u $ADMIN --password=$ADMINPASS $SITEDB << ENDOFCOMMANDS -GRANT INSERT,SELECT,UPDATE,DELETE ON $database.* TO '$username'@'localhost' IDENTIFIED BY '$password'; -GRANT INSERT,SELECT,UPDATE,DELETE ON $database.* TO '$username'@'%' IDENTIFIED BY '$password'; +GRANT ALL ON $database.* TO '$username'@'localhost' IDENTIFIED BY '$password'; +GRANT ALL ON $database.* TO '$username'@'%' IDENTIFIED BY '$password'; INSERT INTO status_network (nickname, dbhost, dbuser, dbpass, dbname, sitename, created) VALUES ('$nickname', '$DBHOSTNAME', '$username', '$password', '$database', '$sitename', now()); diff --git a/scripts/update_po_templates.php b/scripts/update_po_templates.php new file mode 100755 index 000000000..83bff6d80 --- /dev/null +++ b/scripts/update_po_templates.php @@ -0,0 +1,211 @@ +#!/usr/bin/env php +<?php +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2008, 2009, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +// Abort if called from a web server +if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { + print "This script must be run from the command line\n"; + exit(); +} + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); + +function update_core($dir, $domain) +{ + $old = getcwd(); + chdir($dir); + passthru(<<<END +xgettext \ + --from-code=UTF-8 \ + --default-domain=$domain \ + --output=locale/$domain.po \ + --language=PHP \ + --keyword="_m:1" \ + --keyword="pgettext:1c,2" \ + --keyword="npgettext:1c,2,3" \ + actions/*.php \ + classes/*.php \ + lib/*.php \ + scripts/*.php +END +); + chdir($old); +} + +function do_update_plugin($dir, $domain) +{ + $old = getcwd(); + chdir($dir); + if (!file_exists('locale')) { + mkdir('locale'); + } + $files = get_plugin_sources("."); + $cmd = <<<END +xgettext \ + --from-code=UTF-8 \ + --default-domain=$domain \ + --output=locale/$domain.po \ + --language=PHP \ + --keyword='' \ + --keyword="_m:1" \ + +END; + foreach ($files as $file) { + $cmd .= ' ' . escapeshellarg($file); + } + passthru($cmd); + chdir($old); +} + +function do_translatewiki_plugin($basedir, $plugin) +{ + $yamldir = "$basedir/locale/TranslateWiki"; + if (!file_exists($yamldir)) { + mkdir($yamldir); + } + $outfile = "$yamldir/StatusNet-{$plugin}.yml"; + $data = <<<END +--- +BASIC: + id: out-statusnet-{$plugin} + label: StatusNet - {$plugin} + description: "{{int:bw-desc-statusnet-plugin-{$plugin}}}" + namespace: NS_STATUSNET + display: out/statusnet/{$plugin} + class: GettextMessageGroup + +FILES: + class: GettextFFS + sourcePattern: %GROUPROOT%/plugins/{$plugin}/locale/%CODE%/LC_MESSAGES/{$plugin}.po + targetPattern: {$plugin}.po + codeMap: + en-gb: en_GB + no: nb + pt-br: pt_BR + zh-hans: zh_CN + zh-hant: zh_TW + +MANGLER + class: StringMatcher + prefix: {$plugin}- + patterns: + - "*" + +END; + file_put_contents($outfile, $data); +} + +function get_plugins($dir) +{ + $plugins = array(); + $dirs = new DirectoryIterator("$dir/plugins"); + foreach ($dirs as $item) { + if ($item->isDir() && !$item->isDot()) { + $name = $item->getBasename(); + if (file_exists("$dir/plugins/$name/{$name}Plugin.php")) { + $plugins[] = $name; + } + } + } + return $plugins; +} + +function get_plugin_sources($dir) +{ + $files = array(); + + $dirs = new RecursiveDirectoryIterator($dir); + $iter = new RecursiveIteratorIterator($dirs); + foreach ($iter as $pathname => $item) { + if ($item->isFile() && preg_match('/\.php$/', $item->getBaseName())) { + $files[] = $pathname; + } + } + return $files; +} + +function plugin_using_gettext($dir) +{ + $files = get_plugin_sources($dir); + foreach ($files as $pathname) { + // Check if the file is using our _m gettext wrapper + $code = file_get_contents($pathname); + if (preg_match('/\b_m\(/', $code)) { + return true; + } + } + + return false; +} + +function update_plugin($basedir, $name) +{ + $dir = "$basedir/plugins/$name"; + if (plugin_using_gettext($dir)) { + do_update_plugin($dir, $name); + do_translatewiki_plugin($basedir, $name); + return true; + } else { + return false; + } +} + +$args = $_SERVER['argv']; +array_shift($args); + +$all = false; +$core = false; +$allplugins = false; +$plugins = array(); +if (count($args) == 0) { + $all = true; +} +foreach ($args as $arg) { + if ($arg == '--all') { + $all = true; + } elseif ($arg == "--core") { + $core = true; + } elseif ($arg == "--plugins") { + $allplugins = true; + } elseif (substr($arg, 0, 9) == "--plugin=") { + $plugins[] = substr($arg, 9); + } +} + + + +if ($all || $core) { + echo "core..."; + update_core(INSTALLDIR, 'statusnet'); + echo " ok\n"; +} +if ($all || $allplugins) { + $plugins = get_plugins(INSTALLDIR); +} +if ($plugins) { + foreach ($plugins as $plugin) { + echo "$plugin..."; + if (update_plugin(INSTALLDIR, $plugin)) { + echo " ok\n"; + } else { + echo " not localized\n"; + } + } +} + diff --git a/scripts/update_pot.sh b/scripts/update_pot.sh deleted file mode 100755 index de53fe7c9..000000000 --- a/scripts/update_pot.sh +++ /dev/null @@ -1,13 +0,0 @@ -cd `dirname $0` -cd .. -xgettext \ - --from-code=UTF-8 \ - --default-domain=statusnet \ - --output=locale/statusnet.po \ - --language=PHP \ - --keyword="pgettext:1c,2" \ - --keyword="npgettext:1c,2,3" \ - actions/*.php \ - classes/*.php \ - lib/*.php \ - scripts/*.php diff --git a/scripts/updateavatarurl.php b/scripts/updateavatarurl.php index dfcfc118c..617c2e24c 100644 --- a/scripts/updateavatarurl.php +++ b/scripts/updateavatarurl.php @@ -60,7 +60,8 @@ try { } } } else { - throw new Exception("You have to provide an ID or nickname or 'all'."); + show_help(); + exit(1); } } catch (Exception $e) { print $e->getMessage()."\n"; @@ -123,6 +124,9 @@ function updateAvatars($user) } if (have_option('v', 'verbose')) { - print "DONE.\n"; + print "DONE."; + } + if (!have_option('q', 'quiet') || have_option('v', 'verbose')) { + print "\n"; } } diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 44d1d0300..f622f35ca 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -112,7 +112,6 @@ border-style:solid; line-height:0; } - .form_settings input.remove { margin-left:11px; } @@ -246,7 +245,6 @@ margin-left:11px; width:auto; } - address { float:left; margin-bottom:18px; @@ -709,7 +707,6 @@ border-radius:4px; margin-bottom:18px; } - .entity_send-a-message button { position:absolute; top:3px; @@ -1005,11 +1002,13 @@ float:left; } .notice-options .notice_delete, .notice-options .notice_reply, +.notice-options .form_forward, .notice-options .form_favor, .notice-options .form_disfavor { float:left; margin-left:20%; } +.notice-options .form_forward, .notice-options .form_favor, .notice-options .form_disfavor { margin-left:0; @@ -1035,10 +1034,12 @@ border-radius:0; -moz-border-radius:0; -webkit-border-radius:0; } +.notice-options .form_forward legend, .notice-options .form_favor legend, .notice-options .form_disfavor legend { display:none; } +.notice-options .form_forward fieldset, .notice-options .form_favor fieldset, .notice-options .form_disfavor fieldset { border:0; diff --git a/theme/base/images/illustrations/illu_pattern-01.png b/theme/base/images/illustrations/illu_pattern-01.png Binary files differnew file mode 100644 index 000000000..833309e58 --- /dev/null +++ b/theme/base/images/illustrations/illu_pattern-01.png diff --git a/theme/default/css/display.css b/theme/default/css/display.css index ad64b4198..d11bbe15e 100644 --- a/theme/default/css/display.css +++ b/theme/default/css/display.css @@ -55,7 +55,6 @@ border-color:#DDDDDD; background:none; } -input.submit, .form_notice.warning #notice_text-count, .form_settings .form_note, .entity_remote_subscribe, @@ -92,6 +91,27 @@ input.submit, .entity_actions .form_notice input.submit { color:#FFFFFF; } +input.submit { +background:#AAAAAA url(../../base/images/illustrations/illu_pattern-01.png) 0 0 repeat-x; +text-shadow:0 1px 0 #FFFFFF; +color:#000000; +border-color:#AAAAAA; +border-top-color:#CCCCCC; +border-left-color:#CCCCCC; +} +input.submit:hover { +background-position:0 -5px; +} +input.submit:focus { +background-position:0 -15px; +box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1); +-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1); +-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1); +text-shadow:none; +} +.entity_actions input.submit { +text-shadow:none; +} a, .form_settings input.form_action-primary, diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index d5a5d38de..d65ea2ef6 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -55,7 +55,6 @@ border-color:#DDDDDD; background:none; } -input.submit, .form_notice.warning #notice_text-count, .form_settings .form_note, .entity_remote_subscribe, @@ -92,6 +91,27 @@ input.submit, .entity_actions .form_notice input.submit { color:#FFFFFF; } +input.submit { +background:#AAAAAA url(../../base/images/illustrations/illu_pattern-01.png) 0 0 repeat-x; +text-shadow:0 1px 0 #FFFFFF; +color:#000000; +border-color:#AAAAAA; +border-top-color:#CCCCCC; +border-left-color:#CCCCCC; +} +input.submit:hover { +background-position:0 -5px; +} +input.submit:focus { +background-position:0 -15px; +box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1); +-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1); +-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1); +text-shadow:none; +} +.entity_actions input.submit { +text-shadow:none; +} a, .form_settings input.form_action-primary, |