Merge remote branch 'statusnet/1.0.x' into msn-plugin

This commit is contained in:
Luke Fitzgerald 2010-08-10 19:48:18 -07:00
commit b7a07f0baa
58 changed files with 1630 additions and 352 deletions

View File

@ -464,11 +464,9 @@ class Profile extends Memcached_DataObject
$sub = new Subscription();
$sub->subscribed = $this->id;
$sub->whereAdd('subscriber != subscribed');
$cnt = (int) $sub->count('distinct subscriber');
$cnt = ($cnt > 0) ? $cnt - 1 : $cnt;
if (!empty($c)) {
$c->set(common_cache_key('profile:subscriber_count:'.$this->id), $cnt);
}

View File

@ -321,6 +321,7 @@ $default =
'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')
array('ssl_cafile' => false, // To enable SSL cert validation, point to a CA bundle (eg '/usr/lib/ssl/certs/ca-certificates.crt')
'curl' => false, // Use CURL backend for HTTP fetches if available. (If not, PHP's socket streams will be used.)
),
);

View File

@ -145,6 +145,10 @@ class HTTPClient extends HTTP_Request2
$this->config['ssl_verify_peer'] = false;
}
if (common_config('http', 'curl') && extension_loaded('curl')) {
$this->config['adapter'] = 'HTTP_Request2_Adapter_Curl';
}
parent::__construct($url, $method, $config);
$this->setHeader('User-Agent', $this->userAgent());
}
@ -204,6 +208,15 @@ class HTTPClient extends HTTP_Request2
protected function doRequest($url, $method, $headers)
{
$this->setUrl($url);
// Workaround for HTTP_Request2 not setting up SNI in socket contexts;
// This fixes cert validation for SSL virtual hosts using SNI.
// Requires PHP 5.3.2 or later and OpenSSL with SNI support.
if ($this->url->getScheme() == 'https' && defined('OPENSSL_TLSEXT_SERVER_NAME')) {
$this->config['ssl_SNI_enabled'] = true;
$this->config['ssl_SNI_server_name'] = $this->url->getHost();
}
$this->setMethod($method);
if ($headers) {
foreach ($headers as $header) {

View File

@ -224,6 +224,7 @@ class MailboxAction extends CurrentUserDesignAction
if ($message->source) {
$this->elementStart('span', 'source');
// FIXME: bad i18n. Device should be a parameter (from %s).
$this->text(_('from'));
$this->element('span', 'device', $this->showSource($message->source));
$this->elementEnd('span');

View File

@ -499,9 +499,10 @@ class NoticeListItem extends Widget
$ns = $this->notice->getSource();
if ($ns) {
$source_name = _($ns->code);
$source_name = (empty($ns->name)) ? _($ns->code) : _($ns->name);
$this->out->text(' ');
$this->out->elementStart('span', 'source');
// FIXME: probably i18n issue. If "from" is followed by text, that should be a parameter to "from" (from %s).
$this->out->text(_('from'));
$this->out->text(' ');

View File

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:38+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:23:59+0000\n"
"Language-Team: Afrikaans\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4726,21 +4726,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:39+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:01+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4740,21 +4740,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تي @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:41+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:02+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 (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4768,21 +4768,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تى @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:42+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:08+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4920,21 +4920,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:44+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:10+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -354,9 +354,8 @@ msgid "Could not delete favorite."
msgstr "Diposupl eo dilemel ar pennroll-mañ."
#: actions/apifriendshipscreate.php:109
#, fuzzy
msgid "Could not follow user: profile not found."
msgstr "Diposupl eo heuliañ an implijer : N'eo ket bet kavet an implijer."
msgstr "Dibosupl eo heuliañ an implijer : n'eo ket bet kavet ar profil."
#: actions/apifriendshipscreate.php:118
#, php-format
@ -503,9 +502,8 @@ msgid "groups on %s"
msgstr "strolladoù war %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "C'hwitet en deus an urzhiad"
msgstr "Enporzhiadenn c'hwitet."
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
@ -720,7 +718,7 @@ msgstr "Hizivadennoù merket gant %1$s e %2$s !"
#: actions/apitrends.php:87
msgid "API method under construction."
msgstr ""
msgstr "Hentenn API war sevel."
#: actions/attachment.php:73
msgid "No such attachment."
@ -756,7 +754,7 @@ msgstr ""
#: actions/grouplogo.php:181 actions/remotesubscribe.php:191
#: actions/userauthorization.php:72 actions/userrss.php:108
msgid "User without matching profile."
msgstr ""
msgstr "Implijer hep profil klotus."
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
#: actions/grouplogo.php:254
@ -2782,6 +2780,9 @@ msgid ""
"Search for people on %%site.name%% by their name, location, or interests. "
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
"Klask tud e %%site.name%% dre o anv, o lec'hiadur pe o diduadennoù. "
"Dispartiañ termenoù ar c'hlask gant esaouennoù. Ret eo e vefe da nebeutañ 3 "
"arouezenn."
#: actions/peoplesearch.php:58
msgid "People search"
@ -3233,6 +3234,8 @@ msgstr "Postel"
#: actions/register.php:446 actions/register.php:450
msgid "Used only for updates, announcements, and password recovery"
msgstr ""
"Implijet hepken evit an hizivadennoù, ar c'hemennoù, pe adtapout gerioù-"
"tremen"
#: actions/register.php:457
msgid "Longer name, preferably your \"real\" name"
@ -3242,22 +3245,22 @@ msgstr "Anv hiroc'h, ho anv \"gwir\" a zo gwelloc'h"
#, php-format
msgid ""
"I understand that content and data of %1$s are private and confidential."
msgstr ""
msgstr "Kompren a ran ez eo prevez danvez ha roadennoù %1$s."
#: actions/register.php:528
#, php-format
msgid "My text and files are copyright by %1$s."
msgstr ""
msgstr "Ma zestenn ha ma restroù a zo gwarezet dre copyright gant %1$s."
#. TRANS: Copyright checkbox label in registration dialog, for all rights reserved with ownership left to contributors.
#: actions/register.php:532
msgid "My text and files remain under my own copyright."
msgstr ""
msgstr "Ma zestenn ha ma restroù a chom dindan ma gwirioù oberour."
#. TRANS: Copyright checkbox label in registration dialog, for all rights reserved.
#: actions/register.php:535
msgid "All rights reserved."
msgstr ""
msgstr "Holl gwrioù miret strizh."
#. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
#: actions/register.php:540
@ -4702,12 +4705,12 @@ msgstr ""
#. TRANS: Client exception thrown if a notice contains too many characters.
#: classes/Notice.php:260
msgid "Problem saving notice. Too long."
msgstr ""
msgstr "Ur gudenn a zo bet e-pad enrolladenn ar c'hemenn. Re hir."
#. 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 ""
msgstr "Ur gudenn a zo bet e-pad enrolladenn ar c'hemenn. Implijer dianav."
#. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
#: classes/Notice.php:271
@ -4745,36 +4748,34 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, 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ñ."
msgstr "Mankout a ra ar profil."
#. 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."
msgstr "Dibosupl eo enrollañ an tikedenn."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
@ -4810,9 +4811,8 @@ 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."
msgstr "Dibosupl eo dilemel ar c'houmanant."
#. TRANS: Notice given on user registration.
#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@ -5558,7 +5558,7 @@ msgstr ""
#: lib/command.php:634
#, php-format
msgid "Subscribed to %s"
msgstr ""
msgstr "Koumanantet da %s"
#: lib/command.php:655 lib/command.php:754
msgid "Specify the name of the user to unsubscribe from"
@ -5567,7 +5567,7 @@ msgstr ""
#: lib/command.php:664
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
msgstr "Digoumanantiñ da %s"
#: lib/command.php:682 lib/command.php:705
msgid "Command not yet implemented."
@ -5579,7 +5579,7 @@ msgstr "Kemennoù diweredekaet."
#: lib/command.php:687
msgid "Can't turn off notification."
msgstr ""
msgstr "Dibosupl eo diweredekaat ar c'hemennoù."
#: lib/command.php:708
msgid "Notification on."
@ -5587,7 +5587,7 @@ msgstr "Kemennoù gweredekaet"
#: lib/command.php:710
msgid "Can't turn on notification."
msgstr ""
msgstr "Dibosupl eo gweredekaat ar c'hemennoù."
#: lib/command.php:723
msgid "Login command is disabled"
@ -5596,7 +5596,7 @@ msgstr "Diweredekaet eo an urzhiad evit digeriñ un dalc'h"
#: lib/command.php:734
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
msgstr "Implijadus eo al liamm-se ur wech hepken, hag e-pad 2 vunutenn : %s"
#: lib/command.php:761
#, php-format
@ -5605,7 +5605,7 @@ msgstr "Digoumanantet eus %s"
#: lib/command.php:778
msgid "You are not subscribed to anyone."
msgstr ""
msgstr "N'hoc'h ket koumanantet da zen ebet."
#: lib/command.php:780
#, fuzzy
@ -5616,7 +5616,7 @@ msgstr[1] "You are subscribed to these people:"
#: lib/command.php:800
msgid "No one is subscribed to you."
msgstr ""
msgstr "Den n'eo koumanantet deoc'h."
#: lib/command.php:802
#, fuzzy
@ -5680,7 +5680,7 @@ msgstr ""
#: lib/common.php:135
msgid "No configuration file found. "
msgstr ""
msgstr "N'eo bet kavet restr kefluniadur ebet. "
#: lib/common.php:136
msgid "I looked for configuration files in the following places: "
@ -5716,11 +5716,11 @@ msgstr ""
#: lib/dberroraction.php:60
msgid "Database error"
msgstr ""
msgstr "Fazi bank roadennoù"
#: lib/designsettings.php:105
msgid "Upload file"
msgstr ""
msgstr "Enporzhiañ ar restr"
#: lib/designsettings.php:109
msgid ""
@ -5733,15 +5733,15 @@ msgstr ""
#: lib/disfavorform.php:114 lib/disfavorform.php:140
msgid "Disfavor this notice"
msgstr ""
msgstr "Tennañ eus ar pennrolloù"
#: lib/favorform.php:114 lib/favorform.php:140
msgid "Favor this notice"
msgstr ""
msgstr "Ouzhpennañ d'ar pennrolloù"
#: lib/favorform.php:140
msgid "Favor"
msgstr ""
msgstr "Pennrolloù"
#: lib/feed.php:85
msgid "RSS 1.0"

View File

@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:45+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:12+0000\n"
"Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4992,21 +4992,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:47+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:14+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4954,21 +4954,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:48+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:15+0000\n"
"Language-Team: Danish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: da\n"
"X-Message-Group: out-statusnet\n"
@ -4728,21 +4728,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -16,12 +16,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:49+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:17+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -5003,14 +5003,14 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
@ -5019,7 +5019,7 @@ 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:51+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:18+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4879,21 +4879,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:52+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:20+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 (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4894,21 +4894,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -15,12 +15,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:54+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:22+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4990,21 +4990,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:57+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:25+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 (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
#. TRANS: Page title
@ -4934,21 +4934,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:55+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:23+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -5057,21 +5057,21 @@ 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:1614
#: classes/Notice.php:1745
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -15,12 +15,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:21:58+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:27+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -4940,7 +4940,7 @@ msgstr "Impossible de créer le jeton didentification pour %s"
#. 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."
msgstr "Aucun nom de base de données ou DSN trouvé 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
@ -5020,14 +5020,14 @@ msgstr "Problème lors de lenregistrement de la boîte de réception du group
#. 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
@ -5036,7 +5036,7 @@ 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:00+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:29+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -5114,21 +5114,21 @@ 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:1614
#: classes/Notice.php:1745
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:01+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:30+0000\n"
"Language-Team: Galician\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); 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"
@ -166,7 +166,7 @@ msgstr ""
#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
#: actions/all.php:146
#, fuzzy, php-format
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
@ -176,7 +176,7 @@ msgstr ""
"status_textarea=%3$s)."
#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
#, fuzzy, php-format
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to them."
@ -512,9 +512,8 @@ msgid "groups on %s"
msgstr "grupos en %s"
#: actions/apimediaupload.php:99
#, fuzzy
msgid "Upload failed."
msgstr "Cargar un ficheiro"
msgstr "Houbo un erro durante a carga."
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
@ -663,7 +662,7 @@ msgstr "Non se atopou ningún estado con esa ID."
#: actions/apistatusesupdate.php:221
msgid "Client must provide a 'status' parameter with a value."
msgstr ""
msgstr "O cliente debe proporcionar un parámetro de \"estado\" cun valor."
#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
#: lib/mailhandler.php:60
@ -3555,7 +3554,7 @@ msgid "Replies feed for %s (Atom)"
msgstr "Fonte de novas coas respostas a %s (Atom)"
#: actions/replies.php:199
#, fuzzy, php-format
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to them yet."
@ -3573,7 +3572,7 @@ msgstr ""
"grupos](%%action.groups%%)."
#: actions/replies.php:206
#, fuzzy, php-format
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
"newnotice%%%%?status_textarea=%3$s)."
@ -3953,7 +3952,7 @@ msgstr ""
"bo momento para comezar :)"
#: actions/showstream.php:207
#, fuzzy, php-format
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
@ -4843,12 +4842,12 @@ msgstr "Autores"
#: classes/File.php:143
#, php-format
msgid "Cannot process URL '%s'"
msgstr ""
msgstr "Non se pode procesar o URL \"%s\""
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
msgstr "Robin pensa que algo é imposible."
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
@ -4878,9 +4877,8 @@ msgstr "Un ficheiro deste tamaño excedería a súa cota mensual de %d bytes."
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Tamaño non válido."
msgstr "Nome de ficheiro incorrecto."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
@ -4912,7 +4910,7 @@ msgstr "Non se puido crear un pase de sesión para %s"
#. 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 ""
msgstr "Non se atopou por ningures o nome da base de datos ou DSN."
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
@ -4932,9 +4930,9 @@ 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
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr "Non existe tal perfil (%d) para a nota (%d)"
msgstr "Non existe tal perfil (%1$d) para a nota (%2$d)."
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:190
@ -4983,7 +4981,7 @@ msgstr "Houbo un problema ao gardar a nota."
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
msgstr "O tipo dado para saveKnownGroups era incorrecto"
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
@ -4992,30 +4990,31 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "♻ @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
"Non se pode revogar o rol \"%1$s\" do usuario #%2$d: o usuario non 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
"Non se pode revogar o rol \"%1$s\" do usuario #%2$d: erro na base de datos."
#. 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."
msgstr "Falta o perfil de usuario."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
@ -5044,19 +5043,16 @@ msgstr "Non está subscrito!"
#. 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."
#. 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."
#. 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."

View File

@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:03+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:32+0000\n"
"Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n"
@ -4957,21 +4957,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:04+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:33+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: hsb\n"
"X-Message-Group: out-statusnet\n"
@ -4705,21 +4705,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:07+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:35+0000\n"
"Language-Team: Interlingua\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: out-statusnet\n"
@ -3734,24 +3734,24 @@ msgstr ""
"mitter los in evidentia."
#: actions/showfavorites.php:208
#, fuzzy, php-format
#, php-format
msgid ""
"%s hasn't added any favorite notices yet. Post something interesting they "
"would add to their favorites :)"
msgstr ""
"%s non ha ancora addite alcun nota a su favorites. Publica alique "
"interessante que ille favoritisarea :)"
"%s non ha ancora addite un nota favorite. Publica alique interessante que "
"ille adderea a su favorites :)"
#: actions/showfavorites.php:212
#, fuzzy, php-format
#, php-format
msgid ""
"%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 non ha ancora addite alcun nota a su favorites. Proque non [registrar un "
"conto](%%%%action.register%%%%) e postea publicar alique interessante que "
"ille favoritisarea :)"
"%s non ha ancora addite un nota favorite. Proque non [crear un conto](%%%%"
"action.register%%%%) e postea publicar alique interessante que ille adderea "
"a su favorites :)"
#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
@ -3931,13 +3931,13 @@ msgstr ""
"alcun nota, dunque iste es un bon momento pro comenciar :)"
#: actions/showstream.php:207
#, fuzzy, php-format
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
msgstr ""
"Tu pote tentar pulsar %1$s o [publicar un nota a su attention](%%%%action."
"newnotice%%%%?status_textarea=%2$s)."
"Tu pote tentar dar un pulsata a %1$s o [publicar un nota a su attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
#: actions/showstream.php:243
#, php-format
@ -4817,23 +4817,23 @@ msgstr "Autor(es)"
#: classes/File.php:143
#, php-format
msgid "Cannot process URL '%s'"
msgstr ""
msgstr "Impossibile processar le URL '%s'"
#. TRANS: Server exception thrown when... Robin thinks something is impossible!
#: classes/File.php:175
msgid "Robin thinks something is impossible."
msgstr ""
msgstr "Robin pensa que alique es impossibile."
#. TRANS: Message given if an upload is larger than the configured maximum.
#. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
#: classes/File.php:190
#, fuzzy, php-format
#, 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 ""
"Nulle file pote esser plus grande que %d bytes e le file que tu inviava ha %"
"d bytes. Tenta incargar un version minus grande."
"Nulle file pote esser plus grande que %1$d bytes e le file que tu inviava ha "
"%2$d bytes. Tenta incargar un version minus grande."
#. TRANS: Message given if an upload would exceed user quota.
#. TRANS: %d (number) is the user quota in bytes.
@ -4851,9 +4851,8 @@ msgstr "Un file de iste dimension excederea tu quota mensual de %d bytes."
#. TRANS: Client exception thrown if a file upload does not have a valid name.
#: classes/File.php:248 classes/File.php:263
#, fuzzy
msgid "Invalid filename."
msgstr "Dimension invalide."
msgstr "Nomine de file invalide."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
@ -4885,7 +4884,7 @@ msgstr "Non poteva crear indicio de identification pro %s"
#. 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 ""
msgstr "Nulle nomine de base de datos o DSN trovate."
#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
#: classes/Message.php:46
@ -4907,7 +4906,7 @@ msgstr "Non poteva actualisar message con nove URI."
#: classes/Notice.php:98
#, php-format
msgid "No such profile (%1$d) for notice (%2$d)."
msgstr ""
msgstr "Nulle profilo (%1$d) trovate pro le nota (%2$d)."
#. TRANS: Server exception. %s are the error details.
#: classes/Notice.php:190
@ -4956,7 +4955,7 @@ msgstr "Problema salveguardar nota."
#. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
#: classes/Notice.php:892
msgid "Bad type provided to saveKnownGroups"
msgstr ""
msgstr "Mal typo fornite a saveKnownGroups"
#. TRANS: Server exception thrown when an update for a group inbox fails.
#: classes/Notice.php:991
@ -4965,36 +4964,36 @@ msgstr "Problema salveguardar le cassa de entrata del gruppo."
#. 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
msgstr "Non pote revocar le rolo \"%1$s\" del usator #%2$d; non 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
"Non pote revocar le rolo \"%1$s\" del usator #%2$d; error in le base de "
"datos."
#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
#: classes/Remote_profile.php:54
#, fuzzy
msgid "Missing profile."
msgstr "Le usator non ha un profilo."
msgstr "Profilo mancante."
#. TRANS: Exception thrown when a tag cannot be saved.
#: classes/Status_network.php:346
#, fuzzy
msgid "Unable to save tag."
msgstr "Impossibile salveguardar le aviso del sito."
msgstr "Impossibile salveguardar le etiquetta."
#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
#: classes/Subscription.php:75 lib/oauthstore.php:465
@ -5018,19 +5017,16 @@ msgstr "Non subscribite!"
#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
#: classes/Subscription.php:178
#, fuzzy
msgid "Could not delete self-subscription."
msgstr "Non poteva deler auto-subscription."
#. 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 poteva deler le indicio OMB del 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 poteva deler subscription."

View File

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:08+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:37+0000\n"
"Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: is\n"
"X-Message-Group: out-statusnet\n"
@ -5009,21 +5009,21 @@ msgstr "Vandamál komu upp við að vista babl."
#. 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:1614
#: classes/Notice.php:1745
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:10+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:38+0000\n"
"Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n"
"X-Message-Group: out-statusnet\n"
@ -4968,21 +4968,21 @@ msgstr "Problema nel salvare la casella della posta del gruppo."
#. 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:11+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:41+0000\n"
"Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ja\n"
"X-Message-Group: out-statusnet\n"
@ -5001,21 +5001,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:13+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:43+0000\n"
"Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n"
@ -4982,21 +4982,21 @@ 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:1614
#: classes/Notice.php:1745
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:14+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:45+0000\n"
"Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: out-statusnet\n"
@ -4983,14 +4983,14 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
@ -4999,7 +4999,7 @@ 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:16+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:47+0000\n"
"Language-Team: Norwegian (bokmål)\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n"
@ -4895,21 +4895,21 @@ msgstr "Problem ved lagring av gruppeinnboks."
#. 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:19+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:50+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: out-statusnet\n"
@ -4907,7 +4907,7 @@ msgstr ""
#. 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 "Ongeldig bestandsnaam."
msgstr "Ongeldige bestandsnaam."
#. TRANS: Exception thrown when joining a group fails.
#: classes/Group_member.php:42
@ -5026,14 +5026,14 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
@ -5042,7 +5042,7 @@ 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:17+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:48+0000\n"
"Language-Team: Norwegian Nynorsk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n"
@ -5047,21 +5047,21 @@ msgstr "Eit problem oppstod ved lagring av notis."
#. 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:1614
#: classes/Notice.php:1745
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:20+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:52+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
@ -20,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pl\n"
"X-Message-Group: out-statusnet\n"
@ -4955,21 +4955,21 @@ msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy."
#. 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr "Nie można unieważnić roli \"\"%1$s\" użytkownika #%2$d; nie istnieje."
#. 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:22+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:54+0000\n"
"Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: out-statusnet\n"
@ -4959,14 +4959,14 @@ msgstr "Problema na gravação da 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
@ -4974,7 +4974,7 @@ 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -13,12 +13,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:23+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:55+0000\n"
"Language-Team: Brazilian Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: out-statusnet\n"
@ -4995,21 +4995,21 @@ msgstr "Problema no salvamento das mensagens recebidas 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -12,12 +12,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:25+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:57+0000\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: out-statusnet\n"
@ -4971,14 +4971,14 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr ""
@ -4987,7 +4987,7 @@ 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -4679,21 +4679,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:26+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:24:59+0000\n"
"Language-Team: Swedish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: sv\n"
"X-Message-Group: out-statusnet\n"
@ -4957,21 +4957,21 @@ msgstr "Problem med att spara gruppinkorg."
#. 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:28+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:25:01+0000\n"
"Language-Team: Telugu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: te\n"
"X-Message-Group: out-statusnet\n"
@ -4842,21 +4842,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:29+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:25:03+0000\n"
"Language-Team: Turkish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tr\n"
"X-Message-Group: out-statusnet\n"
@ -4960,21 +4960,21 @@ msgstr "Durum mesajını kaydederken hata oluştu."
#. 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:31+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:25:05+0000\n"
"Language-Team: Ukrainian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: out-statusnet\n"
@ -4960,21 +4960,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
#. 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
#: classes/Profile.php:737
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
msgstr "Не вдалося скасувати роль «%s» для користувача #%2$s; не існує."
#. 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""
@ -6210,17 +6210,17 @@ msgid ""
"Thanks for your time, \n"
"%s\n"
msgstr ""
"Агов, %s.\n"
"Агов, %s!\n"
"\n"
"Хтось щойно ввів цю електронну адресу на %s.\n"
"\n"
"Якщо то були Ви, мусите це підтвердити використовуючи посилання:\n"
"Якщо то були Ви, мусите це підтвердити, використовуючи посилання:\n"
"\n"
"\t%s\n"
"%s\n"
"\n"
"А якщо ні, то просто проігноруйте це повідомлення.\n"
"А якщо ні, просто ігноруйте це повідомлення.\n"
"\n"
"Дякуємо за Ваш час \n"
"Вибачте за турботу, \n"
"%s\n"
#. TRANS: Subject of new-subscriber notification e-mail

View File

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:32+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:25:06+0000\n"
"Language-Team: Vietnamese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: vi\n"
"X-Message-Group: out-statusnet\n"
@ -5103,21 +5103,21 @@ msgstr "Có lỗi xảy ra khi lưu tin nhắn."
#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
#: classes/Notice.php:1614
#: classes/Notice.php:1745
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%s (%s)"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:34+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:25:08+0000\n"
"Language-Team: Simplified Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: out-statusnet\n"
@ -5045,21 +5045,21 @@ 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:1614
#: classes/Notice.php:1745
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-08-03 13:21+0000\n"
"PO-Revision-Date: 2010-08-03 13:22:35+0000\n"
"POT-Creation-Date: 2010-08-07 16:23+0000\n"
"PO-Revision-Date: 2010-08-07 16:25:10+0000\n"
"Language-Team: Traditional Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n"
"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hant\n"
"X-Message-Group: out-statusnet\n"
@ -4868,21 +4868,21 @@ 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:1614
#: classes/Notice.php:1745
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
#. 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
#: classes/Profile.php:737
#, 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
#: classes/Profile.php:746
#, php-format
msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
msgstr ""

View File

@ -479,6 +479,24 @@ class OStatusPlugin extends Plugin
}
}
/**
* Tell the FeedSub infrastructure whether we have any active OStatus
* usage for the feed; if not it'll be able to garbage-collect the
* feed subscription.
*
* @param FeedSub $feedsub
* @param integer $count in/out
* @return mixed hook return code
*/
function onFeedSubSubscriberCount($feedsub, &$count)
{
$oprofile = Ostatus_profile::staticGet('feeduri', $feedsub->uri);
if ($oprofile) {
$count += $oprofile->subscriberCount();
}
return true;
}
/**
* When about to subscribe to a remote user, start a server-to-server
* PuSH subscription if needed. If we can't establish that, abort.

View File

@ -255,6 +255,9 @@ class FeedSub extends Memcached_DataObject
/**
* Send a PuSH unsubscription request to the hub for this feed.
* The hub will later send us a confirmation POST to /main/push/callback.
* Warning: this will cancel the subscription even if someone else in
* the system is using it. Most callers will want garbageCollect() instead,
* which confirms there's no uses left.
*
* @return bool true on success, false on failure
* @throws ServerException if feed state is not valid
@ -275,6 +278,33 @@ class FeedSub extends Memcached_DataObject
return $this->doSubscribe('unsubscribe');
}
/**
* Check if there are any active local uses of this feed, and if not then
* make sure it's inactive, unsubscribing if necessary.
*
* @return boolean true if the subscription is now inactive, false if still active.
*/
public function garbageCollect()
{
if ($this->sub_state == '' || $this->sub_state == 'inactive') {
// No active PuSH subscription, we can just leave it be.
return true;
} else {
// PuSH subscription is either active or in an indeterminate state.
// Check if we're out of subscribers, and if so send an unsubscribe.
$count = 0;
Event::handle('FeedSubSubscriberCount', array($this, &$count));
if ($count) {
common_log(LOG_INFO, __METHOD__ . ': ok, ' . $count . ' user(s) left for ' . $this->uri);
return false;
} else {
common_log(LOG_INFO, __METHOD__ . ': unsubscribing, no users left for ' . $this->uri);
return $this->unsubscribe();
}
}
}
protected function doSubscribe($mode)
{
$orig = clone($this);

View File

@ -215,22 +215,13 @@ class Ostatus_profile extends Memcached_DataObject
}
/**
* Send a PuSH unsubscription request to the hub for this feed.
* The hub will later send us a confirmation POST to /main/push/callback.
* Check if this remote profile has any active local subscriptions, and
* if not drop the PuSH subscription feed.
*
* @return bool true on success, false on failure
* @throws ServerException if feed state is not valid
*/
public function unsubscribe() {
$feedsub = FeedSub::staticGet('uri', $this->feeduri);
if (!$feedsub || $feedsub->sub_state == '' || $feedsub->sub_state == 'inactive') {
// No active PuSH subscription, we can just leave it be.
return true;
} else {
// PuSH subscription is either active or in an indeterminate state.
// Send an unsubscribe.
return $feedsub->unsubscribe();
}
$this->garbageCollect();
}
/**
@ -240,6 +231,21 @@ class Ostatus_profile extends Memcached_DataObject
* @return boolean
*/
public function garbageCollect()
{
$feedsub = FeedSub::staticGet('uri', $this->feeduri);
return $feedsub->garbageCollect();
}
/**
* Check if this remote profile has any active local subscriptions, so the
* PuSH subscription layer can decide if it can drop the feed.
*
* This gets called via the FeedSubSubscriberCount event when running
* FeedSub::garbageCollect().
*
* @return int
*/
public function subscriberCount()
{
if ($this->isGroup()) {
$members = $this->localGroup()->getMembers(0, 1);
@ -247,13 +253,14 @@ class Ostatus_profile extends Memcached_DataObject
} else {
$count = $this->localProfile()->subscriberCount();
}
if ($count == 0) {
common_log(LOG_INFO, "Unsubscribing from now-unused remote feed $this->feeduri");
$this->unsubscribe();
return true;
} else {
return false;
}
common_log(LOG_INFO, __METHOD__ . " SUB COUNT BEFORE: $count");
// Other plugins may be piggybacking on OStatus without having
// an active group or user-to-user subscription we know about.
Event::handle('Ostatus_profileSubscriberCount', array($this, &$count));
common_log(LOG_INFO, __METHOD__ . " SUB COUNT AFTER: $count");
return $count;
}
/**

View File

@ -210,13 +210,13 @@ class MagicEnvelope
}
$data_element = $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'data')->item(0);
$sig_element = $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'sig')->item(0);
return array(
'data' => trim($data_element->nodeValue),
'data' => preg_replace('/\s/', '', $data_element->nodeValue),
'data_type' => $data_element->getAttribute('type'),
'encoding' => $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'encoding')->item(0)->nodeValue,
'alg' => $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'alg')->item(0)->nodeValue,
'sig' => $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'sig')->item(0)->nodeValue,
'sig' => preg_replace('/\s/', '', $sig_element->nodeValue),
);
}

View File

@ -0,0 +1,165 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 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/>.
*/
/**
* @package SubMirrorPlugin
* @maintainer Brion Vibber <brion@status.net>
*/
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
class SubMirrorPlugin extends Plugin
{
/**
* Hook for RouterInitialized event.
*
* @param Net_URL_Mapper $m path-to-action mapper
* @return boolean hook return
*/
function onRouterInitialized($m)
{
$m->connect('settings/mirror',
array('action' => 'mirrorsettings'));
$m->connect('settings/mirror/add',
array('action' => 'addmirror'));
$m->connect('settings/mirror/edit',
array('action' => 'editmirror'));
return true;
}
/**
* Automatically load the actions and libraries used by the plugin
*
* @param Class $cls the class
*
* @return boolean hook return
*
*/
function onAutoload($cls)
{
$base = dirname(__FILE__);
$lower = strtolower($cls);
$files = array("$base/lib/$lower.php",
"$base/classes/$cls.php");
if (substr($lower, -6) == 'action') {
$files[] = "$base/actions/" . substr($lower, 0, -6) . ".php";
}
foreach ($files as $file) {
if (file_exists($file)) {
include_once $file;
return false;
}
}
return true;
}
function handle($notice)
{
// Is anybody mirroring?
$mirror = new SubMirror();
$mirror->subscribed = $notice->profile_id;
if ($mirror->find()) {
while ($mirror->fetch()) {
$mirror->repeat($notice);
}
}
}
function onPluginVersion(&$versions)
{
$versions[] = array('name' => 'SubMirror',
'version' => STATUSNET_VERSION,
'author' => 'Brion Vibber',
'homepage' => 'http://status.net/wiki/Plugin:SubMirror',
'rawdescription' =>
_m('Pull feeds into your timeline!'));
return true;
}
/**
* Menu item for settings
*
* @param Action &$action Action being executed
*
* @return boolean hook return
*/
function onEndAccountSettingsNav(&$action)
{
$action_name = $action->trimmed('action');
$action->menuItem(common_local_url('mirrorsettings'),
// TRANS: SubMirror plugin menu item on user settings page.
_m('MENU', 'Mirroring'),
// TRANS: SubMirror plugin tooltip for user settings menu item.
_m('Configure mirroring of posts from other feeds'),
$action_name === 'mirrorsettings');
return true;
}
function onCheckSchema()
{
$schema = Schema::get();
$schema->ensureTable('submirror', SubMirror::schemaDef());
return true;
}
/**
* Set up queue handlers for outgoing hub pushes
* @param QueueManager $qm
* @return boolean hook return
*/
function onEndInitializeQueueManager(QueueManager $qm)
{
// After each notice save, check if there's any repeat mirrors.
$qm->connect('mirror', 'MirrorQueueHandler');
return true;
}
function onStartEnqueueNotice($notice, &$transports)
{
$transports[] = 'mirror';
}
/**
* Let the OStatus subscription garbage collection know if we're
* making use of a remote feed, so it doesn't get dropped out
* from under us.
*
* @param Ostatus_profile $oprofile
* @param int $count in/out
* @return mixed hook return value
*/
function onOstatus_profileSubscriberCount($oprofile, &$count)
{
if ($oprofile->profile_id) {
$mirror = new SubMirror();
$mirror->subscribed = $oprofile->profile_id;
if ($mirror->find()) {
while ($mirror->fetch()) {
$count++;
}
}
}
return true;
}
}

View File

@ -0,0 +1,77 @@
<?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/>.
*
* 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);
}
/**
* Takes parameters:
*
* - feed: a profile ID
* - 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
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
class AddMirrorAction extends BaseMirrorAction
{
var $feedurl;
/**
* 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);
$this->feedurl = $this->validateFeedUrl($this->trimmed('feedurl'));
$this->profile = $this->profileForFeed($this->feedurl);
return true;
}
function saveMirror()
{
if ($this->oprofile->subscribe()) {
SubMirror::saveMirror($this->user, $this->profile);
} else {
$this->serverError(_m("Could not subscribe to feed."));
}
}
}

View File

@ -0,0 +1,169 @@
<?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/>.
*
* 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);
}
/**
* Takes parameters:
*
* - feed: a profile ID
* - 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
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
abstract class BaseMirrorAction extends Action
{
var $user;
var $profile;
/**
* 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);
return $this->sharedBoilerplate();
}
protected function validateFeedUrl($url)
{
if (common_valid_http_url($url)) {
return $url;
} else {
$this->clientError(_m("Invalid feed URL."));
}
}
protected function validateProfile($id)
{
$id = intval($id);
$profile = Profile::staticGet('id', $id);
if ($profile && $profile->id != $this->user->id) {
return $profile;
}
// TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed.
$this->clientError(_m("Invalid profile for mirroring."));
}
/**
*
* @param string $url
* @return Profile
*/
protected function profileForFeed($url)
{
$oprofile = Ostatus_profile::ensureProfileURL($url);
if ($oprofile->isGroup()) {
$this->clientError(_m("Can't mirror a StatusNet group at this time."));
}
$this->oprofile = $oprofile; // @fixme ugly side effect :D
return $oprofile->localProfile();
}
/**
* @fixme none of this belongs in end classes
* this stuff belongs in shared code!
*/
function sharedBoilerplate()
{
// 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;
}
return true;
}
/**
* Handle request
*
* Does the subscription and returns results.
*
* @param Array $args unused.
*
* @return void
*/
function handle($args)
{
// Throws exception on error
$this->saveMirror();
if ($this->boolean('ajax')) {
$this->startHTML('text/xml;charset=utf-8');
$this->elementStart('head');
$this->element('title', null, _('Subscribed'));
$this->elementEnd('head');
$this->elementStart('body');
$unsubscribe = new EditMirrorForm($this, $this->profile);
$unsubscribe->show();
$this->elementEnd('body');
$this->elementEnd('html');
} else {
$url = common_local_url('mirrorsettings');
common_redirect($url, 303);
}
}
abstract function saveMirror();
}

View File

@ -0,0 +1,112 @@
<?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/>.
*
* 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);
}
/**
* Takes parameters:
*
* - feed: a profile ID
* - 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
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
class EditMirrorAction extends BaseMirrorAction
{
/**
* 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);
$this->profile = $this->validateProfile($this->trimmed('profile'));
$this->mirror = SubMirror::pkeyGet(array('subscriber' => $this->user->id,
'subscribed' => $this->profile->id));
if (!$this->mirror) {
$this->clientError(_m("Requested invalid profile to edit."));
}
$this->style = $this->validateStyle($this->trimmed('style'));
// DO NOT change to $this->boolean(), it will be wrong.
// We're checking for the presence of the setting, not its value.
$this->delete = (bool)$this->arg('delete');
return true;
}
protected function validateStyle($style)
{
$allowed = array('repeat', 'copy');
if (in_array($style, $allowed)) {
return $style;
} else {
$this->clientError(_m("Bad form data."));
}
}
function saveMirror()
{
$mirror = SubMirror::getMirror($this->user, $this->profile);
if (!$mirror) {
$this->clientError(_m('Requested edit of missing mirror'));
}
if ($this->delete) {
$mirror->delete();
$oprofile = Ostatus_profile::staticGet('profile_id', $this->profile->id);
if ($oprofile) {
$oprofile->garbageCollect();
}
} else if ($this->style != $mirror->style) {
$orig = clone($mirror);
$mirror->style = $this->style;
$mirror->modified = common_sql_now();
$mirror->update($orig);
}
}
}

View File

@ -0,0 +1,106 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* 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 Plugins
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @copyright 2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
class MirrorSettingsAction extends AccountSettingsAction
{
/**
* Title of the page
*
* @return string Page title
*/
function title()
{
return _m('Feed mirror settings');
}
/**
* Instructions for use
*
* @return string Instructions for use
*/
function getInstructions()
{
return _m('You can mirror updates from many RSS and Atom feeds ' .
'into your StatusNet timeline!');
}
/**
* Show the form for OpenID management
*
* We have one form with a few different submit buttons to do different things.
*
* @return void
*/
function showContent()
{
$user = common_current_user();
$this->showAddFeedForm();
$mirror = new SubMirror();
$mirror->subscriber = $user->id;
if ($mirror->find()) {
while ($mirror->fetch()) {
$this->showFeedForm($mirror);
}
}
}
function showFeedForm($mirror)
{
$profile = Profile::staticGet('id', $mirror->subscribed);
if ($profile) {
$form = new EditMirrorForm($this, $profile);
$form->show();
}
}
function showAddFeedForm()
{
$form = new AddMirrorForm($this);
$form->show();
}
/**
* Handle a POST request
*
* Muxes to different sub-functions based on which button was pushed
*
* @return void
*/
function handlePost()
{
}
}

