Merge commit 'mainline/0.9.x' into 0.9.x

This commit is contained in:
Brenda Wallace 2010-01-24 14:54:31 +13:00
commit ef3b849db0
97 changed files with 2966 additions and 2288 deletions

View File

@ -150,6 +150,12 @@ StartAddressData: Allows the site owner to provide additional information about
EndAddressData: At the end of <address> EndAddressData: At the end of <address>
- $action: the current action - $action: the current action
StartShowSiteNotice: Before showing site notice
- $action: the current action
EndShowSiteNotice: After showing site notice
- $action: the current action
StartLoginGroupNav: Before showing the login and register navigation menu StartLoginGroupNav: Before showing the login and register navigation menu
- $action: the current action - $action: the current action
@ -687,3 +693,9 @@ StartLeaveGroup: when a user is leaving a group
EndLeaveGroup: when a user has left a group EndLeaveGroup: when a user has left a group
- $group: the group being left - $group: the group being left
- $user: the user leaving - $user: the user leaving
StartShowContentLicense: Showing the default license for content
- $action: the current action
EndShowContentLicense: Showing the default license for content
- $action: the current action

41
README
View File

@ -2,8 +2,8 @@
README README
------ ------
StatusNet 0.9.0 ("Stand") Release Candidate 2 StatusNet 0.9.0 ("Stand") Beta 3
22 Dec 2009 20 Jan 2010
This is the README file for StatusNet (formerly Laconica), the Open This is the README file for StatusNet (formerly Laconica), the Open
Source microblogging platform. It includes installation instructions, Source microblogging platform. It includes installation instructions,
@ -167,6 +167,37 @@ Notable changes this version:
- Add support for "repeats" (similar to Twitter's "retweets"). - Add support for "repeats" (similar to Twitter's "retweets").
- Support for repeats in Twitter API. - Support for repeats in Twitter API.
- Better notification of direct messages. - Better notification of direct messages.
- New plugin to add "powered by StatusNet" to logo.
- Returnto works for private sites.
- Localisation updates, including new Persian translation.
- CAS authentication plugin
- Get rid of DB_DataObject native cache (big memory leaker)
- setconfig.php script to set configuration variables
- Blacklist plugin, to blacklist URLs and nicknames
- Users can set flag whether they want to share location
both in notice form (for one notice) and profile settings
(any notice)
- notice inboxes moved from normalized notice_inbox table to
denormalized inbox table
- Automatic compression of Memcache
- Memory caching pluginized
- Memcache, XCache, APC and Diskcache plugins
- A script to update user locations
- cache empty query results
- A sample plugin to show best plugin practices
- CacheLog plugin to debug cache accesses
- Require users to login to view attachments on private sites
- Plugin to use Mollom spam detection service
- Plugin for RSSCloud
- Add an array of default plugins
- A version action to give credit to contributors and plugin
developers
- Daemon to read IMAP mailbox instead of using a mailbox script
- Pass session information between SSL and non-SSL server
when SSL set to 'sometimes'
- Major refactoring of queue handlers to manage very
large hosting site (like status.net)
- SubscriptionThrottle plugin to prevent subscription spamming
Prerequisites Prerequisites
============= =============
@ -1035,6 +1066,12 @@ Creative Commons Attribution 3.0 license, which is probably the right
choice for any public site. Note that some other servers will not choice for any public site. Note that some other servers will not
accept notices if you apply a stricter license than this. accept notices if you apply a stricter license than this.
type: one of 'cc' (for Creative Commons licenses), 'allrightsreserved'
(default copyright), or 'private' (for private and confidential
information).
owner: for 'allrightsreserved' or 'private', an assigned copyright
holder (for example, an employer for a private site). If
not specified, will be attributed to 'contributors'.
url: URL of the license, used for links. url: URL of the license, used for links.
title: Title for the license, like 'Creative Commons Attribution 3.0'. title: Title for the license, like 'Creative Commons Attribution 3.0'.
image: A button shown on each page for the license. image: A button shown on each page for the license.

View File

@ -45,6 +45,7 @@ require_once INSTALLDIR . '/lib/apiprivateauth.php';
* @author Evan Prodromou <evan@status.net> * @author Evan Prodromou <evan@status.net>
* @author Jeffery To <jeffery.to@gmail.com> * @author Jeffery To <jeffery.to@gmail.com>
* @author Zach Copley <zach@status.net> * @author Zach Copley <zach@status.net>
* @author Michele <macno@macno.org>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
@ -68,6 +69,24 @@ class ApiGroupShowAction extends ApiPrivateAuthAction
$this->group = $this->getTargetGroup($this->arg('id')); $this->group = $this->getTargetGroup($this->arg('id'));
if (empty($this->group)) {
$alias = Group_alias::staticGet(
'alias',
common_canonical_nickname($this->arg('id'))
);
if (!empty($alias)) {
$args = array('id' => $alias->group_id, 'format' => $this->format);
common_redirect(common_local_url('ApiGroupShow', $args), 301);
} else {
$this->clientError(
_('Group not found!'),
404,
$this->format
);
}
return;
}
return true; return true;
} }
@ -85,15 +104,6 @@ class ApiGroupShowAction extends ApiPrivateAuthAction
{ {
parent::handle($args); parent::handle($args);
if (empty($this->group)) {
$this->clientError(
_('Group not found!'),
404,
$this->format
);
return;
}
switch($this->format) { switch($this->format) {
case 'xml': case 'xml':
$this->showSingleXmlGroup($this->group); $this->showSingleXmlGroup($this->group);
@ -105,7 +115,6 @@ class ApiGroupShowAction extends ApiPrivateAuthAction
$this->clientError(_('API method not found.'), 404, $this->format); $this->clientError(_('API method not found.'), 404, $this->format);
break; break;
} }
} }
/** /**

View File

@ -113,4 +113,19 @@ class ApiStatusesRetweetsAction extends ApiAuthAction
break; break;
} }
} }
/**
* Return true if read only.
*
* MAY override
*
* @param array $args other arguments
*
* @return boolean is read only action?
*/
function isReadOnly($args)
{
return true;
}
} }

View File

@ -69,58 +69,21 @@ class ApiTimelineRetweetedByMeAction extends ApiAuthAction
{ {
parent::prepare($args); parent::prepare($args);
$cnt = $this->int('count', self::DEFAULTCOUNT, self::MAXCOUNT, 1); $this->serverError('Unimplemented', 503);
$page = $this->int('page', 1, (self::MAXNOTICES/$this->cnt)); return false;
$since_id = $this->int('since_id');
$max_id = $this->int('max_id');
return true;
} }
/** /**
* Handle the request * Return true if read only.
* *
* show a timeline of the user's repeated notices * @param array $args other arguments
* *
* @param array $args $_REQUEST data (unused) * @return boolean is read only action?
*
* @return void
*/ */
function handle($args) function isReadOnly($args)
{ {
parent::handle($args); return true;
$offset = ($this->page-1) * $this->cnt;
$limit = $this->cnt;
$strm = $this->auth_user->repeatedByMe($offset, $limit, $this->since_id, $this->max_id);
switch ($this->format) {
case 'xml':
$this->showXmlTimeline($strm);
break;
case 'json':
$this->showJsonTimeline($strm);
break;
case 'atom':
$profile = $this->auth_user->getProfile();
$title = sprintf(_("Repeated by %s"), $this->auth_user->nickname);
$taguribase = common_config('integration', 'taguri');
$id = "tag:$taguribase:RepeatedByMe:" . $this->auth_user->id;
$link = common_local_url('showstream',
array('nickname' => $this->auth_user->nickname));
$this->showAtomTimeline($strm, $title, $id, $link);
break;
default:
$this->clientError(_('API method not found.'), $code = 404);
break;
}
} }
} }

View File

@ -122,4 +122,19 @@ class ApiTimelineRetweetedToMeAction extends ApiAuthAction
break; break;
} }
} }
/**
* Return true if read only.
*
* MAY override
*
* @param array $args other arguments
*
* @return boolean is read only action?
*/
function isReadOnly($args)
{
return true;
}
} }

View File

@ -123,4 +123,19 @@ class ApiTimelineRetweetsOfMeAction extends ApiAuthAction
break; break;
} }
} }
/**
* Return true if read only.
*
* MAY override
*
* @param array $args other arguments
*
* @return boolean is read only action?
*/
function isReadOnly($args)
{
return true;
}
} }

View File

@ -289,7 +289,7 @@ class DesignadminpanelAction extends AdminPanelAction
function showStylesheets() function showStylesheets()
{ {
parent::showStylesheets(); parent::showStylesheets();
$this->cssLink('css/farbtastic.css','base','screen, projection, tv'); $this->cssLink('js/farbtastic/farbtastic.css',null,'screen, projection, tv');
} }
/** /**

View File

@ -45,11 +45,23 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
*/ */
class DocAction extends Action class DocAction extends Action
{ {
var $filename; var $output = null;
var $title; var $filename = null;
var $title = null;
function prepare($args)
{
parent::prepare($args);
$this->title = $this->trimmed('title');
$this->output = null;
$this->loadDoc();
return true;
}
/** /**
* Class handler. * Handle a request
* *
* @param array $args array of arguments * @param array $args array of arguments
* *
@ -58,51 +70,51 @@ class DocAction extends Action
function handle($args) function handle($args)
{ {
parent::handle($args); parent::handle($args);
$this->title = $this->trimmed('title');
$this->output = null;
if (Event::handle('StartLoadDoc', array(&$this->title, &$this->output))) {
$this->filename = INSTALLDIR.'/doc-src/'.$this->title;
if (!file_exists($this->filename)) {
$this->clientError(_('No such document.'));
return;
}
$c = file_get_contents($this->filename);
$this->output = common_markup_to_html($c);
Event::handle('EndLoadDoc', array($this->title, &$this->output));
}
$this->showPage(); $this->showPage();
} }
// overrrided to add entry-title class /**
function showPageTitle() { * Page title
*
* Gives the page title of the document. Override default for hAtom entry.
*
* @return void
*/
function showPageTitle()
{
$this->element('h1', array('class' => 'entry-title'), $this->title()); $this->element('h1', array('class' => 'entry-title'), $this->title());
} }
// overrided to add hentry, and content-inner classes /**
* Block for content.
*
* Overrides default from Action to wrap everything in an hAtom entry.
*
* @return void.
*/
function showContentBlock() function showContentBlock()
{ {
$this->elementStart('div', array('id' => 'content', 'class' => 'hentry')); $this->elementStart('div', array('id' => 'content', 'class' => 'hentry'));
$this->showPageTitle(); $this->showPageTitle();
$this->showPageNoticeBlock(); $this->showPageNoticeBlock();
$this->elementStart('div', array('id' => 'content_inner', $this->elementStart('div', array('id' => 'content_inner',
'class' => 'entry-content')); 'class' => 'entry-content'));
// show the actual content (forms, lists, whatever) // show the actual content (forms, lists, whatever)
$this->showContent(); $this->showContent();
$this->elementEnd('div'); $this->elementEnd('div');
$this->elementEnd('div'); $this->elementEnd('div');
} }
/** /**
* Display content. * Display content.
* *
* @return nothing * Shows the content of the document.
*
* @return void
*/ */
function showContent() function showContent()
{ {
$this->raw($this->output); $this->raw($this->output);
@ -111,6 +123,8 @@ class DocAction extends Action
/** /**
* Page title. * Page title.
* *
* Uses the title of the document.
*
* @return page title * @return page title
*/ */
function title() function title()
@ -118,8 +132,74 @@ class DocAction extends Action
return ucfirst($this->title); return ucfirst($this->title);
} }
/**
* These pages are read-only.
*
* @param array $args unused.
*
* @return boolean read-only flag (false)
*/
function isReadOnly($args) function isReadOnly($args)
{ {
return true; return true;
} }
function loadDoc()
{
if (Event::handle('StartLoadDoc', array(&$this->title, &$this->output))) {
$this->filename = $this->getFilename();
if (empty($this->filename)) {
throw new ClientException(sprintf(_('No such document "%s"'), $this->title), 404);
}
$c = file_get_contents($this->filename);
$this->output = common_markup_to_html($c);
Event::handle('EndLoadDoc', array($this->title, &$this->output));
}
}
function getFilename()
{
if (file_exists(INSTALLDIR.'/local/doc-src/'.$this->title)) {
$localDef = INSTALLDIR.'/local/doc-src/'.$this->title;
}
$local = glob(INSTALLDIR.'/local/doc-src/'.$this->title.'.*');
if (count($local) || isset($localDef)) {
return $this->negotiateLanguage($local, $localDef);
}
if (file_exists(INSTALLDIR.'/doc-src/'.$this->title)) {
$distDef = INSTALLDIR.'/doc-src/'.$this->title;
}
$dist = glob(INSTALLDIR.'/doc-src/'.$this->title.'.*');
if (count($dist) || isset($distDef)) {
return $this->negotiateLanguage($dist, $distDef);
}
return null;
}
function negotiateLanguage($filenames, $defaultFilename=null)
{
// XXX: do this better
$langcode = common_language();
foreach ($filenames as $filename) {
if (preg_match('/\.'.$langcode.'$/', $filename)) {
return $filename;
}
}
return $defaultFilename;
}
} }

View File

@ -130,7 +130,7 @@ class EmailsettingsAction extends AccountSettingsAction
if (common_config('emailpost', 'enabled') && $user->email) { if (common_config('emailpost', 'enabled') && $user->email) {
$this->elementStart('fieldset', array('id' => 'settings_email_incoming')); $this->elementStart('fieldset', array('id' => 'settings_email_incoming'));
$this->element('legend',_('Incoming email')); $this->element('legend', null, _('Incoming email'));
if ($user->incomingemail) { if ($user->incomingemail) {
$this->elementStart('p'); $this->elementStart('p');
$this->element('span', 'address', $user->incomingemail); $this->element('span', 'address', $user->incomingemail);

View File

@ -309,6 +309,8 @@ class ImsettingsAction extends ConnectSettingsAction
$confirm->address_type = 'jabber'; $confirm->address_type = 'jabber';
$confirm->user_id = $user->id; $confirm->user_id = $user->id;
$confirm->code = common_confirmation_code(64); $confirm->code = common_confirmation_code(64);
$confirm->sent = common_sql_now();
$confirm->claimed = common_sql_now();
$result = $confirm->insert(); $result = $confirm->insert();
@ -318,11 +320,9 @@ class ImsettingsAction extends ConnectSettingsAction
return; return;
} }
if (!common_config('queue', 'enabled')) { jabber_confirm_address($confirm->code,
jabber_confirm_address($confirm->code, $user->nickname,
$user->nickname, $jabber);
$jabber);
}
$msg = sprintf(_('A confirmation code was sent '. $msg = sprintf(_('A confirmation code was sent '.
'to the IM address you added. '. 'to the IM address you added. '.

View File

@ -251,6 +251,8 @@ class File extends Memcached_DataObject
if($oembed->modified) $enclosure->modified=$oembed->modified; if($oembed->modified) $enclosure->modified=$oembed->modified;
unset($oembed->size); unset($oembed->size);
} }
} else {
return false;
} }
} }
} }

View File

@ -19,8 +19,6 @@
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
class Memcached_DataObject extends DB_DataObject class Memcached_DataObject extends DB_DataObject
{ {
/** /**
@ -315,6 +313,39 @@ class Memcached_DataObject extends DB_DataObject
return new ArrayWrapper($cached); return new ArrayWrapper($cached);
} }
/**
* sends query to database - this is the private one that must work
* - internal functions use this rather than $this->query()
*
* Overridden to do logging.
*
* @param string $string
* @access private
* @return mixed none or PEAR_Error
*/
function _query($string)
{
$start = microtime(true);
$result = parent::_query($string);
$delta = microtime(true) - $start;
$limit = common_config('db', 'log_slow_queries');
if (($limit > 0 && $delta >= $limit) || common_config('db', 'log_queries')) {
$clean = $this->sanitizeQuery($string);
common_log(LOG_DEBUG, sprintf("DB query (%0.3fs): %s", $delta, $clean));
}
return $result;
}
// Sanitize a query for logging
// @fixme don't trim spaces in string literals
function sanitizeQuery($string)
{
$string = preg_replace('/\s+/', ' ', $string);
$string = trim($string);
return $string;
}
// We overload so that 'SET NAMES "utf8"' is called for // We overload so that 'SET NAMES "utf8"' is called for
// each connection // each connection
@ -353,7 +384,7 @@ class Memcached_DataObject extends DB_DataObject
unset($_DB_DATAOBJECT['CONNECTIONS'][$index]); unset($_DB_DATAOBJECT['CONNECTIONS'][$index]);
} }
} }
$result = parent::_connect(); $result = parent::_connect();
if ($result && !$exists) { if ($result && !$exists) {

View File

@ -10,8 +10,8 @@ class Queue_item extends Memcached_DataObject
/* the code below is auto generated do not remove the above tag */ /* the code below is auto generated do not remove the above tag */
public $__table = 'queue_item'; // table name public $__table = 'queue_item'; // table name
public $notice_id; // int(4) primary_key not_null public $id; // int(4) primary_key not_null
public $transport; // varchar(8) primary_key not_null public $frame; // blob not_null
public $created; // datetime() not_null public $created; // datetime() not_null
public $claimed; // datetime() public $claimed; // datetime()
@ -22,14 +22,21 @@ class Queue_item extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */ /* the code above is auto generated do not remove the tag below */
###END_AUTOCODE ###END_AUTOCODE
function sequenceKey() /**
{ return array(false, false); } * @param mixed $transports name of a single queue or array of queues to pull from
* If not specified, checks all queues in the system.
static function top($transport=null) { */
static function top($transports=null) {
$qi = new Queue_item(); $qi = new Queue_item();
if ($transport) { if ($transports) {
$qi->transport = $transport; if (is_array($transports)) {
// @fixme use safer escaping
$list = implode("','", array_map('addslashes', $transports));
$qi->whereAdd("transport in ('$list')");
} else {
$qi->transport = $transports;
}
} }
$qi->orderBy('created'); $qi->orderBy('created');
$qi->whereAdd('claimed is null'); $qi->whereAdd('claimed is null');
@ -42,7 +49,7 @@ class Queue_item extends Memcached_DataObject
# XXX: potential race condition # XXX: potential race condition
# can we force it to only update if claimed is still null # can we force it to only update if claimed is still null
# (or old)? # (or old)?
common_log(LOG_INFO, 'claiming queue item = ' . $qi->notice_id . common_log(LOG_INFO, 'claiming queue item id = ' . $qi->id .
' for transport ' . $qi->transport); ' for transport ' . $qi->transport);
$orig = clone($qi); $orig = clone($qi);
$qi->claimed = common_sql_now(); $qi->claimed = common_sql_now();
@ -57,9 +64,4 @@ class Queue_item extends Memcached_DataObject
$qi = null; $qi = null;
return null; return null;
} }
function pkeyGet($kv)
{
return Memcached_DataObject::pkeyGet('Queue_item', $kv);
}
} }

View File

@ -428,14 +428,14 @@ tagged = K
tag = K tag = K
[queue_item] [queue_item]
notice_id = 129 id = 129
frame = 66
transport = 130 transport = 130
created = 142 created = 142
claimed = 14 claimed = 14
[queue_item__keys] [queue_item__keys]
notice_id = K id = K
transport = K
[related_group] [related_group]
group_id = 129 group_id = 129

View File

