Merge branch '1.0.x' of git://gitorious.org/statusnet/mainline

This commit is contained in:
Ian Denhardt 2010-08-09 15:06:26 -04:00
commit e0da393800
175 changed files with 25050 additions and 6918 deletions

View File

@ -716,6 +716,24 @@ StartShowContentLicense: Showing the default license for content
EndShowContentLicense: Showing the default license for content
- $action: the current action
GetImTransports: Get IM transports that are available
- &$transports: append your transport to this array like so: $transports[transportName]=array('display'=>display)
NormalizeImScreenname: Normalize an IM screenname
- $transport: transport the screenname is on
- &$screenname: screenname to be normalized
ValidateImScreenname: Validate an IM screenname
- $transport: transport the screenname is on
- $screenname: screenname to be validated
- $valid: is the screenname valid?
SendImConfirmationCode: Send a confirmation code to confirm a user owns an IM screenname
- $transport: transport the screenname exists on
- $screenname: screenname being confirmed
- $code: confirmation code for confirmation URL
- $user: user requesting the confirmation
StartUserRegister: When a new user is being registered
- &$profile: new profile data (no ID)
- &$user: new user account (no ID or URI)
@ -818,3 +836,230 @@ EndDeleteUser: handling the post for deleting a user
- $action: action being shown
- $user: user being deleted
StartActivityStart: starting the output for a notice activity <event>
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$attrs: <entry> attributes (mostly namespace declarations, if any)
EndActivityStart: end the opening tag for an activity <event>
- &$notice: notice being output
- &$xs: XMLStringer for output
- $attrs: <entry> attributes (mostly namespace declarations, if any)
StartActivitySource: before outputting the <source> element for a notice activity
- &$notice: notice being output
- &$xs: XMLStringer for output
EndActivitySource: after outputting the <source> element for a notice activity
- &$notice: notice being output
- &$xs: XMLStringer for output
StartActivityTitle: before outputting notice activity title
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$title: title of the notice, mutable
EndActivityTitle: after outputting notice activity title
- $notice: notice being output
- &$xs: XMLStringer for output
- $title: title of the notice
StartActivityAuthor: before outputting atom author
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$atomAuthor: string for XML representing atom author
EndActivityAuthor: after outputting atom author
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$atomAuthor: string for XML representing atom author
StartActivityActor: before outputting activity actor element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$actor: string for XML representing activity actor
EndActivityActor: after outputting activity actor element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$actor: string for XML representing activity actor
StartActivityLink: before outputting activity HTML link element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$url: URL for activity HTML link element for a notice activity entry
EndActivityLink: before outputting activity HTML link element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $url: URL for activity HTML link element for a notice activity entry
StartActivityId: before outputting atom:id element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$id: atom:id (notice URI by default)
EndActivityId: after outputting atom:id element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $id: atom:id (notice URI by default)
StartActivityPublished: before outputting atom:published element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$published: atom:published value (notice created by default)
EndActivityPublished: before outputting atom:published element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $published: atom:published value (notice created by default)
StartActivityUpdated: before outputting atom:updated element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$updated: atom:updated value (same as atom:published by default)
EndActivityUpdated: after outputting atom:updated element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $updated: atom:updated value (same as atom:published by default)
StartActivityContent: before outputting atom:content element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$content: atom:content value (notice rendered HTML by default)
EndActivityContent: after outputting atom:content element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $content: atom:content value (notice rendered HTML by default)
StartActivityVerb: before outputting activity:verb element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$verb: activity:verb URI ('http://activitystrea.ms/schema/1.0/post' by default)
EndActivityVerb: after outputting activity:verb element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $verb: activity:verb URI ('http://activitystrea.ms/schema/1.0/post' by default)
StartActivityDefaultObjectType: before outputting activity:object-type element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$type: activity:object-type URI for default object ('http://activitystrea.ms/schema/1.0/note' by default)
EndActivityDefaultObjectType: after outputting activity:verb element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $type: activity:object-type URI for default object ('http://activitystrea.ms/schema/1.0/note' by default)
StartActivityObjects: before outputting activity:object elements for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$objects: array of ActivityObject objects to output (empty by default)
EndActivityObjects: after outputting activity:object elements for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $objects: array of ActivityObject objects to output (empty by default)
StartActivityNoticeInfo: before outputting statusnet:notice-info element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$noticeInfoAttr: array of attributes for notice info element
EndActivityNoticeInfo: after outputting statusnet:notice-info element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $noticeInfoAttr: array of attributes for notice info element
StartActivityInReplyTo: before outputting thr:in-reply-to element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$replyNotice: Notice object the main notice is in-reply-to
EndActivityInReplyTo: after outputting thr:in-reply-to element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $replyNotice: Notice object the main notice is in-reply-to
StartActivityConversation: before outputting ostatus:conversation link element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$conv: Conversation object
EndActivityConversation: after outputting ostatus:conversation link element for a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $conv: Conversation object
StartActivityAttentionProfiles: before outputting ostatus:attention link element for people in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$replyProfiles: array of profiles of people being replied to
EndActivityAttentionProfiles: after outputting ostatus:attention link element for people in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $replyProfiles: array of Profile object of people being replied to
StartActivityAttentionGroups: before outputting ostatus:attention link element for groups in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$groups: array of Group objects of groups being addressed
EndActivityAttentionGroups: after outputting ostatus:attention link element for groups in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $groups: array of Group objects of groups being addressed
StartActivityForward: before outputting ostatus:forward link element in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$repeat: Notice that was repeated
EndActivityForward: after outputting ostatus:forward link element in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $repeat: Notice that was repeated
StartActivityCategories: before outputting atom:category elements in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$tags: array of strings for tags on the notice (used for categories)
EndActivityCategories: after outputting atom:category elements in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $tags: array of strings for tags on the notice (used for categories)
StartActivityEnclosures: before outputting enclosure link elements in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$enclosures: array of enclosure objects (see File::getEnclosure() for details)
EndActivityEnclosures: after outputting enclosure link elements in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $enclosures: array of enclosure objects (see File::getEnclosure() for details)
StartActivityGeo: before outputting geo:rss element in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- &$lat: latitude
- &$lon: longitude
EndActivityGeo: after outputting geo:rss element in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output
- $lat: latitude
- $lon: longitude
StartActivityEnd: before the closing </entry> in a notice activity entry (last chance for data!)
- &$notice: notice being output
- &$xs: XMLStringer for output
EndActivityEnd: after the closing </entry> in a notice activity entry
- &$notice: notice being output
- &$xs: XMLStringer for output

20
README
View File

@ -836,9 +836,7 @@ sslserver: use an alternate server name for SSL URLs, like
parameters correctly so that both the SSL server and the
"normal" server can access the session cookie and
preferably other cookies as well.
shorturllength: Length of URL at which URLs in a message exceeding 140
characters will be sent to the user's chosen
shortening service.
shorturllength: ignored. See 'url' section below.
dupelimit: minimum time allowed for one person to say the same thing
twice. Default 60s. Anything lower is considered a user
or UI error.
@ -1461,6 +1459,22 @@ disallow: Array of (virtual) directories to disallow. Default is 'main',
'search', 'message', 'settings', 'admin'. Ignored when site
is private, in which case the entire site ('/') is disallowed.
url
---
Everybody loves URL shorteners. These are some options for fine-tuning
how and when the server shortens URLs.
shortener: URL shortening service to use by default. Users can override
individually. 'ur1.ca' by default.
maxlength: If an URL is strictly longer than this limit, it will be
shortened. Note that the URL shortener service may return an
URL longer than this limit. Defaults to 25. Users can
override. If set to 0, all URLs will be shortened.
maxnoticelength: If a notice is strictly longer than this limit, all
URLs in the notice will be shortened. Users can override.
-1 means the text limit for notices.
Plugins
=======

View File

@ -143,10 +143,10 @@ class AllAction extends ProfileAction
$message .= _('Try subscribing to more people, [join a group](%%action.groups%%) or post something yourself.');
} else {
// TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
$message .= sprintf(_('You can try to [nudge %1$s](../%2$s) from their profile or [post something to their attention](%%%%action.newnotice%%%%?status_textarea=%3$s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname);
$message .= sprintf(_('You can try to [nudge %1$s](../%2$s) from their profile or [post something to them](%%%%action.newnotice%%%%?status_textarea=%3$s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname);
}
} else {
$message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to their attention.'), $this->user->nickname);
$message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to them.'), $this->user->nickname);
}
$this->elementStart('div', 'guide');

View File

@ -120,10 +120,16 @@ class ApiAccountUpdateDeliveryDeviceAction extends ApiAuthAction
if (strtolower($this->device) == 'sms') {
$this->user->smsnotify = true;
} elseif (strtolower($this->device) == 'im') {
$this->user->jabbernotify = true;
//TODO IM is pluginized now, so what should we do?
//Enable notifications for all IM plugins?
//For now, don't do anything
//$this->user->jabbernotify = true;
} elseif (strtolower($this->device == 'none')) {
$this->user->smsnotify = false;
$this->user->jabbernotify = false;
//TODO IM is pluginized now, so what should we do?
//Disable notifications for all IM plugins?
//For now, don't do anything
//$this->user->jabbernotify = false;
}
$result = $this->user->update($original);

View File

@ -0,0 +1,367 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Update a group's profile
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category API
* @package StatusNet
* @author Zach Copley <zach@status.net>
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
if (!defined('STATUSNET')) {
exit(1);
}
require_once INSTALLDIR . '/lib/apiauth.php';
/**
* API analog to the group edit page
*
* @category API
* @package StatusNet
* @author Zach Copley <zach@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
class ApiGroupProfileUpdateAction extends ApiAuthAction
{
/**
* Take arguments for running
*
* @param array $args $_REQUEST args
*
* @return boolean success flag
*
*/
function prepare($args)
{
parent::prepare($args);
$this->nickname = common_canonical_nickname($this->trimmed('nickname'));
$this->fullname = $this->trimmed('fullname');
$this->homepage = $this->trimmed('homepage');
$this->description = $this->trimmed('description');
$this->location = $this->trimmed('location');
$this->aliasstring = $this->trimmed('aliases');
$this->user = $this->auth_user;
$this->group = $this->getTargetGroup($this->arg('id'));
return true;
}
/**
* Handle the request
*
* See which request params have been set, and update the profile
*
* @param array $args $_REQUEST data (unused)
*
* @return void
*/
function handle($args)
{
parent::handle($args);
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
$this->clientError(
_('This method requires a POST.'),
400, $this->format
);
return;
}
if (!in_array($this->format, array('xml', 'json'))) {
$this->clientError(
_('API method not found.'),
404,
$this->format
);
return;
}
if (empty($this->user)) {
$this->clientError(_('No such user.'), 404, $this->format);
return;
}
if (empty($this->group)) {
$this->clientError(_('Group not found.'), 404, $this->format);
return false;
}
if (!$this->user->isAdmin($this->group)) {
$this->clientError(_('You must be an admin to edit the group.'), 403);
return false;
}
$this->group->query('BEGIN');
$orig = clone($this->group);
try {
if (!empty($this->nickname)) {
if ($this->validateNickname()) {
$this->group->nickname = $this->nickname;
$this->group->mainpage = common_local_url(
'showgroup',
array('nickname' => $this->nickname)
);
}
}
if (!empty($this->fullname)) {
$this->validateFullname();
$this->group->fullname = $this->fullname;
}
if (!empty($this->homepage)) {
$this->validateHomepage();
$this->group->homepage = $this->hompage;
}
if (!empty($this->description)) {
$this->validateDescription();
$this->group->description = $this->decription;
}
if (!empty($this->location)) {
$this->validateLocation();
$this->group->location = $this->location;
}
} catch (ApiValidationException $ave) {
$this->clientError(
$ave->getMessage(),
403,
$this->format
);
return;
}
$result = $this->group->update($orig);
if (!$result) {
common_log_db_error($this->group, 'UPDATE', __FILE__);
$this->serverError(_('Could not update group.'));
}
$aliases = array();
try {
if (!empty($this->aliasstring)) {
$aliases = $this->validateAliases();
}
} catch (ApiValidationException $ave) {
$this->clientError(
$ave->getMessage(),
403,
$this->format
);
return;
}
$result = $this->group->setAliases($aliases);
if (!$result) {
$this->serverError(_('Could not create aliases.'));
}
if (!empty($this->nickname) && ($this->nickname != $orig->nickname)) {
common_log(LOG_INFO, "Saving local group info.");
$local = Local_group::staticGet('group_id', $this->group->id);
$local->setNickname($this->nickname);
}
$this->group->query('COMMIT');
switch($this->format) {
case 'xml':
$this->showSingleXmlGroup($this->group);
break;
case 'json':
$this->showSingleJsonGroup($this->group);
break;
default:
$this->clientError(_('API method not found.'), 404, $this->format);
break;
}
}
function nicknameExists($nickname)
{
$group = Local_group::staticGet('nickname', $nickname);
if (!empty($group) &&
$group->group_id != $this->group->id) {
return true;
}
$alias = Group_alias::staticGet('alias', $nickname);
if (!empty($alias) &&
$alias->group_id != $this->group->id) {
return true;
}
return false;
}
function validateNickname()
{
if (!Validate::string(
$this->nickname, array(
'min_length' => 1,
'max_length' => 64,
'format' => NICKNAME_FMT
)
)
) {
throw new ApiValidationException(
_(
'Nickname must have only lowercase letters ' .
'and numbers and no spaces.'
)
);
} else if ($this->nicknameExists($this->nickname)) {
throw new ApiValidationException(
_('Nickname already in use. Try another one.')
);
} else if (!User_group::allowedNickname($this->nickname)) {
throw new ApiValidationException(
_('Not a valid nickname.')
);
}
return true;
}
function validateHomepage()
{
if (!is_null($this->homepage)
&& (strlen($this->homepage) > 0)
&& !Validate::uri(
$this->homepage,
array('allowed_schemes' => array('http', 'https')
)
)
) {
throw new ApiValidationException(
_('Homepage is not a valid URL.')
);
}
}
function validateFullname()
{
if (!is_null($this->fullname) && mb_strlen($this->fullname) > 255) {
throw new ApiValidationException(
_('Full name is too long (max 255 chars).')
);
}
}
function validateDescription()
{
if (User_group::descriptionTooLong($this->description)) {
throw new ApiValidationException(
sprintf(
_('description is too long (max %d chars).'),
User_group::maxDescription()
)
);
}
}
function validateLocation()
{
if (!is_null($this->location) && mb_strlen($this->location) > 255) {
throw new ApiValidationException(
_('Location is too long (max 255 chars).')
);
}
}
function validateAliases()
{
$aliases = array_map(
'common_canonical_nickname',
array_unique(
preg_split('/[\s,]+/',
$this->aliasstring
)
)
);
if (count($aliases) > common_config('group', 'maxaliases')) {
throw new ApiValidationException(
sprintf(
_('Too many aliases! Maximum %d.'),
common_config('group', 'maxaliases')
)
);
}
foreach ($aliases as $alias) {
if (!Validate::string(
$alias, array(
'min_length' => 1,
'max_length' => 64,
'format' => NICKNAME_FMT)
)
) {
throw new ApiValidationException(
sprintf(
_('Invalid alias: "%s"'),
$alias
)
);
}
if ($this->nicknameExists($alias)) {
throw new ApiValidationException(
sprintf(
_('Alias "%s" already in use. Try another one.'),
$alias)
);
}
// XXX assumes alphanum nicknames
if (strcmp($alias, $this->nickname) == 0) {
throw new ApiValidationException(
_('Alias can\'t be the same as nickname.')
);
}
}
return $aliases;
}
}

View File

@ -49,7 +49,7 @@ class ConfirmaddressAction extends Action
{
/** type of confirmation. */
var $type = null;
var $address;
/**
* Accept a confirmation code
@ -86,39 +86,76 @@ class ConfirmaddressAction extends Action
return;
}
$type = $confirm->address_type;
if (!in_array($type, array('email', 'jabber', 'sms'))) {
// TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
$this->serverError(sprintf(_('Unrecognized address type %s.'), $type));
$transports = array();
Event::handle('GetImTransports', array(&$transports));
if (!in_array($type, array('email', 'sms')) && !in_array($type, array_keys($transports))) {
// TRANS: Server error for an unknown address type, which can be 'email', 'sms', or the name of an IM network (such as 'xmpp' or 'aim')
$this->serverError(sprintf(_('Unrecognized address type %s'), $type));
return;
}
if ($cur->$type == $confirm->address) {
// TRANS: Client error for an already confirmed email/jabbel/sms address.
$this->clientError(_('That address has already been confirmed.'));
return;
}
$this->address = $confirm->address;
$cur->query('BEGIN');
if (in_array($type, array('email', 'sms')))
{
if ($cur->$type == $confirm->address) {
$this->clientError(_('That address has already been confirmed.'));
return;
}
$orig_user = clone($cur);
$orig_user = clone($cur);
$cur->$type = $confirm->address;
$cur->$type = $confirm->address;
if ($type == 'sms') {
$cur->carrier = ($confirm->address_extra)+0;
$carrier = Sms_carrier::staticGet($cur->carrier);
$cur->smsemail = $carrier->toEmailAddress($cur->sms);
}
if ($type == 'sms') {
$cur->carrier = ($confirm->address_extra)+0;
$carrier = Sms_carrier::staticGet($cur->carrier);
$cur->smsemail = $carrier->toEmailAddress($cur->sms);
}
$result = $cur->updateKeys($orig_user);
$result = $cur->updateKeys($orig_user);
if (!$result) {
common_log_db_error($cur, 'UPDATE', __FILE__);
$this->serverError(_('Couldn\'t update user.'));
return;
}
if (!$result) {
common_log_db_error($cur, 'UPDATE', __FILE__);
$this->serverError(_('Couldn\'t update user.'));
return;
}
if ($type == 'email') {
$cur->emailChanged();
}
} else {
$user_im_prefs = new User_im_prefs();
$user_im_prefs->transport = $confirm->address_type;
$user_im_prefs->user_id = $cur->id;
if ($user_im_prefs->find() && $user_im_prefs->fetch()) {
if($user_im_prefs->screenname == $confirm->address){
$this->clientError(_('That address has already been confirmed.'));
return;
}
$user_im_prefs->screenname = $confirm->address;
$result = $user_im_prefs->update();
if (!$result) {
common_log_db_error($user_im_prefs, 'UPDATE', __FILE__);
$this->serverError(_('Couldn\'t update user im preferences.'));
return;
}
}else{
$user_im_prefs = new User_im_prefs();
$user_im_prefs->screenname = $confirm->address;
$user_im_prefs->transport = $confirm->address_type;
$user_im_prefs->user_id = $cur->id;
$result = $user_im_prefs->insert();
if (!$result) {
common_log_db_error($user_im_prefs, 'INSERT', __FILE__);
$this->serverError(_('Couldn\'t insert user im preferences.'));
return;
}
}
if ($type == 'email') {
$cur->emailChanged();
}
$result = $confirm->delete();
@ -130,8 +167,6 @@ class ConfirmaddressAction extends Action
}
$cur->query('COMMIT');
$this->type = $type;
$this->showPage();
}
@ -155,11 +190,10 @@ class ConfirmaddressAction extends Action
function showContent()
{
$cur = common_current_user();
$type = $this->type;
$this->element('p', null,
sprintf(_('The address "%s" has been '.
'confirmed for your account.'),
$cur->$type));
$this->address));
}
}

View File

@ -31,9 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR.'/lib/connectsettingsaction.php';
require_once INSTALLDIR.'/lib/jabber.php';
/**
* Settings for Jabber/XMPP integration
*
@ -72,8 +69,8 @@ class ImsettingsAction extends ConnectSettingsAction
// TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
// TRANS: the order and formatting of link text and link should remain unchanged.
return _('You can send and receive notices through '.
'Jabber/GTalk [instant messages](%%doc.im%%). '.
'Configure your address and settings below.');
'instant messaging [instant messages](%%doc.im%%). '.
'Configure your addresses and settings below.');
}
/**
@ -88,102 +85,124 @@ class ImsettingsAction extends ConnectSettingsAction
function showContent()
{
if (!common_config('xmpp', 'enabled')) {
$transports = array();
Event::handle('GetImTransports', array(&$transports));
if (! $transports) {
$this->element('div', array('class' => 'error'),
// TRANS: Message given in the IM settings if XMPP is not enabled on the site.
// TRANS: Message given in the IM settings if IM is not enabled on the site.
_('IM is not available.'));
return;
}
$user = common_current_user();
$this->elementStart('form', array('method' => 'post',
'id' => 'form_settings_im',
'class' => 'form_settings',
'action' =>
common_local_url('imsettings')));
$this->elementStart('fieldset', array('id' => 'settings_im_address'));
// TRANS: Form legend for IM settings form.
$this->element('legend', null, _('IM address'));
$this->hidden('token', common_session_token());
if ($user->jabber) {
$this->element('p', 'form_confirmed', $user->jabber);
// TRANS: Form note in IM settings form.
$this->element('p', 'form_note',
_('Current confirmed Jabber/GTalk address.'));
$this->hidden('jabber', $user->jabber);
// TRANS: Button label to remove a confirmed IM address.
$this->submit('remove', _m('BUTTON','Remove'));
} else {
$confirm = $this->getConfirmation();
if ($confirm) {
$this->element('p', 'form_unconfirmed', $confirm->address);
$this->element('p', 'form_note',
// TRANS: Form note in IM settings form.
// TRANS: %s is the IM address set for the site.
sprintf(_('Awaiting confirmation on this address. '.
'Check your Jabber/GTalk account for a '.
'message with further instructions. '.
'(Did you add %s to your buddy list?)'),
jabber_daemon_address()));
$this->hidden('jabber', $confirm->address);
// TRANS: Button label to cancel an IM address confirmation procedure.
$this->submit('cancel', _m('BUTTON','Cancel'));
} else {
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
// TRANS: Field label for IM address input in IM settings form.
$this->input('jabber', _('IM address'),
($this->arg('jabber')) ? $this->arg('jabber') : null,
// TRANS: IM address input field instructions in IM settings form.
// TRANS: %s is the IM address set for the site.
sprintf(_('Jabber or GTalk address, '.
'like "UserName@example.org". '.
'First, make sure to add %s to your '.
'buddy list in your IM client or on GTalk.'),
jabber_daemon_address()));
$this->elementEnd('li');
$this->elementEnd('ul');
// TRANS: Button label for adding an IM address in IM settings form.
$this->submit('add', _m('BUTTON','Add'));
}
}
$this->elementEnd('fieldset');
$user_im_prefs_by_transport = array();
$this->elementStart('fieldset', array('id' => 'settings_im_preferences'));
// TRANS: Form legend for IM preferences form.
$this->element('legend', null, _('IM preferences'));
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
$this->checkbox('jabbernotify',
// TRANS: Checkbox label in IM preferences form.
_('Send me notices through Jabber/GTalk.'),
$user->jabbernotify);
$this->elementEnd('li');
$this->elementStart('li');
$this->checkbox('updatefrompresence',
// TRANS: Checkbox label in IM preferences form.
_('Post a notice when my Jabber/GTalk status changes.'),
$user->updatefrompresence);
$this->elementEnd('li');
$this->elementStart('li');
$this->checkbox('jabberreplies',
// TRANS: Checkbox label in IM preferences form.
_('Send me replies through Jabber/GTalk '.
'from people I\'m not subscribed to.'),
$user->jabberreplies);
$this->elementEnd('li');
$this->elementStart('li');
$this->checkbox('jabbermicroid',
// TRANS: Checkbox label in IM preferences form.
_('Publish a MicroID for my Jabber/GTalk address.'),
$user->jabbermicroid);
$this->elementEnd('li');
$this->elementEnd('ul');
// TRANS: Button label to save IM preferences.
$this->submit('save', _m('BUTTON','Save'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
foreach($transports as $transport=>$transport_info)
{
$this->elementStart('form', array('method' => 'post',
'id' => 'form_settings_im',
'class' => 'form_settings',
'action' =>
common_local_url('imsettings')));
$this->elementStart('fieldset', array('id' => 'settings_im_address'));
// TRANS: Form legend for IM settings form.
$this->element('legend', null, $transport_info['display']);
$this->hidden('token', common_session_token());
$this->hidden('transport', $transport);
if ($user_im_prefs = User_im_prefs::pkeyGet( array('transport' => $transport, 'user_id' => $user->id) )) {
$user_im_prefs_by_transport[$transport] = $user_im_prefs;
$this->element('p', 'form_confirmed', $user_im_prefs->screenname);
// TRANS: Form note in IM settings form.
$this->element('p', 'form_note',
sprintf(_('Current confirmed %s address.'),$transport_info['display']));
$this->hidden('screenname', $user_im_prefs->screenname);
// TRANS: Button label to remove a confirmed IM address.
$this->submit('remove', _m('BUTTON','Remove'));
} else {
$confirm = $this->getConfirmation($transport);
if ($confirm) {
$this->element('p', 'form_unconfirmed', $confirm->address);
// TRANS: Form note in IM settings form.
$this->element('p', 'form_note',
// TRANS: Form note in IM settings form.
// TRANS: %s is the IM address set for the site.
sprintf(_('Awaiting confirmation on this address. '.
'Check your %s account for a '.
'message with further instructions. '.
'(Did you add %s to your buddy list?)'),
$transport_info['display'],
$transport_info['daemon_screenname']));
$this->hidden('screenname', $confirm->address);
// TRANS: Button label to cancel an IM address confirmation procedure.
$this->submit('cancel', _m('BUTTON','Cancel'));
} else {
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
$this->input('screenname', _('IM address'),
($this->arg('screenname')) ? $this->arg('screenname') : null,
sprintf(_('%s screenname.'),
$transport_info['display']));
$this->elementEnd('li');
$this->elementEnd('ul');
// TRANS: Button label for adding an IM address in IM settings form.
$this->submit('add', _m('BUTTON','Add'));
}
}
$this->elementEnd('fieldset');
$this->elementEnd('form');
}
if($user_im_prefs_by_transport)
{
$this->elementStart('form', array('method' => 'post',
'id' => 'form_settings_im',
'class' => 'form_settings',
'action' =>
common_local_url('imsettings')));
$this->elementStart('fieldset', array('id' => 'settings_im_preferences'));
// TRANS: Header for IM preferences form.
$this->element('legend', null, _('IM Preferences'));
$this->hidden('token', common_session_token());
$this->elementStart('table');
$this->elementStart('tr');
foreach($user_im_prefs_by_transport as $transport=>$user_im_prefs)
{
$this->element('th', null, $transports[$transport]['display']);
}
$this->elementEnd('tr');
$preferences = array(
// TRANS: Checkbox label in IM preferences form.
array('name'=>'notify', 'description'=>_('Send me notices')),
// TRANS: Checkbox label in IM preferences form.
array('name'=>'updatefrompresence', 'description'=>_('Post a notice when my status changes.')),
// TRANS: Checkbox label in IM preferences form.
array('name'=>'replies', 'description'=>_('Send me replies '.
'from people I\'m not subscribed to.')),
// TRANS: Checkbox label in IM preferences form.
array('name'=>'microid', 'description'=>_('Publish a MicroID'))
);
foreach($preferences as $preference)
{
$this->elementStart('tr');
foreach($user_im_prefs_by_transport as $transport=>$user_im_prefs)
{
$preference_name = $preference['name'];
$this->elementStart('td');
$this->checkbox($transport . '_' . $preference['name'],
$preference['description'],
$user_im_prefs->$preference_name);
$this->elementEnd('td');
}
$this->elementEnd('tr');
}
$this->elementEnd('table');
// TRANS: Button label to save IM preferences.
$this->submit('save', _m('BUTTON','Save'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
}
}
/**
@ -192,14 +211,14 @@ class ImsettingsAction extends ConnectSettingsAction
* @return Confirm_address address object for this user
*/
function getConfirmation()
function getConfirmation($transport)
{
$user = common_current_user();
$confirm = new Confirm_address();
$confirm->user_id = $user->id;
$confirm->address_type = 'jabber';
$confirm->address_type = $transport;
if ($confirm->find(true)) {
return $confirm;
@ -254,35 +273,33 @@ class ImsettingsAction extends ConnectSettingsAction
function savePreferences()
{
$jabbernotify = $this->boolean('jabbernotify');
$updatefrompresence = $this->boolean('updatefrompresence');
$jabberreplies = $this->boolean('jabberreplies');
$jabbermicroid = $this->boolean('jabbermicroid');
$user = common_current_user();
assert(!is_null($user)); // should already be checked
$user_im_prefs = new User_im_prefs();
$user_im_prefs->query('BEGIN');
$user_im_prefs->user_id = $user->id;
if($user_im_prefs->find() && $user_im_prefs->fetch())
{
$preferences = array('notify', 'updatefrompresence', 'replies', 'microid');
do
{
$original = clone($user_im_prefs);
$new = clone($user_im_prefs);
foreach($preferences as $preference)
{
$new->$preference = $this->boolean($new->transport . '_' . $preference);
}
$result = $new->update($original);
$user->query('BEGIN');
$original = clone($user);
$user->jabbernotify = $jabbernotify;
$user->updatefrompresence = $updatefrompresence;
$user->jabberreplies = $jabberreplies;
$user->jabbermicroid = $jabbermicroid;
$result = $user->update($original);
if ($result === false) {
common_log_db_error($user, 'UPDATE', __FILE__);
// TRANS: Server error thrown on database error updating IM preferences.
$this->serverError(_('Couldn\'t update user.'));
return;
if ($result === false) {
common_log_db_error($user, 'UPDATE', __FILE__);
// TRANS: Server error thrown on database error updating IM preferences.
$this->serverError(_('Couldn\'t update IM preferences.'));
return;
}
}while($user_im_prefs->fetch());
}
$user->query('COMMIT');
$user_im_prefs->query('COMMIT');
// TRANS: Confirmation message for successful IM preferences save.
$this->showForm(_('Preferences saved.'), true);
}
@ -291,7 +308,7 @@ class ImsettingsAction extends ConnectSettingsAction
* Sends a confirmation to the address given
*
* Stores a confirmation record and sends out a
* Jabber message with the confirmation info.
* message with the confirmation info.
*
* @return void
*/
@ -300,41 +317,45 @@ class ImsettingsAction extends ConnectSettingsAction
{
$user = common_current_user();
$jabber = $this->trimmed('jabber');
$screenname = $this->trimmed('screenname');
$transport = $this->trimmed('transport');
// Some validation
if (!$jabber) {
if (!$screenname) {
// TRANS: Message given saving IM address without having provided one.
$this->showForm(_('No Jabber ID.'));
$this->showForm(_('No screenname.'));
return;
}
$jabber = jabber_normalize_jid($jabber);
if (!$transport) {
$this->showForm(_('No transport.'));
return;
}
if (!$jabber) {
Event::handle('NormalizeImScreenname', array($transport, &$screenname));
if (!$screenname) {
// TRANS: Message given saving IM address that cannot be normalised.
$this->showForm(_('Cannot normalize that Jabber ID'));
$this->showForm(_('Cannot normalize that screenname'));
return;
}
if (!jabber_valid_base_jid($jabber, common_config('email', 'domain_check'))) {
$valid = false;
Event::handle('ValidateImScreenname', array($transport, $screenname, &$valid));
if (!$valid) {
// TRANS: Message given saving IM address that not valid.
$this->showForm(_('Not a valid Jabber ID'));
$this->showForm(_('Not a valid screenname'));
return;
} else if ($user->jabber == $jabber) {
// TRANS: Message given saving IM address that is already set.
$this->showForm(_('That is already your Jabber ID.'));
return;
} else if ($this->jabberExists($jabber)) {
} else if ($this->screennameExists($transport, $screenname)) {
// TRANS: Message given saving IM address that is already set for another user.
$this->showForm(_('Jabber ID already belongs to another user.'));
$this->showForm(_('Screenname already belongs to another user.'));
return;
}
$confirm = new Confirm_address();
$confirm->address = $jabber;
$confirm->address_type = 'jabber';
$confirm->address = $screenname;
$confirm->address_type = $transport;
$confirm->user_id = $user->id;
$confirm->code = common_confirmation_code(64);
$confirm->sent = common_sql_now();
@ -349,17 +370,11 @@ class ImsettingsAction extends ConnectSettingsAction
return;
}
jabber_confirm_address($confirm->code,
$user->nickname,
$jabber);
Event::handle('SendImConfirmationCode', array($transport, $screenname, $confirm->code, $user));
// TRANS: Message given saving valid IM address that is to be confirmed.
// TRANS: %s is the IM address set for the site.
$msg = sprintf(_('A confirmation code was sent '.
'to the IM address you added. '.
'You must approve %s for '.
'sending messages to you.'),
jabber_daemon_address());
$msg = _('A confirmation code was sent '.
'to the IM address you added.');
$this->showForm($msg, true);
}
@ -374,16 +389,17 @@ class ImsettingsAction extends ConnectSettingsAction
function cancelConfirmation()
{
$jabber = $this->arg('jabber');
$screenname = $this->trimmed('screenname');
$transport = $this->trimmed('transport');
$confirm = $this->getConfirmation();
$confirm = $this->getConfirmation($transport);
if (!$confirm) {
// TRANS: Message given canceling IM address confirmation that is not pending.
$this->showForm(_('No pending confirmation to cancel.'));
return;
}
if ($confirm->address != $jabber) {
if ($confirm->address != $screenname) {
// TRANS: Message given canceling IM address confirmation for the wrong IM address.
$this->showForm(_('That is the wrong IM address.'));
return;
@ -394,7 +410,7 @@ class ImsettingsAction extends ConnectSettingsAction
if (!$result) {
common_log_db_error($confirm, 'DELETE', __FILE__);
// TRANS: Server error thrown on database error canceling IM address confirmation.
$this->serverError(_('Couldn\'t delete IM confirmation.'));
$this->serverError(_('Couldn\'t delete confirmation.'));
return;
}
@ -414,32 +430,29 @@ class ImsettingsAction extends ConnectSettingsAction
{
$user = common_current_user();
$jabber = $this->arg('jabber');
$screenname = $this->trimmed('screenname');
$transport = $this->trimmed('transport');
// Maybe an old tab open...?
if ($user->jabber != $jabber) {
$user_im_prefs = new User_im_prefs();
$user_im_prefs->user_id = $user->id;
if(! ($user_im_prefs->find() && $user_im_prefs->fetch())) {
// TRANS: Message given trying to remove an IM address that is not
// TRANS: registered for the active user.
$this->showForm(_('That is not your Jabber ID.'));
$this->showForm(_('That is not your screenname.'));
return;
}
$user->query('BEGIN');
$original = clone($user);
$user->jabber = null;
$result = $user->updateKeys($original);
$result = $user_im_prefs->delete();
if (!$result) {
common_log_db_error($user, 'UPDATE', __FILE__);
// TRANS: Server error thrown on database error removing a registered IM address.
$this->serverError(_('Couldn\'t update user im prefs.'));
$this->serverError(_('Couldn\'t update user.'));
return;
}
$user->query('COMMIT');
// XXX: unsubscribe to the old address
@ -448,25 +461,27 @@ class ImsettingsAction extends ConnectSettingsAction
}
/**
* Does this Jabber ID exist?
* Does this screenname exist?
*
* Checks if we already have another user with this address.
*
* @param string $jabber Address to check
* @param string $transport Transport to check
* @param string $screenname Screenname to check
*
* @return boolean whether the Jabber ID exists
* @return boolean whether the screenname exists
*/
function jabberExists($jabber)
function screennameExists($transport, $screenname)
{
$user = common_current_user();
$other = User::staticGet('jabber', $jabber);
if (!$other) {
$user_im_prefs = new User_im_prefs();
$user_im_prefs->transport = $transport;
$user_im_prefs->screenname = $screenname;
if($user_im_prefs->find() && $user_im_prefs->fetch()){
return true;
}else{
return false;
} else {
return $other->id != $user->id;
}
}
}

View File

@ -98,8 +98,10 @@ class OthersettingsAction extends AccountSettingsAction
$this->hidden('token', common_session_token());
$this->elementStart('ul', 'form_data');
$shorteners = array();
$shorteners = array(_('[none]') => array('freeService' => false));
Event::handle('GetUrlShorteners', array(&$shorteners));
$services = array();
foreach($shorteners as $name=>$value)
{
@ -119,8 +121,22 @@ class OthersettingsAction extends AccountSettingsAction
$this->elementEnd('li');
}
$this->elementStart('li');
$this->input('maxurllength',
_('URL longer than'),
(!is_null($this->arg('maxurllength'))) ?
$this->arg('maxurllength') : User_urlshortener_prefs::maxUrlLength($user),
_('URLs longer than this will be shortened.'));
$this->elementEnd('li');
$this->elementStart('li');
$this->input('maxnoticelength',
_('Text longer than'),
(!is_null($this->arg('maxnoticelength'))) ?
$this->arg('maxnoticelength') : User_urlshortener_prefs::maxNoticeLength($user),
_('URLs in notices longer than this will be shortened.'));
$this->elementEnd('li');
$this->elementStart('li');
$this->checkbox('viewdesigns', _('View profile designs'),
$user->viewdesigns, _('Show or hide profile designs.'));
- $user->viewdesigns, _('Show or hide profile designs.'));
$this->elementEnd('li');
$this->elementEnd('ul');
$this->submit('save', _('Save'));
@ -156,6 +172,18 @@ class OthersettingsAction extends AccountSettingsAction
$viewdesigns = $this->boolean('viewdesigns');
$maxurllength = $this->trimmed('maxurllength');
if (!Validate::number($maxurllength, array('min' => 0))) {
throw new ClientException(_('Invalid number for max url length.'));
}
$maxnoticelength = $this->trimmed('maxnoticelength');
if (!Validate::number($maxnoticelength, array('min' => 0))) {
throw new ClientException(_('Invalid number for max notice length.'));
}
$user = common_current_user();
assert(!is_null($user)); // should already be checked
@ -175,6 +203,32 @@ class OthersettingsAction extends AccountSettingsAction
return;
}
$prefs = User_urlshortener_prefs::getPrefs($user);
$orig = null;
if (empty($prefs)) {
$prefs = new User_urlshortener_prefs();
$prefs->user_id = $user->id;
$prefs->created = common_sql_now();
} else {
$orig = clone($prefs);
}
$prefs->urlshorteningservice = $urlshorteningservice;
$prefs->maxurllength = $maxurllength;
$prefs->maxnoticelength = $maxnoticelength;
if (!empty($orig)) {
$result = $prefs->update($orig);
} else {
$result = $prefs->insert();
}
if (!$result) {
throw new ServerException(_('Error saving user URL shortening preferences.'));
}
$user->query('COMMIT');
$this->showForm(_('Preferences saved.'), true);

78
actions/plugindisable.php Normal file
View File

@ -0,0 +1,78 @@
<?php
/**
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2010, StatusNet, Inc.
*
* Plugin enable action.
*
* 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/>.
*
* PHP version 5
*
* @category Action
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
if (!defined('STATUSNET')) {
exit(1);
}
/**
* Plugin enable action.
*
* (Re)-enables a plugin from the default plugins list.
*
* Takes parameters:
*
* - plugin: plugin name
* - token: session token to prevent CSRF attacks
* - ajax: boolean; whether to return Ajax or full-browser results
*
* Only works if the current user is logged in.
*
* @category Action
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
class PluginDisableAction extends PluginEnableAction
{
/**
* Value to save into $config['plugins']['disable-<name>']
*/
protected function overrideValue()
{
return 1;
}
protected function successShortTitle()
{
// TRANS: Page title for AJAX form return when a disabling a plugin.
return _m('plugin', 'Disabled');
}
protected function successNextForm()
{
return new EnablePluginForm($this, $this->plugin);
}
}

166
actions/pluginenable.php Normal file
View File

@ -0,0 +1,166 @@
<?php
/**
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2010, StatusNet, Inc.
*
* Plugin enable action.
*
* 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/>.
*
* PHP version 5
*
* @category Action
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
if (!defined('STATUSNET')) {
exit(1);
}
/**
* Plugin enable action.
*
* (Re)-enables a plugin from the default plugins list.
*
* Takes parameters:
*
* - plugin: plugin name
* - token: session token to prevent CSRF attacks
* - ajax: boolean; whether to return Ajax or full-browser results
*
* Only works if the current user is logged in.
*
* @category Action
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
class PluginEnableAction extends Action
{
var $user;
var $plugin;
/**
* Check pre-requisites and instantiate attributes
*
* @param Array $args array of arguments (URL, GET, POST)
*
* @return boolean success flag
*/
function prepare($args)
{
parent::prepare($args);
// @fixme these are pretty common, should a parent class factor these out?
// Only allow POST requests
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
$this->clientError(_('This action only accepts POST requests.'));
return false;
}
// CSRF protection
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
$this->clientError(_('There was a problem with your session token.'.
' Try again, please.'));
return false;
}
// Only for logged-in users
$this->user = common_current_user();
if (empty($this->user)) {
$this->clientError(_('Not logged in.'));
return false;
}
if (!AdminPanelAction::canAdmin('plugins')) {
$this->clientError(_('You cannot administer plugins.'));
return false;
}
$this->plugin = $this->arg('plugin');
$defaultPlugins = common_config('plugins', 'default');
if (!array_key_exists($this->plugin, $defaultPlugins)) {
$this->clientError(_('No such plugin.'));
return false;
}
return true;
}
/**
* Handle request
*
* Does the subscription and returns results.
*
* @param Array $args unused.
*
* @return void
*/
function handle($args)
{
$key = 'disable-' . $this->plugin;
Config::save('plugins', $key, $this->overrideValue());
// @fixme this is a pretty common pattern and should be refactored down
if ($this->boolean('ajax')) {
$this->startHTML('text/xml;charset=utf-8');
$this->elementStart('head');
$this->element('title', null, $this->successShortTitle());
$this->elementEnd('head');
$this->elementStart('body');
$form = $this->successNextForm();
$form->show();
$this->elementEnd('body');
$this->elementEnd('html');
} else {
$url = common_local_url('pluginsadminpanel');
common_redirect($url, 303);
}
}
/**
* Value to save into $config['plugins']['disable-<name>']
*/
protected function overrideValue()
{
return 0;
}
protected function successShortTitle()
{
// TRANS: Page title for AJAX form return when enabling a plugin.
return _m('plugin', 'Enabled');
}
protected function successNextForm()
{
return new DisablePluginForm($this, $this->plugin);
}
}

View File

@ -0,0 +1,110 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Plugins administration panel
*
* 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 Settings
* @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')) {
exit(1);
}
/**
* Plugins settings
*
* @category Admin
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
class PluginsadminpanelAction extends AdminPanelAction
{
/**
* Returns the page title
*
* @return string page title
*/
function title()
{
// TRANS: Tab and title for plugins admin panel.
return _('Plugins');
}
/**
* Instructions for using this form.
*
* @return string instructions
*/
function getInstructions()
{
// TRANS: Instructions at top of plugin admin page.
return _('Additional plugins can be enabled and configured manually. ' .
'See the <a href="http://status.net/wiki/Plugins">online plugin ' .
'documentation</a> for more details.');
}
/**
* Show the plugins admin panel form
*
* @return void
*/
function showForm()
{
$this->elementStart('fieldset', array('id' => 'settings_plugins_default'));
// TRANS: Admin form section header
$this->element('legend', null, _('Default plugins'), 'default');
$this->showDefaultPlugins();
$this->elementEnd('fieldset');
}
/**
* Until we have a general plugin metadata infrastructure, for now
* we'll just list up the ones we know from the global default
* plugins list.
*/
protected function showDefaultPlugins()
{
$plugins = array_keys(common_config('plugins', 'default'));
natsort($plugins);
if ($plugins) {
$list = new PluginList($plugins, $this);
$list->show();
} else {
$this->element('p', null,
_('All default plugins have been disabled from the ' .
'site\'s configuration file.'));
}
}
}

View File

@ -196,18 +196,18 @@ class RepliesAction extends OwnerDesignAction
function showEmptyListMessage()
{
$message = sprintf(_('This is the timeline showing replies to %1$s but %2$s hasn\'t received a notice to their attention yet.'), $this->user->nickname, $this->user->nickname) . ' ';
$message = sprintf(_('This is the timeline showing replies to %1$s but %2$s hasn\'t received a notice to them yet.'), $this->user->nickname, $this->user->nickname) . ' ';
if (common_logged_in()) {
$current_user = common_current_user();
if ($this->user->id === $current_user->id) {
$message .= _('You can engage other users in a conversation, subscribe to more people or [join groups](%%action.groups%%).');
} else {
$message .= sprintf(_('You can try to [nudge %1$s](../%2$s) or [post something to their attention](%%%%action.newnotice%%%%?status_textarea=%3$s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname);
$message .= sprintf(_('You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action.newnotice%%%%?status_textarea=%3$s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname);
}
}
else {
$message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to their attention.'), $this->user->nickname);
$message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to them.'), $this->user->nickname);
}
$this->elementStart('div', 'guide');

View File

@ -277,12 +277,6 @@ class ShownoticeAction extends OwnerDesignAction
'content' => $id->toString()));
}
if ($user->jabbermicroid && $user->jabber && $this->notice->uri) {
$id = new Microid('xmpp:', $user->jabber,
$this->notice->uri);
$this->element('meta', array('name' => 'microid',
'content' => $id->toString()));
}
$this->element('link',array('rel'=>'alternate',
'type'=>'application/json+oembed',
'href'=>common_local_url(

View File

@ -166,12 +166,6 @@ class ShowstreamAction extends ProfileAction
$this->element('meta', array('name' => 'microid',
'content' => $id->toString()));
}
if ($this->user->jabbermicroid && $this->user->jabber && $this->profile->profileurl) {
$id = new Microid('xmpp:'.$this->user->jabber,
$this->selfUrl());
$this->element('meta', array('name' => 'microid',
'content' => $id->toString()));
}
// See https://wiki.mozilla.org/Microsummaries
@ -204,11 +198,11 @@ class ShowstreamAction extends ProfileAction
if ($this->user->id === $current_user->id) {
$message .= _('Seen anything interesting recently? You haven\'t posted any notices yet, now would be a good time to start :)');
} else {
$message .= sprintf(_('You can try to nudge %1$s or [post something to their attention](%%%%action.newnotice%%%%?status_textarea=%2$s).'), $this->user->nickname, '@' . $this->user->nickname);
$message .= sprintf(_('You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%%?status_textarea=%2$s).'), $this->user->nickname, '@' . $this->user->nickname);
}
}
else {
$message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to their attention.'), $this->user->nickname);
$message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to them.'), $this->user->nickname);
}
$this->elementStart('div', 'guide');

View File

@ -185,7 +185,9 @@ class SubscriptionsListItem extends SubscriptionListItem
return;
}
if (!common_config('xmpp', 'enabled') && !common_config('sms', 'enabled')) {
$transports = array();
Event::handle('GetImTransports', array(&$transports));
if (!$transports && !common_config('sms', 'enabled')) {
return;
}
@ -195,7 +197,7 @@ class SubscriptionsListItem extends SubscriptionListItem
'action' => common_local_url('subedit')));
$this->out->hidden('token', common_session_token());
$this->out->hidden('profile', $this->profile->id);
if (common_config('xmpp', 'enabled')) {
if ($transports) {
$attrs = array('name' => 'jabber',
'type' => 'checkbox',
'class' => 'checkbox',
@ -205,7 +207,7 @@ class SubscriptionsListItem extends SubscriptionListItem
}
$this->out->element('input', $attrs);
$this->out->element('label', array('for' => 'jabber-'.$this->profile->id), _('Jabber'));
$this->out->element('label', array('for' => 'jabber-'.$this->profile->id), _('IM'));
} else {
$this->out->hidden('jabber', $sub->jabber);
}

View File

@ -139,7 +139,8 @@ class File extends Memcached_DataObject
$redir_url = $redir_data;
$redir_data = array();
} else {
throw new ServerException("Can't process url '$given_url'");
// TRANS: Server exception thrown when a URL cannot be processed.
throw new ServerException(sprintf(_("Cannot process URL '%s'"), $given_url));
}
// TODO: max field length
if ($redir_url === $given_url || strlen($redir_url) > 255 || !$followRedirects) {
@ -169,7 +170,9 @@ class File extends Memcached_DataObject
if (empty($x)) {
$x = File::staticGet($file_id);
if (empty($x)) {
throw new ServerException("Robin thinks something is impossible.");
// FIXME: This could possibly be a clearer message :)
// TRANS: Server exception thrown when... Robin thinks something is impossible!
throw new ServerException(_("Robin thinks something is impossible."));
}
}
@ -182,8 +185,10 @@ class File extends Memcached_DataObject
function isRespectsQuota($user,$fileSize) {
if ($fileSize > common_config('attachments', 'file_quota')) {
return sprintf(_('No file may be larger than %d bytes ' .
'and the file you sent was %d bytes. Try to upload a smaller version.'),
// TRANS: Message given if an upload is larger than the configured maximum.
// TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
return sprintf(_('No file may be larger than %1$d bytes ' .
'and the file you sent was %2$d bytes. Try to upload a smaller version.'),
common_config('attachments', 'file_quota'), $fileSize);
}
@ -192,6 +197,8 @@ class File extends Memcached_DataObject
$this->fetch();
$total = $this->total + $fileSize;
if ($total > common_config('attachments', 'user_quota')) {
// TRANS: Message given if an upload would exceed user quota.
// TRANS: %d (number) is the user quota in bytes.
return sprintf(_('A file this large would exceed your user quota of %d bytes.'), common_config('attachments', 'user_quota'));
}
$query .= ' AND EXTRACT(month FROM file.modified) = EXTRACT(month FROM now()) and EXTRACT(year FROM file.modified) = EXTRACT(year FROM now())';
@ -199,6 +206,8 @@ class File extends Memcached_DataObject
$this->fetch();
$total = $this->total + $fileSize;
if ($total > common_config('attachments', 'monthly_quota')) {
// TRANS: Message given id an upload would exceed a user's monthly quota.
// TRANS: $d (number) is the monthly user quota in bytes.
return sprintf(_('A file this large would exceed your monthly quota of %d bytes.'), common_config('attachments', 'monthly_quota'));
}
return true;
@ -235,7 +244,8 @@ class File extends Memcached_DataObject
static function path($filename)
{
if (!self::validFilename($filename)) {
throw new ClientException("Invalid filename");
// TRANS: Client exception thrown if a file upload does not have a valid name.
throw new ClientException(_("Invalid filename."));
}
$dir = common_config('attachments', 'dir');
@ -249,7 +259,8 @@ class File extends Memcached_DataObject
static function url($filename)
{
if (!self::validFilename($filename)) {
throw new ClientException("Invalid filename");
// TRANS: Client exception thrown if a file upload does not have a valid name.
throw new ClientException(_("Invalid filename."));
}
if(common_config('site','private')) {
@ -342,4 +353,3 @@ class File extends Memcached_DataObject
return !empty($enclosure);
}
}

View File

@ -176,22 +176,52 @@ class File_redirection extends Memcached_DataObject
* @param string $long_url
* @return string
*/
function makeShort($long_url) {
function makeShort($long_url)
{
$canon = File_redirection::_canonUrl($long_url);
$short_url = File_redirection::_userMakeShort($canon);
// Did we get one? Is it shorter?
if (!empty($short_url) && mb_strlen($short_url) < mb_strlen($long_url)) {
if (!empty($short_url)) {
return $short_url;
} else {
return $long_url;
}
}
function _userMakeShort($long_url) {
$short_url = common_shorten_url($long_url);
/**
* Shorten a URL with the current user's configured shortening
* options, if applicable.
*
* If it cannot be shortened or the "short" URL is longer than the
* original, the original is returned.
*
* If the referenced item has not been seen before, embedding data
* may be saved.
*
* @param string $long_url
* @return string
*/
function forceShort($long_url)
{
$canon = File_redirection::_canonUrl($long_url);
$short_url = File_redirection::_userMakeShort($canon, true);
// Did we get one? Is it shorter?
if (!empty($short_url)) {
return $short_url;
} else {
return $long_url;
}
}
function _userMakeShort($long_url, $force = false) {
$short_url = common_shorten_url($long_url, $force);
if (!empty($short_url) && $short_url != $long_url) {
$short_url = (string)$short_url;
// store it

View File

@ -38,6 +38,7 @@ class Group_member extends Memcached_DataObject
if (!$result) {
common_log_db_error($member, 'INSERT', __FILE__);
// TRANS: Exception thrown when joining a group fails.
throw new Exception(_("Group join failed."));
}
@ -50,6 +51,7 @@ class Group_member extends Memcached_DataObject
'profile_id' => $profile_id));
if (empty($member)) {
// TRANS: Exception thrown when trying to leave a group the user is not a member of.
throw new Exception(_("Not part of group."));
}
@ -57,6 +59,7 @@ class Group_member extends Memcached_DataObject
if (!$result) {
common_log_db_error($member, 'INSERT', __FILE__);
// TRANS: Exception thrown when trying to leave a group fails.
throw new Exception(_("Group leave failed."));
}

View File

@ -38,6 +38,7 @@ class Local_group extends Memcached_DataObject
$this->encache();
} else {
common_log_db_error($local, 'UPDATE', __FILE__);
// TRANS: Server exception thrown when updating a local group fails.
throw new ServerException(_('Could not update local group.'));
}

View File

@ -73,6 +73,8 @@ class Login_token extends Memcached_DataObject
if (!$result) {
common_log_db_error($login_token, 'INSERT', __FILE__);
// TRANS: Exception thrown when trying creating a login token failed.
// TRANS: %s is the user nickname for which token creation failed.
throw new Exception(sprintf(_('Could not create login token for %s'),
$user->nickname));
}

View File

@ -235,6 +235,7 @@ class Memcached_DataObject extends Safe_DataObject
$pkey[] = $key;
$pval[] = self::valueString($this->$key);
} else {
// Low level exception. No need for i18n as discussed with Brion.
throw new Exception("Unknown key type $key => $type for " . $this->tableName());
}
}
@ -282,6 +283,7 @@ class Memcached_DataObject extends Safe_DataObject
} else if ($type == 'fulltext') {
$search_engine = new MySQLSearch($this, $table);
} else {
// Low level exception. No need for i18n as discussed with Brion.
throw new ServerException('Unknown search type: ' . $type);
}
} else {
@ -527,7 +529,8 @@ class Memcached_DataObject extends Safe_DataObject
}
if (!$dsn) {
throw new Exception("No database name / dsn found anywhere");
// TRANS: Exception thrown when database name or Data Source Name could not be found.
throw new Exception(_("No database name or DSN found anywhere."));
}
return $dsn;
@ -571,12 +574,13 @@ class Memcached_DataObject extends Safe_DataObject
function raiseError($message, $type = null, $behaviour = null)
{
$id = get_class($this);
if ($this->id) {
if (!empty($this->id)) {
$id .= ':' . $this->id;
}
if ($message instanceof PEAR_Error) {
$message = $message->getMessage();
}
// Low level exception. No need for i18n as discussed with Brion.
throw new ServerException("[$id] DB_DataObject error [$type]: $message");
}
@ -619,9 +623,11 @@ class Memcached_DataObject extends Safe_DataObject
case 'sql':
case 'datetime':
case 'time':
// Low level exception. No need for i18n as discussed with Brion.
throw new ServerException("Unhandled DB_DataObject_Cast type passed as cacheKey value: '$v->type'");
break;
default:
// Low level exception. No need for i18n as discussed with Brion.
throw new ServerException("Unknown DB_DataObject_Cast type passed as cacheKey value: '$v->type'");
break;
}

View File

@ -42,6 +42,7 @@ class Message extends Memcached_DataObject
$sender = Profile::staticGet('id', $from);
if (!$sender->hasRight(Right::NEWMESSAGE)) {
// TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
throw new ClientException(_('You are banned from sending direct messages.'));
}
@ -58,6 +59,7 @@ class Message extends Memcached_DataObject
if (!$result) {
common_log_db_error($msg, 'INSERT', __FILE__);
// TRANS: Message given when a message could not be stored on the server.
return _('Could not insert message.');
}
@ -68,6 +70,7 @@ class Message extends Memcached_DataObject
if (!$result) {
common_log_db_error($msg, 'UPDATE', __FILE__);
// TRANS: Message given when a message could not be updated on the server.
return _('Could not update message with new URI.');
}

View File

@ -93,7 +93,9 @@ class Notice extends Memcached_DataObject
$profile = Profile::staticGet('id', $this->profile_id);
if (empty($profile)) {
throw new ServerException(sprintf(_('No such profile (%d) for notice (%d)'), $this->profile_id, $this->id));
// TRANS: Server exception thrown when a user profile for a notice cannot be found.
// TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
throw new ServerException(sprintf(_('No such profile (%1$d) for notice (%2$d).'), $this->profile_id, $this->id));
}
return $profile;
@ -254,27 +256,33 @@ class Notice extends Memcached_DataObject
$final = common_shorten_links($content);
if (Notice::contentTooLong($final)) {
// TRANS: Client exception thrown if a notice contains too many characters.
throw new ClientException(_('Problem saving notice. Too long.'));
}
if (empty($profile)) {
// TRANS: Client exception thrown when trying to save a notice for an unknown user.
throw new ClientException(_('Problem saving notice. Unknown user.'));
}
if (common_config('throttle', 'enabled') && !Notice::checkEditThrottle($profile_id)) {
common_log(LOG_WARNING, 'Excessive posting by profile #' . $profile_id . '; throttled.');
// TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
throw new ClientException(_('Too many notices too fast; take a breather '.
'and post again in a few minutes.'));
}
if (common_config('site', 'dupelimit') > 0 && !Notice::checkDupes($profile_id, $final)) {
common_log(LOG_WARNING, 'Dupe posting by profile #' . $profile_id . '; throttled.');
// TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
throw new ClientException(_('Too many duplicate messages too quickly;'.
' take a breather and post again in a few minutes.'));
}
if (!$profile->hasRight(Right::NEWNOTICE)) {
common_log(LOG_WARNING, "Attempted post from user disallowed to post: " . $profile->nickname);
// TRANS: Client exception thrown when a user tries to post while being banned.
throw new ClientException(_('You are banned from posting notices on this site.'), 403);
}
@ -341,6 +349,7 @@ class Notice extends Memcached_DataObject
if (!$id) {
common_log_db_error($notice, 'INSERT', __FILE__);
// TRANS: Server exception thrown when a notice cannot be saved.
throw new ServerException(_('Problem saving notice.'));
}
@ -367,6 +376,7 @@ class Notice extends Memcached_DataObject
if ($changed) {
if (!$notice->update($orig)) {
common_log_db_error($notice, 'UPDATE', __FILE__);
// TRANS: Server exception thrown when a notice cannot be updated.
throw new ServerException(_('Problem saving notice.'));
}
}
@ -878,7 +888,8 @@ class Notice extends Memcached_DataObject
function saveKnownGroups($group_ids)
{
if (!is_array($group_ids)) {
throw new ServerException("Bad type provided to saveKnownGroups");
// TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
throw new ServerException(_("Bad type provided to saveKnownGroups"));
}
$groups = array();
@ -976,6 +987,7 @@ class Notice extends Memcached_DataObject
if (!$result) {
common_log_db_error($gi, 'INSERT', __FILE__);
// TRANS: Server exception thrown when an update for a group inbox fails.
throw new ServerException(_('Problem saving group inbox.'));
}
@ -1081,7 +1093,9 @@ class Notice extends Memcached_DataObject
if (!$id) {
common_log_db_error($reply, 'INSERT', __FILE__);
throw new ServerException("Couldn't save reply for {$this->id}, {$mentioned->id}");
// TRANS: Server exception thrown when a reply cannot be saved.
// TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user.
throw new ServerException(sprintf(_("Could not save reply for %1$d, %2$d."), $this->id, $mentioned->id));
} else {
$replied[$mentioned->id] = 1;
self::blow('reply:stream:%d', $mentioned->id);
@ -1184,6 +1198,9 @@ class Notice extends Memcached_DataObject
return $groups;
}
// This has gotten way too long. Needs to be sliced up into functional bits
// or ideally exported to a utility class.
function asAtomEntry($namespace=false, $source=false, $author=true, $cur=null)
{
$profile = $this->getProfile();
@ -1203,74 +1220,176 @@ class Notice extends Memcached_DataObject
$attrs = array();
}
$xs->elementStart('entry', $attrs);
if (Event::handle('StartActivityStart', array(&$this, &$xs, &$attrs))) {
$xs->elementStart('entry', $attrs);
Event::handle('EndActivityStart', array(&$this, &$xs, &$attrs));
}
if ($source) {
$xs->elementStart('source');
$xs->element('id', null, $profile->profileurl);
$xs->element('title', null, $profile->nickname . " - " . common_config('site', 'name'));
$xs->element('link', array('href' => $profile->profileurl));
$user = User::staticGet('id', $profile->id);
if (!empty($user)) {
$atom_feed = common_local_url('ApiTimelineUser',
array('format' => 'atom',
'id' => $profile->nickname));
$xs->element('link', array('rel' => 'self',
'type' => 'application/atom+xml',
'href' => $profile->profileurl));
$xs->element('link', array('rel' => 'license',
'href' => common_config('license', 'url')));
if (Event::handle('StartActivitySource', array(&$this, &$xs))) {
if ($source) {
$atom_feed = $profile->getAtomFeed();
if (!empty($atom_feed)) {
$xs->elementStart('source');
// XXX: we should store the actual feed ID
$xs->element('id', null, $atom_feed);
// XXX: we should store the actual feed title
$xs->element('title', null, $profile->getBestName());
$xs->element('link', array('rel' => 'alternate',
'type' => 'text/html',
'href' => $profile->profileurl));
$xs->element('link', array('rel' => 'self',
'type' => 'application/atom+xml',
'href' => $atom_feed));
$xs->element('icon', null, $profile->avatarUrl(AVATAR_PROFILE_SIZE));
$notice = $profile->getCurrentNotice();
if (!empty($notice)) {
$xs->element('updated', null, self::utcDate($notice->created));
}
$user = User::staticGet('id', $profile->id);
if (!empty($user)) {
$xs->element('link', array('rel' => 'license',
'href' => common_config('license', 'url')));
}
$xs->elementEnd('source');
}
}
$xs->element('icon', null, $profile->avatarUrl(AVATAR_PROFILE_SIZE));
$xs->element('updated', null, common_date_w3dtf($this->created));
Event::handle('EndActivitySource', array(&$this, &$xs));
}
if ($source) {
$xs->elementEnd('source');
$title = common_xml_safe_str($this->content);
if (Event::handle('StartActivityTitle', array(&$this, &$xs, &$title))) {
$xs->element('title', null, $title);
Event::handle('EndActivityTitle', array($this, &$xs, $title));
}
$xs->element('title', null, common_xml_safe_str($this->content));
$atomAuthor = '';
if ($author) {
$xs->raw($profile->asAtomAuthor($cur));
$xs->raw($profile->asActivityActor());
$atomAuthor = $profile->asAtomAuthor($cur);
}
$xs->element('link', array('rel' => 'alternate',
'type' => 'text/html',
'href' => $this->bestUrl()));
$xs->element('id', null, $this->uri);
$xs->element('published', null, common_date_w3dtf($this->created));
$xs->element('updated', null, common_date_w3dtf($this->created));
$source = null;
$ns = $this->getSource();
if ($ns) {
if (!empty($ns->name) && !empty($ns->url)) {
$source = '<a href="'
. htmlspecialchars($ns->url)
. '" rel="nofollow">'
. htmlspecialchars($ns->name)
. '</a>';
} else {
$source = $ns->code;
if (Event::handle('StartActivityAuthor', array(&$this, &$xs, &$atomAuthor))) {
if (!empty($atomAuthor)) {
$xs->raw($atomAuthor);
Event::handle('EndActivityAuthor', array(&$this, &$xs, &$atomAuthor));
}
}
$noticeInfoAttr = array(
'local_id' => $this->id, // local notice ID (useful to clients for ordering)
'source' => $source, // the client name (source attribution)
);
$actor = '';
if ($author) {
$actor = $profile->asActivityActor();
}
if (Event::handle('StartActivityActor', array(&$this, &$xs, &$actor))) {
if (!empty($actor)) {
$xs->raw($actor);
Event::handle('EndActivityActor', array(&$this, &$xs, &$actor));
}
}
$url = $this->bestUrl();
if (Event::handle('StartActivityLink', array(&$this, &$xs, &$url))) {
$xs->element('link', array('rel' => 'alternate',
'type' => 'text/html',
'href' => $url));
Event::handle('EndActivityLink', array(&$this, &$xs, $url));
}
$id = $this->uri;
if (Event::handle('StartActivityId', array(&$this, &$xs, &$id))) {
$xs->element('id', null, $id);
Event::handle('EndActivityId', array(&$this, &$xs, $id));
}
$published = self::utcDate($this->created);
if (Event::handle('StartActivityPublished', array(&$this, &$xs, &$published))) {
$xs->element('published', null, $published);
Event::handle('EndActivityPublished', array(&$this, &$xs, $published));
}
$updated = $published; // XXX: notices are usually immutable
if (Event::handle('StartActivityUpdated', array(&$this, &$xs, &$updated))) {
$xs->element('updated', null, $updated);
Event::handle('EndActivityUpdated', array(&$this, &$xs, $updated));
}
$content = common_xml_safe_str($this->rendered);
if (Event::handle('StartActivityContent', array(&$this, &$xs, &$content))) {
$xs->element('content', array('type' => 'html'), $content);
Event::handle('EndActivityContent', array(&$this, &$xs, $content));
}
// Most of our notices represent POSTing a NOTE. This is the default verb
// for activity streams, so we normally just leave it out.
$verb = ActivityVerb::POST;
if (Event::handle('StartActivityVerb', array(&$this, &$xs, &$verb))) {
$xs->element('activity:verb', null, $verb);
Event::handle('EndActivityVerb', array(&$this, &$xs, $verb));
}
// We use the default behavior for activity streams: if there's no activity:object,
// then treat the entry itself as the object. Here, you can set the type of that object,
// which is normally a NOTE.
$type = ActivityObject::NOTE;
if (Event::handle('StartActivityDefaultObjectType', array(&$this, &$xs, &$type))) {
$xs->element('activity:object-type', null, $type);
Event::handle('EndActivityDefaultObjectType', array(&$this, &$xs, $type));
}
// Since we usually use the entry itself as an object, we don't have an explicit
// object. Some extensions may want to add them (for photo, event, music, etc.).
$objects = array();
if (Event::handle('StartActivityObjects', array(&$this, &$xs, &$objects))) {
foreach ($objects as $object) {
$xs->raw($object->asString());
}
Event::handle('EndActivityObjects', array(&$this, &$xs, $objects));
}
$noticeInfoAttr = array('local_id' => $this->id); // local notice ID (useful to clients for ordering)
$ns = $this->getSource();
if ($ns) {
if (!empty($ns)) {
$noticeInfoAttr['source'] = $ns->code;
if (!empty($ns->url)) {
$noticeInfoAttr['source_link'] = $ns->url;
if (!empty($ns->name)) {
$noticeInfoAttr['source'] = '<a href="'
. htmlspecialchars($ns->url)
. '" rel="nofollow">'
. htmlspecialchars($ns->name)
. '</a>';
}
}
}
@ -1284,103 +1403,143 @@ class Notice extends Memcached_DataObject
$noticeInfoAttr['repeat_of'] = $this->repeat_of;
}
$xs->element('statusnet:notice_info', $noticeInfoAttr, null);
if (Event::handle('StartActivityNoticeInfo', array(&$this, &$xs, &$noticeInfoAttr))) {
$xs->element('statusnet:notice_info', $noticeInfoAttr, null);
Event::handle('EndActivityNoticeInfo', array(&$this, &$xs, $noticeInfoAttr));
}
$replyNotice = null;
if ($this->reply_to) {
$reply_notice = Notice::staticGet('id', $this->reply_to);
if (!empty($reply_notice)) {
$replyNotice = Notice::staticGet('id', $this->reply_to);
}
if (Event::handle('StartActivityInReplyTo', array(&$this, &$xs, &$replyNotice))) {
if (!empty($replyNotice)) {
$xs->element('link', array('rel' => 'related',
'href' => $reply_notice->bestUrl()));
'href' => $replyNotice->bestUrl()));
$xs->element('thr:in-reply-to',
array('ref' => $reply_notice->uri,
'href' => $reply_notice->bestUrl()));
array('ref' => $replyNotice->uri,
'href' => $replyNotice->bestUrl()));
Event::handle('EndActivityInReplyTo', array(&$this, &$xs, $replyNotice));
}
}
$conv = null;
if (!empty($this->conversation)) {
$conv = Conversation::staticGet('id', $this->conversation);
if (!empty($conv)) {
$xs->element(
'link', array(
'rel' => 'ostatus:conversation',
'href' => $conv->uri
)
);
}
}
if (Event::handle('StartActivityConversation', array(&$this, &$xs, &$conv))) {
if (!empty($conv)) {
$xs->element('link', array('rel' => 'ostatus:conversation',
'href' => $conv->uri));
}
Event::handle('EndActivityConversation', array(&$this, &$xs, $conv));
}
$replyProfiles = array();
$reply_ids = $this->getReplies();
foreach ($reply_ids as $id) {
$profile = Profile::staticGet('id', $id);
if (!empty($profile)) {
$xs->element(
'link', array(
'rel' => 'ostatus:attention',
'href' => $profile->getUri()
)
);
if (!empty($profile)) {
$replyProfiles[] = $profile;
}
}
if (Event::handle('StartActivityAttentionProfiles', array(&$this, &$xs, &$replyProfiles))) {
foreach ($replyProfiles as $profile) {
$xs->element('link', array('rel' => 'ostatus:attention',
'href' => $profile->getUri()));
$xs->element('link', array('rel' => 'mentioned',
'href' => $profile->getUri()));
}
Event::handle('EndActivityAttentionProfiles', array(&$this, &$xs, $replyProfiles));
}
$groups = $this->getGroups();
foreach ($groups as $group) {
$xs->element(
'link', array(
'rel' => 'ostatus:attention',
'href' => $group->permalink()
)
);
if (Event::handle('StartActivityAttentionGroups', array(&$this, &$xs, &$groups))) {
foreach ($groups as $group) {
$xs->element('link', array('rel' => 'ostatus:attention',
'href' => $group->permalink()));
$xs->element('link', array('rel' => 'mentioned',
'href' => $group->permalink()));
}
Event::handle('EndActivityAttentionGroups', array(&$this, &$xs, $groups));
}
$repeat = null;
if (!empty($this->repeat_of)) {
$repeat = Notice::staticGet('id', $this->repeat_of);
}
if (Event::handle('StartActivityForward', array(&$this, &$xs, &$repeat))) {
if (!empty($repeat)) {
$xs->element(
'ostatus:forward',
array('ref' => $repeat->uri, 'href' => $repeat->bestUrl())
);
$xs->element('ostatus:forward',
array('ref' => $repeat->uri,
'href' => $repeat->bestUrl()));
}
Event::handle('EndActivityForward', array(&$this, &$xs, $repeat));
}
$xs->element(
'content',
array('type' => 'html'),
common_xml_safe_str($this->rendered)
);
$tags = $this->getTags();
$tag = new Notice_tag();
$tag->notice_id = $this->id;
if ($tag->find()) {
while ($tag->fetch()) {
$xs->element('category', array('term' => $tag->tag));
if (Event::handle('StartActivityCategories', array(&$this, &$xs, &$tags))) {
foreach ($tags as $tag) {
$xs->element('category', array('term' => $tag));
}
Event::handle('EndActivityCategories', array(&$this, &$xs, $tags));
}
$tag->free();
# Enclosures
// Enclosures
$enclosures = array();
$attachments = $this->attachments();
if($attachments){
foreach($attachments as $attachment){
$enclosure=$attachment->getEnclosure();
if ($enclosure) {
$attributes = array('rel'=>'enclosure','href'=>$enclosure->url,'type'=>$enclosure->mimetype,'length'=>$enclosure->size);
if($enclosure->title){
$attributes['title']=$enclosure->title;
}
$xs->element('link', $attributes, null);
}
foreach ($attachments as $attachment) {
$enclosure = $attachment->getEnclosure();
if ($enclosure) {
$enclosures[] = $enclosure;
}
}
if (!empty($this->lat) && !empty($this->lon)) {
$xs->element('georss:point', null, $this->lat . ' ' . $this->lon);
if (Event::handle('StartActivityEnclosures', array(&$this, &$xs, &$enclosures))) {
foreach ($enclosures as $enclosure) {
$attributes = array('rel' => 'enclosure',
'href' => $enclosure->url,
'type' => $enclosure->mimetype,
'length' => $enclosure->size);
if ($enclosure->title) {
$attributes['title'] = $enclosure->title;
}
$xs->element('link', $attributes, null);
}
Event::handle('EndActivityEnclosures', array(&$this, &$xs, $enclosures));
}
$xs->elementEnd('entry');
$lat = $this->lat;
$lon = $this->lon;
if (Event::handle('StartActivityGeo', array(&$this, &$xs, &$lat, &$lon))) {
if (!empty($lat) && !empty($lon)) {
$xs->element('georss:point', null, $lat . ' ' . $lon);
}
Event::handle('EndActivityGeo', array(&$this, &$xs, $lat, $lon));
}
if (Event::handle('StartActivityEnd', array(&$this, &$xs))) {
$xs->elementEnd('entry');
Event::handle('EndActivityEnd', array(&$this, &$xs));
}
return $xs->getString();
}
@ -1901,4 +2060,24 @@ class Notice extends Memcached_DataObject
$this->is_local == Notice::LOCAL_NONPUBLIC);
}
public function getTags()
{
$tags = array();
$tag = new Notice_tag();
$tag->notice_id = $this->id;
if ($tag->find()) {
while ($tag->fetch()) {
$tags[] = $tag->tag;
}
}
$tag->free();
return $tags;
}
static private function utcDate($dt)
{
$dateStr = date('d F Y H:i:s', strtotime($dt));
$d = new DateTime($dateStr, new DateTimeZone('UTC'));
return $d->format(DATE_W3C);
}
}

View File

@ -152,17 +152,16 @@ class Profile extends Memcached_DataObject
*
* @return mixed Notice or null
*/
function getCurrentNotice()
{
$notice = new Notice();
$notice->profile_id = $this->id;
// @fixme change this to sort on notice.id only when indexes are updated
$notice->orderBy('created DESC, notice.id DESC');
$notice->limit(1);
if ($notice->find(true)) {
$notice = $this->getNotices(0, 1);
if ($notice->fetch()) {
return $notice;
} else {
return null;
}
return null;
}
function getTaggedNotices($tag, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0)
@ -735,14 +734,18 @@ class Profile extends Memcached_DataObject
'role' => $name));
if (empty($role)) {
throw new Exception('Cannot revoke role "'.$name.'" for user #'.$this->id.'; does not exist.');
// TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
// TRANS: %1$s is the role name, %2$s is the user ID (number).
throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; does not exist.'),$name, $this->id));
}
$result = $role->delete();
if (!$result) {
common_log_db_error($role, 'DELETE', __FILE__);
throw new Exception('Cannot revoke role "'.$name.'" for user #'.$this->id.'; database error.');
// TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
// TRANS: %1$s is the role name, %2$s is the user ID (number).
throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; database error.'),$name, $this->id));
}
return true;
@ -943,4 +946,20 @@ class Profile extends Memcached_DataObject
return $result;
}
function getAtomFeed()
{
$feed = null;
if (Event::handle('StartProfileGetAtomFeed', array($this, &$feed))) {
$user = User::staticGet('id', $this->id);
if (!empty($user)) {
$feed = common_local_url('ApiTimelineUser', array('id' => $user->id,
'format' => 'atom'));
}
Event::handle('EndProfileGetAtomFeed', array($this, $feed));
}
return $feed;
}
}

View File

@ -50,7 +50,8 @@ class Remote_profile extends Memcached_DataObject
if ($profile) {
return $profile->hasright($right);
} else {
throw new Exception("Missing profile");
// TRANS: Exception thrown when a right for a non-existing user profile is checked.
throw new Exception(_("Missing profile."));
}
}
}

View File

@ -116,6 +116,7 @@ class Safe_DataObject extends DB_DataObject
if ($this->_call($method, $params, $return)) {
return $return;
} else {
// Low level exception. No need for i18n as discussed with Brion.
throw new Exception('Call to undefined method ' .
get_class($this) . '::' . $method);
}
@ -125,7 +126,7 @@ class Safe_DataObject extends DB_DataObject
* Work around memory-leak bugs...
* Had to copy-paste the whole function in order to patch a couple lines of it.
* Would be nice if this code was better factored.
*
*
* @param optional string name of database to assign / read
* @param optional array structure of database, and keys
* @param optional array table links
@ -136,108 +137,103 @@ class Safe_DataObject extends DB_DataObject
*/
function databaseStructure()
{
global $_DB_DATAOBJECT;
// Assignment code
// Assignment code
if ($args = func_get_args()) {
if (count($args) == 1) {
// this returns all the tables and their structure..
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
$this->debug("Loading Generator as databaseStructure called with args",1);
}
$x = new DB_DataObject;
$x->_database = $args[0];
$this->_connect();
$DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5];
$tables = $DB->getListOf('tables');
class_exists('DB_DataObject_Generator') ? '' :
class_exists('DB_DataObject_Generator') ? '' :
require_once 'DB/DataObject/Generator.php';
foreach($tables as $table) {
$y = new DB_DataObject_Generator;
$y->fillTableSchema($x->_database,$table);
}
return $_DB_DATAOBJECT['INI'][$x->_database];
return $_DB_DATAOBJECT['INI'][$x->_database];
} else {
$_DB_DATAOBJECT['INI'][$args[0]] = isset($_DB_DATAOBJECT['INI'][$args[0]]) ?
$_DB_DATAOBJECT['INI'][$args[0]] + $args[1] : $args[1];
if (isset($args[1])) {
$_DB_DATAOBJECT['LINKS'][$args[0]] = isset($_DB_DATAOBJECT['LINKS'][$args[0]]) ?
$_DB_DATAOBJECT['LINKS'][$args[0]] + $args[2] : $args[2];
}
return true;
}
}
if (!$this->_database) {
$this->_connect();
}
// loaded already?
if (!empty($_DB_DATAOBJECT['INI'][$this->_database])) {
// database loaded - but this is table is not available..
if (
empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])
empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])
&& !empty($_DB_DATAOBJECT['CONFIG']['proxy'])
) {
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
$this->debug("Loading Generator to fetch Schema",1);
}
class_exists('DB_DataObject_Generator') ? '' :
class_exists('DB_DataObject_Generator') ? '' :
require_once 'DB/DataObject/Generator.php';
$x = new DB_DataObject_Generator;
$x->fillTableSchema($this->_database,$this->__table);
}
return true;
}
if (empty($_DB_DATAOBJECT['CONFIG'])) {
DB_DataObject::_loadConfig();
}
// if you supply this with arguments, then it will take those
// as the database and links array...
$schemas = isset($_DB_DATAOBJECT['CONFIG']['schema_location']) ?
array("{$_DB_DATAOBJECT['CONFIG']['schema_location']}/{$this->_database}.ini") :
array() ;
if (isset($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"])) {
$schemas = is_array($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]) ?
$_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"] :
explode(PATH_SEPARATOR,$_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]);
}
/* BEGIN CHANGED FROM UPSTREAM */
$_DB_DATAOBJECT['INI'][$this->_database] = $this->parseIniFiles($schemas);
/* END CHANGED FROM UPSTREAM */
// now have we loaded the structure..
// now have we loaded the structure..
if (!empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])) {
return true;
}
// - if not try building it..
if (!empty($_DB_DATAOBJECT['CONFIG']['proxy'])) {
class_exists('DB_DataObject_Generator') ? '' :
class_exists('DB_DataObject_Generator') ? '' :
require_once 'DB/DataObject/Generator.php';
$x = new DB_DataObject_Generator;
$x->fillTableSchema($this->_database,$this->__table);
// should this fail!!!???
@ -245,7 +241,8 @@ class Safe_DataObject extends DB_DataObject
}
$this->debug("Cant find database schema: {$this->_database}/{$this->__table} \n".
"in links file data: " . print_r($_DB_DATAOBJECT['INI'],true),"databaseStructure",5);
// we have to die here!! - it causes chaos if we dont (including looping forever!)
// we have to die here!! - it causes chaos if we don't (including looping forever!)
// Low level exception. No need for i18n as discussed with Brion.
$this->raiseError( "Unable to load schema for database and table (turn debugging up to 5 for full error message)", DB_DATAOBJECT_ERROR_INVALIDARGS, PEAR_ERROR_DIE);
return false;
}
@ -271,7 +268,7 @@ class Safe_DataObject extends DB_DataObject
if (file_exists($ini) && is_file($ini)) {
$data = array_merge($data, parse_ini_file($ini, true));
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
if (!is_readable ($ini)) {
$this->debug("ini file is not readable: $ini","databaseStructure",1);
} else {

View File

@ -27,7 +27,8 @@ class Status_network extends Safe_DataObject
/* the code below is auto generated do not remove the above tag */
public $__table = 'status_network'; // table name
public $nickname; // varchar(64) primary_key not_null
public $site_id; // int(4) primary_key not_null
public $nickname; // varchar(64) unique_key not_null
public $hostname; // varchar(255) unique_key
public $pathname; // varchar(255) unique_key
public $dbhost; // varchar(255)
@ -39,7 +40,6 @@ class Status_network extends Safe_DataObject
public $logo; // varchar(255)
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
public $tags; // text
/* Static get */
function staticGet($k,$v=NULL) {
@ -308,9 +308,63 @@ class Status_network extends Safe_DataObject
*/
function getTags()
{
return array_filter(explode("|", strval($this->tags)));
$result = array();
$tags = new Status_network_tag();
$tags->site_id = $this->site_id;
if ($tags->find()) {
while ($tags->fetch()) {
$result[] = $tags->tag;
}
}
// XXX : for backwards compatibility
if (empty($result)) {
return explode('|', $this->tags);
}
return $result;
}
/**
* Save a given set of tags
* @param array tags
*/
function setTags($tags)
{
$this->clearTags();
foreach ($tags as $tag) {
if (!empty($tag)) {
$snt = new Status_network_tag();
$snt->site_id = $this->site_id;
$snt->tag = $tag;
$snt->created = common_sql_now();
$id = $snt->insert();
if (!$id) {
// TRANS: Exception thrown when a tag cannot be saved.
throw new Exception(_("Unable to save tag."));
}
}
}
return true;
}
function clearTags()
{
$tag = new Status_network_tag();
$tag->site_id = $this->site_id;
if ($tag->find()) {
while($tag->fetch()) {
$tag->delete();
}
}
$tag->free();
}
/**
* Check if this site record has a particular meta-info tag attached.
* @param string $tag

View File

@ -0,0 +1,69 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2008, 2009, 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')) { exit(1); }
class Status_network_tag extends Safe_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
public $__table = 'status_network_tag'; // table name
public $site_id; // int(4) primary_key not_null
public $tag; // varchar(64) primary_key not_null
public $created; // datetime() not_null
function __construct()
{
global $config;
global $_DB_DATAOBJECT;
$sn = new Status_network();
$sn->_connect();
$config['db']['table_'. $this->__table] = $sn->_database;
$this->_connect();
}
/* Static get */
function staticGet($k,$v=null)
{
$i = DB_DataObject::staticGet('Status_network_tag',$k,$v);
// Don't use local process cache; if we're fetching multiple
// times it's because we're reloading it in a long-running
// process; we need a fresh copy!
global $_DB_DATAOBJECT;
unset($_DB_DATAOBJECT['CACHE']['status_network_tag']);
return $i;
}
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
function pkeyGet($kv)
{
return Memcached_DataObject::pkeyGet('Status_network_tag', $kv);
}
}

View File

@ -71,14 +71,17 @@ class Subscription extends Memcached_DataObject
}
if (!$subscriber->hasRight(Right::SUBSCRIBE)) {
// TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
throw new Exception(_('You have been banned from subscribing.'));
}
if (self::exists($subscriber, $other)) {
// TRANS: Exception thrown when trying to subscribe while already subscribed.
throw new Exception(_('Already subscribed!'));
}
if ($other->hasBlocked($subscriber)) {
// TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
throw new Exception(_('User has blocked you.'));
}
@ -129,6 +132,7 @@ class Subscription extends Memcached_DataObject
if (!$result) {
common_log_db_error($sub, 'INSERT', __FILE__);
// TRANS: Exception thrown when a subscription could not be stored on the server.
throw new Exception(_('Could not save subscription.'));
}
@ -160,17 +164,18 @@ class Subscription extends Memcached_DataObject
* Cancel a subscription
*
*/
function cancel($subscriber, $other)
{
if (!self::exists($subscriber, $other)) {
// TRANS: Exception thrown when trying to unsibscribe without a subscription.
throw new Exception(_('Not subscribed!'));
}
// Don't allow deleting self subs
if ($subscriber->id == $other->id) {
throw new Exception(_('Couldn\'t delete self-subscription.'));
// TRANS: Exception thrown when trying to unsubscribe a user from themselves.
throw new Exception(_('Could not delete self-subscription.'));
}
if (Event::handle('StartUnsubscribe', array($subscriber, $other))) {
@ -197,7 +202,8 @@ class Subscription extends Memcached_DataObject
if (!$result) {
common_log_db_error($token, 'DELETE', __FILE__);
throw new Exception(_('Couldn\'t delete subscription OMB token.'));
// TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
throw new Exception(_('Could not delete subscription OMB token.'));
}
} else {
common_log(LOG_ERR, "Couldn't find credentials with token {$token->tok}");
@ -208,7 +214,8 @@ class Subscription extends Memcached_DataObject
if (!$result) {
common_log_db_error($sub, 'DELETE', __FILE__);
throw new Exception(_('Couldn\'t delete subscription.'));
// TRANS: Exception thrown when a subscription could not be deleted on the server.
throw new Exception(_('Could not delete subscription.'));
}
self::blow('user:notices_with_friends:%d', $subscriber->id);

View File

@ -48,11 +48,6 @@ class User extends Memcached_DataObject
public $language; // varchar(50)
public $timezone; // varchar(50)
public $emailpost; // tinyint(1) default_1
public $jabber; // varchar(255) unique_key
public $jabbernotify; // tinyint(1)
public $jabberreplies; // tinyint(1)
public $jabbermicroid; // tinyint(1) default_1
public $updatefrompresence; // tinyint(1)
public $sms; // varchar(64) unique_key
public $carrier; // int(4)
public $smsnotify; // tinyint(1)
@ -93,7 +88,7 @@ class User extends Memcached_DataObject
{
$this->_connect();
$parts = array();
foreach (array('nickname', 'email', 'jabber', 'incomingemail', 'sms', 'carrier', 'smsemail', 'language', 'timezone') as $k) {
foreach (array('nickname', 'email', 'incomingemail', 'sms', 'carrier', 'smsemail', 'language', 'timezone') as $k) {
if (strcmp($this->$k, $orig->$k) != 0) {
$parts[] = $k . ' = ' . $this->_quote($this->$k);
}
@ -360,11 +355,12 @@ class User extends Memcached_DataObject
__FILE__);
} else {
$notice = Notice::saveNew($welcomeuser->id,
// TRANS: Notice given on user registration.
// TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
sprintf(_('Welcome to %1$s, @%2$s!'),
common_config('site', 'name'),
$user->nickname),
'system');
}
}
@ -375,7 +371,6 @@ class User extends Memcached_DataObject
}
// Things we do when the email changes
function emailChanged()
{

View File

@ -492,6 +492,7 @@ class User_group extends Memcached_DataObject
if (!$result) {
common_log_db_error($group, 'INSERT', __FILE__);
// TRANS: Server exception thrown when creating a group failed.
throw new ServerException(_('Could not create group.'));
}
@ -501,6 +502,7 @@ class User_group extends Memcached_DataObject
$result = $group->update($orig);
if (!$result) {
common_log_db_error($group, 'UPDATE', __FILE__);
// TRANS: Server exception thrown when updating a group URI failed.
throw new ServerException(_('Could not set group URI.'));
}
}
@ -508,6 +510,7 @@ class User_group extends Memcached_DataObject
$result = $group->setAliases($aliases);
if (!$result) {
// TRANS: Server exception thrown when creating group aliases failed.
throw new ServerException(_('Could not create aliases.'));
}
@ -522,6 +525,7 @@ class User_group extends Memcached_DataObject
if (!$result) {
common_log_db_error($member, 'INSERT', __FILE__);
// TRANS: Server exception thrown when setting group membership failed.
throw new ServerException(_('Could not set group membership.'));
}
@ -536,6 +540,7 @@ class User_group extends Memcached_DataObject
if (!$result) {
common_log_db_error($local_group, 'INSERT', __FILE__);
// TRANS: Server exception thrown when saving local group information failed.
throw new ServerException(_('Could not save local group info.'));
}
}

94
classes/User_im_prefs.php Normal file
View File

@ -0,0 +1,94 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Data class for user IM preferences
*
* 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 Data
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @copyright 2009 StatusNet Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
class User_im_prefs extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
public $__table = 'user_im_prefs'; // table name
public $user_id; // int(4) primary_key not_null
public $screenname; // varchar(255) not_null
public $transport; // varchar(255) not_null
public $notify; // tinyint(1)
public $replies; // tinyint(1)
public $microid; // tinyint(1)
public $updatefrompresence; // tinyint(1)
public $created; // datetime not_null default_0000-00-00%2000%3A00%3A00
public $modified; // timestamp not_null default_CURRENT_TIMESTAMP
/* Static get */
function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('User_im_prefs',$k,$v); }
function pkeyGet($kv)
{
return Memcached_DataObject::pkeyGet('User_im_prefs', $kv);
}
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
/*
DB_DataObject calculates the sequence key(s) by taking the first key returned by the keys() function.
In this case, the keys() function returns user_id as the first key. user_id is not a sequence, but
DB_DataObject's sequenceKey() will incorrectly think it is. Then, since the sequenceKey() is a numeric
type, but is not set to autoincrement in the database, DB_DataObject will create a _seq table and
manage the sequence itself. This is not the correct behavior for the user_id in this class.
So we override that incorrect behavior, and simply say there is no sequence key.
*/
function sequenceKey()
{
return array(false,false);
}
/**
* We have two compound keys with unique constraints:
* (transport, user_id) which is our primary key, and
* (transport, screenname) which is an additional constraint.
*
* Currently there's not a way to represent that second key
* in the general keys list, so we're adding it here to the
* list of keys to use for caching, ensuring that it gets
* cleared as well when we change.
*
* @return array of cache keys
*/
function _allCacheKeys()
{
$ukeys = 'transport,screenname';
$uvals = $this->transport . ',' . $this->screenname;
$ckeys = parent::_allCacheKeys();
$ckeys[] = $this->cacheKey($this->tableName(), $ukeys, $uvals);
return $ckeys;
}
}

View File

@ -0,0 +1,105 @@
<?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/>.
*/
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
class User_urlshortener_prefs extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
public $__table = 'user_urlshortener_prefs'; // table name
public $user_id; // int(4) primary_key not_null
public $urlshorteningservice; // varchar(50) default_ur1.ca
public $maxurllength; // int(4) not_null
public $maxnoticelength; // int(4) not_null
public $created; // datetime not_null default_0000-00-00%2000%3A00%3A00
public $modified; // timestamp not_null default_CURRENT_TIMESTAMP
/* Static get */
function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('User_urlshortener_prefs',$k,$v); }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
function sequenceKey()
{
return array(false, false, false);
}
static function maxUrlLength($user)
{
$def = common_config('url', 'maxlength');
$prefs = self::getPrefs($user);
if (empty($prefs)) {
return $def;
} else {
return $prefs->maxurllength;
}
}
static function maxNoticeLength($user)
{
$def = common_config('url', 'maxnoticelength');
if ($def == -1) {
$def = Notice::maxContent();
}
$prefs = self::getPrefs($user);
if (empty($prefs)) {
return $def;
} else {
return $prefs->maxnoticelength;
}
}
static function urlShorteningService($user)
{
$def = common_config('url', 'shortener');
$prefs = self::getPrefs($user);
if (empty($prefs)) {
if (!empty($user)) {
return $user->urlshorteningservice;
} else {
return $def;
}
} else {
return $prefs->urlshorteningservice;
}
}
static function getPrefs($user)
{
if (empty($user)) {
return null;
}
$prefs = User_urlshortener_prefs::staticGet('user_id', $user->id);
return $prefs;
}
}

View File

@ -1,4 +1,5 @@
[status_network]
site_id = 129
nickname = 130
hostname = 2
pathname = 2
@ -11,9 +12,19 @@ theme = 2
logo = 2
created = 142
modified = 384
tags = 34
[status_network__keys]
nickname = K
site_id = K
nickname = U
hostname = U
pathname = U
[status_network_tag]
site_id = 129
tag = 130
created = 142
[status_network_tag__keys]
site_id = K
tag = K

View File

@ -561,11 +561,6 @@ emailmicroid = 17
language = 2
timezone = 2
emailpost = 17
jabber = 2
jabbernotify = 17
jabberreplies = 17
jabbermicroid = 17
updatefrompresence = 17
sms = 2
carrier = 1
smsnotify = 17
@ -585,7 +580,6 @@ id = K
nickname = U
email = U
incomingemail = U
jabber = U
sms = U
uri = U
@ -638,3 +632,33 @@ modified = 384
[user_location_prefs__keys]
user_id = K
[user_im_prefs]
user_id = 129
screenname = 130
transport = 130
notify = 17
replies = 17
microid = 17
updatefrompresence = 17
created = 142
modified = 384
[user_im_prefs__keys]
user_id = K
transport = K
; There's another unique index on (transport, screenname)
; but we have no way to represent a compound index other than
; the primary key in here. To ensure proper cache purging,
; we need to tweak the class.
[user_urlshortener_prefs]
user_id = 129
urlshorteningservice = 2
maxurllength = 129
maxnoticelength = 129
created = 142
modified = 384
[user_urlshortener_prefs__keys]
user_id = K

View File

@ -1,8 +1,9 @@
/* For managing multiple sites */
create table status_network (
nickname varchar(64) primary key comment 'nickname',
site_id integer auto_increment primary key comment 'unique id',
nickname varchar(64) unique key comment 'nickname',
hostname varchar(255) unique key comment 'alternate hostname if any',
pathname varchar(255) unique key comment 'alternate pathname if any',
@ -21,3 +22,12 @@ create table status_network (
modified timestamp comment 'date this record was modified'
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
create table status_network_tag (
site_id integer comment 'unique id',
tag varchar(64) comment 'tag name',
created datetime not null comment 'date the record was created',
constraint primary key (site_id, tag)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

13
db/site_093to094.sql Normal file
View File

@ -0,0 +1,13 @@
alter table status_network
drop primary key,
add column site_id integer auto_increment primary key first,
add unique key (nickname);
create table status_network_tag (
site_id integer comment 'unique id',
tag varchar(64) comment 'tag name',
created datetime not null comment 'date the record was created',
constraint primary key (site_id, tag)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

View File

@ -62,11 +62,6 @@ create table user (
language varchar(50) comment 'preferred language',
timezone varchar(50) comment 'timezone',
emailpost tinyint default 1 comment 'Post by email',
jabber varchar(255) unique key comment 'jabber ID for notices',
jabbernotify tinyint default 0 comment 'whether to send notices to jabber',
jabberreplies tinyint default 0 comment 'whether to send notices to jabber on replies',
jabbermicroid tinyint default 1 comment 'whether to publish xmpp microid',
updatefrompresence tinyint default 0 comment 'whether to record updates from Jabber presence notices',
sms varchar(64) unique key comment 'sms phone number',
carrier integer comment 'foreign key to sms_carrier' references sms_carrier (id),
smsnotify tinyint default 0 comment 'whether to send notices to SMS',
@ -259,9 +254,9 @@ create table oid_nonces (
create table confirm_address (
code varchar(32) not null primary key comment 'good random code',
user_id integer not null comment 'user who requested confirmation' references user (id),
address varchar(255) not null comment 'address (email, Jabber, SMS, etc.)',
address varchar(255) not null comment 'address (email, xmpp, SMS, etc.)',
address_extra varchar(255) not null comment 'carrier ID, for SMS',
address_type varchar(8) not null comment 'address type ("email", "jabber", "sms")',
address_type varchar(8) not null comment 'address type ("email", "xmpp", "sms")',
claimed datetime comment 'date this was claimed for queueing',
sent datetime comment 'date this was sent for queueing',
modified timestamp comment 'date this record was modified'
@ -276,7 +271,7 @@ create table remember_me (
create table queue_item (
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", ...',
transport varchar(8) not null comment 'queue for what? "email", "xmpp", "sms", "irc", ...',
created datetime not null comment 'date this record was created',
claimed datetime comment 'date this item was claimed',
@ -348,7 +343,7 @@ create table invitation (
code varchar(32) not null primary key comment 'random code for an invitation',
user_id int not null comment 'who sent the invitation' references user (id),
address varchar(255) not null comment 'invitation sent to',
address_type varchar(8) not null comment 'address type ("email", "jabber", "sms")',
address_type varchar(8) not null comment 'address type ("email", "xmpp", "sms")',
created datetime not null comment 'date this record was created',
index invitation_address_idx (address, address_type),
@ -639,6 +634,21 @@ create table inbox (
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
create table user_im_prefs (
user_id integer not null comment 'user' references user (id),
screenname varchar(255) not null comment 'screenname on this service',
transport varchar(255) not null comment 'transport (ex xmpp, aim)',
notify tinyint(1) not null default 0 comment 'Notify when a new notice is sent',
replies tinyint(1) not null default 0 comment 'Send replies from people not subscribed to',
microid tinyint(1) not null default 1 comment 'Publish a MicroID',
updatefrompresence tinyint(1) not null default 0 comment 'Send replies from people not subscribed to.',
created timestamp not null DEFAULT CURRENT_TIMESTAMP comment 'date this record was created',
modified timestamp comment 'date this record was modified',
constraint primary key (user_id, transport),
constraint unique key `transport_screenname_key` ( `transport` , `screenname` )
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
create table conversation (
id integer auto_increment primary key comment 'unique identifier',
uri varchar(225) unique comment 'URI of the conversation',
@ -656,3 +666,15 @@ create table local_group (
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
create table user_urlshortener_prefs (
user_id integer not null comment 'user' references user (id),
urlshorteningservice varchar(50) default 'ur1.ca' comment 'service to use for auto-shortening URLs',
maxurllength integer not null comment 'urls greater than this length will be shortened, 0 = always, null = never',
maxnoticelength integer not null comment 'notices with content greater than this value will have all urls shortened, 0 = always, null = never',
created datetime not null comment 'date this record was created',
modified timestamp comment 'date this record was modified',
constraint primary key (user_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;

82
extlib/Mail.php Normal file → Executable file
View File

@ -1,22 +1,47 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Chuck Hagenbuch <chuck@horde.org> |
// +----------------------------------------------------------------------+
//
// $Id: Mail.php,v 1.17 2006/09/15 03:41:18 jon Exp $
/**
* PEAR's Mail:: interface.
*
* PHP versions 4 and 5
*
* LICENSE:
*
* Copyright (c) 2002-2007, Richard Heyes
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* o The names of the authors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category Mail
* @package Mail
* @author Chuck Hagenbuch <chuck@horde.org>
* @copyright 1997-2010 Chuck Hagenbuch
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Mail.php 294747 2010-02-08 08:18:33Z clockwerx $
* @link http://pear.php.net/package/Mail/
*/
require_once 'PEAR.php';
@ -26,7 +51,7 @@ require_once 'PEAR.php';
* useful in multiple mailer backends.
*
* @access public
* @version $Revision: 1.17 $
* @version $Revision: 294747 $
* @package Mail
*/
class Mail
@ -82,12 +107,20 @@ class Mail
* @return mixed Returns true on success, or a PEAR_Error
* containing a descriptive error message on
* failure.
*
* @access public
* @deprecated use Mail_mail::send instead
*/
function send($recipients, $headers, $body)
{
$this->_sanitizeHeaders($headers);
if (!is_array($headers)) {
return PEAR::raiseError('$headers must be an array');
}
$result = $this->_sanitizeHeaders($headers);
if (is_a($result, 'PEAR_Error')) {
return $result;
}
// if we're passed an array of recipients, implode it.
if (is_array($recipients)) {
@ -103,10 +136,9 @@ class Mail
}
// flatten the headers out.
list(,$text_headers) = Mail::prepareHeaders($headers);
list(, $text_headers) = Mail::prepareHeaders($headers);
return mail($recipients, $subject, $body, $text_headers);
}
/**
@ -151,9 +183,9 @@ class Mail
foreach ($headers as $key => $value) {
if (strcasecmp($key, 'From') === 0) {
include_once 'Mail/RFC822.php';
$parser = &new Mail_RFC822();
$parser = new Mail_RFC822();
$addresses = $parser->parseAddressList($value, 'localhost', false);
if (PEAR::isError($addresses)) {
if (is_a($addresses, 'PEAR_Error')) {
return $addresses;
}
@ -221,7 +253,7 @@ class Mail
$addresses = Mail_RFC822::parseAddressList($recipients, 'localhost', false);
// If parseAddressList() returned a PEAR_Error object, just return it.
if (PEAR::isError($addresses)) {
if (is_a($addresses, 'PEAR_Error')) {
return $addresses;
}

83
extlib/Mail/RFC822.php Normal file → Executable file
View File

@ -1,37 +1,48 @@
<?php
// +-----------------------------------------------------------------------+
// | Copyright (c) 2001-2002, Richard Heyes |
// | All rights reserved. |
// | |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | |
// | o Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | o Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution.|
// | o The names of the authors may not be used to endorse or promote |
// | products derived from this software without specific prior written |
// | permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
// | |
// +-----------------------------------------------------------------------+
// | Authors: Richard Heyes <richard@phpguru.org> |
// | Chuck Hagenbuch <chuck@horde.org> |
// +-----------------------------------------------------------------------+
/**
* RFC 822 Email address list validation Utility
*
* PHP versions 4 and 5
*
* LICENSE:
*
* Copyright (c) 2001-2010, Richard Heyes
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* o The names of the authors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category Mail
* @package Mail
* @author Richard Heyes <richard@phpguru.org>
* @author Chuck Hagenbuch <chuck@horde.org
* @copyright 2001-2010 Richard Heyes
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: RFC822.php 294749 2010-02-08 08:22:25Z clockwerx $
* @link http://pear.php.net/package/Mail/
*/
/**
* RFC 822 Email address list validation Utility
@ -52,7 +63,7 @@
*
* @author Richard Heyes <richard@phpguru.org>
* @author Chuck Hagenbuch <chuck@horde.org>
* @version $Revision: 1.24 $
* @version $Revision: 294749 $
* @license BSD
* @package Mail
*/
@ -635,8 +646,8 @@ class Mail_RFC822 {
$comment = $this->_splitCheck($parts, ')');
$comments[] = $comment;
// +1 is for the trailing )
$_mailbox = substr($_mailbox, strpos($_mailbox, $comment)+strlen($comment)+1);
// +2 is for the brackets
$_mailbox = substr($_mailbox, strpos($_mailbox, '('.$comment)+strlen($comment)+2);
} else {
break;
}

63
extlib/Mail/mail.php Normal file → Executable file
View File

@ -1,27 +1,52 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Chuck Hagenbuch <chuck@horde.org> |
// +----------------------------------------------------------------------+
//
// $Id: mail.php,v 1.20 2007/10/06 17:00:00 chagenbu Exp $
/**
* internal PHP-mail() implementation of the PEAR Mail:: interface.
*
* PHP versions 4 and 5
*
* LICENSE:
*
* Copyright (c) 2010 Chuck Hagenbuch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* o The names of the authors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category Mail
* @package Mail
* @author Chuck Hagenbuch <chuck@horde.org>
* @copyright 2010 Chuck Hagenbuch
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: mail.php 294747 2010-02-08 08:18:33Z clockwerx $
* @link http://pear.php.net/package/Mail/
*/
/**
* internal PHP-mail() implementation of the PEAR Mail:: interface.
* @package Mail
* @version $Revision: 1.20 $
* @version $Revision: 294747 $
*/
class Mail_mail extends Mail {

64
extlib/Mail/mock.php Normal file → Executable file
View File

@ -1,29 +1,53 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Chuck Hagenbuch <chuck@horde.org> |
// +----------------------------------------------------------------------+
//
// $Id: mock.php,v 1.1 2007/12/08 17:57:54 chagenbu Exp $
//
/**
* Mock implementation
*
* PHP versions 4 and 5
*
* LICENSE:
*
* Copyright (c) 2010 Chuck Hagenbuch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* o The names of the authors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category Mail
* @package Mail
* @author Chuck Hagenbuch <chuck@horde.org>
* @copyright 2010 Chuck Hagenbuch
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: mock.php 294747 2010-02-08 08:18:33Z clockwerx $
* @link http://pear.php.net/package/Mail/
*/
/**
* Mock implementation of the PEAR Mail:: interface for testing.
* @access public
* @package Mail
* @version $Revision: 1.1 $
* @version $Revision: 294747 $
*/
class Mail_mock extends Mail {

64
extlib/Mail/null.php Normal file → Executable file
View File

@ -1,29 +1,53 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Phil Kernick <philk@rotfl.com.au> |
// +----------------------------------------------------------------------+
//
// $Id: null.php,v 1.2 2004/04/06 05:19:03 jon Exp $
//
/**
* Null implementation of the PEAR Mail interface
*
* PHP versions 4 and 5
*
* LICENSE:
*
* Copyright (c) 2010 Phil Kernick
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* o The names of the authors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category Mail
* @package Mail
* @author Phil Kernick <philk@rotfl.com.au>
* @copyright 2010 Phil Kernick
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: null.php 294747 2010-02-08 08:18:33Z clockwerx $
* @link http://pear.php.net/package/Mail/
*/
/**
* Null implementation of the PEAR Mail:: interface.
* @access public
* @package Mail
* @version $Revision: 1.2 $
* @version $Revision: 294747 $
*/
class Mail_null extends Mail {

7
extlib/Mail/sendmail.php Normal file → Executable file
View File

@ -20,7 +20,7 @@
* Sendmail implementation of the PEAR Mail:: interface.
* @access public
* @package Mail
* @version $Revision: 1.19 $
* @version $Revision: 294744 $
*/
class Mail_sendmail extends Mail {
@ -117,7 +117,7 @@ class Mail_sendmail extends Mail {
if (is_a($recipients, 'PEAR_Error')) {
return $recipients;
}
$recipients = escapeShellCmd(implode(' ', $recipients));
$recipients = implode(' ', array_map('escapeshellarg', $recipients));
$headerElements = $this->prepareHeaders($headers);
if (is_a($headerElements, 'PEAR_Error')) {
@ -141,7 +141,8 @@ class Mail_sendmail extends Mail {
return PEAR::raiseError('From address specified with dangerous characters.');
}
$from = escapeShellCmd($from);
$from = escapeshellarg($from); // Security bug #16200
$mail = @popen($this->sendmail_path . (!empty($this->sendmail_args) ? ' ' . $this->sendmail_args : '') . " -f$from -- $recipients", 'w');
if (!$mail) {
return PEAR::raiseError('Failed to open sendmail [' . $this->sendmail_path . '] for execution.');

73
extlib/Mail/smtp.php Normal file → Executable file
View File

@ -1,21 +1,48 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Chuck Hagenbuch <chuck@horde.org> |
// | Jon Parise <jon@php.net> |
// +----------------------------------------------------------------------+
/**
* SMTP implementation of the PEAR Mail interface. Requires the Net_SMTP class.
*
* PHP versions 4 and 5
*
* LICENSE:
*
* Copyright (c) 2010, Chuck Hagenbuch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* o The names of the authors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category HTTP
* @package HTTP_Request
* @author Jon Parise <jon@php.net>
* @author Chuck Hagenbuch <chuck@horde.org>
* @copyright 2010 Chuck Hagenbuch
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: smtp.php 294747 2010-02-08 08:18:33Z clockwerx $
* @link http://pear.php.net/package/Mail/
*/
/** Error: Failed to create a Net_SMTP object */
define('PEAR_MAIL_SMTP_ERROR_CREATE', 10000);
@ -42,7 +69,7 @@ define('PEAR_MAIL_SMTP_ERROR_DATA', 10006);
* SMTP implementation of the PEAR Mail interface. Requires the Net_SMTP class.
* @access public
* @package Mail
* @version $Revision: 1.33 $
* @version $Revision: 294747 $
*/
class Mail_smtp extends Mail {
@ -278,6 +305,16 @@ class Mail_smtp extends Mail {
/* Send the message's headers and the body as SMTP data. */
$res = $this->_smtp->data($textHeaders . "\r\n\r\n" . $body);
list(,$args) = $this->_smtp->getResponse();
if (preg_match("/Ok: queued as (.*)/", $args, $queued)) {
$this->queued_as = $queued[1];
}
/* we need the greeting; from it we can extract the authorative name of the mail server we've really connected to.
* ideal if we're connecting to a round-robin of relay servers and need to track which exact one took the email */
$this->greeting = $this->_smtp->getGreeting();
if (is_a($res, 'PEAR_Error')) {
$error = $this->_error('Failed to send data', $res);
$this->_smtp->rset();

44
extlib/Mail/smtpmx.php Normal file → Executable file
View File

@ -8,19 +8,43 @@
*
* PHP versions 4 and 5
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
* LICENSE:
*
* Copyright (c) 2010, gERD Schaufelberger
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* o The names of the authors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category Mail
* @package Mail_smtpmx
* @author gERD Schaufelberger <gerd@php-tools.net>
* @copyright 1997-2005 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version CVS: $Id: smtpmx.php,v 1.2 2007/10/06 17:00:00 chagenbu Exp $
* @see Mail
* @copyright 2010 gERD Schaufelberger
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: smtpmx.php 294747 2010-02-08 08:18:33Z clockwerx $
* @link http://pear.php.net/package/Mail/
*/
require_once 'Net/SMTP.php';
@ -32,7 +56,7 @@ require_once 'Net/SMTP.php';
* @access public
* @author gERD Schaufelberger <gerd@php-tools.net>
* @package Mail
* @version $Revision: 1.2 $
* @version $Revision: 294747 $
*/
class Mail_smtpmx extends Mail {

View File

@ -18,7 +18,7 @@
// | Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar> |
// +----------------------------------------------------------------------+
//
// $Id: SMTP.php,v 1.63 2008/06/10 05:39:12 jon Exp $
// $Id: SMTP.php 293948 2010-01-24 21:46:00Z jon $
require_once 'PEAR.php';
require_once 'Net/Socket.php';
@ -91,6 +91,13 @@ class Net_SMTP
*/
var $_debug = false;
/**
* Debug output handler.
* @var callback
* @access private
*/
var $_debug_handler = null;
/**
* The socket resource being used to connect to the SMTP server.
* @var resource
@ -112,6 +119,13 @@ class Net_SMTP
*/
var $_arguments = array();
/**
* Stores the SMTP server's greeting string.
* @var string
* @access private
*/
var $_greeting = null;
/**
* Stores detected features of the SMTP server.
* @var array
@ -172,9 +186,30 @@ class Net_SMTP
* @access public
* @since 1.1.0
*/
function setDebug($debug)
function setDebug($debug, $handler = null)
{
$this->_debug = $debug;
$this->_debug_handler = $handler;
}
/**
* Write the given debug text to the current debug output handler.
*
* @param string $message Debug mesage text.
*
* @access private
* @since 1.3.3
*/
function _debug($message)
{
if ($this->_debug) {
if ($this->_debug_handler) {
call_user_func_array($this->_debug_handler,
array(&$this, $message));
} else {
echo "DEBUG: $message\n";
}
}
}
/**
@ -189,13 +224,12 @@ class Net_SMTP
*/
function _send($data)
{
if ($this->_debug) {
echo "DEBUG: Send: $data\n";
}
$this->_debug("Send: $data");
if (PEAR::isError($error = $this->_socket->write($data))) {
return PEAR::raiseError('Failed to write to socket: ' .
$error->getMessage());
$error = $this->_socket->write($data);
if ($error === false || PEAR::isError($error)) {
$msg = ($error) ? $error->getMessage() : "unknown error";
return PEAR::raiseError("Failed to write to socket: $msg");
}
return true;
@ -262,9 +296,7 @@ class Net_SMTP
for ($i = 0; $i <= $this->_pipelined_commands; $i++) {
while ($line = $this->_socket->readLine()) {
if ($this->_debug) {
echo "DEBUG: Recv: $line\n";
}
$this->_debug("Recv: $line");
/* If we receive an empty line, the connection has been closed. */
if (empty($line)) {
@ -319,6 +351,20 @@ class Net_SMTP
return array($this->_code, join("\n", $this->_arguments));
}
/**
* Return the SMTP server's greeting string.
*
* @return string A string containing the greeting string, or null if a
* greeting has not been received.
*
* @access public
* @since 1.3.3
*/
function getGreeting()
{
return $this->_greeting;
}
/**
* Attempt to connect to the SMTP server.
*
@ -334,6 +380,7 @@ class Net_SMTP
*/
function connect($timeout = null, $persistent = false)
{
$this->_greeting = null;
$result = $this->_socket->connect($this->host, $this->port,
$persistent, $timeout);
if (PEAR::isError($result)) {
@ -344,6 +391,10 @@ class Net_SMTP
if (PEAR::isError($error = $this->_parseResponse(220))) {
return $error;
}
/* Extract and store a copy of the server's greeting string. */
list(, $this->_greeting) = $this->getResponse();
if (PEAR::isError($error = $this->_negotiate())) {
return $error;
}
@ -452,40 +503,43 @@ class Net_SMTP
* @param string The password to authenticate with.
* @param string The requested authentication method. If none is
* specified, the best supported method will be used.
* @param bool Flag indicating whether or not TLS should be attempted.
*
* @return mixed Returns a PEAR_Error with an error message on any
* kind of failure, or true on success.
* @access public
* @since 1.0
*/
function auth($uid, $pwd , $method = '')
function auth($uid, $pwd , $method = '', $tls = true)
{
if (empty($this->_esmtp['AUTH'])) {
if (version_compare(PHP_VERSION, '5.1.0', '>=')) {
if (!isset($this->_esmtp['STARTTLS'])) {
return PEAR::raiseError('SMTP server does not support authentication');
}
if (PEAR::isError($result = $this->_put('STARTTLS'))) {
return $result;
}
if (PEAR::isError($result = $this->_parseResponse(220))) {
return $result;
}
if (PEAR::isError($result = $this->_socket->enableCrypto(true, STREAM_CRYPTO_METHOD_TLS_CLIENT))) {
return $result;
} elseif ($result !== true) {
return PEAR::raiseError('STARTTLS failed');
}
/* Send EHLO again to recieve the AUTH string from the
* SMTP server. */
$this->_negotiate();
if (empty($this->_esmtp['AUTH'])) {
return PEAR::raiseError('SMTP server does not support authentication');
}
} else {
return PEAR::raiseError('SMTP server does not support authentication');
/* We can only attempt a TLS connection if one has been requested,
* we're running PHP 5.1.0 or later, have access to the OpenSSL
* extension, are connected to an SMTP server which supports the
* STARTTLS extension, and aren't already connected over a secure
* (SSL) socket connection. */
if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=') &&
extension_loaded('openssl') && isset($this->_esmtp['STARTTLS']) &&
strncasecmp($this->host, 'ssl://', 6) !== 0) {
/* Start the TLS connection attempt. */
if (PEAR::isError($result = $this->_put('STARTTLS'))) {
return $result;
}
if (PEAR::isError($result = $this->_parseResponse(220))) {
return $result;
}
if (PEAR::isError($result = $this->_socket->enableCrypto(true, STREAM_CRYPTO_METHOD_TLS_CLIENT))) {
return $result;
} elseif ($result !== true) {
return PEAR::raiseError('STARTTLS failed');
}
/* Send EHLO again to recieve the AUTH string from the
* SMTP server. */
$this->_negotiate();
}
if (empty($this->_esmtp['AUTH'])) {
return PEAR::raiseError('SMTP server does not support authentication');
}
/* If no method has been specified, get the name of the best
@ -844,30 +898,51 @@ class Net_SMTP
/**
* Send the DATA command.
*
* @param string $data The message body to send.
* @param mixed $data The message data, either as a string or an open
* file resource.
* @param string $headers The message headers. If $headers is provided,
* $data is assumed to contain only body data.
*
* @return mixed Returns a PEAR_Error with an error message on any
* kind of failure, or true on success.
* @access public
* @since 1.0
*/
function data($data)
function data($data, $headers = null)
{
/* Verify that $data is a supported type. */
if (!is_string($data) && !is_resource($data)) {
return PEAR::raiseError('Expected a string or file resource');
}
/* RFC 1870, section 3, subsection 3 states "a value of zero
* indicates that no fixed maximum message size is in force".
* Furthermore, it says that if "the parameter is omitted no
* information is conveyed about the server's fixed maximum
* message size". */
if (isset($this->_esmtp['SIZE']) && ($this->_esmtp['SIZE'] > 0)) {
if (strlen($data) >= $this->_esmtp['SIZE']) {
/* Start by considering the size of the optional headers string.
* We also account for the addition 4 character "\r\n\r\n"
* separator sequence. */
$size = (is_null($headers)) ? 0 : strlen($headers) + 4;
if (is_resource($data)) {
$stat = fstat($data);
if ($stat === false) {
return PEAR::raiseError('Failed to get file size');
}
$size += $stat['size'];
} else {
$size += strlen($data);
}
if ($size >= $this->_esmtp['SIZE']) {
$this->disconnect();
return PEAR::raiseError('Message size excedes the server limit');
return PEAR::raiseError('Message size exceeds server limit');
}
}
/* Quote the data based on the SMTP standards. */
$this->quotedata($data);
/* Initiate the DATA command. */
if (PEAR::isError($error = $this->_put('DATA'))) {
return $error;
}
@ -875,9 +950,40 @@ class Net_SMTP
return $error;
}
if (PEAR::isError($result = $this->_send($data . "\r\n.\r\n"))) {
return $result;
/* If we have a separate headers string, send it first. */
if (!is_null($headers)) {
$this->quotedata($headers);
if (PEAR::isError($result = $this->_send($headers . "\r\n\r\n"))) {
return $result;
}
}
/* Now we can send the message body data. */
if (is_resource($data)) {
/* Stream the contents of the file resource out over our socket
* connection, line by line. Each line must be run through the
* quoting routine. */
while ($line = fgets($data, 1024)) {
$this->quotedata($line);
if (PEAR::isError($result = $this->_send($line))) {
return $result;
}
}
/* Finally, send the DATA terminator sequence. */
if (PEAR::isError($result = $this->_send("\r\n.\r\n"))) {
return $result;
}
} else {
/* Just send the entire quoted string followed by the DATA
* terminator. */
$this->quotedata($data);
if (PEAR::isError($result = $this->_send($data . "\r\n.\r\n"))) {
return $result;
}
}
/* Verify that the data was successfully received by the server. */
if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) {
return $error;
}

103
index.php
View File

@ -41,8 +41,6 @@ define('INSTALLDIR', dirname(__FILE__));
define('STATUSNET', true);
define('LACONICA', true); // compatibility
require_once INSTALLDIR . '/lib/common.php';
$user = null;
$action = null;
@ -72,52 +70,69 @@ function getPath($req)
*/
function handleError($error)
{
if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
return;
}
try {
$logmsg = "PEAR error: " . $error->getMessage();
if (common_config('site', 'logdebug')) {
$logmsg .= " : ". $error->getDebugInfo();
}
// DB queries often end up with a lot of newlines; merge to a single line
// for easier grepability...
$logmsg = str_replace("\n", " ", $logmsg);
common_log(LOG_ERR, $logmsg);
// @fixme backtrace output should be consistent with exception handling
if (common_config('site', 'logdebug')) {
$bt = $error->getBacktrace();
foreach ($bt as $n => $line) {
common_log(LOG_ERR, formatBacktraceLine($n, $line));
if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
return;
}
}
if ($error instanceof DB_DataObject_Error
|| $error instanceof DB_Error
) {
$msg = sprintf(
_(
'The database for %s isn\'t responding correctly, '.
'so the site won\'t work properly. '.
'The site admins probably know about the problem, '.
'but you can contact them at %s to make sure. '.
'Otherwise, wait a few minutes and try again.'
),
common_config('site', 'name'),
common_config('site', 'email')
);
} else {
$msg = _(
'An important error occured, probably related to email setup. '.
'Check logfiles for more info..'
);
}
$dac = new DBErrorAction($msg, 500);
$dac->showPage();
$logmsg = "PEAR error: " . $error->getMessage();
if ($error instanceof PEAR_Exception && common_config('site', 'logdebug')) {
$logmsg .= " : ". $error->toText();
}
// DB queries often end up with a lot of newlines; merge to a single line
// for easier grepability...
$logmsg = str_replace("\n", " ", $logmsg);
common_log(LOG_ERR, $logmsg);
// @fixme backtrace output should be consistent with exception handling
if (common_config('site', 'logdebug')) {
$bt = $error->getTrace();
foreach ($bt as $n => $line) {
common_log(LOG_ERR, formatBacktraceLine($n, $line));
}
}
if ($error instanceof DB_DataObject_Error
|| $error instanceof DB_Error
|| ($error instanceof PEAR_Exception && $error->getCode() == -24)
) {
//If we run into a DB error, assume we can't connect to the DB at all
//so set the current user to null, so we don't try to access the DB
//while rendering the error page.
global $_cur;
$_cur = null;
$msg = sprintf(
_(
'The database for %s isn\'t responding correctly, '.
'so the site won\'t work properly. '.
'The site admins probably know about the problem, '.
'but you can contact them at %s to make sure. '.
'Otherwise, wait a few minutes and try again.'
),
common_config('site', 'name'),
common_config('site', 'email')
);
} else {
$msg = _(
'An important error occured, probably related to email setup. '.
'Check logfiles for more info..'
);
}
$dac = new DBErrorAction($msg, 500);
$dac->showPage();
} catch (Exception $e) {
echo _('An error occurred.');
}
exit(-1);
}
set_exception_handler('handleError');
require_once INSTALLDIR . '/lib/common.php';
/**
* Format a backtrace line for debug output roughly like debug_print_backtrace() does.
* Exceptions already have this built in, but PEAR error objects just give us the array.
@ -242,10 +257,6 @@ function main()
return;
}
// For database errors
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
// Make sure RW database is setup
setupRW();

View File

@ -258,9 +258,10 @@ var SN = { // StatusNet
form.append('<p class="form_response success">'+result+'</p>');
}
else {
// New notice post was successful. If on our timeline, show it!
var notice = document._importNode($('li', data)[0], true);
var notices = $('#notices_primary .notices');
if (notices.length > 0) {
var notice = document._importNode($('li', data)[0], true);
if (notices.length > 0 && SN.U.belongsOnTimeline(notice)) {
if ($('#'+notice.id).length === 0) {
var notice_irt_value = $('#'+SN.C.S.NoticeInReplyTo).val();
var notice_irt = '#notices_primary #notice-'+notice_irt_value;
@ -281,6 +282,8 @@ var SN = { // StatusNet
}
}
else {
// Not on a timeline that this belongs on?
// Just show a success message.
result = document._importNode($('title', data)[0], true);
result_title = result.textContent || result.innerHTML;
form.append('<p class="form_response success">'+result_title+'</p>');
@ -707,6 +710,38 @@ var SN = { // StatusNet
Delete: function() {
$.cookie(SN.C.S.StatusNetInstance, null);
}
},
/**
* Check if the current page is a timeline where the current user's
* posts should be displayed immediately on success.
*
* @fixme this should be done in a saner way, with machine-readable
* info about what page we're looking at.
*/
belongsOnTimeline: function(notice) {
var action = $("body").attr('id');
if (action == 'public') {
return true;
}
var profileLink = $('#nav_profile a').attr('href');
if (profileLink) {
var authorUrl = $(notice).find('.entry-title .author a.url').attr('href');
if (authorUrl == profileLink) {
if (action == 'all' || action == 'showstream') {
// Posts always show on your own friends and profile streams.
return true;
}
}
}
// @fixme tag, group, reply timelines should be feasible as well.
// Mismatch between id-based and name-based user/group links currently complicates
// the lookup, since all our inline mentions contain the absolute links but the
// UI links currently on the page use malleable names.
return false;
}
},

View File

@ -51,6 +51,7 @@ class ActivityContext
const POINT = 'point';
const ATTENTION = 'ostatus:attention';
const MENTIONED = 'mentioned';
const CONVERSATION = 'ostatus:conversation';
function __construct($element)
@ -76,8 +77,12 @@ class ActivityContext
$linkRel = $link->getAttribute(ActivityUtils::REL);
// XXX: Deprecate this in favour of "mentioned" from Salmon spec
// http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-salmon-00.html#SALR
if ($linkRel == self::ATTENTION) {
$this->attention[] = $link->getAttribute(self::HREF);
} elseif ($linkRel == self::MENTIONED) {
$this->attention[] = $link->getAttribute(self::HREF);
}
}
}

View File

@ -409,6 +409,14 @@ class AdminPanelNav extends Widget
$menu_title, $action_name == 'snapshotadminpanel', 'nav_snapshot_admin_panel');
}
if (AdminPanelAction::canAdmin('plugins')) {
// TRANS: Menu item title/tooltip
$menu_title = _('Plugins configuration');
// TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('pluginsadminpanel'), _('Plugins'),
$menu_title, $action_name == 'pluginsadminpanel', 'nav_design_admin_panel');
}
Event::handle('EndAdminPanelNav', array($this));
}
$this->action->elementEnd('ul');

View File

@ -98,6 +98,8 @@ if (!defined('STATUSNET')) {
exit(1);
}
class ApiValidationException extends Exception { }
/**
* Contains most of the Twitter-compatible API output functions.
*

View File

@ -66,63 +66,6 @@ class CLIChannel extends Channel
}
}
class XMPPChannel extends Channel
{
var $conn = null;
function source()
{
return 'xmpp';
}
function __construct($conn)
{
$this->conn = $conn;
}
function on($user)
{
return $this->set_notify($user, 1);
}
function off($user)
{
return $this->set_notify($user, 0);
}
function output($user, $text)
{
$text = '['.common_config('site', 'name') . '] ' . $text;
jabber_send_message($user->jabber, $text);
}
function error($user, $text)
{
$text = '['.common_config('site', 'name') . '] ' . $text;
jabber_send_message($user->jabber, $text);
}
function set_notify(&$user, $notify)
{
$orig = clone($user);
$user->jabbernotify = $notify;
$result = $user->update($orig);
if (!$result) {
$last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
common_log(LOG_ERR,
'Could not set notify flag to ' . $notify .
' for user ' . common_log_objstring($user) .
': ' . $last_error->message);
return false;
} else {
common_log(LOG_INFO,
'User ' . $user->nickname . ' set notify flag to ' . $notify);
return true;
}
}
}
class WebChannel extends Channel
{
var $out = null;

View File

@ -678,7 +678,7 @@ class OffCommand extends Command
}
function handle($channel)
{
if ($other) {
if ($this->other) {
$channel->error($this->user, _("Command not yet implemented."));
} else {
if ($channel->off($this->user)) {
@ -701,7 +701,7 @@ class OnCommand extends Command
function handle($channel)
{
if ($other) {
if ($this->other) {
$channel->error($this->user, _("Command not yet implemented."));
} else {
if ($channel->on($this->user)) {

View File

@ -71,6 +71,7 @@ if (!function_exists('dl')) {
# global configuration object
require_once('PEAR.php');
require_once('PEAR/Exception.php');
require_once('DB/DataObject.php');
require_once('DB/DataObject/Cast.php'); # for dates
@ -127,6 +128,23 @@ require_once INSTALLDIR.'/lib/subs.php';
require_once INSTALLDIR.'/lib/clientexception.php';
require_once INSTALLDIR.'/lib/serverexception.php';
//set PEAR error handling to use regular PHP exceptions
function PEAR_ErrorToPEAR_Exception($err)
{
//DB_DataObject throws error when an empty set would be returned
//That behavior is weird, and not how the rest of StatusNet works.
//So just ignore those errors.
if ($err->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
return;
}
if ($err->getCode()) {
throw new PEAR_Exception($err->getMessage(), $err->getCode());
}
throw new PEAR_Exception($err->getMessage());
}
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'PEAR_ErrorToPEAR_Exception');
try {
StatusNet::init(@$server, @$path, @$conffile);
} catch (NoConfigException $e) {

View File

@ -105,7 +105,9 @@ class ConnectSettingsNav extends Widget
# action => array('prompt', 'title')
$menu = array();
if (common_config('xmpp', 'enabled')) {
$transports = array();
Event::handle('GetImTransports', array(&$transports));
if ($transports) {
$menu['imsettings'] =
array(_('IM'),
_('Updates by instant messenger (IM)'));

View File

@ -297,10 +297,12 @@ $default =
'OStatus' => null,
'WikiHashtags' => null,
'RSSCloud' => null,
'ClientSideShorten' => null,
'OpenID' => null),
),
'pluginlist' => array(),
'admin' =>
array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions', 'sitenotice')),
array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions', 'sitenotice', 'plugins')),
'singleuser' =>
array('enabled' => false,
'nickname' => null),
@ -314,6 +316,10 @@ $default =
array('subscribers' => true,
'members' => true,
'peopletag' => true),
'url' =>
array('shortener' => 'ur1.ca',
'maxlength' => 25,
'maxnoticelength' => -1),
'http' => // HTTP client settings when contacting other sites
array('ssl_cafile' => false // To enable SSL cert validation, point to a CA bundle (eg '/usr/lib/ssl/certs/ca-certificates.crt')
),

293
lib/designform.php Normal file
View File

@ -0,0 +1,293 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Form for choosing a design
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Form
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2009 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
/**
* Form for choosing a design
*
* Used for choosing a site design, user design, or group design.
*
* @category Form
* @package StatusNet
* @author Evan Prodromou <evan@status.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/
*
*/
class DesignForm extends Form
{
/**
* Return-to args
*/
var $design = null;
var $actionurl = null;
/**
* Constructor
*
* @param HTMLOutputter $out output channel
* @param Design $design initial design
* @param Design $actionurl url of action (for form posting)
*/
function __construct($out, $design, $actionurl)
{
parent::__construct($out);
$this->design = $design;
$this->actionurl = $actionurl;
}
/**
* ID of the form
*
* @return int ID of the form
*/
function id()
{
return 'design';
}
/**
* class of the form
*
* @return string class of the form
*/
function formClass()
{
return 'form_design';
}
/**
* Action of the form
*
* @return string URL of the action
*/
function action()
{
return $this->actionurl;
}
/**
* Legend of the Form
*
* @return void
*/
function formLegend()
{
$this->out->element('legend', null, _('Change design'));
}
/**
* Data elements of the form
*
* @return void
*/
function formData()
{
$this->out->elementStart('ul', 'form_data');
$this->out->elementStart('li');
$this->out->element('label', array('for' => 'design_background-image_file'),
_('Upload file'));
$this->out->element('input', array('name' => 'design_background-image_file',
'type' => 'file',
'id' => 'design_background-image_file'));
$this->out->element('p', 'form_guide', _('You can upload your personal ' .
'background image. The maximum file size is 2Mb.'));
$this->out->element('input', array('name' => 'MAX_FILE_SIZE',
'type' => 'hidden',
'id' => 'MAX_FILE_SIZE',
'value' => ImageFile::maxFileSizeInt()));
$this->out->elementEnd('li');
if (!empty($design->backgroundimage)) {
$this->out->elementStart('li', array('id' =>
'design_background-image_onoff'));
$this->out->element('img', array('src' =>
Design::url($design->backgroundimage)));
$attrs = array('name' => 'design_background-image_onoff',
'type' => 'radio',
'id' => 'design_background-image_on',
'class' => 'radio',
'value' => 'on');
if ($design->disposition & BACKGROUND_ON) {
$attrs['checked'] = 'checked';
}
$this->out->element('input', $attrs);
$this->out->element('label', array('for' => 'design_background-image_on',
'class' => 'radio'),
_('On'));
$attrs = array('name' => 'design_background-image_onoff',
'type' => 'radio',
'id' => 'design_background-image_off',
'class' => 'radio',
'value' => 'off');
if ($design->disposition & BACKGROUND_OFF) {
$attrs['checked'] = 'checked';
}
$this->out->element('input', $attrs);
$this->out->element('label', array('for' => 'design_background-image_off',
'class' => 'radio'),
_('Off'));
$this->out->element('p', 'form_guide', _('Turn background image on or off.'));
$this->out->elementEnd('li');
$this->out->elementStart('li');
$this->out->checkbox('design_background-image_repeat',
_('Tile background image'),
($design->disposition & BACKGROUND_TILE) ? true : false);
$this->out->elementEnd('li');
}
$this->out->elementEnd('ul');
$this->out->elementEnd('fieldset');
$this->out->elementStart('fieldset', array('id' => 'settings_design_color'));
$this->out->element('legend', null, _('Change colours'));
$this->out->elementStart('ul', 'form_data');
try {
$bgcolor = new WebColor($design->backgroundcolor);
$this->out->elementStart('li');
$this->out->element('label', array('for' => 'swatch-1'), _('Background'));
$this->out->element('input', array('name' => 'design_background',
'type' => 'text',
'id' => 'swatch-1',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->out->elementEnd('li');
$ccolor = new WebColor($design->contentcolor);
$this->out->elementStart('li');
$this->out->element('label', array('for' => 'swatch-2'), _('Content'));
$this->out->element('input', array('name' => 'design_content',
'type' => 'text',
'id' => 'swatch-2',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->out->elementEnd('li');
$sbcolor = new WebColor($design->sidebarcolor);
$this->out->elementStart('li');
$this->out->element('label', array('for' => 'swatch-3'), _('Sidebar'));
$this->out->element('input', array('name' => 'design_sidebar',
'type' => 'text',
'id' => 'swatch-3',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->out->elementEnd('li');
$tcolor = new WebColor($design->textcolor);
$this->out->elementStart('li');
$this->out->element('label', array('for' => 'swatch-4'), _('Text'));
$this->out->element('input', array('name' => 'design_text',
'type' => 'text',
'id' => 'swatch-4',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->out->elementEnd('li');
$lcolor = new WebColor($design->linkcolor);
$this->out->elementStart('li');
$this->out->element('label', array('for' => 'swatch-5'), _('Links'));
$this->out->element('input', array('name' => 'design_links',
'type' => 'text',
'id' => 'swatch-5',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->out->elementEnd('li');
} catch (WebColorException $e) {
common_log(LOG_ERR, 'Bad color values in design ID: ' .$design->id);
}
$this->out->elementEnd('ul');
$this->out->elementEnd('fieldset');
$this->out->elementStart('fieldset');
$this->out->submit('defaults', _('Use defaults'), 'submit form_action-default',
'defaults', _('Restore default designs'));
$this->out->element('input', array('id' => 'settings_design_reset',
'type' => 'reset',
'value' => 'Reset',
'class' => 'submit form_action-primary',
'title' => _('Reset back to default')));
}
/**
* Action elements
*
* @return void
*/
function formActions()
{
$this->out->submit('save', _('Save'), 'submit form_action-secondary',
'save', _('Save design'));
}
}

View File

@ -87,177 +87,8 @@ class DesignSettingsAction extends AccountSettingsAction
function showDesignForm($design)
{
$this->elementStart('form', array('method' => 'post',
'enctype' => 'multipart/form-data',
'id' => 'form_settings_design',
'class' => 'form_settings',
'action' => $this->submitaction));
$this->elementStart('fieldset');
$this->hidden('token', common_session_token());
$this->elementStart('fieldset', array('id' =>
'settings_design_background-image'));
$this->element('legend', null, _('Change background image'));
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
$this->element('label', array('for' => 'design_background-image_file'),
_('Upload file'));
$this->element('input', array('name' => 'design_background-image_file',
'type' => 'file',
'id' => 'design_background-image_file'));
$this->element('p', 'form_guide', _('You can upload your personal ' .
'background image. The maximum file size is 2MB.'));
$this->element('input', array('name' => 'MAX_FILE_SIZE',
'type' => 'hidden',
'id' => 'MAX_FILE_SIZE',
'value' => ImageFile::maxFileSizeInt()));
$this->elementEnd('li');
if (!empty($design->backgroundimage)) {
$this->elementStart('li', array('id' =>
'design_background-image_onoff'));
$this->element('img', array('src' =>
Design::url($design->backgroundimage)));
$attrs = array('name' => 'design_background-image_onoff',
'type' => 'radio',
'id' => 'design_background-image_on',
'class' => 'radio',
'value' => 'on');
if ($design->disposition & BACKGROUND_ON) {
$attrs['checked'] = 'checked';
}
$this->element('input', $attrs);
$this->element('label', array('for' => 'design_background-image_on',
'class' => 'radio'),
_('On'));
$attrs = array('name' => 'design_background-image_onoff',
'type' => 'radio',
'id' => 'design_background-image_off',
'class' => 'radio',
'value' => 'off');
if ($design->disposition & BACKGROUND_OFF) {
$attrs['checked'] = 'checked';
}
$this->element('input', $attrs);
$this->element('label', array('for' => 'design_background-image_off',
'class' => 'radio'),
_('Off'));
$this->element('p', 'form_guide', _('Turn background image on or off.'));
$this->elementEnd('li');
$this->elementStart('li');
$this->checkbox('design_background-image_repeat',
_('Tile background image'),
($design->disposition & BACKGROUND_TILE) ? true : false);
$this->elementEnd('li');
}
$this->elementEnd('ul');
$this->elementEnd('fieldset');
$this->elementStart('fieldset', array('id' => 'settings_design_color'));
$this->element('legend', null, _('Change colours'));
$this->elementStart('ul', 'form_data');
try {
$bgcolor = new WebColor($design->backgroundcolor);
$this->elementStart('li');
$this->element('label', array('for' => 'swatch-1'), _('Background'));
$this->element('input', array('name' => 'design_background',
'type' => 'text',
'id' => 'swatch-1',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->elementEnd('li');
$ccolor = new WebColor($design->contentcolor);
$this->elementStart('li');
$this->element('label', array('for' => 'swatch-2'), _('Content'));
$this->element('input', array('name' => 'design_content',
'type' => 'text',
'id' => 'swatch-2',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->elementEnd('li');
$sbcolor = new WebColor($design->sidebarcolor);
$this->elementStart('li');
$this->element('label', array('for' => 'swatch-3'), _('Sidebar'));
$this->element('input', array('name' => 'design_sidebar',
'type' => 'text',
'id' => 'swatch-3',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->elementEnd('li');
$tcolor = new WebColor($design->textcolor);
$this->elementStart('li');
$this->element('label', array('for' => 'swatch-4'), _('Text'));
$this->element('input', array('name' => 'design_text',
'type' => 'text',
'id' => 'swatch-4',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->elementEnd('li');
$lcolor = new WebColor($design->linkcolor);
$this->elementStart('li');
$this->element('label', array('for' => 'swatch-5'), _('Links'));
$this->element('input', array('name' => 'design_links',
'type' => 'text',
'id' => 'swatch-5',
'class' => 'swatch',
'maxlength' => '7',
'size' => '7',
'value' => ''));
$this->elementEnd('li');
} catch (WebColorException $e) {
common_log(LOG_ERR, 'Bad color values in design ID: ' .$design->id);
}
$this->elementEnd('ul');
$this->elementEnd('fieldset');
$this->submit('defaults', _('Use defaults'), 'submit form_action-default',
'defaults', _('Restore default designs'));
$this->element('input', array('id' => 'settings_design_reset',
'type' => 'reset',
'value' => 'Reset',
'class' => 'submit form_action-primary',
'title' => _('Reset back to default')));
$this->submit('save', _('Save'), 'submit form_action-secondary',
'save', _('Save design'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
$form = new DesignForm($this, $design, $this->selfUrl());
$form->show();
}
/**

View File

@ -177,7 +177,7 @@ class HTMLOutputter extends XMLOutputter
$attrs = array('name' => $id,
'type' => 'text',
'id' => $id);
if ($value) {
if (!is_null($value)) { // value can be 0 or ''
$attrs['value'] = $value;
}
$this->element('input', $attrs);

104
lib/imchannel.php Normal file
View File

@ -0,0 +1,104 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2008, 2009, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
class IMChannel extends Channel
{
var $imPlugin;
function source()
{
return $imPlugin->transport;
}
function __construct($imPlugin)
{
$this->imPlugin = $imPlugin;
}
function on($user)
{
return $this->set_notify($user, 1);
}
function off($user)
{
return $this->set_notify($user, 0);
}
function output($user, $text)
{
$text = '['.common_config('site', 'name') . '] ' . $text;
$this->imPlugin->send_message($this->imPlugin->get_screenname($user), $text);
}
function error($user, $text)
{
$text = '['.common_config('site', 'name') . '] ' . $text;
$screenname = $this->imPlugin->get_screenname($user);
if($screenname){
$this->imPlugin->send_message($screenname, $text);
return true;
}else{
common_log(LOG_ERR,
'Could not send error message to user ' . common_log_objstring($user) .
' on transport ' . $this->imPlugin->transport .' : user preference does not exist');
return false;
}
}
function set_notify($user, $notify)
{
$user_im_prefs = new User_im_prefs();
$user_im_prefs->transport = $this->imPlugin->transport;
$user_im_prefs->user_id = $user->id;
if($user_im_prefs->find() && $user_im_prefs->fetch()){
if($user_im_prefs->notify == $notify){
//notify is already set the way they want
return true;
}else{
$original = clone($user_im_prefs);
$user_im_prefs->notify = $notify;
$result = $user_im_prefs->update($original);
if (!$result) {
$last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
common_log(LOG_ERR,
'Could not set notify flag to ' . $notify .
' for user ' . common_log_objstring($user) .
' on transport ' . $this->imPlugin->transport .' : ' . $last_error->message);
return false;
} else {
common_log(LOG_INFO,
'User ' . $user->nickname . ' set notify flag to ' . $notify);
return true;
}
}
}else{
common_log(LOG_ERR,
'Could not set notify flag to ' . $notify .
' for user ' . common_log_objstring($user) .
' on transport ' . $this->imPlugin->transport .' : user preference does not exist');
return false;
}
}
}

56
lib/immanager.php Normal file
View File

@ -0,0 +1,56 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2008, 2009, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
/**
* IKM background connection manager for IM-using queue handlers,
* allowing them to send outgoing messages on the right connection.
*
* In a multi-site queuedaemon.php run, one connection will be instantiated
* for each site being handled by the current process that has IM enabled.
*
* Implementations that extend this class will likely want to:
* 1) override start() with their connection process.
* 2) override handleInput() with what to do when data is waiting on
* one of the sockets
* 3) override idle($timeout) to do keepalives (if necessary)
* 4) implement send_raw_message() to send raw data that ImPlugin::enqueue_outgoing_raw
* enqueued
*/
abstract class ImManager extends IoManager
{
abstract function send_raw_message($data);
function __construct($imPlugin)
{
$this->plugin = $imPlugin;
$this->plugin->imManager = $this;
}
/**
* Fetch the singleton manager for the current site.
* @return mixed ImManager, or false if unneeded
*/
public static function get()
{
throw new Exception('ImManager should be created using it\'s constructor, not the static get method');
}
}

631
lib/implugin.php Normal file
View File

@ -0,0 +1,631 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Superclass for plugins that do instant messaging
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Plugin
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @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);
}
/**
* Superclass for plugins that do authentication
*
* Implementations will likely want to override onStartIoManagerClasses() so that their
* IO manager is used
*
* @category Plugin
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
abstract class ImPlugin extends Plugin
{
//name of this IM transport
public $transport = null;
//list of screennames that should get all public notices
public $public = array();
/**
* normalize a screenname for comparison
*
* @param string $screenname screenname to normalize
*
* @return string an equivalent screenname in normalized form
*/
abstract function normalize($screenname);
/**
* validate (ensure the validity of) a screenname
*
* @param string $screenname screenname to validate
*
* @return boolean
*/
abstract function validate($screenname);
/**
* get the internationalized/translated display name of this IM service
*
* @return string
*/
abstract function getDisplayName();
/**
* send a single notice to a given screenname
* The implementation should put raw data, ready to send, into the outgoing
* queue using enqueue_outgoing_raw()
*
* @param string $screenname screenname to send to
* @param Notice $notice notice to send
*
* @return boolean success value
*/
function send_notice($screenname, $notice)
{
return $this->send_message($screenname, $this->format_notice($notice));
}
/**
* send a message (text) to a given screenname
* The implementation should put raw data, ready to send, into the outgoing
* queue using enqueue_outgoing_raw()
*
* @param string $screenname screenname to send to
* @param Notice $body text to send
*
* @return boolean success value
*/
abstract function send_message($screenname, $body);
/**
* receive a raw message
* Raw IM data is taken from the incoming queue, and passed to this function.
* It should parse the raw message and call handle_incoming()
*
* Returning false may CAUSE REPROCESSING OF THE QUEUE ITEM, and should
* be used for temporary failures only. For permanent failures such as
* unrecognized addresses, return true to indicate your processing has
* completed.
*
* @param object $data raw IM data
*
* @return boolean true if processing completed, false for temporary failures
*/
abstract function receive_raw_message($data);
/**
* get the screenname of the daemon that sends and receives message for this service
*
* @return string screenname of this plugin
*/
abstract function daemon_screenname();
/**
* get the microid uri of a given screenname
*
* @param string $screenname screenname
*
* @return string microid uri
*/
function microiduri($screenname)
{
return $this->transport . ':' . $screenname;
}
//========================UTILITY FUNCTIONS USEFUL TO IMPLEMENTATIONS - MISC ========================\
/**
* Put raw message data (ready to send) into the outgoing queue
*
* @param object $data
*/
function enqueue_outgoing_raw($data)
{
$qm = QueueManager::get();
$qm->enqueue($data, $this->transport . '-out');
}
/**
* Put raw message data (received, ready to be processed) into the incoming queue
*
* @param object $data
*/
function enqueue_incoming_raw($data)
{
$qm = QueueManager::get();
$qm->enqueue($data, $this->transport . '-in');
}
/**
* given a screenname, get the corresponding user
*
* @param string $screenname
*
* @return User user
*/
function get_user($screenname)
{
$user_im_prefs = $this->get_user_im_prefs_from_screenname($screenname);
if($user_im_prefs){
$user = User::staticGet('id', $user_im_prefs->user_id);
$user_im_prefs->free();
return $user;
}else{
return false;
}
}
/**
* given a screenname, get the User_im_prefs object for this transport
*
* @param string $screenname
*
* @return User_im_prefs user_im_prefs
*/
function get_user_im_prefs_from_screenname($screenname)
{
$user_im_prefs = User_im_prefs::pkeyGet(
array('transport' => $this->transport,
'screenname' => $this->normalize($screenname)));
if ($user_im_prefs) {
return $user_im_prefs;
} else {
return false;
}
}
/**
* given a User, get their screenname
*
* @param User $user
*
* @return string screenname of that user
*/
function get_screenname($user)
{
$user_im_prefs = $this->get_user_im_prefs_from_user($user);
if ($user_im_prefs) {
return $user_im_prefs->screenname;
} else {
return false;
}
}
/**
* given a User, get their User_im_prefs
*
* @param User $user
*
* @return User_im_prefs user_im_prefs of that user
*/
function get_user_im_prefs_from_user($user)
{
$user_im_prefs = User_im_prefs::pkeyGet(
array('transport' => $this->transport,
'user_id' => $user->id));
if ($user_im_prefs){
return $user_im_prefs;
} else {
return false;
}
}
//========================UTILITY FUNCTIONS USEFUL TO IMPLEMENTATIONS - SENDING ========================\
/**
* Send a message to a given screenname from the site
*
* @param string $screenname screenname to send the message to
* @param string $msg message contents to send
*
* @param boolean success
*/
protected function send_from_site($screenname, $msg)
{
$text = '['.common_config('site', 'name') . '] ' . $msg;
$this->send_message($screenname, $text);
}
/**
* send a confirmation code to a user
*
* @param string $screenname screenname sending to
* @param string $code the confirmation code
* @param User $user user sending to
*
* @return boolean success value
*/
function send_confirmation_code($screenname, $code, $user)
{
$body = sprintf(_('User "%s" on %s has said that your %s screenname belongs to them. ' .
'If that\'s true, you can confirm by clicking on this URL: ' .
'%s' .
' . (If you cannot click it, copy-and-paste it into the ' .
'address bar of your browser). If that user isn\'t you, ' .
'or if you didn\'t request this confirmation, just ignore this message.'),
$user->nickname, common_config('site', 'name'), $this->getDisplayName(), common_local_url('confirmaddress', array('code' => $code)));
return $this->send_message($screenname, $body);
}
/**
* send a notice to all public listeners
*
* For notices that are generated on the local system (by users), we can optionally
* forward them to remote listeners by XMPP.
*
* @param Notice $notice notice to broadcast
*
* @return boolean success flag
*/
function public_notice($notice)
{
// Now, users who want everything
// FIXME PRIV don't send out private messages here
// XXX: should we send out non-local messages if public,localonly
// = false? I think not
foreach ($this->public as $screenname) {
common_log(LOG_INFO,
'Sending notice ' . $notice->id .
' to public listener ' . $screenname,
__FILE__);
$this->send_notice($screenname, $notice);
}
return true;
}
/**
* broadcast a notice to all subscribers and reply recipients
*
* This function will send a notice to all subscribers on the local server
* who have IM addresses, and have IM notification enabled, and
* have this subscription enabled for IM. It also sends the notice to
* all recipients of @-replies who have IM addresses and IM notification
* enabled. This is really the heart of IM distribution in StatusNet.
*
* @param Notice $notice The notice to broadcast
*
* @return boolean success flag
*/
function broadcast_notice($notice)
{
$ni = $notice->whoGets();
foreach ($ni as $user_id => $reason) {
$user = User::staticGet($user_id);
if (empty($user)) {
// either not a local user, or just not found
continue;
}
$user_im_prefs = $this->get_user_im_prefs_from_user($user);
if(!$user_im_prefs || !$user_im_prefs->notify){
continue;
}
switch ($reason) {
case NOTICE_INBOX_SOURCE_REPLY:
if (!$user_im_prefs->replies) {
continue 2;
}
break;
case NOTICE_INBOX_SOURCE_SUB:
$sub = Subscription::pkeyGet(array('subscriber' => $user->id,
'subscribed' => $notice->profile_id));
if (empty($sub) || !$sub->jabber) {
continue 2;
}
break;
case NOTICE_INBOX_SOURCE_GROUP:
break;
default:
throw new Exception(sprintf(_("Unknown inbox source %d."), $reason));
}
common_log(LOG_INFO,
'Sending notice ' . $notice->id . ' to ' . $user_im_prefs->screenname,
__FILE__);
$this->send_notice($user_im_prefs->screenname, $notice);
$user_im_prefs->free();
}
return true;
}
/**
* makes a plain-text formatted version of a notice, suitable for IM distribution
*
* @param Notice $notice notice being sent
*
* @return string plain-text version of the notice, with user nickname prefixed
*/
function format_notice($notice)
{
$profile = $notice->getProfile();
return $profile->nickname . ': ' . $notice->content . ' [' . $notice->id . ']';
}
//========================UTILITY FUNCTIONS USEFUL TO IMPLEMENTATIONS - RECEIVING ========================\
/**
* Attempt to handle a message as a command
* @param User $user user the message is from
* @param string $body message text
* @return boolean true if the message was a command and was executed, false if it was not a command
*/
protected function handle_command($user, $body)
{
$inter = new CommandInterpreter();
$cmd = $inter->handle_command($user, $body);
if ($cmd) {
$chan = new IMChannel($this);
$cmd->execute($chan);
return true;
} else {
return false;
}
}
/**
* Is some text an autoreply message?
* @param string $txt message text
* @return boolean true if autoreply
*/
protected 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;
}
}
/**
* Is some text an OTR message?
* @param string $txt message text
* @return boolean true if OTR
*/
protected function is_otr($txt)
{
if (preg_match('/^\?OTR/', $txt)) {
return true;
} else {
return false;
}
}
/**
* Helper for handling incoming messages
* Your incoming message handler will probably want to call this function
*
* @param string $from screenname the message was sent from
* @param string $message message contents
*
* @param boolean success
*/
protected function handle_incoming($from, $notice_text)
{
$user = $this->get_user($from);
// For common_current_user to work
global $_cur;
$_cur = $user;
if (!$user) {
$this->send_from_site($from, 'Unknown user; go to ' .
common_local_url('imsettings') .
' to add your address to your account');
common_log(LOG_WARNING, 'Message from unknown user ' . $from);
return;
}
if ($this->handle_command($user, $notice_text)) {
common_log(LOG_INFO, "Command message by $from handled.");
return;
} else if ($this->is_autoreply($notice_text)) {
common_log(LOG_INFO, 'Ignoring auto reply from ' . $from);
return;
} else if ($this->is_otr($notice_text)) {
common_log(LOG_INFO, 'Ignoring OTR from ' . $from);
return;
} else {
common_log(LOG_INFO, 'Posting a notice from ' . $user->nickname);
$this->add_notice($from, $user, $notice_text);
}
$user->free();
unset($user);
unset($_cur);
unset($message);
}
/**
* Helper for handling incoming messages
* Your incoming message handler will probably want to call this function
*
* @param string $from screenname the message was sent from
* @param string $message message contents
*
* @param boolean success
*/
protected function add_notice($screenname, $user, $body)
{
$body = trim(strip_tags($body));
$content_shortened = common_shorten_links($body);
if (Notice::contentTooLong($content_shortened)) {
$this->send_from_site($screenname, 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, $this->transport);
} catch (Exception $e) {
common_log(LOG_ERR, $e->getMessage());
$this->send_from_site($from, $e->getMessage());
return;
}
common_broadcast_notice($notice);
common_log(LOG_INFO,
'Added notice ' . $notice->id . ' from user ' . $user->nickname);
$notice->free();
unset($notice);
}
//========================EVENT HANDLERS========================\
/**
* Register notice queue handler
*
* @param QueueManager $manager
*
* @return boolean hook return
*/
function onEndInitializeQueueManager($manager)
{
$manager->connect($this->transport . '-in', new ImReceiverQueueHandler($this), 'im');
$manager->connect($this->transport, new ImQueueHandler($this));
$manager->connect($this->transport . '-out', new ImSenderQueueHandler($this), 'im');
return true;
}
function onStartImDaemonIoManagers(&$classes)
{
//$classes[] = new ImManager($this); // handles sending/receiving/pings/reconnects
return true;
}
function onStartEnqueueNotice($notice, &$transports)
{
$profile = Profile::staticGet($notice->profile_id);
if (!$profile) {
common_log(LOG_WARNING, 'Refusing to broadcast notice with ' .
'unknown profile ' . common_log_objstring($notice),
__FILE__);
}else{
$transports[] = $this->transport;
}
return true;
}
function onEndShowHeadElements($action)
{
$aname = $action->trimmed('action');
if ($aname == 'shownotice') {
$user_im_prefs = new User_im_prefs();
$user_im_prefs->user_id = $action->profile->id;
$user_im_prefs->transport = $this->transport;
if ($user_im_prefs->find() && $user_im_prefs->fetch() && $user_im_prefs->microid && $action->notice->uri) {
$id = new Microid($this->microiduri($user_im_prefs->screenname),
$action->notice->uri);
$action->element('meta', array('name' => 'microid',
'content' => $id->toString()));
}
} else if ($aname == 'showstream') {
$user_im_prefs = new User_im_prefs();
$user_im_prefs->user_id = $action->user->id;
$user_im_prefs->transport = $this->transport;
if ($user_im_prefs->find() && $user_im_prefs->fetch() && $user_im_prefs->microid && $action->profile->profileurl) {
$id = new Microid($this->microiduri($user_im_prefs->screenname),
$action->selfUrl());
$action->element('meta', array('name' => 'microid',
'content' => $id->toString()));
}
}
}
function onNormalizeImScreenname($transport, &$screenname)
{
if($transport == $this->transport)
{
$screenname = $this->normalize($screenname);
return false;
}
}
function onValidateImScreenname($transport, $screenname, &$valid)
{
if($transport == $this->transport)
{
$valid = $this->validate($screenname);
return false;
}
}
function onGetImTransports(&$transports)
{
$transports[$this->transport] = array(
'display' => $this->getDisplayName(),
'daemon_screenname' => $this->daemon_screenname());
}
function onSendImConfirmationCode($transport, $screenname, $code, $user)
{
if($transport == $this->transport)
{
$this->send_confirmation_code($screenname, $code, $user);
return false;
}
}
function onUserDeleteRelated($user, &$tables)
{
$tables[] = 'User_im_prefs';
return true;
}
function initialize()
{
if( ! common_config('queue', 'enabled'))
{
throw new ServerException("Queueing must be enabled to use IM plugins");
}
if(is_null($this->transport)){
throw new ServerException('transport cannot be null');
}
}
}

View File

@ -17,31 +17,32 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
/**
* Queue handler for pushing new notices to Jabber users.
* @fixme this exception handling doesn't look very good.
* Common superclass for all IM sending queue handlers.
*/
class JabberQueueHandler extends QueueHandler
{
var $conn = null;
function transport()
class ImQueueHandler extends QueueHandler
{
function __construct($plugin)
{
return 'jabber';
$this->plugin = $plugin;
}
/**
* Handle a notice
* @param Notice $notice
* @return boolean success
*/
function handle($notice)
{
require_once(INSTALLDIR.'/lib/jabber.php');
try {
return jabber_broadcast_notice($notice);
} catch (XMPPHP_Exception $e) {
common_log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
return false;
$this->plugin->broadcast_notice($notice);
if ($notice->is_local == Notice::LOCAL_PUBLIC ||
$notice->is_local == Notice::LOCAL_NONPUBLIC) {
$this->plugin->public_notice($notice);
}
return true;
}
}

View File

@ -17,29 +17,26 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
/**
* Queue handler for pushing new notices to public XMPP subscribers.
* Common superclass for all IM receiving queue handlers.
*/
class PublicQueueHandler extends QueueHandler
{
function transport()
class ImReceiverQueueHandler extends QueueHandler
{
function __construct($plugin)
{
return 'public';
$this->plugin = $plugin;
}
function handle($notice)
/**
* Handle incoming IM data sent by a user to the IM bot
* @param object $data
* @return boolean success
*/
function handle($data)
{
require_once(INSTALLDIR.'/lib/jabber.php');
try {
return jabber_public_notice($notice);
} catch (XMPPHP_Exception $e) {
common_log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
return false;
}
return $this->plugin->receive_raw_message($data);
}
}

View File

@ -0,0 +1,43 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2008, 2009, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
/**
* Common superclass for all IM sending queue handlers.
*/
class ImSenderQueueHandler extends QueueHandler
{
function __construct($plugin)
{
$this->plugin = $plugin;
}
/**
* Handle outgoing IM data to be sent from the bot to a user
* @param object $data
* @return boolean success
*/
function handle($data)
{
return $this->plugin->imManager->send_raw_message($data);
}
}

View File

@ -91,7 +91,7 @@ abstract class Installer
}
if (version_compare(PHP_VERSION, '5.2.3', '<')) {
$errors[] = 'Require PHP version 5.2.3 or greater.';
$this->warning('Require PHP version 5.2.3 or greater.');
$pass = false;
}

View File

@ -1,640 +0,0 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* utility functions for Jabber/GTalk/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 Evan Prodromou <evan@status.net>
* @copyright 2008 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 'XMPPHP/XMPP.php';
/**
* Splits a Jabber ID (JID) into node, domain, and resource portions.
*
* Based on validation routine submitted by:
* @copyright 2009 Patrick Georgi <patrick@georgi-clan.de>
* @license Licensed under ISC-L, which is compatible with everything else that keeps the copyright notice intact.
*
* @param string $jid string to check
*
* @return array with "node", "domain", and "resource" indices
* @throws Exception if input is not valid
*/
function jabber_split_jid($jid)
{
$chars = '';
/* the following definitions come from stringprep, Appendix C,
which is used in its entirety by nodeprop, Chapter 5, "Prohibited Output" */
/* C1.1 ASCII space characters */
$chars .= "\x{20}";
/* C1.2 Non-ASCII space characters */
$chars .= "\x{a0}\x{1680}\x{2000}-\x{200b}\x{202f}\x{205f}\x{3000a}";
/* C2.1 ASCII control characters */
$chars .= "\x{00}-\x{1f}\x{7f}";
/* C2.2 Non-ASCII control characters */
$chars .= "\x{80}-\x{9f}\x{6dd}\x{70f}\x{180e}\x{200c}\x{200d}\x{2028}\x{2029}\x{2060}-\x{2063}\x{206a}-\x{206f}\x{feff}\x{fff9}-\x{fffc}\x{1d173}-\x{1d17a}";
/* C3 - Private Use */
$chars .= "\x{e000}-\x{f8ff}\x{f0000}-\x{ffffd}\x{100000}-\x{10fffd}";
/* C4 - Non-character code points */
$chars .= "\x{fdd0}-\x{fdef}\x{fffe}\x{ffff}\x{1fffe}\x{1ffff}\x{2fffe}\x{2ffff}\x{3fffe}\x{3ffff}\x{4fffe}\x{4ffff}\x{5fffe}\x{5ffff}\x{6fffe}\x{6ffff}\x{7fffe}\x{7ffff}\x{8fffe}\x{8ffff}\x{9fffe}\x{9ffff}\x{afffe}\x{affff}\x{bfffe}\x{bffff}\x{cfffe}\x{cffff}\x{dfffe}\x{dffff}\x{efffe}\x{effff}\x{ffffe}\x{fffff}\x{10fffe}\x{10ffff}";
/* C5 - Surrogate codes */
$chars .= "\x{d800}-\x{dfff}";
/* C6 - Inappropriate for plain text */
$chars .= "\x{fff9}-\x{fffd}";
/* C7 - Inappropriate for canonical representation */
$chars .= "\x{2ff0}-\x{2ffb}";
/* C8 - Change display properties or are deprecated */
$chars .= "\x{340}\x{341}\x{200e}\x{200f}\x{202a}-\x{202e}\x{206a}-\x{206f}";
/* C9 - Tagging characters */
$chars .= "\x{e0001}\x{e0020}-\x{e007f}";
/* Nodeprep forbids some more characters */
$nodeprepchars = $chars;
$nodeprepchars .= "\x{22}\x{26}\x{27}\x{2f}\x{3a}\x{3c}\x{3e}\x{40}";
$parts = explode("/", $jid, 2);
if (count($parts) > 1) {
$resource = $parts[1];
if ($resource == '') {
// Warning: empty resource isn't legit.
// But if we're normalizing, we may as well take it...
}
} else {
$resource = null;
}
$node = explode("@", $parts[0]);
if ((count($node) > 2) || (count($node) == 0)) {
throw new Exception("Invalid JID: too many @s");
} else if (count($node) == 1) {
$domain = $node[0];
$node = null;
} else {
$domain = $node[1];
$node = $node[0];
if ($node == '') {
throw new Exception("Invalid JID: @ but no node");
}
}
// Length limits per http://xmpp.org/rfcs/rfc3920.html#addressing
if ($node !== null) {
if (strlen($node) > 1023) {
throw new Exception("Invalid JID: node too long.");
}
if (preg_match("/[".$nodeprepchars."]/u", $node)) {
throw new Exception("Invalid JID node '$node'");
}
}
if (strlen($domain) > 1023) {
throw new Exception("Invalid JID: domain too long.");
}
if (!common_valid_domain($domain)) {
throw new Exception("Invalid JID domain name '$domain'");
}
if ($resource !== null) {
if (strlen($resource) > 1023) {
throw new Exception("Invalid JID: resource too long.");
}
if (preg_match("/[".$chars."]/u", $resource)) {
throw new Exception("Invalid JID resource '$resource'");
}
}
return array('node' => is_null($node) ? null : mb_strtolower($node),
'domain' => is_null($domain) ? null : mb_strtolower($domain),
'resource' => $resource);
}
/**
* Checks whether a string is a syntactically valid Jabber ID (JID),
* either with or without a resource.
*
* Note that a bare domain can be a valid JID.
*
* @param string $jid string to check
* @param bool $check_domain whether we should validate that domain...
*
* @return boolean whether the string is a valid JID
*/
function jabber_valid_full_jid($jid, $check_domain=false)
{
try {
$parts = jabber_split_jid($jid);
if ($check_domain) {
if (!jabber_check_domain($parts['domain'])) {
return false;
}
}
return $parts['resource'] !== ''; // missing or present; empty ain't kosher
} catch (Exception $e) {
return false;
}
}
/**
* Checks whether a string is a syntactically valid base Jabber ID (JID).
* A base JID won't include a resource specifier on the end; since we
* take it off when reading input we can't really use them reliably
* to direct outgoing messages yet (sorry guys!)
*
* Note that a bare domain can be a valid JID.
*
* @param string $jid string to check
* @param bool $check_domain whether we should validate that domain...
*
* @return boolean whether the string is a valid JID
*/
function jabber_valid_base_jid($jid, $check_domain=false)
{
try {
$parts = jabber_split_jid($jid);
if ($check_domain) {
if (!jabber_check_domain($parts['domain'])) {
return false;
}
}
return ($parts['resource'] === null); // missing; empty ain't kosher
} catch (Exception $e) {
return false;
}
}
/**
* Normalizes a Jabber ID for comparison, dropping the resource component if any.
*
* @param string $jid JID to check
* @param bool $check_domain if true, reject if the domain isn't findable
*
* @return string an equivalent JID in normalized (lowercase) form
*/
function jabber_normalize_jid($jid)
{
try {
$parts = jabber_split_jid($jid);
if ($parts['node'] !== null) {
return $parts['node'] . '@' . $parts['domain'];
} else {
return $parts['domain'];
}
} catch (Exception $e) {
return null;
}
}
/**
* Check if this domain's got some legit DNS record
*/
function jabber_check_domain($domain)
{
if (checkdnsrr("_xmpp-server._tcp." . $domain, "SRV")) {
return true;
}
if (checkdnsrr($domain, "ANY")) {
return true;
}
return false;
}
/**
* the JID of the Jabber daemon for this StatusNet instance
*
* @return string JID of the Jabber daemon
*/
function jabber_daemon_address()
{
return common_config('xmpp', 'user') . '@' . common_config('xmpp', 'server');
}
class Sharing_XMPP extends XMPPHP_XMPP
{
function getSocket()
{
return $this->socket;
}
}
/**
* Build an XMPP proxy connection that'll save outgoing messages
* to the 'xmppout' queue to be picked up by xmppdaemon later.
*
* If queueing is disabled, we'll grab a live connection.
*
* @return XMPPHP
*/
function jabber_proxy()
{
if (common_config('queue', 'enabled')) {
$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;
} else {
return jabber_connect();
}
}
/**
* Lazy-connect the configured Jabber account to the configured server;
* if already opened, the same connection will be returned.
*
* In a multi-site background process, each site configuration
* will get its own connection.
*
* @param string $resource Resource to connect (defaults to configured resource)
*
* @return XMPPHP connection to the configured server
*/
function jabber_connect($resource=null)
{
static $connections = array();
$site = common_config('site', 'server');
if (empty($connections[$site])) {
if (empty($resource)) {
$resource = common_config('xmpp', 'resource');
}
$conn = new Sharing_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'),
$resource,
common_config('xmpp', 'server'),
common_config('xmpp', 'debug') ?
true : false,
common_config('xmpp', 'debug') ?
XMPPHP_Log::LEVEL_VERBOSE : null
);
if (!$conn) {
return false;
}
$connections[$site] = $conn;
$conn->autoSubscribe();
$conn->useEncryption(common_config('xmpp', 'encryption'));
try {
common_log(LOG_INFO, __METHOD__ . ": connecting " .
common_config('xmpp', 'user') . '/' . $resource);
//$conn->connect(true); // true = persistent connection
$conn->connect(); // persistent connections break multisite
} catch (XMPPHP_Exception $e) {
common_log(LOG_ERR, $e->getMessage());
return false;
}
$conn->processUntil('session_start');
}
return $connections[$site];
}
/**
* Queue send for a single notice to a given Jabber address
*
* @param string $to JID to send the notice to
* @param Notice $notice notice to send
*
* @return boolean success value
*/
function jabber_send_notice($to, $notice)
{
$conn = jabber_proxy();
$profile = Profile::staticGet($notice->profile_id);
if (!$profile) {
common_log(LOG_WARNING, 'Refusing to send notice with ' .
'unknown profile ' . common_log_objstring($notice),
__FILE__);
return false;
}
$msg = jabber_format_notice($profile, $notice);
$entry = jabber_format_entry($profile, $notice);
$conn->message($to, $msg, 'chat', null, $entry);
$profile->free();
return true;
}
/**
* extra information for XMPP messages, as defined by Twitter
*
* @param Profile $profile Profile of the sending user
* @param Notice $notice Notice being sent
*
* @return string Extra information (Atom, HTML, addresses) in string format
*/
function jabber_format_entry($profile, $notice)
{
$entry = $notice->asAtomEntry(true, true);
$xs = new XMLStringer();
$xs->elementStart('html', array('xmlns' => 'http://jabber.org/protocol/xhtml-im'));
$xs->elementStart('body', array('xmlns' => 'http://www.w3.org/1999/xhtml'));
$xs->element('a', array('href' => $profile->profileurl),
$profile->nickname);
$xs->text(": ");
if (!empty($notice->rendered)) {
$xs->raw($notice->rendered);
} else {
$xs->raw(common_render_content($notice->content, $notice));
}
$xs->text(" ");
$xs->element('a', array(
'href'=>common_local_url('conversation',
array('id' => $notice->conversation)).'#notice-'.$notice->id
),sprintf(_('[%s]'),$notice->id));
$xs->elementEnd('body');
$xs->elementEnd('html');
$html = $xs->getString();
return $html . ' ' . $entry;
}
/**
* sends a single text message to a given JID
*
* @param string $to JID to send the message to
* @param string $body body of the message
* @param string $type type of the message
* @param string $subject subject of the message
*
* @return boolean success flag
*/
function jabber_send_message($to, $body, $type='chat', $subject=null)
{
$conn = jabber_proxy();
$conn->message($to, $body, $type, $subject);
return true;
}
/**
* sends a presence stanza on the Jabber network
*
* @param string $status current status, free-form string
* @param string $show structured status value
* @param string $to recipient of presence, null for general
* @param string $type type of status message, related to $show
* @param int $priority priority of the presence
*
* @return boolean success value
*/
function jabber_send_presence($status, $show='available', $to=null,
$type = 'available', $priority=null)
{
$conn = jabber_connect();
if (!$conn) {
return false;
}
$conn->presence($status, $show, $to, $type, $priority);
return true;
}
/**
* sends a confirmation request to a JID
*
* @param string $code confirmation code for confirmation URL
* @param string $nickname nickname of confirming user
* @param string $address JID to send confirmation to
*
* @return boolean success flag
*/
function jabber_confirm_address($code, $nickname, $address)
{
$body = 'User "' . $nickname . '" on ' . common_config('site', 'name') . ' ' .
'has said that your Jabber ID belongs to them. ' .
'If that\'s true, you can confirm by clicking on this URL: ' .
common_local_url('confirmaddress', array('code' => $code)) .
' . (If you cannot click it, copy-and-paste it into the ' .
'address bar of your browser). If that user isn\'t you, ' .
'or if you didn\'t request this confirmation, just ignore this message.';
return jabber_send_message($address, $body);
}
/**
* sends a "special" presence stanza on the Jabber network
*
* @param string $type Type of presence
* @param string $to JID to send presence to
* @param string $show show value for presence
* @param string $status status value for presence
*
* @return boolean success flag
*
* @see jabber_send_presence()
*/
function jabber_special_presence($type, $to=null, $show=null, $status=null)
{
// FIXME: why use this instead of jabber_send_presence()?
$conn = jabber_connect();
$to = htmlspecialchars($to);
$status = htmlspecialchars($status);
$out = "<presence";
if ($to) {
$out .= " to='$to'";
}
if ($type) {
$out .= " type='$type'";
}
if ($show == 'available' and !$status) {
$out .= "/>";
} else {
$out .= ">";
if ($show && ($show != 'available')) {
$out .= "<show>$show</show>";
}
if ($status) {
$out .= "<status>$status</status>";
}
$out .= "</presence>";
}
$conn->send($out);
}
/**
* Queue broadcast of a notice to all subscribers and reply recipients
*
* This function will send a notice to all subscribers on the local server
* who have Jabber addresses, and have Jabber notification enabled, and
* have this subscription enabled for Jabber. It also sends the notice to
* all recipients of @-replies who have Jabber addresses and Jabber notification
* enabled. This is really the heart of Jabber distribution in StatusNet.
*
* @param Notice $notice The notice to broadcast
*
* @return boolean success flag
*/
function jabber_broadcast_notice($notice)
{
if (!common_config('xmpp', 'enabled')) {
return true;
}
$profile = Profile::staticGet($notice->profile_id);
if (!$profile) {
common_log(LOG_WARNING, 'Refusing to broadcast notice with ' .
'unknown profile ' . common_log_objstring($notice),
__FILE__);
return true; // not recoverable; discard.
}
$msg = jabber_format_notice($profile, $notice);
$entry = jabber_format_entry($profile, $notice);
$profile->free();
unset($profile);
$sent_to = array();
$conn = jabber_proxy();
$ni = $notice->whoGets();
foreach ($ni as $user_id => $reason) {
$user = User::staticGet($user_id);
if (empty($user) ||
empty($user->jabber) ||
!$user->jabbernotify) {
// either not a local user, or just not found
continue;
}
switch ($reason) {
case NOTICE_INBOX_SOURCE_REPLY:
if (!$user->jabberreplies) {
continue 2;
}
break;
case NOTICE_INBOX_SOURCE_SUB:
$sub = Subscription::pkeyGet(array('subscriber' => $user->id,
'subscribed' => $notice->profile_id));
if (empty($sub) || !$sub->jabber) {
continue 2;
}
break;
case NOTICE_INBOX_SOURCE_GROUP:
break;
default:
throw new Exception(sprintf(_("Unknown inbox source %d."), $reason));
}
common_log(LOG_INFO,
'Sending notice ' . $notice->id . ' to ' . $user->jabber,
__FILE__);
$conn->message($user->jabber, $msg, 'chat', null, $entry);
}
return true;
}
/**
* Queue send of a notice to all public listeners
*
* For notices that are generated on the local system (by users), we can optionally
* forward them to remote listeners by XMPP.
*
* @param Notice $notice notice to broadcast
*
* @return boolean success flag
*/
function jabber_public_notice($notice)
{
// Now, users who want everything
$public = common_config('xmpp', 'public');
// FIXME PRIV don't send out private messages here
// XXX: should we send out non-local messages if public,localonly
// = false? I think not
if ($public && $notice->is_local == Notice::LOCAL_PUBLIC) {
$profile = Profile::staticGet($notice->profile_id);
if (!$profile) {
common_log(LOG_WARNING, 'Refusing to broadcast notice with ' .
'unknown profile ' . common_log_objstring($notice),
__FILE__);
return true; // not recoverable; discard.
}
$msg = jabber_format_notice($profile, $notice);
$entry = jabber_format_entry($profile, $notice);
$conn = jabber_proxy();
foreach ($public as $address) {
common_log(LOG_INFO,
'Sending notice ' . $notice->id .
' to public listener ' . $address,
__FILE__);
$conn->message($address, $msg, 'chat', null, $entry);
}
$profile->free();
}
return true;
}
/**
* makes a plain-text formatted version of a notice, suitable for Jabber distribution
*
* @param Profile &$profile profile of the sending user
* @param Notice &$notice notice being sent
*
* @return string plain-text version of the notice, with user nickname prefixed
*/
function jabber_format_notice(&$profile, &$notice)
{
return $profile->nickname . ': ' . $notice->content . ' [' . $notice->id . ']';
}

View File

@ -213,16 +213,16 @@ function _mdomain($backtrace)
$plug = strpos($path, '/plugins/');
if ($plug === false) {
// We're not in a plugin; return default domain.
return 'statusnet';
$final = 'statusnet';
} else {
$cut = $plug + 9;
$cut2 = strpos($path, '/', $cut);
if ($cut2) {
$cached[$path] = substr($path, $cut, $cut2 - $cut);
$final = substr($path, $cut, $cut2 - $cut);
} else {
// We might be running directly from the plugins dir?
// If so, there's no place to store locale info.
return 'statusnet';
$final = 'statusnet';
}
}
$cached[$path] = $final;
@ -307,6 +307,7 @@ function get_all_languages() {
'br' => array('q' => 0.8, 'lang' => 'br', 'name' => 'Breton', 'direction' => 'ltr'),
'ca' => array('q' => 0.5, 'lang' => 'ca', 'name' => 'Catalan', 'direction' => 'ltr'),
'cs' => array('q' => 0.5, 'lang' => 'cs', 'name' => 'Czech', 'direction' => 'ltr'),
'da' => array('q' => 0.8, 'lang' => 'da', 'name' => 'Danish', 'direction' => 'ltr'),
'de' => array('q' => 0.8, 'lang' => 'de', 'name' => 'German', 'direction' => 'ltr'),
'el' => array('q' => 0.1, 'lang' => 'el', 'name' => 'Greek', 'direction' => 'ltr'),
'en-us' => array('q' => 1, 'lang' => 'en', 'name' => 'English (US)', 'direction' => 'ltr'),

View File

@ -50,21 +50,6 @@ class MysqlSchema extends Schema
static $_single = null;
protected $conn = null;
/**
* Constructor. Only run once for singleton object.
*/
protected function __construct()
{
// XXX: there should be an easier way to do this.
$user = new User();
$this->conn = $user->getDatabaseConnection();
$user->free();
unset($user);
}
/**
* Main public entry point. Use this to get

93
lib/plugindisableform.php Normal file
View File

@ -0,0 +1,93 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Form for enabling/disabling plugins
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Form
* @package StatusNet
* @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);
}
/**
* Form for joining a group
*
* @category Form
* @package StatusNet
* @author Brion Vibber <brion@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/
*
* @see PluginEnableForm
*/
class PluginDisableForm extends PluginEnableForm
{
/**
* ID of the form
*
* @return string ID of the form
*/
function id()
{
return 'plugin-disable-' . $this->plugin;
}
/**
* class of the form
*
* @return string of the form class
*/
function formClass()
{
return 'form_plugin_disable';
}
/**
* Action of the form
*
* @return string URL of the action
*/
function action()
{
return common_local_url('plugindisable',
array('plugin' => $this->plugin));
}
/**
* Action elements
*
* @return void
*/
function formActions()
{
// TRANS: Plugin admin panel controls
$this->out->submit('submit', _m('plugin', 'Disable'));
}
}

114
lib/pluginenableform.php Normal file
View File

@ -0,0 +1,114 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Form for enabling/disabling plugins
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Form
* @package StatusNet
* @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/form.php';
/**
* Form for joining a group
*
* @category Form
* @package StatusNet
* @author Brion Vibber <brion@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/
*
* @see PluginDisableForm
*/
class PluginEnableForm extends Form
{
/**
* Plugin to enable/disable
*/
var $plugin = null;
/**
* Constructor
*
* @param HTMLOutputter $out output channel
* @param string $plugin plugin to enable/disable
*/
function __construct($out=null, $plugin=null)
{
parent::__construct($out);
$this->plugin = $plugin;
}
/**
* ID of the form
*
* @return string ID of the form
*/
function id()
{
return 'plugin-enable-' . $this->plugin;
}
/**
* class of the form
*
* @return string of the form class
*/
function formClass()
{
return 'form_plugin_enable';
}
/**
* Action of the form
*
* @return string URL of the action
*/
function action()
{
return common_local_url('pluginenable',
array('plugin' => $this->plugin));
}
/**
* Action elements
*
* @return void
*/
function formActions()
{
// TRANS: Plugin admin panel controls
$this->out->submit('submit', _m('plugin', 'Enable'));
}
}

213
lib/pluginlist.php Normal file
View File

@ -0,0 +1,213 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Plugins administration panel
*
* 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 Settings
* @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')) {
exit(1);
}
require INSTALLDIR . "/lib/pluginenableform.php";
require INSTALLDIR . "/lib/plugindisableform.php";
/**
* Plugin list
*
* @category Admin
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
class PluginList extends Widget
{
var $plugins = array();
function __construct($plugins, $out)
{
parent::__construct($out);
$this->plugins = $plugins;
}
function show()
{
$this->startList();
$this->showPlugins();
$this->endList();
}
function startList()
{
$this->out->elementStart('table', 'plugin_list');
}
function endList()
{
$this->out->elementEnd('table');
}
function showPlugins()
{
foreach ($this->plugins as $plugin) {
$pli = $this->newListItem($plugin);
$pli->show();
}
}
function newListItem($plugin)
{
return new PluginListItem($plugin, $this->out);
}
}
class PluginListItem extends Widget
{
/** Current plugin. */
var $plugin = null;
/** Local cache for plugin version info */
protected static $versions = false;
function __construct($plugin, $out)
{
parent::__construct($out);
$this->plugin = $plugin;
}
function show()
{
$meta = $this->metaInfo();
$this->out->elementStart('tr', array('id' => 'plugin-' . $this->plugin));
// Name and controls
$this->out->elementStart('td');
$this->out->elementStart('div');
if (!empty($meta['homepage'])) {
$this->out->elementStart('a', array('href' => $meta['homepage']));
}
$this->out->text($this->plugin);
if (!empty($meta['homepage'])) {
$this->out->elementEnd('a');
}
$this->out->elementEnd('div');
$form = $this->getControlForm();
$form->show();
$this->out->elementEnd('td');
// Version and authors
$this->out->elementStart('td');
if (!empty($meta['version'])) {
$this->out->elementStart('div');
$this->out->text($meta['version']);
$this->out->elementEnd('div');
}
if (!empty($meta['author'])) {
$this->out->elementStart('div');
$this->out->text($meta['author']);
$this->out->elementEnd('div');
}
$this->out->elementEnd('td');
// Description
$this->out->elementStart('td');
if (!empty($meta['rawdescription'])) {
$this->out->raw($meta['rawdescription']);
}
$this->out->elementEnd('td');
$this->out->elementEnd('tr');
}
/**
* Pull up the appropriate control form for this plugin, depending
* on its current state.
*
* @return Form
*/
protected function getControlForm()
{
$key = 'disable-' . $this->plugin;
if (common_config('plugins', $key)) {
return new PluginEnableForm($this->out, $this->plugin);
} else {
return new PluginDisableForm($this->out, $this->plugin);
}
}
/**
* Grab metadata about this plugin...
* Warning: horribly inefficient and may explode!
* Doesn't work for disabled plugins either.
*
* @fixme pull structured data from plugin source
*/
function metaInfo()
{
$versions = self::getPluginVersions();
$found = false;
foreach ($versions as $info) {
// hack for URL shorteners... "LilUrl (ur1.ca)" etc
list($name, ) = explode(' ', $info['name']);
if ($name == $this->plugin) {
if ($found) {
// hack for URL shorteners...
$found['rawdescription'] .= "<br />\n" . $info['rawdescription'];
} else {
$found = $info;
}
}
}
if ($found) {
return $found;
} else {
return array('name' => $this->plugin,
'rawdescription' => _m('plugin-description',
'(Plugin descriptions unavailable when disabled.)'));
}
}
/**
* Lazy-load the set of active plugin version info
* @return array
*/
protected static function getPluginVersions()
{
if (!is_array(self::$versions)) {
$versions = array();
Event::handle('PluginVersion', array(&$versions));
self::$versions = $versions;
}
return self::$versions;
}
}

View File

@ -36,20 +36,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
class QueueHandler
{
/**
* Return transport keyword which identifies items this queue handler
* services; must be defined for all subclasses.
*
* Must be 8 characters or less to fit in the queue_item database.
* ex "email", "jabber", "sms", "irc", ...
*
* @return string
*/
function transport()
{
return null;
}
/**
* Here's the meat of your queue handler -- you're handed a Notice
* or other object, which you may do as you will with.

View File

@ -156,21 +156,14 @@ abstract class QueueManager extends IoManager
}
/**
* Encode an object or variable for queued storage.
* Notice objects are currently stored as an id reference;
* other items are serialized.
* Encode an object for queued storage.
*
* @param mixed $item
* @return string
*/
protected function encode($item)
{
if ($item instanceof Notice) {
// Backwards compat
return $item->id;
} else {
return serialize($item);
}
return serialize($item);
}
/**
@ -182,25 +175,7 @@ abstract class QueueManager extends IoManager
*/
protected function decode($frame)
{
if (is_numeric($frame)) {
// Back-compat for notices...
return Notice::staticGet(intval($frame));
} elseif (substr($frame, 0, 1) == '<') {
// Back-compat for XML source
return $frame;
} else {
// Deserialize!
#$old = error_reporting();
#error_reporting($old & ~E_NOTICE);
$out = unserialize($frame);
#error_reporting($old);
if ($out === false && $frame !== 'b:0;') {
common_log(LOG_ERR, "Couldn't unserialize queued frame: $frame");
return false;
}
return $out;
}
return unserialize($frame);
}
/**
@ -270,16 +245,6 @@ abstract class QueueManager extends IoManager
// Broadcasting profile updates to OMB remote subscribers
$this->connect('profile', 'ProfileQueueHandler');
// XMPP output handlers...
if (common_config('xmpp', 'enabled')) {
// Delivery prep, read by queuedaemon.php:
$this->connect('jabber', 'JabberQueueHandler');
$this->connect('public', 'PublicQueueHandler');
// Raw output, read by xmppdaemon.php:
$this->connect('xmppout', 'XmppOutQueueHandler', 'xmpp');
}
// For compat with old plugins not registering their own handlers.
$this->connect('plugin', 'PluginQueueHandler');
}

View File

@ -36,7 +36,7 @@ class QueueMonitor
* Only explicitly listed thread/site/queue owners will be incremented.
*
* @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())
{

View File

@ -655,6 +655,12 @@ class Router
$m->connect('api/statusnet/groups/create.:format',
array('action' => 'ApiGroupCreate',
'format' => '(xml|json)'));
$m->connect('api/statusnet/groups/update/:id.:format',
array('action' => 'ApiGroupProfileUpdate',
'id' => '[a-zA-Z0-9]+',
'format' => '(xml|json)'));
// Tags
$m->connect('api/statusnet/tags/timeline/:tag.:format',
array('action' => 'ApiTimelineTag',
@ -690,6 +696,13 @@ class Router
$m->connect('admin/sessions', array('action' => 'sessionsadminpanel'));
$m->connect('admin/sitenotice', array('action' => 'sitenoticeadminpanel'));
$m->connect('admin/snapshot', array('action' => 'snapshotadminpanel'));
$m->connect('admin/plugins', array('action' => 'pluginsadminpanel'));
$m->connect('admin/plugins/enable/:plugin',
array('action' => 'pluginenable'),
array('plugin' => '[A-Za-z0-9_]+'));
$m->connect('admin/plugins/disable/:plugin',
array('action' => 'plugindisable'),
array('plugin' => '[A-Za-z0-9_]+'));
$m->connect('getfile/:filename',
array('action' => 'getfile'),

View File

@ -47,40 +47,47 @@ if (!defined('STATUSNET')) {
class Schema
{
static $_single = null;
static $_static = null;
protected $conn = null;
/**
* Constructor. Only run once for singleton object.
*/
protected function __construct()
protected function __construct($conn = null)
{
// XXX: there should be an easier way to do this.
$user = new User();
if (is_null($conn)) {
// XXX: there should be an easier way to do this.
$user = new User();
$conn = $user->getDatabaseConnection();
$user->free();
unset($user);
}
$this->conn = $user->getDatabaseConnection();
$user->free();
unset($user);
$this->conn = $conn;
}
/**
* Main public entry point. Use this to get
* the singleton object.
* the schema object.
*
* @return Schema the (single) Schema object
* @return Schema the Schema object for the connection
*/
static function get()
static function get($conn = null)
{
$type = common_config('db', 'type');
if (empty(self::$_single)) {
$schemaClass = ucfirst($type).'Schema';
self::$_single = new $schemaClass();
if (is_null($conn)) {
$key = 'default';
} else {
$key = md5(serialize($conn->dsn));
}
return self::$_single;
$type = common_config('db', 'type');
if (empty(self::$_static[$key])) {
$schemaClass = ucfirst($type).'Schema';
self::$_static[$key] = new $schemaClass($conn);
}
return self::$_static[$key];
}
/**

View File

@ -177,6 +177,11 @@ class StatusNet
{
// Load default plugins
foreach (common_config('plugins', 'default') as $name => $params) {
$key = 'disable-' . $name;
if (common_config('plugins', $key)) {
continue;
}
if (is_null($params)) {
addPlugin($name);
} else if (is_array($params)) {
@ -354,7 +359,6 @@ class StatusNet
}
// Backwards compatibility
if (array_key_exists('memcached', $config)) {
if ($config['memcached']['enabled']) {
addPlugin('Memcache', array('servers' => $config['memcached']['server']));
@ -364,6 +368,21 @@ class StatusNet
$config['cache']['base'] = $config['memcached']['base'];
}
}
if (array_key_exists('xmpp', $config)) {
if ($config['xmpp']['enabled']) {
addPlugin('xmpp', array(
'server' => $config['xmpp']['server'],
'port' => $config['xmpp']['port'],
'user' => $config['xmpp']['user'],
'resource' => $config['xmpp']['resource'],
'encryption' => $config['xmpp']['encryption'],
'password' => $config['xmpp']['password'],
'host' => $config['xmpp']['host'],
'debug' => $config['xmpp']['debug'],
'public' => $config['xmpp']['public']
));
}
}
}
}

155
lib/urlshortenerplugin.php Normal file
View File

@ -0,0 +1,155 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Superclass for plugins that do URL shortening
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Plugin
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @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);
}
/**
* Superclass for plugins that do URL shortening
*
* @category Plugin
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
abstract class UrlShortenerPlugin extends Plugin
{
public $shortenerName;
public $freeService = false;
// Url Shortener plugins should implement some (or all)
// of these methods
/**
* Make an URL shorter.
*
* @param string $url URL to shorten
*
* @return string shortened version of the url, or null on failure
*/
protected abstract function shorten($url);
/**
* Utility to get the data at an URL
*
* @param string $url URL to fetch
*
* @return string response body
*
* @todo rename to code-standard camelCase httpGet()
*/
protected function http_get($url)
{
$request = HTTPClient::start();
$response = $request->get($url);
return $response->getBody();
}
/**
* Utility to post a request and get a response URL
*
* @param string $url URL to fetch
* @param array $data post parameters
*
* @return string response body
*
* @todo rename to code-standard httpPost()
*/
protected function http_post($url, $data)
{
$request = HTTPClient::start();
$response = $request->post($url, null, $data);
return $response->getBody();
}
// Hook handlers
/**
* Called when all plugins have been initialized
*
* @return boolean hook value
*/
function onInitializePlugin()
{
if (!isset($this->shortenerName)) {
throw new Exception("must specify a shortenerName");
}
return true;
}
/**
* Called when a showing the URL shortener drop-down box
*
* Properties of the shortening service currently only
* include whether it's a free service.
*
* @param array &$shorteners array mapping shortener name to properties
*
* @return boolean hook value
*/
function onGetUrlShorteners(&$shorteners)
{
$shorteners[$this->shortenerName] =
array('freeService' => $this->freeService);
return true;
}
/**
* Called to shorten an URL
*
* @param string $url URL to shorten
* @param string $shortenerName Shortening service. Don't handle if it's
* not you!
* @param string &$shortenedUrl URL after shortening; out param.
*
* @return boolean hook value
*/
function onStartShortenUrl($url, $shortenerName, &$shortenedUrl)
{
if ($shortenerName == $this->shortenerName) {
$result = $this->shorten($url);
if (isset($result) && $result != null && $result !== false) {
$shortenedUrl = $result;
common_log(LOG_INFO,
__CLASS__ . ": $this->shortenerName ".
"shortened $url to $shortenedUrl");
return false;
}
}
return true;
}
}

View File

@ -88,8 +88,8 @@ function common_init_language()
// don't do the job. en_US.UTF-8 should be there most of the
// time, but not guaranteed.
$ok = common_init_locale("en_US");
if (!$ok) {
// Try to find a complete, working locale...
if (!$ok && strtolower(substr(PHP_OS, 0, 3)) != 'win') {
// Try to find a complete, working locale on Unix/Linux...
// @fixme shelling out feels awfully inefficient
// but I don't think there's a more standard way.
$all = `locale -a`;
@ -101,9 +101,9 @@ function common_init_language()
}
}
}
if (!$ok) {
common_log(LOG_ERR, "Unable to find a UTF-8 locale on this system; UI translations may not work.");
}
}
if (!$ok) {
common_log(LOG_ERR, "Unable to find a UTF-8 locale on this system; UI translations may not work.");
}
$locale_set = common_init_locale($language);
}
@ -155,23 +155,38 @@ function common_timezone()
return common_config('site', 'timezone');
}
function common_valid_language($lang)
{
if ($lang) {
// Validate -- we don't want to end up with a bogus code
// left over from some old junk.
foreach (common_config('site', 'languages') as $code => $info) {
if ($info['lang'] == $lang) {
return true;
}
}
}
return false;
}
function common_language()
{
// Allow ?uselang=xx override, very useful for debugging
// and helping translators check usage and context.
if (isset($_GET['uselang'])) {
$uselang = strval($_GET['uselang']);
if (common_valid_language($uselang)) {
return $uselang;
}
}
// If there is a user logged in and they've set a language preference
// then return that one...
if (_have_config() && common_logged_in()) {
$user = common_current_user();
$user_language = $user->language;
if ($user->language) {
// Validate -- we don't want to end up with a bogus code
// left over from some old junk.
foreach (common_config('site', 'languages') as $code => $info) {
if ($info['lang'] == $user_language) {
return $user_language;
}
}
if (common_valid_language($user->language)) {
return $user->language;
}
}
@ -874,9 +889,21 @@ function common_linkify($url) {
function common_shorten_links($text, $always = false)
{
$maxLength = Notice::maxContent();
if (!$always && ($maxLength == 0 || mb_strlen($text) <= $maxLength)) return $text;
return common_replace_urls_callback($text, array('File_redirection', 'makeShort'));
common_debug("common_shorten_links() called");
$user = common_current_user();
$maxLength = User_urlshortener_prefs::maxNoticeLength($user);
common_debug("maxLength = $maxLength");
if ($always || mb_strlen($text) > $maxLength) {
common_debug("Forcing shortening");
return common_replace_urls_callback($text, array('File_redirection', 'forceShort'));
} else {
common_debug("Not forcing shortening");
return common_replace_urls_callback($text, array('File_redirection', 'makeShort'));
}
}
function common_xml_safe_str($str)
@ -1243,18 +1270,9 @@ function common_enqueue_notice($notice)
$transports[] = 'plugin';
}
$xmpp = common_config('xmpp', 'enabled');
if ($xmpp) {
$transports[] = 'jabber';
}
// We can skip these for gatewayed notices.
if ($notice->isLocal()) {
$transports = array_merge($transports, $localTransports);
if ($xmpp) {
$transports[] = 'public';
}
}
if (Event::handle('StartEnqueueNotice', array($notice, &$transports))) {
@ -1493,7 +1511,7 @@ function common_valid_tag($tag)
* Determine if given domain or address literal is valid
* eg for use in JIDs and URLs. Does not check if the domain
* exists!
*
*
* @param string $domain
* @return boolean valid or not
*/
@ -1835,30 +1853,42 @@ function common_database_tablename($tablename)
/**
* Shorten a URL with the current user's configured shortening service,
* or ur1.ca if configured, or not at all if no shortening is set up.
* Length is not considered.
*
* @param string $long_url
* @param string $long_url original URL
* @param boolean $force Force shortening (used when notice is too long)
*
* @return string may return the original URL if shortening failed
*
* @fixme provide a way to specify a particular shortener
* @fixme provide a way to specify to use a given user's shortening preferences
*/
function common_shorten_url($long_url)
function common_shorten_url($long_url, $force = false)
{
common_debug("Shortening URL '$long_url' (force = $force)");
$long_url = trim($long_url);
$user = common_current_user();
if (empty($user)) {
// common current user does not find a user when called from the XMPP daemon
// therefore we'll set one here fix, so that XMPP given URLs may be shortened
$shortenerName = 'ur1.ca';
} else {
$shortenerName = $user->urlshorteningservice;
$maxUrlLength = User_urlshortener_prefs::maxUrlLength($user);
common_debug("maxUrlLength = $maxUrlLength");
// $force forces shortening even if it's not strictly needed
if (mb_strlen($long_url) < $maxUrlLength && !$force) {
common_debug("Skipped shortening URL.");
return $long_url;
}
if(Event::handle('StartShortenUrl', array($long_url,$shortenerName,&$shortenedUrl))){
$shortenerName = User_urlshortener_prefs::urlShorteningService($user);
common_debug("Shortener name = '$shortenerName'");
if (Event::handle('StartShortenUrl', array($long_url, $shortenerName, &$shortenedUrl))) {
//URL wasn't shortened, so return the long url
return $long_url;
}else{
} else {
//URL was shortened, so return the result
return trim($shortenedUrl);
}

View File

@ -1,486 +0,0 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2008, 2009, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
/**
* XMPP background connection manager for XMPP-using queue handlers,
* allowing them to send outgoing messages on the right connection.
*
* Input is handled during socket select loop, keepalive pings during idle.
* Any incoming messages will be forwarded to the main XmppDaemon process,
* which handles direct user interaction.
*
* In a multi-site queuedaemon.php run, one connection will be instantiated
* for each site being handled by the current process that has XMPP enabled.
*/
class XmppManager extends IoManager
{
protected $site = null;
protected $pingid = 0;
protected $lastping = null;
protected $conn = null;
static protected $singletons = array();
const PING_INTERVAL = 120;
/**
* Fetch the singleton XmppManager for the current site.
* @return mixed XmppManager, or false if unneeded
*/
public static function get()
{
if (common_config('xmpp', 'enabled')) {
$site = StatusNet::currentSite();
if (empty(self::$singletons[$site])) {
self::$singletons[$site] = new XmppManager();
}
return self::$singletons[$site];
} 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 = StatusNet::currentSite();
$this->resource = common_config('xmpp', 'resource') . 'daemon';
}
/**
* Initialize connection to server.
* @return boolean true on success
*/
public function start($master)
{
parent::start($master);
$this->switchSite();
require_once INSTALLDIR . "/lib/jabber.php";
# Low priority; we don't want to receive messages
common_log(LOG_INFO, "INITIALIZE");
$this->conn = jabber_connect($this->resource);
if (empty($this->conn)) {
common_log(LOG_ERR, "Couldn't connect to server.");
return false;
}
$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->setReconnectTimeout(600);
jabber_send_presence("Send me a message to post a notice", 'available', null, 'available', 100);
return !is_null($this->conn);
}
/**
* Message pump is triggered on socket input, so we only need an idle()
* call often enough to trigger our outgoing pings.
*/
function timeout()
{
return self::PING_INTERVAL;
}
/**
* Lists the XMPP connection socket to allow i/o master to wake
* when input comes in here as well as from the queue source.
*
* @return array of resources
*/
public function getSockets()
{
if ($this->conn) {
return array($this->conn->getSocket());
} else {
return array();
}
}
/**
* Process XMPP events that have come in over the wire.
* Side effects: may switch site configuration
* @fixme may kill process on XMPP error
* @param resource $socket
*/
public function handleInput($socket)
{
$this->switchSite();
# Process the queue for as long as needed
try {
if ($this->conn) {
assert($socket === $this->conn->getSocket());
common_log(LOG_DEBUG, "Servicing the XMPP queue.");
$this->stats('xmpp_process');
$this->conn->processTime(0);
}
} catch (XMPPHP_Exception $e) {
common_log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
die($e->getMessage());
}
}
/**
* Idle processing for io manager's execution loop.
* Send keepalive pings to server.
*
* Side effect: kills process on exception from XMPP library.
*
* @fixme non-dying error handling
*/
public function idle($timeout=0)
{
if ($this->conn) {
$now = time();
if (empty($this->lastping) || $now - $this->lastping > self::PING_INTERVAL) {
$this->switchSite();
try {
$this->sendPing();
$this->lastping = $now;
} catch (XMPPHP_Exception $e) {
common_log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
die($e->getMessage());
}
}
}
}
/**
* 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.
*/
protected function sendPing()
{
$jid = jabber_daemon_address().'/'.$this->resource;
$server = common_config('xmpp', 'server');
if (!isset($this->pingid)) {
$this->pingid = 0;
} else {
$this->pingid++;
}
common_log(LOG_DEBUG, "Sending ping #{$this->pingid}");
$this->conn->send("<iq from='{$jid}' to='{$server}' id='ping_{$this->pingid}' type='get'><ping xmlns='urn:xmpp:ping'/></iq>");
}
/**
* Callback for Jabber reconnect event
* @param $pl
*/
function handle_reconnect(&$pl)
{
common_log(LOG_NOTICE, 'XMPP reconnected');
$this->conn->processUntil('session_start');
$this->conn->presence(null, 'available', null, 'available', 100);
}
function get_user($from)
{
$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') {
$this->log(LOG_WARNING, "Ignoring message of type ".$pl['type']." from $from: " . $pl['xml']->toString());
return;
}
if (mb_strlen($pl['body']) == 0) {
$this->log(LOG_WARNING, "Ignoring message with empty body from $from: " . $pl['xml']->toString());
return;
}
// Forwarded from another daemon for us to handle; this shouldn't
// happen any more but we might get some legacy items.
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);
}
function subscribed($to)
{
jabber_special_presence('subscribed', $to);
}
/**
* Make sure we're on the right site configuration
*/
protected function switchSite()
{
if ($this->site != StatusNet::currentSite()) {
common_log(LOG_DEBUG, __METHOD__ . ": switching to site $this->site");
$this->stats('switch');
StatusNet::switchSite($this->site);
}
}
}

View File

@ -1,55 +0,0 @@
<?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

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:38+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:38+0000\n"
"Language-Team: Afrikaans\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: af\n"
"X-Message-Group: out-statusnet\n"
@ -98,7 +98,7 @@ msgstr "Hierdie bladsy bestaan nie"
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -167,15 +167,15 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
#. TRANS: H1 text
@ -208,7 +208,7 @@ msgstr "Opdaterings van %1$s en vriende op %2$s."
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -256,7 +256,7 @@ msgstr "Kon nie die profiel stoor nie."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -355,7 +355,8 @@ msgstr ""
"Dit was nie moontlik om die boodskap van u gunstelinge te verwyder nie."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "U kan nie die gebruiker volg nie: die gebruiker bestaan nie."
#: actions/apifriendshipscreate.php:118
@ -373,8 +374,8 @@ msgstr ""
msgid "You cannot unfollow yourself."
msgstr "U kan nie ophou om uself te volg nie."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
msgid "Two valid IDs or screen_names must be supplied."
msgstr ""
#: actions/apifriendshipsshow.php:134
@ -505,6 +506,11 @@ msgstr "%s groepe"
msgid "groups on %s"
msgstr "groepe op %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Die deblokkering van die gebruiker het gefaal."
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr ""
@ -643,22 +649,26 @@ msgstr "Die status is verwyder."
msgid "No status with that ID found."
msgstr "Geen status met die ID gevind nie."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Die kennisgewing is te lank. Gebruik maksimum %d karakters."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "Nie gevind nie."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "Nie-ondersteunde formaat."
@ -712,6 +722,10 @@ msgstr ""
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr ""
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "Die aanhangsel bestaan nie."
@ -764,7 +778,7 @@ msgid "Preview"
msgstr "Voorskou"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Skrap"
@ -1039,7 +1053,7 @@ msgid "Do not delete this notice"
msgstr "Moenie hierdie kennisgewing verwyder nie"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Verwyder hierdie kennisgewing"
@ -1314,7 +1328,8 @@ msgstr "Ongeldige alias: \"%s\""
msgid "Could not update group."
msgstr "Dit was nie moontlik om die groep by te werk nie."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "Dit was nie moontlik om die aliasse te skep nie."
@ -2400,7 +2415,7 @@ msgstr ""
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
#: actions/nudge.php:94
@ -2476,8 +2491,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr ""
@ -3332,7 +3347,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr ""
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "Herhalend"
@ -3367,11 +3382,13 @@ msgid "Replies feed for %s (Atom)"
msgstr ""
#: actions/replies.php:199
#, php-format
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"Hierdie is die tydslyn vir %s en vriende, maar niemand het nog iets gepos "
"nie."
#: actions/replies.php:204
#, php-format
@ -3383,8 +3400,8 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/repliesrss.php:72
@ -3473,7 +3490,7 @@ msgstr "Organisasie"
msgid "Description"
msgstr "Beskrywing"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Statistieke"
@ -3558,16 +3575,16 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
#: actions/showfavorites.php:243
@ -3626,7 +3643,7 @@ msgstr ""
msgid "FOAF for %s group"
msgstr "Vriend van 'n vriend vir die groep %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Lede"
@ -3640,11 +3657,11 @@ msgstr "(geen)"
msgid "All members"
msgstr "Alle lede"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Geskep"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3654,7 +3671,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3663,7 +3680,7 @@ msgid ""
"their life and interests. "
msgstr ""
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Administrateurs"
@ -3738,8 +3755,8 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
#: actions/showstream.php:243
@ -4112,7 +4129,8 @@ msgstr ""
msgid "You are not subscribed to that profile."
msgstr ""
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr ""
@ -4276,10 +4294,6 @@ msgstr ""
msgid "No such tag."
msgstr "Onbekende etiket."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr ""
@ -4566,146 +4580,248 @@ msgstr "Weergawe"
msgid "Author(s)"
msgstr "Outeur(s)"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Ongeldige grootte."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr ""
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "Nie lid van die groep nie."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr ""
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr ""
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr ""
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr ""
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr ""
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr ""
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, php-format
msgid "Database error inserting hashtag: %s"
msgstr ""
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr ""
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr ""
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr ""
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr ""
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr ""
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "Hierdie gebruiker het nie 'n profiel nie."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "Dit was nie moontlik om u ontwerp-instellings te stoor nie."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr ""
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr ""
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr ""
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
msgid "Not subscribed!"
msgstr ""
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Could not delete self-subscription."
msgstr ""
"Dit was nie moontlik om die boodskap van u gunstelinge te verwyder nie."
#: classes/Subscription.php:200
msgid "Couldn't delete subscription OMB token."
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Could not delete subscription OMB token."
msgstr ""
"Dit was nie moontlik om die boodskap van u gunstelinge te verwyder nie."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr ""
"Dit was nie moontlik om die boodskap van u gunstelinge te verwyder nie."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Welkom by %1$s, @%2$s!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "Kon nie die groep skep nie."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
msgid "Could not set group URI."
msgstr ""
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr ""
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
msgid "Could not save local group info."
msgstr ""
@ -6015,7 +6131,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "van"
@ -6070,24 +6186,24 @@ msgstr ""
msgid "File upload stopped by extension."
msgstr ""
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr ""
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr ""
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6141,51 +6257,51 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "N"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "S"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "O"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "W"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "op"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "in konteks"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Herhaal deur"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr ""
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Antwoord"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr ""
@ -6443,7 +6559,7 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
msgid "Theme upload missing or failed."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102

View File

@ -1,5 +1,6 @@
# Translation of StatusNet to Arabic
#
# Author@translatewiki.net: Brion
# Author@translatewiki.net: Meno25
# Author@translatewiki.net: OsamaK
# --
@ -9,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:42+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:39+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ar\n"
"X-Message-Group: out-statusnet\n"
@ -99,7 +100,7 @@ msgstr "لا صفحة كهذه."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -166,16 +167,18 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
#, fuzzy, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"%s لم يضف أي إشعارات إلى مفضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
"register%%%%) وترسل شيئًا شيقًا ليضيفه إلى مفضلته. :)"
#. TRANS: H1 text
#: actions/all.php:182
@ -207,7 +210,7 @@ msgstr ""
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -255,7 +258,7 @@ msgstr "لم يمكن حفظ الملف."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -351,8 +354,9 @@ msgid "Could not delete favorite."
msgstr "تعذّر حذف المفضلة."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
msgstr ""
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "لم يمكن حفظ الملف."
#: actions/apifriendshipscreate.php:118
#, php-format
@ -367,8 +371,8 @@ msgstr ""
msgid "You cannot unfollow yourself."
msgstr "لا يمكنك عدم متابعة نفسك."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
msgid "Two valid IDs or screen_names must be supplied."
msgstr ""
#: actions/apifriendshipsshow.php:134
@ -429,9 +433,9 @@ msgid "Too many aliases! Maximum %d."
msgstr "كنيات كيرة! العدد الأقصى هو %d."
#: actions/apigroupcreate.php:267
#, fuzzy, php-format
#, php-format
msgid "Invalid alias: \"%s\"."
msgstr "كنية غير صالحة: \"%s\""
msgstr "كنية غير صالحة: \"%s\"."
#: actions/apigroupcreate.php:276 actions/editgroup.php:232
#: actions/newgroup.php:172
@ -480,9 +484,9 @@ msgstr "مجموعات %s"
#. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
#: actions/apigrouplist.php:108
#, fuzzy, php-format
#, php-format
msgid "%1$s groups %2$s is a member of."
msgstr "المجموعات التي %s عضو فيها"
msgstr "مجموعات %1$s التي %2$s عضو فيها."
#. TRANS: Message is used as a title. %s is a site name.
#. TRANS: Message is used as a page title. %s is a nick name.
@ -496,6 +500,11 @@ msgstr "مجموعات %s"
msgid "groups on %s"
msgstr "مجموعات %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "ارفع ملفًا"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr ""
@ -528,9 +537,8 @@ msgid "Invalid nickname / password!"
msgstr "اسم/كلمة سر غير صحيحة!"
#: actions/apioauthauthorize.php:159
#, fuzzy
msgid "Database error deleting OAuth application user."
msgstr "خطأ قاعدة البيانات أثناء حذف المستخدم OAuth app"
msgstr "خطأ في قاعدة البيانات أثناء حذف مستخدم تطبيق OAuth."
#: actions/apioauthauthorize.php:185
#, fuzzy
@ -637,22 +645,26 @@ msgstr "حُذِفت الحالة."
msgid "No status with that ID found."
msgstr "لا حالة وُجدت بهذه الهوية."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr ""
msgstr "هذه طويلة جدًا. أطول حجم للإشعار %d حرفًا."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "لم يوجد."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "نسق غير مدعوم."
@ -706,6 +718,10 @@ msgstr "الإشعارات الموسومة ب%s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr ""
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "لا مرفق كهذا."
@ -758,7 +774,7 @@ msgid "Preview"
msgstr "معاينة"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "احذف"
@ -1031,7 +1047,7 @@ msgid "Do not delete this notice"
msgstr "لا تحذف هذا الإشعار"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "احذف هذا الإشعار"
@ -1099,9 +1115,8 @@ msgid "Theme for the site."
msgstr "سمة الموقع."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "سمة الموقع"
msgstr "سمة مخصصة"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@ -1163,11 +1178,11 @@ msgstr "وصلات"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "متقدم"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "CSS مخصصة"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -1306,7 +1321,8 @@ msgstr "كنية غير صالحة: \"%s\""
msgid "Could not update group."
msgstr "تعذر تحديث المجموعة."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
@ -1650,9 +1666,8 @@ msgid "Remote service uses unknown version of OMB protocol."
msgstr ""
#: actions/finishremotesubscribe.php:138
#, fuzzy
msgid "Error updating remote profile."
msgstr "خطأ أثناء تحديث الملف الشخصي البعيد"
msgstr "خطأ أثناء تحديث الملف الشخصي البعيد."
#: actions/getfile.php:79
msgid "No such file."
@ -1677,9 +1692,8 @@ msgid "You cannot grant user roles on this site."
msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
#: actions/grantrole.php:82
#, fuzzy
msgid "User already has this role."
msgstr "المستخدم مسكت من قبل."
msgstr "لدى المستخدم هذا الدور من قبل."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@ -2390,7 +2404,7 @@ msgstr ""
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
#: actions/nudge.php:94
@ -2466,8 +2480,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "ليس نسق بيانات مدعوم."
@ -3226,7 +3240,7 @@ msgstr ""
#. TRANS: Copyright checkbox label in registration dialog, for all rights reserved.
#: actions/register.php:535
msgid "All rights reserved."
msgstr ""
msgstr "جميع الحقوق محفوظة."
#. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
#: actions/register.php:540
@ -3308,7 +3322,7 @@ msgstr ""
#: actions/remotesubscribe.php:176
msgid "Thats a local profile! Login to subscribe."
msgstr ""
msgstr "هذا ملف شخصي محلي! لُج لتشترك."
#: actions/remotesubscribe.php:183
msgid "Couldnt get a request token."
@ -3330,7 +3344,7 @@ msgstr "لا يمكنك تكرار ملاحظتك الشخصية."
msgid "You already repeated that notice."
msgstr "أنت كررت هذه الملاحظة بالفعل."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "مكرر"
@ -3368,7 +3382,7 @@ msgstr ""
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
#: actions/replies.php:204
@ -3381,8 +3395,8 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/repliesrss.php:72
@ -3391,14 +3405,12 @@ msgid "Replies to %1$s on %2$s!"
msgstr ""
#: actions/revokerole.php:75
#, fuzzy
msgid "You cannot revoke user roles on this site."
msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
msgstr "لا يمكنك سحب أدوار المستخدمين على هذا الموقع."
#: actions/revokerole.php:82
#, fuzzy
msgid "User doesn't have this role."
msgstr "المستخدم بدون ملف مطابق."
msgstr "ليس للمستخدم هذا الدور."
#: actions/rsd.php:146 actions/version.php:159
msgid "StatusNet"
@ -3473,7 +3485,7 @@ msgstr "المنظمة"
msgid "Description"
msgstr "الوصف"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "إحصاءات"
@ -3556,20 +3568,20 @@ msgid ""
msgstr ""
#: actions/showfavorites.php:208
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s لم يضف أي إشعارات إلى مفضلته إلى الآن. أرسل شيئًا شيقًا ليضيفه إلى "
"مفضلته. :)"
#: actions/showfavorites.php:212
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
"%s لم يضف أي إشعارات إلى مفضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
"register%%%%) وترسل شيئًا شيقًا ليضيفه إلى مفضلته. :)"
@ -3586,7 +3598,7 @@ msgstr "مجموعة %s"
#: actions/showgroup.php:84
#, php-format
msgid "%1$s group, page %2$d"
msgstr "مجموعة %1$، الصفحة %2$d"
msgstr "مجموعة %1$s، الصفحة %2$d"
#: actions/showgroup.php:227
msgid "Group profile"
@ -3630,7 +3642,7 @@ msgstr ""
msgid "FOAF for %s group"
msgstr ""
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "الأعضاء"
@ -3644,11 +3656,11 @@ msgstr "(لا شيء)"
msgid "All members"
msgstr "جميع الأعضاء"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "أنشئت"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3663,7 +3675,7 @@ msgstr ""
"[انضم الآن](%%%%action.register%%%%) لتصبح عضوًا في هذه المجموعة ومجموعات "
"أخرى عديدة! ([اقرأ المزيد](%%%%doc.help%%%%))"
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3675,7 +3687,7 @@ msgstr ""
"en.wikipedia.org/wiki/Micro-blogging) المبنية على البرنامج الحر [StatusNet]"
"(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. "
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "الإداريون"
@ -3750,8 +3762,8 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
#: actions/showstream.php:243
@ -4128,7 +4140,8 @@ msgstr "اذف إعدادت الموقع"
msgid "You are not subscribed to that profile."
msgstr ""
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "تعذّر حفظ الاشتراك."
@ -4292,10 +4305,6 @@ msgstr ""
msgid "No such tag."
msgstr "لا وسم كهذا."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "لم تمنع هذا المستخدم."
@ -4584,149 +4593,247 @@ msgstr "النسخة"
msgid "Author(s)"
msgstr "المؤلف(ون)"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "حجم غير صالح."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "الانضمام للمجموعة فشل."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "ليس جزءا من المجموعة."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "ترك المجموعة فشل."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr "تعذر تحديث المجموعة المحلية."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr "لم يمكن إنشاء توكن الولوج ل%s"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr "أنت ممنوع من إرسال رسائل مباشرة."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "تعذّر إدراج الرسالة."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr ""
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, fuzzy, php-format
msgid "Database error inserting hashtag: %s"
msgstr "خطأ قاعدة البيانات أثناء إدخال المستخدم OAuth app"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr "مشكلة في حفظ الإشعار. طويل جدًا."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "مشكلة في حفظ الإشعار. مستخدم غير معروف."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr ""
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "مشكلة أثناء حفظ الإشعار."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشكلة أثناء حفظ الإشعار."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تي @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "ليس للمستخدم ملف شخصي."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "تعذّر حفظ إشعار الموقع."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr ""
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr "مُشترك أصلا!"
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "لقد منعك المستخدم."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
msgid "Not subscribed!"
msgstr "غير مشترك!"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Could not delete self-subscription."
msgstr "لم يمكن حذف اشتراك ذاتي."
#: classes/Subscription.php:200
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Couldn't delete subscription OMB token."
msgid "Could not delete subscription OMB token."
msgstr "تعذّر حذف الاشتراك."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "تعذّر حذف الاشتراك."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم في %1$s يا @%2$s!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعة."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
#, fuzzy
msgid "Could not set group URI."
msgstr "تعذّر ضبط عضوية المجموعة."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضوية المجموعة."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
#, fuzzy
msgid "Could not save local group info."
msgstr "تعذّر حفظ الاشتراك."
@ -4802,10 +4909,9 @@ msgstr "غير بريدك الإلكتروني وكلمة سرّك وأفتار
#. TRANS: Tooltip for main menu option "Services"
#: lib/action.php:452
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "اتصالات"
msgstr "اتصل بالخدمات"
#. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
#: lib/action.php:455
@ -6115,7 +6221,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "من"
@ -6168,26 +6274,26 @@ msgstr "فشل في كتابة الملف إلى القرص."
#: lib/mediafile.php:165
msgid "File upload stopped by extension."
msgstr ""
msgstr "أوقفت إضافة رفع الملف."
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr "لم يمكن تحديد نوع MIME للملف."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr ""
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6241,51 +6347,51 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "ش"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "ج"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "ر"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "غ"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "في"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "في السياق"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "مكرر بواسطة"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "رُد على هذا الإشعار"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "رُد"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "الإشعار مكرر"
@ -6543,7 +6649,7 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
msgid "Theme upload missing or failed."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102
@ -6648,9 +6754,8 @@ msgid "Moderate"
msgstr "راقب"
#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "ملف المستخدم الشخصي"
msgstr "دور المستخدم"
#: lib/userprofile.php:366
msgctxt "role"

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:48+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:41+0000\n"
"Language-Team: Egyptian Spoken Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: arz\n"
"X-Message-Group: out-statusnet\n"
@ -106,7 +106,7 @@ msgstr "لا صفحه كهذه"
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -173,16 +173,18 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
#, fuzzy, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"%s لم يضف أى إشعارات إلى مفضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
"register%%%%) وترسل شيئًا شيقًا ليضيفه إلى مفضلته. :)"
#. TRANS: H1 text
#: actions/all.php:182
@ -214,7 +216,7 @@ msgstr ""
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -262,7 +264,7 @@ msgstr "لم يمكن حفظ الملف."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -358,8 +360,9 @@ msgid "Could not delete favorite."
msgstr "تعذّر حذف المفضله."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
msgstr ""
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "لم يمكن حفظ الملف."
#: actions/apifriendshipscreate.php:118
#, php-format
@ -374,8 +377,8 @@ msgstr ""
msgid "You cannot unfollow yourself."
msgstr "ما ينفعش عدم متابعة نفسك."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
msgid "Two valid IDs or screen_names must be supplied."
msgstr ""
#: actions/apifriendshipsshow.php:134
@ -504,6 +507,11 @@ msgstr "مجموعات %s"
msgid "groups on %s"
msgstr "مجموعات %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "ارفع ملفًا"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr ""
@ -645,22 +653,26 @@ msgstr "حُذِفت الحاله."
msgid "No status with that ID found."
msgstr ""
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr ""
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "لم يوجد."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "نسق غير مدعوم."
@ -714,6 +726,10 @@ msgstr "الإشعارات الموسومه ب%s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr ""
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "لا مرفق كهذا."
@ -766,7 +782,7 @@ msgid "Preview"
msgstr "عاين"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "احذف"
@ -1047,7 +1063,7 @@ msgid "Do not delete this notice"
msgstr "لا تحذف هذا الإشعار"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "احذف هذا الإشعار"
@ -1323,7 +1339,8 @@ msgstr "كنيه غير صالحة: \"%s\""
msgid "Could not update group."
msgstr "تعذر تحديث المجموعه."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
@ -2414,7 +2431,7 @@ msgstr ""
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
#: actions/nudge.php:94
@ -2490,8 +2507,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr " مش نظام بيانات مدعوم."
@ -3352,7 +3369,7 @@ msgstr "ما ينفعش تكرر الملاحظه بتاعتك."
msgid "You already repeated that notice."
msgstr "انت عيدت الملاحظه دى فعلا."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "مكرر"
@ -3390,7 +3407,7 @@ msgstr ""
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
#: actions/replies.php:204
@ -3403,8 +3420,8 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/repliesrss.php:72
@ -3496,7 +3513,7 @@ msgstr "المنظمه"
msgid "Description"
msgstr "الوصف"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "إحصاءات"
@ -3580,20 +3597,20 @@ msgid ""
msgstr ""
#: actions/showfavorites.php:208
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s لم يضف أى إشعارات إلى مفضلته إلى الآن. أرسل شيئًا شيقًا ليضيفه إلى "
"مفضلته. :)"
#: actions/showfavorites.php:212
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
"%s لم يضف أى إشعارات إلى مفضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
"register%%%%) وترسل شيئًا شيقًا ليضيفه إلى مفضلته. :)"
@ -3654,7 +3671,7 @@ msgstr ""
msgid "FOAF for %s group"
msgstr ""
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "الأعضاء"
@ -3668,11 +3685,11 @@ msgstr "(لا شيء)"
msgid "All members"
msgstr "جميع الأعضاء"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "أنشئ"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3682,7 +3699,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3691,7 +3708,7 @@ msgid ""
"their life and interests. "
msgstr ""
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "الإداريون"
@ -3766,8 +3783,8 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
#: actions/showstream.php:243
@ -4150,7 +4167,8 @@ msgstr "اذف إعدادت الموقع"
msgid "You are not subscribed to that profile."
msgstr ""
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "تعذّر حفظ الاشتراك."
@ -4315,10 +4333,6 @@ msgstr ""
msgid "No such tag."
msgstr "لا وسم كهذا."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "لم تمنع هذا المستخدم."
@ -4606,150 +4620,248 @@ msgstr "النسخه"
msgid "Author(s)"
msgstr "المؤلف/ين"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "حجم غير صالح."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "دخول الجروپ فشل."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "مش جزء من الجروپ."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "الخروج من الجروپ فشل."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
#, fuzzy
msgid "Could not update local group."
msgstr "تعذر تحديث المجموعه."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr "ما نفعش يتعمل امارة تسجيل دخول لـ %s"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr "أنت ممنوع من إرسال رسائل مباشره."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "تعذّر إدراج الرساله."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr ""
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, fuzzy, php-format
msgid "Database error inserting hashtag: %s"
msgstr "خطأ قاعده البيانات أثناء إدخال المستخدم OAuth app"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr "مشكله فى حفظ الإشعار. طويل جدًا."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "مشكله فى حفظ الإشعار. مستخدم غير معروف."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr ""
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "مشكله أثناء حفظ الإشعار."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشكله أثناء حفظ الإشعار."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تى @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "ليس للمستخدم ملف شخصى."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "مشكله أثناء حفظ الإشعار."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr ""
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr "مُشترك أصلا!"
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "لقد منعك المستخدم."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
msgid "Not subscribed!"
msgstr "غير مشترك!"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Could not delete self-subscription."
msgstr "ما نفعش يمسح الاشتراك الشخصى."
#: classes/Subscription.php:200
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Couldn't delete subscription OMB token."
msgid "Could not delete subscription OMB token."
msgstr "تعذّر حذف الاشتراك."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "تعذّر حذف الاشتراك."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم فى %1$s يا @%2$s!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعه."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
#, fuzzy
msgid "Could not set group URI."
msgstr "تعذّر ضبط عضويه المجموعه."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضويه المجموعه."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
#, fuzzy
msgid "Could not save local group info."
msgstr "تعذّر حفظ الاشتراك."
@ -6100,7 +6212,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "من"
@ -6155,24 +6267,24 @@ msgstr "فشل فى كتابه الملف إلى القرص."
msgid "File upload stopped by extension."
msgstr ""
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr "مش نافع يتحدد نوع الـMIME بتاع الفايل."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr ""
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6227,51 +6339,51 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "ش"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "ج"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "ر"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "غ"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "في"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "فى السياق"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "متكرر من"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "رُد على هذا الإشعار"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "رُد"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "الإشعار مكرر"
@ -6529,7 +6641,7 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
msgid "Theme upload missing or failed."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:52+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:42+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n"
@ -87,7 +87,6 @@ msgstr "Запазване"
#. TRANS: Server error when page not found (404)
#: actions/all.php:68 actions/public.php:98 actions/replies.php:93
#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page."
msgstr "Няма такака страница."
@ -100,7 +99,7 @@ msgstr "Няма такака страница."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -167,15 +166,15 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
#. TRANS: H1 text
@ -208,7 +207,7 @@ msgstr "Бележки от %1$s и приятели в %2$s."
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -256,7 +255,7 @@ msgstr "Грешка при запазване на профила."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -356,7 +355,8 @@ msgid "Could not delete favorite."
msgstr "Грешка при изтриване на любима бележка."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "Грешка при проследяване — потребителят не е намерен."
#: actions/apifriendshipscreate.php:118
@ -372,8 +372,9 @@ msgstr "Грешка при спиране на проследяването —
msgid "You cannot unfollow yourself."
msgstr "Не можете да спрете да следите себе си."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
#, fuzzy
msgid "Two valid IDs or screen_names must be supplied."
msgstr "Трябва да се дадат два идентификатора или имена на потребители."
#: actions/apifriendshipsshow.php:134
@ -437,7 +438,7 @@ msgid "Too many aliases! Maximum %d."
msgstr ""
#: actions/apigroupcreate.php:267
#, fuzzy, php-format
#, php-format
msgid "Invalid alias: \"%s\"."
msgstr "Неправилен псевдоним: \"%s\""
@ -504,6 +505,11 @@ msgstr "Групи на %s"
msgid "groups on %s"
msgstr "групи в %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Качване на файл"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr ""
@ -575,7 +581,7 @@ msgstr ""
#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
msgstr "Разрешение или забрана на достъпа"
#: actions/apioauthauthorize.php:292
#, php-format
@ -606,12 +612,11 @@ msgstr "Парола"
#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
msgstr "Забрана"
#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "Всички"
msgstr "Разрешение"
#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
@ -646,22 +651,26 @@ msgstr "Бележката е изтрита."
msgid "No status with that ID found."
msgstr "Не е открита бележка с такъв идентификатор."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Твърде дълга бележка. Трябва да е най-много 140 знака."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "Не е открито."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "Неподдържан формат."
@ -715,6 +724,10 @@ msgstr "Бележки с етикет %s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Бележки от %1$s в %2$s."
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "Методът в API все още се разработва."
#: actions/attachment.php:73
#, fuzzy
msgid "No such attachment."
@ -770,7 +783,7 @@ msgid "Preview"
msgstr "Преглед"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Изтриване"
@ -1044,7 +1057,7 @@ msgid "Do not delete this notice"
msgstr "Да не се изтрива бележката"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Изтриване на бележката"
@ -1330,7 +1343,8 @@ msgstr "Неправилен псевдоним: \"%s\""
msgid "Could not update group."
msgstr "Грешка при обновяване на групата."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
#, fuzzy
msgid "Could not create aliases."
msgstr "Грешка при отбелязване като любима."
@ -1388,7 +1402,6 @@ msgstr ""
#. TRANS: Button label
#: actions/emailsettings.php:127 actions/imsettings.php:131
#: actions/smssettings.php:137 lib/applicationeditform.php:357
#, fuzzy
msgctxt "BUTTON"
msgid "Cancel"
msgstr "Отказ"
@ -1435,9 +1448,8 @@ msgstr "Ново"
#. TRANS: Form legend for e-mail preferences form.
#: actions/emailsettings.php:174
#, fuzzy
msgid "Email preferences"
msgstr "Настройки"
msgstr "Настройки на е-поща"
#. TRANS: Checkbox label in e-mail preferences form.
#: actions/emailsettings.php:180
@ -1477,9 +1489,8 @@ msgstr "Публикуване на MicroID за адреса на е-пощат
#. TRANS: Confirmation message for successful e-mail preferences save.
#: actions/emailsettings.php:334
#, fuzzy
msgid "Email preferences saved."
msgstr "Настройките са запазени."
msgstr "Настройките на е-поща са запазени."
#. TRANS: Message given saving e-mail address without having provided one.
#: actions/emailsettings.php:353
@ -2496,7 +2507,7 @@ msgstr "Бележки, съдържащи търсеното \"%1$s\" в %2$s!"
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
#: actions/nudge.php:94
@ -2575,8 +2586,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "Неподдържан формат на данните"
@ -3471,7 +3482,7 @@ msgstr "Не можете да повтаряте собствена бележ
msgid "You already repeated that notice."
msgstr "Вече сте повторили тази бележка."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "Повторено"
@ -3509,7 +3520,7 @@ msgstr "Емисия с отговори на %s (Atom)"
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
#: actions/replies.php:204
@ -3522,8 +3533,8 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/repliesrss.php:72
@ -3617,7 +3628,7 @@ msgstr "Организация"
msgid "Description"
msgstr "Описание"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Статистики"
@ -3704,16 +3715,16 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
#: actions/showfavorites.php:243
@ -3772,7 +3783,7 @@ msgstr "Емисия с бележки на %s"
msgid "FOAF for %s group"
msgstr "Изходяща кутия за %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Членове"
@ -3780,17 +3791,17 @@ msgstr "Членове"
#: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95
#: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
msgstr "(Без)"
#: actions/showgroup.php:404
msgid "All members"
msgstr "Всички членове"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Създадена на"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3800,7 +3811,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3809,7 +3820,7 @@ msgid ""
"their life and interests. "
msgstr ""
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Администратори"
@ -3884,8 +3895,8 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
#: actions/showstream.php:243
@ -4278,7 +4289,8 @@ msgstr "Запазване настройките на сайта"
msgid "You are not subscribed to that profile."
msgstr "Не сте абонирани за този профил"
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
#, fuzzy
msgid "Could not save subscription."
msgstr "Грешка при създаване на нов абонамент."
@ -4447,10 +4459,6 @@ msgstr ""
msgid "No such tag."
msgstr "Няма такъв етикет."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Методът в API все още се разработва."
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "Не сте блокирали този потребител."
@ -4754,84 +4762,132 @@ msgstr "Версия"
msgid "Author(s)"
msgstr "Автор(и)"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Неправилен размер."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
#, fuzzy
msgid "Group join failed."
msgstr "Профил на групата"
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
#, fuzzy
msgid "Not part of group."
msgstr "Грешка при обновяване на групата."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
#, fuzzy
msgid "Group leave failed."
msgstr "Профил на групата"
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
#, fuzzy
msgid "Could not update local group."
msgstr "Грешка при обновяване на групата."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, fuzzy, php-format
msgid "Could not create login token for %s"
msgstr "Грешка при отбелязване като любима."
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
#, fuzzy
msgid "You are banned from sending direct messages."
msgstr "Грешка при изпращане на прякото съобщение"
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "Грешка при вмъкване на съобщението."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "Грешка при обновяване на бележката с нов URL-адрес."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, fuzzy, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Грешка в базата от данни — отговор при вмъкването: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Проблем при записване на бележката."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "Грешка при записване на бележката. Непознат потребител."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново след няколко минути."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@ -4840,78 +4896,127 @@ msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново след няколко минути."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr "Забранено ви е да публикувате бележки в този сайт."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Проблем при записване на бележката."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Проблем при записване на бележката."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "Потребителят няма профил."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "Грешка при записване настройките за Twitter"
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
#, fuzzy
msgid "You have been banned from subscribing."
msgstr "Потребителят е забранил да се абонирате за него."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr ""
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "Потребителят ви е блокирал."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
#, fuzzy
msgid "Not subscribed!"
msgstr "Не сте абонирани!"
#: classes/Subscription.php:173
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Couldn't delete self-subscription."
msgid "Could not delete self-subscription."
msgstr "Грешка при изтриване на абонамента."
#: classes/Subscription.php:200
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Couldn't delete subscription OMB token."
msgid "Could not delete subscription OMB token."
msgstr "Грешка при изтриване на абонамента."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "Грешка при изтриване на абонамента."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добре дошли в %1$s, @%2$s!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "Грешка при създаване на групата."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
#, fuzzy
msgid "Could not set group URI."
msgstr "Грешка при създаване на нов абонамент."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
#, fuzzy
msgid "Could not set group membership."
msgstr "Грешка при създаване на нов абонамент."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
#, fuzzy
msgid "Could not save local group info."
msgstr "Грешка при създаване на нов абонамент."
@ -5067,7 +5172,6 @@ msgid "Help me!"
msgstr "Помощ"
#: lib/action.php:497
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Помощ"
@ -6272,7 +6376,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "от"
@ -6327,25 +6431,25 @@ msgstr "Грешка при записване файла на диска."
msgid "File upload stopped by extension."
msgstr ""
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
#, fuzzy
msgid "Could not determine file's MIME type."
msgstr "Грешка при изтегляне на общия поток"
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr ""
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6400,51 +6504,51 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "С"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "Ю"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "И"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "З"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr ""
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "в контекст"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Повторено от"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "Отговаряне на тази бележка"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Отговор"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "Бележката е повторена."
@ -6519,9 +6623,8 @@ msgid "Tags in %s's notices"
msgstr "Етикети в бележките на %s"
#: lib/plugin.php:115
#, fuzzy
msgid "Unknown"
msgstr "Непознато действие"
msgstr "Непознато"
#: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
msgid "Subscriptions"
@ -6617,9 +6720,8 @@ msgid "Sandbox this user"
msgstr "Разблокиране на този потребител"
#: lib/searchaction.php:120
#, fuzzy
msgid "Search site"
msgstr "Търсене"
msgstr "Търсене в сайта"
#: lib/searchaction.php:126
msgid "Keyword(s)"
@ -6708,9 +6810,8 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Системна грешка при качване на файл."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:56+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:44+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: out-statusnet\n"
@ -98,7 +98,7 @@ msgstr "N'eus ket eus ar bajenn-se."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -165,16 +165,18 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
#, fuzzy, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"Perak ne [groufec'h ket ur gont](%%action.register%%) ha bezañ an hini "
"gentañ da embann un dra !"
#. TRANS: H1 text
#: actions/all.php:182
@ -206,7 +208,7 @@ msgstr "Hizivadennoù %1$s ha mignoned e %2$s!"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -254,7 +256,7 @@ msgstr "Diposubl eo enrollañ ar profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -352,7 +354,8 @@ msgid "Could not delete favorite."
msgstr "Diposupl eo dilemel ar pennroll-mañ."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "Diposupl eo heuliañ an implijer : N'eo ket bet kavet an implijer."
#: actions/apifriendshipscreate.php:118
@ -369,8 +372,9 @@ msgstr ""
msgid "You cannot unfollow yourself."
msgstr "Ne c'hallit ket chom hep ho heuliañ hoc'h-unan."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
#, fuzzy
msgid "Two valid IDs or screen_names must be supplied."
msgstr "Rankout a reoc'h reiñ daou id pe lesanv."
#: actions/apifriendshipsshow.php:134
@ -498,6 +502,11 @@ msgstr "Strolladoù %s"
msgid "groups on %s"
msgstr "strolladoù war %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "C'hwitet en deus an urzhiad"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr "Arventenn oauth_token nann-roet."
@ -636,22 +645,26 @@ msgstr "Statud diverket."
msgid "No status with that ID found."
msgstr "N'eo ket bet kavet a statud evit an ID-mañ"
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Re hir eo ! Ment hirañ an ali a zo a %d arouezenn."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "N'eo ket bet kavet."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "Diembreget eo ar furmad-se."
@ -705,6 +718,10 @@ msgstr "Alioù merket gant %s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Hizivadennoù merket gant %1$s e %2$s !"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr ""
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "N'eo ket bet kavet ar restr stag."
@ -757,7 +774,7 @@ msgid "Preview"
msgstr "Rakwelet"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Diverkañ"
@ -1031,7 +1048,7 @@ msgid "Do not delete this notice"
msgstr "Arabat dilemel an ali-mañ"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Dilemel an ali-mañ"
@ -1099,9 +1116,8 @@ msgid "Theme for the site."
msgstr "Dodenn evit al lec'hienn."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Dodenn al lec'hienn"
msgstr "Dodenn personelaet"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@ -1163,11 +1179,11 @@ msgstr "Liammoù"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Araokaet"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "CSS personelaet"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -1306,7 +1322,8 @@ msgstr "Alias fall : \"%s\""
msgid "Could not update group."
msgstr "Diposubl eo hizivaat ar strollad."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "Diposubl eo krouiñ an aliasoù."
@ -2391,7 +2408,7 @@ msgstr ""
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
#: actions/nudge.php:94
@ -2466,8 +2483,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr ""
@ -3346,7 +3363,7 @@ msgstr "Ne c'helloc'h ket adkemer ho ali deoc'h."
msgid "You already repeated that notice."
msgstr "Adkemeret o peus dija an ali-mañ."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "Adlavaret"
@ -3384,7 +3401,7 @@ msgstr "Gwazh respontoù evit %s (Atom)"
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
#: actions/replies.php:204
@ -3397,8 +3414,8 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/repliesrss.php:72
@ -3488,7 +3505,7 @@ msgstr "Aozadur"
msgid "Description"
msgstr "Deskrivadur"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Stadegoù"
@ -3574,16 +3591,16 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
#: actions/showfavorites.php:243
@ -3642,7 +3659,7 @@ msgstr "Neudenn alioù ar strollad %s (Atom)"
msgid "FOAF for %s group"
msgstr "Mignon ur mignon evit ar strollad %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Izili"
@ -3656,11 +3673,11 @@ msgstr "(Hini ebet)"
msgid "All members"
msgstr "An holl izili"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Krouet"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3670,7 +3687,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3679,7 +3696,7 @@ msgid ""
"their life and interests. "
msgstr ""
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Merourien"
@ -3756,8 +3773,8 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
#: actions/showstream.php:243
@ -4129,7 +4146,8 @@ msgstr "Enrollañ an arventennoù moned"
msgid "You are not subscribed to that profile."
msgstr ""
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr ""
@ -4296,10 +4314,6 @@ msgstr ""
msgid "No such tag."
msgstr ""
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "N'o peus ket stanket an implijer-mañ."
@ -4585,147 +4599,245 @@ msgstr "Stumm"
msgid "Author(s)"
msgstr "Aozer(ien)"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Ment direizh."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "C'hwitet eo bet an enskrivadur d'ar strollad."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "N'eo ezel eus strollad ebet."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "C'hwitet eo bet an disenskrivadur d'ar strollad."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr ""
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr ""
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr ""
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "Diposubl eo ensoc'hañ ur gemenadenn"
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "Dibosupl eo hizivaat ar gemennadenn gant un URI nevez."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, php-format
msgid "Database error inserting hashtag: %s"
msgstr ""
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr ""
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr ""
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr ""
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Ur gudenn 'zo bet pa veze enrollet an ali."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr "Ur gudenn 'zo bet pa veze enrollet boest degemer ar strollad."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "An implijer-mañ n'eus profil ebet dezhañ."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "Diposubl eo enrollañ ali al lec'hienn."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr "Nac'het ez eus bet deoc'h en em goumanantiñ."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr "Koumanantet dija !"
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "An implijer-mañ en deus stanket ac'hanoc'h."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
msgid "Not subscribed!"
msgstr "Nann-koumanantet !"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
msgstr ""
#: classes/Subscription.php:200
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Couldn't delete subscription OMB token."
msgstr "Diposubl eo dilemel ar postel kadarnadur."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
msgid "Could not delete self-subscription."
msgstr "Dibosupl eo paouez gant ar c'houmanant."
#: classes/User.php:363
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Could not delete subscription OMB token."
msgstr "Diposubl eo dilemel ar postel kadarnadur."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "Dibosupl eo paouez gant ar c'houmanant."
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Deuet mat da %1$s, @%2$s !"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "Dibosupl eo krouiñ ar strollad."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
msgid "Could not set group URI."
msgstr "Dibosupl eo termeniñ URI ar strollad."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "Dibosupl eo en em enskrivañ d'ar strollad."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
msgid "Could not save local group info."
msgstr "Dibosupl eo enrollañ titouroù ar strollad lec'hel."
@ -6043,7 +6155,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "eus"
@ -6098,24 +6210,24 @@ msgstr ""
msgid "File upload stopped by extension."
msgstr ""
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr ""
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr "Klaskit implijout ur furmad %s all."
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6169,51 +6281,51 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "N"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "S"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "R"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "K"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "e"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "en amdro"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Adkemeret gant"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "Respont d'an ali-mañ"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Respont"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "Ali adkemeret"
@ -6471,7 +6583,7 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
msgid "Theme upload missing or failed."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102

View File

@ -1,6 +1,7 @@
# Translation of StatusNet to Catalan
#
# Author@translatewiki.net: Aleator
# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Paucabot
# Author@translatewiki.net: Toniher
# --
@ -10,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:01+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:45+0000\n"
"Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n"
@ -101,7 +102,7 @@ msgstr "No existeix la pàgina."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -170,20 +171,20 @@ msgstr ""
#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
#: actions/all.php:146
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Podeu provar d'[avisar %1$s](../%2$s) des del seu perfil o [publiqueu "
"quelcom per reclamar-li l'atenció](%%%%action.newnotice%%%%?status_textarea=%"
"3$s)."
"quelcom per cridar-li l'atenció](%%%%action.newnotice%%%%?status_textarea=%3"
"$s)."
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
#, fuzzy, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"Per què no [registreu un compte](%%%%action.register%%%%) i aviseu %s o "
"publiqueu un avís a la seva atenció."
@ -218,7 +219,7 @@ msgstr "Actualitzacions de %1$s i amics a %2$s!"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -268,7 +269,7 @@ msgstr "No s'ha pogut desar el perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -368,7 +369,8 @@ msgid "Could not delete favorite."
msgstr "No s'ha pogut eliminar el preferit."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "No s'ha pogut seguir l'usuari: l'usuari no existeix."
#: actions/apifriendshipscreate.php:118
@ -384,8 +386,9 @@ msgstr "No es pot deixar de seguir l'usuari: no s'ha trobat l'usuari."
msgid "You cannot unfollow yourself."
msgstr "No podeu deixar de seguir-vos a un mateix."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
#, fuzzy
msgid "Two valid IDs or screen_names must be supplied."
msgstr "Cal proporcionar dos ids d'usuari o screen_names."
#: actions/apifriendshipsshow.php:134
@ -515,6 +518,11 @@ msgstr "%s grups"
msgid "groups on %s"
msgstr "grups sobre %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Puja un fitxer"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr "No s'ha proporcionat cap paràmetre oauth_token."
@ -660,22 +668,26 @@ msgstr "S'ha eliminat l'estat."
msgid "No status with that ID found."
msgstr "No s'ha trobat cap estatus amb la ID trobada."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Massa llarg. La longitud màxima és de %d caràcters."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "No s'ha trobat."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "La mida màxima de l'avís és %d caràcters, incloent l'URL de l'adjunt."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "El format no està implementat."
@ -722,13 +734,17 @@ msgstr "Repeticions de %s"
#: actions/apitimelinetag.php:105 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Aviso etiquetats amb %s"
msgstr "Avisos etiquetats amb %s"
#: actions/apitimelinetag.php:107 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualitzacions etiquetades amb %1$s el %2$s!"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "Mètode API en construcció."
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "No existeix l'adjunció."
@ -782,7 +798,7 @@ msgid "Preview"
msgstr "Vista prèvia"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Elimina"
@ -1065,7 +1081,7 @@ msgid "Do not delete this notice"
msgstr "No eliminis aquest avís"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Elimina aquest avís"
@ -1226,7 +1242,7 @@ msgstr "Torna a restaurar al valor per defecte"
#: actions/useradminpanel.php:294 lib/applicationeditform.php:363
#: lib/designsettings.php:256 lib/groupeditform.php:202
msgid "Save"
msgstr "Guardar"
msgstr "Desa"
#: actions/designadminpanel.php:686 lib/designsettings.php:257
msgid "Save design"
@ -1342,7 +1358,8 @@ msgstr "L'àlies no és vàlid «%s»"
msgid "Could not update group."
msgstr "No s'ha pogut actualitzar el grup."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "No s'han pogut crear els àlies."
@ -1471,7 +1488,8 @@ msgstr "Envia'm un correu electrònic quan algú m'enviï una resposta amb @."
#. TRANS: Checkbox label in e-mail preferences form.
#: actions/emailsettings.php:205
msgid "Allow friends to nudge me and send me an email."
msgstr "Permetre que els amics em reclamin i m'enviïn un correu electrònic."
msgstr ""
"Permetre que els amics em cridin l'atenció i m'enviïn un correu electrònic."
#. TRANS: Checkbox label in e-mail preferences form.
#: actions/emailsettings.php:212
@ -2164,8 +2182,7 @@ msgstr "%1$s (%2$s)"
#: actions/invite.php:136
msgid ""
"These people are already users and you were automatically subscribed to them:"
msgstr ""
"Aquestes persona ja són usuaris i tu estàs subscrit automàticament a ells:"
msgstr "Aquestes persones ja són usuaris i se us ha subscrit automàticament:"
#: actions/invite.php:144
msgid "Invitation(s) sent to the following people:"
@ -2176,8 +2193,8 @@ msgid ""
"You will be notified when your invitees accept the invitation and register "
"on the site. Thanks for growing the community!"
msgstr ""
"Seràs avisat quan les teves invitacions siguin acceptades i els teus "
"convidats es registrin al lloc. Gràcies per fer créixer la comunitat."
"Se us notificarà quan els vostres convidats acceptin la invitació i es "
"registrin al lloc. Gràcies per fer créixer la comunitat!"
#: actions/invite.php:162
msgid ""
@ -2304,7 +2321,7 @@ msgstr "%1$s ha abandonat el grup %2$s"
#: actions/login.php:102 actions/otp.php:62 actions/register.php:144
msgid "Already logged in."
msgstr "Ja estàs connectat."
msgstr "Ja hi heu iniciat una sessió."
#: actions/login.php:148
msgid "Incorrect username or password."
@ -2500,19 +2517,20 @@ msgstr ""
"Les actualitzacions que coincideixen amb el terme de cerca «%1$s» el %2$s!"
#: actions/nudge.php:85
#, fuzzy
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
"Aquest usuari no permet reclamacions o no ha confirmar encara cap correu "
"electrònic."
"Aquest usuari no permet que li cridin l'atenció o no ha confirmat encara cap "
"correu electrònic."
#: actions/nudge.php:94
msgid "Nudge sent"
msgstr "Reclamació enviada"
msgstr "S'ha cridat l'atenció"
#: actions/nudge.php:97
msgid "Nudge sent!"
msgstr "Reclamació enviada!"
msgstr "S'ha cridat l'atenció!"
#: actions/oauthappssettings.php:59
msgid "You must be logged in to list your applications."
@ -2580,8 +2598,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr "Si us plau, només URL %s sobre HTTP pla."
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "Format de data no suportat."
@ -2689,7 +2707,7 @@ msgstr "6 o més caràcters"
#: actions/passwordsettings.php:112 actions/recoverpassword.php:239
#: actions/register.php:440
msgid "Confirm"
msgstr "Confirmar"
msgstr "Confirma"
#: actions/passwordsettings.php:113 actions/recoverpassword.php:240
msgid "Same as password above"
@ -2697,7 +2715,7 @@ msgstr "Igual a la contrasenya de dalt"
#: actions/passwordsettings.php:117
msgid "Change"
msgstr "Canviar"
msgstr "Canvia"
#: actions/passwordsettings.php:154 actions/register.php:237
msgid "Password must be 6 or more characters."
@ -3017,11 +3035,11 @@ msgstr "La biografia és massa llarga (màx. %d caràcters)."
#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Franja horària no seleccionada."
msgstr "No s'ha seleccionat el fus horari."
#: actions/profilesettings.php:241
msgid "Language is too long (max 50 chars)."
msgstr "L'idioma és massa llarg (màx 50 caràcters)."
msgstr "La llengua és massa llarga (màx. 50 caràcters)."
#: actions/profilesettings.php:253 actions/tagother.php:178
#, php-format
@ -3047,7 +3065,7 @@ msgstr "No s'han pogut desar les etiquetes."
#. TRANS: Message after successful saving of administrative settings.
#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Configuració guardada."
msgstr "S'ha desat la configuració."
#: actions/public.php:83
#, php-format
@ -3158,7 +3176,7 @@ msgstr "Núvol d'etiquetes"
#: actions/recoverpassword.php:36
msgid "You are already logged in!"
msgstr "Ja t'has connectat!"
msgstr "Ja heu iniciat una sessió!"
#: actions/recoverpassword.php:62
msgid "No such recovery code."
@ -3207,7 +3225,7 @@ msgstr "Sobrenom o adreça electrònica"
#: actions/recoverpassword.php:193
msgid "Your nickname on this server, or your registered email address."
msgstr ""
"El teu nom d'usuari en aquest servidor, o la teva adreça de correu "
"El vostre nom d'usuari en aquest servidor, o la vostra adreça de correu "
"electrònic registrada."
#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
@ -3236,11 +3254,11 @@ msgstr "6 o més caràcters, i no te n'oblidis!"
#: actions/recoverpassword.php:243
msgid "Reset"
msgstr "Restablir"
msgstr "Reinicialitza"
#: actions/recoverpassword.php:252
msgid "Enter a nickname or email address."
msgstr "Escriu un sobrenom o una adreça de correu electrònic."
msgstr "Escriviu un sobrenom o una adreça de correu electrònic."
#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
@ -3252,7 +3270,7 @@ msgstr "No hi ha cap adreça de correu electrònic registrada d'aquest usuari."
#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Error en guardar confirmació de l'adreça."
msgstr "S'ha produït un error en desar la confirmació de l'adreça."
#: actions/recoverpassword.php:338
msgid ""
@ -3312,7 +3330,7 @@ msgstr "L'adreça de correu electrònic ja existeix."
#: actions/register.php:250 actions/register.php:272
msgid "Invalid username or password."
msgstr "Nom d'usuari o contrasenya invàlids."
msgstr "El nom d'usuari o la contrasenya no són vàlids."
#: actions/register.php:350
msgid ""
@ -3463,7 +3481,7 @@ msgstr "URL del teu perfil en un altre servei de microblogging compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Subscriure's"
msgstr "Subscriu-m'hi"
#: actions/remotesubscribe.php:159
msgid "Invalid profile URL (bad format)"
@ -3499,7 +3517,7 @@ msgstr "No podeu repetir el vostre propi avís."
msgid "You already repeated that notice."
msgstr "Ja havíeu repetit l'avís."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "Repetit"
@ -3534,10 +3552,10 @@ msgid "Replies feed for %s (Atom)"
msgstr "Canal de respostes de %s (Atom)"
#: actions/replies.php:199
#, php-format
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"Aquesta és la línia temporal que mostra les respostes a %1$s, però %2$s "
"encara no ha rebut cap avís a la seva atenció."
@ -3552,13 +3570,13 @@ msgstr ""
"[uniu-vos a grups](%%action.groups%%)."
#: actions/replies.php:206
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Podeu provar d'[avisar %1$s](../%2$s) o [enviar quelcom per reclamar la seva "
"atenció](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"Podeu provar d'[avisar %1$s](../%2$s) o [enviar quelcom per cridar-li "
"l'atenció](%%%%action.newnotice%%%%?status_textarea=%3$s)."
#: actions/repliesrss.php:72
#, php-format
@ -3646,7 +3664,7 @@ msgstr "Organització"
msgid "Description"
msgstr "Descripció"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Estadístiques"
@ -3734,20 +3752,20 @@ msgstr ""
"avisos que us agraden per arxivar-los per a més endavant i fer-los conèixer."
#: actions/showfavorites.php:208
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s no ha afegit cap avís als seus preferits encara. Envieu quelcom "
"interessant que pugui afegir-hi."
#: actions/showfavorites.php:212
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
"%s no ha afegit cap avís als seus preferits encara. Per què no [registreu un "
"compte](%%%%action.register%%%%) i llavors envieu quelcom interessant que "
@ -3809,7 +3827,7 @@ msgstr "Canal d'avisos del grup %s (Atom)"
msgid "FOAF for %s group"
msgstr "Safata de sortida per %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Membres"
@ -3823,11 +3841,11 @@ msgstr "(Cap)"
msgid "All members"
msgstr "Tots els membres"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "S'ha creat"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3843,7 +3861,7 @@ msgstr ""
"%) per formar part del grup i molt més! ([Més informació...](%%%%doc.help%%%"
"%))"
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3856,7 +3874,7 @@ msgstr ""
"[StatusNet](http://status.net/). Els seus membre comparteixen missatges "
"curts sobre llur vida i interessos. "
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Administradors"
@ -3932,13 +3950,13 @@ msgstr ""
"podria ser un bon moment per començar :)"
#: actions/showstream.php:207
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
"Podeu provar d'avisar %1$s o [enviar quelcom per reclamar la seva atenció](%%"
"%%action.newnotice%%%%?status_textarea=%2$s)."
"Podeu provar d'avisar %1$s o [enviar quelcom per cridar-li l'atenció](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
#: actions/showstream.php:243
#, php-format
@ -4119,8 +4137,8 @@ msgstr "Paràmetres de l'SMS"
#, php-format
msgid "You can receive SMS messages through email from %%site.name%%."
msgstr ""
"Pots rebre missatges SMS a través del teu coreu electrònic des de %%site.name"
"%%."
"Podeu rebre missatges SMS a través del vostre correu electrònic des de %%"
"site.name%%."
#. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
#: actions/smssettings.php:97
@ -4179,7 +4197,7 @@ msgid ""
"Send me notices through SMS; I understand I may incur exorbitant charges "
"from my carrier."
msgstr ""
"Enviar-me avisos a través de SMS; puc entendre que això repercutirà en una "
"Envia'm avisos a través de l'SMS; puc entendre que això repercutirà en una "
"exorbitant càrrega del meu transport."
#. TRANS: Confirmation message for successful SMS preferences save.
@ -4200,7 +4218,7 @@ msgstr "No s'ha sel·leccionat cap transport."
#. TRANS: Message given saving SMS phone number that is already set.
#: actions/smssettings.php:352
msgid "That is already your phone number."
msgstr "Aquest ja és el teu número de telèfon."
msgstr "Aquest ja és el vostre número de telèfon."
#. TRANS: Message given saving SMS phone number that is already set for another user.
#: actions/smssettings.php:356
@ -4327,7 +4345,8 @@ msgstr "Desa els paràmetres de les instantànies"
msgid "You are not subscribed to that profile."
msgstr "No estàs subscrit a aquest perfil."
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "No s'ha pogut guardar la subscripció."
@ -4507,10 +4526,6 @@ msgstr ""
msgid "No such tag."
msgstr "No existeix aquesta etiqueta."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Mètode API en construcció."
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "No heu blocat l'usuari."
@ -4611,7 +4626,7 @@ msgstr "Si es permet als usuaris invitar-ne de nous."
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autoritzar subscripció"
msgstr "Autoritza la subscripció"
#: actions/userauthorization.php:110
msgid ""
@ -4822,83 +4837,131 @@ msgstr "Versió"
msgid "Author(s)"
msgstr "Autoria"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid "Cannot process URL '%s'"
msgstr ""
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, fuzzy, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
"Cap fitxer pot ser major de %d bytes i el fitxer que heu enviat era de %d "
"bytes. Proveu de pujar una versió de mida menor."
#: classes/File.php:195
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"Un fitxer d'aquesta mida excediria la vostra quota d'usuari de %d bytes."
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
"Un fitxer d'aquesta mida excediria la vostra quota mensual de %d bytes."
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "La mida no és vàlida."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "No s'ha pogut unir al grup."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "No s'és part del grup."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "La sortida del grup ha fallat."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr "No s'ha pogut actualitzar el grup local."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr "No s'ha pogut crear un testimoni d'inici de sessió per a %s"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr "Se us ha bandejat enviar missatges directes."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "No s'ha pogut inserir el missatge."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "No s'ha pogut inserir el missatge amb la nova URI."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, php-format
msgid "Database error inserting hashtag: %s"
msgstr ""
"S'ha produït un error de la base de dades en inserir una etiqueta de "
"coixinet (%): %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr "S'ha produït un problema en desar l'avís. És massa llarg."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "S'ha produït un problema en desar l'avís. Usuari desconegut."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Massa avisos massa ràpid; pren un respir i publica de nou en uns minuts."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@ -4906,71 +4969,122 @@ msgstr ""
"Massa missatges duplicats en massa poc temps; preneu un respir i torneu a "
"enviar en uns minuts."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr "Ha estat bandejat de publicar avisos en aquest lloc."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Problema en guardar l'avís."
msgstr "S'ha produït un problema en desar l'avís."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr "S'ha produït un problema en desar la safata d'entrada del grup."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "L'usuari no té perfil."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "No s'ha pogut desar l'avís del lloc."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr "Se us ha banejat la subscripció."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr "Ja hi esteu subscrit!"
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "Un usuari t'ha bloquejat."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
msgid "Not subscribed!"
msgstr "No hi esteu subscrit!"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Could not delete self-subscription."
msgstr "No s'ha pogut eliminar l'autosubscripció."
#: classes/Subscription.php:200
msgid "Couldn't delete subscription OMB token."
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Could not delete subscription OMB token."
msgstr "No s'ha pogut eliminar el testimoni OMB de la subscripció."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "No s'ha pogut eliminar la subscripció."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Us donem la benvinguda a %1$s, @%2$s!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "No s'ha pogut crear el grup."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
msgid "Could not set group URI."
msgstr "No es pot definir l'URI del grup."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "No s'ha pogut establir la pertinença d'aquest grup."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
msgid "Could not save local group info."
msgstr "No s'ha pogut desar la informació del grup local."
@ -5572,7 +5686,7 @@ msgstr "No té massa sentit avisar-se a un mateix!"
#: lib/command.php:234
#, php-format
msgid "Nudge sent to %s"
msgstr "S'ha enviat un avís a %s"
msgstr "S'ha cridat l'atenció a %s"
#: lib/command.php:260
#, php-format
@ -6248,7 +6362,7 @@ msgstr "%s: confirmeu-ho si teniu aquest número de telèfon amb aquest codi:"
#: lib/mail.php:484
#, php-format
msgid "You've been nudged by %s"
msgstr "Has estat reclamat per %s"
msgstr "%s us ha cridat l'atenció"
#. TRANS: Body for 'nudge' notification email
#: lib/mail.php:489
@ -6405,8 +6519,8 @@ msgid ""
"\n"
"P.S. You can turn off these email notifications here: %8$s\n"
msgstr ""
"1$s (@%9$s) acaba d'enviar un avís un avís a la vostra atenció (una resposta "
"amb @) a %2$s.\n"
"%1$s (@%9$s) acaba d'enviar un avís un avís a la vostra atenció (una "
"resposta amb @) a %2$s.\n"
"\n"
"L'avís és a continuació:\n"
"\n"
@ -6442,7 +6556,7 @@ msgstr ""
"usuaris en la conversa. La gent pot enviar-vos missatges només per als "
"vostres ulls."
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "de"
@ -6503,24 +6617,24 @@ msgstr "No s'ha pogut escriure el fitxer al disc."
msgid "File upload stopped by extension."
msgstr "L'extensió ha aturat la càrrega del fitxer."
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr "El fitxer excedeix la quota de l'usuari."
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr "No s'ha pogut moure el fitxer al directori de destinació."
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr "No s'ha pogut determinar el tipus MIME del fitxer."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr "Proveu d'emprar un altre format %s."
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr "%s no és un tipus de fitxer permès al servidor."
@ -6576,65 +6690,65 @@ msgstr ""
"l'esperat; torneu-ho a provar més tard"
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "N"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "S"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "E"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "O"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "a"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "en context"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Repetit per"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "respondre a aquesta nota"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Respon"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "Avís repetit"
#: lib/nudgeform.php:116
msgid "Nudge this user"
msgstr "Reclamar aquest usuari"
msgstr "Crida l'atenció a l'usuari"
#: lib/nudgeform.php:128
msgid "Nudge"
msgstr "Reclamar"
msgstr "Crida l'atenció"
#: lib/nudgeform.php:128
msgid "Send a nudge to this user"
msgstr "Enviar una reclamació a aquest usuari"
msgstr "Crida l'atenció a l'usuari"
#: lib/oauthstore.php:283
msgid "Error inserting new profile"
@ -6878,8 +6992,8 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr "El servidor no pot gestionar la pujada de temes si no pot tractar ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
msgid "Theme upload missing or failed."
msgstr "La pujada del tema ha fallat o no hi és."
msgid "The theme file is missing or the upload failed."
msgstr "Manca el fitxer del tema o la pujada ha fallat."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
@ -6899,7 +7013,7 @@ msgstr ""
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr "L'arxiu del tema no és vàlid: manca el fitxer de css / display.css"
msgstr "L'arxiu del tema no és vàlid: manca el fitxer css/display.css"
#: lib/themeuploader.php:205
msgid ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:06+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:47+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n"
@ -106,7 +106,7 @@ msgstr "Žádné takové oznámení."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -173,15 +173,15 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
#. TRANS: H1 text
@ -215,7 +215,7 @@ msgstr ""
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -266,7 +266,7 @@ msgstr "Nelze uložit profil"
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -365,8 +365,9 @@ msgid "Could not delete favorite."
msgstr "Nelze smazat oblíbenou položku."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
msgstr ""
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "Nelze přesměrovat na server: %s"
#: actions/apifriendshipscreate.php:118
#, php-format
@ -383,8 +384,8 @@ msgstr "Nelze přesměrovat na server: %s"
msgid "You cannot unfollow yourself."
msgstr "Nelze aktualizovat uživatele"
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
msgid "Two valid IDs or screen_names must be supplied."
msgstr ""
#: actions/apifriendshipsshow.php:134
@ -517,6 +518,11 @@ msgstr ""
msgid "groups on %s"
msgstr ""
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Upload"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr ""
@ -664,23 +670,27 @@ msgstr "Obrázek nahrán"
msgid "No status with that ID found."
msgstr ""
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
#, fuzzy
msgid "Not found."
msgstr "Žádný požadavek nebyl nalezen!"
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
#, fuzzy
msgid "Unsupported format."
msgstr "Nepodporovaný formát obrázku."
@ -735,6 +745,10 @@ msgstr ""
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mikroblog od %s"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr ""
#: actions/attachment.php:73
#, fuzzy
msgid "No such attachment."
@ -790,7 +804,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Odstranit"
@ -1081,7 +1095,7 @@ msgid "Do not delete this notice"
msgstr "Žádné takové oznámení."
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Odstranit toto oznámení"
@ -1373,7 +1387,8 @@ msgstr "Neplatná adresa '%s'"
msgid "Could not update group."
msgstr "Nelze aktualizovat uživatele"
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
#, fuzzy
msgid "Could not create aliases."
msgstr "Nelze uložin informace o obrázku"
@ -2515,7 +2530,7 @@ msgstr "Všechny položky obsahující \"%s\""
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
#: actions/nudge.php:94
@ -2592,8 +2607,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr ""
@ -3492,7 +3507,7 @@ msgstr "Nemůžete se registrovat, pokud nesouhlasíte s licencí."
msgid "You already repeated that notice."
msgstr "Již jste přihlášen"
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
#, fuzzy
msgid "Repeated"
msgstr "Vytvořit"
@ -3532,7 +3547,7 @@ msgstr "Feed sdělení pro %s"
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
#: actions/replies.php:204
@ -3545,8 +3560,8 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/repliesrss.php:72
@ -3645,7 +3660,7 @@ msgstr "Umístění"
msgid "Description"
msgstr "Odběry"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Statistiky"
@ -3730,16 +3745,16 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
#: actions/showfavorites.php:243
@ -3799,7 +3814,7 @@ msgstr "Feed sdělení pro %s"
msgid "FOAF for %s group"
msgstr "Feed sdělení pro %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Členem od"
@ -3814,12 +3829,12 @@ msgstr ""
msgid "All members"
msgstr ""
#: actions/showgroup.php:447
#: actions/showgroup.php:439
#, fuzzy
msgid "Created"
msgstr "Vytvořit"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3829,7 +3844,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3838,7 +3853,7 @@ msgid ""
"their life and interests. "
msgstr ""
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr ""
@ -3914,8 +3929,8 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
#: actions/showstream.php:243
@ -4304,7 +4319,8 @@ msgstr "Nastavení"
msgid "You are not subscribed to that profile."
msgstr "Neodeslal jste nám profil"
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
#, fuzzy
msgid "Could not save subscription."
msgstr "Nelze vytvořit odebírat"
@ -4477,10 +4493,6 @@ msgstr ""
msgid "No such tag."
msgstr "Žádné takové oznámení."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
#: actions/unblock.php:59
#, fuzzy
msgid "You haven't blocked that user."
@ -4789,160 +4801,257 @@ msgstr "Osobní"
msgid "Author(s)"
msgstr ""
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Neplatná velikost"
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
#, fuzzy
msgid "Group join failed."
msgstr "Žádné takové oznámení."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
#, fuzzy
msgid "Not part of group."
msgstr "Nelze aktualizovat uživatele"
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
#, fuzzy
msgid "Group leave failed."
msgstr "Žádné takové oznámení."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
#, fuzzy
msgid "Could not update local group."
msgstr "Nelze aktualizovat uživatele"
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, fuzzy, php-format
msgid "Could not create login token for %s"
msgstr "Nelze uložin informace o obrázku"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr ""
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr ""
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr ""
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, fuzzy, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Chyba v DB při vkládání odpovědi: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Problém při ukládání sdělení"
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Problém při ukládání sdělení"
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr ""
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Problém při ukládání sdělení"
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problém při ukládání sdělení"
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "Uživatel nemá profil."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "Problém při ukládání sdělení"
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr ""
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr ""
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
#, fuzzy
msgid "User has blocked you."
msgstr "Uživatel nemá profil."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
#, fuzzy
msgid "Not subscribed!"
msgstr "Nepřihlášen!"
#: classes/Subscription.php:173
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Couldn't delete self-subscription."
msgid "Could not delete self-subscription."
msgstr "Nelze smazat odebírání"
#: classes/Subscription.php:200
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Couldn't delete subscription OMB token."
msgid "Could not delete subscription OMB token."
msgstr "Nelze smazat odebírání"
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "Nelze smazat odebírání"
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
#, fuzzy
msgid "Could not create group."
msgstr "Nelze uložin informace o obrázku"
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
#, fuzzy
msgid "Could not set group URI."
msgstr "Nelze vytvořit odebírat"
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
#, fuzzy
msgid "Could not set group membership."
msgstr "Nelze vytvořit odebírat"
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
#, fuzzy
msgid "Could not save local group info."
msgstr "Nelze vytvořit odebírat"
@ -6323,7 +6432,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
#, fuzzy
msgid "from"
msgstr " od "
@ -6379,25 +6488,25 @@ msgstr ""
msgid "File upload stopped by extension."
msgstr ""
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
#, fuzzy
msgid "Could not determine file's MIME type."
msgstr "Nelze aktualizovat uživatele"
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr ""
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6456,54 +6565,54 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr ""
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr ""
#: lib/noticelist.php:559
#: lib/noticelist.php:567
#, fuzzy
msgid "in context"
msgstr "Žádný obsah!"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
#, fuzzy
msgid "Repeated by"
msgstr "Vytvořit"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr ""
#: lib/noticelist.php:622
#: lib/noticelist.php:630
#, fuzzy
msgid "Reply"
msgstr "odpověď"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
#, fuzzy
msgid "Notice repeated"
msgstr "Sdělení"
@ -6772,9 +6881,8 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Chyba systému při nahrávání souboru"
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,6 @@
# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Michael
# Author@translatewiki.net: Michi
# Author@translatewiki.net: Pill
# Author@translatewiki.net: The Evil IP address
# Author@translatewiki.net: Umherirrender
# --
@ -17,12 +16,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:12+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:49+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: out-statusnet\n"
@ -107,7 +106,7 @@ msgstr "Seite nicht vorhanden"
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -178,22 +177,20 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Du kannst [%1$s in seinem Profil einen Stups geben](../%2$s) oder [ihm etwas "
"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
"zu erregen."
"Du kannst versuchen, [%1$s in seinem Profil einen Stups zu geben](../%2$s) "
"oder [ihm etwas posten](%%%%action.newnotice%%%%?status_textarea=%s)."
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"Warum [registrierst Du nicht einen Account](%%%%action.register%%%%) und "
"gibst %s dann einen Stups oder postest ihm etwas, um seine Aufmerksamkeit zu "
"erregen?"
"gibst %s dann einen Stups oder postest ihm etwas."
#. TRANS: H1 text
#: actions/all.php:182
@ -225,7 +222,7 @@ msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -275,7 +272,7 @@ msgstr "Konnte Profil nicht speichern."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -376,8 +373,8 @@ msgid "Could not delete favorite."
msgstr "Konnte Favoriten nicht löschen."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
msgstr "Konnte Nutzer nicht folgen: Nutzer nicht gefunden"
msgid "Could not follow user: profile not found."
msgstr "Konnte Nutzer nicht folgen: Profil nicht gefunden"
#: actions/apifriendshipscreate.php:118
#, php-format
@ -392,9 +389,9 @@ msgstr "Kann Benutzer nicht entfolgen: Benutzer nicht gefunden."
msgid "You cannot unfollow yourself."
msgstr "Du kannst dich nicht selbst entfolgen!"
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
msgstr "Zwei IDs oder Benutzernamen müssen angegeben werden."
#: actions/apifriendshipsexists.php:91
msgid "Two valid IDs or screen_names must be supplied."
msgstr "Zwei gültige IDs oder Benutzernamen müssen angegeben werden."
#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
@ -524,6 +521,10 @@ msgstr "%s Gruppen"
msgid "groups on %s"
msgstr "Gruppen von %s"
#: actions/apimediaupload.php:99
msgid "Upload failed."
msgstr "Hochladen fehlgeschlagen."
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr "Kein oauth_token Parameter angegeben."
@ -667,25 +668,31 @@ msgstr "Status gelöscht."
msgid "No status with that ID found."
msgstr "Keine Nachricht mit dieser ID gefunden."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
"Der Client muss einen „status“-Parameter mit einen Wert zur Verfügung "
"stellen."
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr ""
"Das war zu lang. Die Länge einer Nachricht ist auf %d Zeichen beschränkt."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "Nicht gefunden."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
"Die maximale Größe von Nachrichten ist %d Zeichen, inklusive der URL der "
"Anhänge"
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "Bildformat wird nicht unterstützt."
@ -739,6 +746,10 @@ msgstr "Nachrichten, die mit %s getagt sind"
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Aktualisierungen mit %1$s getagt auf %2$s!"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "API-Methode im Aufbau."
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "Kein solcher Anhang."
@ -792,7 +803,7 @@ msgid "Preview"
msgstr "Vorschau"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Löschen"
@ -1073,7 +1084,7 @@ msgid "Do not delete this notice"
msgstr "Diese Nachricht nicht löschen"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Nachricht löschen"
@ -1143,13 +1154,12 @@ msgid "Theme for the site."
msgstr "Theme dieser Seite."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Seitentheme"
msgstr "Angepasster Skin"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
msgstr "Du kannst ein angepasstes StatusNet-Theme als .ZIP-Archiv hochladen."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1353,7 +1363,8 @@ msgstr "Ungültiges Stichwort: „%s“"
msgid "Could not update group."
msgstr "Konnte Gruppe nicht aktualisieren."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "Konnte keinen Favoriten erstellen."
@ -2519,10 +2530,10 @@ msgstr "Alle Aktualisierungen, die den Suchbegriff „%s“ enthalten"
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
"Dieser Benutzer erlaubt keine Stupser oder hat seine E-Mail-Adresse noch "
"nicht bestätigt."
"nicht bestätigt oder eingestellt."
#: actions/nudge.php:94
msgid "Nudge sent"
@ -2600,8 +2611,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr "Bitte nur %s URLs über einfaches HTTP."
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "Kein unterstütztes Datenformat."
@ -3519,7 +3530,7 @@ msgstr "Du kannst deine eigene Nachricht nicht wiederholen."
msgid "You already repeated that notice."
msgstr "Nachricht bereits wiederholt"
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "Wiederholt"
@ -3557,10 +3568,10 @@ msgstr "Feed der Nachrichten von %s (Atom)"
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"Dies ist die Zeitleiste für %1$s und Freunde aber bisher hat niemand etwas "
"gepostet."
"Dies ist die Zeitleiste für %1$s, aber %2$s hat noch keine Notiz dazu "
"erhalten."
#: actions/replies.php:204
#, php-format
@ -3574,12 +3585,11 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Du kannst [%1$s in seinem Profil einen Stups geben](../%s) oder [ihm etwas "
"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
"zu erregen."
"Du kannst versuchen [%1$s einen Stups zu geben](../%s) oder [ihm etwas "
"posten](%%%%action.newnotice%%%%?status_textarea=%s)."
#: actions/repliesrss.php:72
#, php-format
@ -3667,7 +3677,7 @@ msgstr "Organisation"
msgid "Description"
msgstr "Beschreibung"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Statistiken"
@ -3757,8 +3767,8 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s hat noch keine Nachricht zu den Favoriten hinzugefügt. Sende du doch "
"einfach eine interessante Nachricht, damit sich daran etwas ändert :)"
@ -3766,13 +3776,13 @@ msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
"%s hat noch keine Nachrichten zu seinen Favoriten hinzugefügt. Warum meldest "
"du dich nicht an ( [anmelden](%%%%action.register%%%%) ) und schreibst "
"etwas, was %s hinzufügen kann!"
"%s hat noch keine Nachrichten zu seinen Favoriten hinzugefügt. Warum "
"[meldest du dich nicht an](%%%%action.register%%%%) und schreibst etwas, was "
"%s hinzufügen kann!"
#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
@ -3830,7 +3840,7 @@ msgstr "Nachrichtenfeed der Gruppe %s (Atom)"
msgid "FOAF for %s group"
msgstr "Postausgang von %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Mitglieder"
@ -3844,11 +3854,11 @@ msgstr "(Kein)"
msgid "All members"
msgstr "Alle Mitglieder"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Erstellt"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3863,7 +3873,7 @@ msgstr ""
"und werde Teil der Gruppe und vielen anderen! ([Mehr Informationen](%%%%doc."
"help%%%%))"
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3876,7 +3886,7 @@ msgstr ""
"Freien Software [StatusNet](http://status.net/). Seine Mitglieder erstellen "
"kurze Nachrichten über Ihr Leben und Interessen. "
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Administratoren"
@ -3955,11 +3965,11 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
"Du kannst %1$s in seinem Profil einen Stups geben oder [ihm etwas posten](%%%"
"%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit zu erregen."
"%action.newnotice%%%%?status_textarea=%s)."
#: actions/showstream.php:243
#, php-format
@ -4347,7 +4357,8 @@ msgstr "Snapshot-Einstellungen speichern"
msgid "You are not subscribed to that profile."
msgstr "Du hast dieses Profil nicht abonniert."
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "Konnte Abonnement nicht erstellen."
@ -4526,10 +4537,6 @@ msgstr ""
msgid "No such tag."
msgstr "Stichwort nicht vorhanden."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-Methode im Aufbau."
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "Du hast diesen Benutzer nicht blockiert."
@ -4841,82 +4848,129 @@ msgstr "Version"
msgid "Author(s)"
msgstr "Autor(en)"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid "Cannot process URL '%s'"
msgstr "Die URL „%s“ konnte nicht verarbeitet werden"
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr "Robin denkt, dass etwas unmöglich ist."
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
"Keine Datei darf größer als %d Bytes sein und die Datei die du verschicken "
"wolltest ist %d Bytes groß. Bitte eine kleinere Datei hoch laden."
"wolltest war %d Bytes groß. Bitte eine kleinere Version hochladen."
#: classes/File.php:195
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr "Eine Datei dieser Größe überschreitet deine User Quota von %d Byte."
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
"Eine Datei dieser Größe würde deine monatliche Quota von %d Byte "
"überschreiten."
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
msgid "Invalid filename."
msgstr "Ungültiger Dateiname."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "Konnte Gruppe nicht beitreten"
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "Nicht Mitglied der Gruppe"
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "Konnte Gruppe nicht verlassen"
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr "Konnte Gruppe nicht aktualisieren."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr "Konnte keinen Login-Token für %s erstellen"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr "Nirgedwo einen Datenbanknamen oder DSN gefunden."
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr "Direktes senden von Nachrichten wurde blockiert"
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "Konnte Nachricht nicht einfügen."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "Konnte Nachricht nicht mit neuer URI versehen."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr "Kein Profil (%1$d) für eine Notiz gefunden (%2$d)."
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Datenbankfehler beim Einfügen des Hashtags: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr "Problem bei Speichern der Nachricht. Sie ist zu lang."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "Problem bei Speichern der Nachricht. Unbekannter Benutzer."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in "
"ein paar Minuten ab."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@ -4924,73 +4978,124 @@ msgstr ""
"Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in "
"ein paar Minuten ab."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr ""
"Du wurdest für das Schreiben von Nachrichten auf dieser Seite gesperrt."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Problem bei Speichern der Nachricht."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
"Der Methode saveKnownGroups wurde ein schlechter Wert zur Verfügung gestellt"
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr "Problem bei Speichern der Nachricht."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
"Die Rolle „%1$s“ kann nicht für Benutzer #%2$d widerrufen werden. Benutzer "
"existiert nicht."
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
"Die Rolle „%1$s“ kann nicht für Benutzer #%2$d widerrufen werden. "
"Datenbankfehler."
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
msgid "Missing profile."
msgstr "Benutzer hat kein Profil."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
msgid "Unable to save tag."
msgstr "Konnte Seitenbenachrichtigung nicht speichern."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr "Dieser Benutzer erlaubt dir nicht ihn zu abonnieren."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr "Bereits abonniert!"
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "Dieser Benutzer hat dich blockiert."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
#, fuzzy
msgid "Not subscribed!"
msgstr "Nicht abonniert!"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
msgid "Could not delete self-subscription."
msgstr "Konnte Selbst-Abonnement nicht löschen."
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
msgid "Could not delete subscription OMB token."
msgstr "Konnte OMB-Abonnement-Token nicht löschen."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
msgid "Could not delete subscription."
msgstr "Konnte Abonnement nicht löschen."
#: classes/Subscription.php:200
msgid "Couldn't delete subscription OMB token."
msgstr "Konnte OMB-Abonnement nicht löschen."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
msgstr "Konnte Abonnement nicht löschen."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Herzlich willkommen bei %1$s, @%2$s!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "Konnte Gruppe nicht erstellen."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
msgid "Could not set group URI."
msgstr "Konnte die Gruppen URI nicht setzen."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "Konnte Gruppenmitgliedschaft nicht setzen."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
msgid "Could not save local group info."
msgstr "Konnte die lokale Gruppen Information nicht speichern."
@ -6457,7 +6562,7 @@ msgstr ""
"schicken, um sie in eine Konversation zu verwickeln. Andere Leute können Dir "
"Nachrichten schicken, die nur Du sehen kannst."
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "von"
@ -6518,24 +6623,24 @@ msgstr "Konnte die Datei nicht auf die Festplatte schreiben."
msgid "File upload stopped by extension."
msgstr "Upload der Datei wurde wegen der Dateiendung gestoppt."
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr "Dateigröße liegt über dem Benutzerlimit"
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr "Datei konnte nicht in das Zielverzeichnis verschoben werden."
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr "Konnte den MIME-Typ nicht feststellen."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr "Versuche ein anderes %s Format."
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr "%s ist kein unterstütztes Dateiformat auf diesem Server."
@ -6591,51 +6696,51 @@ msgstr ""
"Bitte versuche es später wieder."
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "N"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "S"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "O"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "W"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "in"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "im Zusammenhang"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Wiederholt von"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "Auf diese Nachricht antworten"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Antworten"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "Nachricht wiederholt"
@ -6890,48 +6995,47 @@ msgstr "Nichts"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
msgstr "Dieser Server kann nicht mit Theme-Uploads ohne ZIP-Support umgehen."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Systemfehler beim hochladen der Datei."
msgid "The theme file is missing or the upload failed."
msgstr "Die Theme-Datei fehlt oder das Hochladen ist fehlgeschlagen."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Aktualisierung des Avatars fehlgeschlagen."
msgstr "Speicherung des Themes fehlgeschlagen."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "Ungültiger Theme: schlechte Ordner-Struktur."
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
msgstr "Der hochgeladene Theme ist zu groß; er muss unter %d Bytes sein."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
msgstr "Ungültigges Theme-Archiv: fehlende Datei css/display.css"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"Der Theme enthält einen ungültigen Datei- oder Ordnernamen. Bleib bei ASCII-"
"Buchstaben, Zahlen, Unterstrichen und Minuszeichen."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
msgstr "Das Theme enthält Dateien des Types „.%s“, die nicht erlaubt sind."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "Fehler beim Aktualisieren des entfernten Profils."
msgstr "Fehler beim Öffnen des Theme-Archives."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:17+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:51+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n"
@ -101,7 +101,7 @@ msgstr "Δεν υπάρχει τέτοια σελίδα"
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -172,15 +172,15 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
#. TRANS: H1 text
@ -213,7 +213,7 @@ msgstr ""
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -264,7 +264,7 @@ msgstr "Απέτυχε η αποθήκευση του προφίλ."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -361,7 +361,8 @@ msgid "Could not delete favorite."
msgstr ""
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "Δε μπορώ να ακολουθήσω το χρήστη: ο χρήστης δε βρέθηκε."
#: actions/apifriendshipscreate.php:118
@ -380,8 +381,8 @@ msgstr "Δε μπορώ να ακολουθήσω το χρήστη: ο χρήσ
msgid "You cannot unfollow yourself."
msgstr "Δεν μπορείτε να εμποδίσετε τον εαυτό σας!"
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
msgid "Two valid IDs or screen_names must be supplied."
msgstr ""
#: actions/apifriendshipsshow.php:134
@ -512,6 +513,11 @@ msgstr ""
msgid "groups on %s"
msgstr "ομάδες του χρήστη %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr ""
@ -655,22 +661,26 @@ msgstr "Η κατάσταση διεγράφη."
msgid "No status with that ID found."
msgstr ""
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr ""
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr ""
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr ""
@ -724,6 +734,10 @@ msgstr ""
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "Η μέθοδος του ΑΡΙ είναι υπό κατασκευή."
#: actions/attachment.php:73
msgid "No such attachment."
msgstr ""
@ -776,7 +790,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Διαγραφή"
@ -1064,7 +1078,7 @@ msgid "Do not delete this notice"
msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr ""
@ -1352,7 +1366,8 @@ msgstr ""
msgid "Could not update group."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
#, fuzzy
msgid "Could not create aliases."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
@ -2471,7 +2486,7 @@ msgstr "Όλες οι ενημερώσεις που ταιριάζουν με τ
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
#: actions/nudge.php:94
@ -2548,8 +2563,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr ""
@ -3450,7 +3465,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
#, fuzzy
msgid "Repeated"
msgstr "Δημιουργία"
@ -3487,11 +3502,13 @@ msgid "Replies feed for %s (Atom)"
msgstr "Ροή φίλων του/της %s"
#: actions/replies.php:199
#, php-format
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"Αυτό είναι το χρονοδιάγραμμα για %s και φίλους, αλλά κανείς δεν έχει κάνει "
"καμία αποστολή ακόμα."
#: actions/replies.php:204
#, php-format
@ -3503,8 +3520,8 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/repliesrss.php:72
@ -3598,7 +3615,7 @@ msgstr "Προσκλήσεις"
msgid "Description"
msgstr "Περιγραφή"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr ""
@ -3684,16 +3701,16 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
#: actions/showfavorites.php:243
@ -3753,7 +3770,7 @@ msgstr ""
msgid "FOAF for %s group"
msgstr "Αδύνατη η αποθήκευση του προφίλ."
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Μέλη"
@ -3767,11 +3784,11 @@ msgstr ""
msgid "All members"
msgstr ""
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Δημιουργημένος"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3781,7 +3798,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3790,7 +3807,7 @@ msgid ""
"their life and interests. "
msgstr ""
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Διαχειριστές"
@ -3866,8 +3883,8 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
#: actions/showstream.php:243
@ -4252,7 +4269,8 @@ msgstr "Ρυθμίσεις OpenID"
msgid "You are not subscribed to that profile."
msgstr ""
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
#, fuzzy
msgid "Could not save subscription."
msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
@ -4419,10 +4437,6 @@ msgstr ""
msgid "No such tag."
msgstr ""
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Η μέθοδος του ΑΡΙ είναι υπό κατασκευή."
#: actions/unblock.php:59
#, fuzzy
msgid "You haven't blocked that user."
@ -4715,155 +4729,252 @@ msgstr "Προσωπικά"
msgid "Author(s)"
msgstr ""
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Μήνυμα"
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
#, fuzzy
msgid "Group join failed."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
#, fuzzy
msgid "Not part of group."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
#, fuzzy
msgid "Group leave failed."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
#, fuzzy
msgid "Could not update local group."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, fuzzy, php-format
msgid "Could not create login token for %s"
msgstr "Αδύνατη η αποθήκευση του προφίλ."
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr ""
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr ""
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr ""
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, fuzzy, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr ""
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr ""
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr ""
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr ""
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr ""
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "Προφίλ χρήστη"
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr ""
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr ""
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr ""
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
#, fuzzy
msgid "Not subscribed!"
msgstr "Απέτυχε η συνδρομή."
#: classes/Subscription.php:173
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Couldn't delete self-subscription."
msgid "Could not delete self-subscription."
msgstr "Απέτυχε η διαγραφή συνδρομής."
#: classes/Subscription.php:200
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Couldn't delete subscription OMB token."
msgid "Could not delete subscription OMB token."
msgstr "Απέτυχε η διαγραφή συνδρομής."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "Απέτυχε η διαγραφή συνδρομής."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "Δεν ήταν δυνατή η δημιουργία ομάδας."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
#, fuzzy
msgid "Could not set group URI."
msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
#, fuzzy
msgid "Could not set group membership."
msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
#, fuzzy
msgid "Could not save local group info."
msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
@ -6207,7 +6318,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "από"
@ -6262,25 +6373,25 @@ msgstr ""
msgid "File upload stopped by extension."
msgstr ""
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
#, fuzzy
msgid "Could not determine file's MIME type."
msgstr "Απέτυχε η ενημέρωση του χρήστη."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr ""
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6336,51 +6447,51 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr ""
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr ""
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr ""
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Επαναλαμβάνεται από"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr ""
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr ""
#: lib/noticelist.php:666
#: lib/noticelist.php:674
#, fuzzy
msgid "Notice repeated"
msgstr "Ρυθμίσεις OpenID"
@ -6644,7 +6755,7 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
msgid "Theme upload missing or failed."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102

View File

@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:21+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:52+0000\n"
"Language-Team: British English\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n"
@ -100,7 +100,7 @@ msgstr "No such page."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -168,19 +168,19 @@ msgstr ""
#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
#: actions/all.php:146
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
#, fuzzy, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
@ -215,7 +215,7 @@ msgstr "Updates from %1$s and friends on %2$s!"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -267,7 +267,7 @@ msgstr "Couldn't save profile."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -365,7 +365,8 @@ msgid "Could not delete favorite."
msgstr "Could not delete favourite."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "Could not follow user: User not found."
#: actions/apifriendshipscreate.php:118
@ -381,8 +382,9 @@ msgstr "Could not unfollow user: User not found."
msgid "You cannot unfollow yourself."
msgstr "You cannot unfollow yourself."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
#, fuzzy
msgid "Two valid IDs or screen_names must be supplied."
msgstr "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsshow.php:134
@ -510,6 +512,11 @@ msgstr "%s groups"
msgid "groups on %s"
msgstr "groups on %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Upload file"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr "No oauth_token parameter provided."
@ -653,22 +660,26 @@ msgstr "Status deleted."
msgid "No status with that ID found."
msgstr "No status with that ID found."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "That's too long. Max notice size is %d chars."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "Not found."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "Max notice size is %d chars, including attachment URL."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "Unsupported format."
@ -722,6 +733,10 @@ msgstr "Notices tagged with %s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Updates tagged with %1$s on %2$s!"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "API method under construction."
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "No such attachment."
@ -774,7 +789,7 @@ msgid "Preview"
msgstr "Preview"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Delete"
@ -1055,7 +1070,7 @@ msgid "Do not delete this notice"
msgstr "Do not delete this notice"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Delete this notice"
@ -1334,7 +1349,8 @@ msgstr "Invalid alias: \"%s\""
msgid "Could not update group."
msgstr "Could not update group."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "Could not create aliases"
@ -2477,8 +2493,9 @@ msgid "Updates matching search term \"%1$s\" on %2$s!"
msgstr "Updates matching search term \"%1$s\" on %2$s!"
#: actions/nudge.php:85
#, fuzzy
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
"This user doesn't allow nudges or hasn't confirmed or set his e-mail yet."
@ -2554,8 +2571,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "Not a supported data format."
@ -3446,7 +3463,7 @@ msgstr "You can't repeat your own notice."
msgid "You already repeated that notice."
msgstr "You already repeated that notice."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "Repeated"
@ -3481,10 +3498,10 @@ msgid "Replies feed for %s (Atom)"
msgstr "Notice feed for %s"
#: actions/replies.php:199
#, php-format
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
@ -3497,10 +3514,10 @@ msgid ""
msgstr ""
#: actions/replies.php:206
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
@ -3591,7 +3608,7 @@ msgstr "Organization"
msgid "Description"
msgstr "Description"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Statistics"
@ -3676,20 +3693,20 @@ msgstr ""
"notices you like to bookmark them for later or shed a spotlight on them."
#: actions/showfavorites.php:208
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s hasn't added any notices to his favourites yet. Post something "
"interesting they would add to their favourites :)"
#: actions/showfavorites.php:212
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
"%s hasn't added any notices to his favourites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
@ -3751,7 +3768,7 @@ msgstr "Notice feed for %s group (Atom)"
msgid "FOAF for %s group"
msgstr "Outbox for %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Members"
@ -3765,11 +3782,11 @@ msgstr "(None)"
msgid "All members"
msgstr "All members"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Created"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3784,7 +3801,7 @@ msgstr ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3797,7 +3814,7 @@ msgstr ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Admins"
@ -3870,10 +3887,10 @@ msgid ""
msgstr ""
#: actions/showstream.php:207
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
@ -4251,7 +4268,8 @@ msgstr "Save snapshot settings"
msgid "You are not subscribed to that profile."
msgstr "You are not subscribed to that profile."
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "Could not save subscription."
@ -4420,10 +4438,6 @@ msgstr "Use this form to add tags to your subscribers or subscriptions."
msgid "No such tag."
msgstr "No such tag."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API method under construction."
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "You haven't blocked that user."
@ -4731,77 +4745,125 @@ msgstr "Version"
msgid "Author(s)"
msgstr ""
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Invalid size."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "Group join failed."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "Not part of group."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "Group leave failed."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr "Could not update local group."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr "Could not create login token for %s"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr "You are banned from sending direct messages."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "Could not insert message."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "Could not update message with new URI."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Database error inserting hashtag: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr "Problem saving notice. Too long."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "Problem saving notice. Unknown user."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Too many notices too fast; take a breather and post again in a few minutes."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@ -4809,72 +4871,123 @@ msgstr ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr "You are banned from posting notices on this site."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Problem saving notice."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr "Problem saving group inbox."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "User has no profile."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "Unable to save site notice."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr "You have been banned from subscribing."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr ""
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "User has blocked you."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
#, fuzzy
msgid "Not subscribed!"
msgstr "Not subscribed!"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Could not delete self-subscription."
msgstr "Couldn't delete self-subscription."
#: classes/Subscription.php:200
msgid "Couldn't delete subscription OMB token."
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Could not delete subscription OMB token."
msgstr "Couldn't delete subscription OMB token."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "Couldn't delete subscription."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Welcome to %1$s, @%2$s!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "Could not create group."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
msgid "Could not set group URI."
msgstr "Could not set group URI."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "Could not set group membership."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
msgid "Could not save local group info."
msgstr "Could not save local group info."
@ -6242,7 +6355,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "from"
@ -6297,24 +6410,24 @@ msgstr ""
msgid "File upload stopped by extension."
msgstr ""
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr "Could not determine file's MIME type."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr ""
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6368,51 +6481,51 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "N"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr ""
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr ""
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "in context"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Repeated by"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "Reply to this notice"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Reply"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "Notice repeated"
@ -6670,9 +6783,8 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "System error uploading file."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257

View File

@ -15,12 +15,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:25+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:54+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n"
@ -104,7 +104,7 @@ msgstr "No existe tal página."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -175,20 +175,20 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Puedes intentar [darle un toque a %1$s](../%2$s) desde su perfil o [publicar "
"algo a su atención](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"Puedes intentar [zarandear a %1$s](../%2$s) desde su perfil o [publicar algo "
"a ellos](%%%%action.newnotice%%%%?status_textarea=%3$s)."
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"¿Por qué no [registrar una cuenta](%%%%action.register%%%%) y luego darle un "
"toque a %s o publicar algo a su atención?"
"Por qué no [registrar una cuenta](%%%%action.register%%%%) y luego zarandear "
"a %s o publicar una nota a ellos?"
#. TRANS: H1 text
#: actions/all.php:182
@ -220,7 +220,7 @@ msgstr "¡Actualizaciones de %1$s y sus amistades en %2$s!"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -270,7 +270,7 @@ msgstr "No se pudo guardar el perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -368,8 +368,8 @@ msgid "Could not delete favorite."
msgstr "No se pudo borrar favorito."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
msgstr "No puede seguir al usuario. Usuario no encontrado"
msgid "Could not follow user: profile not found."
msgstr "No se pudo seguir al usuario: Perfil no encontrado."
#: actions/apifriendshipscreate.php:118
#, php-format
@ -384,9 +384,9 @@ msgstr "No se pudo dejar de seguir al usuario. Usuario no encontrado"
msgid "You cannot unfollow yourself."
msgstr "No puedes dejar de seguirte a ti mismo."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
msgstr "Deben proveerse dos identificaciones de usuario o nombres en pantalla."
#: actions/apifriendshipsexists.php:91
msgid "Two valid IDs or screen_names must be supplied."
msgstr "Deben proveerse dos IDs válidos o nombres en pantalla."
#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
@ -515,6 +515,10 @@ msgstr "Grupos %s"
msgid "groups on %s"
msgstr "Grupos en %s"
#: actions/apimediaupload.php:99
msgid "Upload failed."
msgstr "Carga falló."
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr "No se ha provisto de un parámetro oauth_token."
@ -661,24 +665,28 @@ msgstr "Status borrado."
msgid "No status with that ID found."
msgstr "No hay estado para ese ID"
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr "El cliente debe proveer un parámetro de 'status' con un valor."
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "La entrada es muy larga. El tamaño máximo es de %d caracteres."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "No encontrado."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
"El tamaño máximo de la notificación es %d caracteres, incluyendo el URL "
"adjunto."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "Formato no soportado."
@ -732,6 +740,10 @@ msgstr "Avisos etiquetados con %s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualizaciones etiquetadas con %1$s en %2$s!"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "Método API en construcción."
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "No existe tal archivo adjunto."
@ -784,7 +796,7 @@ msgid "Preview"
msgstr "Vista previa"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Borrar"
@ -1066,7 +1078,7 @@ msgid "Do not delete this notice"
msgstr "No eliminar este mensaje"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Borrar este aviso"
@ -1344,7 +1356,8 @@ msgstr "Alias inválido: \"%s\""
msgid "Could not update group."
msgstr "No se pudo actualizar el grupo."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "No fue posible crear alias."
@ -2289,7 +2302,7 @@ msgstr "Ningún nombre de usuario o ID."
#: actions/joingroup.php:141 lib/command.php:346
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s se ha unido al grupo %2$"
msgstr "%1$s se ha unido al grupo %2$s"
#: actions/leavegroup.php:60
msgid "You must be logged in to leave a group."
@ -2505,10 +2518,10 @@ msgstr ""
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
"Este usuario no permite toques o todavía no confirma o configura su correo "
"electrónico."
"Este usuario no permite zarandeos o todavía no confirma o configura su "
"correo electrónico."
#: actions/nudge.php:94
msgid "Nudge sent"
@ -2584,8 +2597,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr "Solamente %s URLs sobre HTTP simples por favor."
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "No es un formato de dato soportado"
@ -3508,7 +3521,7 @@ msgstr "No puedes repetir tus propios mensajes."
msgid "You already repeated that notice."
msgstr "Ya has repetido este mensaje."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "Repetido"
@ -3546,10 +3559,10 @@ msgstr "Feed de avisos de %s"
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"Esta es la línea temporal que muestra las respuestas a a %1$s, pero %2$s aún "
"no ha recibido ningún aviso a su atención."
"no ha recibido ningún aviso."
#: actions/replies.php:204
#, php-format
@ -3563,11 +3576,11 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Puedes intentar [darle un toque a %1$s](../%2$s) o [publicar algo en su "
"atención](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"Puedes intentar [zarandear a %1$s](../%2$s) o [publicar algo a ellos](%%%%"
"action.newnotice%%%%?status_textarea=%3$s)."
#: actions/repliesrss.php:72
#, php-format
@ -3655,7 +3668,7 @@ msgstr "Organización"
msgid "Description"
msgstr "Descripción"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Estadísticas"
@ -3744,22 +3757,22 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s aún no ha añadido ningún aviso a sus favoritos. ¡Publica algo interesante "
"que pueda añadir a sus favoritos! :)"
"%s aún no ha agregado ningún aviso a sus favoritos. Publica algo interesante "
"que pueda añadir a sus favoritos :)"
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
"%s aún no ha añadido ningún aviso a sus favoritos. ¿Por qué no [registras "
"una cuenta] (%%%%action.register%%%%) y publicas algo interesante que pueda "
"añadir a sus favoritos? :)"
"%s aún no ha añadido ningún aviso a sus favoritos. Por qué no [registras una "
"cuenta] (%%%%action.register%%%%) y publicas algo interesante que puedan "
"añadir a sus favoritos :)"
#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
@ -3817,7 +3830,7 @@ msgstr "Canal de avisos del grupo %s (Atom)"
msgid "FOAF for %s group"
msgstr "Amistades de amistades del grupo %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Miembros"
@ -3831,11 +3844,11 @@ msgstr "(Ninguno)"
msgid "All members"
msgstr "Todos los miembros"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Creado"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3851,7 +3864,7 @@ msgstr ""
"action.register%%%%) para formar parte de este y muchos más grupos! ([Más "
"información](%%%%doc.help%%%%))"
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3864,7 +3877,7 @@ msgstr ""
"herramienta de software libre [StatusNet](http://status.net/). Sus miembros "
"comparten mensajes cortos acerca de su vida e intereses. "
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Administradores"
@ -3941,11 +3954,11 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
"Puedes intentar darle un toque a %1$s o [publicar algo a su atención](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"Puedes intentar zarandear a %1$s o [publicar algo a ellos](%%%%action."
"newnotice%%%%?status_textarea=%2$s)."
#: actions/showstream.php:243
#, php-format
@ -4334,7 +4347,8 @@ msgstr "Guardar la configuración de instantáneas"
msgid "You are not subscribed to that profile."
msgstr "No te has suscrito a ese perfil."
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "No se ha podido guardar la suscripción."
@ -4514,10 +4528,6 @@ msgstr ""
msgid "No such tag."
msgstr "No existe tal etiqueta."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Método API en construcción."
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "No has bloqueado ese usuario."
@ -4828,81 +4838,128 @@ msgstr "Versión"
msgid "Author(s)"
msgstr "Autor(es)"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid "Cannot process URL '%s'"
msgstr "No se puede procesar URL '%s'"
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr " Robin piensa que algo es imposible."
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
"No puede haber un archivo de tamaño mayor a %d bytes y el archivo subido es "
"de %d bytes. Por favor, intenta subir una versión más ligera."
"Ningún archivopuede ser de tamaño mayor a %1$d bytes y el archivo que "
"enviaste es de %2$d bytes. Trata de subir una versión más pequeña."
#: classes/File.php:195
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"Un archivo tan grande podría sobrepasar tu cuota de usuario de %d bytes."
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Un archivo tan grande podría sobrepasar tu cuota mensual de %d bytes."
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
msgid "Invalid filename."
msgstr "Nombre de archivo inválido."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "Ha fallado la acción de unirse el grupo"
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "No es parte del grupo."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "Ha fallado la acción de abandonar el grupo"
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr "No se pudo actualizar el grupo local."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr "No se pudo crear el token de acceso para %s"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr "Ningún nombre de base de datos o DSN encontrado."
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr "Se te ha inhabilitado para enviar mensajes directos."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "No se pudo insertar mensaje."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "No se pudo actualizar mensaje con nuevo URI."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr "No existe tal perfil (%1$d) para notificar (%2$d)."
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Error de la BD al insertar la etiqueta clave: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr "Ha habido un problema al guardar el mensaje. Es muy largo."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "Ha habido un problema al guardar el mensaje. Usuario desconocido."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiados avisos demasiado rápido; para y publicar nuevamente en unos "
"minutos."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@ -4910,72 +4967,119 @@ msgstr ""
"Muchos mensajes, enviados muy rápido; espera un poco e intenta publicar "
"pasados unos minutos."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr "Tienes prohibido publicar avisos en este sitio."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Hubo un problema al guardar el aviso."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr "Mal tipo proveído a saveKnownGroups"
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr "Hubo un problema al guarda la bandeja de entrada del grupo."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr "No se puede revocar rol \"%1$s\" para usuario #%2$d; no existe."
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
"No se puede revocar rol \"%1$s\" para usuario #%2$d; error de base de datos."
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
msgid "Missing profile."
msgstr "Perfil ausente."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
msgid "Unable to save tag."
msgstr "Incapaz de grabar etiqueta."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr "Se te ha prohibido la suscripción."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr "¡Ya te has suscrito!"
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "El usuario te ha bloqueado."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
#, fuzzy
msgid "Not subscribed!"
msgstr "¡No estás suscrito!"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
msgid "Could not delete self-subscription."
msgstr "No se pudo eliminar la auto-suscripción."
#: classes/Subscription.php:200
msgid "Couldn't delete subscription OMB token."
msgstr "No se pudo eliminar el token OMB de suscripción."
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
msgid "Could not delete subscription OMB token."
msgstr "No se pudo eliminar la ficha OMB de suscripción."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
msgid "Could not delete subscription."
msgstr "No se pudo eliminar la suscripción."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bienvenido a %1$s, @%2$s!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "No se pudo crear grupo."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
msgid "Could not set group URI."
msgstr "No se pudo configurar el URI del grupo."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "No se pudo configurar la membresía del grupo."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
msgid "Could not save local group info."
msgstr "No se ha podido guardar la información del grupo local."
@ -6453,7 +6557,7 @@ msgstr ""
"otros usuarios partícipes de la conversación. La gente puede enviarte "
"mensajes que sólo puedas leer tú."
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "desde"
@ -6513,24 +6617,24 @@ msgstr "No se pudo escribir el archivo en el disco."
msgid "File upload stopped by extension."
msgstr "La subida de archivos se detuvo por extensión."
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr "Archivo sobrepasa la cuota del usuario."
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr "El archivo no se pudo mover al directorio de destino."
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr "No se pudo determinar tipo MIME del archivo"
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr "Pruebe a usar otro formato %s."
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr "%s no es un tipo de archivo soportado en este servidor."
@ -6586,51 +6690,51 @@ msgstr ""
"favor, inténtalo más tarde."
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "N"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "S"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "E"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "W"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "en"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "en contexto"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Repetido por"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "Responder este aviso."
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Responder"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "Aviso repetido"
@ -6888,8 +6992,8 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr "Este servidor no puede manejar cargas de temas sin soporte ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
msgid "Theme upload missing or failed."
msgstr "Sudida del tema perdido o errado."
msgid "The theme file is missing or the upload failed."
msgstr "El archivo de tema está perdido o la carga falló."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257

View File

@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:35+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:57+0000\n"
"Last-Translator: Ahmad Sufi Mahmudi\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
@ -22,7 +22,7 @@ msgstr ""
"X-Language-Code: fa\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
#. TRANS: Page title
@ -103,7 +103,7 @@ msgstr "چنین صفحه‌ای وجود ندارد."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -170,19 +170,19 @@ msgstr ""
#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
#: actions/all.php:146
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"شما می‌توانید [یادآوری‌کردن %1$s](../%2$s) را از نمایه‌اش امتحان کنید یا [به "
"توجه او چیزی بفرستید](%%%%action.newnotice%%%%?status_textarea=%3$s)."
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
#, fuzzy, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"چرا [ثبت‌نام](%%%%action.register%%%%) نمی‌کنید و سپس به %s یادآوری کنید یا یک "
"پیام به توجه‌اش بفرستید."
@ -217,7 +217,7 @@ msgstr "به روز رسانی از %1$s و دوستان در %2$s"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -266,7 +266,7 @@ msgstr "نمی‌توان نمایه را ذخیره کرد."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -363,7 +363,8 @@ msgid "Could not delete favorite."
msgstr "نمی‌توان پیام برگزیده را حذف کرد."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "نمی‌توان کاربر را دنبال کرد: کاربر یافت نشد."
#: actions/apifriendshipscreate.php:118
@ -379,8 +380,9 @@ msgstr "نمی‌توان کاربر را دنبال نکرد: کاربر یاف
msgid "You cannot unfollow yourself."
msgstr "نمی‌توانید خودتان را دنبال کنید."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
#, fuzzy
msgid "Two valid IDs or screen_names must be supplied."
msgstr "باید ۲ شناسه‌ی کاربر یا نام ظاهری وارد کنید."
#: actions/apifriendshipsshow.php:134
@ -508,6 +510,11 @@ msgstr "%s گروه"
msgid "groups on %s"
msgstr "گروه‌ها در %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "بارگذاری پرونده"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr "هیچ پارامتر oauth_token آماده نشده است."
@ -651,22 +658,26 @@ msgstr "وضعیت حذف شد."
msgid "No status with that ID found."
msgstr "هیچ وضعیتی با آن شناسه یافت نشد."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "این خیلی طولانی است. بیشینهٔ طول پیام %d نویسه است."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "یافت نشد."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "بیشینهٔ طول پیام %d نویسه که شامل نشانی اینترنتی پیوست هم هست."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "قالب پشتیبانی نشده."
@ -720,6 +731,10 @@ msgstr "پیام‌هایی که با %s نشانه گزاری شده اند."
msgid "Updates tagged with %1$s on %2$s!"
msgstr "پیام‌های نشانه گزاری شده با %1$s در %2$s"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "روش API در دست ساخت."
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "چنین پیوستی وجود ندارد."
@ -773,7 +788,7 @@ msgid "Preview"
msgstr "پیش‌نمایش"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "حذف"
@ -1055,7 +1070,7 @@ msgid "Do not delete this notice"
msgstr "این پیام را پاک نکن"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "این پیام را پاک کن"
@ -1334,7 +1349,8 @@ msgstr "نام‌مستعار غیر مجاز: «%s»"
msgid "Could not update group."
msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "نمی‌توان نام‌های مستعار را ساخت."
@ -2476,8 +2492,9 @@ msgid "Updates matching search term \"%1$s\" on %2$s!"
msgstr "پیام‌هایی که با جست‌و‌جوی عبارت »%1$s« در %s یافت شدند."
#: actions/nudge.php:85
#, fuzzy
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
"این کاربر اجازه‌ی یادآوری‌کردن را نداده است یا پست‌الکترونیک خود را تایید یا "
"تعیین نکرده است."
@ -2555,8 +2572,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr "لطفا تنها از نشانی‌های اینترنتی %s از راه HTTP ساده استفاده کنید."
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "یک قالب دادهٔ پشتیبانی‌شده نیست."
@ -3460,7 +3477,7 @@ msgstr "شما نمی‌توانید پیام خودتان را تکرار کن
msgid "You already repeated that notice."
msgstr "شما قبلا آن پیام را تکرار کرده‌اید."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "تکرار شده"
@ -3495,10 +3512,10 @@ msgid "Replies feed for %s (Atom)"
msgstr "خوراک پاسخ‌ها برای %s (Atom)"
#: actions/replies.php:199
#, php-format
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"این خط‌زمانی است که پاسخ‌ها به %1$s را نشان می‌دهد، اما %2$s هنوز یک پیام به "
"توجه‌اش دریافت نکرده است."
@ -3513,10 +3530,10 @@ msgstr ""
"شوید یا [به گروه‌ها بپیوندید](%%action.groups%%)."
#: actions/replies.php:206
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"شما می‌توانید [یادآوری %1$s](../%2$s) را امتحان کنید یا [به توجه او چیزی "
"بفرستید](%%%%action.newnotice%%%%?status_textarea=%3$s)."
@ -3608,7 +3625,7 @@ msgstr "سازمان"
msgid "Description"
msgstr "توصیف"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "آمار"
@ -3696,20 +3713,20 @@ msgstr ""
"آن‌ها بگذارید."
#: actions/showfavorites.php:208
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s تاکنون هیچ پیامی را به برگزیده‌هایش اضافه نکرده است. چیز جالبی بفرستید که "
"ممکن است به برگزیده‌هایشان اضافه کنند :)"
#: actions/showfavorites.php:212
#, php-format
#, fuzzy, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
"%s تاکنون هیچ پیامی را به برگزیده‌هایش اضافه نکرده است. چرا به [ثبت کردن یک "
"حساب](%%%%action.register%%%%) اقدام نمی‌کنید و سپس چیز جالبی را که ممکن است "
@ -3771,7 +3788,7 @@ msgstr "خوراک پیام برای گروه %s (Atom)"
msgid "FOAF for %s group"
msgstr "FOAF برای گروه %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "اعضا"
@ -3785,11 +3802,11 @@ msgstr "هیچ"
msgid "All members"
msgstr "همهٔ اعضا"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "ساخته شد"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3805,7 +3822,7 @@ msgstr ""
"می‌گذارند. [اکنون بپیوندید ](%%%%action.register%%%%) تا یکی از اعضای این "
"گروه و بلکه بیش‌تر بشوید! ([بیش‌تر بخوانید](%%%%doc.help%%%%))"
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3819,7 +3836,7 @@ msgstr ""
"است. کاربران آن پیام‌های کوتاهی را دربارهٔ زندگی و علاقه‌مندی‌هایشان به اشتراک "
"می‌گذارند. "
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "مدیران"
@ -3894,10 +3911,10 @@ msgstr ""
"زمان خوبی برای شروع باشد :)"
#: actions/showstream.php:207
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
"شما می‌توانید یادآوری %1$s را امتحان کنید یا [به توجه او چیزی بفرستید](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
@ -4283,7 +4300,8 @@ msgstr "ذخیرهٔ تنظیمات تصویر لحظه‌ای"
msgid "You are not subscribed to that profile."
msgstr "شما مشترک آن نمایه نیستید."
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "نمی‌توان اشتراک را ذخیره کرد."
@ -4460,10 +4478,6 @@ msgstr "از این روش برای افزودن برچسب به مشترک‌ه
msgid "No such tag."
msgstr "چنین برچسبی وجود ندارد."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "روش API در دست ساخت."
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "شما آن کاربر را مسدود نکرده اید."
@ -4765,83 +4779,131 @@ msgstr "نسخه"
msgid "Author(s)"
msgstr "مؤلف(ها)"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid "Cannot process URL '%s'"
msgstr ""
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, fuzzy, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
"هیچ پرونده‌ای نباید بزرگ‌تر از %d بایت باشد و پرونده‌ای که شما فرستادید %d بایت "
"بود. بارگذاری یک نسخهٔ کوچک‌تر را امتحان کنید."
#: classes/File.php:195
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"یک پرونده با این حجم زیاد می‌تواند از سهمیهٔ کاربری شما از %d بایت بگذرد."
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
"یک پرونده با این حجم زیاد می‌تواند از سهمیهٔ کاربری ماهانهٔ شما از %d بایت "
"بگذرد."
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "اندازه‌ی نادرست"
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "پیوستن به گروه شکست خورد."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "بخشی از گروه نیست."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "ترک کردن گروه شکست خورد."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr "نمی‌توان گروه محلی را به‌هنگام‌سازی کرد."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr "نمی‌توان رمز ورود را برای %s ایجاد کرد"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr "شما از فرستادن پیام مستقیم مردود شده اید."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "پیغام نمی تواند درج گردد"
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr ""
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, php-format
msgid "Database error inserting hashtag: %s"
msgstr "هنگام افزودن برچسب خطا در پایگاه داده رخ داد: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr "مشکل در ذخیره کردن پیام. بسیار طولانی."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "مشکل در ذخیره کردن پیام. کاربر نا شناخته."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"تعداد زیادی پیام و خیلی سریع فرستاده شده‌اند؛ استراحت کنید و دقایقی دیگر "
"دوباره بفرستید."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@ -4849,72 +4911,123 @@ msgstr ""
"تعداد زیاد پیام های دو نسخه ای و بسرعت؛ استراحت کنید و دقایقی دیگر مجددا "
"ارسال کنید."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr "شما از فرستادن پیام در این وب‌گاه منع شده‌اید."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "هنگام ذخیرهٔ پیام مشکلی ایجاد شد."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr "هنگام ذخیرهٔ صندوق ورودی گروه مشکلی رخ داد."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "کاربر هیچ نمایه‌ای ندارد."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "نمی‌توان پیام وب‌گاه را ذخیره کرد."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr "شما از اشتراک منع شده‌اید."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr "قبلا اشتراک انجام شده است!"
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "کاربر شما را مسدود کرده است."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
msgid "Not subscribed!"
msgstr "تایید نشده!"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Could not delete self-subscription."
msgstr "نمی‌توان خود-اشتراکی را حذف کرد."
#: classes/Subscription.php:200
msgid "Couldn't delete subscription OMB token."
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Could not delete subscription OMB token."
msgstr "نمی‌توان رمز اشتراک OMB را حذف کرد."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "نمی‌توان اشتراک را لغو کرد."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "@%2$s، به %1$s خوش آمدید!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "نمیتوان گروه را تشکیل داد"
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
#, fuzzy
msgid "Could not set group URI."
msgstr "نمیتوان گروه را تشکیل داد"
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "نمی‌توان عضویت گروه را تعیین کرد."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
msgid "Could not save local group info."
msgstr "نمی‌توان اطلاعات گروه محلی را ذخیره کرد."
@ -6375,7 +6488,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "از"
@ -6431,24 +6544,24 @@ msgstr "شکست خوردن در نوشتن فایل روی دیسک."
msgid "File upload stopped by extension."
msgstr "بارگذاری پرونده توسط افزونه متوقف شد."
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr "پرونده از سهمیهٔ کاربر می‌گذرد."
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr "فایل نتوانست به دایرکتوری مقصد منتقل شود."
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr "نمی‌توان فرمت پرونده را تعیین کرد."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr "تلاش برای امتحان نوع دیگر %s"
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr "%s یک گونهٔ پروندهٔ پیشتیبانی شده روی این کارگزار نیست."
@ -6504,51 +6617,51 @@ msgstr ""
"دوباره تلاش کنید."
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr ""
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "در"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "در زمینه"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "تکرار از"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "به این پیام پاسخ دهید"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "پاسخ"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "پیام تکرار شد"
@ -6806,9 +6919,8 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "هنگام بارگذاری پرونده خطای سیستمی رخ داد."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:30+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:55+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n"
@ -107,7 +107,7 @@ msgstr "Sivua ei ole."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -178,8 +178,8 @@ msgstr ""
#: actions/all.php:146
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Ole ensimmäinen joka [lähettää päivityksen tästä aiheesta] (%%%%action."
"newnotice%%%%?status_textarea=%s)!"
@ -188,7 +188,7 @@ msgstr ""
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
#. TRANS: H1 text
@ -221,7 +221,7 @@ msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -272,7 +272,7 @@ msgstr "Ei voitu tallentaa profiilia."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -374,7 +374,8 @@ msgid "Could not delete favorite."
msgstr "Ei voitu poistaa suosikkia."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "Ei voitu tilata käyttäjää: Käyttäjää ei löytynyt."
#: actions/apifriendshipscreate.php:118
@ -391,8 +392,9 @@ msgstr "Ei voitu lopettaa tilausta: Käyttäjää ei löytynyt."
msgid "You cannot unfollow yourself."
msgstr "Et voi lopettaa itsesi tilausta!"
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
#, fuzzy
msgid "Two valid IDs or screen_names must be supplied."
msgstr "Kaksi käyttäjätunnusta tai nimeä täytyy antaa."
#: actions/apifriendshipsshow.php:134
@ -525,6 +527,11 @@ msgstr "Käyttäjän %s ryhmät"
msgid "groups on %s"
msgstr "Ryhmän toiminnot"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Lataa"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr ""
@ -673,22 +680,26 @@ msgstr "Päivitys poistettu."
msgid "No status with that ID found."
msgstr "Käyttäjätunnukselle ei löytynyt statusviestiä."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Päivitys on liian pitkä. Maksimipituus on %d merkkiä."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "Ei löytynyt."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "Maksimikoko päivitykselle on %d merkkiä, mukaan lukien URL-osoite."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "Formaattia ei ole tuettu."
@ -743,6 +754,10 @@ msgstr "Päivitykset joilla on tagi %s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "API-metodi on työn alla!"
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "Liitettä ei ole."
@ -796,7 +811,7 @@ msgid "Preview"
msgstr "Esikatselu"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Poista"
@ -1083,7 +1098,7 @@ msgid "Do not delete this notice"
msgstr "Älä poista tätä päivitystä"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Poista tämä päivitys"
@ -1380,7 +1395,8 @@ msgstr "Virheellinen alias: \"%s\""
msgid "Could not update group."
msgstr "Ei voitu päivittää ryhmää."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "Ei voitu lisätä aliasta."
@ -1421,7 +1437,6 @@ msgstr "Tämän hetken vahvistettu sähköpostiosoite."
#: actions/emailsettings.php:115 actions/emailsettings.php:158
#: actions/imsettings.php:116 actions/smssettings.php:124
#: actions/smssettings.php:180
#, fuzzy
msgctxt "BUTTON"
msgid "Remove"
msgstr "Poista"
@ -2555,8 +2570,9 @@ msgid "Updates matching search term \"%1$s\" on %2$s!"
msgstr "Kaikki päivitykset hakuehdolla \"%s\""
#: actions/nudge.php:85
#, fuzzy
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
"Käyttäjä ei ole sallinut tönäisyjä tai ei ole vahvistanut "
"sähköpostiosoitettaan."
@ -2638,8 +2654,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "Tuo ei ole tuettu tietomuoto."
@ -3568,7 +3584,7 @@ msgstr "Et voi rekisteröityä, jos et hyväksy lisenssiehtoja."
msgid "You already repeated that notice."
msgstr "Sinä olet jo estänyt tämän käyttäjän."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
#, fuzzy
msgid "Repeated"
msgstr "Luotu"
@ -3608,7 +3624,7 @@ msgstr "Päivityksien syöte käyttäjälle %s"
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"Tämä on käyttäjän %s aikajana, mutta %s ei ole lähettänyt vielä yhtään "
"päivitystä."
@ -3623,8 +3639,8 @@ msgstr ""
#: actions/replies.php:206
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Ole ensimmäinen joka [lähettää päivityksen tästä aiheesta] (%%%%action."
"newnotice%%%%?status_textarea=%s)!"
@ -3726,7 +3742,7 @@ msgstr "Sivutus"
msgid "Description"
msgstr "Kuvaus"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Tilastot"
@ -3812,16 +3828,16 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
#: actions/showfavorites.php:243
@ -3880,7 +3896,7 @@ msgstr "Syöte ryhmän %s päivityksille (Atom)"
msgid "FOAF for %s group"
msgstr "Käyttäjän %s lähetetyt viestit"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Jäsenet"
@ -3894,11 +3910,11 @@ msgstr "(Tyhjä)"
msgid "All members"
msgstr "Kaikki jäsenet"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Luotu"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3908,7 +3924,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3919,7 +3935,7 @@ msgstr ""
"**%s** on ryhmä palvelussa %%%%site.name%%%%, joka on [mikroblogauspalvelu]"
"(http://en.wikipedia.org/wiki/Micro-blogging)"
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Ylläpitäjät"
@ -3996,8 +4012,8 @@ msgstr ""
#: actions/showstream.php:207
#, fuzzy, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
"Ole ensimmäinen joka [lähettää päivityksen tästä aiheesta] (%%%%action."
"newnotice%%%%?status_textarea=%s)!"
@ -4399,7 +4415,8 @@ msgstr "Profiilikuva-asetukset"
msgid "You are not subscribed to that profile."
msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "Tilausta ei onnistuttu tallentamaan."
@ -4572,10 +4589,6 @@ msgstr ""
msgid "No such tag."
msgstr "Tuota tagia ei ole."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-metodi on työn alla!"
#: actions/unblock.php:59
#, fuzzy
msgid "You haven't blocked that user."
@ -4887,84 +4900,132 @@ msgstr "Omat"
msgid "Author(s)"
msgstr ""
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Koko ei kelpaa."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
#, fuzzy
msgid "Group join failed."
msgstr "Ryhmän profiili"
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
#, fuzzy
msgid "Not part of group."
msgstr "Ei voitu päivittää ryhmää."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
#, fuzzy
msgid "Group leave failed."
msgstr "Ryhmän profiili"
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
#, fuzzy
msgid "Could not update local group."
msgstr "Ei voitu päivittää ryhmää."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, fuzzy, php-format
msgid "Could not create login token for %s"
msgstr "Ei voitu lisätä aliasta."
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
#, fuzzy
msgid "You are banned from sending direct messages."
msgstr "Tapahtui virhe suoran viestin lähetyksessä."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "Viestin tallennus ei onnistunut."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "Viestin päivittäminen uudella URI-osoitteella ei onnistunut."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, fuzzy, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Tietokantavirhe tallennettaessa risutagiä: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Ongelma päivityksen tallentamisessa."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "Virhe tapahtui päivityksen tallennuksessa. Tuntematon käyttäjä."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Liian monta päivitystä liian nopeasti; pidä pieni hengähdystauko ja jatka "
"päivityksien lähettämista muutaman minuutin päästä."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@ -4972,77 +5033,126 @@ msgstr ""
"Liian monta päivitystä liian nopeasti; pidä pieni hengähdystauko ja jatka "
"päivityksien lähettämista muutaman minuutin päästä."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr "Päivityksesi tähän palveluun on estetty."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Ongelma päivityksen tallentamisessa."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Ongelma päivityksen tallentamisessa."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "Käyttäjällä ei ole profiilia."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "Twitter-asetuksia ei voitu tallentaa!"
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
#, fuzzy
msgid "You have been banned from subscribing."
msgstr "Käyttäjä on estänyt sinua tilaamasta päivityksiä."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr ""
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "Käyttäjä on asettanut eston sinulle."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
#, fuzzy
msgid "Not subscribed!"
msgstr "Ei ole tilattu!."
#: classes/Subscription.php:173
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Couldn't delete self-subscription."
msgid "Could not delete self-subscription."
msgstr "Ei voitu poistaa tilausta."
#: classes/Subscription.php:200
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Couldn't delete subscription OMB token."
msgid "Could not delete subscription OMB token."
msgstr "Ei voitu poistaa tilausta."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "Ei voitu poistaa tilausta."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Viesti käyttäjälle %1$s, %2$s"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "Ryhmän luonti ei onnistunut."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
#, fuzzy
msgid "Could not set group URI."
msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
#, fuzzy
msgid "Could not save local group info."
msgstr "Tilausta ei onnistuttu tallentamaan."
@ -6435,7 +6545,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
#, fuzzy
msgid "from"
msgstr " lähteestä "
@ -6491,25 +6601,25 @@ msgstr ""
msgid "File upload stopped by extension."
msgstr ""
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
#, fuzzy
msgid "Could not determine file's MIME type."
msgstr "Julkista päivitysvirtaa ei saatu."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr ""
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6566,54 +6676,54 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
#, fuzzy
msgid "N"
msgstr "Ei"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr ""
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr ""
#: lib/noticelist.php:559
#: lib/noticelist.php:567
#, fuzzy
msgid "in context"
msgstr "Ei sisältöä!"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
#, fuzzy
msgid "Repeated by"
msgstr "Luotu"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "Vastaa tähän päivitykseen"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Vastaus"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
#, fuzzy
msgid "Notice repeated"
msgstr "Päivitys on poistettu."
@ -6884,9 +6994,8 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Tiedoston lähetyksessä tapahtui järjestelmävirhe."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257

View File

@ -15,12 +15,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:40+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:58+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n"
@ -104,7 +104,7 @@ msgstr "Page non trouvée."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -175,8 +175,8 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Vous pouvez essayer de [faire un clin dœil à %1$s](../%2$s) depuis son "
"profil ou [poster quelque chose à son intention](%%%%action.newnotice%%%%?"
@ -186,9 +186,9 @@ msgstr ""
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"Pourquoi ne pas [créer un compte](%%%%action.register%%%%) et ensuite faire "
"Pourquoi ne pas [créer un compte](%%%%action.register%%%%) et faire ensuite "
"un clin dœil à %s ou poster un avis à son intention."
#. TRANS: H1 text
@ -221,7 +221,7 @@ msgstr "Statuts de %1$s et ses amis dans %2$s!"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -271,7 +271,7 @@ msgstr "Impossible denregistrer le profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -371,8 +371,8 @@ msgid "Could not delete favorite."
msgstr "Impossible de supprimer le favori."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
msgstr "Impossible de suivre lutilisateur : Utilisateur non trouvé."
msgid "Could not follow user: profile not found."
msgstr "Impossible de suivre lutilisateur : profil non trouvé."
#: actions/apifriendshipscreate.php:118
#, php-format
@ -387,9 +387,9 @@ msgstr "Impossible de ne plus suivre lutilisateur : utilisateur non trouvé."
msgid "You cannot unfollow yourself."
msgstr "Vous ne pouvez pas ne plus vous suivre vous-même."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
msgstr "Vous devez fournir 2 identifiants ou pseudos."
#: actions/apifriendshipsexists.php:91
msgid "Two valid IDs or screen_names must be supplied."
msgstr "Vous devez fournir deux identifiants ou pseudonymes."
#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
@ -518,6 +518,10 @@ msgstr "Groupes de %s"
msgid "groups on %s"
msgstr "groupes sur %s"
#: actions/apimediaupload.php:99
msgid "Upload failed."
msgstr "Échec du téléversement."
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr "Paramètre oauth_token non fourni."
@ -668,24 +672,28 @@ msgstr "Statut supprimé."
msgid "No status with that ID found."
msgstr "Aucun statut trouvé avec cet identifiant."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr "Le client doit fournir un paramètre « statut » avec une valeur."
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Cest trop long ! La taille maximale de lavis est de %d caractères."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "Non trouvé."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
"La taille maximale de lavis est de %d caractères, en incluant lURL de la "
"pièce jointe."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "Format non supporté."
@ -739,6 +747,10 @@ msgstr "Avis marqués avec %s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mises à jour marquées avec %1$s dans %2$s !"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "Méthode API en construction."
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "Pièce jointe non trouvée."
@ -793,7 +805,7 @@ msgid "Preview"
msgstr "Aperçu"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Supprimer"
@ -1074,7 +1086,7 @@ msgid "Do not delete this notice"
msgstr "Ne pas supprimer cet avis"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Supprimer cet avis"
@ -1353,7 +1365,8 @@ msgstr "Alias invalide : « %s »"
msgid "Could not update group."
msgstr "Impossible de mettre à jour le groupe."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "Impossible de créer les alias."
@ -1503,7 +1516,7 @@ msgstr "Préférences de courrier électronique enregistrées."
#. TRANS: Message given saving e-mail address without having provided one.
#: actions/emailsettings.php:353
msgid "No email address."
msgstr "Aucune adresse courriel."
msgstr "Aucune adresse électronique."
#. TRANS: Message given saving e-mail address that cannot be normalised.
#: actions/emailsettings.php:361
@ -2524,7 +2537,7 @@ msgstr "mises à jour correspondant au(x) terme(s) « %1$s » sur %2$s !"
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
"Cet utilisateur naccepte pas les clins dœil ou na pas encore validé son "
"adresse électronique."
@ -2604,8 +2617,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr "Veuillez n'utiliser que des URL HTTP complètes en %s."
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "Format de données non supporté."
@ -3525,7 +3538,7 @@ msgstr "Vous ne pouvez pas reprendre votre propre avis."
msgid "You already repeated that notice."
msgstr "Vous avez déjà repris cet avis."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "Repris"
@ -3563,7 +3576,7 @@ msgstr "Flux des réponses pour %s (Atom)"
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"Ceci est la chronologie des réponses à %1$s mais %2$s na encore reçu aucun "
"avis à son intention."
@ -3581,8 +3594,8 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Vous pouvez essayer de [faire un clin dœil à %1$s](../%2$s) ou de [poster "
"quelque chose à son intention](%%%%action.newnotice%%%%?status_textarea=%3"
@ -3675,7 +3688,7 @@ msgstr "Organisation"
msgid "Description"
msgstr "Description"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Statistiques"
@ -3765,8 +3778,8 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s na pas ajouté davis à ses favoris pour le moment. Publiez quelque chose "
"dintéressant, et cela pourrait être ajouté à ses favoris :)"
@ -3774,13 +3787,13 @@ msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
"%s na pas ajouté davis à ses favoris pour le moment. Vous pourriez [créer "
"un compte](%%%%action.register%%%%), puis poster quelque chose "
"dintéressant, qui serait ajouté à ses favoris :)"
"dintéressant, quil pourrait ajouter à ses favoris :)"
#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
@ -3838,7 +3851,7 @@ msgstr "Fil des avis du groupe %s (Atom)"
msgid "FOAF for %s group"
msgstr "ami dun ami pour le groupe %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Membres"
@ -3852,11 +3865,11 @@ msgstr "(aucun)"
msgid "All members"
msgstr "Tous les membres"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Créé"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3872,7 +3885,7 @@ msgstr ""
"action.register%%%%) pour devenir membre de ce groupe et bien plus ! ([En "
"lire plus](%%%%doc.help%%%%))"
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3885,7 +3898,7 @@ msgstr ""
"logiciel libre [StatusNet](http://status.net/). Ses membres partagent des "
"messages courts à propos de leur vie et leurs intérêts. "
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Administrateurs"
@ -3965,8 +3978,8 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
"Vous pouvez essayer de faire un clin dœil à %1$s ou de [poster quelque "
"chose à son intention](%%%%action.newnotice%%%%?status_textarea=%2$s)."
@ -4359,7 +4372,8 @@ msgstr "Sauvegarder les paramètres des instantanés"
msgid "You are not subscribed to that profile."
msgstr "Vous nêtes pas abonné(e) à ce profil."
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "Impossible denregistrer labonnement."
@ -4540,10 +4554,6 @@ msgstr ""
msgid "No such tag."
msgstr "Cette marque nexiste pas."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Méthode API en construction."
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "Vous navez pas bloqué cet utilisateur."
@ -4859,80 +4869,127 @@ msgstr "Version"
msgid "Author(s)"
msgstr "Auteur(s)"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid "Cannot process URL '%s'"
msgstr "Impossible de traiter lURL « %s »"
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr "Robin pense que quelque chose est impossible."
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
"Un fichier ne peut pas être plus gros que %d octets et le fichier que vous "
"avez envoyé pesait %d octets. Essayez dimporter une version moins grosse."
"Un fichier ne peut pas peser plus de %1$d octets et le fichier que vous avez "
"envoyé pesait %2$d octets. Essayez dimporter une version moins lourde."
#: classes/File.php:195
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr "Un fichier aussi gros dépasserai votre quota utilisateur de %d octets."
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Un fichier aussi gros dépasserai votre quota mensuel de %d octets."
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
msgid "Invalid filename."
msgstr "Nom de fichier non valide."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "Linscription au groupe a échoué."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "Nappartient pas au groupe."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "La désinscription du groupe a échoué."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr "Impossible de mettre à jour le groupe local."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr "Impossible de créer le jeton didentification pour %s"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr "Aucune base de données de nom ou DSN trouvée nulle part."
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr "Il vous est interdit denvoyer des messages directs."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "Impossible dinsérer le message."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "Impossible de mettre à jour le message avec un nouvel URI."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr "Impossible de trouver le profil (%1$d) pour lavis (%2$d)."
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Erreur de base de donnée en insérant la marque (hashtag) : %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr "Problème lors de lenregistrement de lavis ; trop long."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "Erreur lors de lenregistrement de lavis. Utilisateur inconnu."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Trop davis, trop vite ! Faites une pause et publiez à nouveau dans quelques "
"minutes."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@ -4940,71 +4997,121 @@ msgstr ""
"Trop de messages en double trop vite ! Prenez une pause et publiez à nouveau "
"dans quelques minutes."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr "Il vous est interdit de poster des avis sur ce site."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Problème lors de lenregistrement de lavis."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr "Le type renseigné pour saveKnownGroups nest pas valable"
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr "Problème lors de lenregistrement de la boîte de réception du groupe."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
"Impossible de révoquer le rôle de « %1$s » pour lutilisateur #%2$d : "
"lutilisateur nexiste pas."
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
"Impossible de révoquer le rôle de « %1$s » pour lutilisateur #%2$d : erreur "
"dans la base de données."
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
msgid "Missing profile."
msgstr "Profil manquant."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
msgid "Unable to save tag."
msgstr "Impossible denregistrer létiquette."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr "Il vous a été interdit de vous abonner."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr "Déjà abonné !"
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "Cet utilisateur vous a bloqué."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
msgid "Not subscribed!"
msgstr "Pas abonné !"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
msgid "Could not delete self-subscription."
msgstr "Impossible de supprimer labonnement à soi-même."
#: classes/Subscription.php:200
msgid "Couldn't delete subscription OMB token."
msgstr "Impossible de supprimer le jeton OMB de l'abonnement ."
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
msgid "Could not delete subscription OMB token."
msgstr "Impossible de supprimer le jeton OMB de l'abonnement."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
msgstr "Impossible de cesser labonnement"
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
msgid "Could not delete subscription."
msgstr "Impossible de supprimer labonnement"
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bienvenue à %1$s, @%2$s !"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "Impossible de créer le groupe."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
msgid "Could not set group URI."
msgstr "Impossible de définir l'URI du groupe."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "Impossible détablir linscription au groupe."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
msgid "Could not save local group info."
msgstr "Impossible denregistrer les informations du groupe local."
@ -6487,7 +6594,7 @@ msgstr ""
"pour démarrer des conversations avec dautres utilisateurs. Ceux-ci peuvent "
"vous envoyer des messages destinés à vous seul(e)."
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "de"
@ -6546,24 +6653,24 @@ msgstr "Impossible décrire sur le disque."
msgid "File upload stopped by extension."
msgstr "Import de fichier stoppé par une extension."
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr "Le fichier dépasse le quota de lutilisateur."
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr "Le fichier na pas pu être déplacé dans le dossier de destination."
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr "Impossible de déterminer le type MIME du fichier."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr " Essayez dutiliser un autre %s format."
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr "%s nest pas un type de fichier supporté sur ce serveur."
@ -6619,51 +6726,51 @@ msgstr ""
"Veuillez réessayer plus tard."
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "N"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "S"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "E"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "O"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u° %2$u' %3$u\" %4$s %5$u° %6$u' %7$u\" %8$s"
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "chez"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "dans le contexte"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Repris par"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "Répondre à cet avis"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Répondre"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "Avis repris"
@ -6923,8 +7030,8 @@ msgstr ""
"ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
msgid "Theme upload missing or failed."
msgstr "Le thème est manquant ou son import a échoué."
msgid "The theme file is missing or the upload failed."
msgstr "Le fichier de thème est manquant ou le téléversement a échoué."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257

View File

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:45+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:00+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ga\n"
"X-Message-Group: out-statusnet\n"
@ -107,7 +107,7 @@ msgstr "Non existe a etiqueta."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -174,15 +174,15 @@ msgstr ""
#: actions/all.php:146
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
#. TRANS: H1 text
@ -216,7 +216,7 @@ msgstr "Actualizacións dende %1$s e amigos en %2$s!"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -267,7 +267,7 @@ msgstr "Non se puido gardar o perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -370,7 +370,8 @@ msgid "Could not delete favorite."
msgstr "Non se puido eliminar o favorito."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
#: actions/apifriendshipscreate.php:118
@ -388,8 +389,9 @@ msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
msgid "You cannot unfollow yourself."
msgstr "Non se puido actualizar o usuario."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
#, fuzzy
msgid "Two valid IDs or screen_names must be supplied."
msgstr ""
"Dous identificadores de usuario ou nomes_en_pantalla deben ser "
"proporcionados."
@ -522,6 +524,11 @@ msgstr ""
msgid "groups on %s"
msgstr "Outras opcions"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Subir"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr ""
@ -669,23 +676,27 @@ msgstr "Avatar actualizado."
msgid "No status with that ID found."
msgstr "Non existe ningún estado con esa ID atopada."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr ""
"Iso é demasiado longo. O tamaño máximo para un chío é de 140 caracteres."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "Non atopado"
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
#, fuzzy
msgid "Unsupported format."
msgstr "Formato de ficheiro de imaxe non soportado."
@ -740,6 +751,10 @@ msgstr "Chíos tagueados con %s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualizacións dende %1$s en %2$s!"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "Método da API en contrución."
#: actions/attachment.php:73
#, fuzzy
msgid "No such attachment."
@ -795,7 +810,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
#, fuzzy
msgid "Delete"
msgstr "eliminar"
@ -1095,7 +1110,7 @@ msgid "Do not delete this notice"
msgstr "Non se pode eliminar este chíos."
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
#, fuzzy
msgid "Delete this notice"
msgstr "Eliminar chío"
@ -1400,7 +1415,8 @@ msgstr "Etiqueta inválida: '%s'"
msgid "Could not update group."
msgstr "Non se puido actualizar o usuario."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
#, fuzzy
msgid "Could not create aliases."
msgstr "Non se puido crear o favorito."
@ -2586,8 +2602,9 @@ msgid "Updates matching search term \"%1$s\" on %2$s!"
msgstr "Tódalas actualizacións que coinciden co termo de procura \"%s\""
#: actions/nudge.php:85
#, fuzzy
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
"Este usuario non permite toques, ou non confirmou ainda o seu correo "
"electrónico."
@ -2668,8 +2685,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr ""
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "Non é un formato de datos soportado."
@ -3608,7 +3625,7 @@ msgstr "Non podes rexistrarte se non estas de acordo coa licenza."
msgid "You already repeated that notice."
msgstr "Xa bloqueaches a este usuario."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
#, fuzzy
msgid "Repeated"
msgstr "Crear"
@ -3648,7 +3665,7 @@ msgstr "Fonte de chíos para %s"
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
#: actions/replies.php:204
@ -3661,8 +3678,8 @@ msgstr ""
#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
#: actions/repliesrss.php:72
@ -3762,7 +3779,7 @@ msgstr "Invitación(s) enviada(s)."
msgid "Description"
msgstr "Subscricións"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Estatísticas"
@ -3848,16 +3865,16 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
#: actions/showfavorites.php:243
@ -3919,7 +3936,7 @@ msgstr "Fonte de chíos para %s"
msgid "FOAF for %s group"
msgstr "Band. Saída para %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Membro dende"
@ -3935,12 +3952,12 @@ msgstr "(nada)"
msgid "All members"
msgstr ""
#: actions/showgroup.php:447
#: actions/showgroup.php:439
#, fuzzy
msgid "Created"
msgstr "Crear"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3954,7 +3971,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3967,7 +3984,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr ""
@ -4043,8 +4060,8 @@ msgstr ""
#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
#: actions/showstream.php:243
@ -4450,7 +4467,8 @@ msgstr "Configuracións de Twitter"
msgid "You are not subscribed to that profile."
msgstr "Non estás suscrito a ese perfil"
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "Non se pode gardar a subscrición."
@ -4625,10 +4643,6 @@ msgstr ""
msgid "No such tag."
msgstr "Non existe a etiqueta."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Método da API en contrución."
#: actions/unblock.php:59
#, fuzzy
msgid "You haven't blocked that user."
@ -4942,84 +4956,132 @@ msgstr "Persoal"
msgid "Author(s)"
msgstr ""
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgid "Cannot process URL '%s'"
msgstr ""
#: classes/File.php:195
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Tamaño inválido."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
#, fuzzy
msgid "Group join failed."
msgstr "Non existe o perfil."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
#, fuzzy
msgid "Not part of group."
msgstr "Non se puido actualizar o usuario."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
#, fuzzy
msgid "Group leave failed."
msgstr "Non existe o perfil."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
#, fuzzy
msgid "Could not update local group."
msgstr "Non se puido actualizar o usuario."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, fuzzy, php-format
msgid "Could not create login token for %s"
msgstr "Non se puido crear o favorito."
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
#, fuzzy
msgid "You are banned from sending direct messages."
msgstr "Erro ó enviar a mensaxe directa."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "Non se pode inserir unha mensaxe."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "Non se puido actualizar a mensaxe coa nova URI."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, fuzzy, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Erro ó inserir o hashtag na BD: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Aconteceu un erro ó gardar o chío."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "Aconteceu un erro ó gardar o chío. Usuario descoñecido."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
"duns minutos."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@ -5028,79 +5090,128 @@ msgstr ""
"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
"duns minutos."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr "Tes restrinxido o envio de chíos neste sitio."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Aconteceu un erro ó gardar o chío."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Aconteceu un erro ó gardar o chío."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "O usuario non ten perfil."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "Non se puideron gardar os teus axustes de Twitter!"
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
#, fuzzy
msgid "You have been banned from subscribing."
msgstr "Este usuario non che permite suscribirte a el."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr ""
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "O usuario bloqueoute."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
#, fuzzy
msgid "Not subscribed!"
msgstr "Non está suscrito!"
#: classes/Subscription.php:173
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Couldn't delete self-subscription."
msgid "Could not delete self-subscription."
msgstr "Non se pode eliminar a subscrición."
#: classes/Subscription.php:200
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Couldn't delete subscription OMB token."
msgid "Could not delete subscription OMB token."
msgstr "Non se pode eliminar a subscrición."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "Non se pode eliminar a subscrición."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Mensaxe de %1$s en %2$s"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
#, fuzzy
msgid "Could not create group."
msgstr "Non se puido crear o favorito."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
#, fuzzy
msgid "Could not set group URI."
msgstr "Non se pode gardar a subscrición."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
#, fuzzy
msgid "Could not set group membership."
msgstr "Non se pode gardar a subscrición."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
#, fuzzy
msgid "Could not save local group info."
msgstr "Non se pode gardar a subscrición."
@ -6585,7 +6696,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
#, fuzzy
msgid "from"
msgstr " dende "
@ -6641,25 +6752,25 @@ msgstr ""
msgid "File upload stopped by extension."
msgstr ""
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr ""
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
#, fuzzy
msgid "Could not determine file's MIME type."
msgstr "Non se pudo recuperar a liña de tempo publica."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr ""
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr ""
@ -6719,56 +6830,56 @@ msgid ""
msgstr ""
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
#, fuzzy
msgid "N"
msgstr "No"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr ""
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr ""
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr ""
#: lib/noticelist.php:559
#: lib/noticelist.php:567
#, fuzzy
msgid "in context"
msgstr "Sen contido!"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
#, fuzzy
msgid "Repeated by"
msgstr "Crear"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
#, fuzzy
msgid "Reply to this notice"
msgstr "Non se pode eliminar este chíos."
#: lib/noticelist.php:622
#: lib/noticelist.php:630
#, fuzzy
msgid "Reply"
msgstr "contestar"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
#, fuzzy
msgid "Notice repeated"
msgstr "Chío publicado"
@ -7049,9 +7160,8 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Aconteceu un erro no sistema namentras se estaba cargando o ficheiro."
msgid "The theme file is missing or the upload failed."
msgstr ""
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:49+0000\n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:01+0000\n"
"Language-Team: Galician\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: gl\n"
"X-Message-Group: out-statusnet\n"
@ -98,7 +98,7 @@ msgstr "Esa páxina non existe."
#: actions/apidirectmessagenew.php:74 actions/apigroupcreate.php:113
#: actions/apigroupismember.php:91 actions/apigroupjoin.php:100
#: actions/apigroupleave.php:100 actions/apigrouplist.php:73
#: actions/apistatusesupdate.php:228 actions/apisubscriptions.php:87
#: actions/apistatusesupdate.php:229 actions/apisubscriptions.php:87
#: actions/apitimelinefavorites.php:72 actions/apitimelinefriends.php:174
#: actions/apitimelinehome.php:80 actions/apitimelinementions.php:80
#: actions/apitimelineuser.php:82 actions/avatarbynickname.php:75
@ -166,20 +166,20 @@ msgstr ""
#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
#: actions/all.php:146
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Pode probar a [facerlle un aceno a %1$s](../%2$s) dende o seu perfil ou "
"[publicar algo dirixido a el ou ela](%%%%action.newnotice%%%%?"
"status_textarea=%3$s)."
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, php-format
#, fuzzy, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
"post a notice to them."
msgstr ""
"Por que non [rexistrar unha conta](%%%%action.register%%%%) e entón facerlle "
"un aceno a %s ou publicar unha nota dirixida a el ou ela?"
@ -214,7 +214,7 @@ msgstr "Actualizacións de %1$s e amigos en %2$s!"
#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
#: actions/apitimelinegroup.php:152 actions/apitimelinehome.php:175
#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
@ -264,7 +264,7 @@ msgstr "Non se puido gardar o perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:211 actions/avatarsettings.php:257
#: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
#: actions/designadminpanel.php:123 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
#: lib/designsettings.php:283
@ -364,7 +364,7 @@ msgid "Could not delete favorite."
msgstr "Non se puido eliminar o favorito."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
msgid "Could not follow user: profile not found."
msgstr "Non se puido seguir o usuario: non se atopou."
#: actions/apifriendshipscreate.php:118
@ -380,8 +380,8 @@ msgstr "Non se puido deixar de seguir o usuario: non se atopou."
msgid "You cannot unfollow yourself."
msgstr "Non pode deixar de seguirse a si mesmo."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
#: actions/apifriendshipsexists.php:91
msgid "Two valid IDs or screen_names must be supplied."
msgstr "Deben fornecerse dúas identificacións ou nomes de usuario."
#: actions/apifriendshipsshow.php:134
@ -511,6 +511,11 @@ msgstr "grupos %s"
msgid "groups on %s"
msgstr "grupos en %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Cargar un ficheiro"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
msgstr "Non se forneceu o parámetro oauth_token."
@ -656,24 +661,28 @@ msgstr "Borrouse o estado."
msgid "No status with that ID found."
msgstr "Non se atopou ningún estado con esa ID."
#: actions/apistatusesupdate.php:241 actions/newnotice.php:155
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Iso é longo de máis. A nota non pode exceder os %d caracteres."
#: actions/apistatusesupdate.php:282 actions/apiusershow.php:96
#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
msgid "Not found."
msgstr "Non se atopou."
#: actions/apistatusesupdate.php:305 actions/newnotice.php:178
#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
"A lonxitude máxima das notas é de %d caracteres, incluído o URL do dato "
"adxunto."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
msgid "Unsupported format."
msgstr "Formato non soportado."
@ -727,6 +736,10 @@ msgstr "Notas etiquetadas con %s"
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualizacións etiquetadas con %1$s en %2$s!"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr "Método API en desenvolvemento."
#: actions/attachment.php:73
msgid "No such attachment."
msgstr "Non existe tal dato adxunto."
@ -781,7 +794,7 @@ msgid "Preview"
msgstr "Vista previa"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
#: lib/deleteuserform.php:66 lib/noticelist.php:648
#: lib/deleteuserform.php:66 lib/noticelist.php:656
msgid "Delete"
msgstr "Borrar"
@ -1062,7 +1075,7 @@ msgid "Do not delete this notice"
msgstr "Non borrar esta nota"
#. TRANS: Submit button title for 'Yes' when deleting a notice.
#: actions/deletenotice.php:158 lib/noticelist.php:648
#: actions/deletenotice.php:158 lib/noticelist.php:656
msgid "Delete this notice"
msgstr "Borrar esta nota"
@ -1341,7 +1354,8 @@ msgstr "Pseudónimo inválido: \"%s\""
msgid "Could not update group."
msgstr "Non se puido actualizar o grupo."
#: actions/editgroup.php:264 classes/User_group.php:496
#. TRANS: Server exception thrown when creating group aliases failed.
#: actions/editgroup.php:264 classes/User_group.php:514
msgid "Could not create aliases."
msgstr "Non se puideron crear os pseudónimos."
@ -2501,9 +2515,9 @@ msgstr "Actualizacións que conteñen o termo \"%1$s\" en %2$s!"
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
"This user doesn't allow nudges or hasn't confirmed or set their email yet."
msgstr ""
"Este usuario non permite acenos ou aínda non corfirmou ou configurou o seu "
"Este usuario non permite acenos ou aínda non confirmou ou configurou o seu "
"enderezo de correo electrónico."
#: actions/nudge.php:94
@ -2580,8 +2594,8 @@ msgid "Only %s URLs over plain HTTP please."
msgstr "Só %s enderezos URL sobre HTTP simple."
#. TRANS: Client error on an API request with an unsupported data format.
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1179
#: lib/apiaction.php:1208 lib/apiaction.php:1325
#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
#: lib/apiaction.php:1232 lib/apiaction.php:1355
msgid "Not a supported data format."
msgstr "Non se soporta ese formato de datos."
@ -3506,7 +3520,7 @@ msgstr "Non pode repetir a súa propia nota."
msgid "You already repeated that notice."
msgstr "Xa repetiu esa nota."
#: actions/repeat.php:114 lib/noticelist.php:667
#: actions/repeat.php:114 lib/noticelist.php:675
msgid "Repeated"
msgstr "Repetida"
@ -3541,10 +3555,10 @@ msgid "Replies feed for %s (Atom)"
msgstr "Fonte de novas coas respostas a %s (Atom)"
#: actions/replies.php:199
#, php-format
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
"notice to them yet."
msgstr ""
"Esta é a liña do tempo coas respostas a %1$s, pero a %2$s aínda non lle "
"mandaron ningunha nota."
@ -3559,10 +3573,10 @@ msgstr ""
"grupos](%%action.groups%%)."
#: actions/replies.php:206
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Pode probar a [facerlle un aceno a %1$s](../%2$s) ou [publicar algo dirixido "
"a el ou ela](%%%%action.newnotice%%%%?status_textarea=%3$s)."
@ -3653,7 +3667,7 @@ msgstr "Organización"
msgid "Description"
msgstr "Descrición"
#: actions/showapplication.php:192 actions/showgroup.php:444
#: actions/showapplication.php:192 actions/showgroup.php:436
#: lib/profileaction.php:187
msgid "Statistics"
msgstr "Estatísticas"
@ -3744,8 +3758,8 @@ msgstr ""
#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s aínda non marcou ningunha nota como favorita. Publique algo interesante "
"que poida querer engadir aos seus favoritos :)"
@ -3753,9 +3767,9 @@ msgstr ""
#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favorites :)"
"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
"action.register%%%%) and then post something interesting they would add to "
"their favorites :)"
msgstr ""
"%s aínda non marcou ningunha nota como favorita. Por que non [rexistrar unha "
"conta](%%%%action.register%%%%) e publicar algo interesante que puidese "
@ -3817,7 +3831,7 @@ msgstr "Fonte de novas das notas do grupo %s (Atom)"
msgid "FOAF for %s group"
msgstr "Amigo dun amigo para o grupo %s"
#: actions/showgroup.php:393 actions/showgroup.php:453 lib/groupnav.php:91
#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
@ -3831,11 +3845,11 @@ msgstr "(Ningún)"
msgid "All members"
msgstr "Todos os membros"
#: actions/showgroup.php:447
#: actions/showgroup.php:439
msgid "Created"
msgstr "Creado"
#: actions/showgroup.php:463
#: actions/showgroup.php:455
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3851,7 +3865,7 @@ msgstr ""
"[Únase agora](%%%%action.register%%%%) para pasar a formar parte deste grupo "
"e de moitos máis! ([Máis información](%%%%doc.help%%%%))"
#: actions/showgroup.php:469
#: actions/showgroup.php:461
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@ -3864,7 +3878,7 @@ msgstr ""
"baseado na ferramenta de software libre [StatusNet](http://status.net/). Os "
"seus membros comparten mensaxes curtas sobre as súas vidas e intereses. "
#: actions/showgroup.php:497
#: actions/showgroup.php:489
msgid "Admins"
msgstr "Administradores"
@ -3939,10 +3953,10 @@ msgstr ""
"bo momento para comezar :)"
#: actions/showstream.php:207
#, php-format
#, fuzzy, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
"Pode probar a facerlle un aceno a %1$s ou [publicar algo dirixido a el ou "
"ela](%%%%action.newnotice%%%%?status_textarea=%2$s)."
@ -4335,7 +4349,8 @@ msgstr "Gardar a configuración das instantáneas"
msgid "You are not subscribed to that profile."
msgstr "Non está subscrito a ese perfil."
#: actions/subedit.php:83 classes/Subscription.php:132
#. TRANS: Exception thrown when a subscription could not be stored on the server.
#: actions/subedit.php:83 classes/Subscription.php:136
msgid "Could not save subscription."
msgstr "Non se puido gardar a subscrición."
@ -4514,10 +4529,6 @@ msgstr ""
msgid "No such tag."
msgstr "Esa etiqueta non existe."
#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Método API en desenvolvemento."
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "Non bloqueou a ese usuario."
@ -4828,81 +4839,129 @@ msgstr "Versión"
msgid "Author(s)"
msgstr "Autores"
#: classes/File.php:185
#. TRANS: Server exception thrown when a URL cannot be processed.
#: classes/File.php:143
#, php-format
msgid "Cannot process URL '%s'"
msgstr ""
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
"No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
"Try to upload a smaller version."
msgstr ""
"Ningún ficheiro pode superar os %d bytes e o que enviou ocupaba %d. Probe a "
"subir un ficheiro máis pequeno."
"Ningún ficheiro pode superar os %1$d bytes e o que enviou ocupaba %2$d. "
"Probe a subir un ficheiro máis pequeno."
#: classes/File.php:195
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
#: classes/File.php:202
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"Un ficheiro deste tamaño excedería a súa cota de usuario, que é de %d bytes."
#: classes/File.php:202
#. TRANS: Message given id an upload would exceed a user's monthly quota.
#. TRANS: $d (number) is the monthly user quota in bytes.
#: classes/File.php:211
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Un ficheiro deste tamaño excedería a súa cota mensual de %d bytes."
#: classes/Group_member.php:41
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Tamaño non válido."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
msgid "Group join failed."
msgstr "Non se puido unir ao grupo."
#: classes/Group_member.php:53
#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
#: classes/Group_member.php:55
msgid "Not part of group."
msgstr "Non forma parte do grupo."
#: classes/Group_member.php:60
#. TRANS: Exception thrown when trying to leave a group fails.
#: classes/Group_member.php:63
msgid "Group leave failed."
msgstr "Non se puido deixar o grupo."
#: classes/Local_group.php:41
#. TRANS: Server exception thrown when updating a local group fails.
#: classes/Local_group.php:42
msgid "Could not update local group."
msgstr "Non se puido actualizar o grupo local."
#: classes/Login_token.php:76
#. TRANS: Exception thrown when trying creating a login token failed.
#. TRANS: %s is the user nickname for which token creation failed.
#: classes/Login_token.php:78
#, php-format
msgid "Could not create login token for %s"
msgstr "Non se puido crear un pase de sesión para %s"
#: classes/Message.php:45
#. TRANS: Exception thrown when database name or Data Source Name could not be found.
#: classes/Memcached_DataObject.php:533
msgid "No database name or DSN found anywhere."
msgstr ""
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
msgid "You are banned from sending direct messages."
msgstr "Prohibíuselle enviar mensaxes directas de momento."
#: classes/Message.php:61
#. TRANS: Message given when a message could not be stored on the server.
#: classes/Message.php:63
msgid "Could not insert message."
msgstr "Non se puido inserir a mensaxe."
#: classes/Message.php:71
#. TRANS: Message given when a message could not be updated on the server.
#: classes/Message.php:74
msgid "Could not update message with new URI."
msgstr "Non se puido actualizar a mensaxe co novo URI."
#. TRANS: Server exception thrown when a user profile for a notice cannot be found.
#. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
#: classes/Notice.php:98
#, fuzzy, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr "Non existe tal perfil (%d) para a nota (%d)"
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:182
#: classes/Notice.php:190
#, php-format
msgid "Database error inserting hashtag: %s"
msgstr "Houbo un erro na base de datos ao intentar inserir a etiqueta: %s"
#: classes/Notice.php:251
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr "Houbo un problema ao gardar a nota. É longa de máis."
#: classes/Notice.php:255
#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
#: classes/Notice.php:265
msgid "Problem saving notice. Unknown user."
msgstr "Houbo un problema ao gardar a nota. Descoñécese o usuario."
#: classes/Notice.php:260
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Escribiu demasiadas notas en moi pouco tempo. Tómese un respiro e volva "
"publicar nuns minutos."
#: classes/Notice.php:266
#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
#: classes/Notice.php:278
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@ -4910,71 +4969,121 @@ msgstr ""
"Repetiu demasiadas mensaxes en moi pouco tempo. Tómese un respiro e volva "
"publicar nuns minutos."
#: classes/Notice.php:272
#. TRANS: Client exception thrown when a user tries to post while being banned.
#: classes/Notice.php:286
msgid "You are banned from posting notices on this site."
msgstr "Prohibíuselle publicar notas neste sitio de momento."
#: classes/Notice.php:338 classes/Notice.php:364
#. TRANS: Server exception thrown when a notice cannot be saved.
#. TRANS: Server exception thrown when a notice cannot be updated.
#: classes/Notice.php:353 classes/Notice.php:380
msgid "Problem saving notice."
msgstr "Houbo un problema ao gardar a nota."
#: classes/Notice.php:973
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
msgid "Problem saving group inbox."
msgstr "Houbo un problema ao gardar a caixa de entrada do grupo."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1564
#: classes/Notice.php:1614
#, php-format
msgid "RT @%1$s %2$s"
msgstr "♻ @%1$s %2$s"
#: classes/Subscription.php:74 lib/oauthstore.php:465
#. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:740
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
#. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
#. TRANS: %1$s is the role name, %2$s is the user ID (number).
#: classes/Profile.php:749
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "O usuario non ten perfil."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
msgid "Unable to save tag."
msgstr "Non se puido gardar a nota do sitio."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
msgstr "Prohibíuselle realizar subscricións de momento."
#: classes/Subscription.php:78
#. TRANS: Exception thrown when trying to subscribe while already subscribed.
#: classes/Subscription.php:80
msgid "Already subscribed!"
msgstr "Xa está subscrito!"
#: classes/Subscription.php:82
#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
#: classes/Subscription.php:85
msgid "User has blocked you."
msgstr "O usuario bloqueouno."
#: classes/Subscription.php:167
#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
#: classes/Subscription.php:171
msgid "Not subscribed!"
msgstr "Non está subscrito!"
#: classes/Subscription.php:173
msgid "Couldn't delete self-subscription."
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Could not delete self-subscription."
msgstr "Non se puido borrar a subscrición a si mesmo."
#: classes/Subscription.php:200
msgid "Couldn't delete subscription OMB token."
#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
#: classes/Subscription.php:206
#, fuzzy
msgid "Could not delete subscription OMB token."
msgstr "Non se puido borrar o pase de subscrición OMB."
#: classes/Subscription.php:211
msgid "Couldn't delete subscription."
#. TRANS: Exception thrown when a subscription could not be deleted on the server.
#: classes/Subscription.php:218
#, fuzzy
msgid "Could not delete subscription."
msgstr "Non se puido borrar a subscrición."
#: classes/User.php:363
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
#: classes/User.php:365
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Benvido a %1$s, @%2$s!"
#: classes/User_group.php:480
#. TRANS: Server exception thrown when creating a group failed.
#: classes/User_group.php:496
msgid "Could not create group."
msgstr "Non se puido crear o grupo."
#: classes/User_group.php:489
#. TRANS: Server exception thrown when updating a group URI failed.
#: classes/User_group.php:506
msgid "Could not set group URI."
msgstr "Non se puido establecer o URI do grupo."
#: classes/User_group.php:510
#. TRANS: Server exception thrown when setting group membership failed.
#: classes/User_group.php:529
msgid "Could not set group membership."
msgstr "Non se puido establecer a pertenza ao grupo."
#: classes/User_group.php:524
#. TRANS: Server exception thrown when saving local group information failed.
#: classes/User_group.php:544
msgid "Could not save local group info."
msgstr "Non se puido gardar a información do grupo local."
@ -6447,7 +6556,7 @@ msgstr ""
"Non ten mensaxes privadas. Pode enviar mensaxes privadas para conversar con "
"outros usuarios. A xente pode enviarlle mensaxes para que só as lea vostede."
#: lib/mailbox.php:227 lib/noticelist.php:497
#: lib/mailbox.php:227 lib/noticelist.php:505
msgid "from"
msgstr "de"
@ -6505,24 +6614,24 @@ msgstr "Non se puido escribir o ficheiro no disco."
msgid "File upload stopped by extension."
msgstr "Interrompeuse a carga do ficheiro por mor da extensión."
#: lib/mediafile.php:179 lib/mediafile.php:216
#: lib/mediafile.php:179 lib/mediafile.php:217
msgid "File exceeds user's quota."
msgstr "O ficheiro supera a cota do usuario."
#: lib/mediafile.php:196 lib/mediafile.php:233
#: lib/mediafile.php:197 lib/mediafile.php:234
msgid "File could not be moved to destination directory."
msgstr "Non se puido mover o ficheiro ao directorio de destino."
#: lib/mediafile.php:201 lib/mediafile.php:237
#: lib/mediafile.php:202 lib/mediafile.php:238
msgid "Could not determine file's MIME type."
msgstr "Non se puido determinar o tipo MIME do ficheiro."
#: lib/mediafile.php:270
#: lib/mediafile.php:318
#, php-format
msgid " Try using another %s format."
msgstr "Inténteo utilizando outro formato %s."
#: lib/mediafile.php:275
#: lib/mediafile.php:323
#, php-format
msgid "%s is not a supported file type on this server."
msgstr "Neste servidor non se soporta o tipo de ficheiro %s."
@ -6578,51 +6687,51 @@ msgstr ""
"intentar máis tarde"
#. TRANS: Used in coordinates as abbreviation of north
#: lib/noticelist.php:430
#: lib/noticelist.php:436
msgid "N"
msgstr "N"
#. TRANS: Used in coordinates as abbreviation of south
#: lib/noticelist.php:432
#: lib/noticelist.php:438
msgid "S"
msgstr "S"
#. TRANS: Used in coordinates as abbreviation of east
#: lib/noticelist.php:434
#: lib/noticelist.php:440
msgid "E"
msgstr "L"
#. TRANS: Used in coordinates as abbreviation of west
#: lib/noticelist.php:436
#: lib/noticelist.php:442
msgid "W"
msgstr "O"
#: lib/noticelist.php:438
#: lib/noticelist.php:444
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
#: lib/noticelist.php:447
#: lib/noticelist.php:453
msgid "at"
msgstr "en"
#: lib/noticelist.php:559
#: lib/noticelist.php:567
msgid "in context"
msgstr "no contexto"
#: lib/noticelist.php:594
#: lib/noticelist.php:602
msgid "Repeated by"
msgstr "Repetida por"
#: lib/noticelist.php:621
#: lib/noticelist.php:629
msgid "Reply to this notice"
msgstr "Responder a esta nota"
#: lib/noticelist.php:622
#: lib/noticelist.php:630
msgid "Reply"
msgstr "Responder"
#: lib/noticelist.php:666
#: lib/noticelist.php:674
msgid "Notice repeated"
msgstr "Repetiuse a nota"
@ -6882,8 +6991,8 @@ msgstr ""
"formato ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
msgid "Theme upload missing or failed."
msgstr "Houbo un erro no sistema ao cargar o tema visual."
msgid "The theme file is missing or the upload failed."
msgstr "O ficheiro do tema visual non existe ou a subida fallou."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257

Some files were not shown because too many files have changed in this diff Show More