View File

@ -0,0 +1,213 @@
<?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/>.
*/
/**
* @package SubMirrorPlugin
* @maintainer Brion Vibber <brion@status.net>
*/
class SubMirror extends Memcached_DataObject
{
public $__table = 'submirror';
public $subscriber;
public $subscribed;
public $style;
public $created;
public $modified;
public /*static*/ function staticGet($k, $v=null)
{
return parent::staticGet(__CLASS__, $k, $v);
}
/**
* return table definition for DB_DataObject
*
* DB_DataObject needs to know something about the table to manipulate
* instances. This method provides all the DB_DataObject needs to know.
*
* @return array array of column definitions
*/
function table()
{
return array('subscriber' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
'subscribed' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
'style' => DB_DATAOBJECT_STR,
'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
}
static function schemaDef()
{
// @fixme need a reverse key on (subscribed, subscriber) as well
return array(new ColumnDef('subscriber', 'integer',
null, false, 'PRI'),
new ColumnDef('subscribed', 'integer',
null, false, 'PRI'),
new ColumnDef('style', 'varchar',
16, true),
new ColumnDef('created', 'datetime',
null, false),
new ColumnDef('modified', 'datetime',
null, false));
}
/**
* return key definitions for DB_DataObject
*
* DB_DataObject needs to know about keys that the table has; this function
* defines them.
*
* @return array key definitions
*/
function keys()
{
return array_keys($this->keyTypes());
}
/**
* return key definitions for Memcached_DataObject
*
* Our caching system uses the same key definitions, but uses a different
* method to get them.
*
* @return array key definitions
*/
function keyTypes()
{
// @fixme keys
// need a sane key for reverse lookup too
return array('subscriber' => 'K', 'subscribed' => 'K');
}
function sequenceKey()
{
return array(false, false, false);
}
/**
* @param Profile $subscribed
* @param Profile $subscribed
* @return SubMirror
* @throws ServerException
*/
public static function saveMirror($subscriber, $subscribed, $style='repeat')
{
// @fixme make sure they're subscribed!
$mirror = new SubMirror();
$mirror->subscriber = $subscriber->id;
$mirror->subscribed = $subscribed->id;
$mirror->style = $style;
$mirror->created = common_sql_now();
$mirror->modified = common_sql_now();
$mirror->insert();
return $mirror;
}
/**
* @param Notice $notice
* @return mixed Notice on successful mirroring, boolean if not
*/
public function mirrorNotice($notice)
{
$profile = Profile::staticGet('id', $this->subscriber);
if (!$profile) {
common_log(LOG_ERROR, "SubMirror plugin skipping auto-repeat of notice $notice->id for missing user $profile->id");
return false;
}
if ($this->style == 'copy') {
return $this->copyNotice($profile, $notice);
} else { // default to repeat mode
return $this->repeatNotice($profile, $notice);
}
}
/**
* Mirror a notice using StatusNet's repeat functionality.
* This retains attribution within the site, and other nice things,
* but currently ends up looking like 'RT @foobar bla bla' when
* bridged out over OStatus or TwitterBridge.
*
* @param Notice $notice
* @return mixed Notice on successful repeat, true if already repeated, false on failure
*/
protected function repeatNotice($profile, $notice)
{
if($profile->hasRepeated($notice->id)) {
common_log(LOG_INFO, "SubMirror plugin skipping auto-repeat of notice $notice->id for user $profile->id; already repeated.");
return true;
} else {
common_log(LOG_INFO, "SubMirror plugin auto-repeating notice $notice->id for $profile->id");
return $notice->repeat($profile->id, 'mirror');
}
}
/**
* Mirror a notice by emitting a new notice with the same contents.
* Kind of dirty, but if pulling an external data feed into an account
* that may be what you want.
*
* @param Notice $notice
* @return mixed Notice on successful repeat, true if already repeated, false on failure
*/
protected function copyNotice($profile, $notice)
{
$options = array('is_local' => Notice::LOCAL_PUBLIC,
'url' => $notice->bestUrl(), // pass through the foreign link...
'rendered' => $notice->rendered);
$saved = Notice::saveNew($profile->id,
$notice->content,
'feed',
$options);
return $saved;
}
public /*static*/ function pkeyGet($v)
{
return parent::pkeyGet(__CLASS__, $v);
}
/**
* Get the mirroring setting for a pair of profiles, if existing.
*
* @param Profile $subscriber
* @param Profile $subscribed
* @return mixed Profile or empty
*/
public static function getMirror($subscriber, $subscribed)
{
return self::pkeyGet(array('subscriber' => $subscriber->id,
'subscribed' => $subscribed->id));
}
}

View File

@ -0,0 +1,141 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
* 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/>.
*
* @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);
}
class AddMirrorForm extends Form
{
/**
* Name of the form
*
* Sub-classes should overload this with the name of their form.
*
* @return void
*/
function formLegend()
{
}
/**
* Visible or invisible data elements
*
* Display the form fields that make up the data of the form.
* Sub-classes should overload this to show their data.
*
* @return void
*/
function formData()
{
$this->out->elementStart('fieldset');
$this->out->elementStart('ul');
$this->li();
$this->doInput('addmirror-feedurl',
'feedurl',
_m('Web page or feed URL:'),
$this->out->trimmed('feedurl'));
$this->unli();
$this->li();
$this->out->submit('addmirror-save', _m('Add feed'));
$this->unli();
$this->out->elementEnd('ul');
$this->out->elementEnd('fieldset');
}
private function doInput($id, $name, $label, $value=null, $instructions=null)
{
$this->out->element('label', array('for' => $id), $label);
$attrs = array('name' => $name,
'type' => 'text',
'id' => $id,
'style' => 'width: 80%');
if ($value) {
$attrs['value'] = $value;
}
$this->out->element('input', $attrs);
if ($instructions) {
$this->out->element('p', 'form_guide', $instructions);
}
}
/**
* Buttons for form actions
*
* Submit and cancel buttons (or whatever)
* Sub-classes should overload this to show their own buttons.
*
* @return void
*/
function formActions()
{
}
/**
* ID of the form
*
* Should be unique on the page. Sub-classes should overload this
* to show their own IDs.
*
* @return string ID of the form
*/
function id()
{
return 'add-mirror-form';
}
/**
* Action of the form.
*
* URL to post to. Should be overloaded by subclasses to give
* somewhere to post to.
*
* @return string URL to post to
*/
function action()
{
return common_local_url('addmirror');
}
/**
* Class of the form.
*
* @return string the form's class
*/
function formClass()
{
return 'form_settings';
}
}