@ -94,3 +94,19 @@ create table user_location_prefs (
constraint primary key (user_id) constraint primary key (user_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
create table queue_item_new (
id integer auto_increment primary key comment 'unique identifier',
frame blob not null comment 'data: object reference or opaque string',
transport varchar(8) not null comment 'queue for what? "email", "jabber", "sms", "irc", ...',
created datetime not null comment 'date this record was created',
claimed datetime comment 'date this item was claimed',
index queue_item_created_idx (created)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
insert into queue_item_new (frame,transport,created,claimed)
select notice_id,transport,created,claimed from queue_item;
alter table queue_item rename to queue_item_old;
alter table queue_item_new rename to queue_item;

16
db/rc3to09.sql Normal file
View File

@ -0,0 +1,16 @@
create table queue_item_new (
id integer auto_increment primary key comment 'unique identifier',
frame blob not null comment 'data: object reference or opaque string',
transport varchar(8) not null comment 'queue for what? "email", "jabber", "sms", "irc", ...',
created datetime not null comment 'date this record was created',
claimed datetime comment 'date this item was claimed',
index queue_item_created_idx (created)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
insert into queue_item_new (frame,transport,created,claimed)
select notice_id,transport,created,claimed from queue_item;
alter table queue_item rename to queue_item_old;
alter table queue_item_new rename to queue_item;

View File

@ -274,13 +274,12 @@ create table remember_me (
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
create table queue_item ( create table queue_item (
id integer auto_increment primary key comment 'unique identifier',
notice_id integer not null comment 'notice queued' references notice (id), frame blob not null comment 'data: object reference or opaque string',
transport varchar(8) not null comment 'queue for what? "email", "jabber", "sms", "irc", ...', transport varchar(8) not null comment 'queue for what? "email", "jabber", "sms", "irc", ...',
created datetime not null comment 'date this record was created', created datetime not null comment 'date this record was created',
claimed datetime comment 'date this item was claimed', claimed datetime comment 'date this item was claimed',
constraint primary key (notice_id, transport),
index queue_item_created_idx (created) index queue_item_created_idx (created)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;

View File

@ -16,17 +16,17 @@
height: 101px; height: 101px;
} }
.farbtastic .wheel { .farbtastic .wheel {
background: url(../../../js/farbtastic/wheel.png) no-repeat; background: url(wheel.png) no-repeat;
width: 195px; width: 195px;
height: 195px; height: 195px;
} }
.farbtastic .overlay { .farbtastic .overlay {
background: url(../../../js/farbtastic/mask.png) no-repeat; background: url(mask.png) no-repeat;
} }
.farbtastic .marker { .farbtastic .marker {
width: 17px; width: 17px;
height: 17px; height: 17px;
margin: -8px 0 0 -8px; margin: -8px 0 0 -8px;
overflow: hidden; overflow: hidden;
background: url(../../../js/farbtastic/marker.png) no-repeat; background: url(marker.png) no-repeat;
} }

View File

@ -223,7 +223,7 @@ function markupPost(raw, server) {
}, },
changeUserTo : function(el) { changeUserTo : function(el) {
$.a.user = el.rel; $.a.user = el.rel;
$.s.h.a.innerHTML = el.rev + $.a.headerText; $.s.h.a.appendChild(document.createTextNode(el.rev + $.a.headerText));
$.s.h.a.href = 'http://' + $.a.server + '/' + el.id; $.s.h.a.href = 'http://' + $.a.server + '/' + el.id;
$.f.runSearch(); $.f.runSearch();
}, },

View File

@ -205,8 +205,10 @@ var SN = { // StatusNet
cookieValue = JSON.parse(cookieValue); cookieValue = JSON.parse(cookieValue);
NLat = $('#'+SN.C.S.NoticeLat).val(cookieValue.NLat).val(); NLat = $('#'+SN.C.S.NoticeLat).val(cookieValue.NLat).val();
NLon = $('#'+SN.C.S.NoticeLon).val(cookieValue.NLon).val(); NLon = $('#'+SN.C.S.NoticeLon).val(cookieValue.NLon).val();
NLNS = $('#'+SN.C.S.NoticeLocationNs).val(cookieValue.NLNS).val(); if ($('#'+SN.C.S.NoticeLocationNs).val(cookieValue.NLNS)) {
NLID = $('#'+SN.C.S.NoticeLocationId).val(cookieValue.NLID).val(); NLNS = $('#'+SN.C.S.NoticeLocationNs).val(cookieValue.NLNS).val();
NLID = $('#'+SN.C.S.NoticeLocationId).val(cookieValue.NLID).val();
}
} }
if (cookieValue == 'disabled') { if (cookieValue == 'disabled') {
NDG = $('#'+SN.C.S.NoticeDataGeo).attr('checked', false).attr('checked'); NDG = $('#'+SN.C.S.NoticeDataGeo).attr('checked', false).attr('checked');
@ -301,8 +303,10 @@ var SN = { // StatusNet
$('#'+SN.C.S.NoticeLat).val(NLat); $('#'+SN.C.S.NoticeLat).val(NLat);
$('#'+SN.C.S.NoticeLon).val(NLon); $('#'+SN.C.S.NoticeLon).val(NLon);
$('#'+SN.C.S.NoticeLocationNs).val(NLNS); if ($('#'+SN.C.S.NoticeLocationNs)) {
$('#'+SN.C.S.NoticeLocationId).val(NLID); $('#'+SN.C.S.NoticeLocationNs).val(NLNS);
$('#'+SN.C.S.NoticeLocationId).val(NLID);
}
$('#'+SN.C.S.NoticeDataGeo).attr('checked', NDG); $('#'+SN.C.S.NoticeDataGeo).attr('checked', NDG);
} }
}); });
@ -494,7 +498,7 @@ var SN = { // StatusNet
$.cookie(SN.C.S.NoticeDataGeoCookie, 'disabled'); $.cookie(SN.C.S.NoticeDataGeoCookie, 'disabled');
} }
function getJSONgeocodeURL(geocodeURL, data, position) { function getJSONgeocodeURL(geocodeURL, data) {
$.getJSON(geocodeURL, data, function(location) { $.getJSON(geocodeURL, data, function(location) {
var lns, lid; var lns, lid;
@ -509,7 +513,7 @@ var SN = { // StatusNet
} }
if (typeof(location.name) == 'undefined') { if (typeof(location.name) == 'undefined') {
NLN_text = position.coords.latitude + ';' + position.coords.longitude; NLN_text = data.lat + ';' + data.lon;
} }
else { else {
NLN_text = location.name; NLN_text = location.name;
@ -571,7 +575,7 @@ var SN = { // StatusNet
token: $('#token').val() token: $('#token').val()
}; };
getJSONgeocodeURL(geocodeURL, data, position); getJSONgeocodeURL(geocodeURL, data);
}, },
function(error) { function(error) {
@ -593,12 +597,12 @@ var SN = { // StatusNet
else { else {
if (NLat.length > 0 && NLon.length > 0) { if (NLat.length > 0 && NLon.length > 0) {
var data = { var data = {
'lat': NLat, lat: NLat,
'lon': NLon, lon: NLon,
'token': $('#token').val() token: $('#token').val()
}; };
getJSONgeocodeURL(geocodeURL, data, position); getJSONgeocodeURL(geocodeURL, data);
} }
else { else {
removeNoticeDataGeo(); removeNoticeDataGeo();

View File

@ -199,10 +199,6 @@ class Action extends HTMLOutputter // lawsuit
if (Event::handle('StartShowStatusNetStyles', array($this)) && if (Event::handle('StartShowStatusNetStyles', array($this)) &&
Event::handle('StartShowLaconicaStyles', array($this))) { Event::handle('StartShowLaconicaStyles', array($this))) {
$this->cssLink('css/display.css',null,'screen, projection, tv'); $this->cssLink('css/display.css',null,'screen, projection, tv');
if (common_config('site', 'mobile')) {
// TODO: "handheld" CSS for other mobile devices
$this->cssLink('css/mobile.css','base','only screen and (max-device-width: 480px)'); // Mobile WebKit
}
$this->cssLink('css/print.css','base','print'); $this->cssLink('css/print.css','base','print');
Event::handle('EndShowStatusNetStyles', array($this)); Event::handle('EndShowStatusNetStyles', array($this));
Event::handle('EndShowLaconicaStyles', array($this)); Event::handle('EndShowLaconicaStyles', array($this));
@ -373,7 +369,11 @@ class Action extends HTMLOutputter // lawsuit
$this->elementStart('div', array('id' => 'header')); $this->elementStart('div', array('id' => 'header'));
$this->showLogo(); $this->showLogo();
$this->showPrimaryNav(); $this->showPrimaryNav();
$this->showSiteNotice(); if (Event::handle('StartShowSiteNotice', array($this))) {
$this->showSiteNotice();
Event::handle('EndShowSiteNotice', array($this));
}
if (common_logged_in()) { if (common_logged_in()) {
$this->showNoticeForm(); $this->showNoticeForm();
} else { } else {
@ -791,23 +791,45 @@ class Action extends HTMLOutputter // lawsuit
*/ */
function showContentLicense() function showContentLicense()
{ {
$this->element('dt', array('id' => 'site_content_license'), _('Site content license')); if (Event::handle('StartShowContentLicense', array($this))) {
$this->elementStart('dd', array('id' => 'site_content_license_cc')); $this->element('dt', array('id' => 'site_content_license'), _('Site content license'));
$this->elementStart('p'); $this->elementStart('dd', array('id' => 'site_content_license_cc'));
$this->element('img', array('id' => 'license_cc',
'src' => common_config('license', 'image'), switch (common_config('license', 'type')) {
'alt' => common_config('license', 'title'), case 'private':
'width' => '80', $this->element('p', null, sprintf(_('Content and data of %1$s are private and confidential.'),
'height' => '15')); common_config('site', 'name')));
//TODO: This is dirty: i18n // fall through
$this->text(_('All '.common_config('site', 'name').' content and data are available under the ')); case 'allrightsreserved':
$this->element('a', array('class' => 'license', if (common_config('license', 'owner')) {
'rel' => 'external license', $this->element('p', null, sprintf(_('Content and data copyright by %1$s. All rights reserved.'),
'href' => common_config('license', 'url')), common_config('license', 'owner')));
common_config('license', 'title')); } else {
$this->text(_('license.')); $this->element('p', null, _('Content and data copyright by contributors. All rights reserved.'));
$this->elementEnd('p'); }
$this->elementEnd('dd'); break;
case 'cc': // fall through
default:
$this->elementStart('p');
$this->element('img', array('id' => 'license_cc',
'src' => common_config('license', 'image'),
'alt' => common_config('license', 'title'),
'width' => '80',
'height' => '15'));
//TODO: This is dirty: i18n
$this->text(_('All '.common_config('site', 'name').' content and data are available under the '));
$this->element('a', array('class' => 'license',
'rel' => 'external license',
'href' => common_config('license', 'url')),
common_config('license', 'title'));
$this->text(_('license.'));
$this->elementEnd('p');
break;
}
$this->elementEnd('dd');
Event::handle('EndShowContentLicense', array($this));
}
} }
/** /**

View File

@ -288,11 +288,12 @@ class ApiAction extends Action
$twitter_status['attachments'] = array(); $twitter_status['attachments'] = array();
foreach ($attachments as $attachment) { foreach ($attachments as $attachment) {
if ($attachment->isEnclosure()) { $enclosure_o=$attachment->getEnclosure();
if ($enclosure_o) {
$enclosure = array(); $enclosure = array();
$enclosure['url'] = $attachment->url; $enclosure['url'] = $enclosure_o->url;
$enclosure['mimetype'] = $attachment->mimetype; $enclosure['mimetype'] = $enclosure_o->mimetype;
$enclosure['size'] = $attachment->size; $enclosure['size'] = $enclosure_o->size;
$twitter_status['attachments'][] = $enclosure; $twitter_status['attachments'][] = $enclosure;
} }
} }

View File

@ -79,10 +79,13 @@ class ApiAuthAction extends ApiAction
$this->checkOAuthRequest(); $this->checkOAuthRequest();
} else { } else {
$this->checkBasicAuthUser(); $this->checkBasicAuthUser();
// By default, all basic auth users have read and write access
$this->access = self::READ_WRITE;
} }
} else {
// Check to see if a basic auth user is there even
// if one's not required
$this->checkBasicAuthUser(false);
} }
return true; return true;
@ -145,7 +148,10 @@ class ApiAuthAction extends ApiAction
$this->access = ($appUser->access_type & Oauth_application::$writeAccess) $this->access = ($appUser->access_type & Oauth_application::$writeAccess)
? self::READ_WRITE : self::READ_ONLY; ? self::READ_WRITE : self::READ_ONLY;
$this->auth_user = User::staticGet('id', $appUser->profile_id); if (Event::handle('StartSetApiUser', array(&$user))) {
$this->auth_user = User::staticGet('id', $appUser->profile_id);
Event::handle('EndSetApiUser', array($user));
}
$msg = "API OAuth authentication for user '%s' (id: %d) on behalf of " . $msg = "API OAuth authentication for user '%s' (id: %d) on behalf of " .
"application '%s' (id: %d)."; "application '%s' (id: %d).";
@ -198,13 +204,13 @@ class ApiAuthAction extends ApiAction
* @return boolean true or false * @return boolean true or false
*/ */
function checkBasicAuthUser() function checkBasicAuthUser($required = true)
{ {
$this->basicAuthProcessHeader(); $this->basicAuthProcessHeader();
$realm = common_config('site', 'name') . ' API'; $realm = common_config('site', 'name') . ' API';
if (!isset($this->auth_user)) { if (!isset($this->auth_user) && $required) {
header('WWW-Authenticate: Basic realm="' . $realm . '"'); header('WWW-Authenticate: Basic realm="' . $realm . '"');
// show error if the user clicks 'cancel' // show error if the user clicks 'cancel'
@ -212,12 +218,16 @@ class ApiAuthAction extends ApiAction
$this->showBasicAuthError(); $this->showBasicAuthError();
exit; exit;
} else { } else if (isset($this->auth_user)) {
$nickname = $this->auth_user; $nickname = $this->auth_user;
$password = $this->auth_pw; $password = $this->auth_pw;
$user = common_check_user($nickname, $password); $user = common_check_user($nickname, $password);
if (Event::handle('StartSetApiUser', array(&$user))) { if (Event::handle('StartSetApiUser', array(&$user))) {
$this->auth_user = $user; $this->auth_user = $user;
// By default, all basic auth users have read and write access
$this->access = self::READ_WRITE;
Event::handle('EndSetApiUser', array($user)); Event::handle('EndSetApiUser', array($user));
} }

View File

@ -31,19 +31,17 @@
class DBQueueManager extends QueueManager class DBQueueManager extends QueueManager
{ {
/** /**
* Saves a notice object reference into the queue item table. * Saves an object reference into the queue item table.
* @return boolean true on success * @return boolean true on success
* @throws ServerException on failure * @throws ServerException on failure
*/ */
public function enqueue($object, $queue) public function enqueue($object, $queue)
{ {
$notice = $object;
$qi = new Queue_item(); $qi = new Queue_item();
$qi->notice_id = $notice->id; $qi->frame = $this->encode($object);
$qi->transport = $queue; $qi->transport = $queue;
$qi->created = $notice->created; $qi->created = common_sql_now();
$result = $qi->insert(); $result = $qi->insert();
if (!$result) { if (!$result) {
@ -57,146 +55,92 @@ class DBQueueManager extends QueueManager
} }
/** /**
* Poll every minute for new events during idle periods. * Poll every 10 seconds for new events during idle periods.
* We'll look in more often when there's data available. * We'll look in more often when there's data available.
* *
* @return int seconds * @return int seconds
*/ */
public function pollInterval() public function pollInterval()
{ {
return 60; return 10;
} }
/** /**
* Run a polling cycle during idle processing in the input loop. * Run a polling cycle during idle processing in the input loop.
* @return boolean true if we had a hit * @return boolean true if we should poll again for more data immediately
*/ */
public function poll() public function poll()
{ {
$this->_log(LOG_DEBUG, 'Checking for notices...'); $this->_log(LOG_DEBUG, 'Checking for notices...');
$item = $this->_nextItem(); $qi = Queue_item::top($this->getQueues());
if ($item === false) { if (empty($qi)) {
$this->_log(LOG_DEBUG, 'No notices waiting; idling.'); $this->_log(LOG_DEBUG, 'No notices waiting; idling.');
return false; return false;
} }
if ($item === true) {
// We dequeued an entry for a deleted or invalid notice.
// Consider it a hit for poll rate purposes.
return true;
}
list($queue, $notice) = $item; $queue = $qi->transport;
$this->_log(LOG_INFO, 'Got notice '. $notice->id . ' for transport ' . $queue); $item = $this->decode($qi->frame);
// Yay! Got one! if ($item) {
$handler = $this->getHandler($queue); $rep = $this->logrep($item);
if ($handler) { $this->_log(LOG_INFO, "Got $rep for transport $queue");
if ($handler->handle_notice($notice)) {
$this->_log(LOG_INFO, "[$queue:notice $notice->id] Successfully handled notice"); $handler = $this->getHandler($queue);
$this->_done($notice, $queue); if ($handler) {
if ($handler->handle($item)) {
$this->_log(LOG_INFO, "[$queue:$rep] Successfully handled item");
$this->_done($qi);
} else {
$this->_log(LOG_INFO, "[$queue:$rep] Failed to handle item");
$this->_fail($qi);
}
} else { } else {
$this->_log(LOG_INFO, "[$queue:notice $notice->id] Failed to handle notice"); $this->_log(LOG_INFO, "[$queue:$rep] No handler for queue $queue; discarding.");
$this->_fail($notice, $queue); $this->_done($qi);
} }
} else { } else {
$this->_log(LOG_INFO, "[$queue:notice $notice->id] No handler for queue $queue; discarding."); $this->_log(LOG_INFO, "[$queue] Got empty/deleted item, discarding");
$this->_done($notice, $queue); $this->_fail($qi);
} }
return true; return true;
} }
/**
* Pop the oldest unclaimed item off the queue set and claim it.
*
* @return mixed false if no items; true if bogus hit; otherwise array(string, Notice)
* giving the queue transport name.
*/
protected function _nextItem()
{
$start = time();
$result = null;
$qi = Queue_item::top();
if (empty($qi)) {
return false;
}
$queue = $qi->transport;
$notice = Notice::staticGet('id', $qi->notice_id);
if (empty($notice)) {
$this->_log(LOG_INFO, "[$queue:notice $notice->id] dequeued non-existent notice");
$qi->delete();
return true;
}
$result = $notice;
return array($queue, $notice);
}
/** /**
* Delete our claimed item from the queue after successful processing. * Delete our claimed item from the queue after successful processing.
* *
* @param Notice $object * @param QueueItem $qi
* @param string $queue
*/ */
protected function _done($object, $queue) protected function _done($qi)
{ {
// XXX: right now, we only handle notices $queue = $qi->transport;
$notice = $object; if (empty($qi->claimed)) {
$this->_log(LOG_WARNING, "Reluctantly releasing unclaimed queue item $qi->id from $qi->queue");
$qi = Queue_item::pkeyGet(array('notice_id' => $notice->id,
'transport' => $queue));
if (empty($qi)) {
$this->_log(LOG_INFO, "[$queue:notice $notice->id] Cannot find queue item");
} else {
if (empty($qi->claimed)) {
$this->_log(LOG_WARNING, "[$queue:notice $notice->id] Reluctantly releasing unclaimed queue item");
}
$qi->delete();
$qi->free();
} }
$qi->delete();
$this->_log(LOG_INFO, "[$queue:notice $notice->id] done with item");
$this->stats('handled', $queue); $this->stats('handled', $queue);
$notice->free();
} }
/** /**
* Free our claimed queue item for later reprocessing in case of * Free our claimed queue item for later reprocessing in case of
* temporary failure. * temporary failure.
* *
* @param Notice $object * @param QueueItem $qi
* @param string $queue
*/ */
protected function _fail($object, $queue) protected function _fail($qi)
{ {
// XXX: right now, we only handle notices $queue = $qi->transport;
$notice = $object; if (empty($qi->claimed)) {
$this->_log(LOG_WARNING, "[$queue:item $qi->id] Ignoring failure for unclaimed queue item");
$qi = Queue_item::pkeyGet(array('notice_id' => $notice->id,
'transport' => $queue));
if (empty($qi)) {
$this->_log(LOG_INFO, "[$queue:notice $notice->id] Cannot find queue item");
} else { } else {
if (empty($qi->claimed)) { $orig = clone($qi);
$this->_log(LOG_WARNING, "[$queue:notice $notice->id] Ignoring failure for unclaimed queue item"); $qi->claimed = null;
} else { $qi->update($orig);
$orig = clone($qi);
$qi->claimed = null;
$qi->update($orig);
$qi = null;
}
} }
$this->_log(LOG_INFO, "[$queue:notice $notice->id] done with queue item");
$this->stats('error', $queue); $this->stats('error', $queue);
$notice->free();
} }
protected function _log($level, $msg) protected function _log($level, $msg)

View File

@ -67,7 +67,9 @@ $default =
'db_driver' => 'DB', # XXX: JanRain libs only work with DB 'db_driver' => 'DB', # XXX: JanRain libs only work with DB
'quote_identifiers' => false, 'quote_identifiers' => false,
'type' => 'mysql', 'type' => 'mysql',
'schemacheck' => 'runtime'), // 'runtime' or 'script' 'schemacheck' => 'runtime', // 'runtime' or 'script'
'log_queries' => false, // true to log all DB queries
'log_slow_queries' => 0), // if set, log queries taking over N seconds
'syslog' => 'syslog' =>
array('appname' => 'statusnet', # for syslog array('appname' => 'statusnet', # for syslog
'priority' => 'debug', # XXX: currently ignored 'priority' => 'debug', # XXX: currently ignored
@ -81,9 +83,12 @@ $default =
'stomp_password' => null, 'stomp_password' => null,
'monitor' => null, // URL to monitor ping endpoint (work in progress) 'monitor' => null, // URL to monitor ping endpoint (work in progress)
'softlimit' => '90%', // total size or % of memory_limit at which to restart queue threads gracefully 'softlimit' => '90%', // total size or % of memory_limit at which to restart queue threads gracefully
'debug_memory' => false, // true to spit memory usage to log
), ),
'license' => 'license' =>
array('url' => 'http://creativecommons.org/licenses/by/3.0/', array('type' => 'cc', # can be 'cc', 'allrightsreserved', 'private'
'owner' => null, # can be name of content owner e.g. for enterprise
'url' => 'http://creativecommons.org/licenses/by/3.0/',
'title' => 'Creative Commons Attribution 3.0', 'title' => 'Creative Commons Attribution 3.0',
'image' => 'http://i.creativecommons.org/l/by/3.0/80x15.png'), 'image' => 'http://i.creativecommons.org/l/by/3.0/80x15.png'),
'mail' => 'mail' =>
@ -249,6 +254,8 @@ $default =
'Mapstraction' => null, 'Mapstraction' => null,
'Linkback' => null, 'Linkback' => null,
'WikiHashtags' => null, 'WikiHashtags' => null,
'PubSubHubBub' => null,
'RSSCloud' => null,
'OpenID' => null), 'OpenID' => null),
), ),
'admin' => 'admin' =>

View File

@ -314,7 +314,7 @@ class DesignSettingsAction extends AccountSettingsAction
function showStylesheets() function showStylesheets()
{ {
parent::showStylesheets(); parent::showStylesheets();
$this->cssLink('css/farbtastic.css','base','screen, projection, tv'); $this->cssLink('js/farbtastic/farbtastic.css',null,'screen, projection, tv');
} }
/** /**

View File

@ -27,7 +27,7 @@
* @link http://status.net/ * @link http://status.net/
*/ */
class IoMaster abstract class IoMaster
{ {
public $id; public $id;
@ -66,23 +66,18 @@ class IoMaster
if ($site != common_config('site', 'server')) { if ($site != common_config('site', 'server')) {
StatusNet::init($site); StatusNet::init($site);
} }
$this->initManagers();
$classes = array();
if (Event::handle('StartIoManagerClasses', array(&$classes))) {
$classes[] = 'QueueManager';
if (common_config('xmpp', 'enabled') && !defined('XMPP_EMERGENCY_FLAG')) {
$classes[] = 'XmppManager'; // handles pings/reconnects
$classes[] = 'XmppConfirmManager'; // polls for outgoing confirmations
}
}
Event::handle('EndIoManagerClasses', array(&$classes));
foreach ($classes as $class) {
$this->instantiate($class);
}
} }
} }
/**
* Initialize IoManagers for the currently configured site
* which are appropriate to this instance.
*
* Pass class names into $this->instantiate()
*/
abstract function initManagers();
/** /**
* Pull all local sites from status_network table. * Pull all local sites from status_network table.
* @return array of hostnames * @return array of hostnames
@ -107,7 +102,7 @@ class IoMaster
*/ */
protected function instantiate($class) protected function instantiate($class)
{ {
if (isset($this->singletons[$class])) { if (is_string($class) && isset($this->singletons[$class])) {
// Already instantiated a multi-site-capable handler. // Already instantiated a multi-site-capable handler.
// Just let it know it should listen to this site too! // Just let it know it should listen to this site too!
$this->singletons[$class]->addSite(common_config('site', 'server')); $this->singletons[$class]->addSite(common_config('site', 'server'));
@ -134,7 +129,11 @@ class IoMaster
protected function getManager($class) protected function getManager($class)
{ {
return call_user_func(array($class, 'get')); if(is_object($class)){
return $class;
} else {
return call_user_func(array($class, 'get'));
}
} }
/** /**
@ -170,7 +169,7 @@ class IoMaster
$write = array(); $write = array();
$except = array(); $except = array();
$this->logState('listening'); $this->logState('listening');
common_log(LOG_INFO, "Waiting up to $timeout seconds for socket data..."); common_log(LOG_DEBUG, "Waiting up to $timeout seconds for socket data...");
$ready = stream_select($read, $write, $except, $timeout, 0); $ready = stream_select($read, $write, $except, $timeout, 0);
if ($ready === false) { if ($ready === false) {
@ -190,7 +189,7 @@ class IoMaster
if ($timeout > 0 && empty($sockets)) { if ($timeout > 0 && empty($sockets)) {
// If we had no listeners, sleep until the pollers' next requested wakeup. // If we had no listeners, sleep until the pollers' next requested wakeup.
common_log(LOG_INFO, "Sleeping $timeout seconds until next poll cycle..."); common_log(LOG_DEBUG, "Sleeping $timeout seconds until next poll cycle...");
$this->logState('sleep'); $this->logState('sleep');
sleep($timeout); sleep($timeout);
} }
@ -207,6 +206,8 @@ class IoMaster
if ($usage > $memoryLimit) { if ($usage > $memoryLimit) {
common_log(LOG_INFO, "Queue thread hit soft memory limit ($usage > $memoryLimit); gracefully restarting."); common_log(LOG_INFO, "Queue thread hit soft memory limit ($usage > $memoryLimit); gracefully restarting.");
break; break;
} else if (common_config('queue', 'debug_memory')) {
common_log(LOG_DEBUG, "Memory usage $usage");
} }
} }
} }
@ -223,8 +224,7 @@ class IoMaster
{ {
$softLimit = trim(common_config('queue', 'softlimit')); $softLimit = trim(common_config('queue', 'softlimit'));
if (substr($softLimit, -1) == '%') { if (substr($softLimit, -1) == '%') {
$limit = trim(ini_get('memory_limit')); $limit = $this->parseMemoryLimit(ini_get('memory_limit'));
$limit = $this->parseMemoryLimit($limit);
if ($limit > 0) { if ($limit > 0) {
return intval(substr($softLimit, 0, -1) * $limit / 100); return intval(substr($softLimit, 0, -1) * $limit / 100);
} else { } else {
@ -242,9 +242,10 @@ class IoMaster
* @param string $mem * @param string $mem
* @return int * @return int
*/ */
protected function parseMemoryLimit($mem) public function parseMemoryLimit($mem)
{ {
// http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes // http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
$mem = strtolower(trim($mem));
$size = array('k' => 1024, $size = array('k' => 1024,
'm' => 1024*1024, 'm' => 1024*1024,
'g' => 1024*1024*1024); 'g' => 1024*1024*1024);
@ -253,7 +254,7 @@ class IoMaster
} else if (is_numeric($mem)) { } else if (is_numeric($mem)) {
return intval($mem); return intval($mem);
} else { } else {
$mult = strtolower(substr($mem, -1)); $mult = substr($mem, -1);
if (isset($size[$mult])) { if (isset($size[$mult])) {
return substr($mem, 0, -1) * $size[$mult]; return substr($mem, 0, -1) * $size[$mult];
} else { } else {
@ -350,7 +351,7 @@ class IoMaster
* for per-queue and per-site records. * for per-queue and per-site records.
* *
* @param string $key counter name * @param string $key counter name
* @param array $owners list of owner keys like 'queue:jabber' or 'site:stat01' * @param array $owners list of owner keys like 'queue:xmpp' or 'site:stat01'
*/ */
public function stats($key, $owners=array()) public function stats($key, $owners=array())
{ {

View File

@ -85,6 +85,27 @@ class Sharing_XMPP extends XMPPHP_XMPP
} }
} }
/**
* Build an XMPP proxy connection that'll save outgoing messages
* to the 'xmppout' queue to be picked up by xmppdaemon later.
*/
function jabber_proxy()
{
$proxy = new Queued_XMPP(common_config('xmpp', 'host') ?
common_config('xmpp', 'host') :
common_config('xmpp', 'server'),
common_config('xmpp', 'port'),
common_config('xmpp', 'user'),
common_config('xmpp', 'password'),
common_config('xmpp', 'resource') . 'daemon',
common_config('xmpp', 'server'),
common_config('xmpp', 'debug') ?
true : false,
common_config('xmpp', 'debug') ?
XMPPHP_Log::LEVEL_VERBOSE : null);
return $proxy;
}
/** /**
* Lazy-connect the configured Jabber account to the configured server; * Lazy-connect the configured Jabber account to the configured server;
* if already opened, the same connection will be returned. * if already opened, the same connection will be returned.
@ -143,7 +164,7 @@ function jabber_connect($resource=null)
} }
/** /**
* send a single notice to a given Jabber address * Queue send for a single notice to a given Jabber address
* *
* @param string $to JID to send the notice to * @param string $to JID to send the notice to
* @param Notice $notice notice to send * @param Notice $notice notice to send
@ -153,10 +174,7 @@ function jabber_connect($resource=null)
function jabber_send_notice($to, $notice) function jabber_send_notice($to, $notice)
{ {
$conn = jabber_connect(); $conn = jabber_proxy();
if (!$conn) {
return false;
}
$profile = Profile::staticGet($notice->profile_id); $profile = Profile::staticGet($notice->profile_id);
if (!$profile) { if (!$profile) {
common_log(LOG_WARNING, 'Refusing to send notice with ' . common_log(LOG_WARNING, 'Refusing to send notice with ' .
@ -221,10 +239,7 @@ function jabber_format_entry($profile, $notice)
function jabber_send_message($to, $body, $type='chat', $subject=null) function jabber_send_message($to, $body, $type='chat', $subject=null)
{ {
$conn = jabber_connect(); $conn = jabber_proxy();
if (!$conn) {
return false;
}
$conn->message($to, $body, $type, $subject); $conn->message($to, $body, $type, $subject);
return true; return true;
} }
@ -319,7 +334,7 @@ function jabber_special_presence($type, $to=null, $show=null, $status=null)
} }
/** /**
* broadcast a notice to all subscribers and reply recipients * Queue broadcast of a notice to all subscribers and reply recipients
* *
* This function will send a notice to all subscribers on the local server * This function will send a notice to all subscribers on the local server
* who have Jabber addresses, and have Jabber notification enabled, and * who have Jabber addresses, and have Jabber notification enabled, and
@ -354,7 +369,7 @@ function jabber_broadcast_notice($notice)
$sent_to = array(); $sent_to = array();
$conn = jabber_connect(); $conn = jabber_proxy();
$ni = $notice->whoGets(); $ni = $notice->whoGets();
@ -389,14 +404,13 @@ function jabber_broadcast_notice($notice)
'Sending notice ' . $notice->id . ' to ' . $user->jabber, 'Sending notice ' . $notice->id . ' to ' . $user->jabber,
__FILE__); __FILE__);
$conn->message($user->jabber, $msg, 'chat', null, $entry); $conn->message($user->jabber, $msg, 'chat', null, $entry);
$conn->processTime(0);
} }
return true; return true;
} }
/** /**
* send a notice to all public listeners * Queue send of a notice to all public listeners
* *
* For notices that are generated on the local system (by users), we can optionally * For notices that are generated on the local system (by users), we can optionally
* forward them to remote listeners by XMPP. * forward them to remote listeners by XMPP.
@ -429,7 +443,7 @@ function jabber_public_notice($notice)
$msg = jabber_format_notice($profile, $notice); $msg = jabber_format_notice($profile, $notice);
$entry = jabber_format_entry($profile, $notice); $entry = jabber_format_entry($profile, $notice);
$conn = jabber_connect(); $conn = jabber_proxy();
foreach ($public as $address) { foreach ($public as $address) {
common_log(LOG_INFO, common_log(LOG_INFO,
@ -437,7 +451,6 @@ function jabber_public_notice($notice)
' to public listener ' . $address, ' to public listener ' . $address,
__FILE__); __FILE__);
$conn->message($address, $msg, 'chat', null, $entry); $conn->message($address, $msg, 'chat', null, $entry);
$conn->processTime(0);
} }
$profile->free(); $profile->free();
} }

View File

@ -34,14 +34,14 @@ class JabberQueueHandler extends QueueHandler
return 'jabber'; return 'jabber';
} }
function handle_notice($notice) function handle($notice)
{ {
require_once(INSTALLDIR.'/lib/jabber.php'); require_once(INSTALLDIR.'/lib/jabber.php');
try { try {
return jabber_broadcast_notice($notice); return jabber_broadcast_notice($notice);
} catch (XMPPHP_Exception $e) { } catch (XMPPHP_Exception $e) {
$this->log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage()); $this->log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
exit(1); return false;
} }
} }
} }

View File

@ -36,7 +36,7 @@ class OmbQueueHandler extends QueueHandler
* @fixme doesn't currently report failure back to the queue manager * @fixme doesn't currently report failure back to the queue manager
* because omb_broadcast_notice() doesn't report it to us * because omb_broadcast_notice() doesn't report it to us
*/ */
function handle_notice($notice) function handle($notice)
{ {
if ($this->is_remote($notice)) { if ($this->is_remote($notice)) {
$this->log(LOG_DEBUG, 'Ignoring remote notice ' . $notice->id); $this->log(LOG_DEBUG, 'Ignoring remote notice ' . $notice->id);

View File

@ -30,7 +30,7 @@ class PingQueueHandler extends QueueHandler {
return 'ping'; return 'ping';
} }
function handle_notice($notice) { function handle($notice) {
require_once INSTALLDIR . '/lib/ping.php'; require_once INSTALLDIR . '/lib/ping.php';
return ping_broadcast_notice($notice); return ping_broadcast_notice($notice);
} }

View File

@ -42,7 +42,7 @@ class PluginQueueHandler extends QueueHandler
return 'plugin'; return 'plugin';
} }
function handle_notice($notice) function handle($notice)
{ {
Event::handle('HandleQueuedNotice', array(&$notice)); Event::handle('HandleQueuedNotice', array(&$notice));
return true; return true;

View File

@ -23,7 +23,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
/** /**
* Queue handler for pushing new notices to public XMPP subscribers. * Queue handler for pushing new notices to public XMPP subscribers.
* @fixme correct this exception handling
*/ */
class PublicQueueHandler extends QueueHandler class PublicQueueHandler extends QueueHandler
{ {
@ -33,15 +32,14 @@ class PublicQueueHandler extends QueueHandler
return 'public'; return 'public';
} }
function handle_notice($notice) function handle($notice)
{ {
require_once(INSTALLDIR.'/lib/jabber.php'); require_once(INSTALLDIR.'/lib/jabber.php');
try { try {
return jabber_public_notice($notice); return jabber_public_notice($notice);
} catch (XMPPHP_Exception $e) { } catch (XMPPHP_Exception $e) {
$this->log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage()); $this->log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
die($e->getMessage()); return false;
} }
return true;
} }
} }

117
lib/queued_xmpp.php Normal file
View File

@ -0,0 +1,117 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Queue-mediated proxy class for outgoing XMPP messages.
*
* 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 Network
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR . '/lib/jabber.php';
class Queued_XMPP extends XMPPHP_XMPP
{
/**
* Constructor
*
* @param string $host
* @param integer $port
* @param string $user
* @param string $password
* @param string $resource
* @param string $server
* @param boolean $printlog
* @param string $loglevel
*/
public function __construct($host, $port, $user, $password, $resource, $server = null, $printlog = false, $loglevel = null)
{
parent::__construct($host, $port, $user, $password, $resource, $server, $printlog, $loglevel);
// Normally the fulljid isn't filled out until resource binding time;
// we need to save it here since we're not talking to a real server.
$this->fulljid = "{$this->basejid}/{$this->resource}";
}
/**
* Send a formatted message to the outgoing queue for later forwarding
* to a real XMPP connection.
*
* @param string $msg
*/
public function send($msg, $timeout=NULL)
{
$qm = QueueManager::get();
$qm->enqueue(strval($msg), 'xmppout');
}
/**
* Since we'll be getting input through a queue system's run loop,
* we'll process one standalone message at a time rather than our
* own XMPP message pump.
*
* @param string $message
*/
public function processMessage($message) {
$frame = array_shift($this->frames);
xml_parse($this->parser, $frame->body, false);
}
//@{
/**
* Stream i/o functions disabled; push input through processMessage()
*/
public function connect($timeout = 30, $persistent = false, $sendinit = true)
{
throw new Exception("Can't connect to server from XMPP queue proxy.");
}
public function disconnect()
{
throw new Exception("Can't connect to server from XMPP queue proxy.");
}
public function process()
{
throw new Exception("Can't read stream from XMPP queue proxy.");
}
public function processUntil($event, $timeout=-1)
{
throw new Exception("Can't read stream from XMPP queue proxy.");
}
public function read()
{
throw new Exception("Can't read stream from XMPP queue proxy.");
}
public function readyToProcess()
{
throw new Exception("Can't read stream from XMPP queue proxy.");
}
//@}
}

View File

@ -22,51 +22,20 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
/** /**
* Base class for queue handlers. * Base class for queue handlers.
* *
* As extensions of the Daemon class, each queue handler has the ability * As of 0.9, queue handlers are short-lived for items as they are
* to launch itself in the background, at which point it'll pass control * dequeued by a QueueManager running in an IoMaster in a daemon
* to the configured QueueManager class to poll for updates. * such as queuedaemon.php.
*
* Extensions requiring long-running maintenance or polling should
* register an IoManager.
* *
* Subclasses must override at least the following methods: * Subclasses must override at least the following methods:
* - transport * - transport
* - handle_notice * - handle
*/ */
#class QueueHandler extends Daemon
class QueueHandler class QueueHandler
{ {
# function __construct($id=null, $daemonize=true)
# {
# parent::__construct($daemonize);
#
# if ($id) {
# $this->set_id($id);
# }
# }
/**
* How many seconds a polling-based queue manager should wait between
* checks for new items to handle.
*
* Defaults to 60 seconds; override to speed up or slow down.
*
* @fixme not really compatible with global queue manager
* @return int timeout in seconds
*/
# function timeout()
# {
# return 60;
# }
# function class_name()
# {
# return ucfirst($this->transport()) . 'Handler';
# }
# function name()
# {
# return strtolower($this->class_name().'.'.$this->get_id());
# }
/** /**
* Return transport keyword which identifies items this queue handler * Return transport keyword which identifies items this queue handler
* services; must be defined for all subclasses. * services; must be defined for all subclasses.
@ -83,61 +52,17 @@ class QueueHandler
/** /**
* Here's the meat of your queue handler -- you're handed a Notice * Here's the meat of your queue handler -- you're handed a Notice
* object, which you may do as you will with. * or other object, which you may do as you will with.
* *
* If this function indicates failure, a warning will be logged * If this function indicates failure, a warning will be logged
* and the item is placed back in the queue to be re-run. * and the item is placed back in the queue to be re-run.
* *
* @param Notice $notice * @param mixed $object
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
function handle_notice($notice) function handle($object)
{ {
return true; return true;
} }
/**
* Setup and start of run loop for this queue handler as a daemon.
* Most of the heavy lifting is passed on to the QueueManager's service()
* method, which passes control back to our handle_notice() method for
* each notice that comes in on the queue.
*
* Most of the time this won't need to be overridden in a subclass.
*
* @return boolean true on success, false on failure
*/
function run()
{
if (!$this->start()) {
$this->log(LOG_WARNING, 'failed to start');
return false;
}
$this->log(LOG_INFO, 'checking for queued notices');
$queue = $this->transport();
$timeout = $this->timeout();
$qm = QueueManager::get();
$qm->service($queue, $this);
$this->log(LOG_INFO, 'finished servicing the queue');
if (!$this->finish()) {
$this->log(LOG_WARNING, 'failed to clean up');
return false;
}
$this->log(LOG_INFO, 'terminating normally');
return true;
}
function log($level, $msg)
{
common_log($level, $this->class_name() . ' ('. $this->get_id() .'): '.$msg);
}
} }

View File

@ -39,6 +39,10 @@ abstract class QueueManager extends IoManager
{ {
static $qm = null; static $qm = null;
public $master = null;
public $handlers = array();
public $groups = array();
/** /**
* Factory function to pull the appropriate QueueManager object * Factory function to pull the appropriate QueueManager object
* for this site's configuration. It can then be used to queue * for this site's configuration. It can then be used to queue
@ -109,6 +113,64 @@ abstract class QueueManager extends IoManager
*/ */
abstract function enqueue($object, $queue); abstract function enqueue($object, $queue);
/**
* Build a representation for an object for logging
* @param mixed
* @return string
*/
function logrep($object) {
if (is_object($object)) {
$class = get_class($object);
if (isset($object->id)) {
return "$class $object->id";
}
return $class;
}
if (is_string($object)) {
$len = strlen($object);
$fragment = mb_substr($object, 0, 32);
if (mb_strlen($object) > 32) {
$fragment .= '...';
}
return "string '$fragment' ($len bytes)";
}
return strval($object);
}
/**
* Encode an object for queued storage.
* Next gen may use serialization.
*
* @param mixed $object
* @return string
*/
protected function encode($object)
{
if ($object instanceof Notice) {
return $object->id;
} else if (is_string($object)) {
return $object;
} else {
throw new ServerException("Can't queue this type", 500);
}
}
/**
* Decode an object from queued storage.
* Accepts back-compat notice reference entries and strings for now.
*
* @param string
* @return mixed
*/
protected function decode($frame)
{
if (is_numeric($frame)) {
return Notice::staticGet(intval($frame));
} else {
return $frame;
}
}
/** /**
* Instantiate the appropriate QueueHandler class for the given queue. * Instantiate the appropriate QueueHandler class for the given queue.
* *
@ -119,7 +181,9 @@ abstract class QueueManager extends IoManager
{ {
if (isset($this->handlers[$queue])) { if (isset($this->handlers[$queue])) {
$class = $this->handlers[$queue]; $class = $this->handlers[$queue];
if (class_exists($class)) { if(is_object($class)) {
return $class;
} else if (class_exists($class)) {
return new $class(); return new $class();
} else { } else {
common_log(LOG_ERR, "Nonexistent handler class '$class' for queue '$queue'"); common_log(LOG_ERR, "Nonexistent handler class '$class' for queue '$queue'");
@ -131,13 +195,15 @@ abstract class QueueManager extends IoManager
} }
/** /**
* Get a list of all registered queue transport names. * Get a list of registered queue transport names to be used
* for this daemon.
* *
* @return array of strings * @return array of strings
*/ */
function getQueues() function getQueues()
{ {
return array_keys($this->handlers); $group = $this->activeGroup();
return array_keys($this->groups[$group]);
} }
/** /**
@ -148,33 +214,29 @@ abstract class QueueManager extends IoManager
*/ */
function initialize() function initialize()
{ {
// @fixme we'll want to be able to listen to particular queues...
if (Event::handle('StartInitializeQueueManager', array($this))) { if (Event::handle('StartInitializeQueueManager', array($this))) {
if (!defined('XMPP_ONLY_FLAG')) { // hack! $this->connect('plugin', 'PluginQueueHandler');
$this->connect('plugin', 'PluginQueueHandler'); $this->connect('omb', 'OmbQueueHandler');
$this->connect('omb', 'OmbQueueHandler'); $this->connect('ping', 'PingQueueHandler');
$this->connect('ping', 'PingQueueHandler'); if (common_config('sms', 'enabled')) {
if (common_config('sms', 'enabled')) { $this->connect('sms', 'SmsQueueHandler');
$this->connect('sms', 'SmsQueueHandler');
}
} }
// XMPP output handlers... // XMPP output handlers...
if (common_config('xmpp', 'enabled') && !defined('XMPP_EMERGENCY_FLAG')) { $this->connect('jabber', 'JabberQueueHandler');
$this->connect('jabber', 'JabberQueueHandler'); $this->connect('public', 'PublicQueueHandler');
$this->connect('public', 'PublicQueueHandler');
// @fixme this should get an actual queue
// @fixme this should move up a level or should get an actual queue //$this->connect('confirm', 'XmppConfirmHandler');
$this->connect('confirm', 'XmppConfirmHandler');
} // For compat with old plugins not registering their own handlers.
$this->connect('plugin', 'PluginQueueHandler');
$this->connect('xmppout', 'XmppOutQueueHandler', 'xmppdaemon');
if (!defined('XMPP_ONLY_FLAG')) { // hack!
// For compat with old plugins not registering their own handlers.
$this->connect('plugin', 'PluginQueueHandler');
}
}
if (!defined('XMPP_ONLY_FLAG')) { // hack!
Event::handle('EndInitializeQueueManager', array($this));
} }
Event::handle('EndInitializeQueueManager', array($this));
} }
/** /**
@ -182,11 +244,28 @@ abstract class QueueManager extends IoManager
* Only registered transports will be reliably picked up! * Only registered transports will be reliably picked up!
* *
* @param string $transport * @param string $transport
* @param string $class * @param string $class class name or object instance
* @param string $group
*/ */
public function connect($transport, $class) public function connect($transport, $class, $group='queuedaemon')
{ {
$this->handlers[$transport] = $class; $this->handlers[$transport] = $class;
$this->groups[$group][$transport] = $class;
}
/**
* @return string queue group to use for this request
*/
function activeGroup()
{
$group = 'queuedaemon';
if ($this->master) {
// hack hack
if ($this->master instanceof XmppMaster) {
return 'xmppdaemon';
}
}
return $group;
} }
/** /**

View File

@ -31,7 +31,7 @@ class SmsQueueHandler extends QueueHandler
return 'sms'; return 'sms';
} }
function handle_notice($notice) function handle($notice)
{ {
require_once(INSTALLDIR.'/lib/mail.php'); require_once(INSTALLDIR.'/lib/mail.php');
return mail_broadcast_notice_sms($notice); return mail_broadcast_notice_sms($notice);

159
lib/spawningdaemon.php Normal file
View File

@ -0,0 +1,159 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2010, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Base class for daemon that can launch one or more processing threads,
* respawning them if they exit.
*
* This is mainly intended for indefinite workloads such as monitoring
* a queue or maintaining an IM channel.
*
* Child classes should implement the
*
* We can then pass individual items through the QueueHandler subclasses
* they belong to. We additionally can handle queues for multiple sites.
*
* @package QueueHandler
* @author Brion Vibber <brion@status.net>
*/
abstract class SpawningDaemon extends Daemon
{
protected $threads=1;
function __construct($id=null, $daemonize=true, $threads=1)
{
parent::__construct($daemonize);
if ($id) {
$this->set_id($id);
}
$this->threads = $threads;
}
/**
* Perform some actual work!
*
* @return boolean true on success, false on failure
*/
public abstract function runThread();
/**
* Spawn one or more background processes and let them start running.
* Each individual process will execute whatever's in the runThread()
* method, which should be overridden.
*
* Child processes will be automatically respawned when they exit.
*
* @todo possibly allow for not respawning on "normal" exits...
* though ParallelizingDaemon is probably better for workloads
* that have forseeable endpoints.
*/
function run()
{
$children = array();
for ($i = 1; $i <= $this->threads; $i++) {
$pid = pcntl_fork();
if ($pid < 0) {
$this->log(LOG_ERROR, "Couldn't fork for thread $i; aborting\n");
exit(1);
} else if ($pid == 0) {
$this->initAndRunChild($i);
} else {
$this->log(LOG_INFO, "Spawned thread $i as pid $pid");
$children[$i] = $pid;
}
}
$this->log(LOG_INFO, "Waiting for children to complete.");
while (count($children) > 0) {
$status = null;
$pid = pcntl_wait($status);
if ($pid > 0) {
$i = array_search($pid, $children);
if ($i === false) {
$this->log(LOG_ERR, "Unrecognized child pid $pid exited!");
continue;
}
unset($children[$i]);
$this->log(LOG_INFO, "Thread $i pid $pid exited.");
$pid = pcntl_fork();
if ($pid < 0) {
$this->log(LOG_ERROR, "Couldn't fork to respawn thread $i; aborting thread.\n");
} else if ($pid == 0) {
$this->initAndRunChild($i);
} else {
$this->log(LOG_INFO, "Respawned thread $i as pid $pid");
$children[$i] = $pid;
}
}
}
$this->log(LOG_INFO, "All child processes complete.");
return true;
}
/**
* Initialize things for a fresh thread, call runThread(), and
* exit at completion with appropriate return value.
*/
protected function initAndRunChild($thread)
{
$this->set_id($this->get_id() . "." . $thread);
$this->resetDb();
$ok = $this->runThread();
exit($ok ? 0 : 1);
}
/**
* Reconnect to the database for each child process,
* or they'll get very confused trying to use the
* same socket.
*/
protected function resetDb()
{
// @fixme do we need to explicitly open the db too
// or is this implied?
global $_DB_DATAOBJECT;
unset($_DB_DATAOBJECT['CONNECTIONS']);
// Reconnect main memcached, or threads will stomp on
// each other and corrupt their requests.
$cache = common_memcache();
if ($cache) {
$cache->reconnect();
}
// Also reconnect memcached for status_network table.
if (!empty(Status_network::$cache)) {
Status_network::$cache->close();
Status_network::$cache = null;
}
}
function log($level, $msg)
{
common_log($level, get_class($this) . ' ('. $this->get_id() .'): '.$msg);
}
function name()
{
return strtolower(get_class($this).'.'.$this->get_id());
}
}

View File

@ -63,7 +63,7 @@ class StatusNet
} }
} }
if (!class_exists($pluginclass)) { if (!class_exists($pluginclass)) {
throw new ServerException(500, "Plugin $name not found."); throw new ServerException("Plugin $name not found.", 500);
} }
} }

View File

@ -39,9 +39,12 @@ class StompQueueManager extends QueueManager
var $base = null; var $base = null;
var $con = null; var $con = null;
protected $master = null;
protected $sites = array(); protected $sites = array();
protected $useTransactions = true;
protected $transaction = null;
protected $transactionCount = 0;
function __construct() function __construct()
{ {
parent::__construct(); parent::__construct();
@ -104,11 +107,12 @@ class StompQueueManager extends QueueManager
*/ */
function getQueues() function getQueues()
{ {
$group = $this->activeGroup();
$site = common_config('site', 'server'); $site = common_config('site', 'server');
if (empty($this->handlers[$site])) { if (empty($this->groups[$site][$group])) {
return array(); return array();
} else { } else {
return array_keys($this->handlers[$site]); return array_keys($this->groups[$site][$group]);
} }
} }
@ -118,10 +122,12 @@ class StompQueueManager extends QueueManager
* *
* @param string $transport * @param string $transport
* @param string $class * @param string $class
* @param string $group
*/ */
public function connect($transport, $class) public function connect($transport, $class, $group='queuedaemon')
{ {
$this->handlers[common_config('site', 'server')][$transport] = $class; $this->handlers[common_config('site', 'server')][$transport] = $class;
$this->groups[common_config('site', 'server')][$group][$transport] = $class;
} }
/** /**
@ -130,23 +136,23 @@ class StompQueueManager extends QueueManager
*/ */
public function enqueue($object, $queue) public function enqueue($object, $queue)
{ {
$notice = $object; $msg = $this->encode($object);
$rep = $this->logrep($object);
$this->_connect(); $this->_connect();
// XXX: serialize and send entire notice // XXX: serialize and send entire notice
$result = $this->con->send($this->queueName($queue), $result = $this->con->send($this->queueName($queue),
$notice->id, // BODY of the message $msg, // BODY of the message
array ('created' => $notice->created)); array ('created' => common_sql_now()));
if (!$result) { if (!$result) {
common_log(LOG_ERR, 'Error sending to '.$queue.' queue'); common_log(LOG_ERR, "Error sending $rep to $queue queue");
return false; return false;
} }
common_log(LOG_DEBUG, 'complete remote queueing notice ID = ' common_log(LOG_DEBUG, "complete remote queueing $rep for $queue");
. $notice->id . ' for ' . $queue);
$this->stats('enqueued', $queue); $this->stats('enqueued', $queue);
} }
@ -174,7 +180,7 @@ class StompQueueManager extends QueueManager
$ok = true; $ok = true;
$frames = $this->con->readFrames(); $frames = $this->con->readFrames();
foreach ($frames as $frame) { foreach ($frames as $frame) {
$ok = $ok && $this->_handleNotice($frame); $ok = $ok && $this->_handleItem($frame);
} }
return $ok; return $ok;
} }
@ -199,6 +205,7 @@ class StompQueueManager extends QueueManager
} else { } else {
$this->doSubscribe(); $this->doSubscribe();
} }
$this->begin();
return true; return true;
} }
@ -211,6 +218,9 @@ class StompQueueManager extends QueueManager
*/ */
public function finish() public function finish()
{ {
// If there are any outstanding delivered messages we haven't processed,
// free them for another thread to take.
$this->rollback();
if ($this->sites) { if ($this->sites) {
foreach ($this->sites as $server) { foreach ($this->sites as $server) {
StatusNet::init($server); StatusNet::init($server);
@ -265,7 +275,7 @@ class StompQueueManager extends QueueManager
} }
/** /**
* Handle and acknowledge a notice event that's come in through a queue. * Handle and acknowledge an event that's come in through a queue.
* *
* If the queue handler reports failure, the message is requeued for later. * If the queue handler reports failure, the message is requeued for later.
* Missing notices or handler classes will drop the message. * Missing notices or handler classes will drop the message.
@ -276,7 +286,7 @@ class StompQueueManager extends QueueManager
* @param StompFrame $frame * @param StompFrame $frame
* @return bool * @return bool
*/ */
protected function _handleNotice($frame) protected function _handleItem($frame)
{ {
list($site, $queue) = $this->parseDestination($frame->headers['destination']); list($site, $queue) = $this->parseDestination($frame->headers['destination']);
if ($site != common_config('site', 'server')) { if ($site != common_config('site', 'server')) {
@ -284,40 +294,37 @@ class StompQueueManager extends QueueManager
StatusNet::init($site); StatusNet::init($site);
} }
$id = intval($frame->body); $item = $this->decode($frame->body);
$info = "notice $id posted at {$frame->headers['created']} in queue $queue";
$notice = Notice::staticGet('id', $id);
if (empty($notice)) {
$this->_log(LOG_WARNING, "Skipping missing $info");
$this->con->ack($frame);
$this->stats('badnotice', $queue);
return false;
}
$handler = $this->getHandler($queue); $handler = $this->getHandler($queue);
if (!$handler) { if (!$handler) {
$this->_log(LOG_ERROR, "Missing handler class; skipping $info"); $this->_log(LOG_ERROR, "Missing handler class; skipping $info");
$this->con->ack($frame); $this->ack($frame);
$this->commit();
$this->begin();
$this->stats('badhandler', $queue); $this->stats('badhandler', $queue);
return false; return false;
} }
$ok = $handler->handle_notice($notice); $ok = $handler->handle($item);
if (!$ok) { if (!$ok) {
$this->_log(LOG_WARNING, "Failed handling $info"); $this->_log(LOG_WARNING, "Failed handling $info");
// FIXME we probably shouldn't have to do // FIXME we probably shouldn't have to do
// this kind of queue management ourselves; // this kind of queue management ourselves;
// if we don't ack, it should resend... // if we don't ack, it should resend...
$this->con->ack($frame); $this->ack($frame);
$this->enqueue($notice, $queue); $this->enqueue($item, $queue);
$this->commit();
$this->begin();
$this->stats('requeued', $queue); $this->stats('requeued', $queue);
return false; return false;
} }
$this->_log(LOG_INFO, "Successfully handled $info"); $this->_log(LOG_INFO, "Successfully handled $info");
$this->con->ack($frame); $this->ack($frame);
$this->commit();
$this->begin();
$this->stats('handled', $queue); $this->stats('handled', $queue);
return true; return true;
} }
@ -359,5 +366,49 @@ class StompQueueManager extends QueueManager
{ {
common_log($level, 'StompQueueManager: '.$msg); common_log($level, 'StompQueueManager: '.$msg);
} }
protected function begin()
{
if ($this->useTransactions) {
if ($this->transaction) {
throw new Exception("Tried to start transaction in the middle of a transaction");
}
$this->transactionCount++;
$this->transaction = $this->master->id . '-' . $this->transactionCount . '-' . time();
$this->con->begin($this->transaction);
}
}
protected function ack($frame)
{
if ($this->useTransactions) {
if (!$this->transaction) {
throw new Exception("Tried to ack but not in a transaction");
}
}
$this->con->ack($frame, $this->transaction);
}
protected function commit()
{
if ($this->useTransactions) {
if (!$this->transaction) {
throw new Exception("Tried to commit but not in a transaction");
}
$this->con->commit($this->transaction);
$this->transaction = null;
}
}
protected function rollback()
{
if ($this->useTransactions) {
if (!$this->transaction) {
throw new Exception("Tried to rollback but not in a transaction");
}
$this->con->commit($this->transaction);
$this->transaction = null;
}
}
} }

View File

@ -47,7 +47,7 @@ class UnQueueManager extends QueueManager
$handler = $this->getHandler($queue); $handler = $this->getHandler($queue);
if ($handler) { if ($handler) {
$handler->handle_notice($notice); $handler->handle($notice);
} else { } else {
if (Event::handle('UnqueueHandleNotice', array(&$notice, $queue))) { if (Event::handle('UnqueueHandleNotice', array(&$notice, $queue))) {
throw new ServerException("UnQueueManager: Unknown queue: $queue"); throw new ServerException("UnQueueManager: Unknown queue: $queue");

View File

@ -596,20 +596,13 @@ function common_linkify($url) {
} }
if (!empty($f)) { if (!empty($f)) {
if ($f->isEnclosure()) { if ($f->getEnclosure()) {
$is_attachment = true; $is_attachment = true;
$attachment_id = $f->id; $attachment_id = $f->id;
} else {
$foe = File_oembed::staticGet('file_id', $f->id);
if (!empty($foe)) {
// if it has OEmbed info, it's an attachment, too
$is_attachment = true;
$attachment_id = $f->id;
$thumb = File_thumbnail::staticGet('file_id', $f->id); $thumb = File_thumbnail::staticGet('file_id', $f->id);
if (!empty($thumb)) { if (!empty($thumb)) {
$has_thumb = true; $has_thumb = true;
}
} }
} }
} }
@ -1130,7 +1123,8 @@ function common_request_id()
$pid = getmypid(); $pid = getmypid();
$server = common_config('site', 'server'); $server = common_config('site', 'server');
if (php_sapi_name() == 'cli') { if (php_sapi_name() == 'cli') {
return "$server:$pid"; $script = basename($_SERVER['PHP_SELF']);
return "$server:$script:$pid";
} else { } else {
static $req_id = null; static $req_id = null;
if (!isset($req_id)) { if (!isset($req_id)) {

View File

@ -1,168 +0,0 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2008-2010 StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* 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);
}
/**
* Event handler for pushing new confirmations to Jabber users.
* @fixme recommend redoing this on a queue-trigger model
* @fixme expiration of old items got dropped in the past, put it back?
*/
class XmppConfirmManager extends IoManager
{
/**
* @return mixed XmppConfirmManager, or false if unneeded
*/
public static function get()
{
if (common_config('xmpp', 'enabled')) {
$site = common_config('site', 'server');
return new XmppConfirmManager();
} else {
return false;
}
}
/**
* Tell the i/o master we need one instance for each supporting site
* being handled in this process.
*/
public static function multiSite()
{
return IoManager::INSTANCE_PER_SITE;
}
function __construct()
{
$this->site = common_config('site', 'server');
}
/**
* 10 seconds? Really? That seems a bit frequent.
*/
function pollInterval()
{
return 10;
}
/**
* Ping!
* @return boolean true if we found something
*/
function poll()
{
$this->switchSite();
$confirm = $this->next_confirm();
if ($confirm) {
$this->handle_confirm($confirm);
return true;
} else {
return false;
}
}
protected function handle_confirm($confirm)
{
require_once INSTALLDIR . '/lib/jabber.php';
common_log(LOG_INFO, 'Sending confirmation for ' . $confirm->address);
$user = User::staticGet($confirm->user_id);
if (!$user) {
common_log(LOG_WARNING, 'Confirmation for unknown user ' . $confirm->user_id);
return;
}
$success = jabber_confirm_address($confirm->code,
$user->nickname,
$confirm->address);
if (!$success) {
common_log(LOG_ERR, 'Confirmation failed for ' . $confirm->address);
# Just let the claim age out; hopefully things work then
return;
} else {
common_log(LOG_INFO, 'Confirmation sent for ' . $confirm->address);
# Mark confirmation sent; need a dupe so we don't have the WHERE clause
$dupe = Confirm_address::staticGet('code', $confirm->code);
if (!$dupe) {
common_log(LOG_WARNING, 'Could not refetch confirm', __FILE__);
return;
}
$orig = clone($dupe);
$dupe->sent = $dupe->claimed;
$result = $dupe->update($orig);
if (!$result) {
common_log_db_error($dupe, 'UPDATE', __FILE__);
# Just let the claim age out; hopefully things work then
return;
}
}
return true;
}
protected function next_confirm()
{
$confirm = new Confirm_address();
$confirm->whereAdd('claimed IS null');
$confirm->whereAdd('sent IS null');
# XXX: eventually we could do other confirmations in the queue, too
$confirm->address_type = 'jabber';
$confirm->orderBy('modified DESC');
$confirm->limit(1);
if ($confirm->find(true)) {
common_log(LOG_INFO, 'Claiming confirmation for ' . $confirm->address);
# working around some weird DB_DataObject behaviour
$confirm->whereAdd(''); # clears where stuff
$original = clone($confirm);
$confirm->claimed = common_sql_now();
$result = $confirm->update($original);
if ($result) {
common_log(LOG_INFO, 'Succeeded in claim! '. $result);
return $confirm;
} else {
common_log(LOG_INFO, 'Failed in claim!');
return false;
}
}
return null;
}
protected function clear_old_confirm_claims()
{
$confirm = new Confirm();
$confirm->claimed = null;
$confirm->whereAdd('now() - claimed > '.CLAIM_TIMEOUT);
$confirm->update(DB_DATAOBJECT_WHEREADD_ONLY);
$confirm->free();
unset($confirm);
}
/**
* Make sure we're on the right site configuration
*/
protected function switchSite()
{
if ($this->site != common_config('site', 'server')) {
common_log(LOG_DEBUG, __METHOD__ . ": switching to site $this->site");
$this->stats('switch');
StatusNet::init($this->site);
}
}
}

View File

@ -70,6 +70,7 @@ class XmppManager extends IoManager
function __construct() function __construct()
{ {
$this->site = common_config('site', 'server'); $this->site = common_config('site', 'server');
$this->resource = common_config('xmpp', 'resource') . 'daemon';
} }
/** /**
@ -86,15 +87,19 @@ class XmppManager extends IoManager
# Low priority; we don't want to receive messages # Low priority; we don't want to receive messages
common_log(LOG_INFO, "INITIALIZE"); common_log(LOG_INFO, "INITIALIZE");
$this->conn = jabber_connect($this->resource()); $this->conn = jabber_connect($this->resource);
if (empty($this->conn)) { if (empty($this->conn)) {
common_log(LOG_ERR, "Couldn't connect to server."); common_log(LOG_ERR, "Couldn't connect to server.");
return false; return false;
} }
$this->conn->addEventHandler('message', 'forward_message', $this); $this->log(LOG_DEBUG, "Initializing stanza handlers.");
$this->conn->addEventHandler('message', 'handle_message', $this);
$this->conn->addEventHandler('presence', 'handle_presence', $this);
$this->conn->addEventHandler('reconnect', 'handle_reconnect', $this); $this->conn->addEventHandler('reconnect', 'handle_reconnect', $this);
$this->conn->setReconnectTimeout(600); $this->conn->setReconnectTimeout(600);
jabber_send_presence("Send me a message to post a notice", 'available', null, 'available', -1); jabber_send_presence("Send me a message to post a notice", 'available', null, 'available', -1);
@ -175,12 +180,37 @@ class XmppManager extends IoManager
} }
} }
/**
* For queue handlers to pass us a message to push out,
* if we're active.
*
* @fixme should this be blocking etc?
*
* @param string $msg XML stanza to send
* @return boolean success
*/
public function send($msg)
{
if ($this->conn && !$this->conn->isDisconnected()) {
$bytes = $this->conn->send($msg);
if ($bytes > 0) {
$this->conn->processTime(0);
return true;
} else {
return false;
}
} else {
// Can't send right now...
return false;
}
}
/** /**
* Send a keepalive ping to the XMPP server. * Send a keepalive ping to the XMPP server.
*/ */
protected function sendPing() protected function sendPing()
{ {
$jid = jabber_daemon_address().'/'.$this->resource(); $jid = jabber_daemon_address().'/'.$this->resource;
$server = common_config('xmpp', 'server'); $server = common_config('xmpp', 'server');
if (!isset($this->pingid)) { if (!isset($this->pingid)) {
@ -206,61 +236,239 @@ class XmppManager extends IoManager
$this->conn->presence(null, 'available', null, 'available', -1); $this->conn->presence(null, 'available', null, 'available', -1);
} }
/**
* Callback for Jabber message event. function get_user($from)
*
* This connection handles output; if we get a message straight to us,
* forward it on to our XmppDaemon listener for processing.
*
* @param $pl
*/
function forward_message(&$pl)
{ {
$user = User::staticGet('jabber', jabber_normalize_jid($from));
return $user;
}
/**
* XMPP callback for handling message input...
* @param array $pl XMPP payload
*/
function handle_message(&$pl)
{
$from = jabber_normalize_jid($pl['from']);
if ($pl['type'] != 'chat') { if ($pl['type'] != 'chat') {
common_log(LOG_DEBUG, 'Ignoring message of type ' . $pl['type'] . ' from ' . $pl['from']); $this->log(LOG_WARNING, "Ignoring message of type ".$pl['type']." from $from.");
return; return;
} }
$listener = $this->listener();
if (strtolower($listener) == strtolower($pl['from'])) { if (mb_strlen($pl['body']) == 0) {
common_log(LOG_WARNING, 'Ignoring loop message.'); $this->log(LOG_WARNING, "Ignoring message with empty body from $from.");
return; return;
} }
common_log(LOG_INFO, 'Forwarding message from ' . $pl['from'] . ' to ' . $listener);
$this->conn->message($this->listener(), $pl['body'], 'chat', null, $this->ofrom($pl['from']));
}
/** // Forwarded from another daemon for us to handle; this shouldn't
* Build an <addresses> block with an ofrom entry for forwarded messages // happen any more but we might get some legacy items.
* if ($this->is_self($from)) {
* @param string $from Jabber ID of original sender $this->log(LOG_INFO, "Got forwarded notice from self ($from).");
* @return string XML fragment $from = $this->get_ofrom($pl);
*/ $this->log(LOG_INFO, "Originally sent by $from.");
protected function ofrom($from) if (is_null($from) || $this->is_self($from)) {
{ $this->log(LOG_INFO, "Ignoring notice originally sent by $from.");
$address = "<addresses xmlns='http://jabber.org/protocol/address'>\n"; return;
$address .= "<address type='ofrom' jid='$from' />\n"; }
$address .= "</addresses>\n"; }
return $address;
}
/** $user = $this->get_user($from);
* Build the complete JID of the XmppDaemon process which
* handles primary XMPP input for this site. // For common_current_user to work
* global $_cur;
* @return string Jabber ID $_cur = $user;
*/
protected function listener() if (!$user) {
{ $this->from_site($from, 'Unknown user; go to ' .
if (common_config('xmpp', 'listener')) { common_local_url('imsettings') .
return common_config('xmpp', 'listener'); ' to add your address to your account');
$this->log(LOG_WARNING, 'Message from unknown user ' . $from);
return;
}
if ($this->handle_command($user, $pl['body'])) {
$this->log(LOG_INFO, "Command message by $from handled.");
return;
} else if ($this->is_autoreply($pl['body'])) {
$this->log(LOG_INFO, 'Ignoring auto reply from ' . $from);
return;
} else if ($this->is_otr($pl['body'])) {
$this->log(LOG_INFO, 'Ignoring OTR from ' . $from);
return;
} else { } else {
return jabber_daemon_address() . '/' . common_config('xmpp','resource') . 'daemon';
$this->log(LOG_INFO, 'Posting a notice from ' . $user->nickname);
$this->add_notice($user, $pl);
}
$user->free();
unset($user);
unset($_cur);
unset($pl['xml']);
$pl['xml'] = null;
$pl = null;
unset($pl);
}
function is_self($from)
{
return preg_match('/^'.strtolower(jabber_daemon_address()).'/', strtolower($from));
}
function get_ofrom($pl)
{
$xml = $pl['xml'];
$addresses = $xml->sub('addresses');
if (!$addresses) {
$this->log(LOG_WARNING, 'Forwarded message without addresses');
return null;
}
$address = $addresses->sub('address');
if (!$address) {
$this->log(LOG_WARNING, 'Forwarded message without address');
return null;
}
if (!array_key_exists('type', $address->attrs)) {
$this->log(LOG_WARNING, 'No type for forwarded message');
return null;
}
$type = $address->attrs['type'];
if ($type != 'ofrom') {
$this->log(LOG_WARNING, 'Type of forwarded message is not ofrom');
return null;
}
if (!array_key_exists('jid', $address->attrs)) {
$this->log(LOG_WARNING, 'No jid for forwarded message');
return null;
}
$jid = $address->attrs['jid'];
if (!$jid) {
$this->log(LOG_WARNING, 'Could not get jid from address');
return null;
}
$this->log(LOG_DEBUG, 'Got message forwarded from jid ' . $jid);
return $jid;
}
function is_autoreply($txt)
{
if (preg_match('/[\[\(]?[Aa]uto[-\s]?[Rr]e(ply|sponse)[\]\)]/', $txt)) {
return true;
} else if (preg_match('/^System: Message wasn\'t delivered. Offline storage size was exceeded.$/', $txt)) {
return true;
} else {
return false;
} }
} }
protected function resource() function is_otr($txt)
{ {
return 'queue' . posix_getpid(); // @fixme PIDs won't be host-unique if (preg_match('/^\?OTR/', $txt)) {
return true;
} else {
return false;
}
}
function from_site($address, $msg)
{
$text = '['.common_config('site', 'name') . '] ' . $msg;
jabber_send_message($address, $text);
}
function handle_command($user, $body)
{
$inter = new CommandInterpreter();
$cmd = $inter->handle_command($user, $body);
if ($cmd) {
$chan = new XMPPChannel($this->conn);
$cmd->execute($chan);
return true;
} else {
return false;
}
}
function add_notice(&$user, &$pl)
{
$body = trim($pl['body']);
$content_shortened = common_shorten_links($body);
if (Notice::contentTooLong($content_shortened)) {
$from = jabber_normalize_jid($pl['from']);
$this->from_site($from, sprintf(_('Message too long - maximum is %1$d characters, you sent %2$d.'),
Notice::maxContent(),
mb_strlen($content_shortened)));
return;
}
try {
$notice = Notice::saveNew($user->id, $content_shortened, 'xmpp');
} catch (Exception $e) {
$this->log(LOG_ERR, $e->getMessage());
$this->from_site($user->jabber, $e->getMessage());
return;
}
common_broadcast_notice($notice);
$this->log(LOG_INFO,
'Added notice ' . $notice->id . ' from user ' . $user->nickname);
$notice->free();
unset($notice);
}
function handle_presence(&$pl)
{
$from = jabber_normalize_jid($pl['from']);
switch ($pl['type']) {
case 'subscribe':
# We let anyone subscribe
$this->subscribed($from);
$this->log(LOG_INFO,
'Accepted subscription from ' . $from);
break;
case 'subscribed':
case 'unsubscribed':
case 'unsubscribe':
$this->log(LOG_INFO,
'Ignoring "' . $pl['type'] . '" from ' . $from);
break;
default:
if (!$pl['type']) {
$user = User::staticGet('jabber', $from);
if (!$user) {
$this->log(LOG_WARNING, 'Presence from unknown user ' . $from);
return;
}
if ($user->updatefrompresence) {
$this->log(LOG_INFO, 'Updating ' . $user->nickname .
' status from presence.');
$this->add_notice($user, $pl);
}
$user->free();
unset($user);
}
break;
}
unset($pl['xml']);
$pl['xml'] = null;
$pl = null;
unset($pl);
}
function log($level, $msg)
{
$text = 'XMPPDaemon('.$this->resource.'): '.$msg;
common_log($level, $text);
}
function subscribed($to)
{
jabber_special_presence('subscribed', $to);
} }
/** /**

View File

@ -0,0 +1,55 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2010, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Queue handler for pre-processed outgoing XMPP messages.
* Formatted XML stanzas will have been pushed into the queue
* via the Queued_XMPP connection proxy, probably from some
* other queue processor.
*
* Here, the XML stanzas are simply pulled out of the queue and
* pushed out over the wire; an XmppManager is needed to set up
* and maintain the actual server connection.
*
* This queue will be run via XmppDaemon rather than QueueDaemon.
*
* @author Brion Vibber <brion@status.net>
*/
class XmppOutQueueHandler extends QueueHandler
{
function transport() {
return 'xmppout';
}
/**
* Take a previously-queued XMPP stanza and send it out ot the server.
* @param string $msg
* @return boolean true on success
*/
function handle($msg)
{
assert(is_string($msg));
$xmpp = XmppManager::get();
$ok = $xmpp->send($msg);
return $ok;
}
}

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:51:26+0000\n" "PO-Revision-Date: 2010-01-21 22:37:00+0000\n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ar\n" "X-Language-Code: ar\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -127,7 +127,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -372,7 +372,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "لم توجد المجموعة!" msgstr "لم توجد المجموعة!"
@ -415,7 +415,7 @@ msgstr "مجموعات %s"
#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114 #: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
msgid "Bad request." msgid "Bad request."
msgstr "" msgstr "طلب سيء."
#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268 #: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74 #: actions/deletenotice.php:157 actions/disfavor.php:74
@ -531,7 +531,7 @@ msgstr "حُذِفت الحالة."
#: actions/apistatusesshow.php:144 #: actions/apistatusesshow.php:144
msgid "No status with that ID found." msgid "No status with that ID found."
msgstr "" msgstr "لا حالة وُجدت بهذه الهوية."
#: actions/apistatusesupdate.php:162 actions/newnotice.php:155 #: actions/apistatusesupdate.php:162 actions/newnotice.php:155
#: lib/mailhandler.php:60 #: lib/mailhandler.php:60
@ -597,7 +597,7 @@ msgstr ""
#: actions/apitimelineretweetedbyme.php:112 #: actions/apitimelineretweetedbyme.php:112
#, php-format #, php-format
msgid "Repeated by %s" msgid "Repeated by %s"
msgstr "" msgstr "كرّره %s"
#: actions/apitimelineretweetedtome.php:111 #: actions/apitimelineretweetedtome.php:111
#, php-format #, php-format
@ -1026,7 +1026,7 @@ msgstr "لا مستند كهذا."
#: actions/editapplication.php:54 lib/applicationeditform.php:136 #: actions/editapplication.php:54 lib/applicationeditform.php:136
msgid "Edit application" msgid "Edit application"
msgstr "" msgstr "عدّل التطبيق"
#: actions/editapplication.php:66 #: actions/editapplication.php:66
msgid "You must be logged in to edit an application." msgid "You must be logged in to edit an application."
@ -1042,7 +1042,7 @@ msgid "No such application."
msgstr "لا تطبيق كهذا." msgstr "لا تطبيق كهذا."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -1072,7 +1072,7 @@ msgstr "مسار المصدر ليس صحيحا."
#: actions/editapplication.php:200 actions/newapplication.php:185 #: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Organization is required." msgid "Organization is required."
msgstr "" msgstr "المنظمة مطلوبة."
#: actions/editapplication.php:203 actions/newapplication.php:188 #: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is too long (max 255 chars)." msgid "Organization is too long (max 255 chars)."
@ -1080,7 +1080,7 @@ msgstr "المنظمة طويلة جدا (الأقصى 255 حرفا)."
#: actions/editapplication.php:206 actions/newapplication.php:191 #: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization homepage is required." msgid "Organization homepage is required."
msgstr "" msgstr "صفحة المنظمة الرئيسية مطلوبة."
#: actions/editapplication.php:215 actions/newapplication.php:203 #: actions/editapplication.php:215 actions/newapplication.php:203
msgid "Callback is too long." msgid "Callback is too long."
@ -1289,7 +1289,7 @@ msgstr "أزيل هذا العنوان."
#: actions/emailsettings.php:446 actions/smssettings.php:518 #: actions/emailsettings.php:446 actions/smssettings.php:518
msgid "No incoming email address." msgid "No incoming email address."
msgstr "" msgstr "لا عنوان بريد إلكتروني وارد."
#: actions/emailsettings.php:456 actions/emailsettings.php:478 #: actions/emailsettings.php:456 actions/emailsettings.php:478
#: actions/smssettings.php:528 actions/smssettings.php:552 #: actions/smssettings.php:528 actions/smssettings.php:552
@ -1395,7 +1395,7 @@ msgstr "المستخدم الذي تستمع إليه غير موجود."
#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
msgid "You can use the local subscription!" msgid "You can use the local subscription!"
msgstr "" msgstr "تستطيع استخدام الاشتراك المحلي!"
#: actions/finishremotesubscribe.php:99 #: actions/finishremotesubscribe.php:99
msgid "That user has blocked you from subscribing." msgid "That user has blocked you from subscribing."
@ -1838,7 +1838,7 @@ msgstr ""
#: actions/joingroup.php:60 #: actions/joingroup.php:60
msgid "You must be logged in to join a group." msgid "You must be logged in to join a group."
msgstr "" msgstr "يجب أن تلج لتنضم إلى مجموعة."
#: actions/joingroup.php:131 #: actions/joingroup.php:131
#, php-format #, php-format
@ -1847,7 +1847,7 @@ msgstr "%1$s انضم للمجموعة %2$s"
#: actions/leavegroup.php:60 #: actions/leavegroup.php:60
msgid "You must be logged in to leave a group." msgid "You must be logged in to leave a group."
msgstr "" msgstr "يجب أن تلج لتغادر مجموعة."
#: actions/leavegroup.php:90 lib/command.php:265 #: actions/leavegroup.php:90 lib/command.php:265
msgid "You are not a member of that group." msgid "You are not a member of that group."
@ -1929,7 +1929,7 @@ msgstr "لا حالة حالية"
#: actions/newapplication.php:52 #: actions/newapplication.php:52
msgid "New application" msgid "New application"
msgstr "" msgstr "تطبيق جديد"
#: actions/newapplication.php:64 #: actions/newapplication.php:64
msgid "You must be logged in to register an application." msgid "You must be logged in to register an application."
@ -1961,7 +1961,7 @@ msgstr "رسالة جديدة"
#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358 #: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
msgid "You can't send a message to this user." msgid "You can't send a message to this user."
msgstr "" msgstr "لا يمكنك إرسال رسائل إلى هذا المستخدم."
#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342 #: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
#: lib/command.php:475 #: lib/command.php:475
@ -2004,6 +2004,8 @@ msgid ""
"Search for notices on %%site.name%% by their contents. Separate search terms " "Search for notices on %%site.name%% by their contents. Separate search terms "
"by spaces; they must be 3 characters or more." "by spaces; they must be 3 characters or more."
msgstr "" msgstr ""
"ابحث عن إشعارات على %%site.name%% عبر محتوياتها. افصل عبارات البحث بمسافات؛ "
"ويجب أن تتكون هذه العبارات من 3 أحرف أو أكثر."
#: actions/noticesearch.php:78 #: actions/noticesearch.php:78
msgid "Text search" msgid "Text search"
@ -2078,7 +2080,7 @@ msgstr ""
#: actions/oauthconnectionssettings.php:170 #: actions/oauthconnectionssettings.php:170
msgid "You are not a user of that application." msgid "You are not a user of that application."
msgstr "أنت لست مستخدما لهذا التطبيق." msgstr "لست مستخدما لهذا التطبيق."
#: actions/oauthconnectionssettings.php:180 #: actions/oauthconnectionssettings.php:180
msgid "Unable to revoke access for app: " msgid "Unable to revoke access for app: "
@ -2470,7 +2472,7 @@ msgstr ""
#: actions/profilesettings.php:138 #: actions/profilesettings.php:138
msgid "Share my current location when posting notices" msgid "Share my current location when posting notices"
msgstr "" msgstr "شارك مكاني الحالي عند إرسال إشعارات"
#: actions/profilesettings.php:145 actions/tagother.php:149 #: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106 #: actions/tagother.php:209 lib/subscriptionlist.php:106
@ -2919,7 +2921,7 @@ msgstr ""
#: actions/repeat.php:57 #: actions/repeat.php:57
msgid "Only logged-in users can repeat notices." msgid "Only logged-in users can repeat notices."
msgstr "" msgstr "يستطيع المستخدمون الوالجون وحدهم تكرار الإشعارات."
#: actions/repeat.php:64 actions/repeat.php:71 #: actions/repeat.php:64 actions/repeat.php:71
msgid "No notice specified." msgid "No notice specified."
@ -3006,7 +3008,7 @@ msgstr ""
#: actions/showapplication.php:160 lib/applicationeditform.php:182 #: actions/showapplication.php:160 lib/applicationeditform.php:182
msgid "Icon" msgid "Icon"
msgstr "" msgstr "أيقونة"
#: actions/showapplication.php:170 actions/version.php:195 #: actions/showapplication.php:170 actions/version.php:195
#: lib/applicationeditform.php:197 #: lib/applicationeditform.php:197
@ -3296,7 +3298,7 @@ msgstr ""
#: actions/showstream.php:313 #: actions/showstream.php:313
#, php-format #, php-format
msgid "Repeat of %s" msgid "Repeat of %s"
msgstr "تكرارات %s" msgstr "تكرار ل%s"
#: actions/silence.php:65 actions/unsilence.php:65 #: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site." msgid "You cannot silence users on this site."
@ -3971,7 +3973,7 @@ msgstr "استمتع بالنقانق!"
#: actions/usergroups.php:130 #: actions/usergroups.php:130
msgid "Search for more groups" msgid "Search for more groups"
msgstr "" msgstr "ابحث عن المزيد من المجموعات"
#: actions/usergroups.php:153 #: actions/usergroups.php:153
#, php-format #, php-format
@ -4028,7 +4030,7 @@ msgstr ""
#: actions/version.php:189 #: actions/version.php:189
msgid "Plugins" msgid "Plugins"
msgstr "" msgstr "ملحقات"
#: actions/version.php:196 lib/action.php:741 #: actions/version.php:196 lib/action.php:741
msgid "Version" msgid "Version"
@ -4116,12 +4118,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "مشكلة أثناء حفظ الإشعار." msgstr "مشكلة أثناء حفظ الإشعار."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "" msgstr ""
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "آر تي @%1$s %2$s" msgstr "آر تي @%1$s %2$s"
@ -4291,7 +4293,7 @@ msgstr ""
#: lib/action.php:773 #: lib/action.php:773
msgid "StatusNet software license" msgid "StatusNet software license"
msgstr "" msgstr "رخصة برنامج StatusNet"
#: lib/action.php:776 #: lib/action.php:776
#, php-format #, php-format
@ -4318,27 +4320,41 @@ msgstr ""
"المتوفر تحت [رخصة غنو أفيرو العمومية](http://www.fsf.org/licensing/licenses/" "المتوفر تحت [رخصة غنو أفيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)." "agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "رخصة محتوى الموقع" msgstr "رخصة محتوى الموقع"
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "الرخصة." msgstr "الرخصة."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "بعد" msgstr "بعد"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "قبل" msgstr "قبل"
@ -4898,7 +4914,7 @@ msgstr "أضف أو عدّل شعار %s"
#: lib/groupnav.php:120 #: lib/groupnav.php:120
#, php-format #, php-format
msgid "Add or edit %s design" msgid "Add or edit %s design"
msgstr "" msgstr "أضف أو عدل تصميم %s"
#: lib/groupsbymemberssection.php:71 #: lib/groupsbymemberssection.php:71
msgid "Groups with most members" msgid "Groups with most members"
@ -4911,7 +4927,7 @@ msgstr "المجموعات الأكثر مرسلات"
#: lib/grouptagcloudsection.php:56 #: lib/grouptagcloudsection.php:56
#, php-format #, php-format
msgid "Tags in %s group's notices" msgid "Tags in %s group's notices"
msgstr "" msgstr "وسوم في إشعارات المجموعة %s"
#: lib/htmloutputter.php:103 #: lib/htmloutputter.php:103
msgid "This page is not available in a media type you accept" msgid "This page is not available in a media type you accept"
@ -5004,7 +5020,7 @@ msgstr ""
#: lib/mail.php:236 #: lib/mail.php:236
#, php-format #, php-format
msgid "%1$s is now listening to your notices on %2$s." msgid "%1$s is now listening to your notices on %2$s."
msgstr "" msgstr "%1$s يستمع الآن إلى إشعاراتك على %2$s."
#: lib/mail.php:241 #: lib/mail.php:241
#, php-format #, php-format
@ -5020,6 +5036,16 @@ msgid ""
"----\n" "----\n"
"Change your email address or notification options at %8$s\n" "Change your email address or notification options at %8$s\n"
msgstr "" msgstr ""
"%1$s يستمع الآن إلى إشعاراتك على %2$s.\n"
"\n"
"%3$s\n"
"\n"
"%4$s%5$s%6$s\n"
"بوفاء،\n"
"%7$s.\n"
"\n"
"----\n"
"غيّر خيارات البريد الإلكتروني والإشعار في %8$s\n"
#: lib/mail.php:258 #: lib/mail.php:258
#, php-format #, php-format
@ -5386,7 +5412,7 @@ msgstr "رسائلك المُرسلة"
#: lib/personaltagcloudsection.php:56 #: lib/personaltagcloudsection.php:56
#, php-format #, php-format
msgid "Tags in %s's notices" msgid "Tags in %s's notices"
msgstr "" msgstr "وسوم في إشعارات %s"
#: lib/plugin.php:114 #: lib/plugin.php:114
msgid "Unknown" msgid "Unknown"
@ -5450,11 +5476,11 @@ msgstr "مشهورة"
#: lib/repeatform.php:107 #: lib/repeatform.php:107
msgid "Repeat this notice?" msgid "Repeat this notice?"
msgstr "كرر هذا الإشعار؟" msgstr "أأكرّر هذا الإشعار؟ّ"
#: lib/repeatform.php:132 #: lib/repeatform.php:132
msgid "Repeat this notice" msgid "Repeat this notice"
msgstr "كرر هذا الإشعار" msgstr "كرّر هذا الإشعار"
#: lib/sandboxform.php:67 #: lib/sandboxform.php:67
msgid "Sandbox" msgid "Sandbox"

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:51:30+0000\n" "PO-Revision-Date: 2010-01-21 22:37:03+0000\n"
"Language-Team: Egyptian Spoken Arabic\n" "Language-Team: Egyptian Spoken Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: arz\n" "X-Language-Code: arz\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -127,7 +127,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -372,7 +372,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "لم توجد المجموعة!" msgstr "لم توجد المجموعة!"
@ -1042,7 +1042,7 @@ msgid "No such application."
msgstr "لا تطبيق كهذا." msgstr "لا تطبيق كهذا."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4116,12 +4116,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "مشكله أثناء حفظ الإشعار." msgstr "مشكله أثناء حفظ الإشعار."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "" msgstr ""
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "آر تى @%1$s %2$s" msgstr "آر تى @%1$s %2$s"
@ -4318,27 +4318,41 @@ msgstr ""
"المتوفر تحت [رخصه غنو أفيرو العمومية](http://www.fsf.org/licensing/licenses/" "المتوفر تحت [رخصه غنو أفيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)." "agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "رخصه محتوى الموقع" msgstr "رخصه محتوى الموقع"
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "الرخصه." msgstr "الرخصه."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "بعد" msgstr "بعد"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "قبل" msgstr "قبل"

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:04+0000\n" "PO-Revision-Date: 2010-01-21 22:37:06+0000\n"
"Language-Team: Bulgarian\n" "Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n" "X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -126,7 +126,7 @@ msgstr "Бележки от %1$s и приятели в %2$s."
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -381,7 +381,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Групата не е открита." msgstr "Групата не е открита."
@ -1068,7 +1068,7 @@ msgid "No such application."
msgstr "Няма такава бележка." msgstr "Няма такава бележка."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Имаше проблем със сесията ви в сайта." msgstr "Имаше проблем със сесията ви в сайта."
@ -4323,12 +4323,12 @@ msgstr "Забранено ви е да публикувате бележки в
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Проблем при записване на бележката." msgstr "Проблем при записване на бележката."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Грешка в базата от данни — отговор при вмъкването: %s" msgstr "Грешка в базата от данни — отговор при вмъкването: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4531,27 +4531,41 @@ msgstr ""
"достъпна под [GNU Affero General Public License](http://www.fsf.org/" "достъпна под [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)." "licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Лиценз на съдържанието" msgstr "Лиценз на съдържанието"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Всички " msgstr "Всички "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "лиценз." msgstr "лиценз."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Страниране" msgstr "Страниране"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "След" msgstr "След"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Преди" msgstr "Преди"

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:11+0000\n" "PO-Revision-Date: 2010-01-21 22:37:10+0000\n"
"Language-Team: Catalan\n" "Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n" "X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -128,7 +128,7 @@ msgstr "Actualitzacions de %1$s i amics a %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -389,7 +389,7 @@ msgstr "L'àlies no pot ser el mateix que el sobrenom."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "No s'ha trobat el grup!" msgstr "No s'ha trobat el grup!"
@ -1081,7 +1081,7 @@ msgid "No such application."
msgstr "No existeix aquest avís." msgstr "No existeix aquest avís."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Ha ocorregut algun problema amb la teva sessió." msgstr "Ha ocorregut algun problema amb la teva sessió."
@ -4377,12 +4377,12 @@ msgstr "Ha estat bandejat de publicar notificacions en aquest lloc."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Problema en guardar l'avís." msgstr "Problema en guardar l'avís."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Error de BD en inserir resposta: %s" msgstr "Error de BD en inserir resposta: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4581,27 +4581,41 @@ msgstr ""
"%s, disponible sota la [GNU Affero General Public License](http://www.fsf." "%s, disponible sota la [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Llicència de contingut del lloc" msgstr "Llicència de contingut del lloc"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Tot " msgstr "Tot "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "llicència." msgstr "llicència."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Paginació" msgstr "Paginació"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Posteriors" msgstr "Posteriors"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Anteriors" msgstr "Anteriors"

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:21+0000\n" "PO-Revision-Date: 2010-01-21 22:37:13+0000\n"
"Language-Team: Czech\n" "Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n" "X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -128,7 +128,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -383,7 +383,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "Žádný požadavek nebyl nalezen!" msgstr "Žádný požadavek nebyl nalezen!"
@ -1087,7 +1087,7 @@ msgid "No such application."
msgstr "Žádné takové oznámení." msgstr "Žádné takové oznámení."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4319,12 +4319,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Problém při ukládání sdělení" msgstr "Problém při ukládání sdělení"
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Chyba v DB při vkládání odpovědi: %s" msgstr "Chyba v DB při vkládání odpovědi: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4531,29 +4531,43 @@ msgstr ""
"dostupná pod [GNU Affero General Public License](http://www.fsf.org/" "dostupná pod [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)." "licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "Nové sdělení" msgstr "Nové sdělení"
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
#, fuzzy #, fuzzy
msgid "After" msgid "After"
msgstr "« Novější" msgstr "« Novější"
#: lib/action.php:1119 #: lib/action.php:1141
#, fuzzy #, fuzzy
msgid "Before" msgid "Before"
msgstr "Starší »" msgstr "Starší »"

View File

@ -12,12 +12,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:32+0000\n" "PO-Revision-Date: 2010-01-21 22:37:16+0000\n"
"Language-Team: German\n" "Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n" "X-Language-Code: de\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -139,7 +139,7 @@ msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -390,7 +390,7 @@ msgstr "Alias kann nicht das gleiche wie der Spitznamen sein."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Gruppe nicht gefunden!" msgstr "Gruppe nicht gefunden!"
@ -1077,7 +1077,7 @@ msgid "No such application."
msgstr "Unbekannte Nachricht." msgstr "Unbekannte Nachricht."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Es gab ein Problem mit deinem Sessiontoken." msgstr "Es gab ein Problem mit deinem Sessiontoken."
@ -4396,12 +4396,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Problem bei Speichern der Nachricht." msgstr "Problem bei Speichern der Nachricht."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Datenbankfehler beim Einfügen der Antwort: %s" msgstr "Datenbankfehler beim Einfügen der Antwort: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4602,28 +4602,42 @@ msgstr ""
"(Version %s) betrieben, die unter der [GNU Affero General Public License]" "(Version %s) betrieben, die unter der [GNU Affero General Public License]"
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html) erhältlich ist." "(http://www.fsf.org/licensing/licenses/agpl-3.0.html) erhältlich ist."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "StatusNet-Software-Lizenz" msgstr "StatusNet-Software-Lizenz"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
#, fuzzy #, fuzzy
msgid "All " msgid "All "
msgstr "Alle " msgstr "Alle "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "Lizenz." msgstr "Lizenz."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Seitenerstellung" msgstr "Seitenerstellung"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Später" msgstr "Später"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Vorher" msgstr "Vorher"

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:35+0000\n" "PO-Revision-Date: 2010-01-21 22:37:20+0000\n"
"Language-Team: Greek\n" "Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n" "X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -126,7 +126,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -380,7 +380,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Ομάδα δεν βρέθηκε!" msgstr "Ομάδα δεν βρέθηκε!"
@ -1067,7 +1067,7 @@ msgid "No such application."
msgstr "Δεν υπάρχει τέτοιο σελίδα." msgstr "Δεν υπάρχει τέτοιο σελίδα."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4247,12 +4247,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "" msgstr ""
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Σφάλμα βάσης δεδομένων κατά την εισαγωγή απάντησης: %s" msgstr "Σφάλμα βάσης δεδομένων κατά την εισαγωγή απάντησης: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4449,27 +4449,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
msgstr "" msgstr ""
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "" msgstr ""
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "" msgstr ""
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "" msgstr ""

View File

@ -10,12 +10,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:41+0000\n" "PO-Revision-Date: 2010-01-21 22:37:23+0000\n"
"Language-Team: British English\n" "Language-Team: British English\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n" "X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -134,7 +134,7 @@ msgstr "Updates from %1$s and friends on %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -388,7 +388,7 @@ msgstr "Alias can't be the same as nickname."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Group not found!" msgstr "Group not found!"
@ -1078,7 +1078,7 @@ msgid "No such application."
msgstr "No such notice." msgstr "No such notice."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "There was a problem with your session token." msgstr "There was a problem with your session token."
@ -4377,12 +4377,12 @@ msgstr "You are banned from posting notices on this site."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Problem saving notice." msgstr "Problem saving notice."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "DB error inserting reply: %s" msgstr "DB error inserting reply: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4581,27 +4581,41 @@ msgstr ""
"s, available under the [GNU Affero General Public Licence](http://www.fsf." "s, available under the [GNU Affero General Public Licence](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Site content license" msgstr "Site content license"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "All " msgstr "All "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "licence." msgstr "licence."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Pagination" msgstr "Pagination"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "After" msgstr "After"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Before" msgstr "Before"

View File

@ -12,12 +12,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:44+0000\n" "PO-Revision-Date: 2010-01-21 22:37:27+0000\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n" "X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -129,7 +129,7 @@ msgstr "¡Actualizaciones de %1$s y amigos en %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -383,7 +383,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "¡No se encontró el método de la API!" msgstr "¡No se encontró el método de la API!"
@ -1082,7 +1082,7 @@ msgid "No such application."
msgstr "No existe ese aviso." msgstr "No existe ese aviso."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Hubo problemas con tu clave de sesión." msgstr "Hubo problemas con tu clave de sesión."
@ -4426,12 +4426,12 @@ msgstr "Tienes prohibido publicar avisos en este sitio."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Hubo un problema al guardar el aviso." msgstr "Hubo un problema al guardar el aviso."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Error de BD al insertar respuesta: %s" msgstr "Error de BD al insertar respuesta: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4630,27 +4630,41 @@ msgstr ""
"disponible bajo la [GNU Affero General Public License](http://www.fsf.org/" "disponible bajo la [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)." "licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Licencia de contenido del sitio" msgstr "Licencia de contenido del sitio"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Todo" msgstr "Todo"
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "Licencia." msgstr "Licencia."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Paginación" msgstr "Paginación"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Después" msgstr "Después"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Antes" msgstr "Antes"

View File

@ -10,8 +10,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:52+0000\n" "PO-Revision-Date: 2010-01-21 22:37:33+0000\n"
"Last-Translator: Ahmad Sufi Mahmudi\n" "Last-Translator: Ahmad Sufi Mahmudi\n"
"Language-Team: Persian\n" "Language-Team: Persian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -20,7 +20,7 @@ msgstr ""
"X-Language-Code: fa\n" "X-Language-Code: fa\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
#: actions/all.php:63 actions/public.php:97 actions/replies.php:92 #: actions/all.php:63 actions/public.php:97 actions/replies.php:92
@ -135,7 +135,7 @@ msgstr "به روز رسانی از %1$ و دوستان در %2$"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -384,7 +384,7 @@ msgstr "نام و نام مستعار شما نمی تواند یکی باشد .
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "گروه یافت نشد!" msgstr "گروه یافت نشد!"
@ -1072,7 +1072,7 @@ msgid "No such application."
msgstr "چنین پیامی وجود ندارد." msgstr "چنین پیامی وجود ندارد."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4239,12 +4239,12 @@ msgstr "شما از فرستادن پست در این سایت مردود شدی
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "مشکل در ذخیره کردن آگهی." msgstr "مشکل در ذخیره کردن آگهی."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "" msgstr ""
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4436,27 +4436,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
msgstr "" msgstr ""
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "مجوز محتویات سایت" msgstr "مجوز محتویات سایت"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "همه " msgstr "همه "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "مجوز." msgstr "مجوز."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "صفحه بندى" msgstr "صفحه بندى"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "بعد از" msgstr "بعد از"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "قبل از" msgstr "قبل از"

View File

@ -10,12 +10,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:48+0000\n" "PO-Revision-Date: 2010-01-21 22:37:30+0000\n"
"Language-Team: Finnish\n" "Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n" "X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -133,7 +133,7 @@ msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -392,7 +392,7 @@ msgstr "Alias ei voi olla sama kuin ryhmätunnus."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Ryhmää ei löytynyt!" msgstr "Ryhmää ei löytynyt!"
@ -1090,7 +1090,7 @@ msgid "No such application."
msgstr "Päivitystä ei ole." msgstr "Päivitystä ei ole."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Istuntoavaimesi kanssa oli ongelma." msgstr "Istuntoavaimesi kanssa oli ongelma."
@ -4415,12 +4415,12 @@ msgstr "Päivityksesi tähän palveluun on estetty."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Ongelma päivityksen tallentamisessa." msgstr "Ongelma päivityksen tallentamisessa."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Tietokantavirhe tallennettaessa vastausta: %s" msgstr "Tietokantavirhe tallennettaessa vastausta: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4621,28 +4621,42 @@ msgstr ""
"versio %s, saatavilla lisenssillä [GNU Affero General Public License](http://" "versio %s, saatavilla lisenssillä [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)." "www.fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "StatusNet-ohjelmiston lisenssi" msgstr "StatusNet-ohjelmiston lisenssi"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Kaikki " msgstr "Kaikki "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "lisenssi." msgstr "lisenssi."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Sivutus" msgstr "Sivutus"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Myöhemmin" msgstr "Myöhemmin"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Aiemmin" msgstr "Aiemmin"

View File

@ -13,12 +13,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:52:07+0000\n" "PO-Revision-Date: 2010-01-21 22:37:36+0000\n"
"Language-Team: French\n" "Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n" "X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -139,7 +139,7 @@ msgstr "Statuts de %1$s et ses amis dans %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -392,7 +392,7 @@ msgstr "Lalias ne peut pas être le même que le pseudo."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Groupe non trouvé !" msgstr "Groupe non trouvé !"
@ -1084,7 +1084,7 @@ msgid "No such application."
msgstr "Avis non trouvé." msgstr "Avis non trouvé."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Un problème est survenu avec votre jeton de session." msgstr "Un problème est survenu avec votre jeton de session."
@ -4441,12 +4441,12 @@ msgstr "Il vous est interdit de poster des avis sur ce site."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Problème lors de lenregistrement de lavis." msgstr "Problème lors de lenregistrement de lavis."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Erreur de base de donnée en insérant la réponse :%s" msgstr "Erreur de base de donnée en insérant la réponse :%s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4643,27 +4643,41 @@ msgstr ""
"version %s, disponible sous la licence [GNU Affero General Public License] " "version %s, disponible sous la licence [GNU Affero General Public License] "
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)." "(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Licence du contenu du site" msgstr "Licence du contenu du site"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Tous " msgstr "Tous "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "licence." msgstr "licence."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Pagination" msgstr "Pagination"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Après" msgstr "Après"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Avant" msgstr "Avant"

View File

@ -8,12 +8,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:16:59+0000\n" "PO-Revision-Date: 2010-01-21 22:37:39+0000\n"
"Language-Team: Irish\n" "Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ga\n" "X-Language-Code: ga\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -128,7 +128,7 @@ msgstr "Actualizacións dende %1$s e amigos en %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -389,7 +389,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "Método da API non atopado" msgstr "Método da API non atopado"
@ -1107,7 +1107,7 @@ msgid "No such application."
msgstr "Ningún chío." msgstr "Ningún chío."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
#, fuzzy #, fuzzy
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..." msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..."
@ -4473,12 +4473,12 @@ msgstr "Tes restrinxido o envio de chíos neste sitio."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Aconteceu un erro ó gardar o chío." msgstr "Aconteceu un erro ó gardar o chío."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Erro ó inserir a contestación na BD: %s" msgstr "Erro ó inserir a contestación na BD: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4689,30 +4689,44 @@ msgstr ""
"%s, dispoñible baixo licenza [GNU Affero General Public License](http://www." "%s, dispoñible baixo licenza [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)." "fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "Atopar no contido dos chíos" msgstr "Atopar no contido dos chíos"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
#, fuzzy #, fuzzy
msgid "All " msgid "All "
msgstr "Todos" msgstr "Todos"
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
#, fuzzy #, fuzzy
msgid "After" msgid "After"
msgstr "« Despois" msgstr "« Despois"
#: lib/action.php:1119 #: lib/action.php:1141
#, fuzzy #, fuzzy
msgid "Before" msgid "Before"
msgstr "Antes »" msgstr "Antes »"

View File

@ -7,12 +7,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:03+0000\n" "PO-Revision-Date: 2010-01-21 22:37:42+0000\n"
"Language-Team: Hebrew\n" "Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n" "X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -126,7 +126,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -381,7 +381,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "לא נמצא" msgstr "לא נמצא"
@ -1093,7 +1093,7 @@ msgid "No such application."
msgstr "אין הודעה כזו." msgstr "אין הודעה כזו."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4319,12 +4319,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "בעיה בשמירת ההודעה." msgstr "בעיה בשמירת ההודעה."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "שגיאת מסד נתונים בהכנסת התגובה: %s" msgstr "שגיאת מסד נתונים בהכנסת התגובה: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4532,29 +4532,43 @@ msgstr ""
"s, המופצת תחת רשיון [GNU Affero General Public License](http://www.fsf.org/" "s, המופצת תחת רשיון [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)" "licensing/licenses/agpl-3.0.html)"
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "הודעה חדשה" msgstr "הודעה חדשה"
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
#, fuzzy #, fuzzy
msgid "After" msgid "After"
msgstr "<< אחרי" msgstr "<< אחרי"
#: lib/action.php:1119 #: lib/action.php:1141
#, fuzzy #, fuzzy
msgid "Before" msgid "Before"
msgstr "לפני >>" msgstr "לפני >>"

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:52:17+0000\n" "PO-Revision-Date: 2010-01-21 22:37:44+0000\n"
"Language-Team: Dutch\n" "Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: hsb\n" "X-Language-Code: hsb\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -127,7 +127,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -372,7 +372,7 @@ msgstr "Alias njemóže samsny kaž přimjeno być."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Skupina njenamakana!" msgstr "Skupina njenamakana!"
@ -1044,7 +1044,7 @@ msgid "No such application."
msgstr "Aplikacija njeeksistuje." msgstr "Aplikacija njeeksistuje."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4113,12 +4113,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "" msgstr ""
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "" msgstr ""
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4310,27 +4310,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
msgstr "" msgstr ""
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "" msgstr ""
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "" msgstr ""
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "" msgstr ""

View File

@ -8,12 +8,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:11+0000\n" "PO-Revision-Date: 2010-01-21 22:37:47+0000\n"
"Language-Team: Interlingua\n" "Language-Team: Interlingua\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n" "X-Language-Code: ia\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -133,7 +133,7 @@ msgstr "Actualisationes de %1$s e su amicos in %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -385,7 +385,7 @@ msgstr "Le alias non pote esser identic al pseudonymo."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Gruppo non trovate!" msgstr "Gruppo non trovate!"
@ -1076,7 +1076,7 @@ msgid "No such application."
msgstr "Nota non trovate." msgstr "Nota non trovate."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4366,12 +4366,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "" msgstr ""
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "" msgstr ""
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4563,27 +4563,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
msgstr "" msgstr ""
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "" msgstr ""
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "" msgstr ""
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "" msgstr ""

View File

@ -8,12 +8,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:14+0000\n" "PO-Revision-Date: 2010-01-21 22:37:50+0000\n"
"Language-Team: Icelandic\n" "Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: is\n" "X-Language-Code: is\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -128,7 +128,7 @@ msgstr "Færslur frá %1$s og vinum á %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -383,7 +383,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "Aðferð í forritsskilum fannst ekki!" msgstr "Aðferð í forritsskilum fannst ekki!"
@ -1082,7 +1082,7 @@ msgid "No such application."
msgstr "Ekkert svoleiðis babl." msgstr "Ekkert svoleiðis babl."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Það komu upp vandamál varðandi setutókann þinn." msgstr "Það komu upp vandamál varðandi setutókann þinn."
@ -4367,12 +4367,12 @@ msgstr "Það hefur verið lagt bann við babli frá þér á þessari síðu."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Vandamál komu upp við að vista babl." msgstr "Vandamál komu upp við að vista babl."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Gagnagrunnsvilla við innsetningu svars: %s" msgstr "Gagnagrunnsvilla við innsetningu svars: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4573,28 +4573,42 @@ msgstr ""
"sem er gefinn út undir [GNU Affero almenningsleyfinu](http://www.fsf.org/" "sem er gefinn út undir [GNU Affero almenningsleyfinu](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)." "licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "Hugbúnaðarleyfi StatusNet" msgstr "Hugbúnaðarleyfi StatusNet"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Allt " msgstr "Allt "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "leyfi." msgstr "leyfi."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Uppröðun" msgstr "Uppröðun"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Eftir" msgstr "Eftir"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Áður" msgstr "Áður"

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:18+0000\n" "PO-Revision-Date: 2010-01-21 22:37:54+0000\n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n" "X-Language-Code: it\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -135,7 +135,7 @@ msgstr "Messaggi da %1$s e amici su %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -386,7 +386,7 @@ msgstr "L'alias non può essere lo stesso del soprannome."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Gruppo non trovato!" msgstr "Gruppo non trovato!"
@ -1077,7 +1077,7 @@ msgid "No such application."
msgstr "Nessun messaggio." msgstr "Nessun messaggio."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Si è verificato un problema con il tuo token di sessione." msgstr "Si è verificato un problema con il tuo token di sessione."
@ -4406,12 +4406,12 @@ msgstr "Ti è proibito inviare messaggi su questo sito."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Problema nel salvare il messaggio." msgstr "Problema nel salvare il messaggio."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Errore del DB nell'inserire la risposta: %s" msgstr "Errore del DB nell'inserire la risposta: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4608,27 +4608,41 @@ msgstr ""
"s, disponibile nei termini della licenza [GNU Affero General Public License]" "s, disponibile nei termini della licenza [GNU Affero General Public License]"
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)." "(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Licenza del contenuto del sito" msgstr "Licenza del contenuto del sito"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Tutti " msgstr "Tutti "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "licenza." msgstr "licenza."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Paginazione" msgstr "Paginazione"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Successivi" msgstr "Successivi"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Precedenti" msgstr "Precedenti"

View File

@ -11,12 +11,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:22+0000\n" "PO-Revision-Date: 2010-01-21 22:37:57+0000\n"
"Language-Team: Japanese\n" "Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ja\n" "X-Language-Code: ja\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -54,9 +54,9 @@ msgid "No such user."
msgstr "そのような利用者はいません。" msgstr "そのような利用者はいません。"
#: actions/all.php:84 #: actions/all.php:84
#, fuzzy, php-format #, php-format
msgid "%1$s and friends, page %2$d" msgid "%1$s and friends, page %2$d"
msgstr "%1$s ブロックされたプロファイル、ページ %2$d" msgstr "%1$s と友人、ページ %2$d"
#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115 #: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115 #: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
@ -134,7 +134,7 @@ msgstr "%2$s に %1$s と友人からの更新があります!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -386,7 +386,7 @@ msgstr "別名はニックネームと同じではいけません。"
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "グループが見つかりません!" msgstr "グループが見つかりません!"
@ -876,7 +876,7 @@ msgid ""
"You are about to permanently delete a notice. Once this is done, it cannot " "You are about to permanently delete a notice. Once this is done, it cannot "
"be undone." "be undone."
msgstr "" msgstr ""
"あなたは永久につぶやきを削除しようとしています。 これが完了するとそれを元に戻" "あなたはつぶやきを永久に削除しようとしています。 これが完了するとそれを元に戻"
"すことはできません。" "すことはできません。"
#: actions/deletenotice.php:109 actions/deletenotice.php:141 #: actions/deletenotice.php:109 actions/deletenotice.php:141
@ -1068,7 +1068,7 @@ msgid "No such application."
msgstr "そのようなアプリケーションはありません。" msgstr "そのようなアプリケーションはありません。"
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "あなたのセッショントークンに関する問題がありました。" msgstr "あなたのセッショントークンに関する問題がありました。"
@ -1184,7 +1184,7 @@ msgid ""
"Awaiting confirmation on this address. Check your inbox (and spam box!) for " "Awaiting confirmation on this address. Check your inbox (and spam box!) for "
"a message with further instructions." "a message with further instructions."
msgstr "" msgstr ""
"このアドレスは認待ちです。受信ボックス(とスパムボックス)に追加の指示が書" "このアドレスは認待ちです。受信ボックス(とスパムボックス)に追加の指示が書"
"かれたメッセージが届いていないか確認してください。" "かれたメッセージが届いていないか確認してください。"
#: actions/emailsettings.php:117 actions/imsettings.php:120 #: actions/emailsettings.php:117 actions/imsettings.php:120
@ -1234,17 +1234,17 @@ msgstr "メールで新規フォローの通知を私に送ってください。
#: actions/emailsettings.php:163 #: actions/emailsettings.php:163
msgid "Send me email when someone adds my notice as a favorite." msgid "Send me email when someone adds my notice as a favorite."
msgstr "" msgstr ""
"だれかがお気に入りとして私のつぶやきを加えたらメールを私に送ってください。" "だれかがお気に入りとして私のつぶやきを加えたらメールを私に送ってください。"
#: actions/emailsettings.php:169 #: actions/emailsettings.php:169
msgid "Send me email when someone sends me a private message." msgid "Send me email when someone sends me a private message."
msgstr "" msgstr ""
"だれかがプライベート・メッセージを私に送るときにはメールを私に送ってくださ" "だれかがプライベート・メッセージを私に送るときにはメールを私に送ってくださ"
"い。" "い。"
#: actions/emailsettings.php:174 #: actions/emailsettings.php:174
msgid "Send me email when someone sends me an \"@-reply\"." msgid "Send me email when someone sends me an \"@-reply\"."
msgstr "だれかが\"@-返信\"を私を送るときにはメールを私に送ってください、" msgstr "だれかが\"@-返信\"を私を送るときにはメールを私に送ってください、"
#: actions/emailsettings.php:179 #: actions/emailsettings.php:179
msgid "Allow friends to nudge me and send me an email." msgid "Allow friends to nudge me and send me an email."
@ -1287,21 +1287,21 @@ msgstr "このメールアドレスは既に他の人が使っています。"
#: actions/emailsettings.php:353 actions/imsettings.php:317 #: actions/emailsettings.php:353 actions/imsettings.php:317
#: actions/smssettings.php:337 #: actions/smssettings.php:337
msgid "Couldn't insert confirmation code." msgid "Couldn't insert confirmation code."
msgstr "認コードを追加できません" msgstr "認コードを追加できません"
#: actions/emailsettings.php:359 #: actions/emailsettings.php:359
msgid "" msgid ""
"A confirmation code was sent to the email address you added. Check your " "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." "inbox (and spam box!) for the code and instructions on how to use it."
msgstr "" msgstr ""
"確認用コードを入力された電子メールアドレスに送信しました。受信ボックス(とス" "承認コードを入力された電子メールアドレスに送信しました。受信ボックス(とス"
"ムボックス)にコードとそれをどう使うのかという指示が届いていないか確認して" "ムボックス)にコードとそれをどう使うのかという指示が届いていないか確認して"
"ださい。" "ださい。"
#: actions/emailsettings.php:379 actions/imsettings.php:351 #: actions/emailsettings.php:379 actions/imsettings.php:351
#: actions/smssettings.php:370 #: actions/smssettings.php:370
msgid "No pending confirmation to cancel." msgid "No pending confirmation to cancel."
msgstr "認待ちのものはありません。" msgstr "認待ちのものはありません。"
#: actions/emailsettings.php:383 actions/imsettings.php:355 #: actions/emailsettings.php:383 actions/imsettings.php:355
msgid "That is the wrong IM address." msgid "That is the wrong IM address."
@ -1310,7 +1310,7 @@ msgstr "その IM アドレスは不正です。"
#: actions/emailsettings.php:395 actions/imsettings.php:367 #: actions/emailsettings.php:395 actions/imsettings.php:367
#: actions/smssettings.php:386 #: actions/smssettings.php:386
msgid "Confirmation cancelled." msgid "Confirmation cancelled."
msgstr "認作業が中止されました。" msgstr "認作業が中止されました。"
#: actions/emailsettings.php:413 #: actions/emailsettings.php:413
msgid "That is not your email address." msgid "That is not your email address."
@ -1721,7 +1721,7 @@ msgid ""
"Awaiting confirmation on this address. Check your Jabber/GTalk account for a " "Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
"message with further instructions. (Did you add %s to your buddy list?)" "message with further instructions. (Did you add %s to your buddy list?)"
msgstr "" msgstr ""
"このアドレスは認待ちです。Jabber か Gtalk のアカウントで追加の指示が書かれ" "このアドレスは認待ちです。Jabber か Gtalk のアカウントで追加の指示が書かれ"
"たメッセージを確認してください。(%s を友人リストに追加しましたか?)" "たメッセージを確認してください。(%s を友人リストに追加しましたか?)"
#: actions/imsettings.php:124 #: actions/imsettings.php:124
@ -1781,8 +1781,8 @@ msgid ""
"A confirmation code was sent to the IM address you added. You must approve %" "A confirmation code was sent to the IM address you added. You must approve %"
"s for sending messages to you." "s for sending messages to you."
msgstr "" msgstr ""
"確認用コードを入力された IM アドレスに送信しました。あなたにメッセージを送れ" "承認コードを入力された IM アドレスに送信しました。あなたにメッセージを送れ"
"ようにするには%sを承認してください。" "ようにするには%sを承認してください。"
#: actions/imsettings.php:387 #: actions/imsettings.php:387
msgid "That is not your Jabber ID." msgid "That is not your Jabber ID."
@ -3014,7 +3014,7 @@ msgid ""
"(You should receive a message by email momentarily, with instructions on how " "(You should receive a message by email momentarily, with instructions on how "
"to confirm your email address.)" "to confirm your email address.)"
msgstr "" msgstr ""
"(メールアドレスを認する方法を読んで、すぐにメールによるメッセージを受け取る" "(メールアドレスを認する方法を読んで、すぐにメールによるメッセージを受け取る"
"ようにしてください)" "ようにしてください)"
#: actions/remotesubscribe.php:98 #: actions/remotesubscribe.php:98
@ -4358,12 +4358,12 @@ msgstr "あなたはこのサイトでつぶやきを投稿するのが禁止さ
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "つぶやきを保存する際に問題が発生しました。" msgstr "つぶやきを保存する際に問題が発生しました。"
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "返信を追加する際にデータベースエラー : %s" msgstr "返信を追加する際にデータベースエラー : %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4560,27 +4560,41 @@ msgstr ""
"いています。 ライセンス [GNU Affero General Public License](http://www.fsf." "いています。 ライセンス [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)。" "org/licensing/licenses/agpl-3.0.html)。"
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "サイト内容ライセンス" msgstr "サイト内容ライセンス"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "全て " msgstr "全て "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "ライセンス。" msgstr "ライセンス。"
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "ページ化" msgstr "ページ化"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "<<後" msgstr "<<後"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "前>>" msgstr "前>>"
@ -5240,7 +5254,7 @@ msgstr ""
"\n" "\n"
"だれかがこのメールアドレスを %s に入力しました。\n" "だれかがこのメールアドレスを %s に入力しました。\n"
"\n" "\n"
"もしエントリーを確認したいなら、以下のURLを使用してください:\n" "もし登録を承認したいなら、以下のURLを使用してください:\n"
"\n" "\n"
"%s\n" "%s\n"
"\n" "\n"

View File

@ -7,12 +7,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:27+0000\n" "PO-Revision-Date: 2010-01-21 22:38:00+0000\n"
"Language-Team: Korean\n" "Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n" "X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -126,7 +126,7 @@ msgstr "%1$s 및 %2$s에 있는 친구들의 업데이트!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -385,7 +385,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "API 메서드를 찾을 수 없습니다." msgstr "API 메서드를 찾을 수 없습니다."
@ -1095,7 +1095,7 @@ msgid "No such application."
msgstr "그러한 통지는 없습니다." msgstr "그러한 통지는 없습니다."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "당신의 세션토큰관련 문제가 있습니다." msgstr "당신의 세션토큰관련 문제가 있습니다."
@ -4392,12 +4392,12 @@ msgstr "이 사이트에 게시글 포스팅으로부터 당신은 금지되었
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "통지를 저장하는데 문제가 발생했습니다." msgstr "통지를 저장하는데 문제가 발생했습니다."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "답신을 추가 할 때에 데이타베이스 에러 : %s" msgstr "답신을 추가 할 때에 데이타베이스 에러 : %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4598,28 +4598,42 @@ msgstr ""
"을 사용합니다. StatusNet는 [GNU Affero General Public License](http://www." "을 사용합니다. StatusNet는 [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html) 라이선스에 따라 사용할 수 있습니다." "fsf.org/licensing/licenses/agpl-3.0.html) 라이선스에 따라 사용할 수 있습니다."
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "라코니카 소프트웨어 라이선스" msgstr "라코니카 소프트웨어 라이선스"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "모든 것" msgstr "모든 것"
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "라이선스" msgstr "라이선스"
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "페이지수" msgstr "페이지수"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "뒷 페이지" msgstr "뒷 페이지"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "앞 페이지" msgstr "앞 페이지"

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:52:38+0000\n" "PO-Revision-Date: 2010-01-21 22:38:03+0000\n"
"Language-Team: Macedonian\n" "Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n" "X-Language-Code: mk\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -135,7 +135,7 @@ msgstr "Подновувања од %1$s и пријатели на %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -387,7 +387,7 @@ msgstr "Алијасот не може да биде ист како прека
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Групата не е пронајдена!" msgstr "Групата не е пронајдена!"
@ -1073,7 +1073,7 @@ msgid "No such application."
msgstr "Нема таков програм." msgstr "Нема таков програм."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Се појави проблем со Вашиот сесиски жетон." msgstr "Се појави проблем со Вашиот сесиски жетон."
@ -4394,12 +4394,12 @@ msgstr "Забрането Ви е да објавувате забелешки
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Проблем во зачувувањето на белешката." msgstr "Проблем во зачувувањето на белешката."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Одговор од внесот во базата: %s" msgstr "Одговор од внесот во базата: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4596,27 +4596,41 @@ msgstr ""
"верзија %s, достапен пд [GNU Affero General Public License](http://www.fsf." "верзија %s, достапен пд [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Лиценца на содржините на веб-страницата" msgstr "Лиценца на содржините на веб-страницата"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Сите " msgstr "Сите "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "лиценца." msgstr "лиценца."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Прелом на страници" msgstr "Прелом на страници"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "По" msgstr "По"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Пред" msgstr "Пред"

View File

@ -8,12 +8,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:35+0000\n" "PO-Revision-Date: 2010-01-21 22:38:06+0000\n"
"Language-Team: Norwegian (bokmål)\n" "Language-Team: Norwegian (bokmål)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n" "X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -132,7 +132,7 @@ msgstr "Oppdateringer fra %1$s og venner på %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -388,7 +388,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "API-metode ikke funnet!" msgstr "API-metode ikke funnet!"
@ -1087,7 +1087,7 @@ msgid "No such application."
msgstr "Ingen slik side" msgstr "Ingen slik side"
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4295,12 +4295,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "" msgstr ""
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "" msgstr ""
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4499,27 +4499,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
msgstr "" msgstr ""
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "" msgstr ""
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "" msgstr ""
#: lib/action.php:1119 #: lib/action.php:1141
#, fuzzy #, fuzzy
msgid "Before" msgid "Before"
msgstr "Tidligere »" msgstr "Tidligere »"

View File

@ -10,12 +10,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:52:50+0000\n" "PO-Revision-Date: 2010-01-21 22:38:12+0000\n"
"Language-Team: Dutch\n" "Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n" "X-Language-Code: nl\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -136,7 +136,7 @@ msgstr "Updates van %1$s en vrienden op %2$s."
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -393,7 +393,7 @@ msgstr "Een alias kan niet hetzelfde zijn als de gebruikersnaam."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "De groep is niet aangetroffen!" msgstr "De groep is niet aangetroffen!"
@ -1085,7 +1085,7 @@ msgid "No such application."
msgstr "De applicatie bestaat niet." msgstr "De applicatie bestaat niet."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Er is een probleem met uw sessietoken." msgstr "Er is een probleem met uw sessietoken."
@ -4429,13 +4429,13 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Er is een probleem opgetreden bij het opslaan van de mededeling." msgstr "Er is een probleem opgetreden bij het opslaan van de mededeling."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "" msgstr ""
"Er is een databasefout opgetreden bij het invoegen van het antwoord: %s" "Er is een databasefout opgetreden bij het invoegen van het antwoord: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4632,27 +4632,41 @@ msgstr ""
"versie %s, beschikbaar onder de [GNU Affero General Public License](http://" "versie %s, beschikbaar onder de [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)." "www.fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Licentie voor siteinhoud" msgstr "Licentie voor siteinhoud"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Alle " msgstr "Alle "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "licentie." msgstr "licentie."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Paginering" msgstr "Paginering"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Later" msgstr "Later"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Eerder" msgstr "Eerder"

View File

@ -7,12 +7,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:38+0000\n" "PO-Revision-Date: 2010-01-21 22:38:09+0000\n"
"Language-Team: Norwegian Nynorsk\n" "Language-Team: Norwegian Nynorsk\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n" "X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -126,7 +126,7 @@ msgstr "Oppdateringar frå %1$s og vener på %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -383,7 +383,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "Fann ikkje API-metode." msgstr "Fann ikkje API-metode."
@ -1094,7 +1094,7 @@ msgid "No such application."
msgstr "Denne notisen finst ikkje." msgstr "Denne notisen finst ikkje."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Det var eit problem med sesjons billetten din." msgstr "Det var eit problem med sesjons billetten din."
@ -4409,12 +4409,12 @@ msgstr "Du kan ikkje lengre legge inn notisar på denne sida."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Eit problem oppstod ved lagring av notis." msgstr "Eit problem oppstod ved lagring av notis."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Databasefeil, kan ikkje lagra svar: %s" msgstr "Databasefeil, kan ikkje lagra svar: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4615,28 +4615,42 @@ msgstr ""
"%s, tilgjengeleg under [GNU Affero General Public License](http://www.fsf." "%s, tilgjengeleg under [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "StatusNets programvarelisens" msgstr "StatusNets programvarelisens"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Alle" msgstr "Alle"
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "lisens." msgstr "lisens."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Paginering" msgstr "Paginering"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "« Etter" msgstr "« Etter"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Før »" msgstr "Før »"

View File

@ -10,8 +10,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:52:53+0000\n" "PO-Revision-Date: 2010-01-21 22:38:15+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n" "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n" "Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -19,7 +19,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n" "|| n%100>=20) ? 1 : 2);\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pl\n" "X-Language-Code: pl\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -139,7 +139,7 @@ msgstr "Aktualizacje z %1$s i przyjaciół na %2$s."
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -390,7 +390,7 @@ msgstr "Alias nie może być taki sam jak pseudonim."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Nie odnaleziono grupy." msgstr "Nie odnaleziono grupy."
@ -1068,7 +1068,7 @@ msgid "No such application."
msgstr "Nie ma takiej aplikacji." msgstr "Nie ma takiej aplikacji."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Wystąpił problem z tokenem sesji." msgstr "Wystąpił problem z tokenem sesji."
@ -4367,12 +4367,12 @@ msgstr "Zabroniono ci wysyłania wpisów na tej stronie."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Problem podczas zapisywania wpisu." msgstr "Problem podczas zapisywania wpisu."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Błąd bazy danych podczas wprowadzania odpowiedzi: %s" msgstr "Błąd bazy danych podczas wprowadzania odpowiedzi: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4569,27 +4569,41 @@ msgstr ""
"status.net/) w wersji %s, dostępnego na [Powszechnej Licencji Publicznej GNU " "status.net/) w wersji %s, dostępnego na [Powszechnej Licencji Publicznej GNU "
"Affero](http://www.fsf.org/licensing/licenses/agpl-3.0.html)." "Affero](http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Licencja zawartości strony" msgstr "Licencja zawartości strony"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Wszystko " msgstr "Wszystko "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "licencja." msgstr "licencja."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Paginacja" msgstr "Paginacja"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Później" msgstr "Później"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Wcześniej" msgstr "Wcześniej"

View File

@ -9,12 +9,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:49+0000\n" "PO-Revision-Date: 2010-01-21 22:38:17+0000\n"
"Language-Team: Portuguese\n" "Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n" "X-Language-Code: pt\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -133,7 +133,7 @@ msgstr "Actualizações de %1$s e amigos no %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -383,7 +383,7 @@ msgstr "Os sinónimos não podem ser iguais ao nome do utilizador."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Grupo não foi encontrado!" msgstr "Grupo não foi encontrado!"
@ -1071,7 +1071,7 @@ msgid "No such application."
msgstr "Nota não encontrada." msgstr "Nota não encontrada."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Ocorreu um problema com a sua sessão." msgstr "Ocorreu um problema com a sua sessão."
@ -4400,12 +4400,12 @@ msgstr "Está proibido de publicar notas neste site."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Problema na gravação da nota." msgstr "Problema na gravação da nota."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Ocorreu um erro na base de dados ao inserir a resposta: %s" msgstr "Ocorreu um erro na base de dados ao inserir a resposta: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4602,27 +4602,41 @@ msgstr ""
"disponibilizado nos termos da [GNU Affero General Public License](http://www." "disponibilizado nos termos da [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)." "fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Licença de conteúdos do site" msgstr "Licença de conteúdos do site"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Tudo " msgstr "Tudo "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "licença." msgstr "licença."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Paginação" msgstr "Paginação"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Posteriores" msgstr "Posteriores"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Anteriores" msgstr "Anteriores"

View File

@ -10,12 +10,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:53:00+0000\n" "PO-Revision-Date: 2010-01-21 22:38:21+0000\n"
"Language-Team: Brazilian Portuguese\n" "Language-Team: Brazilian Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n" "X-Language-Code: pt-br\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -53,9 +53,9 @@ msgid "No such user."
msgstr "Este usuário não existe." msgstr "Este usuário não existe."
#: actions/all.php:84 #: actions/all.php:84
#, fuzzy, php-format #, php-format
msgid "%1$s and friends, page %2$d" msgid "%1$s and friends, page %2$d"
msgstr "Perfis bloqueados no %1$s, pág. %2$d" msgstr "%1$s e amigos, pág. %2$d"
#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115 #: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115 #: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
@ -136,7 +136,7 @@ msgstr "Atualizações de %1$s e amigos no %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -389,7 +389,7 @@ msgstr "O apelido não pode ser igual à identificação."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "O grupo não foi encontrado!" msgstr "O grupo não foi encontrado!"
@ -1075,7 +1075,7 @@ msgid "No such application."
msgstr "Essa aplicação não existe." msgstr "Essa aplicação não existe."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Ocorreu um problema com o seu token de sessão." msgstr "Ocorreu um problema com o seu token de sessão."
@ -4397,12 +4397,12 @@ msgstr "Você está proibido de publicar mensagens neste site."
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Problema no salvamento da mensagem." msgstr "Problema no salvamento da mensagem."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Erro no banco de dados na inserção da reposta: %s" msgstr "Erro no banco de dados na inserção da reposta: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4599,27 +4599,41 @@ msgstr ""
"versão %s, disponível sob a [GNU Affero General Public License] (http://www." "versão %s, disponível sob a [GNU Affero General Public License] (http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)." "fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Licença do conteúdo do site" msgstr "Licença do conteúdo do site"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Todas " msgstr "Todas "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "licença." msgstr "licença."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Paginação" msgstr "Paginação"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Próximo" msgstr "Próximo"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Anterior" msgstr "Anterior"

View File

@ -2,6 +2,7 @@
# #
# Author@translatewiki.net: Brion # Author@translatewiki.net: Brion
# Author@translatewiki.net: Lockal # Author@translatewiki.net: Lockal
# Author@translatewiki.net: Rubin
# Author@translatewiki.net: Александр Сигачёв # Author@translatewiki.net: Александр Сигачёв
# -- # --
# This file is distributed under the same license as the StatusNet package. # This file is distributed under the same license as the StatusNet package.
@ -10,12 +11,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:17:57+0000\n" "PO-Revision-Date: 2010-01-21 22:38:23+0000\n"
"Language-Team: Russian\n" "Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n" "X-Language-Code: ru\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -135,7 +136,7 @@ msgstr "Обновлено от %1$s и его друзей на %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -389,7 +390,7 @@ msgstr "Алиас не может совпадать с именем."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Группа не найдена!" msgstr "Группа не найдена!"
@ -453,7 +454,6 @@ msgid "There was a problem with your session token. Try again, please."
msgstr "Проблема с Вашей сессией. Попробуйте ещё раз, пожалуйста." msgstr "Проблема с Вашей сессией. Попробуйте ещё раз, пожалуйста."
#: actions/apioauthauthorize.php:146 #: actions/apioauthauthorize.php:146
#, fuzzy
msgid "Invalid nickname / password!" msgid "Invalid nickname / password!"
msgstr "Неверное имя или пароль." msgstr "Неверное имя или пароль."
@ -1075,7 +1075,7 @@ msgid "No such application."
msgstr "Нет такой записи." msgstr "Нет такой записи."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Проблема с Вашей сессией. Попробуйте ещё раз, пожалуйста." msgstr "Проблема с Вашей сессией. Попробуйте ещё раз, пожалуйста."
@ -4406,12 +4406,12 @@ msgstr "Вам запрещено поститься на этом сайте (
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Проблемы с сохранением записи." msgstr "Проблемы с сохранением записи."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Ошибка баз данных при вставке ответа для %s" msgstr "Ошибка баз данных при вставке ответа для %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4609,27 +4609,41 @@ msgstr ""
"лицензией [GNU Affero General Public License](http://www.fsf.org/licensing/" "лицензией [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)." "licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Лицензия содержимого сайта" msgstr "Лицензия содержимого сайта"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "All " msgstr "All "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "license." msgstr "license."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Разбиение на страницы" msgstr "Разбиение на страницы"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Сюда" msgstr "Сюда"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Туда" msgstr "Туда"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-16 17:51+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -123,7 +123,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -368,7 +368,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "" msgstr ""
@ -1038,7 +1038,7 @@ msgid "No such application."
msgstr "" msgstr ""
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4102,12 +4102,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "" msgstr ""
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "" msgstr ""
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4299,27 +4299,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
msgstr "" msgstr ""
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "" msgstr ""
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "" msgstr ""
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "" msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -8,12 +8,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:53:10+0000\n" "PO-Revision-Date: 2010-01-21 22:38:34+0000\n"
"Language-Team: Telugu\n" "Language-Team: Telugu\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: te\n" "X-Language-Code: te\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -125,7 +125,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -377,7 +377,7 @@ msgstr "మారుపేరు పేరుతో సమానంగా ఉం
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "గుంపు దొరకలేదు!" msgstr "గుంపు దొరకలేదు!"
@ -1059,7 +1059,7 @@ msgid "No such application."
msgstr "అటువంటి సందేశమేమీ లేదు." msgstr "అటువంటి సందేశమేమీ లేదు."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4197,12 +4197,12 @@ msgstr "ఈ సైటులో నోటీసులు రాయడం ను
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు." msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "" msgstr ""
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4405,28 +4405,42 @@ msgstr ""
"html) కింద లభ్యమయ్యే [స్టేటస్&zwnj;నెట్](http://status.net/) మైక్రోబ్లాగింగ్ ఉపకరణం సంచిక %s " "html) కింద లభ్యమయ్యే [స్టేటస్&zwnj;నెట్](http://status.net/) మైక్రోబ్లాగింగ్ ఉపకరణం సంచిక %s "
"పై నడుస్తుంది." "పై నడుస్తుంది."
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "కొత్త సందేశం" msgstr "కొత్త సందేశం"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "అన్నీ " msgstr "అన్నీ "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "పేజీకరణ" msgstr "పేజీకరణ"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "తర్వాత" msgstr "తర్వాత"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "ఇంతక్రితం" msgstr "ఇంతక్రితం"

View File

@ -8,12 +8,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:18:07+0000\n" "PO-Revision-Date: 2010-01-21 22:38:37+0000\n"
"Language-Team: Turkish\n" "Language-Team: Turkish\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tr\n" "X-Language-Code: tr\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -127,7 +127,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -385,7 +385,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "İstek bulunamadı!" msgstr "İstek bulunamadı!"
@ -1096,7 +1096,7 @@ msgid "No such application."
msgstr "Böyle bir durum mesajı yok." msgstr "Böyle bir durum mesajı yok."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4327,12 +4327,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Durum mesajını kaydederken hata oluştu." msgstr "Durum mesajını kaydederken hata oluştu."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Cevap eklenirken veritabanı hatası: %s" msgstr "Cevap eklenirken veritabanı hatası: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4540,29 +4540,43 @@ msgstr ""
"licenses/agpl-3.0.html) lisansı ile korunan [StatusNet](http://status.net/) " "licenses/agpl-3.0.html) lisansı ile korunan [StatusNet](http://status.net/) "
"microbloglama yazılımının %s. versiyonunu kullanmaktadır." "microbloglama yazılımının %s. versiyonunu kullanmaktadır."
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "Yeni durum mesajı" msgstr "Yeni durum mesajı"
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
#, fuzzy #, fuzzy
msgid "After" msgid "After"
msgstr "« Sonra" msgstr "« Sonra"
#: lib/action.php:1119 #: lib/action.php:1141
#, fuzzy #, fuzzy
msgid "Before" msgid "Before"
msgstr "Önce »" msgstr "Önce »"

View File

@ -10,12 +10,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-16 17:53:16+0000\n" "PO-Revision-Date: 2010-01-21 22:38:40+0000\n"
"Language-Team: Ukrainian\n" "Language-Team: Ukrainian\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61138); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n" "X-Language-Code: uk\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -134,7 +134,7 @@ msgstr "Оновлення від %1$s та друзів на %2$s!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -385,7 +385,7 @@ msgstr "Додаткове ім’я не може бути таким сами
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!" msgid "Group not found!"
msgstr "Групу не знайдено!" msgstr "Групу не знайдено!"
@ -1067,7 +1067,7 @@ msgid "No such application."
msgstr "Такого додатку немає." msgstr "Такого додатку немає."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Виникли певні проблеми з токеном поточної сесії." msgstr "Виникли певні проблеми з токеном поточної сесії."
@ -4371,12 +4371,12 @@ msgstr "Вам заборонено надсилати дописи до цьо
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Проблема при збереженні допису." msgstr "Проблема при збереженні допису."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Помилка бази даних при додаванні відповіді: %s" msgstr "Помилка бази даних при додаванні відповіді: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s" msgstr "RT @%1$s %2$s"
@ -4573,27 +4573,41 @@ msgstr ""
"для мікроблоґів, версія %s, доступному під [GNU Affero General Public " "для мікроблоґів, версія %s, доступному під [GNU Affero General Public "
"License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)." "License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
msgid "Site content license" msgid "Site content license"
msgstr "Ліцензія змісту сайту" msgstr "Ліцензія змісту сайту"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "Всі " msgstr "Всі "
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "ліцензія." msgstr "ліцензія."
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "Нумерація сторінок" msgstr "Нумерація сторінок"
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "Вперед" msgstr "Вперед"
#: lib/action.php:1119 #: lib/action.php:1141
msgid "Before" msgid "Before"
msgstr "Назад" msgstr "Назад"

View File

@ -7,12 +7,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:18:14+0000\n" "PO-Revision-Date: 2010-01-21 22:38:43+0000\n"
"Language-Team: Vietnamese\n" "Language-Team: Vietnamese\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: vi\n" "X-Language-Code: vi\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -126,7 +126,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -387,7 +387,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "Phương thức API không tìm thấy!" msgstr "Phương thức API không tìm thấy!"
@ -1111,7 +1111,7 @@ msgid "No such application."
msgstr "Không có tin nhắn nào." msgstr "Không có tin nhắn nào."
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
#, fuzzy #, fuzzy
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "Có lỗi xảy ra khi thao tác. Hãy thử lại lần nữa." msgstr "Có lỗi xảy ra khi thao tác. Hãy thử lại lần nữa."
@ -4478,12 +4478,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "Có lỗi xảy ra khi lưu tin nhắn." msgstr "Có lỗi xảy ra khi lưu tin nhắn."
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "Lỗi cơ sở dữ liệu khi chèn trả lời: %s" msgstr "Lỗi cơ sở dữ liệu khi chèn trả lời: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%s (%s)" msgstr "%s (%s)"
@ -4696,29 +4696,43 @@ msgstr ""
"quyền [GNU Affero General Public License](http://www.fsf.org/licensing/" "quyền [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)." "licenses/agpl-3.0.html)."
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "Tìm theo nội dung của tin nhắn" msgstr "Tìm theo nội dung của tin nhắn"
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
#, fuzzy #, fuzzy
msgid "After" msgid "After"
msgstr "Sau" msgstr "Sau"
#: lib/action.php:1119 #: lib/action.php:1141
#, fuzzy #, fuzzy
msgid "Before" msgid "Before"
msgstr "Trước" msgstr "Trước"

View File

@ -10,12 +10,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:18:17+0000\n" "PO-Revision-Date: 2010-01-21 22:38:46+0000\n"
"Language-Team: Simplified Chinese\n" "Language-Team: Simplified Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n" "X-Language-Code: zh-hans\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -128,7 +128,7 @@ msgstr "来自%2$s 上 %1$s 和好友的更新!"
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -385,7 +385,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "API 方法未实现!" msgstr "API 方法未实现!"
@ -1100,7 +1100,7 @@ msgid "No such application."
msgstr "没有这份通告。" msgstr "没有这份通告。"
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
#, fuzzy #, fuzzy
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "会话标识有问题,请重试。" msgstr "会话标识有问题,请重试。"
@ -4405,12 +4405,12 @@ msgstr "在这个网站你被禁止发布消息。"
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "保存通告时出错。" msgstr "保存通告时出错。"
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "添加回复时数据库出错:%s" msgstr "添加回复时数据库出错:%s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, fuzzy, php-format #, fuzzy, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)" msgstr "%1$s (%2$s)"
@ -4618,29 +4618,43 @@ msgstr ""
"General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)" "General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)"
"授权。" "授权。"
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "StatusNet软件注册证" msgstr "StatusNet软件注册证"
#: lib/action.php:803 #: lib/action.php:800
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
#: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All " msgid "All "
msgstr "全部" msgstr "全部"
#: lib/action.php:808 #: lib/action.php:825
msgid "license." msgid "license."
msgstr "注册证" msgstr "注册证"
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "分页" msgstr "分页"
#: lib/action.php:1111 #: lib/action.php:1133
#, fuzzy #, fuzzy
msgid "After" msgid "After"
msgstr "« 之后" msgstr "« 之后"
#: lib/action.php:1119 #: lib/action.php:1141
#, fuzzy #, fuzzy
msgid "Before" msgid "Before"
msgstr "之前 »" msgstr "之前 »"

View File

@ -7,12 +7,12 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-15 19:15+0000\n" "POT-Creation-Date: 2010-01-21 22:36+0000\n"
"PO-Revision-Date: 2010-01-15 19:18:21+0000\n" "PO-Revision-Date: 2010-01-21 22:38:49+0000\n"
"Language-Team: Traditional Chinese\n" "Language-Team: Traditional Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.16alpha (r61101); Translate extension (2010-01-04)\n" "X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hant\n" "X-Language-Code: zh-hant\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -126,7 +126,7 @@ msgstr ""
#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114 #: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141 #: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120 #: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105 #: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102 #: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108 #: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93 #: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
@ -380,7 +380,7 @@ msgstr ""
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
#, fuzzy #, fuzzy
msgid "Group not found!" msgid "Group not found!"
msgstr "目前無請求" msgstr "目前無請求"
@ -1086,7 +1086,7 @@ msgid "No such application."
msgstr "無此通知" msgstr "無此通知"
#: actions/editapplication.php:127 actions/newapplication.php:110 #: actions/editapplication.php:127 actions/newapplication.php:110
#: actions/showapplication.php:118 lib/action.php:1167 #: actions/showapplication.php:118 lib/action.php:1189
msgid "There was a problem with your session token." msgid "There was a problem with your session token."
msgstr "" msgstr ""
@ -4249,12 +4249,12 @@ msgstr ""
msgid "Problem saving notice." msgid "Problem saving notice."
msgstr "" msgstr ""
#: classes/Notice.php:1052 #: classes/Notice.php:1059
#, php-format #, php-format
msgid "DB error inserting reply: %s" msgid "DB error inserting reply: %s"
msgstr "增加回覆時,資料庫發生錯誤: %s" msgstr "增加回覆時,資料庫發生錯誤: %s"
#: classes/Notice.php:1423 #: classes/Notice.php:1441
#, php-format #, php-format
msgid "RT @%1$s %2$s" msgid "RT @%1$s %2$s"
msgstr "" msgstr ""
@ -4457,28 +4457,42 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)." "org/licensing/licenses/agpl-3.0.html)."
msgstr "" msgstr ""
#: lib/action.php:794 #: lib/action.php:795
#, fuzzy #, fuzzy
msgid "Site content license" msgid "Site content license"
msgstr "新訊息" msgstr "新訊息"
#: lib/action.php:803 #: lib/action.php:800
msgid "All " #, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
#: lib/action.php:805
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "" msgstr ""
#: lib/action.php:808 #: lib/action.php:808
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
#: lib/action.php:820
msgid "All "
msgstr ""
#: lib/action.php:825
msgid "license." msgid "license."
msgstr "" msgstr ""
#: lib/action.php:1102 #: lib/action.php:1124
msgid "Pagination" msgid "Pagination"
msgstr "" msgstr ""
#: lib/action.php:1111 #: lib/action.php:1133
msgid "After" msgid "After"
msgstr "" msgstr ""
#: lib/action.php:1119 #: lib/action.php:1141
#, fuzzy #, fuzzy
msgid "Before" msgid "Before"
msgstr "之前的內容»" msgstr "之前的內容»"

View File

@ -32,14 +32,7 @@ class EnjitQueueHandler extends QueueHandler
return 'enjit'; return 'enjit';
} }
function start() function handle($notice)
{
$this->log(LOG_INFO, "Starting EnjitQueueHandler");
$this->log(LOG_INFO, "Broadcasting to ".common_config('enjit', 'apiurl'));
return true;
}
function handle_notice($notice)
{ {
$profile = Profile::staticGet($notice->profile_id); $profile = Profile::staticGet($notice->profile_id);

View File

@ -28,7 +28,7 @@ class FacebookQueueHandler extends QueueHandler
return 'facebook'; return 'facebook';
} }
function handle_notice($notice) function handle($notice)
{ {
if ($this->_isLocal($notice)) { if ($this->_isLocal($notice)) {
return facebookBroadcastNotice($notice); return facebookBroadcastNotice($notice);

View File

@ -86,7 +86,7 @@ class ImapPlugin extends Plugin
} }
} }
function onStartIoManagerClasses(&$classes) function onStartQueueDaemonIoManagers(&$classes)
{ {
$classes[] = new ImapManager($this); $classes[] = new ImapManager($this);
} }

View File

@ -176,15 +176,25 @@ margin-bottom:0;
.profile { .profile {
padding-top:4px; padding-top:4px;
padding-bottom:4px; padding-bottom:4px;
min-height:65px;
} }
.notice div.entry-content { #content .notice .entry-title {
float:left;
width:100%;
margin-left:0;
}
#content .notice .author .photo {
position:static;
float:left;
}
#content .notice div.entry-content {
margin-left:0; margin-left:0;
width:75%; width:75%;
max-width:100%; max-width:100%;
min-width:0; min-width:0;
} }
.notice-options { .notice-options {
width:50px; width:43px;
margin-right:1%; margin-right:1%;
} }
@ -192,6 +202,13 @@ margin-right:1%;
width:16px; width:16px;
height:16px; height:16px;
} }
.notice-options form.processing {
background-image:none;
}
#wrap .notice-options form.processing input.submit {
background-position:0 47%;
}
.notice .notice-options a, .notice .notice-options a,
.notice .notice-options input { .notice .notice-options input {
box-shadow:none; box-shadow:none;
@ -202,16 +219,16 @@ box-shadow:none;
.notice .notice-options form { .notice .notice-options form {
margin:-4px 0 0 0; margin:-4px 0 0 0;
} }
.notice .notice-options .notice_repeat, .notice .notice-options .form_repeat,
.notice .notice-options .notice_delete { .notice .notice-options .notice_delete {
margin-top:18px; margin-top:11px;
} }
.notice .notice-options .notice_reply, .notice .notice-options .form_favor,
.notice .notice-options .notice_repeat { .notice .notice-options .form_disfavor,
margin-left:18px; .notice .notice-options .form_repeat {
margin-right:11px;
} }
.notice .notice-options .notice_delete { .notice .notice-options .notice_delete {
float:left; float:left;
} }

View File

@ -31,66 +31,152 @@ if (!defined('STATUSNET')) {
exit(1); exit(1);
} }
define('DEFAULT_HUB','http://pubsubhubbub.appspot.com'); define('DEFAULT_HUB', 'http://pubsubhubbub.appspot.com');
require_once(INSTALLDIR.'/plugins/PubSubHubBub/publisher.php'); require_once INSTALLDIR.'/plugins/PubSubHubBub/publisher.php';
/**
* Plugin to provide publisher side of PubSubHubBub (PuSH)
* relationship.
*
* PuSH is a real-time or near-real-time protocol for Atom
* and RSS feeds. More information here:
*
* http://code.google.com/p/pubsubhubbub/
*
* To enable, add the following line to your config.php:
*
* addPlugin('PubSubHubBub');
*
* This will use the Google default hub. If you'd like to use
* another, try:
*
* addPlugin('PubSubHubBub',
* array('hub' => 'http://yourhub.example.net/'));
*
* @category Plugin
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @copyright 2009 Craig Andrews http://candrews.integralblue.com
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
class PubSubHubBubPlugin extends Plugin class PubSubHubBubPlugin extends Plugin
{ {
private $hub; /**
* URL of the hub to advertise and publish to.
*/
public $hub = DEFAULT_HUB;
/**
* Default constructor.
*/
function __construct() function __construct()
{ {
parent::__construct(); parent::__construct();
} }
function onInitializePlugin(){ /**
$this->hub = common_config('PubSubHubBub', 'hub'); * Hooks the StartApiAtom event
if(empty($this->hub)){ *
$this->hub = DEFAULT_HUB; * Adds the necessary bits to advertise PubSubHubBub
} * for the Atom feed.
*
* @param Action $action The API action being shown.
*
* @return boolean hook value
*/
function onStartApiAtom($action)
{
$action->element('link', array('rel' => 'hub', 'href' => $this->hub), null);
return true;
} }
function onStartApiAtom($action){ /**
$action->element('link',array('rel'=>'hub','href'=>$this->hub),null); * Hooks the StartApiRss event
*
* Adds the necessary bits to advertise PubSubHubBub
* for the RSS 2.0 feeds.
*
* @param Action $action The API action being shown.
*
* @return boolean hook value
*/
function onStartApiRss($action)
{
$action->element('atom:link', array('rel' => 'hub',
'href' => $this->hub),
null);
return true;
} }
function onStartApiRss($action){ /**
$action->element('atom:link',array('rel'=>'hub','href'=>$this->hub),null); * Hook for a queued notice.
} *
* When a notice has been queued, will ping the
* PuSH hub for each Atom and RSS feed in which
* the notice appears.
*
* @param Notice $notice The notice that's been queued
*
* @return boolean hook value
*/
function onHandleQueuedNotice($notice){ function onHandleQueuedNotice($notice)
{
$publisher = new Publisher($this->hub); $publisher = new Publisher($this->hub);
$feeds = array(); $feeds = array();
//public timeline feeds //public timeline feeds
$feeds[]=common_local_url('ApiTimelinePublic',array('format' => 'rss')); $feeds[] = common_local_url('ApiTimelinePublic', array('format' => 'rss'));
$feeds[]=common_local_url('ApiTimelinePublic',array('format' => 'atom')); $feeds[] = common_local_url('ApiTimelinePublic', array('format' => 'atom'));
//author's own feeds //author's own feeds
$user = User::staticGet('id',$notice->profile_id); $user = User::staticGet('id', $notice->profile_id);
$feeds[]=common_local_url('ApiTimelineUser',array('id' => $user->nickname, 'format'=>'rss'));
$feeds[]=common_local_url('ApiTimelineUser',array('id' => $user->nickname, 'format'=>'atom')); $feeds[] = common_local_url('ApiTimelineUser',
array('id' => $user->nickname,
'format' => 'rss'));
$feeds[] = common_local_url('ApiTimelineUser',
array('id' => $user->nickname,
'format' => 'atom'));
//tag feeds //tag feeds
$tag = new Notice_tag(); $tag = new Notice_tag();
$tag->notice_id = $notice->id; $tag->notice_id = $notice->id;
if ($tag->find()) { if ($tag->find()) {
while ($tag->fetch()) { while ($tag->fetch()) {
$feeds[]=common_local_url('ApiTimelineTag',array('tag'=>$tag->tag, 'format'=>'rss')); $feeds[] = common_local_url('ApiTimelineTag',
$feeds[]=common_local_url('ApiTimelineTag',array('tag'=>$tag->tag, 'format'=>'atom')); array('tag' => $tag->tag,
'format' => 'rss'));
$feeds[] = common_local_url('ApiTimelineTag',
array('tag' => $tag->tag,
'format' => 'atom'));
} }
} }
//group feeds //group feeds
$group_inbox = new Group_inbox(); $group_inbox = new Group_inbox();
$group_inbox->notice_id = $notice->id; $group_inbox->notice_id = $notice->id;
if ($group_inbox->find()) { if ($group_inbox->find()) {
while ($group_inbox->fetch()) { while ($group_inbox->fetch()) {
$group = User_group::staticGet('id',$group_inbox->group_id); $group = User_group::staticGet('id', $group_inbox->group_id);
$feeds[]=common_local_url('ApiTimelineGroup',array('id' => $group->nickname,'format'=>'rss'));
$feeds[]=common_local_url('ApiTimelineGroup',array('id' => $group->nickname,'format'=>'atom')); $feeds[] = common_local_url('ApiTimelineGroup',
array('id' => $group->nickname,
'format' => 'rss'));
$feeds[] = common_local_url('ApiTimelineGroup',
array('id' => $group->nickname,
'format' => 'atom'));
} }
} }
@ -103,32 +189,70 @@ class PubSubHubBubPlugin extends Plugin
if (empty($user)) { if (empty($user)) {
continue; continue;
} }
$feeds[]=common_local_url('ApiTimelineUser',array('id' => $user->nickname, 'format'=>'rss')); $feeds[] = common_local_url('ApiTimelineFriends',
$feeds[]=common_local_url('ApiTimelineUser',array('id' => $user->nickname, 'format'=>'atom')); array('id' => $user->nickname,
'format' => 'rss'));
$feeds[] = common_local_url('ApiTimelineFriends',
array('id' => $user->nickname,
'format' => 'atom'));
} }
$replies = $notice->getReplies();
//feed of user replied to //feed of user replied to
if($notice->reply_to){ foreach ($replies as $recipient) {
$user = User::staticGet('id',$notice->reply_to); $user = User::staticGet('id', $recipient);
$feeds[]=common_local_url('ApiTimelineMentions',array('id' => $user->nickname,'format'=>'rss')); if (!empty($user)) {
$feeds[]=common_local_url('ApiTimelineMentions',array('id' => $user->nickname,'format'=>'atom')); $feeds[] = common_local_url('ApiTimelineMentions',
} array('id' => $user->nickname,
'format' => 'rss'));
foreach(array_unique($feeds) as $feed){ $feeds[] = common_local_url('ApiTimelineMentions',
if(! $publisher->publish_update($feed)){ array('id' => $user->nickname,
common_log_line(LOG_WARNING,$feed.' was not published to hub at '.$this->hub.':'.$publisher->last_response()); 'format' => 'atom'));
} }
} }
$feeds = array_unique($feeds);
ob_start();
$ok = $publisher->publish_update($feeds);
$push_last_response = ob_get_clean();
if (!$ok) {
common_log(LOG_WARNING,
'Failure publishing ' . count($feeds) . ' feeds to hub at '.
$this->hub.': '.$push_last_response);
} else {
common_log(LOG_INFO,
'Published ' . count($feeds) . ' feeds to hub at '.
$this->hub.': '.$push_last_response);
}
return true;
} }
/**
* Provide version information
*
* Adds this plugin's version data to the global
* version array, for e.g. displaying on the version page.
*
* @param array &$versions array of array of versions
*
* @return boolean hook value
*/
function onPluginVersion(&$versions) function onPluginVersion(&$versions)
{ {
$versions[] = array('name' => 'PubSubHubBub', $versions[] = array('name' => 'PubSubHubBub',
'version' => STATUSNET_VERSION, 'version' => STATUSNET_VERSION,
'author' => 'Craig Andrews', 'author' => 'Craig Andrews',
'homepage' => 'http://status.net/wiki/Plugin:PubSubHubBub', 'homepage' =>
'http://status.net/wiki/Plugin:PubSubHubBub',
'rawdescription' => 'rawdescription' =>
_m('The PubSubHubBub plugin pushes RSS/Atom updates to a <a href="http://pubsubhubbub.googlecode.com/">PubSubHubBub</a> hub.')); _m('The PubSubHubBub plugin pushes RSS/Atom updates '.
'to a <a href = "'.
'http://pubsubhubbub.googlecode.com/'.
'">PubSubHubBub</a> hub.'));
return true; return true;
} }

21
plugins/README-plugins Normal file
View File

@ -0,0 +1,21 @@
Several example plugins are included in the plugins/ directory. You
can enable a plugin with the following line in config.php:
addPlugin('Example', array('param1' => 'value1',
'param2' => 'value2'));
This will look for and load files named 'ExamplePlugin.php' or
'Example/ExamplePlugin.php' either in the plugins/ directory (for
plugins that ship with StatusNet) or in the local/ directory (for
plugins you write yourself or that you get from somewhere else) or
local/plugins/.
Plugins are documented in their own directories.
Additional information on using and developing plugins can be found
on the StatusNet wiki:
http://status.net/wiki/Plugins
http://status.net/wiki/Plugin_development

View File

@ -138,6 +138,9 @@ class RSSCloudPlugin extends Plugin
case 'RSSCloudNotifier': case 'RSSCloudNotifier':
include_once INSTALLDIR . '/plugins/RSSCloud/RSSCloudNotifier.php'; include_once INSTALLDIR . '/plugins/RSSCloud/RSSCloudNotifier.php';
return false; return false;
case 'RSSCloudQueueHandler':
include_once INSTALLDIR . '/plugins/RSSCloud/RSSCloudQueueHandler.php';
return false;
case 'RSSCloudRequestNotifyAction': case 'RSSCloudRequestNotifyAction':
case 'LoggingAggregatorAction': case 'LoggingAggregatorAction':
include_once INSTALLDIR . '/plugins/RSSCloud/' . include_once INSTALLDIR . '/plugins/RSSCloud/' .
@ -193,32 +196,6 @@ class RSSCloudPlugin extends Plugin
return true; return true;
} }
/**
* broadcast the message when not using queuehandler
*
* @param Notice &$notice the notice
* @param array $queue destination queue
*
* @return boolean hook return
*/
function onUnqueueHandleNotice(&$notice, $queue)
{
if (($queue == 'rsscloud') && ($this->_isLocal($notice))) {
common_debug('broadcasting rssCloud bound notice ' . $notice->id);
$profile = $notice->getProfile();
$notifier = new RSSCloudNotifier();
$notifier->notify($profile);
return false;
}
return true;
}
/** /**
* Determine whether the notice was locally created * Determine whether the notice was locally created
* *
@ -261,19 +238,15 @@ class RSSCloudPlugin extends Plugin
} }
/** /**
* Add RSSCloudQueueHandler to the list of valid daemons to * Register RSSCloud notice queue handler
* start
* *
* @param array $daemons the list of daemons to run * @param QueueManager $manager
* *
* @return boolean hook return * @return boolean hook return
*
*/ */
function onEndInitializeQueueManager($manager)
function onGetValidDaemons($daemons)
{ {
array_push($daemons, INSTALLDIR . $manager->connect('rsscloud', 'RSSCloudQueueHandler');
'/plugins/RSSCloud/RSSCloudQueueHandler.php');
return true; return true;
} }

50
plugins/RSSCloud/RSSCloudQueueHandler.php Executable file → Normal file
View File

@ -1,4 +1,3 @@
#!/usr/bin/env php
<?php <?php
/* /*
* StatusNet - the distributed open-source microblogging tool * StatusNet - the distributed open-source microblogging tool
@ -18,61 +17,20 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..')); if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
$shortoptions = 'i::';
$longoptions = array('id::');
$helptext = <<<END_OF_ENJIT_HELP
Daemon script for pushing new notices to RSSCloud subscribers.
-i --id Identity (default none)
END_OF_ENJIT_HELP;
require_once INSTALLDIR . '/scripts/commandline.inc';
require_once INSTALLDIR . '/lib/queuehandler.php';
require_once INSTALLDIR . '/plugins/RSSCloud/RSSCloudNotifier.php';
require_once INSTALLDIR . '/plugins/RSSCloud/RSSCloudSubscription.php';
class RSSCloudQueueHandler extends QueueHandler class RSSCloudQueueHandler extends QueueHandler
{ {
var $notifier = null;
function transport() function transport()
{ {
return 'rsscloud'; return 'rsscloud';
} }
function start() function handle($notice)
{
$this->log(LOG_INFO, "INITIALIZE");
$this->notifier = new RSSCloudNotifier();
return true;
}
function handle_notice($notice)
{ {
$profile = $notice->getProfile(); $profile = $notice->getProfile();
return $this->notifier->notify($profile); $notifier = new RSSCloudNotifier();
return $notifier->notify($profile);
} }
function finish()
{
}
} }
if (have_option('i')) {
$id = get_option_value('i');
} else if (have_option('--id')) {
$id = get_option_value('--id');
} else if (count($args) > 0) {
$id = $args[0];
} else {
$id = null;
}
$handler = new RSSCloudQueueHandler($id);
$handler->runOnce();

View File

@ -31,8 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1); exit(1);
} }
define('RECAPTCHA', '0.2');
require_once(INSTALLDIR.'/plugins/Recaptcha/recaptchalib.php'); require_once(INSTALLDIR.'/plugins/Recaptcha/recaptchalib.php');
class RecaptchaPlugin extends Plugin class RecaptchaPlugin extends Plugin
@ -88,4 +86,16 @@ class RecaptchaPlugin extends Plugin
return false; return false;
} }
} }
function onPluginVersion(&$versions)
{
$versions[] = array('name' => 'Recaptcha',
'version' => STATUSNET_VERSION,
'author' => 'Eric Helgeson',
'homepage' => 'http://status.net/wiki/Plugin:Recaptcha',
'rawdescription' =>
_m('Uses <a href="http://recaptcha.org/">Recaptcha</a> service to add a '.
'captcha to the registration page.'));
return true;
}
} }

View File

@ -28,7 +28,7 @@ class TwitterQueueHandler extends QueueHandler
return 'twitter'; return 'twitter';
} }
function handle_notice($notice) function handle($notice)
{ {
return broadcast_twitter($notice); return broadcast_twitter($notice);
} }

View File

@ -50,7 +50,7 @@ if (empty($notice)) {
exit(1); exit(1);
} }
if (!$handler->handle_notice($notice)) { if (!$handler->handle($notice)) {
print "Failed to handle notice id $noticeId on queue '$queue'.\n"; print "Failed to handle notice id $noticeId on queue '$queue'.\n";
exit(1); exit(1);
} }

View File

@ -29,6 +29,8 @@ $longoptions = array('id=', 'foreground', 'all', 'threads=', 'skip-xmpp', 'xmpp-
* *
* Recognizes Linux and Mac OS X; others will return default of 1. * Recognizes Linux and Mac OS X; others will return default of 1.
* *
* @fixme move this to SpawningDaemon, but to get the default val for help
* text we seem to need it before loading infrastructure
* @return intval * @return intval
*/ */
function getProcessorCount() function getProcessorCount()
@ -83,143 +85,29 @@ define('CLAIM_TIMEOUT', 1200);
* We can then pass individual items through the QueueHandler subclasses * We can then pass individual items through the QueueHandler subclasses
* they belong to. * they belong to.
*/ */
class QueueDaemon extends Daemon class QueueDaemon extends SpawningDaemon
{ {
protected $allsites; protected $allsites = false;
protected $threads=1;
function __construct($id=null, $daemonize=true, $threads=1, $allsites=false) function __construct($id=null, $daemonize=true, $threads=1, $allsites=false)
{ {
parent::__construct($daemonize); parent::__construct($id, $daemonize, $threads);
if ($id) {
$this->set_id($id);
}
$this->all = $allsites; $this->all = $allsites;
$this->threads = $threads;
}
/**
* How many seconds a polling-based queue manager should wait between
* checks for new items to handle.
*
* Defaults to 60 seconds; override to speed up or slow down.
*
* @return int timeout in seconds
*/
function timeout()
{
return 60;
}
function name()
{
return strtolower(get_class($this).'.'.$this->get_id());
}
function run()
{
if ($this->threads > 1) {
return $this->runThreads();
} else {
return $this->runLoop();
}
}
function runThreads()
{
$children = array();
for ($i = 1; $i <= $this->threads; $i++) {
$pid = pcntl_fork();
if ($pid < 0) {
print "Couldn't fork for thread $i; aborting\n";
exit(1);
} else if ($pid == 0) {
$this->runChild($i);
exit(0);
} else {
$this->log(LOG_INFO, "Spawned thread $i as pid $pid");
$children[$i] = $pid;
}
}
$this->log(LOG_INFO, "Waiting for children to complete.");
while (count($children) > 0) {
$status = null;
$pid = pcntl_wait($status);
if ($pid > 0) {
$i = array_search($pid, $children);
if ($i === false) {
$this->log(LOG_ERR, "Unrecognized child pid $pid exited!");
continue;
}
unset($children[$i]);
$this->log(LOG_INFO, "Thread $i pid $pid exited.");
$pid = pcntl_fork();
if ($pid < 0) {
print "Couldn't fork to respawn thread $i; aborting thread.\n";
} else if ($pid == 0) {
$this->runChild($i);
exit(0);
} else {
$this->log(LOG_INFO, "Respawned thread $i as pid $pid");
$children[$i] = $pid;
}
}
}
$this->log(LOG_INFO, "All child processes complete.");
return true;
}
function runChild($thread)
{
$this->set_id($this->get_id() . "." . $thread);
$this->resetDb();
$this->runLoop();
}
/**
* Reconnect to the database for each child process,
* or they'll get very confused trying to use the
* same socket.
*/
function resetDb()
{
// @fixme do we need to explicitly open the db too
// or is this implied?
global $_DB_DATAOBJECT;
unset($_DB_DATAOBJECT['CONNECTIONS']);
// Reconnect main memcached, or threads will stomp on
// each other and corrupt their requests.
$cache = common_memcache();
if ($cache) {
$cache->reconnect();
}
// Also reconnect memcached for status_network table.
if (!empty(Status_network::$cache)) {
Status_network::$cache->close();
Status_network::$cache = null;
}
} }
/** /**
* Setup and start of run loop for this queue handler as a daemon. * Setup and start of run loop for this queue handler as a daemon.
* Most of the heavy lifting is passed on to the QueueManager's service() * Most of the heavy lifting is passed on to the QueueManager's service()
* method, which passes control on to the QueueHandler's handle_notice() * method, which passes control on to the QueueHandler's handle()
* method for each notice that comes in on the queue. * method for each item that comes in on the queue.
*
* Most of the time this won't need to be overridden in a subclass.
* *
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
function runLoop() function runThread()
{ {
$this->log(LOG_INFO, 'checking for queued notices'); $this->log(LOG_INFO, 'checking for queued notices');
$master = new IoMaster($this->get_id()); $master = new QueueMaster($this->get_id());
$master->init($this->all); $master->init($this->all);
$master->service(); $master->service();
@ -229,10 +117,25 @@ class QueueDaemon extends Daemon
return true; return true;
} }
}
function log($level, $msg) class QueueMaster extends IoMaster
{
/**
* Initialize IoManagers for the currently configured site
* which are appropriate to this instance.
*/
function initManagers()
{ {
common_log($level, get_class($this) . ' ('. $this->get_id() .'): '.$msg); $classes = array();
if (Event::handle('StartQueueDaemonIoManagers', array(&$classes))) {
$classes[] = 'QueueManager';
}
Event::handle('EndQueueDaemonIoManagers', array(&$classes));
foreach ($classes as $class) {
$this->instantiate($class);
}
} }
} }

View File

@ -33,347 +33,46 @@ END_OF_XMPP_HELP;
require_once INSTALLDIR.'/scripts/commandline.inc'; require_once INSTALLDIR.'/scripts/commandline.inc';
require_once INSTALLDIR . '/lib/common.php';
require_once INSTALLDIR . '/lib/jabber.php'; require_once INSTALLDIR . '/lib/jabber.php';
require_once INSTALLDIR . '/lib/daemon.php';
# This is kind of clunky; we create a class to call the global functions class XMPPDaemon extends SpawningDaemon
# in jabber.php, which create a new XMPP class. A more elegant (?) solution
# might be to use make this a subclass of XMPP.
class XMPPDaemon extends Daemon
{ {
function __construct($resource=null, $daemonize=true) function __construct($id=null, $daemonize=true, $threads=1)
{ {
parent::__construct($daemonize); if ($threads != 1) {
// This should never happen. :)
static $attrs = array('server', 'port', 'user', 'password', 'host'); throw new Exception("XMPPDaemon can must run single-threaded");
foreach ($attrs as $attr)
{
$this->$attr = common_config('xmpp', $attr);
} }
parent::__construct($id, $daemonize, $threads);
if ($resource) {
$this->resource = $resource . 'daemon';
} else {
$this->resource = common_config('xmpp', 'resource') . 'daemon';
}
$this->jid = $this->user.'@'.$this->server.'/'.$this->resource;
$this->log(LOG_INFO, "INITIALIZE XMPPDaemon {$this->jid}");
} }
function connect() function runThread()
{ {
$connect_to = ($this->host) ? $this->host : $this->server; common_log(LOG_INFO, 'Waiting to listen to XMPP and queues');
$this->log(LOG_INFO, "Connecting to $connect_to on port $this->port"); $master = new XmppMaster($this->get_id());
$master->init();
$master->service();
$this->conn = jabber_connect($this->resource); common_log(LOG_INFO, 'terminating normally');
if (!$this->conn) { return true;
return false;
}
$this->log(LOG_INFO, "Connected");
$this->conn->setReconnectTimeout(600);
$this->log(LOG_INFO, "Sending initial presence.");
jabber_send_presence("Send me a message to post a notice", 'available',
null, 'available', 100);
$this->log(LOG_INFO, "Done connecting.");
return !$this->conn->isDisconnected();
} }
function name() }
class XmppMaster extends IoMaster
{
/**
* Initialize IoManagers for the currently configured site
* which are appropriate to this instance.
*/
function initManagers()
{ {
return strtolower('xmppdaemon.'.$this->resource); // @fixme right now there's a hack in QueueManager to determine
} // which queues to subscribe to based on the master class.
$this->instantiate('QueueManager');
function run() $this->instantiate('XmppManager');
{
if ($this->connect()) {
$this->log(LOG_DEBUG, "Initializing stanza handlers.");
$this->conn->addEventHandler('message', 'handle_message', $this);
$this->conn->addEventHandler('presence', 'handle_presence', $this);
$this->conn->addEventHandler('reconnect', 'handle_reconnect', $this);
$this->log(LOG_DEBUG, "Beginning processing loop.");
while ($this->conn->processTime(60)) {
$this->sendPing();
}
}
}
function sendPing()
{
if (!isset($this->pingid)) {
$this->pingid = 0;
} else {
$this->pingid++;
}
$this->log(LOG_DEBUG, "Sending ping #{$this->pingid}");
$this->conn->send("<iq from='{$this->jid}' to='{$this->server}' id='ping_{$this->pingid}' type='get'><ping xmlns='urn:xmpp:ping'/></iq>");
}
function handle_reconnect(&$pl)
{
$this->log(LOG_DEBUG, "Got reconnection callback.");
$this->conn->processUntil('session_start');
$this->log(LOG_DEBUG, "Sending reconnection presence.");
$this->conn->presence('Send me a message to post a notice', 'available', null, 'available', 100);
unset($pl['xml']);
$pl['xml'] = null;
$pl = null;
unset($pl);
}
function get_user($from)
{
$user = User::staticGet('jabber', jabber_normalize_jid($from));
return $user;
}
function handle_message(&$pl)
{
$from = jabber_normalize_jid($pl['from']);
if ($pl['type'] != 'chat') {
$this->log(LOG_WARNING, "Ignoring message of type ".$pl['type']." from $from.");
return;
}
if (mb_strlen($pl['body']) == 0) {
$this->log(LOG_WARNING, "Ignoring message with empty body from $from.");
return;
}
# Forwarded from another daemon (probably a broadcaster) for
# us to handle
if ($this->is_self($from)) {
$this->log(LOG_INFO, "Got forwarded notice from self ($from).");
$from = $this->get_ofrom($pl);
$this->log(LOG_INFO, "Originally sent by $from.");
if (is_null($from) || $this->is_self($from)) {
$this->log(LOG_INFO, "Ignoring notice originally sent by $from.");
return;
}
}
$user = $this->get_user($from);
// For common_current_user to work
global $_cur;
$_cur = $user;
if (!$user) {
$this->from_site($from, 'Unknown user; go to ' .
common_local_url('imsettings') .
' to add your address to your account');
$this->log(LOG_WARNING, 'Message from unknown user ' . $from);
return;
}
if ($this->handle_command($user, $pl['body'])) {
$this->log(LOG_INFO, "Command message by $from handled.");
return;
} else if ($this->is_autoreply($pl['body'])) {
$this->log(LOG_INFO, 'Ignoring auto reply from ' . $from);
return;
} else if ($this->is_otr($pl['body'])) {
$this->log(LOG_INFO, 'Ignoring OTR from ' . $from);
return;
} else {
$this->log(LOG_INFO, 'Posting a notice from ' . $user->nickname);
$this->add_notice($user, $pl);
}
$user->free();
unset($user);
unset($_cur);
unset($pl['xml']);
$pl['xml'] = null;
$pl = null;
unset($pl);
}
function is_self($from)
{
return preg_match('/^'.strtolower(jabber_daemon_address()).'/', strtolower($from));
}
function get_ofrom($pl)
{
$xml = $pl['xml'];
$addresses = $xml->sub('addresses');
if (!$addresses) {
$this->log(LOG_WARNING, 'Forwarded message without addresses');
return null;
}
$address = $addresses->sub('address');
if (!$address) {
$this->log(LOG_WARNING, 'Forwarded message without address');
return null;
}
if (!array_key_exists('type', $address->attrs)) {
$this->log(LOG_WARNING, 'No type for forwarded message');
return null;
}
$type = $address->attrs['type'];
if ($type != 'ofrom') {
$this->log(LOG_WARNING, 'Type of forwarded message is not ofrom');
return null;
}
if (!array_key_exists('jid', $address->attrs)) {
$this->log(LOG_WARNING, 'No jid for forwarded message');
return null;
}
$jid = $address->attrs['jid'];
if (!$jid) {
$this->log(LOG_WARNING, 'Could not get jid from address');
return null;
}
$this->log(LOG_DEBUG, 'Got message forwarded from jid ' . $jid);
return $jid;
}
function is_autoreply($txt)
{
if (preg_match('/[\[\(]?[Aa]uto[-\s]?[Rr]e(ply|sponse)[\]\)]/', $txt)) {
return true;
} else if (preg_match('/^System: Message wasn\'t delivered. Offline storage size was exceeded.$/', $txt)) {
return true;
} else {
return false;
}
}
function is_otr($txt)
{
if (preg_match('/^\?OTR/', $txt)) {
return true;
} else {
return false;
}
}
function from_site($address, $msg)
{
$text = '['.common_config('site', 'name') . '] ' . $msg;
jabber_send_message($address, $text);
}
function handle_command($user, $body)
{
$inter = new CommandInterpreter();
$cmd = $inter->handle_command($user, $body);
if ($cmd) {
$chan = new XMPPChannel($this->conn);
$cmd->execute($chan);
return true;
} else {
return false;
}
}
function add_notice(&$user, &$pl)
{
$body = trim($pl['body']);
$content_shortened = common_shorten_links($body);
if (Notice::contentTooLong($content_shortened)) {
$from = jabber_normalize_jid($pl['from']);
$this->from_site($from, sprintf(_('Message too long - maximum is %1$d characters, you sent %2$d.'),
Notice::maxContent(),
mb_strlen($content_shortened)));
return;
}
try {
$notice = Notice::saveNew($user->id, $content_shortened, 'xmpp');
} catch (Exception $e) {
$this->log(LOG_ERR, $e->getMessage());
$this->from_site($user->jabber, $e->getMessage());
return;
}
common_broadcast_notice($notice);
$this->log(LOG_INFO,
'Added notice ' . $notice->id . ' from user ' . $user->nickname);
$notice->free();
unset($notice);
}
function handle_presence(&$pl)
{
$from = jabber_normalize_jid($pl['from']);
switch ($pl['type']) {
case 'subscribe':
# We let anyone subscribe
$this->subscribed($from);
$this->log(LOG_INFO,
'Accepted subscription from ' . $from);
break;
case 'subscribed':
case 'unsubscribed':
case 'unsubscribe':
$this->log(LOG_INFO,
'Ignoring "' . $pl['type'] . '" from ' . $from);
break;
default:
if (!$pl['type']) {
$user = User::staticGet('jabber', $from);
if (!$user) {
$this->log(LOG_WARNING, 'Presence from unknown user ' . $from);
return;
}
if ($user->updatefrompresence) {
$this->log(LOG_INFO, 'Updating ' . $user->nickname .
' status from presence.');
$this->add_notice($user, $pl);
}
$user->free();
unset($user);
}
break;
}
unset($pl['xml']);
$pl['xml'] = null;
$pl = null;
unset($pl);
}
function log($level, $msg)
{
$text = 'XMPPDaemon('.$this->resource.'): '.$msg;
common_log($level, $text);
if (!$this->daemonize)
{
$line = common_log_line($level, $text);
echo $line;
echo "\n";
}
}
function subscribed($to)
{
jabber_special_presence('subscribed', $to);
} }
} }

View File

@ -1012,6 +1012,16 @@ float:left;
#shownotice .vcard .photo { #shownotice .vcard .photo {
margin-bottom:4px; margin-bottom:4px;
} }
#content .notice .author .photo {
position:absolute;
top:11px;
left:0;
float:none;
}
#content .notice .entry-title {
margin-left:59px;
}
.vcard .url { .vcard .url {
text-decoration:none; text-decoration:none;
} }
@ -1020,13 +1030,19 @@ text-decoration:underline;
} }
.notice .entry-title { .notice .entry-title {
float:left;
width:100%;
overflow:hidden; overflow:hidden;
} }
.notice .entry-title.ov { .notice .entry-title.ov {
overflow:visible; overflow:visible;
} }
#showstream .notice .entry-title,
#showstream .notice div.entry-content {
margin-left:0;
}
#shownotice .notice .entry-title,
#shownotice .notice div.entry-content {
margin-left:110px;
}
#shownotice .notice .entry-title { #shownotice .notice .entry-title {
font-size:2.2em; font-size:2.2em;
} }
@ -1056,7 +1072,6 @@ max-width:70%;
} }
#showstream .notice div.entry-content, #showstream .notice div.entry-content,
#shownotice .notice div.entry-content { #shownotice .notice div.entry-content {
margin-left:0;
max-width:79%; max-width:79%;
} }
@ -1120,6 +1135,7 @@ position:relative;
font-size:0.95em; font-size:0.95em;
width:113px; width:113px;
float:right; float:right;
margin-top:3px;
margin-right:4px; margin-right:4px;
} }