View File

@ -0,0 +1,189 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
* 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/>.
*
* @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);
}
class EditMirrorForm extends Form
{
function __construct($action, $profile)
{
parent::__construct($action);
$this->profile = clone($profile);
$this->user = common_current_user();
$this->mirror = SubMirror::pkeyGet(array('subscriber' => $this->user->id,
'subscribed' => $this->profile->id));
}
/**
* Name of the form
*
* Sub-classes should overload this with the name of their form.
*
* @return void
*/
function formLegend()
{
}
/**
* Visible or invisible data elements
*
* Display the form fields that make up the data of the form.
* Sub-classes should overload this to show their data.
*
* @return void
*/
function formData()
{
$this->out->elementStart('fieldset');
$this->out->hidden('profile', $this->profile->id);
$this->out->elementStart('div', array('style' => 'float: left; width: 80px;'));
$img = $this->getAvatar($this->profile);
$feed = $this->getFeed($this->profile);
$this->out->elementStart('a', array('href' => $this->profile->profileurl));
$this->out->element('img', array('src' => $img, 'style' => 'float: left'));
$this->out->elementEnd('a');
$this->out->elementEnd('div');
$this->out->elementStart('div', array('style' => 'margin-left: 80px; margin-right: 20px'));
$this->out->elementStart('p');
$this->out->elementStart('div');
$this->out->element('a', array('href' => $this->profile->profileurl), $this->profile->getBestName());
$this->out->elementEnd('div');
$this->out->elementStart('div');
if ($feed) {
$this->out->text(_m('LABEL', 'Remote feed:') . ' ');
//$this->out->element('a', array('href' => $feed), $feed);
$this->out->element('input', array('value' => $feed, 'readonly' => 'readonly', 'style' => 'width: 100%'));
} else {
$this->out->text(_m('LABEL', 'Local user'));
}
$this->out->elementEnd('div');
$this->out->elementEnd('p');
$this->out->elementStart('fieldset', array('style' => 'margin-top: 20px'));
$this->out->element('legend', false, _m("Mirroring style"));
$styles = array('repeat' => _m("Repeat: reference the original user's post (sometimes shows as 'RT @blah')"),
'copy' => _m("Repost the content under my account"));
foreach ($styles as $key => $label) {
$this->out->elementStart('div');
$attribs = array('type' => 'radio',
'value' => $key,
'name' => 'style',
'id' => $this->id() . '-style');
if ($key == $this->mirror->style || ($key == 'repeat' && empty($this->mirror->style))) {
$attribs['checked'] = 'checked';
}
$this->out->element('input', $attribs);
$this->out->element('span', false, $label); // @fixme should be label, but the styles muck it up for now
$this->out->elementEnd('div');
}
$this->out->elementEnd('fieldset');
$this->out->elementStart('div');
$this->out->submit($this->id() . '-save', _m('Save'));
$this->out->element('input', array('type' => 'submit',
'value' => _m('Stop mirroring'),
'name' => 'delete',
'class' => 'submit'));
$this->out->elementEnd('div');
$this->out->elementEnd('div');
$this->out->elementEnd('fieldset');
}
private function getAvatar($profile)
{
$avatar = $this->profile->getAvatar(48);
if ($avatar) {
return $avatar->displayUrl();
} else {
return Avatar::defaultImage(48);
}
}
private function getFeed($profile)
{
// Ok this is a bit of a hack. ;)
if (class_exists('Ostatus_profile')) {
$oprofile = Ostatus_profile::staticGet('profile_id', $profile->id);
if ($oprofile) {
return $oprofile->feeduri;
}
}
var_dump('wtf');
return false;
}
/**
* ID of the form
*
* Should be unique on the page. Sub-classes should overload this
* to show their own IDs.
*
* @return string ID of the form
*/
function id()
{
return 'edit-mirror-form-' . $this->profile->id;
}
/**
* Action of the form.
*
* URL to post to. Should be overloaded by subclasses to give
* somewhere to post to.
*
* @return string URL to post to
*/
function action()
{
return common_local_url('editmirror');
}
/**
* Class of the form.
*
* @return string the form's class
*/
function formClass()
{
return 'form_settings';
}
}

View File

@ -0,0 +1,45 @@
<?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/>.
*/
/**
* Check for subscription mirroring options on each newly seen post!
*
* @package SubMirror
* @author Brion Vibber <brion@status.net>
*/
class MirrorQueueHandler extends QueueHandler
{
function transport()
{
return 'mirror';
}
function handle($notice)
{
$mirror = new SubMirror();
$mirror->subscribed = $notice->profile_id;
if ($mirror->find()) {
while ($mirror->fetch()) {
$mirror->mirrorNotice($notice);
}
}
return true;
}
}