View File

@ -1,150 +0,0 @@
/** theme: base
*
* @package StatusNet
* @author Meitar Moscovitz <meitar@maymay.net>
* @author Sarven Capadisli <csarven@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
body {
font-size:2.5em;
}
#wrap {
width:95%;
}
#header,
#header address,
#anon_notice,
#site_nav_local_views .nav,
#form_notice,
#form_notice .form_data li,
#core,
#content_inner,
#notices_primary,
.notice,
.notice .entry-title,
.notice div.entry-content,
.notice-options,
.notice .notice-options a,
.pagination,
.pagination .nav,
.aside .section {
float:none;
}
.notice-options .notice_reply,
.notice-options .notice_delete,
.notice-options .form_favor,
.notice-options .form_disfavor {
position:static;
}
#form_notice,
#anon_notice,
#footer,
#form_notice .form_actions input.submit {
width:auto;
}
.form_settings label {
width:25%;
}
.form_settings .form_data p.form_guide {
margin-left:26%;
}
#site_nav_global_primary {
width:75%;
}
.entity_profile {
width:65%;
}
.entity_actions {
margin-left:0;
}
#form_notice,
#anon_notice {
clear:both;
}
#content,
#aside_primary {
width:96%;
padding-left:2%;
padding-right:2%;
}
#site_notice {
position:static;
float:right;
clear:right;
width:75%;
margin-right:0;
margin-bottom:11px;
}
.notices {
font-size:1.5em;
}
#form_notice textarea {
width:80%;
height:5em;
}
#form_notice .form_note {
right:20%;
top:6em;
}
.vcard .photo,
.section .vcard .photo {
margin-right:18px;
}
.notice,
.profile {
margin-bottom:18px;
}
.notices .entry-title,
.notices div.entry-content {
width:90%;
}
.notice div.entry-content {
margin-left:0;
}
.notice .author .photo {
height:4.5em;
width:4.5em;
}
.notice-options {
position:absolute;
top:0;
right:0;
padding-left:7%;
width:3%;
}
.notice-options .notice_delete a {
float:left;
}
.pagination .nav {
overflow:auto;
}
#export_data {
display:none;
}
#site_nav_local_views li {
margin-right:4px;
}
#site_nav_local_views a {
padding:18px 11px;
}