summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README4
-rw-r--r--actions/featured.php2
-rw-r--r--actions/profilesettings.php30
-rw-r--r--classes/Memcached_DataObject.php16
-rw-r--r--doc-src/about2
-rw-r--r--doc-src/help4
-rw-r--r--doc-src/im2
-rw-r--r--index.php14
-rw-r--r--js/util.js37
-rw-r--r--lib/language.php16
-rw-r--r--lib/mail.php4
-rw-r--r--lib/repeatform.php4
-rw-r--r--locale/ar/LC_MESSAGES/statusnet.po30
-rw-r--r--locale/arz/LC_MESSAGES/statusnet.po30
-rw-r--r--locale/bg/LC_MESSAGES/statusnet.po422
-rw-r--r--locale/ca/LC_MESSAGES/statusnet.po369
-rw-r--r--locale/cs/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/de/LC_MESSAGES/statusnet.po185
-rw-r--r--locale/el/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/en_GB/LC_MESSAGES/statusnet.po156
-rw-r--r--locale/es/LC_MESSAGES/statusnet.po187
-rw-r--r--locale/fa/LC_MESSAGES/statusnet.po5361
-rw-r--r--locale/fi/LC_MESSAGES/statusnet.po30
-rw-r--r--locale/fr/LC_MESSAGES/statusnet.po33
-rw-r--r--locale/ga/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/he/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/hsb/LC_MESSAGES/statusnet.po31
-rw-r--r--locale/ia/LC_MESSAGES/statusnet.po87
-rw-r--r--locale/is/LC_MESSAGES/statusnet.po30
-rw-r--r--locale/it/LC_MESSAGES/statusnet.po33
-rw-r--r--locale/ja/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/ko/LC_MESSAGES/statusnet.po30
-rw-r--r--locale/mk/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/nb/LC_MESSAGES/statusnet.po160
-rw-r--r--locale/nl/LC_MESSAGES/statusnet.po33
-rw-r--r--locale/nn/LC_MESSAGES/statusnet.po30
-rw-r--r--locale/pl/LC_MESSAGES/statusnet.po120
-rw-r--r--locale/pt/LC_MESSAGES/statusnet.po33
-rw-r--r--locale/pt_BR/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/ru/LC_MESSAGES/statusnet.po126
-rw-r--r--locale/statusnet.po24
-rw-r--r--locale/sv/LC_MESSAGES/statusnet.po126
-rw-r--r--locale/te/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/tr/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/uk/LC_MESSAGES/statusnet.po33
-rw-r--r--locale/vi/LC_MESSAGES/statusnet.po28
-rw-r--r--locale/zh_CN/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/zh_TW/LC_MESSAGES/statusnet.po28
-rw-r--r--plugins/CasAuthentication/CasAuthenticationPlugin.php134
-rw-r--r--plugins/CasAuthentication/README38
-rw-r--r--plugins/CasAuthentication/caslogin.php66
-rw-r--r--plugins/CasAuthentication/extlib/CAS.php1471
-rw-r--r--plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php190
-rw-r--r--plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php249
-rw-r--r--plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php188
-rw-r--r--plugins/CasAuthentication/extlib/CAS/client.php2297
-rw-r--r--plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php277
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/catalan.php27
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/english.php27
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/french.php28
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/german.php27
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/greek.php27
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/japanese.php27
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/languages.php24
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/spanish.php27
-rw-r--r--plugins/GeonamesPlugin.php190
-rw-r--r--plugins/LdapAuthentication/LdapAuthenticationPlugin.php29
-rw-r--r--plugins/LdapAuthentication/MemcacheSchemaCache.php75
-rw-r--r--plugins/LdapAuthentication/README2
-rw-r--r--plugins/MobileProfile/MobileProfilePlugin.php4
-rw-r--r--plugins/MobileProfile/mp-screen.css6
-rw-r--r--plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php45
-rw-r--r--plugins/Realtime/realtimeupdate.js4
-rw-r--r--theme/base/css/display.css54
-rw-r--r--theme/default/css/display.css6
-rw-r--r--theme/identica/css/display.css6
76 files changed, 12169 insertions, 1572 deletions
diff --git a/README b/README
index 9e91ad674..6e39890cb 100644
--- a/README
+++ b/README
@@ -712,13 +712,9 @@ to users on a remote site. (Or not... it's not well tested.) The
If fancy URLs is enabled, access to file attachments can also be
restricted to logged-in users only. Uncomment the appropriate rewrite
-<<<<<<< HEAD:README
rule in .htaccess or your server's httpd.conf. (This most likely will
not work if you are using a virtual server for attachments, so consider
the performance/security tradeoff.)
-=======
-rule in .htaccess or your server's httpd.conf.
->>>>>>> 446de62... Revert "Added some explanatory text to README":README
Upgrading
=========
diff --git a/actions/featured.php b/actions/featured.php
index 39bf09d8f..dd1056dd5 100644
--- a/actions/featured.php
+++ b/actions/featured.php
@@ -96,7 +96,7 @@ class FeaturedAction extends Action
function getInstructions()
{
- return sprintf(_('A selection of some of the great users on %s'),
+ return sprintf(_('A selection of some great users on %s'),
common_config('site', 'name'));
}
diff --git a/actions/profilesettings.php b/actions/profilesettings.php
index 359664096..acfcbcd00 100644
--- a/actions/profilesettings.php
+++ b/actions/profilesettings.php
@@ -69,7 +69,7 @@ class ProfilesettingsAction extends AccountSettingsAction
function getInstructions()
{
return _('You can update your personal profile info here '.
- 'so people know more about you.');
+ 'so people know more about you.');
}
function showScripts()
@@ -92,9 +92,9 @@ class ProfilesettingsAction extends AccountSettingsAction
$profile = $user->getProfile();
$this->elementStart('form', array('method' => 'post',
- 'id' => 'form_settings_profile',
- 'class' => 'form_settings',
- 'action' => common_local_url('profilesettings')));
+ 'id' => 'form_settings_profile',
+ 'class' => 'form_settings',
+ 'action' => common_local_url('profilesettings')));
$this->elementStart('fieldset');
$this->element('legend', null, _('Profile information'));
$this->hidden('token', common_session_token());
@@ -185,7 +185,7 @@ class ProfilesettingsAction extends AccountSettingsAction
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
$this->showForm(_('There was a problem with your session token. '.
- 'Try again, please.'));
+ 'Try again, please.'));
return;
}
@@ -203,15 +203,15 @@ class ProfilesettingsAction extends AccountSettingsAction
// Some validation
if (!Validate::string($nickname, array('min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT))) {
+ 'max_length' => 64,
+ 'format' => NICKNAME_FMT))) {
$this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
return;
} else if (!User::allowed_nickname($nickname)) {
$this->showForm(_('Not a valid nickname.'));
return;
} else if (!is_null($homepage) && (strlen($homepage) > 0) &&
- !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) {
+ !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) {
$this->showForm(_('Homepage is not a valid URL.'));
return;
} else if (!is_null($fullname) && mb_strlen($fullname) > 255) {
@@ -253,15 +253,15 @@ class ProfilesettingsAction extends AccountSettingsAction
$user->query('BEGIN');
if ($user->nickname != $nickname ||
- $user->language != $language ||
- $user->timezone != $timezone) {
+ $user->language != $language ||
+ $user->timezone != $timezone) {
common_debug('Updating user nickname from ' . $user->nickname . ' to ' . $nickname,
- __FILE__);
+ __FILE__);
common_debug('Updating user language from ' . $user->language . ' to ' . $language,
- __FILE__);
+ __FILE__);
common_debug('Updating user timezone from ' . $user->timezone . ' to ' . $timezone,
- __FILE__);
+ __FILE__);
$original = clone($user);
@@ -281,7 +281,7 @@ class ProfilesettingsAction extends AccountSettingsAction
}
}
-// XXX: XOR
+ // XXX: XOR
if ($user->autosubscribe ^ $autosubscribe) {
$original = clone($user);
@@ -351,7 +351,7 @@ class ProfilesettingsAction extends AccountSettingsAction
$user = common_current_user();
$other = User::staticGet('nickname', $nickname);
if (!$other) {
- return false;
+ return false;
} else {
return $other->id != $user->id;
}
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
index d8b0db5a6..be8137573 100644
--- a/classes/Memcached_DataObject.php
+++ b/classes/Memcached_DataObject.php
@@ -37,6 +37,15 @@ class Memcached_DataObject extends DB_DataObject
}
}
+ /**
+ * Wrapper for DB_DataObject's static lookup using memcached
+ * as backing instead of an in-process cache array.
+ *
+ * @param string $cls classname of object type to load
+ * @param mixed $k key field name, or value for primary key
+ * @param mixed $v key field value, or leave out for primary key lookup
+ * @return mixed Memcached_DataObject subtype or false
+ */
function &staticGet($cls, $k, $v=null)
{
if (is_null($v)) {
@@ -53,6 +62,13 @@ class Memcached_DataObject extends DB_DataObject
} else {
$i = DB_DataObject::staticGet($cls, $k, $v);
if ($i) {
+ // DB_DataObject's in-process lookup cache interferes with GC
+ // to cause massive memory leaks in long-running processes.
+ if (php_sapi_name() == 'cli') {
+ $i->_clear_cache();
+ }
+
+ // Now store it into the shared memcached, if present...
$i->encache();
}
return $i;
diff --git a/doc-src/about b/doc-src/about
index 21f4dbf15..6a68e41cf 100644
--- a/doc-src/about
+++ b/doc-src/about
@@ -3,7 +3,7 @@
based on the Free Software [StatusNet](http://status.net/) tool.
If you [register](%%action.register%%) for an account,
-you can post small (140 chars or less) text notices
+you can post small (%%site.textlimit%% chars or less) text notices
about yourself, where you are, what you're doing, or practically
anything you want. You can also subscribe to the notices of your
friends, or other people you're interested in, and follow them on the
diff --git a/doc-src/help b/doc-src/help
index 93300ab24..37a8d11f7 100644
--- a/doc-src/help
+++ b/doc-src/help
@@ -1,4 +1,4 @@
-%%site.name%% is a **microblogging service**. Users post short (140
+%%site.name%% is a **microblogging service**. Users post short (%%site.textlimit%%
character) notices which are broadcast to their friends and fans using
the Web, RSS, or instant messages.
@@ -30,4 +30,4 @@ Here are some documents that you might find helpful in understanding
* [Privacy](%%doc.privacy%%) - %%site.name%%'s privacy policy
* [Source](%%doc.source%%) - How to get the StatusNet source code
* [Badge](%%doc.badge%%) - How to put a StatusNet badge on your blog or homepage
-* [Bookmarklet](%%doc.bookmarklet%%) - Bookmarklet for posting Web pages \ No newline at end of file
+* [Bookmarklet](%%doc.bookmarklet%%) - Bookmarklet for posting Web pages
diff --git a/doc-src/im b/doc-src/im
index 631f6d9bb..eda4f6fc5 100644
--- a/doc-src/im
+++ b/doc-src/im
@@ -20,7 +20,7 @@ Sending updates
---------------
You send updates by sending messages to %%xmpp.user%%@%%xmpp.server%%. Messages
-should be less than 140 characters; longer messages will be truncated.
+should be less than %%site.textlimit%% characters; longer messages will be truncated.
Commands
--------
diff --git a/index.php b/index.php
index 997ee6197..47cde8740 100644
--- a/index.php
+++ b/index.php
@@ -278,6 +278,20 @@ function main()
&& !preg_match('/rss$/', $action)
&& !preg_match('/^Api/', $action)
) {
+ // set returnto
+ $rargs =& common_copy_args($args);
+ unset($rargs['action']);
+ if (common_config('site', 'fancy')) {
+ unset($rargs['p']);
+ }
+ if (array_key_exists('submit', $rargs)) {
+ unset($rargs['submit']);
+ }
+ foreach (array_keys($_COOKIE) as $cookie) {
+ unset($rargs[$cookie]);
+ }
+ common_set_returnto(common_local_url($action, $rargs));
+
common_redirect(common_local_url('login'));
return;
}
diff --git a/js/util.js b/js/util.js
index f60b5d313..0987c6cc0 100644
--- a/js/util.js
+++ b/js/util.js
@@ -316,7 +316,42 @@ var SN = { // StatusNet
},
NoticeRepeat: function() {
- $('.form_repeat').each(function() { SN.U.FormXHR($(this)); });
+ $('.form_repeat').each(function() {
+ SN.U.FormXHR($(this));
+ SN.U.NoticeRepeatConfirmation($(this));
+ });
+ },
+
+ NoticeRepeatConfirmation: function(form) {
+ function NRC() {
+ form.closest('.notice-options').addClass('opaque');
+ form.addClass('dialogbox');
+
+ form.append('<button class="close">&#215;</button>');
+ form.find('button.close').click(function(){
+ $(this).remove();
+
+ form.closest('.notice-options').removeClass('opaque');
+ form.removeClass('dialogbox');
+ form.find('.submit_dialogbox').remove();
+ form.find('.submit').show();
+
+ return false;
+ });
+ };
+
+ form.find('.submit').bind('click', function(e) {
+ e.preventDefault();
+
+ var submit = form.find('.submit').clone();
+ submit.addClass('submit_dialogbox');
+ submit.removeClass('submit');
+ form.append(submit);
+
+ $(this).hide();
+
+ NRC();
+ });
},
NoticeAttachments: function() {
diff --git a/lib/language.php b/lib/language.php
index d8f529201..f5ee7fac5 100644
--- a/lib/language.php
+++ b/lib/language.php
@@ -32,6 +32,21 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
+// Locale category constants are usually predefined, but may not be
+// on some systems such as Win32.
+$LC_CATEGORIES = array('LC_CTYPE',
+ 'LC_NUMERIC',
+ 'LC_TIME',
+ 'LC_COLLATE',
+ 'LC_MONETARY',
+ 'LC_MESSAGES',
+ 'LC_ALL');
+foreach ($LC_CATEGORIES as $key => $name) {
+ if (!defined($name)) {
+ define($name, $key);
+ }
+}
+
if (!function_exists('gettext')) {
require_once("php-gettext/gettext.inc");
}
@@ -283,6 +298,7 @@ function get_all_languages() {
'en' => array('q' => 1, 'lang' => 'en', 'name' => 'English (US)', 'direction' => 'ltr'),
'es' => array('q' => 1, 'lang' => 'es', 'name' => 'Spanish', 'direction' => 'ltr'),
'fi' => array('q' => 1, 'lang' => 'fi', 'name' => 'Finnish', 'direction' => 'ltr'),
+ 'fa' => array('q' => 1, 'lang' => 'fa', 'name' => 'Persian', 'direction' => 'rtl'),
'fr-fr' => array('q' => 1, 'lang' => 'fr', 'name' => 'French', 'direction' => 'ltr'),
'ga' => array('q' => 0.5, 'lang' => 'ga', 'name' => 'Galician', 'direction' => 'ltr'),
'he' => array('q' => 0.5, 'lang' => 'he', 'name' => 'Hebrew', 'direction' => 'rtl'),
diff --git a/lib/mail.php b/lib/mail.php
index dffac3262..472a88e06 100644
--- a/lib/mail.php
+++ b/lib/mail.php
@@ -599,6 +599,10 @@ function mail_notify_attn($user, $notice)
$sender = $notice->getProfile();
+ if ($sender->id == $user->id) {
+ return;
+ }
+
if (!$sender->hasRight(Right::EMAILONREPLY)) {
return;
}
diff --git a/lib/repeatform.php b/lib/repeatform.php
index 50e5d6dbe..4f1c8aa32 100644
--- a/lib/repeatform.php
+++ b/lib/repeatform.php
@@ -104,7 +104,7 @@ class RepeatForm extends Form
*/
function formLegend()
{
- $this->out->element('legend', null, _('Repeat this notice'));
+ $this->out->element('legend', null, _('Repeat this notice?'));
}
/**
@@ -129,7 +129,7 @@ class RepeatForm extends Form
function formActions()
{
$this->out->submit('repeat-submit-' . $this->notice->id,
- _('Repeat'), 'submit', null, _('Repeat this notice'));
+ _('Yes'), 'submit', null, _('Repeat this notice'));
}
/**
diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po
index 5d0b78cc1..b40e7f4b6 100644
--- a/locale/ar/LC_MESSAGES/statusnet.po
+++ b/locale/ar/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:51:43+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:16+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ar\n"
"X-Message-Group: out-statusnet\n"
@@ -1233,8 +1233,8 @@ msgid "Featured users, page %d"
msgstr "مستخدمون مختارون، صفحة %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "قسم للمستخدمين المتميزين على %s"
#: actions/file.php:34
@@ -5262,47 +5262,47 @@ msgstr "رسالة"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "قبل دقيقة تقريبًا"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "قبل ساعة تقريبًا"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "قبل سنة تقريبًا"
diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po
index e37883215..514f34d72 100644
--- a/locale/arz/LC_MESSAGES/statusnet.po
+++ b/locale/arz/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:51:46+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:19+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.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: arz\n"
"X-Message-Group: out-statusnet\n"
@@ -1234,8 +1234,8 @@ msgid "Featured users, page %d"
msgstr "مستخدمون مختارون، صفحه %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "قسم للمستخدمين المتميزين على %s"
#: actions/file.php:34
@@ -5263,47 +5263,47 @@ msgstr "رسالة"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "قبل دقيقه تقريبًا"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "قبل ساعه تقريبًا"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "قبل سنه تقريبًا"
diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po
index 8ca44327d..78c3e85cb 100644
--- a/locale/bg/LC_MESSAGES/statusnet.po
+++ b/locale/bg/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:51:49+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:22+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n"
@@ -185,17 +185,16 @@ msgid "Could not update your design."
msgstr "Грешка при обновяване на потребителя."
#: actions/apiblockcreate.php:105
-#, fuzzy
msgid "You cannot block yourself!"
-msgstr "Не можете да спрете да следите себе си!"
+msgstr "Не можете да блокирате себе си!"
#: actions/apiblockcreate.php:119
msgid "Block user failed."
-msgstr ""
+msgstr "Грешка при блокиране на потребителя."
#: actions/apiblockdestroy.php:107
msgid "Unblock user failed."
-msgstr ""
+msgstr "Грешка при разблокиране на потребителя."
#: actions/apidirectmessage.php:89
#, php-format
@@ -418,9 +417,9 @@ msgid "%s groups"
msgstr "Групи на %s"
#: actions/apigrouplistall.php:94
-#, fuzzy, php-format
+#, php-format
msgid "groups on %s"
-msgstr "Търсене на групи в сайта"
+msgstr "групи в %s"
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -436,14 +435,12 @@ msgid "No such notice."
msgstr "Няма такава бележка."
#: actions/apistatusesretweet.php:83
-#, fuzzy
msgid "Cannot repeat your own notice."
-msgstr "Грешка при включване на уведомлението."
+msgstr "Не можете да повтаряте собствени бележки."
#: actions/apistatusesretweet.php:91
-#, fuzzy
msgid "Already repeated that notice."
-msgstr "Изтриване на бележката"
+msgstr "Вече сте повторили тази бележка."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
@@ -517,17 +514,17 @@ msgstr ""
#: actions/apitimelineretweetedbyme.php:112
#, php-format
msgid "Repeated by %s"
-msgstr ""
+msgstr "Повторено от %s"
#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
msgid "Repeated to %s"
-msgstr "Отговори на %s"
+msgstr "Повторено за %s"
#: actions/apitimelineretweetsofme.php:112
-#, fuzzy, php-format
+#, php-format
msgid "Repeats of %s"
-msgstr "Отговори на %s"
+msgstr "Повторения на %s"
#: actions/apitimelinetag.php:102 actions/tag.php:66
#, php-format
@@ -567,9 +564,10 @@ msgid "Avatar"
msgstr "Аватар"
#: actions/avatarsettings.php:78
-#, fuzzy, php-format
+#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Можете да качите личен аватар тук."
+msgstr ""
+"Можете да качите личен аватар тук. Максималната големина на файла е %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/grouplogo.php:178 actions/remotesubscribe.php:191
@@ -649,7 +647,6 @@ msgid "Avatar deleted."
msgstr "Аватарът е изтрит."
#: actions/block.php:69
-#, fuzzy
msgid "You already blocked that user."
msgstr "Вече сте блокирали този потребител."
@@ -670,9 +667,8 @@ msgid "No"
msgstr "Не"
#: actions/block.php:143 actions/deleteuser.php:147
-#, fuzzy
msgid "Do not block this user"
-msgstr "Разблокиране на този потребител"
+msgstr "Да не се блокира този потребител"
#: actions/block.php:144 actions/deletenotice.php:146
#: actions/deleteuser.php:148 actions/groupblock.php:179
@@ -702,14 +698,14 @@ msgid "No such group"
msgstr "Няма такава група."
#: actions/blockedfromgroup.php:90
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked profiles"
-msgstr "Потребителски профил"
+msgstr "Блокирани за %s"
#: actions/blockedfromgroup.php:93
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked profiles, page %d"
-msgstr "%s и приятели, страница %d"
+msgstr "Блокирани за %s, страница %d"
#: actions/blockedfromgroup.php:108
#, fuzzy
@@ -717,9 +713,8 @@ msgid "A list of the users blocked from joining this group."
msgstr "Списък с потребителите в тази група."
#: actions/blockedfromgroup.php:281
-#, fuzzy
msgid "Unblock user from group"
-msgstr "Разблокиране на този потребител"
+msgstr "Разблокиране на потребителя от групата"
#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
msgid "Unblock"
@@ -801,7 +796,6 @@ msgid "Can't delete this notice."
msgstr "Грешка при изтриване на бележката."
#: actions/deletenotice.php:103
-#, fuzzy
msgid ""
"You are about to permanently delete a notice. Once this is done, it cannot "
"be undone."
@@ -874,9 +868,8 @@ msgid "Change logo"
msgstr "Смяна на логото"
#: actions/designadminpanel.php:380
-#, fuzzy
msgid "Site logo"
-msgstr "Покани"
+msgstr "Лого на сайта"
#: actions/designadminpanel.php:387
#, fuzzy
@@ -987,7 +980,7 @@ msgstr "Няма такъв документ."
#: actions/editgroup.php:56
#, php-format
msgid "Edit %s group"
-msgstr ""
+msgstr "Редактиране на групата %s"
#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
msgid "You must be logged in to create a group."
@@ -1262,18 +1255,16 @@ msgstr "Избрани потребители, страница %d"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
-#, fuzzy
msgid "No notice ID."
-msgstr "Нова бележка"
+msgstr "Липсва ID на бележка."
#: actions/file.php:38
-#, fuzzy
msgid "No notice."
-msgstr "Нова бележка"
+msgstr "Липсва бележка."
#: actions/file.php:42
#, fuzzy
@@ -1333,9 +1324,8 @@ msgid "No such file."
msgstr "Няма такъв файл."
#: actions/getfile.php:79
-#, fuzzy
msgid "Cannot read file."
-msgstr "Няма такава бележка."
+msgstr "Грешка при четене на файла."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1356,7 +1346,7 @@ msgstr "Не е указана група."
#: actions/groupblock.php:91
msgid "Only an admin can block group members."
-msgstr ""
+msgstr "Само администратор може да блокира членове от групата."
#: actions/groupblock.php:95
#, fuzzy
@@ -1458,12 +1448,12 @@ msgstr "Неуспешно обновяване на логото."
#: actions/groupmembers.php:93 lib/groupnav.php:92
#, php-format
msgid "%s group members"
-msgstr ""
+msgstr "Членове на групата %s"
#: actions/groupmembers.php:96
#, php-format
msgid "%s group members, page %d"
-msgstr ""
+msgstr "Членове на групата %s, страница %d"
#: actions/groupmembers.php:111
msgid "A list of the users in this group."
@@ -2026,14 +2016,14 @@ msgid ""
msgstr ""
#: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
msgid "Updates with \"%s\""
-msgstr "Бележки от %1$s в %2$s."
+msgstr "Бележки, съдържащи \"%s\""
#: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Всички бележки, намерени с \"%s\""
+msgstr "Бележки, съдържащи търсеното \"%1$s\" в %2$s!"
#: actions/nudge.php:85
msgid ""
@@ -2058,9 +2048,8 @@ msgid "%1$s's status on %2$s"
msgstr "Бележка на %1$s от %2$s"
#: actions/oembed.php:157
-#, fuzzy
msgid "content type "
-msgstr "Свързване"
+msgstr "вид съдържание "
#: actions/oembed.php:160
msgid "Only "
@@ -2093,7 +2082,7 @@ msgstr ""
#: actions/othersettings.php:116
msgid "Shorten URLs with"
-msgstr ""
+msgstr "Съкращаване на адресите с"
#: actions/othersettings.php:117
msgid "Automatic shortening service to use."
@@ -2190,11 +2179,11 @@ msgstr "Паролата е записана."
#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:308
msgid "Paths"
-msgstr ""
+msgstr "Пътища"
#: actions/pathsadminpanel.php:70
msgid "Path and server settings for this StatusNet site."
-msgstr ""
+msgstr "Пътища и сървърни настройки за тази инсталация на StatusNet."
#: actions/pathsadminpanel.php:140
#, fuzzy, php-format
@@ -2218,18 +2207,16 @@ msgstr ""
#: actions/pathsadminpanel.php:212 actions/siteadminpanel.php:58
#: lib/adminpanelaction.php:299
-#, fuzzy
msgid "Site"
-msgstr "Покани"
+msgstr "Сайт"
#: actions/pathsadminpanel.php:216
msgid "Path"
-msgstr ""
+msgstr "Път"
#: actions/pathsadminpanel.php:216
-#, fuzzy
msgid "Site path"
-msgstr "Нова бележка"
+msgstr "Път до сайта"
#: actions/pathsadminpanel.php:220
msgid "Path to locales"
@@ -2260,40 +2247,36 @@ msgid "Avatars"
msgstr "Аватари"
#: actions/pathsadminpanel.php:252
-#, fuzzy
msgid "Avatar server"
-msgstr "Настройки за аватар"
+msgstr "Сървър на аватара"
#: actions/pathsadminpanel.php:256
-#, fuzzy
msgid "Avatar path"
-msgstr "Аватарът е обновен."
+msgstr "Път до аватара"
#: actions/pathsadminpanel.php:260
-#, fuzzy
msgid "Avatar directory"
-msgstr "Аватарът е обновен."
+msgstr "Директория на аватара"
#: actions/pathsadminpanel.php:269
msgid "Backgrounds"
-msgstr ""
+msgstr "Фонове"
#: actions/pathsadminpanel.php:273
msgid "Background server"
-msgstr ""
+msgstr "Сървър на фона"
#: actions/pathsadminpanel.php:277
msgid "Background path"
-msgstr ""
+msgstr "Път до фона"
#: actions/pathsadminpanel.php:281
msgid "Background directory"
-msgstr ""
+msgstr "Директория на фона"
#: actions/pathsadminpanel.php:297
-#, fuzzy
msgid "Save paths"
-msgstr "Нова бележка"
+msgstr "Запазване на пътищата"
#: actions/peoplesearch.php:52
#, php-format
@@ -2744,7 +2727,7 @@ msgstr "Текстовете и файловите ми са достъпни п
#: actions/register.php:495
msgid "Creative Commons Attribution 3.0"
-msgstr ""
+msgstr "Криейтив Комънс Признание 3.0"
#: actions/register.php:496
#, fuzzy
@@ -2811,9 +2794,8 @@ msgid "Remote subscribe"
msgstr "Отдалечен абонамент"
#: actions/remotesubscribe.php:124
-#, fuzzy
msgid "Subscribe to a remote user"
-msgstr "Абониране за този потребител"
+msgstr "Абониране за отдалечен потребител"
#: actions/remotesubscribe.php:129
msgid "User nickname"
@@ -2841,13 +2823,13 @@ msgid "Invalid profile URL (bad format)"
msgstr "Неправилен адрес на профил (грешен формат)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Неправилен адрес на профил (няма YADIS документ)."
+msgstr ""
+"Неправилен адрес на профил (няма документ YADIS или XRDS е неправилен)."
#: actions/remotesubscribe.php:176
msgid "That’s a local profile! Login to subscribe."
-msgstr ""
+msgstr "Това е локален профил! Влезте, за да се абонирате."
#: actions/remotesubscribe.php:183
#, fuzzy
@@ -2855,34 +2837,28 @@ msgid "Couldn’t get a request token."
msgstr "Не е получен token за одобрение."
#: actions/repeat.php:57
-#, fuzzy
msgid "Only logged-in users can repeat notices."
-msgstr "Само потребителят може да отваря собствената си кутия."
+msgstr "Само влезли потребители могат да повтарят бележки."
#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
msgid "No notice specified."
-msgstr "Не е указан профил."
+msgstr "Не е указана бележка."
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr "Не можете да се регистрате, ако не сте съгласни с лиценза."
+msgstr "Не можете да повтаряте собствена бележка."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "Вече сте блокирали този потребител."
+msgstr "Вече сте повторили тази бележка."
#: actions/repeat.php:114 lib/noticelist.php:621
-#, fuzzy
msgid "Repeated"
-msgstr "Създаване"
+msgstr "Повторено"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Създаване"
+msgstr "Повторено!"
#: actions/replies.php:125 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
@@ -2896,19 +2872,19 @@ msgid "Replies to %s, page %d"
msgstr "Отговори на %s, страница %d"
#: actions/replies.php:144
-#, fuzzy, php-format
+#, php-format
msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с отговори на %s (RSS 1.0)"
#: actions/replies.php:151
-#, fuzzy, php-format
+#, php-format
msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с отговори на %s (RSS 2.0)"
#: actions/replies.php:158
-#, fuzzy, php-format
+#, php-format
msgid "Replies feed for %s (Atom)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с отговори на %s (Atom)"
#: actions/replies.php:198
#, php-format
@@ -2932,9 +2908,9 @@ msgid ""
msgstr ""
#: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s on %2$s!"
-msgstr "Съобщение до %1$s в %2$s"
+msgstr "Отговори до %1$s в %2$s!"
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
@@ -2947,7 +2923,7 @@ msgid "User is already sandboxed."
msgstr "Потребителят ви е блокирал."
#: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%s's favorite notices, page %d"
msgstr "Любими бележки на %s, страница %d"
@@ -2993,17 +2969,17 @@ msgstr ""
#: actions/showfavorites.php:242
msgid "This is a way to share what you like."
-msgstr ""
+msgstr "Така можете да споделите какво харесвате."
#: actions/showgroup.php:82 lib/groupnav.php:86
#, php-format
msgid "%s group"
-msgstr ""
+msgstr "Група %s"
#: actions/showgroup.php:84
#, php-format
msgid "%s group, page %d"
-msgstr ""
+msgstr "Група %s, страница %d"
#: actions/showgroup.php:218
msgid "Group profile"
@@ -3066,9 +3042,8 @@ msgid "Statistics"
msgstr "Статистики"
#: actions/showgroup.php:432
-#, fuzzy
msgid "Created"
-msgstr "Създаване"
+msgstr "Създадена на"
#: actions/showgroup.php:448
#, php-format
@@ -3131,24 +3106,24 @@ msgid "Notice feed for %s tagged %s (RSS 1.0)"
msgstr "Емисия с бележки на %s"
#: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (RSS 1.0)"
#: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (RSS 2.0)"
#: actions/showstream.php:143
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s (Atom)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (Atom)"
#: actions/showstream.php:148
-#, fuzzy, php-format
+#, php-format
msgid "FOAF for %s"
-msgstr "Изходяща кутия за %s"
+msgstr "FOAF за %s"
#: actions/showstream.php:191
#, php-format
@@ -3191,9 +3166,8 @@ msgid "Repeat of %s"
msgstr "Отговори на %s"
#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
msgid "You cannot silence users on this site."
-msgstr "Не може да изпращате съобщения до този потребител."
+msgstr "Не можете да заглушавате потребители на този сайт."
#: actions/silence.php:72
msgid "User is already silenced."
@@ -3201,21 +3175,20 @@ msgstr "Потребителят вече е заглушен."
#: actions/siteadminpanel.php:69
msgid "Basic settings for this StatusNet site."
-msgstr ""
+msgstr "Основни настройки на тази инсталация на StatusNet."
#: actions/siteadminpanel.php:147
msgid "Site name must have non-zero length."
-msgstr ""
+msgstr "Името на сайта е задължително."
#: actions/siteadminpanel.php:155
-#, fuzzy
msgid "You must have a valid contact email address"
-msgstr "Това не е правилен адрес на е-поща."
+msgstr "Адресът на е-поща за контакт е задължителен"
#: actions/siteadminpanel.php:173
#, php-format
msgid "Unknown language \"%s\""
-msgstr ""
+msgstr "Непознат език \"%s\""
#: actions/siteadminpanel.php:180
msgid "Invalid snapshot report URL."
@@ -3239,7 +3212,7 @@ msgstr ""
#: actions/siteadminpanel.php:210
msgid "Minimum text limit is 140 characters."
-msgstr ""
+msgstr "Минималното ограничение на текста е 140 знака."
#: actions/siteadminpanel.php:216
msgid "Dupe limit must 1 or more seconds."
@@ -3247,12 +3220,11 @@ msgstr ""
#: actions/siteadminpanel.php:266
msgid "General"
-msgstr ""
+msgstr "Общи"
#: actions/siteadminpanel.php:269
-#, fuzzy
msgid "Site name"
-msgstr "Нова бележка"
+msgstr "Име на сайта"
#: actions/siteadminpanel.php:270
msgid "The name of your site, like \"Yourcompany Microblog\""
@@ -3275,9 +3247,8 @@ msgid "URL used for credits link in footer of each page"
msgstr ""
#: actions/siteadminpanel.php:284
-#, fuzzy
msgid "Contact email address for your site"
-msgstr "Нов адрес на е-поща за публикщуване в %s"
+msgstr "Адрес на е-поща за контакт със сайта"
#: actions/siteadminpanel.php:290
#, fuzzy
@@ -3286,16 +3257,15 @@ msgstr "Местоположение"
#: actions/siteadminpanel.php:301
msgid "Default timezone"
-msgstr ""
+msgstr "Часови пояс по подразбиране"
#: actions/siteadminpanel.php:302
msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Часови пояс по подразбиране за сайта (обикновено UTC)."
#: actions/siteadminpanel.php:308
-#, fuzzy
msgid "Default site language"
-msgstr "Предпочитан език"
+msgstr "Език по подразбиране за сайта"
#: actions/siteadminpanel.php:316
msgid "URLs"
@@ -3311,7 +3281,7 @@ msgstr ""
#: actions/siteadminpanel.php:323
msgid "Fancy URLs"
-msgstr ""
+msgstr "Кратки URL-адреси"
#: actions/siteadminpanel.php:325
msgid "Use fancy (more readable and memorable) URLs?"
@@ -3371,7 +3341,7 @@ msgstr ""
#: actions/siteadminpanel.php:366
msgid "Frequency"
-msgstr ""
+msgstr "Честота"
#: actions/siteadminpanel.php:367
msgid "Snapshots will be sent once every N web hits"
@@ -3434,9 +3404,8 @@ msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
#: actions/siteadminpanel.php:421 actions/useradminpanel.php:313
-#, fuzzy
msgid "Save site settings"
-msgstr "Настройки за аватар"
+msgstr "Запазване настройките на сайта"
#: actions/smssettings.php:58
msgid "SMS Settings"
@@ -3549,9 +3518,8 @@ msgid "Could not save subscription."
msgstr "Грешка при създаване на нов абонамент."
#: actions/subscribe.php:55
-#, fuzzy
msgid "Not a local user."
-msgstr "Няма такъв потребител"
+msgstr "Не е локален потребител."
#: actions/subscribe.php:69
#, fuzzy
@@ -3625,9 +3593,9 @@ msgid ""
msgstr ""
#: actions/subscriptions.php:123 actions/subscriptions.php:127
-#, fuzzy, php-format
+#, php-format
msgid "%s is not listening to anyone."
-msgstr "%1$s вече получава бележките ви в %2$s."
+msgstr "%s не получава ничии бележки."
#: actions/subscriptions.php:194
msgid "Jabber"
@@ -3708,9 +3676,8 @@ msgid "API method under construction."
msgstr "Методът в API все още се разработва."
#: actions/unblock.php:59
-#, fuzzy
msgid "You haven't blocked that user."
-msgstr "Вече сте блокирали този потребител."
+msgstr "Не сте блокирали този потребител."
#: actions/unsandbox.php:72
#, fuzzy
@@ -3718,9 +3685,8 @@ msgid "User is not sandboxed."
msgstr "Потребителят ви е блокирал."
#: actions/unsilence.php:72
-#, fuzzy
msgid "User is not silenced."
-msgstr "Потребителят няма профил."
+msgstr "Потребителят не е заглушен."
#: actions/unsubscribe.php:77
#, fuzzy
@@ -3806,9 +3772,8 @@ msgid "Invitations"
msgstr "Покани"
#: actions/useradminpanel.php:256
-#, fuzzy
msgid "Invitations enabled"
-msgstr "Поканите са изпратени."
+msgstr "Поканите са включени"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
@@ -3938,9 +3903,8 @@ msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Грешен вид изображение за '%s'"
#: actions/userbyid.php:70
-#, fuzzy
msgid "No ID."
-msgstr "Липсва ID"
+msgstr "Липсва ID."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
#, fuzzy
@@ -3968,9 +3932,9 @@ msgid "Search for more groups"
msgstr "Търсене за хора или бележки"
#: actions/usergroups.php:153
-#, fuzzy, php-format
+#, php-format
msgid "%s is not a member of any group."
-msgstr "Не членувате в тази група."
+msgstr "%s не членува в никоя група."
#: actions/usergroups.php:158
#, php-format
@@ -4051,14 +4015,14 @@ msgid "DB error inserting reply: %s"
msgstr "Грешка в базата от данни — отговор при вмъкването: %s"
#: classes/Notice.php:1371
-#, fuzzy, php-format
+#, php-format
msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
#: classes/User.php:368
-#, fuzzy, php-format
+#, php-format
msgid "Welcome to %1$s, @%2$s!"
-msgstr "Съобщение до %1$s в %2$s"
+msgstr "Добре дошли в %1$s, @%2$s!"
#: classes/User_group.php:380
msgid "Could not create group."
@@ -4132,14 +4096,12 @@ msgid "Connect"
msgstr "Свързване"
#: lib/action.php:436
-#, fuzzy
msgid "Connect to services"
-msgstr "Грешка при пренасочване към сървър: %s"
+msgstr "Свързване към услуги"
#: lib/action.php:440
-#, fuzzy
msgid "Change site configuration"
-msgstr "Абонаменти"
+msgstr "Промяна настройките на сайта"
#: lib/action.php:444 lib/subgroupnav.php:105
msgid "Invite"
@@ -4212,7 +4174,7 @@ msgstr "Въпроси"
#: lib/action.php:732
msgid "TOS"
-msgstr ""
+msgstr "Условия"
#: lib/action.php:735
msgid "Privacy"
@@ -4260,9 +4222,8 @@ msgstr ""
"licensing/licenses/agpl-3.0.html)."
#: lib/action.php:790
-#, fuzzy
msgid "Site content license"
-msgstr "Лиценз на програмата StatusNet"
+msgstr "Лиценз на съдържанието"
#: lib/action.php:799
msgid "All "
@@ -4289,9 +4250,8 @@ msgid "There was a problem with your session token."
msgstr "Имаше проблем със сесията ви в сайта."
#: lib/adminpanelaction.php:96
-#, fuzzy
msgid "You cannot make changes to this site."
-msgstr "Не може да изпращате съобщения до този потребител."
+msgstr "Не можете да променяте този сайт."
#: lib/adminpanelaction.php:195
#, fuzzy
@@ -4309,19 +4269,16 @@ msgid "Unable to delete design setting."
msgstr "Грешка при записване настройките за Twitter"
#: lib/adminpanelaction.php:300
-#, fuzzy
msgid "Basic site configuration"
-msgstr "Потвърждаване адреса на е-поща"
+msgstr "Основна настройка на сайта"
#: lib/adminpanelaction.php:303
-#, fuzzy
msgid "Design configuration"
-msgstr "Потвърждение за SMS"
+msgstr "Настройка на оформлението"
#: lib/adminpanelaction.php:306 lib/adminpanelaction.php:309
-#, fuzzy
msgid "Paths configuration"
-msgstr "Потвърждение за SMS"
+msgstr "Настройка на пътищата"
#: lib/attachmentlist.php:87
msgid "Attachments"
@@ -4329,12 +4286,11 @@ msgstr ""
#: lib/attachmentlist.php:265
msgid "Author"
-msgstr ""
+msgstr "Автор"
#: lib/attachmentlist.php:278
-#, fuzzy
msgid "Provider"
-msgstr "Профил"
+msgstr "Доставчик"
#: lib/attachmentnoticesection.php:67
msgid "Notices where this attachment appears"
@@ -4370,9 +4326,9 @@ msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
#: lib/command.php:99
-#, fuzzy, php-format
+#, php-format
msgid "Nudge sent to %s"
-msgstr "Побутването е изпратено"
+msgstr "Изпратено е побутване на %s"
#: lib/command.php:126
#, php-format
@@ -4381,6 +4337,9 @@ msgid ""
"Subscribers: %2$s\n"
"Notices: %3$s"
msgstr ""
+"Абонаменти: %1$s\n"
+"Абонати: %2$s\n"
+"Бележки: %3$s"
#: lib/command.php:152 lib/command.php:399 lib/command.php:460
msgid "Notice with that id does not exist"
@@ -4431,9 +4390,8 @@ msgid "Error sending direct message."
msgstr "Грешка при изпращане на прякото съобщение"
#: lib/command.php:422
-#, fuzzy
msgid "Cannot repeat your own notice"
-msgstr "Грешка при включване на уведомлението."
+msgstr "Не можете да повтаряте собствена бележка"
#: lib/command.php:427
#, fuzzy
@@ -4441,14 +4399,13 @@ msgid "Already repeated that notice"
msgstr "Изтриване на бележката"
#: lib/command.php:435
-#, fuzzy, php-format
+#, php-format
msgid "Notice from %s repeated"
-msgstr "Бележката е публикувана"
+msgstr "Бележката от %s е повторена"
#: lib/command.php:437
-#, fuzzy
msgid "Error repeating notice."
-msgstr "Проблем при записване на бележката."
+msgstr "Грешка при повтаряне на бележката."
#: lib/command.php:491
#, fuzzy, php-format
@@ -4457,14 +4414,13 @@ msgstr ""
"Съобщението е твърде дълго. Най-много може да е 140 знака, а сте въвели %d."
#: lib/command.php:500
-#, fuzzy, php-format
+#, php-format
msgid "Reply to %s sent"
-msgstr "Отговаряне на тази бележка"
+msgstr "Отговорът до %s е изпратен"
#: lib/command.php:502
-#, fuzzy
msgid "Error saving notice."
-msgstr "Проблем при записване на бележката."
+msgstr "Грешка при записване на бележката."
#: lib/command.php:556
msgid "Specify the name of the user to subscribe to"
@@ -4519,9 +4475,8 @@ msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
#: lib/command.php:685
-#, fuzzy
msgid "You are not subscribed to anyone."
-msgstr "Не сте абонирани за този профил"
+msgstr "Не сте абонирани за никого."
#: lib/command.php:687
msgid "You are subscribed to this person:"
@@ -4530,9 +4485,8 @@ msgstr[0] "Вече сте абонирани за следните потреб
msgstr[1] "Вече сте абонирани за следните потребители:"
#: lib/command.php:707
-#, fuzzy
msgid "No one is subscribed to you."
-msgstr "Грешка при абониране на друг потребител за вас."
+msgstr "Никой не е абониран за вас."
#: lib/command.php:709
msgid "This person is subscribed to you:"
@@ -4629,10 +4583,11 @@ msgid "Upload file"
msgstr "Качване на файл"
#: lib/designsettings.php:109
-#, fuzzy
msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "Можете да качите личен аватар тук."
+msgstr ""
+"Можете да качите лично изображение за фон. Максималната големина на файла е "
+"2MB."
#: lib/designsettings.php:418
msgid "Design defaults restored."
@@ -4680,9 +4635,8 @@ msgid "All"
msgstr "Всички"
#: lib/galleryaction.php:139
-#, fuzzy
msgid "Select tag to filter"
-msgstr "Изберете оператор"
+msgstr "Изберете етикет за филтриране"
#: lib/galleryaction.php:140
msgid "Tag"
@@ -4701,14 +4655,13 @@ msgid "URL of the homepage or blog of the group or topic"
msgstr "Адрес на страница, блог или профил в друг сайт на групата"
#: lib/groupeditform.php:168
-#, fuzzy
msgid "Describe the group or topic"
-msgstr "Опишете групата или темата й в до 140 букви"
+msgstr "Опишете групата или темата"
#: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
msgid "Describe the group or topic in %d characters"
-msgstr "Опишете групата или темата й в до 140 букви"
+msgstr "Опишете групата или темата в до %d букви"
#: lib/groupeditform.php:172
msgid "Description"
@@ -4730,14 +4683,13 @@ msgid "Group"
msgstr "Група"
#: lib/groupnav.php:101
-#, fuzzy
msgid "Blocked"
-msgstr "Блокиране"
+msgstr "Блокирани"
#: lib/groupnav.php:102
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked users"
-msgstr "Блокиране на потребителя"
+msgstr "%s блокирани потребителя"
#: lib/groupnav.php:108
#, php-format
@@ -4807,11 +4759,11 @@ msgstr "Неподдържан вид файл"
#: lib/imagefile.php:217
msgid "MB"
-msgstr ""
+msgstr "MB"
#: lib/imagefile.php:219
msgid "kB"
-msgstr ""
+msgstr "kB"
#: lib/jabber.php:191
#, php-format
@@ -4861,7 +4813,7 @@ msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s вече получава бележките ви в %2$s."
#: lib/mail.php:241
-#, fuzzy, php-format
+#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
"\n"
@@ -4876,10 +4828,14 @@ msgid ""
msgstr ""
"%1$s вече получава бележките ви в %2$s.\n"
"\n"
-"\t%3$s\n"
+"%3$s\n"
"\n"
+"%4$s%5$s%6$s\n"
"С уважение,\n"
-"%4$s.\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"Може да смените адреса и настройките за уведомяване по е-поща на %8$s\n"
#: lib/mail.php:254
#, php-format
@@ -5052,11 +5008,11 @@ msgstr ""
#: lib/mediafile.php:159
msgid "Missing a temporary folder."
-msgstr ""
+msgstr "Липсва временна папка."
#: lib/mediafile.php:162
msgid "Failed to write file to disk."
-msgstr ""
+msgstr "Грешка при записване файла на диска."
#: lib/mediafile.php:165
msgid "File upload stopped by extension."
@@ -5107,11 +5063,11 @@ msgstr "Какво става, %s?"
#: lib/noticeform.php:190
msgid "Attach"
-msgstr ""
+msgstr "Прикрепяне"
#: lib/noticeform.php:194
msgid "Attach a file"
-msgstr ""
+msgstr "Прикрепяне на файл"
#: lib/noticelist.php:420
#, php-format
@@ -5119,21 +5075,20 @@ msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:421
-#, fuzzy
msgid "N"
-msgstr "Не"
+msgstr "С"
#: lib/noticelist.php:421
msgid "S"
-msgstr ""
+msgstr "Ю"
#: lib/noticelist.php:422
msgid "E"
-msgstr ""
+msgstr "И"
#: lib/noticelist.php:422
msgid "W"
-msgstr ""
+msgstr "З"
#: lib/noticelist.php:428
msgid "at"
@@ -5144,9 +5099,8 @@ msgid "in context"
msgstr "в контекст"
#: lib/noticelist.php:548
-#, fuzzy
msgid "Repeated by"
-msgstr "Създаване"
+msgstr "Повторено от"
#: lib/noticelist.php:577
msgid "Reply to this notice"
@@ -5157,9 +5111,8 @@ msgid "Reply"
msgstr "Отговор"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Бележката е изтрита."
+msgstr "Бележката е повторена."
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5262,9 +5215,8 @@ msgid "All groups"
msgstr "Всички групи"
#: lib/profileformaction.php:123
-#, fuzzy
msgid "No return-to arguments."
-msgstr "Няма такъв документ."
+msgstr "Липсват аргументи return-to."
#: lib/profileformaction.php:137
msgid "Unimplemented method."
@@ -5276,7 +5228,7 @@ msgstr "Общ поток"
#: lib/publicgroupnav.php:82
msgid "User groups"
-msgstr ""
+msgstr "Групи"
#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
msgid "Recent tags"
@@ -5291,14 +5243,12 @@ msgid "Popular"
msgstr "Популярно"
#: lib/repeatform.php:107 lib/repeatform.php:132
-#, fuzzy
msgid "Repeat this notice"
-msgstr "Отговаряне на тази бележка"
+msgstr "Повтаряне на тази бележка"
#: lib/repeatform.php:132
-#, fuzzy
msgid "Repeat"
-msgstr "Обновяване"
+msgstr "Повтаряне"
#: lib/sandboxform.php:67
#, fuzzy
@@ -5317,7 +5267,7 @@ msgstr "Търсене"
#: lib/searchaction.php:126
msgid "Keyword(s)"
-msgstr ""
+msgstr "Ключови думи"
#: lib/searchaction.php:162
#, fuzzy
@@ -5450,18 +5400,16 @@ msgid "Unsubscribe"
msgstr "Отписване"
#: lib/userprofile.php:116
-#, fuzzy
msgid "Edit Avatar"
-msgstr "Аватар"
+msgstr "Редактиране на аватара"
#: lib/userprofile.php:236
msgid "User actions"
msgstr "Потребителски действия"
#: lib/userprofile.php:248
-#, fuzzy
msgid "Edit profile settings"
-msgstr "Настройки на профила"
+msgstr "Редактиране на профила"
#: lib/userprofile.php:249
msgid "Edit"
@@ -5479,59 +5427,59 @@ msgstr "Съобщение"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "преди няколко секунди"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "преди около минута"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "преди около %d минути"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "преди около час"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "преди около %d часа"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "преди около ден"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "преди около %d дни"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "преди около месец"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "преди около %d месеца"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "преди около година"
#: lib/webcolor.php:82
-#, fuzzy, php-format
+#, php-format
msgid "%s is not a valid color!"
-msgstr "Адресът на личната страница не е правилен URL."
+msgstr "%s не е допустим цвят!"
#: lib/webcolor.php:123
#, php-format
msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
+msgstr "%s не е допустим цвят! Използвайте 3 или 6 шестнадесетични знака."
#: scripts/maildaemon.php:48
msgid "Could not parse message."
diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po
index 099a1f91b..30100d762 100644
--- a/locale/ca/LC_MESSAGES/statusnet.po
+++ b/locale/ca/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:51:52+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:25+0000\n"
"Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n"
@@ -258,7 +258,9 @@ msgstr "No has escrit cap usuari receptor."
#: actions/apidirectmessagenew.php:150
msgid "Can't send direct messages to users who aren't your friend."
-msgstr "No pots enviar missatges directes a usuaris que no siguin amics teus."
+msgstr ""
+"No es pot enviar missatges directes a usuaris que no siguin els vostres "
+"amics."
#: actions/apifavoritecreate.php:108 actions/apifavoritedestroy.php:109
#: actions/apistatusesdestroy.php:113
@@ -274,9 +276,8 @@ msgid "Could not create favorite."
msgstr "No es pot crear favorit."
#: actions/apifavoritedestroy.php:122
-#, fuzzy
msgid "That status is not a favorite!"
-msgstr "Aquesta notificació no és un favorit!"
+msgstr "L'estat no és un preferit!"
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
@@ -371,9 +372,9 @@ msgstr "L'àlies no és vàlid «%s»"
#: actions/apigroupcreate.php:273 actions/editgroup.php:228
#: actions/newgroup.php:172
-#, fuzzy, php-format
+#, php-format
msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Aquest sobrenom ja existeix. Prova un altre. "
+msgstr "L'àlies «%s» ja està en ús. Proveu-ne un altre."
#: actions/apigroupcreate.php:286 actions/editgroup.php:234
#: actions/newgroup.php:178
@@ -387,18 +388,17 @@ msgid "Group not found!"
msgstr "No s'ha trobat el grup!"
#: actions/apigroupjoin.php:110
-#, fuzzy
msgid "You are already a member of that group."
-msgstr "Ja ets membre d'aquest grup"
+msgstr "Ja sou membre del grup."
#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
#: actions/apigroupjoin.php:138
-#, fuzzy, php-format
+#, php-format
msgid "Could not join user %s to group %s."
-msgstr "No s'ha pogut afegir l'usuari %s al grup %s"
+msgstr "No s'ha pogut afegir l'usuari %s al grup %s."
#: actions/apigroupleave.php:114
msgid "You are not a member of this group."
@@ -425,9 +425,9 @@ msgid "%s groups"
msgstr "%s grups"
#: actions/apigrouplistall.php:94
-#, fuzzy, php-format
+#, php-format
msgid "groups on %s"
-msgstr "Accions del grup"
+msgstr "grups sobre %s"
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -462,9 +462,9 @@ msgstr "No s'ha trobat cap estatus amb la ID trobada."
#: actions/apistatusesupdate.php:157 actions/newnotice.php:155
#: scripts/maildaemon.php:71
-#, fuzzy, php-format
+#, php-format
msgid "That's too long. Max notice size is %d chars."
-msgstr "Massa llarg. La longitud màxima és de 140 caràcters."
+msgstr "Massa llarg. La longitud màxima és de %d caràcters."
#: actions/apistatusesupdate.php:198
msgid "Not found"
@@ -482,7 +482,7 @@ msgstr "El format no està implementat."
#: actions/apitimelinefavorites.php:108
#, php-format
msgid "%s / Favorites from %s"
-msgstr "%s / Favorits de %s"
+msgstr "%s / Preferits de %s"
#: actions/apitimelinefavorites.php:120
#, php-format
@@ -524,7 +524,7 @@ msgstr "%s notificacions de tots!"
#: actions/apitimelineretweetedbyme.php:112
#, php-format
msgid "Repeated by %s"
-msgstr ""
+msgstr "Repetit per %s"
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
@@ -551,9 +551,8 @@ msgid "Not found."
msgstr "No s'ha trobat."
#: actions/attachment.php:73
-#, fuzzy
msgid "No such attachment."
-msgstr "No existeix aquest document."
+msgstr "No existeix l'adjunció."
#: actions/avatarbynickname.php:59 actions/grouprss.php:91
#: actions/leavegroup.php:76
@@ -574,9 +573,10 @@ msgid "Avatar"
msgstr "Avatar"
#: actions/avatarsettings.php:78
-#, fuzzy, php-format
+#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Pots pujar el teu avatar personal."
+msgstr ""
+"Podeu pujar el vostre avatar personal. La mida màxima del fitxer és %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/grouplogo.php:178 actions/remotesubscribe.php:191
@@ -597,20 +597,20 @@ msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
#: actions/grouplogo.php:210 actions/grouplogo.php:271
msgid "Preview"
-msgstr "Previsualitzar"
+msgstr "Vista prèvia"
#: actions/avatarsettings.php:149 lib/deleteuserform.php:66
#: lib/noticelist.php:603
msgid "Delete"
-msgstr "Eliminar"
+msgstr "Suprimeix"
#: actions/avatarsettings.php:166 actions/grouplogo.php:233
msgid "Upload"
-msgstr "Pujar"
+msgstr "Puja"
#: actions/avatarsettings.php:231 actions/grouplogo.php:286
msgid "Crop"
-msgstr "Crop"
+msgstr "Retalla"
#: actions/avatarsettings.php:268 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75
@@ -711,14 +711,14 @@ msgid "No such group"
msgstr "No existeix tal grup"
#: actions/blockedfromgroup.php:90
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked profiles"
-msgstr "Perfil de l'usuari"
+msgstr "%s perfils blocats"
#: actions/blockedfromgroup.php:93
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked profiles, page %d"
-msgstr "%s i amics, pàgina %d"
+msgstr "%s perfils blocats, pàgina %d"
#: actions/blockedfromgroup.php:108
#, fuzzy
@@ -732,11 +732,11 @@ msgstr "Ha fallat el desbloqueig d'usuari."
#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
msgid "Unblock"
-msgstr "Desbloquejar"
+msgstr "Desbloca"
#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
msgid "Unblock this user"
-msgstr "Desbloquejar aquest usuari"
+msgstr "Desbloca l'usuari"
#: actions/bookmarklet.php:50
msgid "Post to "
@@ -802,7 +802,7 @@ msgstr "Avisos"
#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
-msgstr "No connectat."
+msgstr "No heu iniciat una sessió."
#: actions/deletenotice.php:71
msgid "Can't delete this notice."
@@ -1066,11 +1066,11 @@ msgstr "Cancel·la"
#: actions/emailsettings.php:121
msgid "Email Address"
-msgstr "Direcció de correu electrònic"
+msgstr "Adreça electrònica"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
-msgstr "Correu electrònic, com Email address, like \"UserName@example.org\""
+msgstr "Adreça electrònica, com ara «nomusuari@example.org»"
#: actions/emailsettings.php:126 actions/imsettings.php:133
#: actions/smssettings.php:145
@@ -1134,27 +1134,27 @@ msgstr "Publica una MicroID per al meu correu electrònic."
#: actions/emailsettings.php:302 actions/imsettings.php:264
#: actions/othersettings.php:180 actions/smssettings.php:284
msgid "Preferences saved."
-msgstr "Preferències guardades."
+msgstr "S'han desat les preferències."
#: actions/emailsettings.php:320
msgid "No email address."
-msgstr "No hi ha cap direcció de correu electrònic."
+msgstr "No hi ha cap adreça electrònica."
#: actions/emailsettings.php:327
msgid "Cannot normalize that email address"
-msgstr "No es pot normalitzar aquesta direcció de correu electrònic"
+msgstr "No es pot normalitzar l'adreça electrònica."
#: actions/emailsettings.php:331 actions/siteadminpanel.php:158
msgid "Not a valid email address"
-msgstr "No és una direcció de correu electrònic vàlida."
+msgstr "No és una adreça electrònica vàlida."
#: actions/emailsettings.php:334
msgid "That is already your email address."
-msgstr "Aquest ja és el teu correu electrònic."
+msgstr "Ja és la vostra adreça electrònica."
#: actions/emailsettings.php:337
msgid "That email address already belongs to another user."
-msgstr "Aquest correu electrònic pertany a un altre usuari."
+msgstr "L'adreça electrònica ja pertany a un altre usuari."
#: actions/emailsettings.php:353 actions/imsettings.php:317
#: actions/smssettings.php:337
@@ -1271,38 +1271,33 @@ msgid "Featured users, page %d"
msgstr "Usuaris destacats, pàgina %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "Una selecció d'alguns dels millors usuaris a %s"
#: actions/file.php:34
-#, fuzzy
msgid "No notice ID."
-msgstr "Nou avís"
+msgstr "Cap ID d'avís."
#: actions/file.php:38
-#, fuzzy
msgid "No notice."
-msgstr "Nou avís"
+msgstr "Cap avís."
#: actions/file.php:42
-#, fuzzy
msgid "No attachments."
-msgstr "Sense adjuncions"
+msgstr "Cap adjunció."
#: actions/file.php:51
-#, fuzzy
msgid "No uploaded attachments."
-msgstr "No s'ha pujat cap adjunció"
+msgstr "No s'ha pujat cap adjunt."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
msgstr "Resposta inesperada!"
#: actions/finishremotesubscribe.php:80
-#, fuzzy
msgid "User being listened to does not exist."
-msgstr "L'usuari que vols seguir no existeix."
+msgstr "L'usuari que s'escolta no existeix."
#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
msgid "You can use the local subscription!"
@@ -1364,7 +1359,7 @@ msgstr "No s'ha especificat cap grup."
#: actions/groupblock.php:91
msgid "Only an admin can block group members."
-msgstr ""
+msgstr "Només un administrador pot blocar membres del grup."
#: actions/groupblock.php:95
#, fuzzy
@@ -1372,14 +1367,12 @@ msgid "User is already blocked from group."
msgstr "Un usuari t'ha bloquejat."
#: actions/groupblock.php:100
-#, fuzzy
msgid "User is not a member of group."
-msgstr "No ets membre d'aquest grup."
+msgstr "L'usuari no és membre del grup."
#: actions/groupblock.php:136 actions/groupmembers.php:314
-#, fuzzy
msgid "Block user from group"
-msgstr "Usuari bloquejat."
+msgstr "Bloca l'usuari del grup"
#: actions/groupblock.php:162
#, php-format
@@ -1388,16 +1381,16 @@ msgid ""
"be removed from the group, unable to post, and unable to subscribe to the "
"group in the future."
msgstr ""
+"Esteu segur que voleu blocar l'usuari «%s» del grup «%s»? Se suprimiran del "
+"grup, i no podran enviar-hi res ni subscriure-s'hi en el futur."
#: actions/groupblock.php:178
-#, fuzzy
msgid "Do not block this user from this group"
-msgstr "La llista dels usuaris d'aquest grup."
+msgstr "No bloquis l'usuari del grup"
#: actions/groupblock.php:179
-#, fuzzy
msgid "Block this user from this group"
-msgstr "La llista dels usuaris d'aquest grup."
+msgstr "Bloca l'usuari del grup"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
@@ -1408,9 +1401,8 @@ msgid "No ID"
msgstr "No ID"
#: actions/groupdesignsettings.php:68
-#, fuzzy
msgid "You must be logged in to edit a group."
-msgstr "Has d'haver entrat per crear un grup."
+msgstr "Heu d'iniciar una sessió per editar un grup."
#: actions/groupdesignsettings.php:141
msgid "Group design"
@@ -1424,9 +1416,8 @@ msgstr ""
#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
msgid "Couldn't update your design."
-msgstr "No s'ha pogut actualitzar l'usuari."
+msgstr "No s'ha pogut actualitzar el vostre disseny."
#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
@@ -1488,23 +1479,21 @@ msgid "Block"
msgstr "Bloca"
#: actions/groupmembers.php:441
-#, fuzzy
msgid "Make user an admin of the group"
-msgstr "Has de ser admin per editar aquest grup"
+msgstr "Fes l'usuari un administrador del grup"
#: actions/groupmembers.php:473
-#, fuzzy
msgid "Make Admin"
-msgstr "Admin"
+msgstr "Fes-lo administrador"
#: actions/groupmembers.php:473
msgid "Make this user an admin"
msgstr "Fes l'usuari administrador"
#: actions/grouprss.php:133
-#, fuzzy, php-format
+#, php-format
msgid "Updates from members of %1$s on %2$s!"
-msgstr "Actualitzacions de %1$s a %2$s!"
+msgstr "Actualitzacions dels membres de %1$s el %2$s!"
#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
@@ -1528,7 +1517,7 @@ msgstr ""
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
-msgstr "Crear nou grup"
+msgstr "Crea un grup nou"
#: actions/groupsearch.php:52
#, fuzzy, php-format
@@ -1567,13 +1556,12 @@ msgid "Only an admin can unblock group members."
msgstr "Només un administrador pot desblocar els membres del grup."
#: actions/groupunblock.php:95
-#, fuzzy
msgid "User is not blocked from group."
-msgstr "Un usuari t'ha bloquejat."
+msgstr "L'usuari no està blocat del grup."
#: actions/groupunblock.php:128 actions/unblock.php:77
msgid "Error removing the block."
-msgstr "Error al moure el block."
+msgstr "S'ha produït un error en suprimir el bloc."
#: actions/imsettings.php:59
msgid "IM Settings"
@@ -1589,9 +1577,8 @@ msgstr ""
"GTalk. Configura la teva adreça i opcions a sota."
#: actions/imsettings.php:89
-#, fuzzy
msgid "IM is not available."
-msgstr "Aquesta pàgina no està disponible en "
+msgstr "La MI no és disponible."
#: actions/imsettings.php:106
msgid "Current confirmed Jabber/GTalk address."
@@ -1623,11 +1610,11 @@ msgstr ""
#: actions/imsettings.php:143
msgid "Send me notices through Jabber/GTalk."
-msgstr "Enviar-me avisos per Jabber/GTalk."
+msgstr "Envia'm avisos per Jabber/GTalk."
#: actions/imsettings.php:148
msgid "Post a notice when my Jabber/GTalk status changes."
-msgstr "Enviar un avís quan el meu estat Jabber/GTalk canvii."
+msgstr "Envia'm un avís quan el meu estat Jabber/GTalk canvii."
#: actions/imsettings.php:153
msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
@@ -1945,7 +1932,7 @@ msgstr "Només un administrador poc fer a un altre usuari administrador."
#: actions/makeadmin.php:95
#, php-format
msgid "%s is already an admin for group \"%s\"."
-msgstr ""
+msgstr "%s ja és un administrador del grup «%s»."
#: actions/makeadmin.php:132
#, php-format
@@ -1955,7 +1942,7 @@ msgstr ""
#: actions/makeadmin.php:145
#, php-format
msgid "Can't make %s an admin for group %s"
-msgstr ""
+msgstr "No es pot fer %s un administrador del grup %s"
#: actions/microsummary.php:69
msgid "No current status"
@@ -2045,14 +2032,15 @@ msgid ""
msgstr ""
#: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
msgid "Updates with \"%s\""
-msgstr "Actualitzacions de %1$s a %2$s!"
+msgstr "Actualitzacions amb «%s»"
#: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Totes les actualitzacions que corresponen a la frase a cercar \"%s\" "
+msgstr ""
+"Les actualitzacions que coincideixen amb el terme de cerca «%1$s» el %2$s!"
#: actions/nudge.php:85
msgid ""
@@ -2120,9 +2108,8 @@ msgid "Automatic shortening service to use."
msgstr "Servei d'auto-escurçament a utilitzar."
#: actions/othersettings.php:122
-#, fuzzy
msgid "View profile designs"
-msgstr "Configuració del perfil"
+msgstr "Visualitza els dissenys de perfil"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
@@ -2231,7 +2218,7 @@ msgstr ""
#: actions/pathsadminpanel.php:152
#, php-format
msgid "Background directory not writable: %s"
-msgstr ""
+msgstr "No es pot escriure al directori de fons: %s"
#: actions/pathsadminpanel.php:160
#, php-format
@@ -2273,43 +2260,39 @@ msgstr "Camí dels temes"
#: actions/pathsadminpanel.php:240
msgid "Theme directory"
-msgstr ""
+msgstr "Directori de temes"
#: actions/pathsadminpanel.php:247
-#, fuzzy
msgid "Avatars"
-msgstr "Avatar"
+msgstr "Avatars"
#: actions/pathsadminpanel.php:252
-#, fuzzy
msgid "Avatar server"
-msgstr "Configuració de l'avatar"
+msgstr "Servidor d'avatars"
#: actions/pathsadminpanel.php:256
-#, fuzzy
msgid "Avatar path"
-msgstr "Avatar actualitzat."
+msgstr "Camí de l'avatar"
#: actions/pathsadminpanel.php:260
-#, fuzzy
msgid "Avatar directory"
-msgstr "Avatar actualitzat."
+msgstr "Directori d'avatars"
#: actions/pathsadminpanel.php:269
msgid "Backgrounds"
-msgstr ""
+msgstr "Fons"
#: actions/pathsadminpanel.php:273
msgid "Background server"
-msgstr ""
+msgstr "Servidor de fons"
#: actions/pathsadminpanel.php:277
msgid "Background path"
-msgstr ""
+msgstr "Camí dels fons"
#: actions/pathsadminpanel.php:281
msgid "Background directory"
-msgstr ""
+msgstr "Directori de fons"
#: actions/pathsadminpanel.php:297
#, fuzzy
@@ -2384,9 +2367,9 @@ msgid "URL of your homepage, blog, or profile on another site"
msgstr "URL del teu web, blog o perfil en un altre lloc"
#: actions/profilesettings.php:122 actions/register.php:460
-#, fuzzy, php-format
+#, php-format
msgid "Describe yourself and your interests in %d chars"
-msgstr "Explica'ns alguna cosa sobre tu i els teus interessos en 140 caràcters"
+msgstr "Descriviu qui sou i els vostres interessos en %d caràcters"
#: actions/profilesettings.php:125 actions/register.php:463
#, fuzzy
@@ -2445,9 +2428,9 @@ msgstr ""
"per no-humans)"
#: actions/profilesettings.php:221 actions/register.php:223
-#, fuzzy, php-format
+#, php-format
msgid "Bio is too long (max %d chars)."
-msgstr "La biografia és massa llarga (màx. 140 caràcters)."
+msgstr "La biografia és massa llarga (màx. %d caràcters)."
#: actions/profilesettings.php:228 actions/siteadminpanel.php:165
msgid "Timezone not selected."
@@ -2497,19 +2480,16 @@ msgid "Public timeline"
msgstr "Línia temporal pública"
#: actions/public.php:151
-#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
-msgstr "Feed del flux públic"
+msgstr "Flux de canal públic (RSS 1.0)"
#: actions/public.php:155
-#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
-msgstr "Feed del flux públic"
+msgstr "Flux de canal públic (RSS 2.0)"
#: actions/public.php:159
-#, fuzzy
msgid "Public Stream Feed (Atom)"
-msgstr "Feed del flux públic"
+msgstr "Flux de canal públic (Atom)"
#: actions/public.php:179
#, php-format
@@ -2520,13 +2500,15 @@ msgstr ""
#: actions/public.php:182
msgid "Be the first to post!"
-msgstr ""
+msgstr "Sigueu el primer en escriure-hi!"
#: actions/public.php:186
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
+"Per què no [registreu un compte](%%action.register%%) i sou el primer en "
+"escriure-hi!"
#: actions/public.php:233
#, php-format
@@ -2563,7 +2545,7 @@ msgstr ""
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
-msgstr ""
+msgstr "Sigueu el primer en escriure'n un!"
#: actions/publictagcloud.php:75
#, php-format
@@ -2612,7 +2594,7 @@ msgstr ""
#: actions/recoverpassword.php:158
msgid "You have been identified. Enter a new password below. "
-msgstr ""
+msgstr "Esteu identificat. Introduïu una contrasenya nova a continuació. "
#: actions/recoverpassword.php:188
msgid "Password recovery"
@@ -2620,7 +2602,7 @@ msgstr "Recuperació de la contrasenya"
#: actions/recoverpassword.php:191
msgid "Nickname or email address"
-msgstr ""
+msgstr "Sobrenom o adreça electrònica"
#: actions/recoverpassword.php:193
msgid "Your nickname on this server, or your registered email address."
@@ -2702,12 +2684,11 @@ msgstr "Nova contrasenya guardada correctament. Has iniciat una sessió."
#: actions/register.php:85 actions/register.php:189 actions/register.php:404
msgid "Sorry, only invited people can register."
-msgstr "Ho senti, però només la gent convidada pot registrar-se."
+msgstr "Ho sentim, però només la gent convidada pot registrar-s'hi."
#: actions/register.php:92
-#, fuzzy
msgid "Sorry, invalid invitation code."
-msgstr "Error amb el codi de confirmació."
+msgstr "El codi d'invitació no és vàlid."
#: actions/register.php:112
msgid "Registration successful"
@@ -2716,7 +2697,7 @@ msgstr "Registre satisfactori"
#: actions/register.php:114 actions/register.php:502 lib/action.php:455
#: lib/logingroupnav.php:85
msgid "Register"
-msgstr "Registrar-se"
+msgstr "Registre"
#: actions/register.php:135
msgid "Registration not allowed."
@@ -2743,6 +2724,8 @@ msgid ""
"With this form you can create a new account. You can then post notices and "
"link up to friends and colleagues. "
msgstr ""
+"Amb aquest formulari, podeu crear un compte nou. Podeu enviar avisos i "
+"enllaçar a amics i col·legues. "
#: actions/register.php:424
msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
@@ -2777,7 +2760,7 @@ msgstr "El meu text i els meus fitxers estan disponibles sota "
#: actions/register.php:495
msgid "Creative Commons Attribution 3.0"
-msgstr ""
+msgstr "Creative Commons Atribució 3.0"
#: actions/register.php:496
#, fuzzy
@@ -2909,14 +2892,12 @@ msgid "You already repeated that notice."
msgstr "Ja heu blocat l'usuari."
#: actions/repeat.php:114 lib/noticelist.php:621
-#, fuzzy
msgid "Repeated"
-msgstr "S'ha creat"
+msgstr "Repetit"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "S'ha creat"
+msgstr "Repetit!"
#: actions/replies.php:125 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
@@ -2966,9 +2947,9 @@ msgid ""
msgstr ""
#: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s on %2$s!"
-msgstr "Missatge per a %1$s a %2$s"
+msgstr "Respostes a %1$s el %2$s!"
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
@@ -2987,7 +2968,7 @@ msgstr "%s notificacions favorites, pàgina %d"
#: actions/showfavorites.php:132
msgid "Could not retrieve favorite notices."
-msgstr "No s'ha pogut recuperar els avisos de favorits."
+msgstr "No s'han pogut recuperar els avisos preferits."
#: actions/showfavorites.php:170
#, php-format
@@ -3027,7 +3008,7 @@ msgstr ""
#: actions/showfavorites.php:242
msgid "This is a way to share what you like."
-msgstr ""
+msgstr "És una forma de compartir allò que us agrada."
#: actions/showgroup.php:82 lib/groupnav.php:86
#, php-format
@@ -3055,7 +3036,7 @@ msgstr "Avisos"
#: actions/showgroup.php:284 lib/groupeditform.php:184
msgid "Aliases"
-msgstr ""
+msgstr "Àlies"
#: actions/showgroup.php:293
msgid "Group actions"
@@ -3224,27 +3205,25 @@ msgstr ""
"ca.wikipedia.org/wiki/Microblogging) "
#: actions/showstream.php:313
-#, fuzzy, php-format
+#, php-format
msgid "Repeat of %s"
-msgstr "Respostes a %s"
+msgstr "Repetició de %s"
#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
msgid "You cannot silence users on this site."
-msgstr "No pots enviar un missatge a aquest usuari."
+msgstr "No podeu silenciar els usuaris d'aquest lloc."
#: actions/silence.php:72
-#, fuzzy
msgid "User is already silenced."
-msgstr "Un usuari t'ha bloquejat."
+msgstr "L'usuari ja està silenciat."
#: actions/siteadminpanel.php:69
msgid "Basic settings for this StatusNet site."
-msgstr ""
+msgstr "Paràmetres bàsic d'aquest lloc basat en l'StatusNet."
#: actions/siteadminpanel.php:147
msgid "Site name must have non-zero length."
-msgstr ""
+msgstr "El nom del lloc ha de tenir una longitud superior a zero."
#: actions/siteadminpanel.php:155
msgid "You must have a valid contact email address"
@@ -3253,7 +3232,7 @@ msgstr "Heu de tenir una adreça electrònica de contacte vàlida"
#: actions/siteadminpanel.php:173
#, php-format
msgid "Unknown language \"%s\""
-msgstr ""
+msgstr "Llengua desconeguda «%s»"
#: actions/siteadminpanel.php:180
msgid "Invalid snapshot report URL."
@@ -3293,7 +3272,7 @@ msgstr "Nom del lloc"
#: actions/siteadminpanel.php:270
msgid "The name of your site, like \"Yourcompany Microblog\""
-msgstr ""
+msgstr "El nom del vostre lloc, com ara «El microblog de l'empresa»"
#: actions/siteadminpanel.php:274
msgid "Brought by"
@@ -3317,22 +3296,20 @@ msgid "Contact email address for your site"
msgstr "Nou correu electrònic per publicar a %s"
#: actions/siteadminpanel.php:290
-#, fuzzy
msgid "Local"
-msgstr "Vistes locals"
+msgstr "Local"
#: actions/siteadminpanel.php:301
msgid "Default timezone"
-msgstr ""
+msgstr "Fus horari per defecte"
#: actions/siteadminpanel.php:302
msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Fus horari per defecte del lloc; normalment UTC."
#: actions/siteadminpanel.php:308
-#, fuzzy
msgid "Default site language"
-msgstr "Preferència d'idioma"
+msgstr "Llengua per defecte del lloc"
#: actions/siteadminpanel.php:316
msgid "URLs"
@@ -3367,18 +3344,16 @@ msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
#: actions/siteadminpanel.php:340
-#, fuzzy
msgid "Invite only"
-msgstr "Invitar"
+msgstr "Només invitació"
#: actions/siteadminpanel.php:342
msgid "Make registration invitation only."
-msgstr ""
+msgstr "Fes que el registre sigui només amb invitacions."
#: actions/siteadminpanel.php:346
-#, fuzzy
msgid "Closed"
-msgstr "Bloquejar"
+msgstr "Tancat"
#: actions/siteadminpanel.php:348
msgid "Disable new registrations."
@@ -3466,11 +3441,13 @@ msgstr ""
#: actions/siteadminpanel.php:407
msgid "Dupe limit"
-msgstr ""
+msgstr "Límit de duplicats"
#: actions/siteadminpanel.php:407
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+"Quant de temps cal que esperin els usuaris (en segons) per enviar el mateix "
+"de nou."
#: actions/siteadminpanel.php:421 actions/useradminpanel.php:313
#, fuzzy
@@ -3489,9 +3466,8 @@ msgstr ""
"%%."
#: actions/smssettings.php:91
-#, fuzzy
msgid "SMS is not available."
-msgstr "Aquesta pàgina no està disponible en "
+msgstr "L'SMS no és disponible."
#: actions/smssettings.php:112
msgid "Current confirmed SMS-enabled phone number."
@@ -3621,6 +3597,8 @@ msgid ""
"You have no subscribers. Try subscribing to people you know and they might "
"return the favor"
msgstr ""
+"No teniu cap subscriptor. Proveu de subscriure-us a gent que coneixeu i ells "
+"podrien tornar-vos així el favor"
#: actions/subscribers.php:110
#, php-format
@@ -3664,9 +3642,9 @@ msgid ""
msgstr ""
#: actions/subscriptions.php:123 actions/subscriptions.php:127
-#, fuzzy, php-format
+#, php-format
msgid "%s is not listening to anyone."
-msgstr "%1$s ara està escoltant "
+msgstr "%s no escolta a ningú."
#: actions/subscriptions.php:194
msgid "Jabber"
@@ -3752,9 +3730,8 @@ msgid "API method under construction."
msgstr "Mètode API en construcció."
#: actions/unblock.php:59
-#, fuzzy
msgid "You haven't blocked that user."
-msgstr "Ja havies bloquejat aquest usuari."
+msgstr "No heu blocat l'usuari."
#: actions/unsandbox.php:72
#, fuzzy
@@ -3831,26 +3808,20 @@ msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
#: actions/useradminpanel.php:241
-#, fuzzy
msgid "Default subscription"
-msgstr "Totes les subscripcions"
+msgstr "Subscripció per defecte"
#: actions/useradminpanel.php:242
-#, fuzzy
msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Automàticament subscriure's a qualsevol que ho estigui a tu mateix (ideal "
-"per no-humans)"
+msgstr "Subscriviu automàticament els usuaris nous a aquest usuari."
#: actions/useradminpanel.php:251
-#, fuzzy
msgid "Invitations"
-msgstr "Invitació(ons) enviada(des)"
+msgstr "Invitacions"
#: actions/useradminpanel.php:256
-#, fuzzy
msgid "Invitations enabled"
-msgstr "Invitació(ons) enviada(des)"
+msgstr "S'han habilitat les invitacions"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
@@ -3870,7 +3841,7 @@ msgstr ""
#: actions/useradminpanel.php:276
msgid "Session debugging"
-msgstr ""
+msgstr "Depuració de la sessió"
#: actions/useradminpanel.php:278
msgid "Turn on debugging output for sessions."
@@ -3909,9 +3880,8 @@ msgid "Reject"
msgstr "Rebutja"
#: actions/userauthorization.php:212
-#, fuzzy
msgid "Reject this subscription"
-msgstr "%s subscripcions"
+msgstr "Rebutja la subscripció"
#: actions/userauthorization.php:225
msgid "No authorization request!"
@@ -3987,19 +3957,20 @@ msgid "No ID."
msgstr "No ID"
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
msgid "Profile design"
-msgstr "Configuració del perfil"
+msgstr "Disseny del perfil"
#: actions/userdesignsettings.php:87 lib/designsettings.php:76
msgid ""
"Customize the way your profile looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Personalitzeu l'aspecte del vostre perfil amb una imatge de fons o una "
+"paleta de colors de la vostra elecció."
#: actions/userdesignsettings.php:282
msgid "Enjoy your hotdog!"
-msgstr ""
+msgstr "Gaudiu de l'entrepà!"
#: actions/usergroups.php:64
#, php-format
@@ -4632,7 +4603,7 @@ msgstr ""
#: lib/common.php:201
msgid "You may wish to run the installer to fix this."
-msgstr ""
+msgstr "Podeu voler executar l'instal·lador per a corregir-ho."
#: lib/common.php:202
msgid "Go to the installer."
@@ -4655,9 +4626,8 @@ msgid "Database error"
msgstr "Error de la base de dades"
#: lib/designsettings.php:105
-#, fuzzy
msgid "Upload file"
-msgstr "Pujar"
+msgstr "Puja un fitxer"
#: lib/designsettings.php:109
#, fuzzy
@@ -4667,7 +4637,7 @@ msgstr "Pots pujar el teu avatar personal."
#: lib/designsettings.php:418
msgid "Design defaults restored."
-msgstr ""
+msgstr "S'han restaurat els paràmetres de disseny per defecte."
#: lib/disfavorform.php:114 lib/disfavorform.php:140
msgid "Disfavor this notice"
@@ -4679,27 +4649,27 @@ msgstr "Fer favorita aquesta notificació"
#: lib/favorform.php:140
msgid "Favor"
-msgstr "Favorit"
+msgstr "Preferit"
#: lib/feed.php:85
msgid "RSS 1.0"
-msgstr ""
+msgstr "RSS 1.0"
#: lib/feed.php:87
msgid "RSS 2.0"
-msgstr ""
+msgstr "RSS 2.0"
#: lib/feed.php:89
msgid "Atom"
-msgstr ""
+msgstr "Atom"
#: lib/feed.php:91
msgid "FOAF"
-msgstr ""
+msgstr "FOAF"
#: lib/feedlist.php:64
msgid "Export data"
-msgstr "Exportar data"
+msgstr "Exportació de les dades"
#: lib/galleryaction.php:121
msgid "Filter tags"
@@ -5329,9 +5299,8 @@ msgid "Popular"
msgstr "Popular"
#: lib/repeatform.php:107 lib/repeatform.php:132
-#, fuzzy
msgid "Repeat this notice"
-msgstr "respondre a aquesta nota"
+msgstr "Repeteix l'avís"
#: lib/repeatform.php:132
#, fuzzy
@@ -5409,7 +5378,7 @@ msgstr "%s grups són membres de"
#: lib/subs.php:52
msgid "Already subscribed!"
-msgstr ""
+msgstr "Ja hi esteu subscrit!"
#: lib/subs.php:56
msgid "User has blocked you."
@@ -5512,47 +5481,47 @@ msgstr "Missatge"
msgid "Moderate"
msgstr "Modera"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "fa pocs segons"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "fa un minut"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "fa %d minuts"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "fa una hora"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "fa %d hores"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "fa un dia"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "fa %d dies"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "fa un mes"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "fa %d mesos"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "fa un any"
@@ -5564,7 +5533,7 @@ msgstr "%s no és un color vàlid!"
#: lib/webcolor.php:123
#, php-format
msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
+msgstr "%s no és un color vàlid! Feu servir 3 o 6 caràcters hexadecimals."
#: scripts/maildaemon.php:48
msgid "Could not parse message."
@@ -5576,8 +5545,8 @@ msgstr "Usuari no registrat."
#: scripts/maildaemon.php:57
msgid "Sorry, that is not your incoming email address."
-msgstr "Perdó, aquest no és el teu correu electrònic entrant permès."
+msgstr "Ho sentim, aquesta no és la vostra adreça electrònica d'entrada."
#: scripts/maildaemon.php:61
msgid "Sorry, no incoming email allowed."
-msgstr "Perdó, no hi ha un correu electrònic entrant permès."
+msgstr "Ho sentim, no s'hi permet correu d'entrada."
diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po
index b224ef0a1..66702d7e5 100644
--- a/locale/cs/LC_MESSAGES/statusnet.po
+++ b/locale/cs/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:51:55+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:28+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n"
@@ -1268,7 +1268,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5456,47 +5456,47 @@ msgstr "Zpráva"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "před pár sekundami"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "asi před minutou"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "asi před %d minutami"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "asi před hodinou"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "asi před %d hodinami"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "asi přede dnem"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "před %d dny"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "asi před měsícem"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "asi před %d mesíci"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "asi před rokem"
diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po
index 8e051779f..aace34db8 100644
--- a/locale/de/LC_MESSAGES/statusnet.po
+++ b/locale/de/LC_MESSAGES/statusnet.po
@@ -1,6 +1,7 @@
# Translation of StatusNet to German
#
# Author@translatewiki.net: Bavatar
+# Author@translatewiki.net: Lutzgh
# Author@translatewiki.net: March
# Author@translatewiki.net: Umherirrender
# --
@@ -10,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:51:58+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:31+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: out-statusnet\n"
@@ -84,6 +85,8 @@ msgstr "Feed der Freunde von %s (Atom)"
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
+"Dies ist die Zeitleiste für %s und Freunde aber bisher hat niemand etwas "
+"gepostet."
#: actions/all.php:132
#, php-format
@@ -91,6 +94,8 @@ msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
+"Abonniere doch mehr Leute, [tritt einer Gruppe bei](%%action.groups%%) oder "
+"poste selber etwas."
#: actions/all.php:134
#, php-format
@@ -98,6 +103,9 @@ msgid ""
"You can try to [nudge %s](../%s) from his profile or [post something to his "
"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
msgstr ""
+"Du kannst [%s in seinem Profil einen Stups geben](../%s) oder [ihm etwas "
+"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
+"zu erregen."
#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
#, php-format
@@ -105,6 +113,9 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
+"Warum [registrierst Du nicht einen Account](%%%%action.register%%%%) und "
+"gibst %s dann einen Stups oder postest ihm etwas, um seine Aufmerksamkeit zu "
+"erregen?"
#: actions/all.php:165
msgid "You and friends"
@@ -1257,8 +1268,8 @@ msgid "Featured users, page %d"
msgstr "Top-Benutzer, Seite %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "Eine Auswahl der tollen Benutzer auf %s"
#: actions/file.php:34
@@ -1535,6 +1546,8 @@ msgid ""
"Why not [register an account](%%action.register%%) and [create the group](%%"
"action.newgroup%%) yourself!"
msgstr ""
+"Warum [registrierst Du nicht einen Account](%%action.register%%) und [legst "
+"diese Gruppe selbst an](%%action.newgroup%%)?"
#: actions/groupunblock.php:91
msgid "Only an admin can unblock group members."
@@ -3236,7 +3249,7 @@ msgstr ""
#: actions/siteadminpanel.php:204
msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
+msgstr "Ungültiger SSL-Server. Die maximale Länge ist 255 Zeichen."
#: actions/siteadminpanel.php:210
msgid "Minimum text limit is 140 characters."
@@ -3276,9 +3289,8 @@ msgid "URL used for credits link in footer of each page"
msgstr ""
#: actions/siteadminpanel.php:284
-#, fuzzy
msgid "Contact email address for your site"
-msgstr "Neue E-Mail-Adresse um auf %s zu schreiben"
+msgstr "Kontakt-E-Mail-Adresse für Deine Site."
#: actions/siteadminpanel.php:290
#, fuzzy
@@ -3314,11 +3326,11 @@ msgstr ""
#: actions/siteadminpanel.php:323
msgid "Fancy URLs"
-msgstr ""
+msgstr "Schicke URLs."
#: actions/siteadminpanel.php:325
msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
+msgstr "Schicke URLs (lesbarer und besser zu merken) verwenden?"
#: actions/siteadminpanel.php:331
#, fuzzy
@@ -3379,7 +3391,7 @@ msgstr ""
#: actions/siteadminpanel.php:366
msgid "Frequency"
-msgstr ""
+msgstr "Frequenz"
#: actions/siteadminpanel.php:367
msgid "Snapshots will be sent once every N web hits"
@@ -3394,22 +3406,20 @@ msgid "Snapshots will be sent to this URL"
msgstr ""
#: actions/siteadminpanel.php:380
-#, fuzzy
msgid "SSL"
-msgstr "SMS"
+msgstr "SSL"
#: actions/siteadminpanel.php:384
-#, fuzzy
msgid "Sometimes"
-msgstr "Nachrichten"
+msgstr "Manchmal"
#: actions/siteadminpanel.php:385
msgid "Always"
-msgstr ""
+msgstr "Immer"
#: actions/siteadminpanel.php:387
msgid "Use SSL"
-msgstr ""
+msgstr "SSL verwenden"
#: actions/siteadminpanel.php:388
msgid "When to use SSL"
@@ -3417,7 +3427,7 @@ msgstr ""
#: actions/siteadminpanel.php:393
msgid "SSL Server"
-msgstr ""
+msgstr "SSL-Server"
#: actions/siteadminpanel.php:394
msgid "Server to direct SSL requests to"
@@ -3444,9 +3454,8 @@ msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
#: actions/siteadminpanel.php:421 actions/useradminpanel.php:313
-#, fuzzy
msgid "Save site settings"
-msgstr "Avatar-Einstellungen"
+msgstr "Site-Einstellungen speichern"
#: actions/smssettings.php:58
msgid "SMS Settings"
@@ -3589,6 +3598,8 @@ msgid ""
"You have no subscribers. Try subscribing to people you know and they might "
"return the favor"
msgstr ""
+"Du hast keine Abonnenten. Warum abonnierst Du nicht Leute, die Du kennst? "
+"Sie werden Dir diesen Gefallen vielleicht auch tun."
#: actions/subscribers.php:110
#, php-format
@@ -3601,6 +3612,8 @@ msgid ""
"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
"%) and be the first?"
msgstr ""
+"% hat keine Abonnenten. Warum [registrierst Du nicht einen Account](%%%%"
+"action.register%%%%) und bist der erste?"
#: actions/subscriptions.php:52
#, php-format
@@ -3720,9 +3733,8 @@ msgid "API method under construction."
msgstr "API-Methode im Aufbau."
#: actions/unblock.php:59
-#, fuzzy
msgid "You haven't blocked that user."
-msgstr "Du hast diesen Benutzer bereits blockiert."
+msgstr "Du hast diesen Benutzer nicht blockiert."
#: actions/unsandbox.php:72
#, fuzzy
@@ -4218,7 +4230,7 @@ msgstr "FAQ"
#: lib/action.php:732
msgid "TOS"
-msgstr ""
+msgstr "AGB"
#: lib/action.php:735
msgid "Privacy"
@@ -4276,7 +4288,6 @@ msgid "All "
msgstr "Alle "
#: lib/action.php:804
-#, fuzzy
msgid "license."
msgstr "Lizenz."
@@ -4531,9 +4542,8 @@ msgstr[0] "Du hast diese Benutzer bereits abonniert:"
msgstr[1] "Du hast diese Benutzer bereits abonniert:"
#: lib/command.php:707
-#, fuzzy
msgid "No one is subscribed to you."
-msgstr "Die Gegenseite konnte Dich nicht abonnieren."
+msgstr "Niemand hat Dich abonniert."
#: lib/command.php:709
msgid "This person is subscribed to you:"
@@ -4542,9 +4552,8 @@ msgstr[0] "Die Gegenseite konnte Dich nicht abonnieren."
msgstr[1] "Die Gegenseite konnte Dich nicht abonnieren."
#: lib/command.php:729
-#, fuzzy
msgid "You are not a member of any groups."
-msgstr "Du bist kein Mitglied dieser Gruppe."
+msgstr "Du bist in keiner Gruppe Mitglied."
#: lib/command.php:731
msgid "You are a member of this group:"
@@ -4594,13 +4603,12 @@ msgid ""
msgstr ""
#: lib/common.php:199
-#, fuzzy
msgid "No configuration file found. "
-msgstr "Kein Bestätigungs-Code."
+msgstr "Keine Konfigurationsdatei gefunden."
#: lib/common.php:200
msgid "I looked for configuration files in the following places: "
-msgstr ""
+msgstr "Ich habe an folgenden Stellen nach Konfigurationsdateien gesucht: "
#: lib/common.php:201
msgid "You may wish to run the installer to fix this."
@@ -4625,19 +4633,18 @@ msgstr "Aktualisierungen via SMS"
#: lib/dberroraction.php:60
msgid "Database error"
-msgstr ""
+msgstr "Datenbankfehler."
#: lib/designsettings.php:105
-#, fuzzy
msgid "Upload file"
-msgstr "Hochladen"
+msgstr "Datei hochladen"
#: lib/designsettings.php:109
-#, fuzzy
msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr ""
-"Du kannst dein persönliches Avatar hochladen. Die maximale Dateigröße ist %s."
+"Du kannst dein persönliches Hintergrundbild hochladen. Die maximale "
+"Dateigröße ist 2MB."
#: lib/designsettings.php:418
msgid "Design defaults restored."
@@ -4700,9 +4707,8 @@ msgid "Choose a tag to narrow list"
msgstr "Wähle einen Tag, um die Liste einzuschränken"
#: lib/galleryaction.php:143
-#, fuzzy
msgid "Go"
-msgstr "Los"
+msgstr "Los geht's"
#: lib/groupeditform.php:163
#, fuzzy
@@ -4720,7 +4726,6 @@ msgid "Describe the group or topic in %d characters"
msgstr "Beschreibe die Gruppe oder das Thema in 140 Zeichen"
#: lib/groupeditform.php:172
-#, fuzzy
msgid "Description"
msgstr "Beschreibung"
@@ -4740,9 +4745,8 @@ msgid "Group"
msgstr "Gruppe"
#: lib/groupnav.php:101
-#, fuzzy
msgid "Blocked"
-msgstr "Blockieren"
+msgstr "Blockiert"
#: lib/groupnav.php:102
#, fuzzy, php-format
@@ -4755,7 +4759,6 @@ msgid "Edit %s group properties"
msgstr "%s Gruppeneinstellungen bearbeiten"
#: lib/groupnav.php:113
-#, fuzzy
msgid "Logo"
msgstr "Logo"
@@ -4829,12 +4832,10 @@ msgid "[%s]"
msgstr ""
#: lib/joinform.php:114
-#, fuzzy
msgid "Join"
msgstr "Beitreten"
#: lib/leaveform.php:114
-#, fuzzy
msgid "Leave"
msgstr "Verlassen"
@@ -4868,6 +4869,19 @@ msgid ""
"Thanks for your time, \n"
"%s\n"
msgstr ""
+"Hallo %s,\n"
+"\n"
+"jemand hat diese E-Mail-Adresse gerade auf %s eingegeben.\n"
+"\n"
+"Falls Du es warst und Du Deinen Eintrag bestätigen möchtest, benutze\n"
+"bitte diese URL:\n"
+"\n"
+"%s\n"
+"\n"
+"Falls nicht, ignoriere diese Nachricht einfach.\n"
+"\n"
+"Vielen Dank!\n"
+"%s\n"
#: lib/mail.php:236
#, php-format
@@ -4875,7 +4889,7 @@ msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s hat deine Nachrichten auf %2$s abonniert."
#: lib/mail.php:241
-#, fuzzy, php-format
+#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
"\n"
@@ -4890,23 +4904,28 @@ msgid ""
msgstr ""
"%1$s hat deine Nachrichten auf %2$s abonniert.\n"
"\n"
-"\t%3$s\n"
+"%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"Mit freundlichen Grüßen,\n"
+"%7$s.\n"
"\n"
-"Gruß,\n"
-"%4$s.\n"
+"----\n"
+"Du kannst Deine E-Mail-Adresse und die Benachrichtigungseinstellungen auf %8"
+"$s ändern.\n"
#: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
msgid "Location: %s\n"
msgstr "Standort: %s\n"
#: lib/mail.php:256
-#, fuzzy, php-format
+#, php-format
msgid "Homepage: %s\n"
msgstr "Homepage: %s\n"
#: lib/mail.php:258
-#, fuzzy, php-format
+#, php-format
msgid ""
"Bio: %s\n"
"\n"
@@ -4969,6 +4988,17 @@ msgid ""
"With kind regards,\n"
"%4$s\n"
msgstr ""
+"%1$s (%2$s) fragt sicht, was Du zur Zeit wohl so machst und lädt Dich ein, "
+"etwas Neues zu posten.\n"
+"\n"
+"Lass von Dir hören :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"Antworte nicht auf diese E-Mail, sie wird niemanden erreichen.\n"
+"\n"
+"Mit freundlichen Grüßen,\n"
+"%4$s\n"
#: lib/mail.php:510
#, php-format
@@ -4993,11 +5023,25 @@ msgid ""
"With kind regards,\n"
"%5$s\n"
msgstr ""
+"%1$s (%2$s) hat Dir eine private Nachricht geschickt:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"Du kannst auf diese Nachricht hier antworten:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Antworte nicht auf diese E-Mail, sie wird niemanden erreichen.\n"
+"\n"
+"Mit freundlichen Grüßen,\n"
+"%5$s\n"
#: lib/mail.php:559
-#, fuzzy, php-format
+#, php-format
msgid "%s (@%s) added your notice as a favorite"
-msgstr "%s hat deine Nachricht als Favorit gespeichert"
+msgstr "%s (@%s) hat deine Nachricht als Favorit gespeichert"
#: lib/mail.php:561
#, php-format
@@ -5049,6 +5093,9 @@ msgid ""
"You have no private messages. You can send private message to engage other "
"users in conversation. People can send you messages for your eyes only."
msgstr ""
+"Du hast keine privaten Nachrichten. Du kannst anderen private Nachrichten "
+"schicken, um sie in eine Konversation zu verwickeln. Andere Leute können Dir "
+"Nachrichten schicken, die nur Du sehen kannst."
#: lib/mailbox.php:227 lib/noticelist.php:469
#, fuzzy
@@ -5188,19 +5235,16 @@ msgid "Notice repeated"
msgstr "Nachricht gelöscht."
#: lib/nudgeform.php:116
-#, fuzzy
msgid "Nudge this user"
-msgstr "Diesen Benutzer stupsen"
+msgstr "Gib diesem Benutzer einen Stups"
#: lib/nudgeform.php:128
-#, fuzzy
msgid "Nudge"
msgstr "Stups"
#: lib/nudgeform.php:128
-#, fuzzy
msgid "Send a nudge to this user"
-msgstr "Sende diesem Benutzer einen Stupser"
+msgstr "Sende diesem Benutzer einen Stups"
#: lib/oauthstore.php:283
msgid "Error inserting new profile"
@@ -5339,9 +5383,8 @@ msgid "Sandbox this user"
msgstr "Benutzer freigeben"
#: lib/searchaction.php:120
-#, fuzzy
msgid "Search site"
-msgstr "Suchen"
+msgstr "Site durchsuchen"
#: lib/searchaction.php:126
msgid "Keyword(s)"
@@ -5403,7 +5446,7 @@ msgstr "Gruppen in denen %s Mitglied ist"
#: lib/subs.php:52
msgid "Already subscribed!"
-msgstr ""
+msgstr "Bereits abonniert!"
#: lib/subs.php:56
msgid "User has blocked you."
@@ -5508,47 +5551,47 @@ msgstr "Nachricht"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "vor wenigen Sekunden"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "vor einer Minute"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "vor %d Minuten"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "vor einer Stunde"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "vor %d Stunden"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "vor einem Tag"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "vor %d Tagen"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "vor einem Monat"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "vor %d Monaten"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "vor einem Jahr"
diff --git a/locale/el/LC_MESSAGES/statusnet.po b/locale/el/LC_MESSAGES/statusnet.po
index 715e7b6c1..e00f5487c 100644
--- a/locale/el/LC_MESSAGES/statusnet.po
+++ b/locale/el/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:01+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:34+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n"
@@ -1257,7 +1257,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5342,47 +5342,47 @@ msgstr "Μήνυμα"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr ""
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr ""
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr ""
diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po
index 198d7079a..e224e21f2 100644
--- a/locale/en_GB/LC_MESSAGES/statusnet.po
+++ b/locale/en_GB/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to British English
#
+# Author@translatewiki.net: Bruce89
# Author@translatewiki.net: CiaranG
# Author@translatewiki.net: Lockal
# --
@@ -9,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:04+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:37+0000\n"
"Language-Team: British English\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n"
@@ -83,6 +84,7 @@ msgstr "Feed for friends of %s (Atom)"
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
+"This is the timeline for %s and friends but no one has posted anything yet."
#: actions/all.php:132
#, php-format
@@ -90,6 +92,8 @@ msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
+"Try subscribing to more people, [join a group](%%action.groups%%) or post "
+"something yourself."
#: actions/all.php:134
#, php-format
@@ -97,6 +101,8 @@ msgid ""
"You can try to [nudge %s](../%s) from his profile or [post something to his "
"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
msgstr ""
+"You can try to [nudge %s](../%s) from his profile or [post something to his "
+"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
#, php-format
@@ -104,6 +110,8 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
+"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
+"post a notice to his or her attention."
#: actions/all.php:165
msgid "You and friends"
@@ -142,6 +150,8 @@ msgid ""
"You must specify a parameter named 'device' with a value of one of: sms, im, "
"none"
msgstr ""
+"You must specify a parameter named 'device' with a value of one of: sms, im, "
+"none"
#: actions/apiaccountupdatedeliverydevice.php:132
#, fuzzy
@@ -172,6 +182,8 @@ msgid ""
"The server was unable to handle that much POST data (%s bytes) due to its "
"current configuration."
msgstr ""
+"The server was unable to handle that much POST data (%s bytes) due to its "
+"current configuration."
#: actions/apiaccountupdateprofilebackgroundimage.php:136
#: actions/apiaccountupdateprofilebackgroundimage.php:146
@@ -186,9 +198,8 @@ msgid "Could not update your design."
msgstr "Could not update your design."
#: actions/apiblockcreate.php:105
-#, fuzzy
msgid "You cannot block yourself!"
-msgstr "Couldn't update user."
+msgstr "You cannot block yourself!"
#: actions/apiblockcreate.php:119
msgid "Block user failed."
@@ -291,7 +302,7 @@ msgstr "Could not unfollow user: User not found."
#: actions/apifriendshipsdestroy.php:120
msgid "You cannot unfollow yourself!"
-msgstr ""
+msgstr "You cannot unfollow yourself!"
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
@@ -350,7 +361,7 @@ msgstr "Location is too long (max 255 chars)."
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
-msgstr ""
+msgstr "Too many aliases! Maximum %d."
#: actions/apigroupcreate.php:264 actions/editgroup.php:224
#: actions/newgroup.php:168
@@ -367,7 +378,7 @@ msgstr "Alias \"%s\" already in use. Try another one."
#: actions/apigroupcreate.php:286 actions/editgroup.php:234
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
-msgstr ""
+msgstr "Alias can't be the same as nickname."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
@@ -381,22 +392,21 @@ msgstr "You are already a member of that group."
#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
msgid "You have been blocked from that group by the admin."
-msgstr ""
+msgstr "You have been blocked from that group by the admin."
#: actions/apigroupjoin.php:138
-#, fuzzy, php-format
+#, php-format
msgid "Could not join user %s to group %s."
-msgstr "Could not join user %s to group %s"
+msgstr "Could not join user %s to group %s."
#: actions/apigroupleave.php:114
-#, fuzzy
msgid "You are not a member of this group."
-msgstr "You are not a member of that group."
+msgstr "You are not a member of this group."
#: actions/apigroupleave.php:124
-#, fuzzy, php-format
+#, php-format
msgid "Could not remove user %s to group %s."
-msgstr "Could not remove user %s to group %s"
+msgstr "Could not remove user %s to group %s."
#: actions/apigrouplist.php:95
#, php-format
@@ -432,14 +442,12 @@ msgid "No such notice."
msgstr "No such notice."
#: actions/apistatusesretweet.php:83
-#, fuzzy
msgid "Cannot repeat your own notice."
-msgstr "Can't turn on notification."
+msgstr "Cannot repeat your own notice."
#: actions/apistatusesretweet.php:91
-#, fuzzy
msgid "Already repeated that notice."
-msgstr "Delete this notice"
+msgstr "Already repeated that notice."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
@@ -462,12 +470,11 @@ msgstr "Not found"
#: actions/apistatusesupdate.php:227 actions/newnotice.php:183
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
-msgstr ""
+msgstr "Max notice size is %d chars, including attachment URL."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
-#, fuzzy
msgid "Unsupported format."
-msgstr "Unsupported image file format."
+msgstr "Unsupported format."
#: actions/apitimelinefavorites.php:108
#, php-format
@@ -514,17 +521,17 @@ msgstr "%s updates from everyone!"
#: actions/apitimelineretweetedbyme.php:112
#, php-format
msgid "Repeated by %s"
-msgstr ""
+msgstr "Repeated by %s"
#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
msgid "Repeated to %s"
-msgstr "Replies to %s"
+msgstr "Repeated to %s"
#: actions/apitimelineretweetsofme.php:112
-#, fuzzy, php-format
+#, php-format
msgid "Repeats of %s"
-msgstr "Replies to %s"
+msgstr "Repeats of %s"
#: actions/apitimelinetag.php:102 actions/tag.php:66
#, php-format
@@ -541,9 +548,8 @@ msgid "Not found."
msgstr "Not found."
#: actions/attachment.php:73
-#, fuzzy
msgid "No such attachment."
-msgstr "No such document."
+msgstr "No such attachment."
#: actions/avatarbynickname.php:59 actions/grouprss.php:91
#: actions/leavegroup.php:76
@@ -642,14 +648,12 @@ msgid "Failed updating avatar."
msgstr "Failed updating avatar."
#: actions/avatarsettings.php:393
-#, fuzzy
msgid "Avatar deleted."
-msgstr "Avatar updated."
+msgstr "Avatar deleted."
#: actions/block.php:69
-#, fuzzy
msgid "You already blocked that user."
-msgstr "You have already blocked this user."
+msgstr "You already blocked that user."
#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
msgid "Block user"
@@ -661,6 +665,9 @@ msgid ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
msgstr ""
+"Are you sure you want to block this user? Afterwards, they will be "
+"unsubscribed from you, unable to subscribe to you in the future, and you "
+"will not be notified of any @-replies from them."
#: actions/block.php:143 actions/deletenotice.php:145
#: actions/deleteuser.php:147 actions/groupblock.php:178
@@ -668,9 +675,8 @@ msgid "No"
msgstr "No"
#: actions/block.php:143 actions/deleteuser.php:147
-#, fuzzy
msgid "Do not block this user"
-msgstr "Unblock this user"
+msgstr "Do not block this user"
#: actions/block.php:144 actions/deletenotice.php:146
#: actions/deleteuser.php:148 actions/groupblock.php:179
@@ -796,7 +802,6 @@ msgid "Can't delete this notice."
msgstr "Can't delete this notice."
#: actions/deletenotice.php:103
-#, fuzzy
msgid ""
"You are about to permanently delete a notice. Once this is done, it cannot "
"be undone."
@@ -821,19 +826,16 @@ msgid "Delete this notice"
msgstr "Delete this notice"
#: actions/deletenotice.php:157
-#, fuzzy
msgid "There was a problem with your session token. Try again, please."
-msgstr "There was a problem with your session token. Try again, please."
+msgstr "There was a problem with your session token. Try again, please."
#: actions/deleteuser.php:67
-#, fuzzy
msgid "You cannot delete users."
-msgstr "Couldn't update user."
+msgstr "You cannot delete users."
#: actions/deleteuser.php:74
-#, fuzzy
msgid "You can only delete local users."
-msgstr "You may not delete another user's status."
+msgstr "You can only delete local users."
#: actions/deleteuser.php:110 actions/deleteuser.php:133
#, fuzzy
@@ -845,6 +847,8 @@ msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
+"Are you sure you want to delete this user? This will clear all data about "
+"the user from the database, without a backup."
#: actions/deleteuser.php:148 lib/deleteuserform.php:77
msgid "Delete this user"
@@ -853,11 +857,11 @@ msgstr "Delete this user"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
#: lib/adminpanelaction.php:302 lib/groupnav.php:119
msgid "Design"
-msgstr ""
+msgstr "Design"
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
-msgstr ""
+msgstr "Design settings for this StausNet site."
#: actions/designadminpanel.php:275
#, fuzzy
@@ -894,12 +898,12 @@ msgstr "Logout from the site"
#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
-msgstr ""
+msgstr "Change background image"
#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
-msgstr ""
+msgstr "Background"
#: actions/designadminpanel.php:427
#, fuzzy, php-format
@@ -910,19 +914,19 @@ msgstr "You can upload a logo image for your group."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
-msgstr ""
+msgstr "On"
#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
-msgstr ""
+msgstr "Off"
#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
-msgstr ""
+msgstr "Turn background image on or off."
#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
-msgstr ""
+msgstr "Tile background image"
#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
@@ -948,15 +952,15 @@ msgstr "Links"
#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
-msgstr ""
+msgstr "Use defaults"
#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
-msgstr ""
+msgstr "Restore default designs"
#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
-msgstr ""
+msgstr "Reset back to default"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
@@ -970,7 +974,7 @@ msgstr "Save"
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
-msgstr ""
+msgstr "Save design"
#: actions/disfavor.php:81
msgid "This notice is not a favorite!"
@@ -1262,8 +1266,8 @@ msgid "Featured users, page %d"
msgstr "Featured users, page %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "A selection of some of the great users on %s"
#: actions/file.php:34
@@ -1356,7 +1360,7 @@ msgstr "No profile specified."
#: actions/groupblock.php:91
msgid "Only an admin can block group members."
-msgstr ""
+msgstr "Only an admin can block group members."
#: actions/groupblock.php:95
msgid "User is already blocked from group."
@@ -1378,6 +1382,9 @@ msgid ""
"be removed from the group, unable to post, and unable to subscribe to the "
"group in the future."
msgstr ""
+"Are you sure you want to block user \"%s\" from the group \"%s\"? They will "
+"be removed from the group, unable to post, and unable to subscribe to the "
+"group in the future."
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
@@ -1389,7 +1396,7 @@ msgstr "Block this user from this group"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
-msgstr ""
+msgstr "Database error blocking user from group."
#: actions/groupbyid.php:74
msgid "No ID"
@@ -1410,6 +1417,8 @@ msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Customise the way your group looks with a background image and a colour "
+"palette of your choice."
#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
@@ -1584,7 +1593,7 @@ msgid "Current confirmed Jabber/GTalk address."
msgstr "Current confirmed Jabber/GTalk address."
#: actions/imsettings.php:114
-#, fuzzy, php-format
+#, php-format
msgid ""
"Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
"message with further instructions. (Did you add %s to your buddy list?)"
@@ -2319,7 +2328,7 @@ msgstr "Invalid notice content"
#: actions/postnotice.php:90
#, php-format
msgid "Notice license ‘%s’ is not compatible with site license ‘%s’."
-msgstr ""
+msgstr "Notice licence ‘%s’ is not compatible with site licence ‘%s’."
#: actions/profilesettings.php:60
msgid "Profile settings"
@@ -2504,6 +2513,10 @@ msgid ""
"tool. [Join now](%%action.register%%) to share notices about yourself with "
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
+"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
+"blogging) service based on the Free Software [StatusNet](http://status.net/) "
+"tool. [Join now](%%action.register%%) to share notices about yourself with "
+"friends, family, and colleagues! ([Read more](%%doc.help%%))"
#: actions/public.php:238
#, php-format
@@ -2865,9 +2878,8 @@ msgid "No notice specified."
msgstr "No profile specified."
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr "You can't register if you don't agree to the licence."
+msgstr "You can't repeat your own notice."
#: actions/repeat.php:90
#, fuzzy
@@ -5466,47 +5478,47 @@ msgstr "Message"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "a few seconds ago"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "about a minute ago"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "about %d minutes ago"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "about an hour ago"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "about %d hours ago"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "about a day ago"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "about %d days ago"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "about a month ago"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "about %d months ago"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "about a year ago"
diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po
index 255a18258..8aec822ec 100644
--- a/locale/es/LC_MESSAGES/statusnet.po
+++ b/locale/es/LC_MESSAGES/statusnet.po
@@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:08+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:39+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n"
@@ -724,16 +724,14 @@ msgid "A list of the users blocked from joining this group."
msgstr "Lista de los usuarios en este grupo."
#: actions/blockedfromgroup.php:281
-#, fuzzy
msgid "Unblock user from group"
-msgstr "Falló desbloquear usuario."
+msgstr "Desbloquear usuario de grupo"
#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
msgid "Unblock"
msgstr "Desbloquear"
#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
-#, fuzzy
msgid "Unblock this user"
msgstr "Desbloquear este usuario"
@@ -785,9 +783,8 @@ msgid "The address \"%s\" has been confirmed for your account."
msgstr "La dirección \"%s\" fue confirmada para tu cuenta."
#: actions/conversation.php:99
-#, fuzzy
msgid "Conversation"
-msgstr "Código de confirmación"
+msgstr "Conversación"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
#: lib/profileaction.php:216 lib/searchgroupnav.php:82
@@ -841,9 +838,8 @@ msgstr ""
"Hubo un problema con tu clave de sesión. Por favor, intenta nuevamente."
#: actions/deleteuser.php:67
-#, fuzzy
msgid "You cannot delete users."
-msgstr "No se pudo actualizar el usuario."
+msgstr "No puedes borrar usuarios."
#: actions/deleteuser.php:74
#, fuzzy
@@ -851,9 +847,8 @@ msgid "You can only delete local users."
msgstr "No puedes borrar el estado de otro usuario."
#: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
msgid "Delete user"
-msgstr "Borrar"
+msgstr "Borrar usuario"
#: actions/deleteuser.php:135
msgid ""
@@ -862,9 +857,8 @@ msgid ""
msgstr ""
#: actions/deleteuser.php:148 lib/deleteuserform.php:77
-#, fuzzy
msgid "Delete this user"
-msgstr "Borrar este aviso"
+msgstr "Borrar este usuario"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
#: lib/adminpanelaction.php:302 lib/groupnav.php:119
@@ -881,14 +875,13 @@ msgid "Invalid logo URL."
msgstr "Tamaño inválido."
#: actions/designadminpanel.php:279
-#, fuzzy, php-format
+#, php-format
msgid "Theme not available: %s"
-msgstr "Esta página no está disponible en un "
+msgstr "Tema no disponible"
#: actions/designadminpanel.php:375
-#, fuzzy
msgid "Change logo"
-msgstr "Cambiar colores"
+msgstr "Cambiar logo"
#: actions/designadminpanel.php:380
#, fuzzy
@@ -1282,8 +1275,8 @@ msgid "Featured users, page %d"
msgstr "Usuarios que figuran, página %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "Una selección de algunos de los grandes usuarios en %s"
#: actions/file.php:34
@@ -1292,28 +1285,24 @@ msgid "No notice ID."
msgstr "Nuevo aviso"
#: actions/file.php:38
-#, fuzzy
msgid "No notice."
-msgstr "Nuevo aviso"
+msgstr "Sin aviso."
#: actions/file.php:42
-#, fuzzy
msgid "No attachments."
-msgstr "No existe ese documento."
+msgstr "Sin archivo adjunto"
#: actions/file.php:51
-#, fuzzy
msgid "No uploaded attachments."
-msgstr "No existe ese documento."
+msgstr "No hay archivos adjuntos cargados."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
msgstr "¡Respuesta inesperada!"
#: actions/finishremotesubscribe.php:80
-#, fuzzy
msgid "User being listened to does not exist."
-msgstr "El usuario al que quieres seguir no existe."
+msgstr "El usuario al que quieres listar no existe."
#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
msgid "You can use the local subscription!"
@@ -1324,9 +1313,8 @@ msgid "That user has blocked you from subscribing."
msgstr "Ese usuario te ha bloqueado la suscripción."
#: actions/finishremotesubscribe.php:110
-#, fuzzy
msgid "You are not authorized."
-msgstr "No autorizado."
+msgstr "No estás autorizado."
#: actions/finishremotesubscribe.php:113
#, fuzzy
@@ -1346,19 +1334,16 @@ msgstr "Error al actualizar el perfil remoto"
#: actions/grouprss.php:98 actions/groupunblock.php:86
#: actions/leavegroup.php:83 actions/makeadmin.php:86 lib/command.php:212
#: lib/command.php:263
-#, fuzzy
msgid "No such group."
msgstr "No existe ese grupo."
#: actions/getfile.php:75
-#, fuzzy
msgid "No such file."
-msgstr "No existe ese aviso."
+msgstr "No existe tal archivo."
#: actions/getfile.php:79
-#, fuzzy
msgid "Cannot read file."
-msgstr "Se perdió nuestro archivo"
+msgstr "No se puede leer archivo."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1374,28 +1359,24 @@ msgstr "No existe perfil con ese ID"
#: actions/groupblock.php:81 actions/groupunblock.php:81
#: actions/makeadmin.php:81
-#, fuzzy
msgid "No group specified."
-msgstr "No se especificó perfil."
+msgstr "Grupo no especificado."
#: actions/groupblock.php:91
msgid "Only an admin can block group members."
msgstr ""
#: actions/groupblock.php:95
-#, fuzzy
msgid "User is already blocked from group."
-msgstr "El usuario te ha bloqueado."
+msgstr "Usuario ya está bloqueado del grupo."
#: actions/groupblock.php:100
-#, fuzzy
msgid "User is not a member of group."
-msgstr "No eres miembro de ese grupo"
+msgstr "Usuario no es miembro del grupo"
#: actions/groupblock.php:136 actions/groupmembers.php:314
-#, fuzzy
msgid "Block user from group"
-msgstr "Bloquear usuario."
+msgstr "Bloquear usuario de grupo"
#: actions/groupblock.php:162
#, php-format
@@ -1406,14 +1387,12 @@ msgid ""
msgstr ""
#: actions/groupblock.php:178
-#, fuzzy
msgid "Do not block this user from this group"
-msgstr "Lista de los usuarios en este grupo."
+msgstr "No bloquear este usuario de este grupo"
#: actions/groupblock.php:179
-#, fuzzy
msgid "Block this user from this group"
-msgstr "Lista de los usuarios en este grupo."
+msgstr "Bloquear este usuario de este grupo"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
@@ -1424,9 +1403,8 @@ msgid "No ID"
msgstr "Sin ID"
#: actions/groupdesignsettings.php:68
-#, fuzzy
msgid "You must be logged in to edit a group."
-msgstr "Debes estar conectado para crear un grupo"
+msgstr "Debes estar conectado para editar un grupo."
#: actions/groupdesignsettings.php:141
#, fuzzy
@@ -3802,9 +3780,8 @@ msgid "API method under construction."
msgstr "Método API en construcción."
#: actions/unblock.php:59
-#, fuzzy
msgid "You haven't blocked that user."
-msgstr "Ya has bloqueado este usuario."
+msgstr "No has bloqueado ese usuario."
#: actions/unsandbox.php:72
#, fuzzy
@@ -3870,9 +3847,8 @@ msgid "Maximum length of a profile bio in characters."
msgstr ""
#: actions/useradminpanel.php:231
-#, fuzzy
msgid "New users"
-msgstr "Invitar nuevos usuarios:"
+msgstr "Nuevos usuarios"
#: actions/useradminpanel.php:235
msgid "New user welcome"
@@ -3895,9 +3871,8 @@ msgstr ""
"para no-humanos)"
#: actions/useradminpanel.php:251
-#, fuzzy
msgid "Invitations"
-msgstr "Invitacion(es) enviada(s)"
+msgstr "Invitaciones"
#: actions/useradminpanel.php:256
#, fuzzy
@@ -3910,7 +3885,7 @@ msgstr ""
#: actions/useradminpanel.php:265
msgid "Sessions"
-msgstr ""
+msgstr "Sesiones"
#: actions/useradminpanel.php:270
msgid "Handle sessions"
@@ -3933,20 +3908,18 @@ msgid "Authorize subscription"
msgstr "Autorizar la suscripción"
#: actions/userauthorization.php:110
-#, fuzzy
msgid ""
"Please check these details to make sure that you want to subscribe to this "
"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
"click “Reject”."
msgstr ""
"Por favor revisa estos detalles para asegurar que deseas suscribirte a los "
-"avisos de este usuario. Si no pediste esta suscripción, haz clic en "
-"\"Cancelar\"."
+"avisos de este usuario. Si no pediste suscribirte a los avisos de alguien, "
+"haz clic en \"Cancelar\"."
#: actions/userauthorization.php:188
-#, fuzzy
msgid "License"
-msgstr "Licencia."
+msgstr "Licencia"
#: actions/userauthorization.php:209
msgid "Accept"
@@ -3963,9 +3936,8 @@ msgid "Reject"
msgstr "Rechazar"
#: actions/userauthorization.php:212
-#, fuzzy
msgid "Reject this subscription"
-msgstr "Suscripciones %s"
+msgstr "Rechazar esta suscripción"
#: actions/userauthorization.php:225
msgid "No authorization request!"
@@ -4037,9 +4009,8 @@ msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Tipo de imagen incorrecto para '%s'"
#: actions/userbyid.php:70
-#, fuzzy
msgid "No ID."
-msgstr "Sin ID"
+msgstr "Sin ID."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
#, fuzzy
@@ -4151,17 +4122,16 @@ msgid "DB error inserting reply: %s"
msgstr "Error de BD al insertar respuesta: %s"
#: classes/Notice.php:1371
-#, fuzzy, php-format
+#, php-format
msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
#: classes/User.php:368
-#, fuzzy, php-format
+#, php-format
msgid "Welcome to %1$s, @%2$s!"
-msgstr "Mensaje a %1$s en %2$s"
+msgstr "Bienvenido a %1$s, @%2$s!"
#: classes/User_group.php:380
-#, fuzzy
msgid "Could not create group."
msgstr "No se pudo crear grupo."
@@ -4220,12 +4190,10 @@ msgid "Personal profile and friends timeline"
msgstr "Perfil personal y línea de tiempo de amigos"
#: lib/action.php:433
-#, fuzzy
msgid "Account"
msgstr "Cuenta"
#: lib/action.php:433
-#, fuzzy
msgid "Change your email, avatar, password, profile"
msgstr "Cambia tu correo electrónico, avatar, contraseña, perfil"
@@ -4234,9 +4202,8 @@ msgid "Connect"
msgstr "Conectarse"
#: lib/action.php:436
-#, fuzzy
msgid "Connect to services"
-msgstr "No se pudo redirigir al servidor: %s"
+msgstr "Conectar a los servicios"
#: lib/action.php:440
#, fuzzy
@@ -4261,7 +4228,6 @@ msgid "Logout from the site"
msgstr "Salir de sitio"
#: lib/action.php:455
-#, fuzzy
msgid "Create an account"
msgstr "Crear una cuenta"
@@ -4294,7 +4260,6 @@ msgid "Local views"
msgstr "Vistas locales"
#: lib/action.php:617
-#, fuzzy
msgid "Page notice"
msgstr "Aviso de página"
@@ -4327,9 +4292,8 @@ msgid "Contact"
msgstr "Ponerse en contacto"
#: lib/action.php:741
-#, fuzzy
msgid "Badge"
-msgstr "Zumbido "
+msgstr "Insignia"
#: lib/action.php:769
msgid "StatusNet software license"
@@ -4361,9 +4325,8 @@ msgstr ""
"licensing/licenses/agpl-3.0.html)."
#: lib/action.php:790
-#, fuzzy
msgid "Site content license"
-msgstr "Licencia de software de StatusNet"
+msgstr "Licencia de contenido del sitio"
#: lib/action.php:799
msgid "All "
@@ -4618,9 +4581,8 @@ msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
#: lib/command.php:685
-#, fuzzy
msgid "You are not subscribed to anyone."
-msgstr "No estás suscrito a ese perfil."
+msgstr "No estás suscrito a nadie."
#: lib/command.php:687
msgid "You are subscribed to this person:"
@@ -4629,9 +4591,8 @@ msgstr[0] "Ya estás suscrito a estos usuarios:"
msgstr[1] "Ya estás suscrito a estos usuarios:"
#: lib/command.php:707
-#, fuzzy
msgid "No one is subscribed to you."
-msgstr "No se pudo suscribir otro a ti."
+msgstr "Nadie está suscrito a ti."
#: lib/command.php:709
msgid "This person is subscribed to you:"
@@ -4640,9 +4601,8 @@ msgstr[0] "No se pudo suscribir otro a ti."
msgstr[1] "No se pudo suscribir otro a ti."
#: lib/command.php:729
-#, fuzzy
msgid "You are not a member of any groups."
-msgstr "No eres miembro de ese grupo"
+msgstr "No eres miembro de ningún grupo"
#: lib/command.php:731
msgid "You are a member of this group:"
@@ -4904,11 +4864,11 @@ msgstr "Tipo de archivo desconocido"
#: lib/imagefile.php:217
msgid "MB"
-msgstr ""
+msgstr "MB"
#: lib/imagefile.php:219
msgid "kB"
-msgstr ""
+msgstr "kB"
#: lib/jabber.php:191
#, php-format
@@ -4916,24 +4876,20 @@ msgid "[%s]"
msgstr ""
#: lib/joinform.php:114
-#, fuzzy
msgid "Join"
msgstr "Unirse"
#: lib/leaveform.php:114
-#, fuzzy
msgid "Leave"
-msgstr "Dejar"
+msgstr "Salir"
#: lib/logingroupnav.php:80
-#, fuzzy
msgid "Login with a username and password"
msgstr "Ingresar con un nombre de usuario y contraseña."
#: lib/logingroupnav.php:86
-#, fuzzy
msgid "Sign up for a new account"
-msgstr "Registrar una cuenta nueva "
+msgstr "Registrarse para una nueva cuenta"
#: lib/mail.php:172
msgid "Email address confirmation"
@@ -5230,17 +5186,16 @@ msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:421
-#, fuzzy
msgid "N"
-msgstr "No"
+msgstr "N"
#: lib/noticelist.php:421
msgid "S"
-msgstr ""
+msgstr "S"
#: lib/noticelist.php:422
msgid "E"
-msgstr ""
+msgstr "E"
#: lib/noticelist.php:422
msgid "W"
@@ -5248,7 +5203,7 @@ msgstr ""
#: lib/noticelist.php:428
msgid "at"
-msgstr ""
+msgstr "en"
#: lib/noticelist.php:523
msgid "in context"
@@ -5301,9 +5256,8 @@ msgid "Duplicate notice"
msgstr "Duplicar aviso"
#: lib/oauthstore.php:466 lib/subs.php:48
-#, fuzzy
msgid "You have been banned from subscribing."
-msgstr "Ese usuario te ha bloqueado la suscripción."
+msgstr "Se te ha prohibido la suscripción."
#: lib/oauthstore.php:491
msgid "Couldn't insert new subscription."
@@ -5561,23 +5515,20 @@ msgid "Unsubscribe"
msgstr "Cancelar suscripción"
#: lib/userprofile.php:116
-#, fuzzy
msgid "Edit Avatar"
-msgstr "Avatar"
+msgstr "editar avatar"
#: lib/userprofile.php:236
-#, fuzzy
msgid "User actions"
msgstr "Acciones de usuario"
#: lib/userprofile.php:248
-#, fuzzy
msgid "Edit profile settings"
-msgstr "Configuración del perfil"
+msgstr "Editar configuración del perfil"
#: lib/userprofile.php:249
msgid "Edit"
-msgstr ""
+msgstr "Editar"
#: lib/userprofile.php:272
msgid "Send a direct message to this user"
@@ -5589,49 +5540,49 @@ msgstr "Mensaje"
#: lib/userprofile.php:311
msgid "Moderate"
-msgstr ""
+msgstr "Moderar"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "hace unos segundos"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "hace un minuto"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "hace %d minutos"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "hace una hora"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "hace %d horas"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "hace un día"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "hace %d días"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "hace un mes"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "hace %d meses"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "hace un año"
diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po
new file mode 100644
index 000000000..9e54c6398
--- /dev/null
+++ b/locale/fa/LC_MESSAGES/statusnet.po
@@ -0,0 +1,5361 @@
+# Translation of StatusNet to Persian
+#
+# Author@translatewiki.net: ArianHT
+# Author@translatewiki.net: Everplays
+# Author@translatewiki.net: Narcissus
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-22 22:38+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:45+0000\n"
+"Last-Translator: Ahmad Sufi Mahmudi\n"
+"Language-Team: Persian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Language-Code: fa\n"
+"X-Message-Group: out-statusnet\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+
+#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
+#: actions/showfavorites.php:137 actions/tag.php:51
+msgid "No such page"
+msgstr "چنین صفحه‌ای وجود ندارد"
+
+#: actions/all.php:74 actions/allrss.php:68
+#: actions/apiaccountupdatedeliverydevice.php:113
+#: actions/apiaccountupdateprofile.php:105
+#: actions/apiaccountupdateprofilebackgroundimage.php:116
+#: actions/apiaccountupdateprofileimage.php:105 actions/apiblockcreate.php:97
+#: actions/apiblockdestroy.php:96 actions/apidirectmessage.php:77
+#: actions/apidirectmessagenew.php:75 actions/apigroupcreate.php:112
+#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
+#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
+#: actions/apistatusesupdate.php:144 actions/apisubscriptions.php:87
+#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:79
+#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
+#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
+#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
+#: actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
+#: actions/replies.php:73 actions/repliesrss.php:38
+#: actions/showfavorites.php:105 actions/userbyid.php:74
+#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
+#: lib/command.php:163 lib/command.php:311 lib/command.php:364
+#: lib/command.php:410 lib/command.php:471 lib/command.php:527
+#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
+#: lib/subs.php:34 lib/subs.php:116
+msgid "No such user."
+msgstr "چنین کاربری وجود ندارد."
+
+#: actions/all.php:84
+#, php-format
+msgid "%s and friends, page %d"
+msgstr "%s و دوستان، صفحهٔ %d"
+
+#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#: actions/apitimelinefriends.php:115 actions/apitimelinehome.php:115
+#: lib/personalgroupnav.php:100
+#, php-format
+msgid "%s and friends"
+msgstr "%s و دوستان"
+
+#: actions/all.php:99
+#, php-format
+msgid "Feed for friends of %s (RSS 1.0)"
+msgstr "خوراک دوستان %s (RSS 1.0)"
+
+#: actions/all.php:107
+#, php-format
+msgid "Feed for friends of %s (RSS 2.0)"
+msgstr "خوراک دوستان %s (RSS 2.0)"
+
+#: actions/all.php:115
+#, php-format
+msgid "Feed for friends of %s (Atom)"
+msgstr "خوراک دوستان %s (Atom)"
+
+#: actions/all.php:127
+#, php-format
+msgid ""
+"This is the timeline for %s and friends but no one has posted anything yet."
+msgstr "این خط‌زمانی %s و دوستانش است، اما هیچ‌یک تاکنون چیزی پست نکرده‌اند."
+
+#: actions/all.php:132
+#, php-format
+msgid ""
+"Try subscribing to more people, [join a group](%%action.groups%%) or post "
+"something yourself."
+msgstr ""
+"پیگیری افراد بیش‌تری بشوید [به یک گروه بپیوندید](%%action.groups%%) یا خودتان "
+"چیزی را ارسال کنید."
+
+#: actions/all.php:134
+#, php-format
+msgid ""
+"You can try to [nudge %s](../%s) from his profile or [post something to his "
+"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
+msgstr ""
+
+#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#, php-format
+msgid ""
+"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
+"post a notice to his or her attention."
+msgstr ""
+"چرا [ثبت نام](%%%%action.register%%%%) نمی‌کنید و سپس با فرستادن پیام توجه %s "
+"را جلب کنید."
+
+#: actions/all.php:165
+msgid "You and friends"
+msgstr "شما و دوستان"
+
+#: actions/allrss.php:119 actions/apitimelinefriends.php:122
+#: actions/apitimelinehome.php:122
+#, php-format
+msgid "Updates from %1$s and friends on %2$s!"
+msgstr "به روز رسانی از %1$ و دوستان در %2$"
+
+#: actions/apiaccountratelimitstatus.php:70
+#: actions/apiaccountupdatedeliverydevice.php:93
+#: actions/apiaccountupdateprofile.php:97
+#: actions/apiaccountupdateprofilebackgroundimage.php:94
+#: actions/apiaccountupdateprofilecolors.php:118
+msgid "API method not found."
+msgstr "رابط مورد نظر پیدا نشد."
+
+#: actions/apiaccountupdatedeliverydevice.php:85
+#: actions/apiaccountupdateprofile.php:89
+#: actions/apiaccountupdateprofilebackgroundimage.php:86
+#: actions/apiaccountupdateprofilecolors.php:110
+#: actions/apiaccountupdateprofileimage.php:84 actions/apiblockcreate.php:89
+#: actions/apiblockdestroy.php:88 actions/apidirectmessagenew.php:117
+#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
+#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
+#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
+#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
+#: actions/apistatusesupdate.php:114
+msgid "This method requires a POST."
+msgstr "برای استفاده از این روش باید اطلاعات را به صورت پست بفرستید"
+
+#: actions/apiaccountupdatedeliverydevice.php:105
+msgid ""
+"You must specify a parameter named 'device' with a value of one of: sms, im, "
+"none"
+msgstr "شما باید یک پارامتر با نام device و مقدار sms، im یا none مشخص کنید."
+
+#: actions/apiaccountupdatedeliverydevice.php:132
+msgid "Could not update user."
+msgstr "نمی‌توان کاربر را به‌هنگام‌سازی کرد."
+
+#: actions/apiaccountupdateprofile.php:112
+#: actions/apiaccountupdateprofilebackgroundimage.php:194
+#: actions/apiaccountupdateprofilecolors.php:185
+#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
+#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+msgid "User has no profile."
+msgstr "کاربر هیچ شناس‌نامه‌ای ندارد."
+
+#: actions/apiaccountupdateprofile.php:147
+msgid "Could not save profile."
+msgstr "نمی‌توان شناس‌نامه را ذخیره کرد."
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:108
+#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apistatusesupdate.php:127 actions/avatarsettings.php:257
+#: actions/designadminpanel.php:122 actions/newnotice.php:94
+#: lib/designsettings.php:283
+#, php-format
+msgid ""
+"The server was unable to handle that much POST data (%s bytes) due to its "
+"current configuration."
+msgstr ""
+"به دلیل تنظبمات، سرور نمی‌تواند این مقدار اطلاعات (%s بایت( را دریافت کند."
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:136
+#: actions/apiaccountupdateprofilebackgroundimage.php:146
+#: actions/apiaccountupdateprofilecolors.php:164
+#: actions/apiaccountupdateprofilecolors.php:174
+msgid "Unable to save your design settings."
+msgstr "نمی‌توان تنظیمات طرح‌تان را ذخیره کرد."
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:187
+#: actions/apiaccountupdateprofilecolors.php:142
+msgid "Could not update your design."
+msgstr "نمی‌توان طرح‌تان به‌هنگام‌سازی کرد."
+
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "شما نمی‌توانید خودتان رو مسدود کنید!"
+
+#: actions/apiblockcreate.php:119
+msgid "Block user failed."
+msgstr "مسدود کردن کاربر شکست خورد."
+
+#: actions/apiblockdestroy.php:107
+msgid "Unblock user failed."
+msgstr "باز کردن کاربر ناموفق بود."
+
+#: actions/apidirectmessage.php:89
+#, php-format
+msgid "Direct messages from %s"
+msgstr "پیام‌های مستقیم از %s"
+
+#: actions/apidirectmessage.php:93
+#, php-format
+msgid "All the direct messages sent from %s"
+msgstr "تمام پیام‌های مستقیم فرستاده‌شده از %s"
+
+#: actions/apidirectmessage.php:101
+#, php-format
+msgid "Direct messages to %s"
+msgstr "پیام‌های مستقیم به %s"
+
+#: actions/apidirectmessage.php:105
+#, php-format
+msgid "All the direct messages sent to %s"
+msgstr "تمام پیام‌های مستقیم فرستاده‌شده به %s"
+
+#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
+#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
+#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
+#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
+#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
+#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
+#: actions/apigroupmembership.php:106 actions/apigroupshow.php:105
+#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
+#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
+#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
+#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
+#: actions/apitimelinefriends.php:156 actions/apitimelinegroup.php:150
+#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
+#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: actions/apitimelineretweetedtome.php:121
+#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+msgid "API method not found!"
+msgstr "رابط پیدا نشد!"
+
+#: actions/apidirectmessagenew.php:126
+msgid "No message text!"
+msgstr "هیچ پیام متنی وجود ندارد!"
+
+#: actions/apidirectmessagenew.php:135 actions/newmessage.php:150
+#, php-format
+msgid "That's too long. Max message size is %d chars."
+msgstr "این بسیار طولانی است. بیشینهٔ اندازهٔ پیام %d حرف است."
+
+#: actions/apidirectmessagenew.php:146
+msgid "Recipient user not found."
+msgstr "کاربر گیرنده یافت نشد."
+
+#: actions/apidirectmessagenew.php:150
+msgid "Can't send direct messages to users who aren't your friend."
+msgstr "نمی‌توان پیام مستقیم را به کاربرانی که دوست شما نیستند، فرستاد."
+
+#: actions/apifavoritecreate.php:108 actions/apifavoritedestroy.php:109
+#: actions/apistatusesdestroy.php:113
+msgid "No status found with that ID."
+msgstr "هیچ وضعیتی با آن شناسه پیدا نشد."
+
+#: actions/apifavoritecreate.php:119
+msgid "This status is already a favorite!"
+msgstr "این وضعیت درحال حاضر یک وضعیت مورد علاقه است!"
+
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+msgid "Could not create favorite."
+msgstr "نمی‌توان وضعیت را موردعلاقه کرد."
+
+#: actions/apifavoritedestroy.php:122
+msgid "That status is not a favorite!"
+msgstr "این وضعیت یک وضعیت موردعلاقه نیست!"
+
+#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
+msgid "Could not delete favorite."
+msgstr "نمی‌توان وضعیت موردعلاقه را حذف کرد."
+
+#: actions/apifriendshipscreate.php:109
+msgid "Could not follow user: User not found."
+msgstr "نمی‌توان کاربر را دنبال کرد: کاربر یافت نشد."
+
+#: actions/apifriendshipscreate.php:118
+#, php-format
+msgid "Could not follow user: %s is already on your list."
+msgstr "نمی‌توان کاربر را دنبال کرد: %s هم‌اکنون در لیست شما است."
+
+#: actions/apifriendshipsdestroy.php:109
+msgid "Could not unfollow user: User not found."
+msgstr "نمی‌توان کاربر را دنبال نکرد: کاربر یافت نشد."
+
+#: actions/apifriendshipsdestroy.php:120
+msgid "You cannot unfollow yourself!"
+msgstr "نمی‌توانید خودتان را دنبال نکنید!"
+
+#: actions/apifriendshipsexists.php:94
+msgid "Two user ids or screen_names must be supplied."
+msgstr "باید ۲ شناسه‌ی کاربر یا نام ظاهری وارد کنید."
+
+#: actions/apifriendshipsshow.php:135
+msgid "Could not determine source user."
+msgstr "نمی‌توان کاربر منبع را تعیین کرد."
+
+#: actions/apifriendshipsshow.php:143
+msgid "Could not find target user."
+msgstr "نمی‌توان کاربر هدف را پیدا کرد."
+
+#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/newgroup.php:126 actions/profilesettings.php:208
+#: actions/register.php:205
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr "لقب باید شامل حروف کوچک و اعداد و بدون فاصله باشد."
+
+#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/newgroup.php:130 actions/profilesettings.php:231
+#: actions/register.php:208
+msgid "Nickname already in use. Try another one."
+msgstr "این لقب در حال حاضر ثبت شده است. لطفا یکی دیگر انتخاب کنید."
+
+#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/newgroup.php:133 actions/profilesettings.php:211
+#: actions/register.php:210
+msgid "Not a valid nickname."
+msgstr "لقب نا معتبر."
+
+#: actions/apigroupcreate.php:196 actions/editgroup.php:195
+#: actions/newgroup.php:139 actions/profilesettings.php:215
+#: actions/register.php:217
+msgid "Homepage is not a valid URL."
+msgstr "برگهٔ آغازین یک نشانی معتبر نیست."
+
+#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/newgroup.php:142 actions/profilesettings.php:218
+#: actions/register.php:220
+msgid "Full name is too long (max 255 chars)."
+msgstr "نام کامل طولانی است (۲۵۵ حرف در حالت بیشینه(."
+
+#: actions/apigroupcreate.php:213
+#, php-format
+msgid "Description is too long (max %d chars)."
+msgstr "توصیف بسیار زیاد است (حداکثر %d حرف)."
+
+#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/newgroup.php:148 actions/profilesettings.php:225
+#: actions/register.php:227
+msgid "Location is too long (max 255 chars)."
+msgstr "مکان طولانی است (حداکثر ۲۵۵ حرف)"
+
+#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/newgroup.php:159
+#, php-format
+msgid "Too many aliases! Maximum %d."
+msgstr "نام‌های مستعار بسیار زیاد هستند! حداکثر %d."
+
+#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/newgroup.php:168
+#, php-format
+msgid "Invalid alias: \"%s\""
+msgstr "نام‌مستعار غیر مجاز: «%s»"
+
+#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/newgroup.php:172
+#, php-format
+msgid "Alias \"%s\" already in use. Try another one."
+msgstr "نام‌مستعار «%s» ازپیش گرفته‌شده‌است. یکی دیگر را امتحان کنید."
+
+#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/newgroup.php:178
+msgid "Alias can't be the same as nickname."
+msgstr "نام و نام مستعار شما نمی تواند یکی باشد ."
+
+#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
+#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
+#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91
+msgid "Group not found!"
+msgstr "گروه یافت نشد!"
+
+#: actions/apigroupjoin.php:110
+msgid "You are already a member of that group."
+msgstr "شما از پیش یک عضو این گروه هستید."
+
+#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+msgid "You have been blocked from that group by the admin."
+msgstr "دسترسی شما به گروه توسط مدیر آن محدود شده است."
+
+#: actions/apigroupjoin.php:138
+#, php-format
+msgid "Could not join user %s to group %s."
+msgstr "عضویت %s در گروه %s نا موفق بود."
+
+#: actions/apigroupleave.php:114
+msgid "You are not a member of this group."
+msgstr "شما یک عضو این گروه نیستید."
+
+#: actions/apigroupleave.php:124
+#, php-format
+msgid "Could not remove user %s to group %s."
+msgstr "خارج شدن %s از گروه %s نا موفق بود"
+
+#: actions/apigrouplist.php:95
+#, php-format
+msgid "%s's groups"
+msgstr "گروه‌های %s"
+
+#: actions/apigrouplist.php:103
+#, php-format
+msgid "Groups %s is a member of on %s."
+msgstr ""
+
+#: actions/apigrouplistall.php:90 actions/usergroups.php:62
+#, php-format
+msgid "%s groups"
+msgstr "%s گروه"
+
+#: actions/apigrouplistall.php:94
+#, php-format
+msgid "groups on %s"
+msgstr "گروه‌ها در %s"
+
+#: actions/apistatusesdestroy.php:107
+msgid "This method requires a POST or DELETE."
+msgstr "این روش نیازمند POST یا DELETE است."
+
+#: actions/apistatusesdestroy.php:130
+msgid "You may not delete another user's status."
+msgstr "شما توانایی حذف وضعیت کاربر دیگری را ندارید."
+
+#: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
+#: actions/deletenotice.php:52 actions/shownotice.php:92
+msgid "No such notice."
+msgstr "چنین پیامی وجود ندارد."
+
+#: actions/apistatusesretweet.php:83
+msgid "Cannot repeat your own notice."
+msgstr "نمی توانید خبر خود را تکرار کنید."
+
+#: actions/apistatusesretweet.php:91
+msgid "Already repeated that notice."
+msgstr "ابن خبر قبلا فرستاده شده"
+
+#: actions/apistatusesshow.php:138
+msgid "Status deleted."
+msgstr "وضعیت حذف شد."
+
+#: actions/apistatusesshow.php:144
+msgid "No status with that ID found."
+msgstr "هیچ وضعیتی با آن شناسه یافت نشد."
+
+#: actions/apistatusesupdate.php:157 actions/newnotice.php:155
+#: scripts/maildaemon.php:71
+#, php-format
+msgid "That's too long. Max notice size is %d chars."
+msgstr "خیلی طولانی است. حداکثر طول مجاز پیام %d حرف است."
+
+#: actions/apistatusesupdate.php:198
+msgid "Not found"
+msgstr "یافت نشد"
+
+#: actions/apistatusesupdate.php:227 actions/newnotice.php:183
+#, php-format
+msgid "Max notice size is %d chars, including attachment URL."
+msgstr "حداکثر طول پیام %d حرف است که شامل ضمیمه نیز می‌باشد"
+
+#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
+msgid "Unsupported format."
+msgstr "قالب پشتیبانی نشده."
+
+#: actions/apitimelinefavorites.php:108
+#, php-format
+msgid "%s / Favorites from %s"
+msgstr "%s / دوست داشتنی از %s"
+
+#: actions/apitimelinefavorites.php:120
+#, php-format
+msgid "%s updates favorited by %s / %s."
+msgstr "%s به روز رسانی های دوست داشتنی %s / %s"
+
+#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
+#: actions/grouprss.php:131 actions/userrss.php:90
+#, php-format
+msgid "%s timeline"
+msgstr "خط زمانی %s"
+
+#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
+#: actions/userrss.php:92
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "به روز رسانی‌های %1$s در %2$s"
+
+#: actions/apitimelinementions.php:117
+#, php-format
+msgid "%1$s / Updates mentioning %2$s"
+msgstr "%$1s / به روز رسانی های شامل %2$s"
+
+#: actions/apitimelinementions.php:127
+#, php-format
+msgid "%1$s updates that reply to updates from %2$s / %3$s."
+msgstr "%1$s به روز رسانی هایی که در پاسخ به $2$s / %3$s"
+
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#, php-format
+msgid "%s public timeline"
+msgstr "%s خط‌زمانی عمومی"
+
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#, php-format
+msgid "%s updates from everyone!"
+msgstr "%s به روز رسانی های عموم"
+
+#: actions/apitimelineretweetedbyme.php:112
+#, php-format
+msgid "Repeated by %s"
+msgstr ""
+
+#: actions/apitimelineretweetedtome.php:111
+#, php-format
+msgid "Repeated to %s"
+msgstr ""
+
+#: actions/apitimelineretweetsofme.php:112
+#, php-format
+msgid "Repeats of %s"
+msgstr ""
+
+#: actions/apitimelinetag.php:102 actions/tag.php:66
+#, php-format
+msgid "Notices tagged with %s"
+msgstr "پیام‌هایی که با %s نشانه گزاری شده اند."
+
+#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#, php-format
+msgid "Updates tagged with %1$s on %2$s!"
+msgstr "پیام‌های نشانه گزاری شده با %1$s در %2$s"
+
+#: actions/apiusershow.php:96
+msgid "Not found."
+msgstr "یافت نشد."
+
+#: actions/attachment.php:73
+msgid "No such attachment."
+msgstr "چنین پیوستی وجود ندارد."
+
+#: actions/avatarbynickname.php:59 actions/grouprss.php:91
+#: actions/leavegroup.php:76
+msgid "No nickname."
+msgstr "بدون لقب."
+
+#: actions/avatarbynickname.php:64
+msgid "No size."
+msgstr "بدون اندازه."
+
+#: actions/avatarbynickname.php:69
+msgid "Invalid size."
+msgstr "اندازه‌ی نادرست"
+
+#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: lib/accountsettingsaction.php:112
+msgid "Avatar"
+msgstr "چهره"
+
+#: actions/avatarsettings.php:78
+#, php-format
+msgid "You can upload your personal avatar. The maximum file size is %s."
+msgstr ""
+"شما می‌توانید چهرهٔ شخصی خود را بارگذاری کنید. حداکثر اندازه پرونده %s است."
+
+#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
+#: actions/grouplogo.php:178 actions/remotesubscribe.php:191
+#: actions/userauthorization.php:72 actions/userrss.php:103
+msgid "User without matching profile"
+msgstr "کاربر بدون مشخصات"
+
+#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
+#: actions/grouplogo.php:251
+msgid "Avatar settings"
+msgstr "تنظیمات چهره"
+
+#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
+#: actions/grouplogo.php:199 actions/grouplogo.php:259
+msgid "Original"
+msgstr "اصلی"
+
+#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
+#: actions/grouplogo.php:210 actions/grouplogo.php:271
+msgid "Preview"
+msgstr "پیش‌نمایش"
+
+#: actions/avatarsettings.php:149 lib/deleteuserform.php:66
+#: lib/noticelist.php:603
+msgid "Delete"
+msgstr "حذف"
+
+#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+msgid "Upload"
+msgstr "پایین‌گذاری"
+
+#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+msgid "Crop"
+msgstr "برش"
+
+#: actions/avatarsettings.php:268 actions/disfavor.php:74
+#: actions/emailsettings.php:238 actions/favor.php:75
+#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupunblock.php:66 actions/imsettings.php:206
+#: actions/invite.php:56 actions/login.php:135 actions/makeadmin.php:66
+#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
+#: actions/othersettings.php:145 actions/passwordsettings.php:138
+#: actions/profilesettings.php:187 actions/recoverpassword.php:337
+#: actions/register.php:165 actions/remotesubscribe.php:77
+#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
+#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/unsubscribe.php:69 actions/userauthorization.php:52
+#: lib/designsettings.php:294
+msgid "There was a problem with your session token. Try again, please."
+msgstr "مشکلی در دریافت جلسه‌ی شما وجود دارد. لطفا بعدا سعی کنید."
+
+#: actions/avatarsettings.php:281 actions/designadminpanel.php:103
+#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/imsettings.php:220 actions/recoverpassword.php:44
+#: actions/smssettings.php:248 lib/designsettings.php:304
+msgid "Unexpected form submission."
+msgstr "ارسال غیر قابل انتظار فرم."
+
+#: actions/avatarsettings.php:328
+msgid "Pick a square area of the image to be your avatar"
+msgstr "یک مربع از عکس خود را انتخاب کنید تا چهره‌ی شما باشد."
+
+#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+msgid "Lost our file data."
+msgstr "فایل اطلاعات خود را گم کرده ایم."
+
+#: actions/avatarsettings.php:366
+msgid "Avatar updated."
+msgstr "چهره به روز رسانی شد."
+
+#: actions/avatarsettings.php:369
+msgid "Failed updating avatar."
+msgstr "به روز رسانی چهره موفقیت آمیر نبود."
+
+#: actions/avatarsettings.php:393
+msgid "Avatar deleted."
+msgstr "چهره پاک شد."
+
+#: actions/block.php:69
+msgid "You already blocked that user."
+msgstr "شما هم اکنون آن کاربر را مسدود کرده اید."
+
+#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
+msgid "Block user"
+msgstr "مسدود کردن کاربر"
+
+#: actions/block.php:130
+msgid ""
+"Are you sure you want to block this user? Afterwards, they will be "
+"unsubscribed from you, unable to subscribe to you in the future, and you "
+"will not be notified of any @-replies from them."
+msgstr ""
+"آیا شما اطمینان دارید که می‌خواهید این کاربر را مسدود کنید؟ پس از آن دیگر "
+"پیام‌های شما را مشاهده نخواهد کرد و نمی‌تواند درخواست کند که پیام‌های شما را "
+"دنبال کند. همچنین دیگر شما از پیام‌هایی که در آن از شما یاد می‌کند با خبر "
+"نخواهید شد"
+
+#: actions/block.php:143 actions/deletenotice.php:145
+#: actions/deleteuser.php:147 actions/groupblock.php:178
+msgid "No"
+msgstr "خیر"
+
+#: actions/block.php:143 actions/deleteuser.php:147
+msgid "Do not block this user"
+msgstr "کاربر را مسدود نکن"
+
+#: actions/block.php:144 actions/deletenotice.php:146
+#: actions/deleteuser.php:148 actions/groupblock.php:179
+msgid "Yes"
+msgstr "بله"
+
+#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+msgid "Block this user"
+msgstr "کاربر را مسدود کن"
+
+#: actions/block.php:162
+msgid "Failed to save block information."
+msgstr ""
+
+#: actions/blockedfromgroup.php:73 actions/editgroup.php:84
+#: actions/groupdesignsettings.php:84 actions/grouplogo.php:86
+#: actions/groupmembers.php:76 actions/joingroup.php:76
+#: actions/showgroup.php:121
+msgid "No nickname"
+msgstr "بدون لقب"
+
+#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
+#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
+#: actions/grouplogo.php:99 actions/groupmembers.php:83
+#: actions/joingroup.php:83 actions/showgroup.php:137
+msgid "No such group"
+msgstr "چنین گروهی وجود ندارد"
+
+#: actions/blockedfromgroup.php:90
+#, php-format
+msgid "%s blocked profiles"
+msgstr "%s کاربران مسدود شده"
+
+#: actions/blockedfromgroup.php:93
+#, php-format
+msgid "%s blocked profiles, page %d"
+msgstr "%s کاربران مسدود شده، صفحه‌ی %d"
+
+#: actions/blockedfromgroup.php:108
+msgid "A list of the users blocked from joining this group."
+msgstr "فهرستی از افراد مسدود شده در پیوستن به این گروه."
+
+#: actions/blockedfromgroup.php:281
+msgid "Unblock user from group"
+msgstr "آزاد کردن کاربر در پیوستن به گروه"
+
+#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+msgid "Unblock"
+msgstr "آزاد سازی"
+
+#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+msgid "Unblock this user"
+msgstr "آزاد سازی کاربر"
+
+#: actions/bookmarklet.php:50
+msgid "Post to "
+msgstr "ارسال به "
+
+#: actions/confirmaddress.php:75
+msgid "No confirmation code."
+msgstr "بدون کد تصدیق."
+
+#: actions/confirmaddress.php:80
+msgid "Confirmation code not found."
+msgstr "کد تصدیق پیدا نشد."
+
+#: actions/confirmaddress.php:85
+msgid "That confirmation code is not for you!"
+msgstr "آن کد تصدیق برای شما نیست!"
+
+#: actions/confirmaddress.php:90
+#, php-format
+msgid "Unrecognized address type %s"
+msgstr "نوع نشانی نامشخص است %s"
+
+#: actions/confirmaddress.php:94
+msgid "That address has already been confirmed."
+msgstr "آن نشانی در حال حاضر تصدیق شده است."
+
+#: actions/confirmaddress.php:114 actions/emailsettings.php:296
+#: actions/emailsettings.php:427 actions/imsettings.php:258
+#: actions/imsettings.php:401 actions/othersettings.php:174
+#: actions/profilesettings.php:276 actions/smssettings.php:278
+#: actions/smssettings.php:420
+msgid "Couldn't update user."
+msgstr "نمی‌توان کاربر را به روز کرد."
+
+#: actions/confirmaddress.php:126 actions/emailsettings.php:391
+#: actions/imsettings.php:363 actions/smssettings.php:382
+msgid "Couldn't delete email confirmation."
+msgstr "نمی‌توان تصدیق پست الکترونیک را پاک کرد."
+
+#: actions/confirmaddress.php:144
+msgid "Confirm Address"
+msgstr "تایید نشانی"
+
+#: actions/confirmaddress.php:159
+#, php-format
+msgid "The address \"%s\" has been confirmed for your account."
+msgstr "نشانی «%s« برای شما تصدیق شد."
+
+#: actions/conversation.php:99
+msgid "Conversation"
+msgstr "مکالمه"
+
+#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
+#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+msgid "Notices"
+msgstr "پیام‌ها"
+
+#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
+#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
+#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/tagother.php:33 actions/unsubscribe.php:52
+#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/settingsaction.php:72
+msgid "Not logged in."
+msgstr "شما به سیستم وارد نشده اید."
+
+#: actions/deletenotice.php:71
+msgid "Can't delete this notice."
+msgstr "نمی‌توان این پیام را پاک کرد."
+
+#: actions/deletenotice.php:103
+msgid ""
+"You are about to permanently delete a notice. Once this is done, it cannot "
+"be undone."
+msgstr ""
+"شما می‌خواهید یک پیام را به طور کامل پاک کنید. پس از انجام این کار نمی‌توان "
+"پیام را بازگرداند."
+
+#: actions/deletenotice.php:109 actions/deletenotice.php:141
+msgid "Delete notice"
+msgstr "پیام را پاک کن"
+
+#: actions/deletenotice.php:144
+msgid "Are you sure you want to delete this notice?"
+msgstr "آیا اطمینان دارید که می‌خواهید این پیام را پاک کنید؟"
+
+#: actions/deletenotice.php:145
+msgid "Do not delete this notice"
+msgstr "این پیام را پاک نکن"
+
+#: actions/deletenotice.php:146 lib/noticelist.php:603
+msgid "Delete this notice"
+msgstr "این پیام را پاک کن"
+
+#: actions/deletenotice.php:157
+msgid "There was a problem with your session token. Try again, please."
+msgstr "مشکلی در دریافت جلسه‌ی شما وجود دارد. لطفا بعدا سعی کنید."
+
+#: actions/deleteuser.php:67
+msgid "You cannot delete users."
+msgstr "شما نمی‌توانید کاربران را پاک کنید."
+
+#: actions/deleteuser.php:74
+msgid "You can only delete local users."
+msgstr "شما فقط می‌توانید کاربران محلی را پاک کنید."
+
+#: actions/deleteuser.php:110 actions/deleteuser.php:133
+msgid "Delete user"
+msgstr "حذف کاربر"
+
+#: actions/deleteuser.php:135
+msgid ""
+"Are you sure you want to delete this user? This will clear all data about "
+"the user from the database, without a backup."
+msgstr ""
+"آیا مطمئن هستید که می‌خواهید این کاربر را پاک کنید؟ با این کار تمام اطلاعات "
+"پاک و بدون برگشت خواهند بود."
+
+#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+msgid "Delete this user"
+msgstr "حذف این کاربر"
+
+#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
+#: lib/adminpanelaction.php:302 lib/groupnav.php:119
+msgid "Design"
+msgstr "طرح"
+
+#: actions/designadminpanel.php:73
+msgid "Design settings for this StatusNet site."
+msgstr "تنظیمات ظاهری برای این سایت."
+
+#: actions/designadminpanel.php:275
+msgid "Invalid logo URL."
+msgstr "نشانی اینترنتی نشان نامعتبر است."
+
+#: actions/designadminpanel.php:279
+#, php-format
+msgid "Theme not available: %s"
+msgstr "پوسته در دسترس نمی‌باشد: %s"
+
+#: actions/designadminpanel.php:375
+msgid "Change logo"
+msgstr "تغییر نشان"
+
+#: actions/designadminpanel.php:380
+msgid "Site logo"
+msgstr "نشان وب‌گاه"
+
+#: actions/designadminpanel.php:387
+msgid "Change theme"
+msgstr "تغییر پوسته"
+
+#: actions/designadminpanel.php:404
+msgid "Site theme"
+msgstr "پوستهٔ وب‌گاه"
+
+#: actions/designadminpanel.php:405
+msgid "Theme for the site."
+msgstr "پوسته برای وب‌گاه"
+
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
+msgid "Change background image"
+msgstr "تغییر تصویر پیش‌زمینه"
+
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
+#: lib/designsettings.php:178
+msgid "Background"
+msgstr "پیش‌زمینه"
+
+#: actions/designadminpanel.php:427
+#, php-format
+msgid ""
+"You can upload a background image for the site. The maximum file size is %1"
+"$s."
+msgstr ""
+"شما می‌توانید یک تصویر پیش‌زمینه را برای وب‌گاه بارگذاری کنید. بیشینهٔ اندازهٔ "
+"پرونده %1 $s است."
+
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
+msgid "On"
+msgstr "روشن"
+
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
+msgid "Off"
+msgstr "خاموش"
+
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
+msgid "Turn background image on or off."
+msgstr "تصویر پیش‌زمینه را فعال یا غیرفعال کنید."
+
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
+msgid "Tile background image"
+msgstr "تصویر پیش‌زمینهٔ موزاییکی"
+
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
+msgid "Change colours"
+msgstr "عوض‌کردن رنگ‌ها"
+
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
+msgid "Content"
+msgstr "محتوا"
+
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
+msgid "Sidebar"
+msgstr "ستون کناری"
+
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
+msgid "Text"
+msgstr "متن"
+
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
+msgid "Links"
+msgstr "پیوندها"
+
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
+msgid "Use defaults"
+msgstr "استفاده‌کردن از پیش‌فرض‌ها"
+
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
+msgid "Restore default designs"
+msgstr "بازگرداندن طرح‌های پیش‌فرض"
+
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
+msgid "Reset back to default"
+msgstr "برگشت به حالت پیش گزیده"
+
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
+#: actions/siteadminpanel.php:421 actions/smssettings.php:181
+#: actions/subscriptions.php:203 actions/tagother.php:154
+#: actions/useradminpanel.php:313 lib/designsettings.php:256
+#: lib/groupeditform.php:202
+msgid "Save"
+msgstr "ذخیره‌کردن"
+
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
+msgid "Save design"
+msgstr "ذخیره‌کردن طرح"
+
+#: actions/disfavor.php:81
+msgid "This notice is not a favorite!"
+msgstr "این آگهی یک آگهی برگزیده نیست!"
+
+#: actions/disfavor.php:94
+msgid "Add to favorites"
+msgstr "افزودن به علاقه‌مندی‌ها"
+
+#: actions/doc.php:69
+msgid "No such document."
+msgstr "چنین سندی وجود ندارد."
+
+#: actions/editgroup.php:56
+#, php-format
+msgid "Edit %s group"
+msgstr "ویرایش گروه %s"
+
+#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
+msgid "You must be logged in to create a group."
+msgstr "برای ساخت یک گروه، باید وارد شده باشید."
+
+#: actions/editgroup.php:103 actions/editgroup.php:168
+#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+msgid "You must be an admin to edit the group"
+msgstr "برای ویرایش گروه، باید یک مدیر باشید."
+
+#: actions/editgroup.php:154
+msgid "Use this form to edit the group."
+msgstr "از این روش برای ویرایش گروه استفاده کنید."
+
+#: actions/editgroup.php:201 actions/newgroup.php:145
+#, php-format
+msgid "description is too long (max %d chars)."
+msgstr "توصیف بسیار زیاد است (حداکثر %d حرف)."
+
+#: actions/editgroup.php:253
+msgid "Could not update group."
+msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد."
+
+#: actions/editgroup.php:259 classes/User_group.php:390
+msgid "Could not create aliases."
+msgstr "نمی‌توان نام‌های مستعار را ساخت."
+
+#: actions/editgroup.php:269
+msgid "Options saved."
+msgstr "گزینه‌ها ذخیره شدند."
+
+#: actions/emailsettings.php:60
+msgid "Email Settings"
+msgstr "تنظیمات پست الکترونیک"
+
+#: actions/emailsettings.php:71
+#, php-format
+msgid "Manage how you get email from %%site.name%%."
+msgstr "چگونگی دریافت نامه از %%site.name%% را اداره کنید."
+
+#: actions/emailsettings.php:100 actions/imsettings.php:100
+#: actions/smssettings.php:104
+msgid "Address"
+msgstr "نشانی"
+
+#: actions/emailsettings.php:105
+msgid "Current confirmed email address."
+msgstr "نشانی پست الکترونیکی تایید شدهٔ کنونی"
+
+#: actions/emailsettings.php:107 actions/emailsettings.php:140
+#: actions/imsettings.php:108 actions/smssettings.php:115
+#: actions/smssettings.php:158
+msgid "Remove"
+msgstr "حذف"
+
+#: actions/emailsettings.php:113
+msgid ""
+"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
+"a message with further instructions."
+msgstr ""
+
+#: actions/emailsettings.php:117 actions/imsettings.php:120
+#: actions/smssettings.php:126
+msgid "Cancel"
+msgstr "انصراف"
+
+#: actions/emailsettings.php:121
+msgid "Email Address"
+msgstr "نشانی پست الکترونیکی"
+
+#: actions/emailsettings.php:123
+msgid "Email address, like \"UserName@example.org\""
+msgstr "نشانی پست الکترونیکی، مانند «UserName@example.org»"
+
+#: actions/emailsettings.php:126 actions/imsettings.php:133
+#: actions/smssettings.php:145
+msgid "Add"
+msgstr "افزودن"
+
+#: actions/emailsettings.php:133 actions/smssettings.php:152
+msgid "Incoming email"
+msgstr "پست الکترونیک ورودی"
+
+#: actions/emailsettings.php:138 actions/smssettings.php:157
+msgid "Send email to this address to post new notices."
+msgstr "برای ارسال پیام با استفاده از پست الکترونیک به این نشانی نامه بفرستید."
+
+#: actions/emailsettings.php:145 actions/smssettings.php:162
+msgid "Make a new email address for posting to; cancels the old one."
+msgstr "نشانی جدید برای ارسال پیام ایجاد کن؛ نشانی قبلی فسخ می‌شود."
+
+#: actions/emailsettings.php:148 actions/smssettings.php:164
+msgid "New"
+msgstr "جدید"
+
+#: actions/emailsettings.php:153 actions/imsettings.php:139
+#: actions/smssettings.php:169
+msgid "Preferences"
+msgstr "ترجیحات"
+
+#: actions/emailsettings.php:158
+msgid "Send me notices of new subscriptions through email."
+msgstr "پیام‌های کسانی را که به تازگی دنبال می‌کنم با پست الکترونیک برایم بفرست."
+
+#: actions/emailsettings.php:163
+msgid "Send me email when someone adds my notice as a favorite."
+msgstr ""
+"هر وقت کسی پیام های مرا دوست داشتنی کرد، مرا با پست اکترونیک با خبر کن."
+
+#: actions/emailsettings.php:169
+msgid "Send me email when someone sends me a private message."
+msgstr "هر وقت کسی برای من پیام خصوصی فرستاد، مرا با پست الکترونیک با خبر کن."
+
+#: actions/emailsettings.php:174
+msgid "Send me email when someone sends me an \"@-reply\"."
+msgstr "هر وقت کسی از من در پیام خود یاد کرد، مرا با پست الکترونیک با خبر کن."
+
+#: actions/emailsettings.php:179
+msgid "Allow friends to nudge me and send me an email."
+msgstr "اجازه بده دوستان توجه مرا جذب کنند و به من نامه بفرستند."
+
+#: actions/emailsettings.php:185
+msgid "I want to post notices by email."
+msgstr "می‌خواهم با نامه پیام ارسال کنم."
+
+#: actions/emailsettings.php:191
+msgid "Publish a MicroID for my email address."
+msgstr "یک شناسه برای پست الکترونیک من منتشر کن."
+
+#: actions/emailsettings.php:302 actions/imsettings.php:264
+#: actions/othersettings.php:180 actions/smssettings.php:284
+msgid "Preferences saved."
+msgstr "تنظیمات ذخیره شد."
+
+#: actions/emailsettings.php:320
+msgid "No email address."
+msgstr "پست الکترونیک وجود ندارد."
+
+#: actions/emailsettings.php:327
+msgid "Cannot normalize that email address"
+msgstr "نمی‌توان نشانی را قانونی کرد"
+
+#: actions/emailsettings.php:331 actions/siteadminpanel.php:158
+msgid "Not a valid email address"
+msgstr "این یک نشانی صحیح نیست"
+
+#: actions/emailsettings.php:334
+msgid "That is already your email address."
+msgstr "هم اکنون نشانی شما همین است."
+
+#: actions/emailsettings.php:337
+msgid "That email address already belongs to another user."
+msgstr "این نشانی در حال حاضر متعلق به فرد دیگری است."
+
+#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/smssettings.php:337
+msgid "Couldn't insert confirmation code."
+msgstr "نمی‌توان کد تایید را اضافه کرد."
+
+#: actions/emailsettings.php:359
+msgid ""
+"A confirmation code was sent to the email address you added. Check your "
+"inbox (and spam box!) for the code and instructions on how to use it."
+msgstr ""
+"کد تایید به نشانی شما ارسال شد. نامه های خود را بررسی کنید برای کد تایید و "
+"راه استفاده."
+
+#: actions/emailsettings.php:379 actions/imsettings.php:351
+#: actions/smssettings.php:370
+msgid "No pending confirmation to cancel."
+msgstr "هیچ تاییدی برای فسخ کردن وجود ندارد."
+
+#: actions/emailsettings.php:383 actions/imsettings.php:355
+msgid "That is the wrong IM address."
+msgstr "نشانی پیام رسان اشتباه است."
+
+#: actions/emailsettings.php:395 actions/imsettings.php:367
+#: actions/smssettings.php:386
+msgid "Confirmation cancelled."
+msgstr "تایید فسخ شد."
+
+#: actions/emailsettings.php:413
+msgid "That is not your email address."
+msgstr "آن نشانی شما نیست."
+
+#: actions/emailsettings.php:432 actions/imsettings.php:408
+#: actions/smssettings.php:425
+msgid "The address was removed."
+msgstr "نشانی پاک شده است."
+
+#: actions/emailsettings.php:446 actions/smssettings.php:518
+msgid "No incoming email address."
+msgstr "هیچ نشانی ورودی وجود ندارد."
+
+#: actions/emailsettings.php:456 actions/emailsettings.php:478
+#: actions/smssettings.php:528 actions/smssettings.php:552
+msgid "Couldn't update user record."
+msgstr "نمی‌توان اطلاعات کاربر را به روز کرد."
+
+#: actions/emailsettings.php:459 actions/smssettings.php:531
+msgid "Incoming email address removed."
+msgstr "نشانی ورودی پاک شد."
+
+#: actions/emailsettings.php:481 actions/smssettings.php:555
+msgid "New incoming email address added."
+msgstr "نشانی ورودی جدید اضافه شد."
+
+#: actions/favor.php:79
+msgid "This notice is already a favorite!"
+msgstr "این پیام هم اکنون دوست داشتنی شده است."
+
+#: actions/favor.php:92 lib/disfavorform.php:140
+msgid "Disfavor favorite"
+msgstr "دوست ندارم"
+
+#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: lib/publicgroupnav.php:93
+msgid "Popular notices"
+msgstr "آگهی‌های محبوب"
+
+#: actions/favorited.php:67
+#, php-format
+msgid "Popular notices, page %d"
+msgstr "آگهی‌های محبوب، صفحهٔ %d"
+
+#: actions/favorited.php:79
+msgid "The most popular notices on the site right now."
+msgstr "دوست داشتنی ترین پیام های سایت در حال حاضر."
+
+#: actions/favorited.php:150
+msgid "Favorite notices appear on this page but no one has favorited one yet."
+msgstr ""
+"پیام‌های دوست داشتنی در این صفحه نمایش داده می‌شوند اما هیچ کس پیامی را دوست "
+"داشتنی نکرده است."
+
+#: actions/favorited.php:153
+msgid ""
+"Be the first to add a notice to your favorites by clicking the fave button "
+"next to any notice you like."
+msgstr ""
+"یک پیام را دوست داشتنی کنید با کلیک کردن روی دکمه‌ی دوست داشتنی نزدیک هر پیام."
+
+#: actions/favorited.php:156
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to add a "
+"notice to your favorites!"
+msgstr ""
+"چرا [ثبت نام](%%action.register%%) نمی‌کنید و یک پیام را دوست داشتنی کنید؟"
+
+#: actions/favoritesrss.php:111 actions/showfavorites.php:77
+#: lib/personalgroupnav.php:115
+#, php-format
+msgid "%s's favorite notices"
+msgstr "دوست داشتنی های %s"
+
+#: actions/favoritesrss.php:115
+#, php-format
+msgid "Updates favored by %1$s on %2$s!"
+msgstr "پیام‌های دوست داشتنی %s در %s"
+
+#: actions/featured.php:69 lib/featureduserssection.php:87
+#: lib/publicgroupnav.php:89
+msgid "Featured users"
+msgstr "کاربران ویژه"
+
+#: actions/featured.php:71
+#, php-format
+msgid "Featured users, page %d"
+msgstr "کاربران ویژه، صفحه‌ی %d"
+
+#: actions/featured.php:99
+#, php-format
+msgid "A selection of some great users on %s"
+msgstr ""
+
+#: actions/file.php:34
+msgid "No notice ID."
+msgstr ""
+
+#: actions/file.php:38
+msgid "No notice."
+msgstr "بدون آگهی."
+
+#: actions/file.php:42
+msgid "No attachments."
+msgstr "بدون ضمیمه."
+
+#: actions/file.php:51
+msgid "No uploaded attachments."
+msgstr "بدون ضمیمه های ارسال شده."
+
+#: actions/finishremotesubscribe.php:69
+msgid "Not expecting this response!"
+msgstr "انتظار چنین جوابی وجود نداشت!"
+
+#: actions/finishremotesubscribe.php:80
+msgid "User being listened to does not exist."
+msgstr "کاربری که دنبالش هستید وجود ندارد."
+
+#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
+msgid "You can use the local subscription!"
+msgstr "شما می‌توانید از دنبال کردن محلی استفاده کنید!"
+
+#: actions/finishremotesubscribe.php:99
+msgid "That user has blocked you from subscribing."
+msgstr "این کاربر شما را از دنبال کردن خودش منع کرده است."
+
+#: actions/finishremotesubscribe.php:110
+msgid "You are not authorized."
+msgstr "شما شناسایی نشده اید."
+
+#: actions/finishremotesubscribe.php:113
+msgid "Could not convert request token to access token."
+msgstr "نمی‌توان نشانه‌ی درخواست شما را به نشانه‌ی دسترسی تبدیل کرد."
+
+#: actions/finishremotesubscribe.php:118
+msgid "Remote service uses unknown version of OMB protocol."
+msgstr "خدمات مورد نظر از نسخه‌ی نا مفهومی از قرارداد OMB استفاده می‌کند."
+
+#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
+msgid "Error updating remote profile"
+msgstr "اشکال در به روز کردن کاربر دوردست."
+
+#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
+#: actions/grouprss.php:98 actions/groupunblock.php:86
+#: actions/leavegroup.php:83 actions/makeadmin.php:86 lib/command.php:212
+#: lib/command.php:263
+msgid "No such group."
+msgstr "چنین گروهی وجود ندارد."
+
+#: actions/getfile.php:75
+msgid "No such file."
+msgstr "چنین پرونده‌ای وجود ندارد."
+
+#: actions/getfile.php:79
+msgid "Cannot read file."
+msgstr "نمی‌توان پرونده را خواند."
+
+#: actions/groupblock.php:71 actions/groupunblock.php:71
+#: actions/makeadmin.php:71 actions/subedit.php:46
+#: lib/profileformaction.php:70
+msgid "No profile specified."
+msgstr "کاربری مشخص نشده است."
+
+#: actions/groupblock.php:76 actions/groupunblock.php:76
+#: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
+#: lib/profileformaction.php:77
+msgid "No profile with that ID."
+msgstr "کاربری با چنین شناسه‌ای وجود ندارد."
+
+#: actions/groupblock.php:81 actions/groupunblock.php:81
+#: actions/makeadmin.php:81
+msgid "No group specified."
+msgstr "گروهی مشخص نشده است."
+
+#: actions/groupblock.php:91
+msgid "Only an admin can block group members."
+msgstr "فقط یک مدیر می‌تواند اعضای یک گروه را مسدود کند."
+
+#: actions/groupblock.php:95
+msgid "User is already blocked from group."
+msgstr "هم اکنون دسترسی کاربر به گروه مسدود شده است."
+
+#: actions/groupblock.php:100
+msgid "User is not a member of group."
+msgstr "کاربر عضو گروه نیست."
+
+#: actions/groupblock.php:136 actions/groupmembers.php:314
+msgid "Block user from group"
+msgstr "دسترسی کاربر به گروه را مسدود کن"
+
+#: actions/groupblock.php:162
+#, php-format
+msgid ""
+"Are you sure you want to block user \"%s\" from the group \"%s\"? They will "
+"be removed from the group, unable to post, and unable to subscribe to the "
+"group in the future."
+msgstr "آیا مطمئن هستید می‌خواهید دسترسی »%s« را به گروه »%s« مسدود کنید؟"
+
+#: actions/groupblock.php:178
+msgid "Do not block this user from this group"
+msgstr "دسترسی کاربر به گروه را مسدود نکن"
+
+#: actions/groupblock.php:179
+msgid "Block this user from this group"
+msgstr "دسترسی کاربر را به گروه مسدود کن"
+
+#: actions/groupblock.php:196
+msgid "Database error blocking user from group."
+msgstr "اشکال پایگاه داده در مسدود کردن کاربر"
+
+#: actions/groupbyid.php:74
+msgid "No ID"
+msgstr "شناسه وجود ندارد"
+
+#: actions/groupdesignsettings.php:68
+msgid "You must be logged in to edit a group."
+msgstr "برای ویرایش گروه باید وارد شوید."
+
+#: actions/groupdesignsettings.php:141
+msgid "Group design"
+msgstr "ظاهر گروه"
+
+#: actions/groupdesignsettings.php:152
+msgid ""
+"Customize the way your group looks with a background image and a colour "
+"palette of your choice."
+msgstr "ظاهر گروه را تغییر دهید تا شما را راضی کند."
+
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
+msgid "Couldn't update your design."
+msgstr "نمی‌توان ظاهر را به روز کرد."
+
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
+#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
+msgid "Unable to save your design settings!"
+msgstr "نمی‌توان تنظیمات شما را ذخیره کرد!"
+
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+msgid "Design preferences saved."
+msgstr "ترجیحات طرح ذخیره شد."
+
+#: actions/grouplogo.php:139 actions/grouplogo.php:192
+msgid "Group logo"
+msgstr "نشان گروه"
+
+#: actions/grouplogo.php:150
+#, php-format
+msgid ""
+"You can upload a logo image for your group. The maximum file size is %s."
+msgstr "شما می‌توانید یک نشان برای گروه خود با بیشینه حجم %s بفرستید."
+
+#: actions/grouplogo.php:362
+msgid "Pick a square area of the image to be the logo."
+msgstr "یک ناحیه‌ی مربع از تصویر را انتخاب کنید تا به عنوان نشان باشد."
+
+#: actions/grouplogo.php:396
+msgid "Logo updated."
+msgstr "نشان به‌هنگام‌سازی شد."
+
+#: actions/grouplogo.php:398
+msgid "Failed updating logo."
+msgstr "اشکال در ارسال نشان."
+
+#: actions/groupmembers.php:93 lib/groupnav.php:92
+#, php-format
+msgid "%s group members"
+msgstr "اعضای گروه %s"
+
+#: actions/groupmembers.php:96
+#, php-format
+msgid "%s group members, page %d"
+msgstr "اعضای گروه %s، صفحهٔ %d"
+
+#: actions/groupmembers.php:111
+msgid "A list of the users in this group."
+msgstr "یک فهرست از کاربران در این گروه"
+
+#: actions/groupmembers.php:175 lib/action.php:440 lib/groupnav.php:107
+msgid "Admin"
+msgstr "مدیر"
+
+#: actions/groupmembers.php:346 lib/blockform.php:69
+msgid "Block"
+msgstr "بازداشتن"
+
+#: actions/groupmembers.php:441
+msgid "Make user an admin of the group"
+msgstr "کاربر یک مدیر گروه شود"
+
+#: actions/groupmembers.php:473
+msgid "Make Admin"
+msgstr "مدیر شود"
+
+#: actions/groupmembers.php:473
+msgid "Make this user an admin"
+msgstr "این کاربر یک مدیر شود"
+
+#: actions/grouprss.php:133
+#, php-format
+msgid "Updates from members of %1$s on %2$s!"
+msgstr "به روز رسانی کابران %1$s در %2$s"
+
+#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
+msgid "Groups"
+msgstr "گروه‌ها"
+
+#: actions/groups.php:64
+#, php-format
+msgid "Groups, page %d"
+msgstr "گروه‌ها، صفحهٔ %d"
+
+#: actions/groups.php:90
+#, php-format
+msgid ""
+"%%%%site.name%%%% groups let you find and talk with people of similar "
+"interests. After you join a group you can send messages to all other members "
+"using the syntax \"!groupname\". Don't see a group you like? Try [searching "
+"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
+"%%%%)"
+msgstr ""
+"گروه های %%%site.name%%% به شما اجازه می‌دهد با کسانی که همانند شما علاقه‌مندی "
+"های خاصی دارد صحبت کنید. بعد از پیوستن به یک گروه می‌توانید به شکل !groupname "
+"به اعضای آن گروه پیام ارسال کنید .گروهی که دوست دارید را نمی‌بینید؟ می‌توانید "
+"برای یافتن آن [بگردید](%%%action.groupsearch%%%) یا آن را خودتان [ایجاد](%%%"
+"action.newgroup%%%) کنید."
+
+#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
+msgid "Create a new group"
+msgstr "یک گروه جدید بساز"
+
+#: actions/groupsearch.php:52
+#, php-format
+msgid ""
+"Search for groups on %%site.name%% by their name, location, or description. "
+"Separate the terms by spaces; they must be 3 characters or more."
+msgstr "با وارد کردن ۳ حرف و بیش‌تر در گروه‌های %%site.name%% جست‌و‌جو کنید."
+
+#: actions/groupsearch.php:58
+msgid "Group search"
+msgstr "جست‌وجوی گروه"
+
+#: actions/groupsearch.php:79 actions/noticesearch.php:117
+#: actions/peoplesearch.php:83
+msgid "No results."
+msgstr "بدون نتیجه."
+
+#: actions/groupsearch.php:82
+#, php-format
+msgid ""
+"If you can't find the group you're looking for, you can [create it](%%action."
+"newgroup%%) yourself."
+msgstr ""
+"اگر نمی‌توانید گروه مورد نظر را پیدا کنید خودتان می‌توانید آن را [ایجاد](%%"
+"action.newgroup%%) کنید."
+
+#: actions/groupsearch.php:85
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and [create the group](%%"
+"action.newgroup%%) yourself!"
+msgstr ""
+"چرا [ثبت نام](%%action.register%%) نمی‌کنید و گروه را خود [ایجاد](%%action."
+"newgroup%%) نمی‌کنید!"
+
+#: actions/groupunblock.php:91
+msgid "Only an admin can unblock group members."
+msgstr "تنها یک مدیر توانایی برداشتن منع کاربران گروه را دارد."
+
+#: actions/groupunblock.php:95
+msgid "User is not blocked from group."
+msgstr "کاربر از گروه منع نشده است."
+
+#: actions/groupunblock.php:128 actions/unblock.php:77
+msgid "Error removing the block."
+msgstr "اشکال در پاکسازی"
+
+#: actions/imsettings.php:59
+msgid "IM Settings"
+msgstr "تنظیمات پیام‌رسان فوری"
+
+#: actions/imsettings.php:70
+#, php-format
+msgid ""
+"You can send and receive notices through Jabber/GTalk [instant messages](%%"
+"doc.im%%). Configure your address and settings below."
+msgstr ""
+"شما می‌توانید پیام‌های خود را با استفاده از [پیام‌رسان‌های](%%doc.im%%) Jabber "
+"یا Gtalk ارسال/دریافت کنید. نشانی خود را در این قسمت تنظیم کنید"
+
+#: actions/imsettings.php:89
+msgid "IM is not available."
+msgstr "پیام‌رسان فوری در دسترس نیست."
+
+#: actions/imsettings.php:106
+msgid "Current confirmed Jabber/GTalk address."
+msgstr "نشانی Jabber/GTalk تایید شده کنونی"
+
+#: actions/imsettings.php:114
+#, php-format
+msgid ""
+"Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
+"message with further instructions. (Did you add %s to your buddy list?)"
+msgstr ""
+"منتظر تایید این نشانی هستیم. لطفا Jabber/Gtalk خود را برای دریافت توضیحات "
+"بیش‌تر بررسی کنید. (آیا %s را به فهرست خود اضافه کرده اید؟) "
+
+#: actions/imsettings.php:124
+msgid "IM Address"
+msgstr "نشانی پیام‌رسان فوری"
+
+#: actions/imsettings.php:126
+#, php-format
+msgid ""
+"Jabber or GTalk address, like \"UserName@example.org\". First, make sure to "
+"add %s to your buddy list in your IM client or on GTalk."
+msgstr ""
+"نشانی Jabber یا GTalk، مانند «UserName@example.org». ابتدا از اضافه کردن %s "
+"به فهرست دوستان خود در کارگیر پیام‌رسان فوری‌تان یا در GTalk مطمئن شوید."
+
+#: actions/imsettings.php:143
+msgid "Send me notices through Jabber/GTalk."
+msgstr "آگهی‌ها را از راه Jabber/GTalk برای من بفرست."
+
+#: actions/imsettings.php:148
+msgid "Post a notice when my Jabber/GTalk status changes."
+msgstr "هر وقت که وضعیت Jabber/Gtalk من فرق کرد، یک پیام ارسال کن."
+
+#: actions/imsettings.php:153
+msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
+msgstr ""
+"جواب کسانی که من آن ها را دنبال نمی‌کنم را با Jabber/Gtalk برایم ارسال کن."
+
+#: actions/imsettings.php:159
+msgid "Publish a MicroID for my Jabber/GTalk address."
+msgstr "یک شناسه‌ی کوچک برای Jabber/Gtalk من منتشر کن."
+
+#: actions/imsettings.php:285
+msgid "No Jabber ID."
+msgstr "هیچ شناسهٔ Jabber ای وجود ندارد."
+
+#: actions/imsettings.php:292
+msgid "Cannot normalize that Jabber ID"
+msgstr "نمی‌توان شناسه‌ی Jabber را تایید کرد"
+
+#: actions/imsettings.php:296
+msgid "Not a valid Jabber ID"
+msgstr "شناسه‌ی Jabber درست نیست"
+
+#: actions/imsettings.php:299
+msgid "That is already your Jabber ID."
+msgstr "این شناسه Jabber کنونی شماست."
+
+#: actions/imsettings.php:302
+msgid "Jabber ID already belongs to another user."
+msgstr "شناسه Jabber به یک کاربر دیگر مربوط است."
+
+#: actions/imsettings.php:327
+#, php-format
+msgid ""
+"A confirmation code was sent to the IM address you added. You must approve %"
+"s for sending messages to you."
+msgstr ""
+"کد تایید به پیام‌رسان شما ارسال شد. شما باید %s را تایید کنید تا پیام‌ها به "
+"شما ارسال شود."
+
+#: actions/imsettings.php:387
+msgid "That is not your Jabber ID."
+msgstr "این شناسه‌ی Jabber شما نیست."
+
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %s - page %d"
+msgstr "ورودی‌های %s - صفحه‌ی %d"
+
+#: actions/inbox.php:62
+#, php-format
+msgid "Inbox for %s"
+msgstr "صندوق ورودی %s"
+
+#: actions/inbox.php:115
+msgid "This is your inbox, which lists your incoming private messages."
+msgstr "این صندوق ورودی‌های شماست که پیام‌های خصوصی شما در آن خواهد بود."
+
+#: actions/invite.php:39
+msgid "Invites have been disabled."
+msgstr "دعوت‌کردن از کار انداخته شده‌است."
+
+#: actions/invite.php:41
+#, php-format
+msgid "You must be logged in to invite other users to use %s"
+msgstr "شما برای دعوت دیگران برای استفاده از %s باید وارد شودید."
+
+#: actions/invite.php:72
+#, php-format
+msgid "Invalid email address: %s"
+msgstr "پست‌الکترونیک صحیح نیست: %s"
+
+#: actions/invite.php:110
+msgid "Invitation(s) sent"
+msgstr "دعوت‌نامه(ها) فرستاده‌شد"
+
+#: actions/invite.php:112
+msgid "Invite new users"
+msgstr "دعوت کردن کاربران تازه"
+
+#: actions/invite.php:128
+msgid "You are already subscribed to these users:"
+msgstr "هم اکنون شما این کاربران را دنبال می‌کنید: "
+
+#: actions/invite.php:131 actions/invite.php:139
+#, php-format
+msgid "%s (%s)"
+msgstr "%s )%s("
+
+#: actions/invite.php:136
+msgid ""
+"These people are already users and you were automatically subscribed to them:"
+msgstr "این کاربرانی هستند که شما به صورت خودکار آن‌ها را دنبال می‌کنید: "
+
+#: actions/invite.php:144
+msgid "Invitation(s) sent to the following people:"
+msgstr "دعوت‌نامه(ها) برای افراد زیر فرستاده شد:"
+
+#: actions/invite.php:150
+msgid ""
+"You will be notified when your invitees accept the invitation and register "
+"on the site. Thanks for growing the community!"
+msgstr ""
+"هر زمان که دعوت شدگان شما دعوتتان را بپذیرند شما با خبر خواهید شد. با تشکر "
+"از شما برای بزرگ کردن اجتماع کابران."
+
+#: actions/invite.php:162
+msgid ""
+"Use this form to invite your friends and colleagues to use this service."
+msgstr ""
+"برای دعوت دوستان و تشویق آن‌ها به استفاده از خدمات از فرم زیر استفاده کنید."
+
+#: actions/invite.php:187
+msgid "Email addresses"
+msgstr "نشانی‌های پست الکترونیکی"
+
+#: actions/invite.php:189
+msgid "Addresses of friends to invite (one per line)"
+msgstr "نشانی دوستان (یک نشانی در هر خط("
+
+#: actions/invite.php:192
+msgid "Personal message"
+msgstr "پیام خصوصی"
+
+#: actions/invite.php:194
+msgid "Optionally add a personal message to the invitation."
+msgstr "اگر دوست دارید می‌توانید یک پیام به همراه دعوت نامه ارسال کنید."
+
+#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:222
+msgid "Send"
+msgstr "فرستادن"
+
+#: actions/invite.php:226
+#, php-format
+msgid "%1$s has invited you to join them on %2$s"
+msgstr "%1$s شما را دعوت کرده است که در %2$s به آن‌ها بپیوندید."
+
+#: actions/invite.php:228
+#, php-format
+msgid ""
+"%1$s has invited you to join them on %2$s (%3$s).\n"
+"\n"
+"%2$s is a micro-blogging service that lets you keep up-to-date with people "
+"you know and people who interest you.\n"
+"\n"
+"You can also share news about yourself, your thoughts, or your life online "
+"with people who know about you. It's also great for meeting new people who "
+"share your interests.\n"
+"\n"
+"%1$s said:\n"
+"\n"
+"%4$s\n"
+"\n"
+"You can see %1$s's profile page on %2$s here:\n"
+"\n"
+"%5$s\n"
+"\n"
+"If you'd like to try the service, click on the link below to accept the "
+"invitation.\n"
+"\n"
+"%6$s\n"
+"\n"
+"If not, you can ignore this message. Thanks for your patience and your "
+"time.\n"
+"\n"
+"Sincerely, %2$s\n"
+msgstr ""
+
+#: actions/joingroup.php:60
+msgid "You must be logged in to join a group."
+msgstr "برای پیوستن به یک گروه، باید وارد شده باشید."
+
+#: actions/joingroup.php:90 lib/command.php:217
+msgid "You are already a member of that group"
+msgstr "شما یک کاربر این گروه هستید."
+
+#: actions/joingroup.php:128 lib/command.php:234
+#, php-format
+msgid "Could not join user %s to group %s"
+msgstr "نمی‌توان کاربر %s را به گروه %s پیوند داد."
+
+#: actions/joingroup.php:135 lib/command.php:239
+#, php-format
+msgid "%s joined group %s"
+msgstr "ملحق شدن به گروه"
+
+#: actions/leavegroup.php:60
+msgid "You must be logged in to leave a group."
+msgstr "برای ترک یک گروه، شما باید وارد شده باشید."
+
+#: actions/leavegroup.php:90 lib/command.php:268
+msgid "You are not a member of that group."
+msgstr "شما یک کاربر این گروه نیستید."
+
+#: actions/leavegroup.php:119 lib/command.php:278
+msgid "Could not find membership record."
+msgstr "عضویت ثبت شده پیدا نشد."
+
+#: actions/leavegroup.php:127 lib/command.php:284
+#, php-format
+msgid "Could not remove user %s to group %s"
+msgstr ""
+
+#: actions/leavegroup.php:134 lib/command.php:289
+#, php-format
+msgid "%s left group %s"
+msgstr "%s گروه %s را ترک کرد."
+
+#: actions/login.php:83 actions/register.php:137
+msgid "Already logged in."
+msgstr "قبلا وارد شده"
+
+#: actions/login.php:114 actions/login.php:124
+msgid "Invalid or expired token."
+msgstr "علامت بی اعتبار یا منقضی."
+
+#: actions/login.php:147
+msgid "Incorrect username or password."
+msgstr "نام کاربری یا رمز عبور نادرست."
+
+#: actions/login.php:153
+msgid "Error setting user. You are probably not authorized."
+msgstr "خطا در تنظیم کاربر. شما احتمالا اجازه ی این کار را ندارید."
+
+#: actions/login.php:208 actions/login.php:261 lib/action.php:458
+#: lib/logingroupnav.php:79
+msgid "Login"
+msgstr "ورود"
+
+#: actions/login.php:247
+msgid "Login to site"
+msgstr "ورود به وب‌گاه"
+
+#: actions/login.php:250 actions/profilesettings.php:106
+#: actions/register.php:423 actions/showgroup.php:236 actions/tagother.php:94
+#: lib/groupeditform.php:152 lib/userprofile.php:131
+msgid "Nickname"
+msgstr "نام کاربری"
+
+#: actions/login.php:253 actions/register.php:428
+#: lib/accountsettingsaction.php:116
+msgid "Password"
+msgstr "گذرواژه"
+
+#: actions/login.php:256 actions/register.php:477
+msgid "Remember me"
+msgstr "مرا به یاد بسپار"
+
+#: actions/login.php:257 actions/register.php:479
+msgid "Automatically login in the future; not for shared computers!"
+msgstr "وارد شدن خودکار. نه برای کامپیوترهای مشترک!"
+
+#: actions/login.php:267
+msgid "Lost or forgotten password?"
+msgstr "رمز عبور خود را گم یا فراموش کرده اید؟"
+
+#: actions/login.php:286
+msgid ""
+"For security reasons, please re-enter your user name and password before "
+"changing your settings."
+msgstr ""
+"به دلایل امنیتی، لطفا نام کاربری و رمز عبور خود را قبل از تغییر تنظیمات "
+"دوباره وارد نمایید."
+
+#: actions/login.php:290
+#, php-format
+msgid ""
+"Login with your username and password. Don't have a username yet? [Register]"
+"(%%action.register%%) a new account."
+msgstr ""
+"با نام‌کاربری و گذزواژه‌ی خود وارد شوید. نام‌کاربری ندارید؟ یک نام‌کاربری [ثبت ]"
+"(%%action.register%%) کنید."
+
+#: actions/makeadmin.php:91
+msgid "Only an admin can make another user an admin."
+msgstr "فقط یک مدیر می‌تواند کاربر دیگری را مدیر کند."
+
+#: actions/makeadmin.php:95
+#, php-format
+msgid "%s is already an admin for group \"%s\"."
+msgstr "%s از قبل مدیر گروه %s بود."
+
+#: actions/makeadmin.php:132
+#, php-format
+msgid "Can't get membership record for %s in group %s"
+msgstr "نمی‌توان اطلاعات عضویت %s را در گروه %s به دست آورد."
+
+#: actions/makeadmin.php:145
+#, php-format
+msgid "Can't make %s an admin for group %s"
+msgstr "نمی‌توان %s را مدیر گروه %s کرد."
+
+#: actions/microsummary.php:69
+msgid "No current status"
+msgstr "بدون وضعیت فعلی"
+
+#: actions/newgroup.php:53
+msgid "New group"
+msgstr "گروه جدید"
+
+#: actions/newgroup.php:110
+msgid "Use this form to create a new group."
+msgstr "از این فرم برای ساختن یک گروه جدید استفاده کنید"
+
+#: actions/newmessage.php:71 actions/newmessage.php:231
+msgid "New message"
+msgstr "پیام جدید"
+
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:367
+msgid "You can't send a message to this user."
+msgstr "شما نمی توانید به این کاربر پیام بفرستید."
+
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:351
+#: lib/command.php:484
+msgid "No content!"
+msgstr "بدون محتوا!"
+
+#: actions/newmessage.php:158
+msgid "No recipient specified."
+msgstr "هیچ گیرنده ای مشخص نشده"
+
+#: actions/newmessage.php:164 lib/command.php:370
+msgid ""
+"Don't send a message to yourself; just say it to yourself quietly instead."
+msgstr "یک پیام را به خودتان نفرستید؛ در عوض آن را آهسته برای خود بگویید."
+
+#: actions/newmessage.php:181
+msgid "Message sent"
+msgstr "پیام فرستاده‌شد"
+
+#: actions/newmessage.php:185 lib/command.php:376
+#, php-format
+msgid "Direct message to %s sent"
+msgstr "پیام مستقیم به %s فرستاده شد."
+
+#: actions/newmessage.php:210 actions/newnotice.php:242 lib/channel.php:170
+msgid "Ajax Error"
+msgstr "اشکال آژاکسی"
+
+#: actions/newnotice.php:69
+msgid "New notice"
+msgstr "آگهی جدید"
+
+#: actions/newnotice.php:208
+msgid "Notice posted"
+msgstr "آگهی فرستاده‌شد."
+
+#: actions/noticesearch.php:68
+#, php-format
+msgid ""
+"Search for notices on %%site.name%% by their contents. Separate search terms "
+"by spaces; they must be 3 characters or more."
+msgstr ""
+"جست‌و‌جوی متن پیام‌ها در %%site.name%%. هر شرط را با فاصله جدا کنید و کمینه‌ی "
+"جست‌و‌جو باید ۳ حرف باشد."
+
+#: actions/noticesearch.php:78
+msgid "Text search"
+msgstr "جست‌وجوی متن"
+
+#: actions/noticesearch.php:91
+#, php-format
+msgid "Search results for \"%s\" on %s"
+msgstr "نتایج جست‌و‌جو برای %s در %s"
+
+#: actions/noticesearch.php:121
+#, php-format
+msgid ""
+"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
+msgstr ""
+"اولین کسی باشید که در [این موضوع](%%%%action.newnotice%%%%?status_textarea=%"
+"s) پیام می‌فرستد."
+
+#: actions/noticesearch.php:124
+#, php-format
+msgid ""
+"Why not [register an account](%%%%action.register%%%%) and be the first to "
+"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
+msgstr ""
+"چرا [ثبت نام](%%%%action.register%%%%) نمی‌کنید و اولین پیام را در [این موضوع]"
+"(%%%%action.newnotice%%%%?status_textarea=%s) نمی‌فرستید!"
+
+#: actions/noticesearchrss.php:96
+#, php-format
+msgid "Updates with \"%s\""
+msgstr "پیام‌های با %s"
+
+#: actions/noticesearchrss.php:98
+#, php-format
+msgid "Updates matching search term \"%1$s\" on %2$s!"
+msgstr "پیام‌هایی که با جست‌و‌جوی عبارت »%1$s« در %s یافت شدند."
+
+#: actions/nudge.php:85
+msgid ""
+"This user doesn't allow nudges or hasn't confirmed or set his email yet."
+msgstr ""
+"این کاربر اجازه‌ی سقلمه زدن را نداده است یا پست‌الکترونیک خود را تایید نکرده "
+"است."
+
+#: actions/nudge.php:94
+msgid "Nudge sent"
+msgstr "فرتادن اژیر"
+
+#: actions/nudge.php:97
+msgid "Nudge sent!"
+msgstr "سقلمه فرستاده شد!"
+
+#: actions/oembed.php:79 actions/shownotice.php:100
+msgid "Notice has no profile"
+msgstr "ابن خبر ذخیره ای ندارد ."
+
+#: actions/oembed.php:86 actions/shownotice.php:180
+#, php-format
+msgid "%1$s's status on %2$s"
+msgstr "وضعیت %1$s در %2$s"
+
+#: actions/oembed.php:157
+msgid "content type "
+msgstr "نوع محتوا "
+
+#: actions/oembed.php:160
+msgid "Only "
+msgstr "فقط"
+
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1031
+#: lib/api.php:1059 lib/api.php:1169
+msgid "Not a supported data format."
+msgstr "یک قالب دادهٔ پشتیبانی‌شده نیست."
+
+#: actions/opensearch.php:64
+msgid "People Search"
+msgstr "جست‌وجوی کاربران"
+
+#: actions/opensearch.php:67
+msgid "Notice Search"
+msgstr "جست‌وجوی آگهی‌ها"
+
+#: actions/othersettings.php:60
+msgid "Other Settings"
+msgstr "تنظیمات دیگر"
+
+#: actions/othersettings.php:71
+msgid "Manage various other options."
+msgstr "مدیریت انتخاب های مختلف دیگر."
+
+#: actions/othersettings.php:108
+msgid " (free service)"
+msgstr " (سرویس‌ آزاد)"
+
+#: actions/othersettings.php:116
+msgid "Shorten URLs with"
+msgstr "کوتاه‌کردن نشانی‌های اینترنتی با"
+
+#: actions/othersettings.php:117
+msgid "Automatic shortening service to use."
+msgstr "کوتاه‌کننده‌ی نشانی مورد استفاده."
+
+#: actions/othersettings.php:122
+msgid "View profile designs"
+msgstr "نمایش طراحی های پروفایل"
+
+#: actions/othersettings.php:123
+msgid "Show or hide profile designs."
+msgstr "نمایش یا عدم‌نمایش طراحی‌های کاربران."
+
+#: actions/othersettings.php:153
+msgid "URL shortening service is too long (max 50 chars)."
+msgstr "کوتاه کننده‌ی نشانی بسیار طولانی است (بیش‌تر از ۵۰ حرف)."
+
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %s - page %d"
+msgstr "فرستاده‌های %s - صفحه‌ی %d"
+
+#: actions/outbox.php:61
+#, php-format
+msgid "Outbox for %s"
+msgstr "فرستاده‌های %s"
+
+#: actions/outbox.php:116
+msgid "This is your outbox, which lists private messages you have sent."
+msgstr ""
+"این صندوق خروجی شماست، که پیام های خصوصی فرستاده شده به وسیله ی شما را لیست "
+"می کند."
+
+#: actions/passwordsettings.php:58
+msgid "Change password"
+msgstr "تغییر گذرواژه"
+
+#: actions/passwordsettings.php:69
+msgid "Change your password."
+msgstr "تغییر گذرواژه‌تان"
+
+#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
+msgid "Password change"
+msgstr "تغییر گذرواژه"
+
+#: actions/passwordsettings.php:104
+msgid "Old password"
+msgstr "گذرواژهٔ قدیمی"
+
+#: actions/passwordsettings.php:108 actions/recoverpassword.php:235
+msgid "New password"
+msgstr "گذرواژهٔ جدید"
+
+#: actions/passwordsettings.php:109
+msgid "6 or more characters"
+msgstr "۶ نویسه یا بیش‌تر"
+
+#: actions/passwordsettings.php:112 actions/recoverpassword.php:239
+#: actions/register.php:432 actions/smssettings.php:134
+msgid "Confirm"
+msgstr "تایید"
+
+#: actions/passwordsettings.php:113 actions/recoverpassword.php:240
+msgid "Same as password above"
+msgstr "مثل رمز عبور بالا"
+
+#: actions/passwordsettings.php:117
+msgid "Change"
+msgstr "تغییر"
+
+#: actions/passwordsettings.php:154 actions/register.php:230
+msgid "Password must be 6 or more characters."
+msgstr "گذرواژه باید ۶ نویسه یا بیش‌تر باشد."
+
+#: actions/passwordsettings.php:157 actions/register.php:233
+msgid "Passwords don't match."
+msgstr "گذرواژه‌ها مطابقت ندارند."
+
+#: actions/passwordsettings.php:165
+msgid "Incorrect old password"
+msgstr "گذرواژه قدیمی اشتباه است"
+
+#: actions/passwordsettings.php:181
+msgid "Error saving user; invalid."
+msgstr "خطا هنگام ذخیره ی کاربر؛ نا معتبر."
+
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+msgid "Can't save new password."
+msgstr "نمی‌توان گذرواژه جدید را ذخیره کرد."
+
+#: actions/passwordsettings.php:192 actions/recoverpassword.php:211
+msgid "Password saved."
+msgstr "گذرواژه ذخیره شد."
+
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:308
+msgid "Paths"
+msgstr "مسیر ها"
+
+#: actions/pathsadminpanel.php:70
+msgid "Path and server settings for this StatusNet site."
+msgstr "تنظیمات و نشانی محلی این سایت استاتوس‌نتی"
+
+#: actions/pathsadminpanel.php:140
+#, php-format
+msgid "Theme directory not readable: %s"
+msgstr "شاخه‌ی پوسته‌ها خواندنی نیست: %s"
+
+#: actions/pathsadminpanel.php:146
+#, php-format
+msgid "Avatar directory not writable: %s"
+msgstr "شاخه‌ی چهره‌ها نوشتنی نیست: %s"
+
+#: actions/pathsadminpanel.php:152
+#, php-format
+msgid "Background directory not writable: %s"
+msgstr "شاخه‌ی پس زمینه‌ها نوشتنی نیست: %s"
+
+#: actions/pathsadminpanel.php:160
+#, php-format
+msgid "Locales directory not readable: %s"
+msgstr "پوشه‌ی تنظیمات محلی خواندنی نیست: %s"
+
+#: actions/pathsadminpanel.php:212 actions/siteadminpanel.php:58
+#: lib/adminpanelaction.php:299
+msgid "Site"
+msgstr "سایت"
+
+#: actions/pathsadminpanel.php:216
+msgid "Path"
+msgstr "مسیر"
+
+#: actions/pathsadminpanel.php:216
+msgid "Site path"
+msgstr "مسیر وب‌گاه"
+
+#: actions/pathsadminpanel.php:220
+msgid "Path to locales"
+msgstr "نشانی تنظیمات محلی"
+
+#: actions/pathsadminpanel.php:220
+msgid "Directory path to locales"
+msgstr ""
+
+#: actions/pathsadminpanel.php:227
+msgid "Theme"
+msgstr "پوسته"
+
+#: actions/pathsadminpanel.php:232
+msgid "Theme server"
+msgstr "کارگزار پوسته"
+
+#: actions/pathsadminpanel.php:236
+msgid "Theme path"
+msgstr "مسیر پوسته"
+
+#: actions/pathsadminpanel.php:240
+msgid "Theme directory"
+msgstr "شاخهٔ پوسته"
+
+#: actions/pathsadminpanel.php:247
+msgid "Avatars"
+msgstr "چهره‌ها"
+
+#: actions/pathsadminpanel.php:252
+msgid "Avatar server"
+msgstr "کارگزار نیم‌رخ"
+
+#: actions/pathsadminpanel.php:256
+msgid "Avatar path"
+msgstr "مسیر نیم‌رخ"
+
+#: actions/pathsadminpanel.php:260
+msgid "Avatar directory"
+msgstr "شاخهٔ نیم‌رخ"
+
+#: actions/pathsadminpanel.php:269
+msgid "Backgrounds"
+msgstr "پس زمینه‌ها"
+
+#: actions/pathsadminpanel.php:273
+msgid "Background server"
+msgstr "کارگذار تصاویر پیش‌زمینه"
+
+#: actions/pathsadminpanel.php:277
+msgid "Background path"
+msgstr "مسیر تصاویر پیش‌زمینه"
+
+#: actions/pathsadminpanel.php:281
+msgid "Background directory"
+msgstr "شاخهٔ تصاویر پیش‌زمینه"
+
+#: actions/pathsadminpanel.php:297
+msgid "Save paths"
+msgstr "نشانی ذخیره سازی"
+
+#: actions/peoplesearch.php:52
+#, php-format
+msgid ""
+"Search for people on %%site.name%% by their name, location, or interests. "
+"Separate the terms by spaces; they must be 3 characters or more."
+msgstr ""
+"جست‌و‌جو افراد در %%site.name%% با نام، محل زندگی یا چیز‌هایی که دوست دارند. "
+"عبارت‌ها را با فاصله از هم جدا کنید و حداقل ۳ حرف وارد کنید."
+
+#: actions/peoplesearch.php:58
+msgid "People search"
+msgstr "جست‌وجوی کاربران"
+
+#: actions/peopletag.php:70
+#, php-format
+msgid "Not a valid people tag: %s"
+msgstr "یک برچسب کاربری معتبر نیست: %s"
+
+#: actions/peopletag.php:144
+#, php-format
+msgid "Users self-tagged with %s - page %d"
+msgstr "کاربران خود برچسب‌گذاری شده با %s - صفحهٔ %d"
+
+#: actions/postnotice.php:84
+msgid "Invalid notice content"
+msgstr "محتوای آگهی نامعتبر"
+
+#: actions/postnotice.php:90
+#, php-format
+msgid "Notice license ‘%s’ is not compatible with site license ‘%s’."
+msgstr ""
+
+#: actions/profilesettings.php:60
+msgid "Profile settings"
+msgstr "تنظیمات شناس‌نامه"
+
+#: actions/profilesettings.php:71
+msgid ""
+"You can update your personal profile info here so people know more about you."
+msgstr ""
+"شما می‌توان اطلاعات شخصی خود را در این قسمت به روز کنید تا دیگران بیش‌تر در "
+"مورد شما بدانند."
+
+#: actions/profilesettings.php:99
+msgid "Profile information"
+msgstr "اطلاعات شناس‌نامه"
+
+#: actions/profilesettings.php:108 lib/groupeditform.php:154
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr "۱-۶۴ کاراکتر کوچک یا اعداد، بدون نقطه گذاری یا فاصله"
+
+#: actions/profilesettings.php:111 actions/register.php:447
+#: actions/showgroup.php:247 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:149
+msgid "Full name"
+msgstr "نام‌کامل"
+
+#: actions/profilesettings.php:115 actions/register.php:452
+#: lib/groupeditform.php:161
+msgid "Homepage"
+msgstr "صفحهٔ خانگی"
+
+#: actions/profilesettings.php:117 actions/register.php:454
+msgid "URL of your homepage, blog, or profile on another site"
+msgstr "نشانی اینترنتی صفحهٔ خانگی، وبلاگ یا مشخصات کاربری‌تان در یک وب‌گاه دیگر"
+
+#: actions/profilesettings.php:122 actions/register.php:460
+#, php-format
+msgid "Describe yourself and your interests in %d chars"
+msgstr ""
+
+#: actions/profilesettings.php:125 actions/register.php:463
+msgid "Describe yourself and your interests"
+msgstr "خودتان و علایقتان را توصیف کنید."
+
+#: actions/profilesettings.php:127 actions/register.php:465
+msgid "Bio"
+msgstr "شرح‌حال"
+
+#: actions/profilesettings.php:132 actions/register.php:470
+#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: lib/userprofile.php:164
+msgid "Location"
+msgstr "موقعیت"
+
+#: actions/profilesettings.php:134 actions/register.php:472
+msgid "Where you are, like \"City, State (or Region), Country\""
+msgstr ""
+
+#: actions/profilesettings.php:138 actions/tagother.php:149
+#: actions/tagother.php:209 lib/subscriptionlist.php:106
+#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+msgid "Tags"
+msgstr "برچسب‌ها"
+
+#: actions/profilesettings.php:140
+msgid ""
+"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
+msgstr ""
+
+#: actions/profilesettings.php:144 actions/siteadminpanel.php:307
+msgid "Language"
+msgstr "زبان"
+
+#: actions/profilesettings.php:145
+msgid "Preferred language"
+msgstr "زبان برگزیده"
+
+#: actions/profilesettings.php:154
+msgid "Timezone"
+msgstr "منطقهٔ‌زمانی"
+
+#: actions/profilesettings.php:155
+msgid "What timezone are you normally in?"
+msgstr "شما معمولا در کدام منطقه ی زمانی هستید؟"
+
+#: actions/profilesettings.php:160
+msgid ""
+"Automatically subscribe to whoever subscribes to me (best for non-humans)"
+msgstr ""
+
+#: actions/profilesettings.php:221 actions/register.php:223
+#, php-format
+msgid "Bio is too long (max %d chars)."
+msgstr ""
+
+#: actions/profilesettings.php:228 actions/siteadminpanel.php:165
+msgid "Timezone not selected."
+msgstr "منطقه‌ی زمانی انتخاب نشده است."
+
+#: actions/profilesettings.php:234
+msgid "Language is too long (max 50 chars)."
+msgstr "کلام بسیار طولانی است( حداکثر ۵۰ کاراکتر)"
+
+#: actions/profilesettings.php:246 actions/tagother.php:178
+#, php-format
+msgid "Invalid tag: \"%s\""
+msgstr "نشان نادرست »%s«"
+
+#: actions/profilesettings.php:295
+msgid "Couldn't update user for autosubscribe."
+msgstr ""
+
+#: actions/profilesettings.php:328
+msgid "Couldn't save profile."
+msgstr "نمی‌توان شناسه را ذخیره کرد."
+
+#: actions/profilesettings.php:336
+msgid "Couldn't save tags."
+msgstr "نمی‌توان نشان را ذخیره کرد."
+
+#: actions/profilesettings.php:344 lib/adminpanelaction.php:126
+msgid "Settings saved."
+msgstr "تنظیمات ذخیره شد."
+
+#: actions/public.php:83
+#, php-format
+msgid "Beyond the page limit (%s)"
+msgstr ""
+
+#: actions/public.php:92
+msgid "Could not retrieve public stream."
+msgstr ""
+
+#: actions/public.php:129
+#, php-format
+msgid "Public timeline, page %d"
+msgstr "خط زمانی عمومی، صفحه‌ی %d"
+
+#: actions/public.php:131 lib/publicgroupnav.php:79
+msgid "Public timeline"
+msgstr "خط زمانی عمومی"
+
+#: actions/public.php:151
+msgid "Public Stream Feed (RSS 1.0)"
+msgstr ""
+
+#: actions/public.php:155
+msgid "Public Stream Feed (RSS 2.0)"
+msgstr ""
+
+#: actions/public.php:159
+msgid "Public Stream Feed (Atom)"
+msgstr ""
+
+#: actions/public.php:179
+#, php-format
+msgid ""
+"This is the public timeline for %%site.name%% but no one has posted anything "
+"yet."
+msgstr ""
+
+#: actions/public.php:182
+msgid "Be the first to post!"
+msgstr "اولین کسی باشید که پیام می‌فرستد!"
+
+#: actions/public.php:186
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to post!"
+msgstr "چرا [ثبت نام](%%action.register%%) نمی‌کنید و اولین پیام را نمی‌فرستید؟"
+
+#: actions/public.php:233
+#, php-format
+msgid ""
+"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
+"blogging) service based on the Free Software [StatusNet](http://status.net/) "
+"tool. [Join now](%%action.register%%) to share notices about yourself with "
+"friends, family, and colleagues! ([Read more](%%doc.help%%))"
+msgstr ""
+
+#: actions/public.php:238
+#, php-format
+msgid ""
+"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
+"blogging) service based on the Free Software [StatusNet](http://status.net/) "
+"tool."
+msgstr ""
+
+#: actions/publictagcloud.php:57
+msgid "Public tag cloud"
+msgstr ""
+
+#: actions/publictagcloud.php:63
+#, php-format
+msgid "These are most popular recent tags on %s "
+msgstr ""
+
+#: actions/publictagcloud.php:69
+#, php-format
+msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
+msgstr ""
+
+#: actions/publictagcloud.php:72
+msgid "Be the first to post one!"
+msgstr ""
+
+#: actions/publictagcloud.php:75
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to post "
+"one!"
+msgstr ""
+
+#: actions/publictagcloud.php:135
+msgid "Tag cloud"
+msgstr ""
+
+#: actions/recoverpassword.php:36
+msgid "You are already logged in!"
+msgstr "شما قبلا وارد شدید"
+
+#: actions/recoverpassword.php:62
+msgid "No such recovery code."
+msgstr "چنین کد بازیابی شده ای نیست"
+
+#: actions/recoverpassword.php:66
+msgid "Not a recovery code."
+msgstr "کد بازیابی شده ای نیست."
+
+#: actions/recoverpassword.php:73
+msgid "Recovery code for unknown user."
+msgstr "بازیابی کد برای کاربر ناشناخته"
+
+#: actions/recoverpassword.php:86
+msgid "Error with confirmation code."
+msgstr "خطا در تایید کد"
+
+#: actions/recoverpassword.php:97
+msgid "This confirmation code is too old. Please start again."
+msgstr "این کد تایید شده بسیار قدیمی است . لطفا دباره شروع کنید ."
+
+#: actions/recoverpassword.php:111
+msgid "Could not update user with confirmed email address."
+msgstr "را به روز کرد user نمیتوان با ایمیلی که تایید شده"
+
+#: actions/recoverpassword.php:152
+msgid ""
+"If you have forgotten or lost your password, you can get a new one sent to "
+"the email address you have stored in your account."
+msgstr ""
+"اگر شما کلمه ی عبورتان را فراموش کرده اید یا گم کرده اید، می توانید یک کلمه "
+"ی عبور جدید از آدرس ایمیل ذخیره شده در حسابتان بگیرید."
+
+#: actions/recoverpassword.php:158
+msgid "You have been identified. Enter a new password below. "
+msgstr ""
+
+#: actions/recoverpassword.php:188
+msgid "Password recovery"
+msgstr "بازیابی کلمه ی عبور"
+
+#: actions/recoverpassword.php:191
+msgid "Nickname or email address"
+msgstr "نام کاربری یا آدرس ایمیل"
+
+#: actions/recoverpassword.php:193
+msgid "Your nickname on this server, or your registered email address."
+msgstr "نام کاربری شما بر روی این سرور، یا آدرس ایمیل ثبت شده ی شما."
+
+#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
+msgid "Recover"
+msgstr "بازیابی"
+
+#: actions/recoverpassword.php:208
+msgid "Reset password"
+msgstr "ریست کردن کلمه ی عبور"
+
+#: actions/recoverpassword.php:209
+msgid "Recover password"
+msgstr "بازیابی کلمه ی عبور"
+
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+msgid "Password recovery requested"
+msgstr "بازیابی کلمه ی عبور درخواست شد"
+
+#: actions/recoverpassword.php:213
+msgid "Unknown action"
+msgstr ""
+
+#: actions/recoverpassword.php:236
+msgid "6 or more characters, and don't forget it!"
+msgstr "۶ کاراکتر یا بیشتر، این را فراموش نکنید!"
+
+#: actions/recoverpassword.php:243
+msgid "Reset"
+msgstr "ریست( راه انداری مجدد )"
+
+#: actions/recoverpassword.php:252
+msgid "Enter a nickname or email address."
+msgstr "یک نام کاربری یا آدرس ایمیل وارد کنید."
+
+#: actions/recoverpassword.php:272
+msgid "No user with that email address or username."
+msgstr "هیچ کاربری با آن آدرس ایمیل یا نام کاربری وجود ندارد."
+
+#: actions/recoverpassword.php:287
+msgid "No registered email address for that user."
+msgstr "برای آن کاربر آدرس ایمیل ثبت شده وجود ندارد."
+
+#: actions/recoverpassword.php:301
+msgid "Error saving address confirmation."
+msgstr "خطا هنگام ذخیره ی تاییدیه ی آدرس."
+
+#: actions/recoverpassword.php:325
+msgid ""
+"Instructions for recovering your password have been sent to the email "
+"address registered to your account."
+msgstr ""
+"دستورالعمل چگونگی بازیابی کلمه ی عبور به آدرس ایمیل ثبت شده در حساب شما "
+"ارسال شده است."
+
+#: actions/recoverpassword.php:344
+msgid "Unexpected password reset."
+msgstr "کلمه ی عبور به طور غیر منتظره ریست شد."
+
+#: actions/recoverpassword.php:352
+msgid "Password must be 6 chars or more."
+msgstr "کلمه ی عبور باید ۶ کاراکتر یا بیشتر باشد."
+
+#: actions/recoverpassword.php:356
+msgid "Password and confirmation do not match."
+msgstr "کلمه ی عبور و تاییدیه ی آن با هم تطابق ندارند."
+
+#: actions/recoverpassword.php:375 actions/register.php:248
+msgid "Error setting user."
+msgstr ""
+
+#: actions/recoverpassword.php:382
+msgid "New password successfully saved. You are now logged in."
+msgstr "کلمه ی عبور جدید با موفقیت ذخیره شد. شما الان وارد شده اید."
+
+#: actions/register.php:85 actions/register.php:189 actions/register.php:404
+msgid "Sorry, only invited people can register."
+msgstr "با عرض معذرت، تنها افراد دعوت شده می توانند ثبت نام کنند."
+
+#: actions/register.php:92
+msgid "Sorry, invalid invitation code."
+msgstr "با عرض تاسف، کد دعوت نا معتبر است."
+
+#: actions/register.php:112
+msgid "Registration successful"
+msgstr "ثبت نام با موفقیت انجام شد."
+
+#: actions/register.php:114 actions/register.php:502 lib/action.php:455
+#: lib/logingroupnav.php:85
+msgid "Register"
+msgstr "ثبت نام"
+
+#: actions/register.php:135
+msgid "Registration not allowed."
+msgstr "اجازه‌ی ثبت نام داده نشده است."
+
+#: actions/register.php:198
+msgid "You can't register if you don't agree to the license."
+msgstr "شما نمی توانید ثبت نام کنید اگر با لیسانس( جواز ) موافقت نکنید."
+
+#: actions/register.php:201
+msgid "Not a valid email address."
+msgstr "یک آدرس ایمیل معتبر نیست."
+
+#: actions/register.php:212
+msgid "Email address already exists."
+msgstr "آدرس ایمیل از قبل وجود دارد."
+
+#: actions/register.php:243 actions/register.php:264
+msgid "Invalid username or password."
+msgstr "نام کاربری یا کلمه ی عبور نا معتبر."
+
+#: actions/register.php:342
+msgid ""
+"With this form you can create a new account. You can then post notices and "
+"link up to friends and colleagues. "
+msgstr ""
+
+#: actions/register.php:424
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
+msgstr "۱-۶۴ حرف کوچک یا اعداد، بدون نشانه گذاری یا فاصله نیاز است."
+
+#: actions/register.php:429
+msgid "6 or more characters. Required."
+msgstr "۶ کاراکتر یا بیشتر نیاز است."
+
+#: actions/register.php:433
+msgid "Same as password above. Required."
+msgstr ""
+
+#: actions/register.php:437 actions/register.php:441
+#: actions/siteadminpanel.php:283 lib/accountsettingsaction.php:120
+msgid "Email"
+msgstr "پست الکترونیکی"
+
+#: actions/register.php:438 actions/register.php:442
+msgid "Used only for updates, announcements, and password recovery"
+msgstr ""
+
+#: actions/register.php:449
+msgid "Longer name, preferably your \"real\" name"
+msgstr "نام بلند تر، به طور بهتر نام واقعیتان"
+
+#: actions/register.php:493
+msgid "My text and files are available under "
+msgstr ""
+
+#: actions/register.php:495
+msgid "Creative Commons Attribution 3.0"
+msgstr ""
+
+#: actions/register.php:496
+msgid ""
+" except this private data: password, email address, IM address, and phone "
+"number."
+msgstr ""
+"به استثنای این داده ی محرمانه : کلمه ی عبور، آدرس ایمیل، آدرس IM، و شماره "
+"تلفن."
+
+#: actions/register.php:537
+#, php-format
+msgid ""
+"Congratulations, %s! And welcome to %%%%site.name%%%%. From here, you may "
+"want to...\n"
+"\n"
+"* Go to [your profile](%s) and post your first message.\n"
+"* Add a [Jabber/GTalk address](%%%%action.imsettings%%%%) so you can send "
+"notices through instant messages.\n"
+"* [Search for people](%%%%action.peoplesearch%%%%) that you may know or that "
+"share your interests. \n"
+"* Update your [profile settings](%%%%action.profilesettings%%%%) to tell "
+"others more about you. \n"
+"* Read over the [online docs](%%%%doc.help%%%%) for features you may have "
+"missed. \n"
+"\n"
+"Thanks for signing up and we hope you enjoy using this service."
+msgstr ""
+
+#: actions/register.php:561
+msgid ""
+"(You should receive a message by email momentarily, with instructions on how "
+"to confirm your email address.)"
+msgstr ""
+"(شما باید آنی یک ایمیل دریافت کنید، با دستورالعمل چگونگی تایید آدرس ایمیلتان."
+"("
+
+#: actions/remotesubscribe.php:98
+#, php-format
+msgid ""
+"To subscribe, you can [login](%%action.login%%), or [register](%%action."
+"register%%) a new account. If you already have an account on a [compatible "
+"microblogging site](%%doc.openmublog%%), enter your profile URL below."
+msgstr ""
+
+#: actions/remotesubscribe.php:112
+msgid "Remote subscribe"
+msgstr ""
+
+#: actions/remotesubscribe.php:124
+msgid "Subscribe to a remote user"
+msgstr ""
+
+#: actions/remotesubscribe.php:129
+msgid "User nickname"
+msgstr "نام کاربری کاربر"
+
+#: actions/remotesubscribe.php:130
+msgid "Nickname of the user you want to follow"
+msgstr "نام کاربری، کاربری که می خواهید او را دنبال کنید"
+
+#: actions/remotesubscribe.php:133
+msgid "Profile URL"
+msgstr ""
+
+#: actions/remotesubscribe.php:134
+msgid "URL of your profile on another compatible microblogging service"
+msgstr ""
+
+#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
+#: lib/userprofile.php:365
+msgid "Subscribe"
+msgstr ""
+
+#: actions/remotesubscribe.php:159
+msgid "Invalid profile URL (bad format)"
+msgstr ""
+
+#: actions/remotesubscribe.php:168
+msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
+msgstr ""
+
+#: actions/remotesubscribe.php:176
+msgid "That’s a local profile! Login to subscribe."
+msgstr ""
+
+#: actions/remotesubscribe.php:183
+msgid "Couldn’t get a request token."
+msgstr ""
+
+#: actions/repeat.php:57
+msgid "Only logged-in users can repeat notices."
+msgstr "تنها کاربران وارد شده می توانند آگهی ها را تکرار کنند."
+
+#: actions/repeat.php:64 actions/repeat.php:71
+msgid "No notice specified."
+msgstr "خبری مشخص نشده."
+
+#: actions/repeat.php:76
+msgid "You can't repeat your own notice."
+msgstr "شما نمی توانید آگهی خودتان را تکرار کنید."
+
+#: actions/repeat.php:90
+msgid "You already repeated that notice."
+msgstr "شما قبلا آن آگهی را تکرار کردید."
+
+#: actions/repeat.php:114 lib/noticelist.php:621
+msgid "Repeated"
+msgstr ""
+
+#: actions/repeat.php:119
+msgid "Repeated!"
+msgstr ""
+
+#: actions/replies.php:125 actions/repliesrss.php:68
+#: lib/personalgroupnav.php:105
+#, php-format
+msgid "Replies to %s"
+msgstr "پاسخ‌های به %s"
+
+#: actions/replies.php:127
+#, php-format
+msgid "Replies to %s, page %d"
+msgstr "پاسخ‌های به %s، صفحهٔ %d"
+
+#: actions/replies.php:144
+#, php-format
+msgid "Replies feed for %s (RSS 1.0)"
+msgstr "خوراک پاسخ‌ها برای %s (RSS 1.0)"
+
+#: actions/replies.php:151
+#, php-format
+msgid "Replies feed for %s (RSS 2.0)"
+msgstr "خوراک پاسخ‌ها برای %s (RSS 2.0)"
+
+#: actions/replies.php:158
+#, php-format
+msgid "Replies feed for %s (Atom)"
+msgstr "خوراک پاسخ‌ها برای %s (Atom)"
+
+#: actions/replies.php:198
+#, php-format
+msgid ""
+"This is the timeline showing replies to %s but %s hasn't received a notice "
+"to his attention yet."
+msgstr ""
+
+#: actions/replies.php:203
+#, php-format
+msgid ""
+"You can engage other users in a conversation, subscribe to more people or "
+"[join groups](%%action.groups%%)."
+msgstr ""
+
+#: actions/replies.php:205
+#, php-format
+msgid ""
+"You can try to [nudge %s](../%s) or [post something to his or her attention]"
+"(%%%%action.newnotice%%%%?status_textarea=%s)."
+msgstr ""
+
+#: actions/repliesrss.php:72
+#, php-format
+msgid "Replies to %1$s on %2$s!"
+msgstr ""
+
+#: actions/sandbox.php:65 actions/unsandbox.php:65
+msgid "You cannot sandbox users on this site."
+msgstr ""
+
+#: actions/sandbox.php:72
+msgid "User is already sandboxed."
+msgstr ""
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%s's favorite notices, page %d"
+msgstr ""
+
+#: actions/showfavorites.php:132
+msgid "Could not retrieve favorite notices."
+msgstr "ناتوان در بازیابی آگهی های محبوب."
+
+#: actions/showfavorites.php:170
+#, php-format
+msgid "Feed for favorites of %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showfavorites.php:177
+#, php-format
+msgid "Feed for favorites of %s (RSS 2.0)"
+msgstr ""
+
+#: actions/showfavorites.php:184
+#, php-format
+msgid "Feed for favorites of %s (Atom)"
+msgstr ""
+
+#: actions/showfavorites.php:205
+msgid ""
+"You haven't chosen any favorite notices yet. Click the fave button on "
+"notices you like to bookmark them for later or shed a spotlight on them."
+msgstr ""
+
+#: actions/showfavorites.php:207
+#, php-format
+msgid ""
+"%s hasn't added any notices to his favorites yet. Post something interesting "
+"they would add to their favorites :)"
+msgstr ""
+
+#: actions/showfavorites.php:211
+#, php-format
+msgid ""
+"%s hasn't added any notices to his favorites yet. Why not [register an "
+"account](%%%%action.register%%%%) and then post something interesting they "
+"would add to their favorites :)"
+msgstr ""
+
+#: actions/showfavorites.php:242
+msgid "This is a way to share what you like."
+msgstr "این یک راه است برای به اشتراک گذاشتن آنچه که دوست دارید."
+
+#: actions/showgroup.php:82 lib/groupnav.php:86
+#, php-format
+msgid "%s group"
+msgstr ""
+
+#: actions/showgroup.php:84
+#, php-format
+msgid "%s group, page %d"
+msgstr ""
+
+#: actions/showgroup.php:218
+msgid "Group profile"
+msgstr ""
+
+#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/userauthorization.php:167 lib/userprofile.php:177
+msgid "URL"
+msgstr ""
+
+#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/userauthorization.php:179 lib/userprofile.php:194
+msgid "Note"
+msgstr ""
+
+#: actions/showgroup.php:284 lib/groupeditform.php:184
+msgid "Aliases"
+msgstr "نام های مستعار"
+
+#: actions/showgroup.php:293
+msgid "Group actions"
+msgstr ""
+
+#: actions/showgroup.php:328
+#, php-format
+msgid "Notice feed for %s group (RSS 1.0)"
+msgstr ""
+
+#: actions/showgroup.php:334
+#, php-format
+msgid "Notice feed for %s group (RSS 2.0)"
+msgstr ""
+
+#: actions/showgroup.php:340
+#, php-format
+msgid "Notice feed for %s group (Atom)"
+msgstr ""
+
+#: actions/showgroup.php:345
+#, php-format
+msgid "FOAF for %s group"
+msgstr ""
+
+#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+msgid "Members"
+msgstr "اعضا"
+
+#: actions/showgroup.php:386 lib/profileaction.php:117
+#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: lib/tagcloudsection.php:71
+msgid "(None)"
+msgstr "هیچ"
+
+#: actions/showgroup.php:392
+msgid "All members"
+msgstr "همه ی اعضا"
+
+#: actions/showgroup.php:429 lib/profileaction.php:174
+msgid "Statistics"
+msgstr "آمار"
+
+#: actions/showgroup.php:432
+msgid "Created"
+msgstr "ساخته شد"
+
+#: actions/showgroup.php:448
+#, php-format
+msgid ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. [Join now](%%%%action.register%%%%) to become part "
+"of this group and many more! ([Read more](%%%%doc.help%%%%))"
+msgstr ""
+
+#: actions/showgroup.php:454
+#, php-format
+msgid ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. "
+msgstr ""
+
+#: actions/showgroup.php:482
+msgid "Admins"
+msgstr ""
+
+#: actions/showmessage.php:81
+msgid "No such message."
+msgstr "چنین پیغامی وجود ندارد."
+
+#: actions/showmessage.php:98
+msgid "Only the sender and recipient may read this message."
+msgstr ""
+
+#: actions/showmessage.php:108
+#, php-format
+msgid "Message to %1$s on %2$s"
+msgstr ""
+
+#: actions/showmessage.php:113
+#, php-format
+msgid "Message from %1$s on %2$s"
+msgstr ""
+
+#: actions/shownotice.php:90
+msgid "Notice deleted."
+msgstr ""
+
+#: actions/showstream.php:73
+#, php-format
+msgid " tagged %s"
+msgstr ""
+
+#: actions/showstream.php:79
+#, php-format
+msgid "%s, page %d"
+msgstr ""
+
+#: actions/showstream.php:122
+#, php-format
+msgid "Notice feed for %s tagged %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showstream.php:129
+#, php-format
+msgid "Notice feed for %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showstream.php:136
+#, php-format
+msgid "Notice feed for %s (RSS 2.0)"
+msgstr ""
+
+#: actions/showstream.php:143
+#, php-format
+msgid "Notice feed for %s (Atom)"
+msgstr ""
+
+#: actions/showstream.php:148
+#, php-format
+msgid "FOAF for %s"
+msgstr ""
+
+#: actions/showstream.php:191
+#, php-format
+msgid "This is the timeline for %s but %s hasn't posted anything yet."
+msgstr ""
+
+#: actions/showstream.php:196
+msgid ""
+"Seen anything interesting recently? You haven't posted any notices yet, now "
+"would be a good time to start :)"
+msgstr ""
+"اخیرا چیز جالب توجه ای دیده اید؟ شما تا کنون آگهی ارسال نکرده اید، الان می "
+"تواند زمان خوبی برای شروع باشد :)"
+
+#: actions/showstream.php:198
+#, php-format
+msgid ""
+"You can try to nudge %s or [post something to his or her attention](%%%%"
+"action.newnotice%%%%?status_textarea=%s)."
+msgstr ""
+
+#: actions/showstream.php:234
+#, php-format
+msgid ""
+"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
+"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
+msgstr ""
+
+#: actions/showstream.php:239
+#, php-format
+msgid ""
+"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. "
+msgstr ""
+
+#: actions/showstream.php:313
+#, php-format
+msgid "Repeat of %s"
+msgstr ""
+
+#: actions/silence.php:65 actions/unsilence.php:65
+msgid "You cannot silence users on this site."
+msgstr "شما نمی توانید کاربری را در این سایت ساکت کنید."
+
+#: actions/silence.php:72
+msgid "User is already silenced."
+msgstr "کاربر قبلا ساکت شده است."
+
+#: actions/siteadminpanel.php:69
+msgid "Basic settings for this StatusNet site."
+msgstr "تنظیمات پایه ای برای این سایت StatusNet."
+
+#: actions/siteadminpanel.php:147
+msgid "Site name must have non-zero length."
+msgstr "نام سایت باید طولی غیر صفر داشته باشد."
+
+#: actions/siteadminpanel.php:155
+msgid "You must have a valid contact email address"
+msgstr "شما باید یک آدرس ایمیل قابل قبول برای ارتباط داشته باشید"
+
+#: actions/siteadminpanel.php:173
+#, php-format
+msgid "Unknown language \"%s\""
+msgstr ""
+
+#: actions/siteadminpanel.php:180
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/siteadminpanel.php:186
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/siteadminpanel.php:192
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/siteadminpanel.php:199
+msgid "You must set an SSL server when enabling SSL."
+msgstr ""
+
+#: actions/siteadminpanel.php:204
+msgid "Invalid SSL server. The maximum length is 255 characters."
+msgstr ""
+
+#: actions/siteadminpanel.php:210
+msgid "Minimum text limit is 140 characters."
+msgstr ""
+
+#: actions/siteadminpanel.php:216
+msgid "Dupe limit must 1 or more seconds."
+msgstr ""
+
+#: actions/siteadminpanel.php:266
+msgid "General"
+msgstr ""
+
+#: actions/siteadminpanel.php:269
+msgid "Site name"
+msgstr "نام وب‌گاه"
+
+#: actions/siteadminpanel.php:270
+msgid "The name of your site, like \"Yourcompany Microblog\""
+msgstr "نام وب‌گاه شما، مانند «میکروبلاگ شرکت شما»"
+
+#: actions/siteadminpanel.php:274
+msgid "Brought by"
+msgstr "أورده شده به وسیله ی"
+
+#: actions/siteadminpanel.php:275
+msgid "Text used for credits link in footer of each page"
+msgstr ""
+
+#: actions/siteadminpanel.php:279
+msgid "Brought by URL"
+msgstr ""
+
+#: actions/siteadminpanel.php:280
+msgid "URL used for credits link in footer of each page"
+msgstr ""
+
+#: actions/siteadminpanel.php:284
+msgid "Contact email address for your site"
+msgstr ""
+
+#: actions/siteadminpanel.php:290
+msgid "Local"
+msgstr "محلی"
+
+#: actions/siteadminpanel.php:301
+msgid "Default timezone"
+msgstr "منطقه ی زمانی پیش فرض"
+
+#: actions/siteadminpanel.php:302
+msgid "Default timezone for the site; usually UTC."
+msgstr "منظقه ی زمانی پیش فرض برای سایت؛ معمولا UTC."
+
+#: actions/siteadminpanel.php:308
+msgid "Default site language"
+msgstr "زبان پیش فرض سایت"
+
+#: actions/siteadminpanel.php:316
+msgid "URLs"
+msgstr ""
+
+#: actions/siteadminpanel.php:319
+msgid "Server"
+msgstr "کارگزار"
+
+#: actions/siteadminpanel.php:319
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/siteadminpanel.php:323
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/siteadminpanel.php:325
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/siteadminpanel.php:331
+msgid "Access"
+msgstr "دسترسی"
+
+#: actions/siteadminpanel.php:334
+msgid "Private"
+msgstr "خصوصی"
+
+#: actions/siteadminpanel.php:336
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#: actions/siteadminpanel.php:340
+msgid "Invite only"
+msgstr "فقط دعوت کردن"
+
+#: actions/siteadminpanel.php:342
+msgid "Make registration invitation only."
+msgstr "تنها آماده کردن دعوت نامه های ثبت نام."
+
+#: actions/siteadminpanel.php:346
+msgid "Closed"
+msgstr "مسدود"
+
+#: actions/siteadminpanel.php:348
+msgid "Disable new registrations."
+msgstr "غیر فعال کردن نام نوبسی جدید"
+
+#: actions/siteadminpanel.php:354
+msgid "Snapshots"
+msgstr ""
+
+#: actions/siteadminpanel.php:357
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/siteadminpanel.php:358
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/siteadminpanel.php:359 actions/siteadminpanel.php:383
+msgid "Never"
+msgstr "هیچ وقت"
+
+#: actions/siteadminpanel.php:360
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/siteadminpanel.php:361
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/siteadminpanel.php:366
+msgid "Frequency"
+msgstr ""
+
+#: actions/siteadminpanel.php:367
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/siteadminpanel.php:372
+msgid "Report URL"
+msgstr ""
+
+#: actions/siteadminpanel.php:373
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/siteadminpanel.php:380
+msgid "SSL"
+msgstr ""
+
+#: actions/siteadminpanel.php:384
+msgid "Sometimes"
+msgstr "گاهی اوقات"
+
+#: actions/siteadminpanel.php:385
+msgid "Always"
+msgstr "برای همیشه"
+
+#: actions/siteadminpanel.php:387
+msgid "Use SSL"
+msgstr "استفاده از SSL"
+
+#: actions/siteadminpanel.php:388
+msgid "When to use SSL"
+msgstr ""
+
+#: actions/siteadminpanel.php:393
+msgid "SSL Server"
+msgstr ""
+
+#: actions/siteadminpanel.php:394
+msgid "Server to direct SSL requests to"
+msgstr ""
+
+#: actions/siteadminpanel.php:400
+msgid "Limits"
+msgstr "محدودیت ها"
+
+#: actions/siteadminpanel.php:403
+msgid "Text limit"
+msgstr "محدودیت متن"
+
+#: actions/siteadminpanel.php:403
+msgid "Maximum number of characters for notices."
+msgstr "بیشینهٔ تعداد حروف برای آگهی‌ها"
+
+#: actions/siteadminpanel.php:407
+msgid "Dupe limit"
+msgstr ""
+
+#: actions/siteadminpanel.php:407
+msgid "How long users must wait (in seconds) to post the same thing again."
+msgstr ""
+"چه مدت کاربران باید منتظر بمانند ( به ثانیه ) تا همان چیز را مجددا ارسال "
+"کنند."
+
+#: actions/siteadminpanel.php:421 actions/useradminpanel.php:313
+msgid "Save site settings"
+msgstr ""
+
+#: actions/smssettings.php:58
+msgid "SMS Settings"
+msgstr ""
+
+#: actions/smssettings.php:69
+#, php-format
+msgid "You can receive SMS messages through email from %%site.name%%."
+msgstr ""
+
+#: actions/smssettings.php:91
+msgid "SMS is not available."
+msgstr ""
+
+#: actions/smssettings.php:112
+msgid "Current confirmed SMS-enabled phone number."
+msgstr ""
+
+#: actions/smssettings.php:123
+msgid "Awaiting confirmation on this phone number."
+msgstr "منتظر تاییدیه برای این شماره تلفن."
+
+#: actions/smssettings.php:130
+msgid "Confirmation code"
+msgstr "کد تاییدیه"
+
+#: actions/smssettings.php:131
+msgid "Enter the code you received on your phone."
+msgstr "کدی را که در گوشیتان گرفتید وارد کنید."
+
+#: actions/smssettings.php:138
+msgid "SMS Phone number"
+msgstr "شماره تماس پیامک"
+
+#: actions/smssettings.php:140
+msgid "Phone number, no punctuation or spaces, with area code"
+msgstr "شماره تلفن، بدون نشانه گذاری یا فاصله، با کد منطقه"
+
+#: actions/smssettings.php:174
+msgid ""
+"Send me notices through SMS; I understand I may incur exorbitant charges "
+"from my carrier."
+msgstr ""
+
+#: actions/smssettings.php:306
+msgid "No phone number."
+msgstr "بدون شماره تلفن."
+
+#: actions/smssettings.php:311
+msgid "No carrier selected."
+msgstr ""
+
+#: actions/smssettings.php:318
+msgid "That is already your phone number."
+msgstr "آن قبلا شماره تلفن شما بوده است."
+
+#: actions/smssettings.php:321
+msgid "That phone number already belongs to another user."
+msgstr "أن شماره تلفن پیش از این به کاربر دیگری تعلق داشته است."
+
+#: actions/smssettings.php:347
+msgid ""
+"A confirmation code was sent to the phone number you added. Check your phone "
+"for the code and instructions on how to use it."
+msgstr ""
+"یک کد تاییدیه به شماره تلفنی که شما وارد کردید ارسال شد. گوشیتان را بررسی "
+"کنید برای کد و دستورالعمل چگونگی استفاده از آن."
+
+#: actions/smssettings.php:374
+msgid "That is the wrong confirmation number."
+msgstr "آن کد تاییدیه ی نادرست است."
+
+#: actions/smssettings.php:405
+msgid "That is not your phone number."
+msgstr "آن شماره تلفن شما نیست."
+
+#: actions/smssettings.php:465
+msgid "Mobile carrier"
+msgstr "امواج موبایل"
+
+#: actions/smssettings.php:469
+msgid "Select a carrier"
+msgstr ""
+
+#: actions/smssettings.php:476
+#, php-format
+msgid ""
+"Mobile carrier for your phone. If you know a carrier that accepts SMS over "
+"email but isn't listed here, send email to let us know at %s."
+msgstr ""
+
+#: actions/smssettings.php:498
+msgid "No code entered"
+msgstr "کدی وارد نشد"
+
+#: actions/subedit.php:70
+msgid "You are not subscribed to that profile."
+msgstr "شما به این پروفيل متعهد نشدید"
+
+#: actions/subedit.php:83
+msgid "Could not save subscription."
+msgstr ""
+
+#: actions/subscribe.php:55
+msgid "Not a local user."
+msgstr ""
+
+#: actions/subscribe.php:69
+msgid "Subscribed"
+msgstr ""
+
+#: actions/subscribers.php:50
+#, php-format
+msgid "%s subscribers"
+msgstr ""
+
+#: actions/subscribers.php:52
+#, php-format
+msgid "%s subscribers, page %d"
+msgstr ""
+
+#: actions/subscribers.php:63
+msgid "These are the people who listen to your notices."
+msgstr "این ها کسانی هستند که به آگهی های شما گوش می دهند."
+
+#: actions/subscribers.php:67
+#, php-format
+msgid "These are the people who listen to %s's notices."
+msgstr ""
+
+#: actions/subscribers.php:108
+msgid ""
+"You have no subscribers. Try subscribing to people you know and they might "
+"return the favor"
+msgstr ""
+
+#: actions/subscribers.php:110
+#, php-format
+msgid "%s has no subscribers. Want to be the first?"
+msgstr ""
+
+#: actions/subscribers.php:114
+#, php-format
+msgid ""
+"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
+"%) and be the first?"
+msgstr ""
+
+#: actions/subscriptions.php:52
+#, php-format
+msgid "%s subscriptions"
+msgstr ""
+
+#: actions/subscriptions.php:54
+#, php-format
+msgid "%s subscriptions, page %d"
+msgstr ""
+
+#: actions/subscriptions.php:65
+msgid "These are the people whose notices you listen to."
+msgstr ""
+
+#: actions/subscriptions.php:69
+#, php-format
+msgid "These are the people whose notices %s listens to."
+msgstr ""
+
+#: actions/subscriptions.php:121
+#, php-format
+msgid ""
+"You're not listening to anyone's notices right now, try subscribing to "
+"people you know. Try [people search](%%action.peoplesearch%%), look for "
+"members in groups you're interested in and in our [featured users](%%action."
+"featured%%). If you're a [Twitter user](%%action.twittersettings%%), you can "
+"automatically subscribe to people you already follow there."
+msgstr ""
+
+#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#, php-format
+msgid "%s is not listening to anyone."
+msgstr ""
+
+#: actions/subscriptions.php:194
+msgid "Jabber"
+msgstr ""
+
+#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+msgid "SMS"
+msgstr ""
+
+#: actions/tag.php:68
+#, php-format
+msgid "Notices tagged with %s, page %d"
+msgstr ""
+
+#: actions/tag.php:86
+#, php-format
+msgid "Notice feed for tag %s (RSS 1.0)"
+msgstr ""
+
+#: actions/tag.php:92
+#, php-format
+msgid "Notice feed for tag %s (RSS 2.0)"
+msgstr ""
+
+#: actions/tag.php:98
+#, php-format
+msgid "Notice feed for tag %s (Atom)"
+msgstr ""
+
+#: actions/tagother.php:39
+msgid "No ID argument."
+msgstr ""
+
+#: actions/tagother.php:65
+#, php-format
+msgid "Tag %s"
+msgstr ""
+
+#: actions/tagother.php:77 lib/userprofile.php:75
+msgid "User profile"
+msgstr "پروفایل کاربر"
+
+#: actions/tagother.php:81 lib/userprofile.php:102
+msgid "Photo"
+msgstr ""
+
+#: actions/tagother.php:141
+msgid "Tag user"
+msgstr ""
+
+#: actions/tagother.php:151
+msgid ""
+"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
+"separated"
+msgstr ""
+
+#: actions/tagother.php:193
+msgid ""
+"You can only tag people you are subscribed to or who are subscribed to you."
+msgstr ""
+
+#: actions/tagother.php:200
+msgid "Could not save tags."
+msgstr ""
+
+#: actions/tagother.php:236
+msgid "Use this form to add tags to your subscribers or subscriptions."
+msgstr ""
+
+#: actions/tagrss.php:35
+msgid "No such tag."
+msgstr ""
+
+#: actions/twitapitrends.php:87
+msgid "API method under construction."
+msgstr "روش API در دست ساخت."
+
+#: actions/unblock.php:59
+msgid "You haven't blocked that user."
+msgstr "شما آن کاربر را مسدود نکرده اید."
+
+#: actions/unsandbox.php:72
+msgid "User is not sandboxed."
+msgstr ""
+
+#: actions/unsilence.php:72
+msgid "User is not silenced."
+msgstr "کاربر ساکت نشده است."
+
+#: actions/unsubscribe.php:77
+msgid "No profile id in request."
+msgstr ""
+
+#: actions/unsubscribe.php:84
+msgid "No profile with that id."
+msgstr ""
+
+#: actions/unsubscribe.php:98
+msgid "Unsubscribed"
+msgstr ""
+
+#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#, php-format
+msgid "Listenee stream license ‘%s’ is not compatible with site license ‘%s’."
+msgstr ""
+
+#: actions/useradminpanel.php:58 lib/adminpanelaction.php:305
+#: lib/personalgroupnav.php:115
+msgid "User"
+msgstr "کاربر"
+
+#: actions/useradminpanel.php:69
+msgid "User settings for this StatusNet site."
+msgstr ""
+
+#: actions/useradminpanel.php:149
+msgid "Invalid bio limit. Must be numeric."
+msgstr ""
+
+#: actions/useradminpanel.php:155
+msgid "Invalid welcome text. Max length is 255 characters."
+msgstr ""
+
+#: actions/useradminpanel.php:165
+#, php-format
+msgid "Invalid default subscripton: '%1$s' is not user."
+msgstr ""
+
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
+#: lib/personalgroupnav.php:109
+msgid "Profile"
+msgstr ""
+
+#: actions/useradminpanel.php:222
+msgid "Bio Limit"
+msgstr ""
+
+#: actions/useradminpanel.php:223
+msgid "Maximum length of a profile bio in characters."
+msgstr "حداکثر طول یک زندگی نامه(در پروفایل) بر حسب کاراکتر."
+
+#: actions/useradminpanel.php:231
+msgid "New users"
+msgstr ""
+
+#: actions/useradminpanel.php:235
+msgid "New user welcome"
+msgstr "خوشامدگویی کاربر جدید"
+
+#: actions/useradminpanel.php:236
+msgid "Welcome text for new users (Max 255 chars)."
+msgstr "پیام خوشامدگویی برای کاربران جدید( حداکثر 255 کاراکتر)"
+
+#: actions/useradminpanel.php:241
+msgid "Default subscription"
+msgstr ""
+
+#: actions/useradminpanel.php:242
+msgid "Automatically subscribe new users to this user."
+msgstr ""
+
+#: actions/useradminpanel.php:251
+msgid "Invitations"
+msgstr "دعوت نامه ها"
+
+#: actions/useradminpanel.php:256
+msgid "Invitations enabled"
+msgstr "دعوت نامه ها فعال شدند"
+
+#: actions/useradminpanel.php:258
+msgid "Whether to allow users to invite new users."
+msgstr "خواه به کاربران اجازه ی دعوت کردن کاربران جدید داده شود."
+
+#: actions/useradminpanel.php:265
+msgid "Sessions"
+msgstr ""
+
+#: actions/useradminpanel.php:270
+msgid "Handle sessions"
+msgstr ""
+
+#: actions/useradminpanel.php:272
+msgid "Whether to handle sessions ourselves."
+msgstr ""
+
+#: actions/useradminpanel.php:276
+msgid "Session debugging"
+msgstr ""
+
+#: actions/useradminpanel.php:278
+msgid "Turn on debugging output for sessions."
+msgstr ""
+
+#: actions/userauthorization.php:105
+msgid "Authorize subscription"
+msgstr ""
+
+#: actions/userauthorization.php:110
+msgid ""
+"Please check these details to make sure that you want to subscribe to this "
+"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
+"click “Reject”."
+msgstr ""
+
+#: actions/userauthorization.php:188
+msgid "License"
+msgstr "لیسانس"
+
+#: actions/userauthorization.php:209
+msgid "Accept"
+msgstr "پذیرفتن"
+
+#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: lib/subscribeform.php:139
+msgid "Subscribe to this user"
+msgstr "تصویب این کاریر"
+
+#: actions/userauthorization.php:211
+msgid "Reject"
+msgstr "رد کردن"
+
+#: actions/userauthorization.php:212
+msgid "Reject this subscription"
+msgstr ""
+
+#: actions/userauthorization.php:225
+msgid "No authorization request!"
+msgstr ""
+
+#: actions/userauthorization.php:247
+msgid "Subscription authorized"
+msgstr ""
+
+#: actions/userauthorization.php:249
+msgid ""
+"The subscription has been authorized, but no callback URL was passed. Check "
+"with the site’s instructions for details on how to authorize the "
+"subscription. Your subscription token is:"
+msgstr ""
+
+#: actions/userauthorization.php:259
+msgid "Subscription rejected"
+msgstr ""
+
+#: actions/userauthorization.php:261
+msgid ""
+"The subscription has been rejected, but no callback URL was passed. Check "
+"with the site’s instructions for details on how to fully reject the "
+"subscription."
+msgstr ""
+
+#: actions/userauthorization.php:296
+#, php-format
+msgid "Listener URI ‘%s’ not found here"
+msgstr ""
+
+#: actions/userauthorization.php:301
+#, php-format
+msgid "Listenee URI ‘%s’ is too long."
+msgstr ""
+
+#: actions/userauthorization.php:307
+#, php-format
+msgid "Listenee URI ‘%s’ is a local user."
+msgstr ""
+
+#: actions/userauthorization.php:322
+#, php-format
+msgid "Profile URL ‘%s’ is for a local user."
+msgstr ""
+
+#: actions/userauthorization.php:338
+#, php-format
+msgid "Avatar URL ‘%s’ is not valid."
+msgstr ""
+
+#: actions/userauthorization.php:343
+#, php-format
+msgid "Can’t read avatar URL ‘%s’."
+msgstr ""
+
+#: actions/userauthorization.php:348
+#, php-format
+msgid "Wrong image type for avatar URL ‘%s’."
+msgstr ""
+
+#: actions/userbyid.php:70
+msgid "No ID."
+msgstr ""
+
+#: actions/userdesignsettings.php:76 lib/designsettings.php:65
+msgid "Profile design"
+msgstr ""
+
+#: actions/userdesignsettings.php:87 lib/designsettings.php:76
+msgid ""
+"Customize the way your profile looks with a background image and a colour "
+"palette of your choice."
+msgstr ""
+
+#: actions/userdesignsettings.php:282
+msgid "Enjoy your hotdog!"
+msgstr "از هات داگ خود لذت ببرید!"
+
+#: actions/usergroups.php:64
+#, php-format
+msgid "%s groups, page %d"
+msgstr "%d گروه , صفحه %S"
+
+#: actions/usergroups.php:130
+msgid "Search for more groups"
+msgstr "جستجو برای گروه های بیشتر"
+
+#: actions/usergroups.php:153
+#, php-format
+msgid "%s is not a member of any group."
+msgstr ""
+
+#: actions/usergroups.php:158
+#, php-format
+msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
+msgstr ""
+
+#: classes/File.php:137
+#, php-format
+msgid ""
+"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
+"to upload a smaller version."
+msgstr ""
+
+#: classes/File.php:147
+#, php-format
+msgid "A file this large would exceed your user quota of %d bytes."
+msgstr ""
+
+#: classes/File.php:154
+#, php-format
+msgid "A file this large would exceed your monthly quota of %d bytes."
+msgstr ""
+
+#: classes/Message.php:45
+msgid "You are banned from sending direct messages."
+msgstr "شما از فرستادن پیام مستقیم مردود شده اید."
+
+#: classes/Message.php:61
+msgid "Could not insert message."
+msgstr ""
+
+#: classes/Message.php:71
+msgid "Could not update message with new URI."
+msgstr ""
+
+#: classes/Notice.php:172
+#, php-format
+msgid "DB error inserting hashtag: %s"
+msgstr ""
+
+#: classes/Notice.php:226
+msgid "Problem saving notice. Too long."
+msgstr "مشکل در ذخیره کردن پیام. بسیار طولانی."
+
+#: classes/Notice.php:230
+msgid "Problem saving notice. Unknown user."
+msgstr "مشکل در ذخیره کردن پیام. کاربر نا شناخته."
+
+#: classes/Notice.php:235
+msgid ""
+"Too many notices too fast; take a breather and post again in a few minutes."
+msgstr ""
+"تعداد خیلی زیاد آگهی و بسیار سریع؛ استراحت کنید و مجددا دقایقی دیگر ارسال "
+"کنید."
+
+#: classes/Notice.php:241
+msgid ""
+"Too many duplicate messages too quickly; take a breather and post again in a "
+"few minutes."
+msgstr ""
+"تعداد زیاد پیام های دو نسخه ای و بسرعت؛ استراحت کنید و دقایقی دیگر مجددا "
+"ارسال کنید."
+
+#: classes/Notice.php:247
+msgid "You are banned from posting notices on this site."
+msgstr ""
+
+#: classes/Notice.php:319 classes/Notice.php:344
+msgid "Problem saving notice."
+msgstr "مشکل در ذخیره کردن آگهی."
+
+#: classes/Notice.php:1044
+#, php-format
+msgid "DB error inserting reply: %s"
+msgstr ""
+
+#: classes/Notice.php:1371
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr ""
+
+#: classes/User.php:368
+#, php-format
+msgid "Welcome to %1$s, @%2$s!"
+msgstr ""
+
+#: classes/User_group.php:380
+msgid "Could not create group."
+msgstr "نمیتوان گروه را تشکیل داد"
+
+#: classes/User_group.php:409
+msgid "Could not set group membership."
+msgstr ""
+
+#: lib/accountsettingsaction.php:108
+msgid "Change your profile settings"
+msgstr "تنضبمات پروفيلتان را تغیر دهید"
+
+#: lib/accountsettingsaction.php:112
+msgid "Upload an avatar"
+msgstr "یک آواتار ارسال کنید"
+
+#: lib/accountsettingsaction.php:116
+msgid "Change your password"
+msgstr "کلمه ی عبور خود را تغییر دهید"
+
+#: lib/accountsettingsaction.php:120
+msgid "Change email handling"
+msgstr "تغیر تنظیمات ایمل ."
+
+#: lib/accountsettingsaction.php:124
+msgid "Design your profile"
+msgstr "پروفایل خود را طراحی کنید"
+
+#: lib/accountsettingsaction.php:128
+msgid "Other"
+msgstr "دیگر"
+
+#: lib/accountsettingsaction.php:128
+msgid "Other options"
+msgstr "انتخابات دیگر"
+
+#: lib/action.php:144
+#, php-format
+msgid "%s - %s"
+msgstr ""
+
+#: lib/action.php:159
+msgid "Untitled page"
+msgstr "صفحه ی بدون عنوان"
+
+#: lib/action.php:425
+msgid "Primary site navigation"
+msgstr ""
+
+#: lib/action.php:431
+msgid "Home"
+msgstr "خانه"
+
+#: lib/action.php:431
+msgid "Personal profile and friends timeline"
+msgstr ""
+
+#: lib/action.php:433
+msgid "Account"
+msgstr "حساب کاربری"
+
+#: lib/action.php:433
+msgid "Change your email, avatar, password, profile"
+msgstr "آدرس ایمیل، آواتار، کلمه ی عبور، پروفایل خود را تغییر دهید"
+
+#: lib/action.php:436
+msgid "Connect"
+msgstr "وصل‌شدن"
+
+#: lib/action.php:436
+msgid "Connect to services"
+msgstr ""
+
+#: lib/action.php:440
+msgid "Change site configuration"
+msgstr "تغییر پیکربندی سایت"
+
+#: lib/action.php:444 lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "دعوت‌کردن"
+
+#: lib/action.php:445 lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr " به شما ملحق شوند %s دوستان و همکاران را دعوت کنید تا در"
+
+#: lib/action.php:450
+msgid "Logout"
+msgstr "خروج"
+
+#: lib/action.php:450
+msgid "Logout from the site"
+msgstr "خارج شدن از سایت ."
+
+#: lib/action.php:455
+msgid "Create an account"
+msgstr "یک حساب کاربری بسازید"
+
+#: lib/action.php:458
+msgid "Login to the site"
+msgstr "ورود به وب‌گاه"
+
+#: lib/action.php:461 lib/action.php:724
+msgid "Help"
+msgstr "کمک"
+
+#: lib/action.php:461
+msgid "Help me!"
+msgstr "به من کمک کنید!"
+
+#: lib/action.php:464 lib/searchaction.php:127
+msgid "Search"
+msgstr "جست‌وجو"
+
+#: lib/action.php:464
+msgid "Search for people or text"
+msgstr "جستجو برای شخص با متن"
+
+#: lib/action.php:485
+msgid "Site notice"
+msgstr ""
+
+#: lib/action.php:551
+msgid "Local views"
+msgstr "دید محلی"
+
+#: lib/action.php:617
+msgid "Page notice"
+msgstr ""
+
+#: lib/action.php:719
+msgid "Secondary site navigation"
+msgstr ""
+
+#: lib/action.php:726
+msgid "About"
+msgstr "دربارهٔ"
+
+#: lib/action.php:728
+msgid "FAQ"
+msgstr "سوال‌های رایج"
+
+#: lib/action.php:732
+msgid "TOS"
+msgstr ""
+
+#: lib/action.php:735
+msgid "Privacy"
+msgstr "خصوصی"
+
+#: lib/action.php:737
+msgid "Source"
+msgstr "منبع"
+
+#: lib/action.php:739
+msgid "Contact"
+msgstr "تماس"
+
+#: lib/action.php:741
+msgid "Badge"
+msgstr ""
+
+#: lib/action.php:769
+msgid "StatusNet software license"
+msgstr ""
+
+#: lib/action.php:772
+#, php-format
+msgid ""
+"**%%site.name%%** is a microblogging service brought to you by [%%site."
+"broughtby%%](%%site.broughtbyurl%%). "
+msgstr ""
+
+#: lib/action.php:774
+#, php-format
+msgid "**%%site.name%%** is a microblogging service. "
+msgstr ""
+
+#: lib/action.php:776
+#, php-format
+msgid ""
+"It runs the [StatusNet](http://status.net/) microblogging software, version %"
+"s, available under the [GNU Affero General Public License](http://www.fsf."
+"org/licensing/licenses/agpl-3.0.html)."
+msgstr ""
+
+#: lib/action.php:790
+msgid "Site content license"
+msgstr "مجوز محتویات سایت"
+
+#: lib/action.php:799
+msgid "All "
+msgstr "همه "
+
+#: lib/action.php:804
+msgid "license."
+msgstr "مجوز."
+
+#: lib/action.php:1098
+msgid "Pagination"
+msgstr ""
+
+#: lib/action.php:1107
+msgid "After"
+msgstr "بعد از"
+
+#: lib/action.php:1115
+msgid "Before"
+msgstr "قبل از"
+
+#: lib/action.php:1163
+msgid "There was a problem with your session token."
+msgstr ""
+
+#: lib/adminpanelaction.php:96
+msgid "You cannot make changes to this site."
+msgstr "شما نمی توانید در این سایت تغیری ایجاد کنید"
+
+#: lib/adminpanelaction.php:195
+msgid "showForm() not implemented."
+msgstr ""
+
+#: lib/adminpanelaction.php:224
+msgid "saveSettings() not implemented."
+msgstr ""
+
+#: lib/adminpanelaction.php:247
+msgid "Unable to delete design setting."
+msgstr "نمی توان تنظیمات طراحی شده را پاک کرد ."
+
+#: lib/adminpanelaction.php:300
+msgid "Basic site configuration"
+msgstr ""
+
+#: lib/adminpanelaction.php:303
+msgid "Design configuration"
+msgstr ""
+
+#: lib/adminpanelaction.php:306 lib/adminpanelaction.php:309
+msgid "Paths configuration"
+msgstr ""
+
+#: lib/attachmentlist.php:87
+msgid "Attachments"
+msgstr "ضمائم"
+
+#: lib/attachmentlist.php:265
+msgid "Author"
+msgstr "مؤلف"
+
+#: lib/attachmentlist.php:278
+msgid "Provider"
+msgstr "مهیا کننده"
+
+#: lib/attachmentnoticesection.php:67
+msgid "Notices where this attachment appears"
+msgstr ""
+
+#: lib/attachmenttagcloudsection.php:48
+msgid "Tags for this attachment"
+msgstr ""
+
+#: lib/channel.php:138 lib/channel.php:158
+msgid "Command results"
+msgstr ""
+
+#: lib/channel.php:210
+msgid "Command complete"
+msgstr "دستور انجام شد"
+
+#: lib/channel.php:221
+msgid "Command failed"
+msgstr "فرمان شکست خورد"
+
+#: lib/command.php:44
+msgid "Sorry, this command is not yet implemented."
+msgstr "متاسفانه این دستور هنوز اجرا نشده."
+
+#: lib/command.php:88
+#, php-format
+msgid "Could not find a user with nickname %s"
+msgstr ""
+
+#: lib/command.php:92
+msgid "It does not make a lot of sense to nudge yourself!"
+msgstr ""
+
+#: lib/command.php:99
+#, php-format
+msgid "Nudge sent to %s"
+msgstr ""
+
+#: lib/command.php:126
+#, php-format
+msgid ""
+"Subscriptions: %1$s\n"
+"Subscribers: %2$s\n"
+"Notices: %3$s"
+msgstr ""
+
+#: lib/command.php:152 lib/command.php:399 lib/command.php:460
+msgid "Notice with that id does not exist"
+msgstr ""
+
+#: lib/command.php:168 lib/command.php:415 lib/command.php:476
+#: lib/command.php:532
+msgid "User has no last notice"
+msgstr "کاربر آگهی آخر ندارد"
+
+#: lib/command.php:190
+msgid "Notice marked as fave."
+msgstr ""
+
+#: lib/command.php:315
+#, php-format
+msgid "%1$s (%2$s)"
+msgstr ""
+
+#: lib/command.php:318
+#, php-format
+msgid "Fullname: %s"
+msgstr "نام کامل : %s"
+
+#: lib/command.php:321
+#, php-format
+msgid "Location: %s"
+msgstr "موقعیت : %s"
+
+#: lib/command.php:324
+#, php-format
+msgid "Homepage: %s"
+msgstr "صفحه خانگی : %s"
+
+#: lib/command.php:327
+#, php-format
+msgid "About: %s"
+msgstr "درباره ی : %s"
+
+#: lib/command.php:358 scripts/xmppdaemon.php:301
+#, php-format
+msgid "Message too long - maximum is %d characters, you sent %d"
+msgstr ""
+
+#: lib/command.php:378
+msgid "Error sending direct message."
+msgstr "خطا در فرستادن پیام مستقیم."
+
+#: lib/command.php:422
+msgid "Cannot repeat your own notice"
+msgstr "نمی توان آگهی خودتان را تکرار کرد"
+
+#: lib/command.php:427
+msgid "Already repeated that notice"
+msgstr "آن آگهی قبلا تکرار شده است."
+
+#: lib/command.php:435
+#, php-format
+msgid "Notice from %s repeated"
+msgstr ""
+
+#: lib/command.php:437
+msgid "Error repeating notice."
+msgstr "خطا هنگام تکرار آگهی."
+
+#: lib/command.php:491
+#, php-format
+msgid "Notice too long - maximum is %d characters, you sent %d"
+msgstr ""
+
+#: lib/command.php:500
+#, php-format
+msgid "Reply to %s sent"
+msgstr ""
+
+#: lib/command.php:502
+msgid "Error saving notice."
+msgstr "خطا هنگام ذخیره ی آگهی"
+
+#: lib/command.php:556
+msgid "Specify the name of the user to subscribe to"
+msgstr ""
+
+#: lib/command.php:563
+#, php-format
+msgid "Subscribed to %s"
+msgstr ""
+
+#: lib/command.php:584
+msgid "Specify the name of the user to unsubscribe from"
+msgstr ""
+
+#: lib/command.php:591
+#, php-format
+msgid "Unsubscribed from %s"
+msgstr ""
+
+#: lib/command.php:609 lib/command.php:632
+msgid "Command not yet implemented."
+msgstr "دستور هنوز اجرا نشده"
+
+#: lib/command.php:612
+msgid "Notification off."
+msgstr ""
+
+#: lib/command.php:614
+msgid "Can't turn off notification."
+msgstr "ناتوان در خاموش کردن آگاه سازی."
+
+#: lib/command.php:635
+msgid "Notification on."
+msgstr "آگاه سازی فعال است."
+
+#: lib/command.php:637
+msgid "Can't turn on notification."
+msgstr "ناتوان در روشن کردن آگاه سازی."
+
+#: lib/command.php:650
+msgid "Login command is disabled"
+msgstr "فرمان ورود از کار افتاده است"
+
+#: lib/command.php:664
+#, php-format
+msgid "Could not create login token for %s"
+msgstr ""
+
+#: lib/command.php:669
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:685
+msgid "You are not subscribed to anyone."
+msgstr "شما توسط هیچ کس تصویب نشده اید ."
+
+#: lib/command.php:687
+#, fuzzy
+msgid "You are subscribed to this person:"
+msgid_plural "You are subscribed to these people:"
+msgstr[0] "هم اکنون شما این کاربران را دنبال می‌کنید: "
+
+#: lib/command.php:707
+msgid "No one is subscribed to you."
+msgstr ""
+
+#: lib/command.php:709
+#, fuzzy
+msgid "This person is subscribed to you:"
+msgid_plural "These people are subscribed to you:"
+msgstr[0] "شما توسط هیچ کس تصویب نشده اید ."
+
+#: lib/command.php:729
+#, fuzzy
+msgid "You are not a member of any groups."
+msgstr "شما در هیچ گروهی عضو نیستید ."
+
+#: lib/command.php:731
+#, fuzzy
+msgid "You are a member of this group:"
+msgid_plural "You are a member of these groups:"
+msgstr[0] "شما یک عضو این گروه نیستید."
+
+#: lib/command.php:745
+msgid ""
+"Commands:\n"
+"on - turn on notifications\n"
+"off - turn off notifications\n"
+"help - show this help\n"
+"follow <nickname> - subscribe to user\n"
+"groups - lists the groups you have joined\n"
+"subscriptions - list the people you follow\n"
+"subscribers - list the people that follow you\n"
+"leave <nickname> - unsubscribe from user\n"
+"d <nickname> <text> - direct message to user\n"
+"get <nickname> - get last notice from user\n"
+"whois <nickname> - get profile info on user\n"
+"fav <nickname> - add user's last notice as a 'fave'\n"
+"fav #<notice_id> - add notice with the given id as a 'fave'\n"
+"repeat #<notice_id> - repeat a notice with a given id\n"
+"repeat <nickname> - repeat the last notice from user\n"
+"reply #<notice_id> - reply to notice with a given id\n"
+"reply <nickname> - reply to the last notice from user\n"
+"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
+"drop <group> - leave group\n"
+"stats - get your stats\n"
+"stop - same as 'off'\n"
+"quit - same as 'off'\n"
+"sub <nickname> - same as 'follow'\n"
+"unsub <nickname> - same as 'leave'\n"
+"last <nickname> - same as 'get'\n"
+"on <nickname> - not yet implemented.\n"
+"off <nickname> - not yet implemented.\n"
+"nudge <nickname> - remind a user to update.\n"
+"invite <phone number> - not yet implemented.\n"
+"track <word> - not yet implemented.\n"
+"untrack <word> - not yet implemented.\n"
+"track off - not yet implemented.\n"
+"untrack all - not yet implemented.\n"
+"tracks - not yet implemented.\n"
+"tracking - not yet implemented.\n"
+msgstr ""
+
+#: lib/common.php:199
+msgid "No configuration file found. "
+msgstr ""
+
+#: lib/common.php:200
+msgid "I looked for configuration files in the following places: "
+msgstr ""
+
+#: lib/common.php:201
+msgid "You may wish to run the installer to fix this."
+msgstr "شما ممکن است بخواهید نصاب را اجرا کنید تا این را تعمیر کند."
+
+#: lib/common.php:202
+msgid "Go to the installer."
+msgstr "برو به نصاب."
+
+#: lib/connectsettingsaction.php:110
+msgid "IM"
+msgstr "پیام‌رسان فوری"
+
+#: lib/connectsettingsaction.php:111
+msgid "Updates by instant messenger (IM)"
+msgstr ""
+
+#: lib/connectsettingsaction.php:116
+msgid "Updates by SMS"
+msgstr "به روز رسانی با پیامک"
+
+#: lib/dberroraction.php:60
+msgid "Database error"
+msgstr "خطای پایگاه داده"
+
+#: lib/designsettings.php:105
+msgid "Upload file"
+msgstr "ارسال فایل"
+
+#: lib/designsettings.php:109
+msgid ""
+"You can upload your personal background image. The maximum file size is 2MB."
+msgstr ""
+
+#: lib/designsettings.php:418
+msgid "Design defaults restored."
+msgstr ""
+
+#: lib/disfavorform.php:114 lib/disfavorform.php:140
+msgid "Disfavor this notice"
+msgstr ""
+
+#: lib/favorform.php:114 lib/favorform.php:140
+msgid "Favor this notice"
+msgstr "طرفدار این خبر"
+
+#: lib/favorform.php:140
+msgid "Favor"
+msgstr ""
+
+#: lib/feed.php:85
+msgid "RSS 1.0"
+msgstr ""
+
+#: lib/feed.php:87
+msgid "RSS 2.0"
+msgstr ""
+
+#: lib/feed.php:89
+msgid "Atom"
+msgstr ""
+
+#: lib/feed.php:91
+msgid "FOAF"
+msgstr ""
+
+#: lib/feedlist.php:64
+msgid "Export data"
+msgstr "صادر کردن داده"
+
+#: lib/galleryaction.php:121
+msgid "Filter tags"
+msgstr ""
+
+#: lib/galleryaction.php:131
+msgid "All"
+msgstr "همه"
+
+#: lib/galleryaction.php:139
+msgid "Select tag to filter"
+msgstr ""
+
+#: lib/galleryaction.php:140
+msgid "Tag"
+msgstr ""
+
+#: lib/galleryaction.php:141
+msgid "Choose a tag to narrow list"
+msgstr ""
+
+#: lib/galleryaction.php:143
+msgid "Go"
+msgstr "برو"
+
+#: lib/groupeditform.php:163
+msgid "URL of the homepage or blog of the group or topic"
+msgstr ""
+
+#: lib/groupeditform.php:168
+msgid "Describe the group or topic"
+msgstr ""
+
+#: lib/groupeditform.php:170
+#, php-format
+msgid "Describe the group or topic in %d characters"
+msgstr ""
+
+#: lib/groupeditform.php:172
+msgid "Description"
+msgstr ""
+
+#: lib/groupeditform.php:179
+msgid ""
+"Location for the group, if any, like \"City, State (or Region), Country\""
+msgstr ""
+
+#: lib/groupeditform.php:187
+#, php-format
+msgid "Extra nicknames for the group, comma- or space- separated, max %d"
+msgstr ""
+
+#: lib/groupnav.php:85
+msgid "Group"
+msgstr "گروه"
+
+#: lib/groupnav.php:101
+msgid "Blocked"
+msgstr "مسدود شده"
+
+#: lib/groupnav.php:102
+#, php-format
+msgid "%s blocked users"
+msgstr ""
+
+#: lib/groupnav.php:108
+#, php-format
+msgid "Edit %s group properties"
+msgstr ""
+
+#: lib/groupnav.php:113
+msgid "Logo"
+msgstr "نشان"
+
+#: lib/groupnav.php:114
+#, php-format
+msgid "Add or edit %s logo"
+msgstr ""
+
+#: lib/groupnav.php:120
+#, php-format
+msgid "Add or edit %s design"
+msgstr ""
+
+#: lib/groupsbymemberssection.php:71
+msgid "Groups with most members"
+msgstr "گروه های با اعضاء بیشتر"
+
+#: lib/groupsbypostssection.php:71
+msgid "Groups with most posts"
+msgstr "گروه های با پست های بیشتر"
+
+#: lib/grouptagcloudsection.php:56
+#, php-format
+msgid "Tags in %s group's notices"
+msgstr ""
+
+#: lib/htmloutputter.php:103
+msgid "This page is not available in a media type you accept"
+msgstr ""
+
+#: lib/imagefile.php:75
+#, php-format
+msgid "That file is too big. The maximum file size is %s."
+msgstr ""
+"است . این فایل بسیار یزرگ است %s بیشترین مقدار قابل قبول برای اندازه ی فایل."
+
+#: lib/imagefile.php:80
+msgid "Partial upload."
+msgstr ""
+
+#: lib/imagefile.php:88 lib/mediafile.php:170
+msgid "System error uploading file."
+msgstr "خطای سیستم ارسال فایل."
+
+#: lib/imagefile.php:96
+msgid "Not an image or corrupt file."
+msgstr "تصویر یا فایل خرابی نیست"
+
+#: lib/imagefile.php:105
+msgid "Unsupported image file format."
+msgstr "فرمت(فایل) عکس پشتیبانی نشده."
+
+#: lib/imagefile.php:118
+msgid "Lost our file."
+msgstr "فایلمان گم شده"
+
+#: lib/imagefile.php:150 lib/imagefile.php:197
+msgid "Unknown file type"
+msgstr "نوع فایل پشتیبانی نشده"
+
+#: lib/imagefile.php:217
+msgid "MB"
+msgstr "مگابایت"
+
+#: lib/imagefile.php:219
+msgid "kB"
+msgstr "کیلوبایت"
+
+#: lib/jabber.php:191
+#, php-format
+msgid "[%s]"
+msgstr ""
+
+#: lib/joinform.php:114
+msgid "Join"
+msgstr "مشارکت کردن"
+
+#: lib/leaveform.php:114
+msgid "Leave"
+msgstr "ترک کردن"
+
+#: lib/logingroupnav.php:80
+msgid "Login with a username and password"
+msgstr "وارد شدن با یک نام کاربری و کلمه ی عبور"
+
+#: lib/logingroupnav.php:86
+msgid "Sign up for a new account"
+msgstr "عضویت برای حساب کاربری جدید"
+
+#: lib/mail.php:172
+msgid "Email address confirmation"
+msgstr "تاییدیه ی آدرس ایمیل"
+
+#: lib/mail.php:174
+#, php-format
+msgid ""
+"Hey, %s.\n"
+"\n"
+"Someone just entered this email address on %s.\n"
+"\n"
+"If it was you, and you want to confirm your entry, use the URL below:\n"
+"\n"
+"\t%s\n"
+"\n"
+"If not, just ignore this message.\n"
+"\n"
+"Thanks for your time, \n"
+"%s\n"
+msgstr ""
+
+#: lib/mail.php:236
+#, php-format
+msgid "%1$s is now listening to your notices on %2$s."
+msgstr ""
+
+#: lib/mail.php:241
+#, php-format
+msgid ""
+"%1$s is now listening to your notices on %2$s.\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"Faithfully yours,\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"Change your email address or notification options at %8$s\n"
+msgstr ""
+
+#: lib/mail.php:254
+#, php-format
+msgid "Location: %s\n"
+msgstr "موقعیت : %s\n"
+
+#: lib/mail.php:256
+#, php-format
+msgid "Homepage: %s\n"
+msgstr "صفحه خانگی : %s\n"
+
+#: lib/mail.php:258
+#, php-format
+msgid ""
+"Bio: %s\n"
+"\n"
+msgstr ""
+
+#: lib/mail.php:286
+#, php-format
+msgid "New email address for posting to %s"
+msgstr "%s ادرس ایمیل جدید برای"
+
+#: lib/mail.php:289
+#, php-format
+msgid ""
+"You have a new posting address on %1$s.\n"
+"\n"
+"Send email to %2$s to post new messages.\n"
+"\n"
+"More email instructions at %3$s.\n"
+"\n"
+"Faithfully yours,\n"
+"%4$s"
+msgstr ""
+
+#: lib/mail.php:413
+#, php-format
+msgid "%s status"
+msgstr ""
+
+#: lib/mail.php:439
+msgid "SMS confirmation"
+msgstr ""
+
+#: lib/mail.php:463
+#, php-format
+msgid "You've been nudged by %s"
+msgstr ""
+
+#: lib/mail.php:467
+#, php-format
+msgid ""
+"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
+"to post some news.\n"
+"\n"
+"So let's hear from you :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"Don't reply to this email; it won't get to them.\n"
+"\n"
+"With kind regards,\n"
+"%4$s\n"
+msgstr ""
+
+#: lib/mail.php:510
+#, php-format
+msgid "New private message from %s"
+msgstr ""
+
+#: lib/mail.php:514
+#, php-format
+msgid ""
+"%1$s (%2$s) sent you a private message:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"You can reply to their message here:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Don't reply to this email; it won't get to them.\n"
+"\n"
+"With kind regards,\n"
+"%5$s\n"
+msgstr ""
+
+#: lib/mail.php:559
+#, php-format
+msgid "%s (@%s) added your notice as a favorite"
+msgstr " خبر شما را به علایق خود اضافه کرد %s (@%s)"
+
+#: lib/mail.php:561
+#, php-format
+msgid ""
+"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
+"\n"
+"The URL of your notice is:\n"
+"\n"
+"%3$s\n"
+"\n"
+"The text of your notice is:\n"
+"\n"
+"%4$s\n"
+"\n"
+"You can see the list of %1$s's favorites here:\n"
+"\n"
+"%5$s\n"
+"\n"
+"Faithfully yours,\n"
+"%6$s\n"
+msgstr ""
+
+#: lib/mail.php:620
+#, php-format
+msgid "%s (@%s) sent a notice to your attention"
+msgstr ""
+
+#: lib/mail.php:622
+#, php-format
+msgid ""
+"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
+"\n"
+"The notice is here:\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"It reads:\n"
+"\n"
+"\t%4$s\n"
+"\n"
+msgstr ""
+
+#: lib/mailbox.php:89
+msgid "Only the user can read their own mailboxes."
+msgstr "تنها کاربران می تواند صندوق نامه ی خودشان را بخوانند."
+
+#: lib/mailbox.php:139
+msgid ""
+"You have no private messages. You can send private message to engage other "
+"users in conversation. People can send you messages for your eyes only."
+msgstr ""
+
+#: lib/mailbox.php:227 lib/noticelist.php:469
+msgid "from"
+msgstr "از"
+
+#: lib/mediafile.php:98 lib/mediafile.php:123
+msgid "There was a database error while saving your file. Please try again."
+msgstr ""
+"یک خطای پایگاه داده هنگام ذخیره کردن فایل شما رخ داد. لطفا بعدا سعی کنید."
+
+#: lib/mediafile.php:142
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
+msgstr ""
+
+#: lib/mediafile.php:147
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form."
+msgstr ""
+
+#: lib/mediafile.php:152
+msgid "The uploaded file was only partially uploaded."
+msgstr "فایل ارسال شده نتها اندکی ارسال شد."
+
+#: lib/mediafile.php:159
+msgid "Missing a temporary folder."
+msgstr "گم شدن یک پوشه ی موقتی."
+
+#: lib/mediafile.php:162
+msgid "Failed to write file to disk."
+msgstr "شکست خوردن در نوشتن فایل روی دیسک."
+
+#: lib/mediafile.php:165
+msgid "File upload stopped by extension."
+msgstr ""
+
+#: lib/mediafile.php:179 lib/mediafile.php:216
+msgid "File exceeds user's quota!"
+msgstr ""
+
+#: lib/mediafile.php:196 lib/mediafile.php:233
+msgid "File could not be moved to destination directory."
+msgstr "فایل نتوانست به دایرکتوری مقصد منتقل شود."
+
+#: lib/mediafile.php:201 lib/mediafile.php:237
+msgid "Could not determine file's mime-type!"
+msgstr ""
+
+#: lib/mediafile.php:270
+#, php-format
+msgid " Try using another %s format."
+msgstr ""
+
+#: lib/mediafile.php:275
+#, php-format
+msgid "%s is not a supported filetype on this server."
+msgstr ""
+
+#: lib/messageform.php:120
+msgid "Send a direct notice"
+msgstr "یک آگهی مستقیم بفرستید."
+
+#: lib/messageform.php:146
+msgid "To"
+msgstr "به"
+
+#: lib/messageform.php:159 lib/noticeform.php:183
+msgid "Available characters"
+msgstr "کاراکترهای موجود"
+
+#: lib/noticeform.php:158
+msgid "Send a notice"
+msgstr "یک آگهی بفرستید"
+
+#: lib/noticeform.php:171
+#, php-format
+msgid "What's up, %s?"
+msgstr "چه شده %s ?"
+
+#: lib/noticeform.php:190
+msgid "Attach"
+msgstr "ضمیمه کردن"
+
+#: lib/noticeform.php:194
+msgid "Attach a file"
+msgstr "یک فایل ضمیمه کنید"
+
+#: lib/noticelist.php:420
+#, php-format
+msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
+msgstr ""
+
+#: lib/noticelist.php:421
+msgid "N"
+msgstr ""
+
+#: lib/noticelist.php:421
+msgid "S"
+msgstr ""
+
+#: lib/noticelist.php:422
+msgid "E"
+msgstr ""
+
+#: lib/noticelist.php:422
+msgid "W"
+msgstr ""
+
+#: lib/noticelist.php:428
+msgid "at"
+msgstr "در"
+
+#: lib/noticelist.php:523
+msgid "in context"
+msgstr "در زمینه"
+
+#: lib/noticelist.php:548
+msgid "Repeated by"
+msgstr ""
+
+#: lib/noticelist.php:577
+msgid "Reply to this notice"
+msgstr "به این آگهی جواب دهید"
+
+#: lib/noticelist.php:578
+msgid "Reply"
+msgstr "جواب دادن"
+
+#: lib/noticelist.php:620
+msgid "Notice repeated"
+msgstr "آگهی تکرار شد"
+
+#: lib/nudgeform.php:116
+msgid "Nudge this user"
+msgstr ""
+
+#: lib/nudgeform.php:128
+msgid "Nudge"
+msgstr ""
+
+#: lib/nudgeform.php:128
+msgid "Send a nudge to this user"
+msgstr "برای این کاربر اژير بفرست"
+
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile"
+msgstr "خطا در درج مشخصات جدید"
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar"
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile"
+msgstr ""
+
+#: lib/oauthstore.php:345
+msgid "Duplicate notice"
+msgstr ""
+
+#: lib/oauthstore.php:466 lib/subs.php:48
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: lib/oauthstore.php:491
+msgid "Couldn't insert new subscription."
+msgstr ""
+
+#: lib/personalgroupnav.php:99
+msgid "Personal"
+msgstr "شخصی"
+
+#: lib/personalgroupnav.php:104
+msgid "Replies"
+msgstr "پاسخ ها"
+
+#: lib/personalgroupnav.php:114
+msgid "Favorites"
+msgstr "چیزهای مورد علاقه"
+
+#: lib/personalgroupnav.php:124
+msgid "Inbox"
+msgstr "صندوق دریافتی"
+
+#: lib/personalgroupnav.php:125
+msgid "Your incoming messages"
+msgstr "پیام های وارد شونده ی شما"
+
+#: lib/personalgroupnav.php:129
+msgid "Outbox"
+msgstr "صندوق خروجی"
+
+#: lib/personalgroupnav.php:130
+msgid "Your sent messages"
+msgstr "پیام های فرستاده شده به وسیله ی شما"
+
+#: lib/personaltagcloudsection.php:56
+#, php-format
+msgid "Tags in %s's notices"
+msgstr ""
+
+#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+msgid "Subscriptions"
+msgstr "اشتراک‌ها"
+
+#: lib/profileaction.php:126
+msgid "All subscriptions"
+msgstr "تمام اشتراک‌ها"
+
+#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+msgid "Subscribers"
+msgstr "مشترک‌ها"
+
+#: lib/profileaction.php:157
+msgid "All subscribers"
+msgstr "تمام مشترک‌ها"
+
+#: lib/profileaction.php:178
+msgid "User ID"
+msgstr "شناسه کاربر"
+
+#: lib/profileaction.php:183
+msgid "Member since"
+msgstr "عضو شده از"
+
+#: lib/profileaction.php:245
+msgid "All groups"
+msgstr "تمام گروه‌ها"
+
+#: lib/profileformaction.php:123
+msgid "No return-to arguments."
+msgstr ""
+
+#: lib/profileformaction.php:137
+msgid "Unimplemented method."
+msgstr ""
+
+#: lib/publicgroupnav.php:78
+msgid "Public"
+msgstr "عمومی"
+
+#: lib/publicgroupnav.php:82
+msgid "User groups"
+msgstr "گروه‌های کاربر"
+
+#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
+msgid "Recent tags"
+msgstr "برچسب‌های اخیر"
+
+#: lib/publicgroupnav.php:88
+msgid "Featured"
+msgstr "خصوصیت"
+
+#: lib/publicgroupnav.php:92
+msgid "Popular"
+msgstr "محبوب"
+
+#: lib/repeatform.php:107 lib/repeatform.php:132
+msgid "Repeat this notice"
+msgstr ""
+
+#: lib/repeatform.php:132
+msgid "Repeat"
+msgstr "تکرار"
+
+#: lib/sandboxform.php:67
+msgid "Sandbox"
+msgstr ""
+
+#: lib/sandboxform.php:78
+msgid "Sandbox this user"
+msgstr ""
+
+#: lib/searchaction.php:120
+msgid "Search site"
+msgstr "جست‌وجوی وب‌گاه"
+
+#: lib/searchaction.php:126
+msgid "Keyword(s)"
+msgstr "کلمه(های) کلیدی"
+
+#: lib/searchaction.php:162
+msgid "Search help"
+msgstr "راهنمای جستجو"
+
+#: lib/searchgroupnav.php:80
+msgid "People"
+msgstr "شخص"
+
+#: lib/searchgroupnav.php:81
+msgid "Find people on this site"
+msgstr "پیدا کردن شخص در این سایت"
+
+#: lib/searchgroupnav.php:83
+msgid "Find content of notices"
+msgstr ""
+
+#: lib/searchgroupnav.php:85
+msgid "Find groups on this site"
+msgstr "پیداا کردن گروه ها در این سایت"
+
+#: lib/section.php:89
+msgid "Untitled section"
+msgstr ""
+
+#: lib/section.php:106
+msgid "More..."
+msgstr "بیش‌تر..."
+
+#: lib/silenceform.php:67
+msgid "Silence"
+msgstr "آرامش"
+
+#: lib/silenceform.php:78
+msgid "Silence this user"
+msgstr "آرامش این کاربر"
+
+#: lib/subgroupnav.php:83
+#, php-format
+msgid "People %s subscribes to"
+msgstr ""
+
+#: lib/subgroupnav.php:91
+#, php-format
+msgid "People subscribed to %s"
+msgstr ""
+
+#: lib/subgroupnav.php:99
+#, php-format
+msgid "Groups %s is a member of"
+msgstr ""
+
+#: lib/subs.php:52
+msgid "Already subscribed!"
+msgstr ""
+
+#: lib/subs.php:56
+msgid "User has blocked you."
+msgstr ""
+
+#: lib/subs.php:60
+msgid "Could not subscribe."
+msgstr ""
+
+#: lib/subs.php:79
+msgid "Could not subscribe other to you."
+msgstr ""
+
+#: lib/subs.php:128
+msgid "Not subscribed!"
+msgstr ""
+
+#: lib/subs.php:133
+msgid "Couldn't delete self-subscription."
+msgstr ""
+
+#: lib/subs.php:146
+msgid "Couldn't delete subscription."
+msgstr ""
+
+#: lib/subscriberspeopleselftagcloudsection.php:48
+#: lib/subscriptionspeopleselftagcloudsection.php:48
+msgid "People Tagcloud as self-tagged"
+msgstr ""
+
+#: lib/subscriberspeopletagcloudsection.php:48
+#: lib/subscriptionspeopletagcloudsection.php:48
+msgid "People Tagcloud as tagged"
+msgstr ""
+
+#: lib/subscriptionlist.php:126
+msgid "(none)"
+msgstr "(هیج)"
+
+#: lib/tagcloudsection.php:56
+msgid "None"
+msgstr "هیچ"
+
+#: lib/topposterssection.php:74
+msgid "Top posters"
+msgstr "اعلان های بالا"
+
+#: lib/unsandboxform.php:69
+msgid "Unsandbox"
+msgstr ""
+
+#: lib/unsandboxform.php:80
+msgid "Unsandbox this user"
+msgstr ""
+
+#: lib/unsilenceform.php:67
+msgid "Unsilence"
+msgstr ""
+
+#: lib/unsilenceform.php:78
+msgid "Unsilence this user"
+msgstr ""
+
+#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
+msgid "Unsubscribe from this user"
+msgstr ""
+
+#: lib/unsubscribeform.php:137
+msgid "Unsubscribe"
+msgstr ""
+
+#: lib/userprofile.php:116
+msgid "Edit Avatar"
+msgstr "ویرایش اواتور"
+
+#: lib/userprofile.php:236
+msgid "User actions"
+msgstr ""
+
+#: lib/userprofile.php:248
+msgid "Edit profile settings"
+msgstr "ویرایش تنظیمات پروفيل"
+
+#: lib/userprofile.php:249
+msgid "Edit"
+msgstr "ویرایش"
+
+#: lib/userprofile.php:272
+msgid "Send a direct message to this user"
+msgstr "پیام مستقیم به این کاربر بفرستید"
+
+#: lib/userprofile.php:273
+msgid "Message"
+msgstr "پیام"
+
+#: lib/userprofile.php:311
+msgid "Moderate"
+msgstr ""
+
+#: lib/util.php:837
+msgid "a few seconds ago"
+msgstr "چند ثانیه پیش"
+
+#: lib/util.php:839
+msgid "about a minute ago"
+msgstr "حدود یک دقیقه پیش"
+
+#: lib/util.php:841
+#, php-format
+msgid "about %d minutes ago"
+msgstr "حدود %d دقیقه پیش"
+
+#: lib/util.php:843
+msgid "about an hour ago"
+msgstr "حدود یک ساعت پیش"
+
+#: lib/util.php:845
+#, php-format
+msgid "about %d hours ago"
+msgstr "حدود %d ساعت پیش"
+
+#: lib/util.php:847
+msgid "about a day ago"
+msgstr "حدود یک روز پیش"
+
+#: lib/util.php:849
+#, php-format
+msgid "about %d days ago"
+msgstr "حدود %d روز پیش"
+
+#: lib/util.php:851
+msgid "about a month ago"
+msgstr "حدود یک ماه پیش"
+
+#: lib/util.php:853
+#, php-format
+msgid "about %d months ago"
+msgstr "حدود %d ماه پیش"
+
+#: lib/util.php:855
+msgid "about a year ago"
+msgstr "حدود یک سال پیش"
+
+#: lib/webcolor.php:82
+#, php-format
+msgid "%s is not a valid color!"
+msgstr "%s یک رنگ صحیح نیست!"
+
+#: lib/webcolor.php:123
+#, php-format
+msgid "%s is not a valid color! Use 3 or 6 hex chars."
+msgstr "%s یک رنگ صحیح نیست! از ۳ یا ۶ حرف مبنای شانزده استفاده کنید"
+
+#: scripts/maildaemon.php:48
+msgid "Could not parse message."
+msgstr "نمی‌توان پیام را تجزیه کرد."
+
+#: scripts/maildaemon.php:53
+msgid "Not a registered user."
+msgstr "یک کاربر ثبت نام شده نیستید"
+
+#: scripts/maildaemon.php:57
+msgid "Sorry, that is not your incoming email address."
+msgstr "با عرض پوزش، این پست الکترونیک شما نیست."
+
+#: scripts/maildaemon.php:61
+msgid "Sorry, no incoming email allowed."
+msgstr "با عرض پوزش، اجازه‌ی ورودی پست الکترونیک وجود ندارد"
diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po
index 33878f8eb..c16c8b948 100644
--- a/locale/fi/LC_MESSAGES/statusnet.po
+++ b/locale/fi/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:12+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:42+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n"
@@ -1273,8 +1273,8 @@ msgid "Featured users, page %d"
msgstr "Esittelyssä olevat käyttäjät, sivu %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "Valikoima joitakin loistavia palvelun %s käyttäjiä"
#: actions/file.php:34
@@ -5534,47 +5534,47 @@ msgstr "Viesti"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "muutama sekunti sitten"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "noin minuutti sitten"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "noin %d minuuttia sitten"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "noin tunti sitten"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "noin %d tuntia sitten"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "noin päivä sitten"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "noin %d päivää sitten"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "noin kuukausi sitten"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "noin %d kuukautta sitten"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "noin vuosi sitten"
diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po
index 8b0a52a20..b5d4f9f6e 100644
--- a/locale/fr/LC_MESSAGES/statusnet.po
+++ b/locale/fr/LC_MESSAGES/statusnet.po
@@ -13,12 +13,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:14+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:48+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n"
@@ -1280,8 +1280,8 @@ msgstr "Utilisateurs en vedette - page %d"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
-msgstr "Les utilisateurs à ne pas manquer dans %s"
+msgid "A selection of some great users on %s"
+msgstr "Une sélection d'utilisateurs à ne pas manquer dans %s"
#: actions/file.php:34
msgid "No notice ID."
@@ -5349,9 +5349,8 @@ msgid "Reply"
msgstr "Répondre"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Avis supprimé."
+msgstr "Avis repris"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5655,47 +5654,47 @@ msgstr "Message"
msgid "Moderate"
msgstr "Modérer"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "il y a quelques secondes"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "il y a 1 minute"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "il y a %d minutes"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "il y a 1 heure"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "il y a %d heures"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "il y a 1 jour"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "il y a %d jours"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "il y a 1 mois"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "il y a %d mois"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "il y a environ 1 an"
diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po
index 1b54c763f..ddcb2f251 100644
--- a/locale/ga/LC_MESSAGES/statusnet.po
+++ b/locale/ga/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:17+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:51+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ga\n"
"X-Message-Group: out-statusnet\n"
@@ -1301,7 +1301,7 @@ msgstr "Usuarios destacados"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5729,47 +5729,47 @@ msgstr "Nova mensaxe"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "fai uns segundos"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "fai un minuto"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "fai %d minutos"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "fai unha hora"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "fai %d horas"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "fai un día"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "fai %d días"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "fai un mes"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "fai %d meses"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "fai un ano"
diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po
index 38af1633c..e8bfd86e1 100644
--- a/locale/he/LC_MESSAGES/statusnet.po
+++ b/locale/he/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:20+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:54+0000\n"
"Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n"
@@ -1278,7 +1278,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5463,47 +5463,47 @@ msgstr "הודעה חדשה"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "לפני מספר שניות"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "לפני כדקה"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "לפני כ-%d דקות"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "לפני כשעה"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "לפני כ-%d שעות"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "לפני כיום"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "לפני כ-%d ימים"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "לפני כחודש"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "לפני כ-%d חודשים"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "לפני כשנה"
diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po
index a59b9bb92..9602eafd8 100644
--- a/locale/hsb/LC_MESSAGES/statusnet.po
+++ b/locale/hsb/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:23+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:57+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: hsb\n"
"X-Message-Group: out-statusnet\n"
@@ -1233,7 +1233,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -4915,9 +4915,8 @@ msgid "Reply"
msgstr "Wotmołwić"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Zdźělenka zničena."
+msgstr "Zdźělenka wospjetowana"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5221,47 +5220,47 @@ msgstr "Powěsć"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "před něšto sekundami"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "před něhdźe jednej mjeńšinu"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "před %d mjeńšinami"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "před něhdźe jednej hodźinu"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "před něhdźe %d hodźinami"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "před něhdźe jednym dnjom"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "před něhdźe %d dnjemi"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "před něhdźe jednym měsacom"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "před něhdźe %d měsacami"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "před něhdźe jednym lětom"
diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po
index d7a974c93..e0676ec03 100644
--- a/locale/ia/LC_MESSAGES/statusnet.po
+++ b/locale/ia/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:25+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:38:59+0000\n"
"Language-Team: Interlingua\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: out-statusnet\n"
@@ -1265,7 +1265,7 @@ msgstr "Usatores in evidentia, pagina %d"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr "Un selection de usatores eminente in %s"
#: actions/file.php:34
@@ -3227,120 +3227,123 @@ msgid ""
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. "
msgstr ""
+"**%s** ha un conto in %%%%site.name%%%%, un servicio de [micro-blogging]"
+"(http://en.wikipedia.org/wiki/Microblog) a base del software libere "
+"[StatusNet](http://status.net/). "
#: actions/showstream.php:313
#, php-format
msgid "Repeat of %s"
-msgstr ""
+msgstr "Repetition de %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
-msgstr ""
+msgstr "Tu non pote silentiar usatores in iste sito."
#: actions/silence.php:72
msgid "User is already silenced."
-msgstr ""
+msgstr "Usator es ja silentiate."
#: actions/siteadminpanel.php:69
msgid "Basic settings for this StatusNet site."
-msgstr ""
+msgstr "Configurationes de base pro iste sito de StatusNet."
#: actions/siteadminpanel.php:147
msgid "Site name must have non-zero length."
-msgstr ""
+msgstr "Le longitude del nomine del sito debe esser plus que zero."
#: actions/siteadminpanel.php:155
msgid "You must have a valid contact email address"
-msgstr ""
+msgstr "Tu debe haber un valide adresse de e-mail pro contacto."
#: actions/siteadminpanel.php:173
#, php-format
msgid "Unknown language \"%s\""
-msgstr ""
+msgstr "Lingua \"%s\" incognite"
#: actions/siteadminpanel.php:180
msgid "Invalid snapshot report URL."
-msgstr ""
+msgstr "Le URL pro reportar instantaneos es invalide."
#: actions/siteadminpanel.php:186
msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "Valor de execution de instantaneo invalide."
#: actions/siteadminpanel.php:192
msgid "Snapshot frequency must be a number."
-msgstr ""
+msgstr "Le frequentia de instantaneos debe esser un numero."
#: actions/siteadminpanel.php:199
msgid "You must set an SSL server when enabling SSL."
-msgstr ""
+msgstr "Tu debe specificar un servitor SSL pro poter activar SSL."
#: actions/siteadminpanel.php:204
msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
+msgstr "Servitor SSL invalide. Le longitude maxime es 255 characteres."
#: actions/siteadminpanel.php:210
msgid "Minimum text limit is 140 characters."
-msgstr ""
+msgstr "Le limite minime del texto es 140 characteres."
#: actions/siteadminpanel.php:216
msgid "Dupe limit must 1 or more seconds."
-msgstr ""
+msgstr "Le limite de duplicatos debe esser 1 o plus secundas."
#: actions/siteadminpanel.php:266
msgid "General"
-msgstr ""
+msgstr "General"
#: actions/siteadminpanel.php:269
msgid "Site name"
-msgstr ""
+msgstr "Nomine del sito"
#: actions/siteadminpanel.php:270
msgid "The name of your site, like \"Yourcompany Microblog\""
-msgstr ""
+msgstr "Le nomine de tu sito, como \"Le microblog de TuCompania\""
#: actions/siteadminpanel.php:274
msgid "Brought by"
-msgstr ""
+msgstr "Realisate per"
#: actions/siteadminpanel.php:275
msgid "Text used for credits link in footer of each page"
-msgstr ""
+msgstr "Le texto usate pro le ligamine al creditos in le pede de cata pagina"
#: actions/siteadminpanel.php:279
msgid "Brought by URL"
-msgstr ""
+msgstr "URL pro \"Realisate per\""
#: actions/siteadminpanel.php:280
msgid "URL used for credits link in footer of each page"
-msgstr ""
+msgstr "URL usate pro le ligamine al creditos in le pede de cata pagina"
#: actions/siteadminpanel.php:284
msgid "Contact email address for your site"
-msgstr ""
+msgstr "Le adresse de e-mail de contacto pro tu sito"
#: actions/siteadminpanel.php:290
msgid "Local"
-msgstr ""
+msgstr "Local"
#: actions/siteadminpanel.php:301
msgid "Default timezone"
-msgstr ""
+msgstr "Fuso horari predefinite"
#: actions/siteadminpanel.php:302
msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Fuso horari predefinite pro le sito; normalmente UTC."
#: actions/siteadminpanel.php:308
msgid "Default site language"
-msgstr ""
+msgstr "Lingua predefinite del sito"
#: actions/siteadminpanel.php:316
msgid "URLs"
-msgstr ""
+msgstr "URLs"
#: actions/siteadminpanel.php:319
msgid "Server"
-msgstr ""
+msgstr "Servitor"
#: actions/siteadminpanel.php:319
msgid "Site's server hostname."
@@ -5406,47 +5409,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr ""
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr ""
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr ""
diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po
index e8339826d..a00a1406a 100644
--- a/locale/is/LC_MESSAGES/statusnet.po
+++ b/locale/is/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:28+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:02+0000\n"
"Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: is\n"
"X-Message-Group: out-statusnet\n"
@@ -1264,8 +1264,8 @@ msgid "Featured users, page %d"
msgstr "Notendur í sviðsljósinu, síða %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "Úrval nokkurra frábærra notenda á %s"
#: actions/file.php:34
@@ -5475,47 +5475,47 @@ msgstr "Skilaboð"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "fyrir nokkrum sekúndum"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "fyrir um einni mínútu síðan"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "fyrir um %d mínútum síðan"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "fyrir um einum klukkutíma síðan"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "fyrir um %d klukkutímum síðan"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "fyrir um einum degi síðan"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "fyrir um %d dögum síðan"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "fyrir um einum mánuði síðan"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "fyrir um %d mánuðum síðan"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "fyrir um einu ári síðan"
diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po
index c9dc4aa8c..396c9946c 100644
--- a/locale/it/LC_MESSAGES/statusnet.po
+++ b/locale/it/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:31+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:07+0000\n"
"Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n"
"X-Message-Group: out-statusnet\n"
@@ -1272,8 +1272,8 @@ msgstr "Utenti in evidenza, pagina %d"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
-msgstr "Una selezione dei migliori utenti su %s"
+msgid "A selection of some great users on %s"
+msgstr "Una selezione di alcuni dei migliori utenti su %s"
#: actions/file.php:34
msgid "No notice ID."
@@ -5295,9 +5295,8 @@ msgid "Reply"
msgstr "Rispondi"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Messaggio eliminato."
+msgstr "Messaggio ripetuto"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5601,47 +5600,47 @@ msgstr "Messaggio"
msgid "Moderate"
msgstr "Modera"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "pochi secondi fa"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "circa un minuto fa"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "circa %d minuti fa"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "circa un'ora fa"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "circa %d ore fa"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "circa un giorno fa"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "circa %d giorni fa"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "circa un mese fa"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "circa %d mesi fa"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "circa un anno fa"
diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po
index bfa752cba..fae2b8358 100644
--- a/locale/ja/LC_MESSAGES/statusnet.po
+++ b/locale/ja/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:34+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:10+0000\n"
"Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ja\n"
"X-Message-Group: out-statusnet\n"
@@ -1283,7 +1283,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5476,47 +5476,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "数秒前"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "約 1 分前"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "約 %d 分前"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "約 1 時間前"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "約 %d 時間前"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "約 1 日前"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "約 %d 日前"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "約 1 ヵ月前"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "約 %d ヵ月前"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "約 1 年前"
diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po
index 063254d33..80ee03a66 100644
--- a/locale/ko/LC_MESSAGES/statusnet.po
+++ b/locale/ko/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:37+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:12+0000\n"
"Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n"
@@ -1281,8 +1281,8 @@ msgid "Featured users, page %d"
msgstr "인기있는 회원, %d페이지"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "%s의 훌륭한 회원의 일부 선택"
#: actions/file.php:34
@@ -5507,47 +5507,47 @@ msgstr "메시지"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "몇 초 전"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "1분 전"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "%d분 전"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "1시간 전"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "%d시간 전"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "하루 전"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "%d일 전"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "1달 전"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "%d달 전"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "1년 전"
diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po
index 88076b3ab..633fa57b4 100644
--- a/locale/mk/LC_MESSAGES/statusnet.po
+++ b/locale/mk/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:40+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:15+0000\n"
"Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: out-statusnet\n"
@@ -1268,7 +1268,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5456,47 +5456,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "пред неколку секунди"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "пред една минута"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "пред %d минути"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "пред еден час"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "пред %d часа"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "пред еден ден"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "пред %d денови"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "пред еден месец"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "пред %d месеци"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "пред една година"
diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po
index e9ea9c4bb..ec19cfaf9 100644
--- a/locale/nb/LC_MESSAGES/statusnet.po
+++ b/locale/nb/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Norwegian (bokmål)‬
#
+# Author@translatewiki.net: Nghtwlkr
# --
# This file is distributed under the same license as the StatusNet package.
#
@@ -7,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:42+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:18+0000\n"
"Language-Team: Norwegian (bokmål)‬\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n"
@@ -20,9 +21,8 @@ msgstr ""
#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
#: actions/showfavorites.php:137 actions/tag.php:51
-#, fuzzy
msgid "No such page"
-msgstr "Klarte ikke å lagre profil."
+msgstr "Ingen slik side"
#: actions/all.php:74 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
@@ -48,12 +48,12 @@ msgstr "Klarte ikke å lagre profil."
#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
#: lib/subs.php:34 lib/subs.php:116
msgid "No such user."
-msgstr ""
+msgstr "Ingen slik bruker"
#: actions/all.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%s and friends, page %d"
-msgstr "%s og venner"
+msgstr "%s og venner, side %d"
#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
#: actions/apitimelinefriends.php:115 actions/apitimelinehome.php:115
@@ -63,25 +63,25 @@ msgid "%s and friends"
msgstr "%s og venner"
#: actions/all.php:99
-#, fuzzy, php-format
+#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
-msgstr "Feed for %s sine venner"
+msgstr "Mating for venner av %s (RSS 1.0)"
#: actions/all.php:107
-#, fuzzy, php-format
+#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
-msgstr "Feed for %s sine venner"
+msgstr "Mating for venner av %s (RSS 2.0)"
#: actions/all.php:115
-#, fuzzy, php-format
+#, php-format
msgid "Feed for friends of %s (Atom)"
-msgstr "Feed for %s sine venner"
+msgstr "Mating for venner av %s (Atom)"
#: actions/all.php:127
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
-msgstr ""
+msgstr "Dette er tidslinjen for %s og venner, men ingen har postet noe enda."
#: actions/all.php:132
#, php-format
@@ -89,6 +89,8 @@ msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
+"Prøv å abbonere på flere personer, [bli med i en gruppe](%%action.groups%%) "
+"eller post noe selv."
#: actions/all.php:134
#, php-format
@@ -96,6 +98,9 @@ msgid ""
"You can try to [nudge %s](../%s) from his profile or [post something to his "
"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
msgstr ""
+"Du kan prøve å [knuffe %s](../%s) fra dennes profil eller [post noe for å få "
+"hans eller hennes oppmerksomhet](%%%%action.newnotice%%%%?status_textarea=%"
+"s)."
#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
#, php-format
@@ -103,17 +108,18 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
+"Hvorfor ikke [opprette en konto](%%%%action.register%%%%) og så knuff %s "
+"eller post en notis for å få hans eller hennes oppmerksomhet."
#: actions/all.php:165
-#, fuzzy
msgid "You and friends"
-msgstr "%s og venner"
+msgstr "Du og venner"
#: actions/allrss.php:119 actions/apitimelinefriends.php:122
#: actions/apitimelinehome.php:122
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
-msgstr ""
+msgstr "Oppdateringer fra %1$s og venner på %2$s!"
#: actions/apiaccountratelimitstatus.php:70
#: actions/apiaccountupdatedeliverydevice.php:93
@@ -136,13 +142,13 @@ msgstr "API-metode ikke funnet!"
#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
#: actions/apistatusesupdate.php:114
msgid "This method requires a POST."
-msgstr ""
+msgstr "Denne metoden krever en POST."
#: actions/apiaccountupdatedeliverydevice.php:105
msgid ""
"You must specify a parameter named 'device' with a value of one of: sms, im, "
"none"
-msgstr ""
+msgstr "Du må angi en verdi for parameteren 'device' med en av: sms, im, none"
#: actions/apiaccountupdatedeliverydevice.php:132
#, fuzzy
@@ -156,7 +162,7 @@ msgstr "Klarte ikke å oppdatere bruker."
#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
msgid "User has no profile."
-msgstr ""
+msgstr "Brukeren har ingen profil."
#: actions/apiaccountupdateprofile.php:147
#, fuzzy
@@ -173,13 +179,15 @@ msgid ""
"The server was unable to handle that much POST data (%s bytes) due to its "
"current configuration."
msgstr ""
+"Tjeneren kunne ikke håndtere så mye POST-data (%s bytes) på grunn av sitt "
+"nåværende oppsett."
#: actions/apiaccountupdateprofilebackgroundimage.php:136
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
msgid "Unable to save your design settings."
-msgstr ""
+msgstr "Kunne ikke lagre dine innstillinger for utseende."
#: actions/apiaccountupdateprofilebackgroundimage.php:187
#: actions/apiaccountupdateprofilecolors.php:142
@@ -188,37 +196,36 @@ msgid "Could not update your design."
msgstr "Klarte ikke å oppdatere bruker."
#: actions/apiblockcreate.php:105
-#, fuzzy
msgid "You cannot block yourself!"
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Du kan ikke blokkere deg selv!"
#: actions/apiblockcreate.php:119
msgid "Block user failed."
-msgstr ""
+msgstr "Blokkering av bruker mislyktes."
#: actions/apiblockdestroy.php:107
msgid "Unblock user failed."
-msgstr ""
+msgstr "Oppheving av blokkering av bruker mislyktes."
#: actions/apidirectmessage.php:89
#, php-format
msgid "Direct messages from %s"
-msgstr ""
+msgstr "Direktemeldinger fra %s"
#: actions/apidirectmessage.php:93
#, php-format
msgid "All the direct messages sent from %s"
-msgstr ""
+msgstr "Alle direktemeldinger sendt fra %s"
#: actions/apidirectmessage.php:101
#, php-format
msgid "Direct messages to %s"
-msgstr ""
+msgstr "Direktemeldinger til %s"
#: actions/apidirectmessage.php:105
#, php-format
msgid "All the direct messages sent to %s"
-msgstr ""
+msgstr "Alle direktemeldinger sendt til %s"
#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
@@ -242,64 +249,62 @@ msgstr "API-metode ikke funnet!"
#: actions/apidirectmessagenew.php:126
msgid "No message text!"
-msgstr ""
+msgstr "Ingen meldingstekst!"
#: actions/apidirectmessagenew.php:135 actions/newmessage.php:150
#, php-format
msgid "That's too long. Max message size is %d chars."
-msgstr ""
+msgstr "Dette er for langt. Meldingen kan bare være %d tegn lang."
#: actions/apidirectmessagenew.php:146
msgid "Recipient user not found."
-msgstr ""
+msgstr "Fant ikke mottakeren."
#: actions/apidirectmessagenew.php:150
msgid "Can't send direct messages to users who aren't your friend."
-msgstr ""
+msgstr "Kan ikke sende direktemeldinger til brukere du ikke er venn med."
#: actions/apifavoritecreate.php:108 actions/apifavoritedestroy.php:109
#: actions/apistatusesdestroy.php:113
msgid "No status found with that ID."
-msgstr ""
+msgstr "Fant ingen status med den ID-en."
#: actions/apifavoritecreate.php:119
-#, fuzzy
msgid "This status is already a favorite!"
-msgstr "Det er allerede din e-postadresse."
+msgstr "Denne statusen er allerede en favoritt!"
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
-msgstr ""
+msgstr "Kunne ikke opprette favoritt."
#: actions/apifavoritedestroy.php:122
msgid "That status is not a favorite!"
-msgstr ""
+msgstr "Den statusen er ikke en favoritt!"
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
-msgstr ""
+msgstr "Kunne ikke slette favoritt."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
-msgstr ""
+msgstr "Kunne ikke følge brukeren: Fant ikke brukeren."
#: actions/apifriendshipscreate.php:118
#, php-format
msgid "Could not follow user: %s is already on your list."
-msgstr ""
+msgstr "Kunne ikke følge brukeren: %s er allerede i listen din."
#: actions/apifriendshipsdestroy.php:109
-#, fuzzy
msgid "Could not unfollow user: User not found."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke slutte å følge brukeren: Fant ikke brukeren."
#: actions/apifriendshipsdestroy.php:120
msgid "You cannot unfollow yourself!"
-msgstr ""
+msgstr "Du kan ikke slutte å følge deg selv!"
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
-msgstr ""
+msgstr "To bruker ID-er eller kallenavn må oppgis."
#: actions/apifriendshipsshow.php:135
#, fuzzy
@@ -315,7 +320,7 @@ msgstr "Klarte ikke å oppdatere bruker."
#: actions/newgroup.php:126 actions/profilesettings.php:208
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
+msgstr "Kallenavn kan kun ha små bokstaver og tall og ingen mellomrom."
#: actions/apigroupcreate.php:173 actions/editgroup.php:186
#: actions/newgroup.php:130 actions/profilesettings.php:231
@@ -333,7 +338,7 @@ msgstr "Ugyldig nick."
#: actions/newgroup.php:139 actions/profilesettings.php:215
#: actions/register.php:217
msgid "Homepage is not a valid URL."
-msgstr ""
+msgstr "Hjemmesiden er ikke en gyldig URL."
#: actions/apigroupcreate.php:205 actions/editgroup.php:198
#: actions/newgroup.php:142 actions/profilesettings.php:218
@@ -342,9 +347,9 @@ msgid "Full name is too long (max 255 chars)."
msgstr "Beklager, navnet er for langt (max 250 tegn)."
#: actions/apigroupcreate.php:213
-#, fuzzy, php-format
+#, php-format
msgid "Description is too long (max %d chars)."
-msgstr "Bioen er for lang (max 140 tegn)"
+msgstr "Beskrivelsen er for lang (maks %d tegn)."
#: actions/apigroupcreate.php:224 actions/editgroup.php:204
#: actions/newgroup.php:148 actions/profilesettings.php:225
@@ -383,9 +388,8 @@ msgid "Group not found!"
msgstr "API-metode ikke funnet!"
#: actions/apigroupjoin.php:110
-#, fuzzy
msgid "You are already a member of that group."
-msgstr "Du er allerede logget inn!"
+msgstr "Du er allerede medlem av den gruppen."
#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
msgid "You have been blocked from that group by the admin."
@@ -409,7 +413,7 @@ msgstr "Klarte ikke å oppdatere bruker."
#: actions/apigrouplist.php:95
#, php-format
msgid "%s's groups"
-msgstr ""
+msgstr "%s sine grupper"
#: actions/apigrouplist.php:103
#, php-format
@@ -920,11 +924,11 @@ msgstr ""
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
-msgstr ""
+msgstr "På"
#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
-msgstr ""
+msgstr "Av"
#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
@@ -935,9 +939,8 @@ msgid "Tile background image"
msgstr ""
#: actions/designadminpanel.php:488 lib/designsettings.php:170
-#, fuzzy
msgid "Change colours"
-msgstr "Endre passordet ditt"
+msgstr "Endre farger"
#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
@@ -954,9 +957,8 @@ msgid "Text"
msgstr "Tekst"
#: actions/designadminpanel.php:549 lib/designsettings.php:230
-#, fuzzy
msgid "Links"
-msgstr "Logg inn"
+msgstr "Lenker"
#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
@@ -1272,7 +1274,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -1400,7 +1402,7 @@ msgstr ""
#: actions/groupbyid.php:74
msgid "No ID"
-msgstr ""
+msgstr "Ingen ID"
#: actions/groupdesignsettings.php:68
msgid "You must be logged in to edit a group."
@@ -1467,37 +1469,37 @@ msgstr ""
#: actions/groupmembers.php:111
msgid "A list of the users in this group."
-msgstr ""
+msgstr "En liste over brukerne i denne gruppen."
#: actions/groupmembers.php:175 lib/action.php:440 lib/groupnav.php:107
msgid "Admin"
-msgstr ""
+msgstr "Administrator"
#: actions/groupmembers.php:346 lib/blockform.php:69
msgid "Block"
-msgstr ""
+msgstr "Blokkér"
#: actions/groupmembers.php:441
msgid "Make user an admin of the group"
-msgstr ""
+msgstr "Gjør brukeren til en administrator for gruppen"
#: actions/groupmembers.php:473
msgid "Make Admin"
-msgstr ""
+msgstr "Gjør til administrator"
#: actions/groupmembers.php:473
msgid "Make this user an admin"
-msgstr ""
+msgstr "Gjør denne brukeren til administrator"
#: actions/grouprss.php:133
#, php-format
msgid "Updates from members of %1$s on %2$s!"
-msgstr ""
+msgstr "Oppdateringer fra medlemmer av %1$s på %2$s!"
#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
-msgstr ""
+msgstr "Grupper"
#: actions/groups.php:64
#, php-format
@@ -5405,47 +5407,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "noen få sekunder siden"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "omtrent ett minutt siden"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "omtrent %d minutter siden"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "omtrent én time siden"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "omtrent %d timer siden"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "omtrent én dag siden"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "omtrent %d dager siden"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "omtrent én måned siden"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "omtrent %d måneder siden"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "omtrent ett år siden"
diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po
index db938c948..1f4959bc8 100644
--- a/locale/nl/LC_MESSAGES/statusnet.po
+++ b/locale/nl/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:48+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:24+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: out-statusnet\n"
@@ -1282,8 +1282,8 @@ msgstr "Nieuwe gebruikers, pagina %d"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
-msgstr "Een selectie van de actieve gebruikers op %s"
+msgid "A selection of some great users on %s"
+msgstr "Een selectie van gewaardeerde gebruikers op %s"
#: actions/file.php:34
msgid "No notice ID."
@@ -5352,9 +5352,8 @@ msgid "Reply"
msgstr "Antwoorden"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Deze mededeling is verwijderd."
+msgstr "Mededeling herhaald"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5659,47 +5658,47 @@ msgstr "Bericht"
msgid "Moderate"
msgstr "Modereren"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "een paar seconden geleden"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "ongeveer een minuut geleden"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "ongeveer %d minuten geleden"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "ongeveer een uur geleden"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "ongeveer %d uur geleden"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "ongeveer een dag geleden"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "ongeveer %d dagen geleden"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "ongeveer een maand geleden"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "ongeveer %d maanden geleden"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "ongeveer een jaar geleden"
diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po
index c60264b96..95308af71 100644
--- a/locale/nn/LC_MESSAGES/statusnet.po
+++ b/locale/nn/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:45+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:21+0000\n"
"Language-Team: Norwegian Nynorsk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n"
@@ -1281,8 +1281,8 @@ msgid "Featured users, page %d"
msgstr "Profilerte folk, side %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "Eit utval av nokre av dei flotte folka på %s"
#: actions/file.php:34
@@ -5534,47 +5534,47 @@ msgstr "Melding"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "eit par sekund sidan"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "omtrent eitt minutt sidan"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "~%d minutt sidan"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "omtrent ein time sidan"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "~%d timar sidan"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "omtrent ein dag sidan"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "~%d dagar sidan"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "omtrent ein månad sidan"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "~%d månadar sidan"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "omtrent eitt år sidan"
diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po
index b40808718..fc9776bfe 100644
--- a/locale/pl/LC_MESSAGES/statusnet.po
+++ b/locale/pl/LC_MESSAGES/statusnet.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:51+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:27+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pl\n"
"X-Message-Group: out-statusnet\n"
@@ -447,14 +447,12 @@ msgid "No such notice."
msgstr "Nie ma takiego wpisu."
#: actions/apistatusesretweet.php:83
-#, fuzzy
msgid "Cannot repeat your own notice."
-msgstr "Nie można włączyć powiadomień."
+msgstr "Nie można powtórzyć własnego wpisu."
#: actions/apistatusesretweet.php:91
-#, fuzzy
msgid "Already repeated that notice."
-msgstr "Usuń ten wpis"
+msgstr "Już powtórzono ten wpis."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
@@ -528,17 +526,17 @@ msgstr "Użytkownik %s aktualizuje od każdego."
#: actions/apitimelineretweetedbyme.php:112
#, php-format
msgid "Repeated by %s"
-msgstr ""
+msgstr "Powtórzone przez użytkownika %s"
#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
msgid "Repeated to %s"
-msgstr "Odpowiedzi na %s"
+msgstr "Powtórzone dla %s"
#: actions/apitimelineretweetsofme.php:112
-#, fuzzy, php-format
+#, php-format
msgid "Repeats of %s"
-msgstr "Odpowiedzi na %s"
+msgstr "Powtórzenia %s"
#: actions/apitimelinetag.php:102 actions/tag.php:66
#, php-format
@@ -1269,29 +1267,25 @@ msgid "Featured users, page %d"
msgstr "Znani użytkownicy, strona %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "Wybór znanych użytkowników na %s"
#: actions/file.php:34
-#, fuzzy
msgid "No notice ID."
-msgstr "Brak wpisu"
+msgstr "Brak identyfikatora wpisu."
#: actions/file.php:38
-#, fuzzy
msgid "No notice."
-msgstr "Brak wpisu"
+msgstr "Brak wpisu."
#: actions/file.php:42
-#, fuzzy
msgid "No attachments."
-msgstr "Brak załączników"
+msgstr "Brak załączników."
#: actions/file.php:51
-#, fuzzy
msgid "No uploaded attachments."
-msgstr "Nie wysłano załączników"
+msgstr "Nie wysłano załączników."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -2875,35 +2869,28 @@ msgid "Couldn’t get a request token."
msgstr "Nie można uzyskać tokenu żądana."
#: actions/repeat.php:57
-#, fuzzy
msgid "Only logged-in users can repeat notices."
-msgstr "Tylko użytkownik może czytać swoje skrzynki pocztowe."
+msgstr "Tylko zalogowani użytkownicy mogą powtarzać wpisy."
#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
msgid "No notice specified."
-msgstr "Nie podano profilu."
+msgstr "Nie podano wpisu."
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr ""
-"Nie można się zarejestrować, jeśli nie zgadzasz się z warunkami licencji."
+msgstr "Nie można powtórzyć własnego wpisu."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "Użytkownik jest już zablokowany."
+msgstr "Już powtórzono ten wpis."
#: actions/repeat.php:114 lib/noticelist.php:621
-#, fuzzy
msgid "Repeated"
-msgstr "Utworzono"
+msgstr "Powtórzono"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Utworzono"
+msgstr "Powtórzono."
#: actions/replies.php:125 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
@@ -3241,9 +3228,9 @@ msgstr ""
"(http://status.net/). "
#: actions/showstream.php:313
-#, fuzzy, php-format
+#, php-format
msgid "Repeat of %s"
-msgstr "Odpowiedzi na %s"
+msgstr "Powtórzenia %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
@@ -3715,7 +3702,6 @@ msgid "Notice feed for tag %s (Atom)"
msgstr "Kanał wpisów dla znacznika %s (Atom)"
#: actions/tagother.php:39
-#, fuzzy
msgid "No ID argument."
msgstr "Brak parametru identyfikatora."
@@ -3987,9 +3973,8 @@ msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Błędny typ obrazu dla adresu URL awatara \"%s\"."
#: actions/userbyid.php:70
-#, fuzzy
msgid "No ID."
-msgstr "Brak identyfikatora"
+msgstr "Brak identyfikatora."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
msgid "Profile design"
@@ -4101,9 +4086,9 @@ msgid "DB error inserting reply: %s"
msgstr "Błąd bazy danych podczas wprowadzania odpowiedzi: %s"
#: classes/Notice.php:1371
-#, fuzzy, php-format
+#, php-format
msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
#: classes/User.php:368
#, php-format
@@ -4466,24 +4451,21 @@ msgid "Error sending direct message."
msgstr "Błąd podczas wysyłania bezpośredniej wiadomości."
#: lib/command.php:422
-#, fuzzy
msgid "Cannot repeat your own notice"
-msgstr "Nie można włączyć powiadomień."
+msgstr "Nie można powtórzyć własnego wpisu"
#: lib/command.php:427
-#, fuzzy
msgid "Already repeated that notice"
-msgstr "Usuń ten wpis"
+msgstr "Już powtórzono ten wpis"
#: lib/command.php:435
-#, fuzzy, php-format
+#, php-format
msgid "Notice from %s repeated"
-msgstr "Wysłano wpis"
+msgstr "Powtórzono wpis od użytkownika %s"
#: lib/command.php:437
-#, fuzzy
msgid "Error repeating notice."
-msgstr "Błąd podczas zapisywania wpisu."
+msgstr "Błąd podczas powtarzania wpisu."
#: lib/command.php:491
#, php-format
@@ -5294,9 +5276,8 @@ msgid "in context"
msgstr "w rozmowie"
#: lib/noticelist.php:548
-#, fuzzy
msgid "Repeated by"
-msgstr "Utworzono"
+msgstr "Powtórzone przez"
#: lib/noticelist.php:577
msgid "Reply to this notice"
@@ -5307,9 +5288,8 @@ msgid "Reply"
msgstr "Odpowiedz"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Usunięto wpis."
+msgstr "Powtórzono wpis"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5409,14 +5389,12 @@ msgid "All groups"
msgstr "Wszystkie grupy"
#: lib/profileformaction.php:123
-#, fuzzy
msgid "No return-to arguments."
-msgstr "Brak parametrów powrotu"
+msgstr "Brak parametrów powrotu."
#: lib/profileformaction.php:137
-#, fuzzy
msgid "Unimplemented method."
-msgstr "niezaimplementowana metoda"
+msgstr "Niezaimplementowana metoda."
#: lib/publicgroupnav.php:78
msgid "Public"
@@ -5439,14 +5417,12 @@ msgid "Popular"
msgstr "Popularne"
#: lib/repeatform.php:107 lib/repeatform.php:132
-#, fuzzy
msgid "Repeat this notice"
-msgstr "Odpowiedz na ten wpis"
+msgstr "Powtórz ten wpis"
#: lib/repeatform.php:132
-#, fuzzy
msgid "Repeat"
-msgstr "Przywróć"
+msgstr "Powtórz"
#: lib/sandboxform.php:67
msgid "Sandbox"
@@ -5617,47 +5593,47 @@ msgstr "Wiadomość"
msgid "Moderate"
msgstr "Moderuj"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "kilka sekund temu"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "około minutę temu"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "około %d minut temu"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "około godzinę temu"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "około %d godzin temu"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "blisko dzień temu"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "około %d dni temu"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "około miesiąc temu"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "około %d miesięcy temu"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "około rok temu"
diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po
index 155ad52e2..af01cba69 100644
--- a/locale/pt/LC_MESSAGES/statusnet.po
+++ b/locale/pt/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:54+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:30+0000\n"
"Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: out-statusnet\n"
@@ -1267,8 +1267,8 @@ msgid "Featured users, page %d"
msgstr "utilizadores em destaque, página %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "Uma selecção dos participantes excelentes no %s"
#: actions/file.php:34
@@ -5294,9 +5294,8 @@ msgid "Reply"
msgstr "Responder"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Avatar actualizado."
+msgstr "Nota repetida"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5600,47 +5599,47 @@ msgstr "Mensagem"
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "há alguns segundos"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "há cerca de um minuto"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "há cerca de %d minutos"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "há cerca de uma hora"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "há cerca de %d horas"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "há cerca de um dia"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "há cerca de %d dias"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "há cerca de um mês"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "há cerca de %d meses"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "há cerca de um ano"
diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po
index 3225b56bb..c7fcadaf1 100644
--- a/locale/pt_BR/LC_MESSAGES/statusnet.po
+++ b/locale/pt_BR/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:52:57+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:33+0000\n"
"Language-Team: Brazilian Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: out-statusnet\n"
@@ -1283,7 +1283,7 @@ msgstr "Usuários de destaque, pág. %d"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5589,47 +5589,47 @@ msgstr "Nova mensagem"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "segundos atrás"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "1 min atrás"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "%d mins atrás"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "1 hora atrás"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "%d horas atrás"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "1 dia atrás"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "%d dias atrás"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "1 mês atrás"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "%d meses atrás"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "1 ano atrás"
diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po
index 6f92e3832..beefed91b 100644
--- a/locale/ru/LC_MESSAGES/statusnet.po
+++ b/locale/ru/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:53:00+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:35+0000\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: out-statusnet\n"
@@ -446,14 +446,12 @@ msgid "No such notice."
msgstr "Нет такой записи."
#: actions/apistatusesretweet.php:83
-#, fuzzy
msgid "Cannot repeat your own notice."
-msgstr "Есть оповещение."
+msgstr "Невозможно повторить собственную запись."
#: actions/apistatusesretweet.php:91
-#, fuzzy
msgid "Already repeated that notice."
-msgstr "Удалить эту запись"
+msgstr "Запись уже повторена."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
@@ -527,17 +525,17 @@ msgstr "Обновления %s от всех!"
#: actions/apitimelineretweetedbyme.php:112
#, php-format
msgid "Repeated by %s"
-msgstr ""
+msgstr "Повторено %s"
#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
msgid "Repeated to %s"
-msgstr "Ответы для %s"
+msgstr "Повторено для %s"
#: actions/apitimelineretweetsofme.php:112
-#, fuzzy, php-format
+#, php-format
msgid "Repeats of %s"
-msgstr "Ответы для %s"
+msgstr "Повторы %s"
#: actions/apitimelinetag.php:102 actions/tag.php:66
#, php-format
@@ -1281,28 +1279,24 @@ msgstr "Особые пользователи, страница %d"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
-msgstr "Список наиболее активных, знаменитых и уважаемых пользователей на %s"
+msgid "A selection of some great users on %s"
+msgstr "Некоторые из известных пользователей на %s"
#: actions/file.php:34
-#, fuzzy
msgid "No notice ID."
-msgstr "Запись отсутствует"
+msgstr "Нет ID записи."
#: actions/file.php:38
-#, fuzzy
msgid "No notice."
-msgstr "Запись отсутствует"
+msgstr "Запись отсутствует."
#: actions/file.php:42
-#, fuzzy
msgid "No attachments."
-msgstr "Нет вложений"
+msgstr "Нет вложений."
#: actions/file.php:51
-#, fuzzy
msgid "No uploaded attachments."
-msgstr "Нет загруженных вложений"
+msgstr "Нет загруженных вложений."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -2888,36 +2882,28 @@ msgid "Couldn’t get a request token."
msgstr "Не удаётся получить получить ключ запроса."
#: actions/repeat.php:57
-#, fuzzy
msgid "Only logged-in users can repeat notices."
-msgstr "Только сам пользователь может читать собственный почтовый ящик."
+msgstr "Повторять записи могут только вошедшие пользователи."
#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
msgid "No notice specified."
-msgstr "Профиль не определен."
+msgstr "Не указана запись."
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr ""
-"Вы не можете зарегистрироваться, если Вы не подтверждаете лицензионного "
-"соглашения."
+msgstr "Вы не можете повторить собственную запись."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "Вы уже заблокировали этого пользователя."
+msgstr "Вы уже повторили эту запись."
#: actions/repeat.php:114 lib/noticelist.php:621
-#, fuzzy
msgid "Repeated"
-msgstr "Создано"
+msgstr "Повторено"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Создано"
+msgstr "Повторено!"
#: actions/replies.php:125 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
@@ -3256,9 +3242,9 @@ msgstr ""
"net/)."
#: actions/showstream.php:313
-#, fuzzy, php-format
+#, php-format
msgid "Repeat of %s"
-msgstr "Ответы для %s"
+msgstr "Повтор %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
@@ -3732,9 +3718,8 @@ msgid "Notice feed for tag %s (Atom)"
msgstr "Лента записей для тега %s (Atom)"
#: actions/tagother.php:39
-#, fuzzy
msgid "No ID argument."
-msgstr "Нет ID аргумента."
+msgstr "Нет аргумента ID."
#: actions/tagother.php:65
#, php-format
@@ -4004,9 +3989,8 @@ msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Неверный тип изображения для URL аватары «%s»."
#: actions/userbyid.php:70
-#, fuzzy
msgid "No ID."
-msgstr "Нет ID"
+msgstr "Нет ID."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
msgid "Profile design"
@@ -4117,9 +4101,9 @@ msgid "DB error inserting reply: %s"
msgstr "Ошибка баз данных при вставке ответа для %s"
#: classes/Notice.php:1371
-#, fuzzy, php-format
+#, php-format
msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
#: classes/User.php:368
#, php-format
@@ -4483,24 +4467,21 @@ msgid "Error sending direct message."
msgstr "Ошибка при отправке прямого сообщения."
#: lib/command.php:422
-#, fuzzy
msgid "Cannot repeat your own notice"
-msgstr "Есть оповещение."
+msgstr "Невозможно повторить собственную запись."
#: lib/command.php:427
-#, fuzzy
msgid "Already repeated that notice"
-msgstr "Удалить эту запись"
+msgstr "Эта запись уже повторена"
#: lib/command.php:435
-#, fuzzy, php-format
+#, php-format
msgid "Notice from %s repeated"
-msgstr "Запись опубликована"
+msgstr "Запись %s повторена"
#: lib/command.php:437
-#, fuzzy
msgid "Error repeating notice."
-msgstr "Проблемы с сохранением записи."
+msgstr "Ошибка при повторении записи."
#: lib/command.php:491
#, php-format
@@ -4602,7 +4583,6 @@ msgstr[1] "Вы являетесь участником следующих гр
msgstr[2] "Вы являетесь участником следующих групп:"
#: lib/command.php:745
-#, fuzzy
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4656,6 +4636,8 @@ msgstr ""
"whois <nickname> — получить информацию из профиля пользователя\n"
"fav <nickname> — добавить последнюю запись пользователя в число любимых\n"
"fav #<notice_id> — добавить запись с заданным id в число любимых\n"
+"repeat #<notice_id> — повторить уведомление с заданным id\n"
+"repeat <nickname> — повторить последнее уведомление от пользователя\n"
"reply #<notice_id> — ответить на запись с заданным id\n"
"reply <nickname> — ответить на последнюю запись пользователя\n"
"join <group> — присоединиться к группе\n"
@@ -5309,9 +5291,8 @@ msgid "in context"
msgstr "в контексте"
#: lib/noticelist.php:548
-#, fuzzy
msgid "Repeated by"
-msgstr "Создано"
+msgstr "Повторено"
#: lib/noticelist.php:577
msgid "Reply to this notice"
@@ -5322,9 +5303,8 @@ msgid "Reply"
msgstr "Ответить"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Запись удалена."
+msgstr "Запись повторена"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5424,14 +5404,12 @@ msgid "All groups"
msgstr "Все группы"
#: lib/profileformaction.php:123
-#, fuzzy
msgid "No return-to arguments."
-msgstr "Нет аргумента return-to"
+msgstr "Нет аргумента return-to."
#: lib/profileformaction.php:137
-#, fuzzy
msgid "Unimplemented method."
-msgstr "нереализованный метод"
+msgstr "Нереализованный метод."
#: lib/publicgroupnav.php:78
msgid "Public"
@@ -5454,14 +5432,12 @@ msgid "Popular"
msgstr "Популярное"
#: lib/repeatform.php:107 lib/repeatform.php:132
-#, fuzzy
msgid "Repeat this notice"
-msgstr "Ответить на эту запись"
+msgstr "Повторить эту запись"
#: lib/repeatform.php:132
-#, fuzzy
msgid "Repeat"
-msgstr "Сбросить"
+msgstr "Повторить"
#: lib/sandboxform.php:67
msgid "Sandbox"
@@ -5632,47 +5608,47 @@ msgstr "Сообщение"
msgid "Moderate"
msgstr "Модерировать"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "пару секунд назад"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "около минуты назад"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "около %d минут(ы) назад"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "около часа назад"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "около %d часа(ов) назад"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "около дня назад"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "около %d дня(ей) назад"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "около месяца назад"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "около %d месяца(ев) назад"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "около года назад"
diff --git a/locale/statusnet.po b/locale/statusnet.po
index 3f52a091d..c918c1d57 100644
--- a/locale/statusnet.po
+++ b/locale/statusnet.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
+"POT-Creation-Date: 2009-12-22 22:38+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"
@@ -1227,7 +1227,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5201,47 +5201,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr ""
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr ""
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr ""
diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po
index 27f6bd659..79a6a1c78 100644
--- a/locale/sv/LC_MESSAGES/statusnet.po
+++ b/locale/sv/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:53:03+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:38+0000\n"
"Language-Team: Swedish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: sv\n"
"X-Message-Group: out-statusnet\n"
@@ -438,14 +438,12 @@ msgid "No such notice."
msgstr "Ingen sådan notis."
#: actions/apistatusesretweet.php:83
-#, fuzzy
msgid "Cannot repeat your own notice."
-msgstr "Kan inte stänga av notifikation."
+msgstr "Kan inte upprepa din egen notis."
#: actions/apistatusesretweet.php:91
-#, fuzzy
msgid "Already repeated that notice."
-msgstr "Ta bort denna notis"
+msgstr "Redan upprepat denna notis."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
@@ -519,17 +517,17 @@ msgstr "%s uppdateringar från alla!"
#: actions/apitimelineretweetedbyme.php:112
#, php-format
msgid "Repeated by %s"
-msgstr ""
+msgstr "Upprepat av %s"
#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
msgid "Repeated to %s"
-msgstr "Svarat på %s"
+msgstr "Upprepat till %s"
#: actions/apitimelineretweetsofme.php:112
-#, fuzzy, php-format
+#, php-format
msgid "Repeats of %s"
-msgstr "Svarat på %s"
+msgstr "Upprepningar av %s"
#: actions/apitimelinetag.php:102 actions/tag.php:66
#, php-format
@@ -1262,29 +1260,25 @@ msgid "Featured users, page %d"
msgstr "Profilerade användare, sida %d"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "Ett urval av några av de stora användarna på% s"
#: actions/file.php:34
-#, fuzzy
msgid "No notice ID."
-msgstr "Ingen notis"
+msgstr "Ingen notis-ID."
#: actions/file.php:38
-#, fuzzy
msgid "No notice."
-msgstr "Ingen notis"
+msgstr "Ingen notis."
#: actions/file.php:42
-#, fuzzy
msgid "No attachments."
-msgstr "Inga bilagor"
+msgstr "Inga bilagor."
#: actions/file.php:51
-#, fuzzy
msgid "No uploaded attachments."
-msgstr "Inga uppladdade bilagor"
+msgstr "Inga uppladdade bilagor."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -2833,34 +2827,28 @@ msgid "Couldn’t get a request token."
msgstr "Kunde inte få en förfrågnings-token."
#: actions/repeat.php:57
-#, fuzzy
msgid "Only logged-in users can repeat notices."
-msgstr "Bara användaren kan läsa sina egna brevlådor."
+msgstr "Bara inloggade användaren kan upprepa notiser."
#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
msgid "No notice specified."
-msgstr "Ingen profil angiven."
+msgstr "Ingen notis angiven."
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr "Du kan inte registrera dig om du inte godkänner licensen."
+msgstr "Du kan inte upprepa din egna notis."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "Du har redan blockerat denna användare."
+msgstr "Du har redan upprepat denna notis."
#: actions/repeat.php:114 lib/noticelist.php:621
-#, fuzzy
msgid "Repeated"
-msgstr "Skapad"
+msgstr "Upprepad"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Skapad"
+msgstr "Upprepad!"
#: actions/replies.php:125 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
@@ -3189,9 +3177,9 @@ msgstr ""
"[StatusNet](http://status.net/). "
#: actions/showstream.php:313
-#, fuzzy, php-format
+#, php-format
msgid "Repeat of %s"
-msgstr "Svarat på %s"
+msgstr "Upprepning av %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
@@ -3656,7 +3644,6 @@ msgid "Notice feed for tag %s (Atom)"
msgstr "Flöde av notiser för tagg %s (Atom)"
#: actions/tagother.php:39
-#, fuzzy
msgid "No ID argument."
msgstr "Inget ID-argument."
@@ -3933,9 +3920,8 @@ msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Fel bildtyp för avatar-URL '%s'."
#: actions/userbyid.php:70
-#, fuzzy
msgid "No ID."
-msgstr "Ingen ID"
+msgstr "Ingen ID."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
msgid "Profile design"
@@ -4047,7 +4033,7 @@ msgstr "Databasfel vid infogning av svar: %s"
#: classes/Notice.php:1371
#, php-format
msgid "RT @%1$s %2$s"
-msgstr ""
+msgstr "RT @%1$s %2$s"
#: classes/User.php:368
#, php-format
@@ -4378,7 +4364,7 @@ msgstr "Notis markerad som favorit."
#: lib/command.php:315
#, php-format
msgid "%1$s (%2$s)"
-msgstr ""
+msgstr "%1$s (%2$s)"
#: lib/command.php:318
#, php-format
@@ -4410,24 +4396,21 @@ msgid "Error sending direct message."
msgstr "Fel vid sändning av direktmeddelande."
#: lib/command.php:422
-#, fuzzy
msgid "Cannot repeat your own notice"
-msgstr "Kan inte stänga av notifikation."
+msgstr "Kan inte upprepa din egen notis"
#: lib/command.php:427
-#, fuzzy
msgid "Already repeated that notice"
-msgstr "Ta bort denna notis"
+msgstr "Redan upprepat denna notis"
#: lib/command.php:435
-#, fuzzy, php-format
+#, php-format
msgid "Notice from %s repeated"
-msgstr "Notis postad"
+msgstr "Notis fron %s upprepad"
#: lib/command.php:437
-#, fuzzy
msgid "Error repeating notice."
-msgstr "Fel vid sparande av notis."
+msgstr "Fel vid upprepning av notis."
#: lib/command.php:491
#, php-format
@@ -4486,9 +4469,9 @@ msgid "Login command is disabled"
msgstr "Inloggningskommando är inaktiverat"
#: lib/command.php:664
-#, fuzzy, php-format
+#, php-format
msgid "Could not create login token for %s"
-msgstr "Kunde inte skapa alias."
+msgstr "Kunde inte skapa inloggnings-token för %s"
#: lib/command.php:669
#, php-format
@@ -4786,7 +4769,7 @@ msgstr "kB"
#: lib/jabber.php:191
#, php-format
msgid "[%s]"
-msgstr ""
+msgstr "[%s]"
#: lib/joinform.php:114
msgid "Join"
@@ -5122,9 +5105,8 @@ msgid "in context"
msgstr "i sammanhang"
#: lib/noticelist.php:548
-#, fuzzy
msgid "Repeated by"
-msgstr "Skapad"
+msgstr "Upprepad av"
#: lib/noticelist.php:577
msgid "Reply to this notice"
@@ -5135,9 +5117,8 @@ msgid "Reply"
msgstr "Svara"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Notis borttagen."
+msgstr "Notis upprepad"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5237,14 +5218,12 @@ msgid "All groups"
msgstr "Alla grupper"
#: lib/profileformaction.php:123
-#, fuzzy
msgid "No return-to arguments."
-msgstr "Inga \"return-to\"-argument"
+msgstr "Inga \"return-to\"-argument."
#: lib/profileformaction.php:137
-#, fuzzy
msgid "Unimplemented method."
-msgstr "inte implementerad metod"
+msgstr "Inte implementerad metod."
#: lib/publicgroupnav.php:78
msgid "Public"
@@ -5267,14 +5246,12 @@ msgid "Popular"
msgstr "Populärt"
#: lib/repeatform.php:107 lib/repeatform.php:132
-#, fuzzy
msgid "Repeat this notice"
-msgstr "Svara på detta inlägg"
+msgstr "Upprepa detta inlägg"
#: lib/repeatform.php:132
-#, fuzzy
msgid "Repeat"
-msgstr "Återställ"
+msgstr "Upprepa"
#: lib/sandboxform.php:67
#, fuzzy
@@ -5446,51 +5423,50 @@ msgid "Message"
msgstr "Meddelande"
#: lib/userprofile.php:311
-#, fuzzy
msgid "Moderate"
msgstr "Moderera"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "ett par sekunder sedan"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "för nån minut sedan"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "för %d minuter sedan"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "för en timma sedan"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "för %d timmar sedan"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "för en dag sedan"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "för %d dagar sedan"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "för en månad sedan"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "för %d månader sedan"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "för ett år sedan"
diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po
index 65cb742c0..42def1824 100644
--- a/locale/te/LC_MESSAGES/statusnet.po
+++ b/locale/te/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:53:06+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:41+0000\n"
"Language-Team: Telugu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: te\n"
"X-Message-Group: out-statusnet\n"
@@ -1243,7 +1243,7 @@ msgstr "విశేష వాడుకరులు, పేజీ %d"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5326,47 +5326,47 @@ msgstr "సందేశం"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "కొన్ని క్షణాల క్రితం"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "ఓ నిమిషం క్రితం"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "%d నిమిషాల క్రితం"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "ఒక గంట క్రితం"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "%d గంటల క్రితం"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "ఓ రోజు క్రితం"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "%d రోజుల క్రితం"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "ఓ నెల క్రితం"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "%d నెలల క్రితం"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "ఒక సంవత్సరం క్రితం"
diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po
index 8d70f2b9d..b0b6540a0 100644
--- a/locale/tr/LC_MESSAGES/statusnet.po
+++ b/locale/tr/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:53:10+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:44+0000\n"
"Language-Team: Turkish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tr\n"
"X-Message-Group: out-statusnet\n"
@@ -1281,7 +1281,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5468,47 +5468,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "birkaç saniye önce"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "yaklaşık bir dakika önce"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "yaklaşık %d dakika önce"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "yaklaşık bir saat önce"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "yaklaşık %d saat önce"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "yaklaşık bir gün önce"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "yaklaşık %d gün önce"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "yaklaşık bir ay önce"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "yaklaşık %d ay önce"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "yaklaşık bir yıl önce"
diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po
index b437482e4..a2c52acb4 100644
--- a/locale/uk/LC_MESSAGES/statusnet.po
+++ b/locale/uk/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:53:13+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:47+0000\n"
"Language-Team: Ukrainian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: out-statusnet\n"
@@ -1263,8 +1263,8 @@ msgstr "Користувачі варті уваги, сторінка %d"
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
-msgstr "Вибірка з деяких видатних користувачів на %s"
+msgid "A selection of some great users on %s"
+msgstr "Список деяких видатних користувачів на %s"
#: actions/file.php:34
msgid "No notice ID."
@@ -5289,9 +5289,8 @@ msgid "Reply"
msgstr "Відповісти"
#: lib/noticelist.php:620
-#, fuzzy
msgid "Notice repeated"
-msgstr "Допис видалено."
+msgstr "Допис вторували"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5595,47 +5594,47 @@ msgstr "Повідомлення"
msgid "Moderate"
msgstr "Модерувати"
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "мить тому"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "хвилину тому"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "близько %d хвилин тому"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "годину тому"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "близько %d годин тому"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "день тому"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "близько %d днів тому"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "місяць тому"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "близько %d місяців тому"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "рік тому"
diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po
index c2c80a2f6..74194cd42 100644
--- a/locale/vi/LC_MESSAGES/statusnet.po
+++ b/locale/vi/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:53:15+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:50+0000\n"
"Language-Team: Vietnamese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: vi\n"
"X-Message-Group: out-statusnet\n"
@@ -1319,7 +1319,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5709,47 +5709,47 @@ msgstr "Tin mới nhất"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "vài giây trước"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "1 phút trước"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "%d phút trước"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "1 giờ trước"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "%d giờ trước"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "1 ngày trước"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "%d ngày trước"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "1 tháng trước"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "%d tháng trước"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "1 năm trước"
diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po
index 9c099dc34..426693d88 100644
--- a/locale/zh_CN/LC_MESSAGES/statusnet.po
+++ b/locale/zh_CN/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Simplified Chinese
#
+# Author@translatewiki.net: Shizhao
# --
# Messages of identi.ca
# Copyright (C) 2008 Gouki <gouki@goukihq.org>
@@ -9,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:53:18+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:53+0000\n"
"Language-Team: Simplified Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: out-statusnet\n"
@@ -22,9 +23,8 @@ msgstr ""
#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
#: actions/showfavorites.php:137 actions/tag.php:51
-#, fuzzy
msgid "No such page"
-msgstr "未找到此消息。"
+msgstr "没有该页面"
#: actions/all.php:74 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
@@ -53,9 +53,9 @@ msgid "No such user."
msgstr "没有这个用户。"
#: actions/all.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%s and friends, page %d"
-msgstr "%s 及好友"
+msgstr "%s 及好友,页面 %d"
#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
#: actions/apitimelinefriends.php:115 actions/apitimelinehome.php:115
@@ -65,25 +65,25 @@ msgid "%s and friends"
msgstr "%s 及好友"
#: actions/all.php:99
-#, fuzzy, php-format
+#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
-msgstr "%s 好友的聚合"
+msgstr "%s 好友的聚合(RSS 1.0)"
#: actions/all.php:107
-#, fuzzy, php-format
+#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
-msgstr "%s 好友的聚合"
+msgstr "%s 好友的聚合(RSS 2.0)"
#: actions/all.php:115
-#, fuzzy, php-format
+#, php-format
msgid "Feed for friends of %s (Atom)"
-msgstr "%s 好友的聚合"
+msgstr "%s 好友的聚合(Atom)"
#: actions/all.php:127
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
-msgstr ""
+msgstr "这是 %s 和好友的时间线,但是没有任何人发布内容。"
#: actions/all.php:132
#, php-format
@@ -115,7 +115,7 @@ msgstr "%s 及好友"
#: actions/apitimelinehome.php:122
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
-msgstr "%2$s 上 %1$s 和好友的更新!"
+msgstr "来自%2$s 上 %1$s 和好友的更新!"
#: actions/apiaccountratelimitstatus.php:70
#: actions/apiaccountupdatedeliverydevice.php:93
@@ -1290,8 +1290,8 @@ msgid "Featured users, page %d"
msgstr "推荐用户,第 %d 页"
#: actions/featured.php:99
-#, php-format
-msgid "A selection of some of the great users on %s"
+#, fuzzy, php-format
+msgid "A selection of some great users on %s"
msgstr "%s 优秀用户摘选"
#: actions/file.php:34
@@ -5568,47 +5568,47 @@ msgstr "新消息"
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr "几秒前"
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr "一分钟前"
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr "%d 分钟前"
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr "一小时前"
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr "%d 小时前"
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr "一天前"
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr "%d 天前"
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr "一个月前"
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr "%d 个月前"
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr "一年前"
diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po
index 9acae37c1..f65cd947a 100644
--- a/locale/zh_TW/LC_MESSAGES/statusnet.po
+++ b/locale/zh_TW/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-16 22:51+0000\n"
-"PO-Revision-Date: 2009-12-16 22:53:21+0000\n"
+"POT-Creation-Date: 2009-12-21 21:17+0000\n"
+"PO-Revision-Date: 2009-12-22 22:39:56+0000\n"
"Language-Team: Traditional Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r60142); Translate extension (2009-12-06)\n"
+"X-Generator: MediaWiki 1.16alpha (r60291); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hant\n"
"X-Message-Group: out-statusnet\n"
@@ -1271,7 +1271,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
-msgid "A selection of some of the great users on %s"
+msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
@@ -5371,47 +5371,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:829
+#: lib/util.php:837
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:831
+#: lib/util.php:839
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:833
+#: lib/util.php:841
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:835
+#: lib/util.php:843
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:837
+#: lib/util.php:845
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:839
+#: lib/util.php:847
msgid "about a day ago"
msgstr ""
-#: lib/util.php:841
+#: lib/util.php:849
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:843
+#: lib/util.php:851
msgid "about a month ago"
msgstr ""
-#: lib/util.php:845
+#: lib/util.php:853
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:847
+#: lib/util.php:855
msgid "about a year ago"
msgstr ""
diff --git a/plugins/CasAuthentication/CasAuthenticationPlugin.php b/plugins/CasAuthentication/CasAuthenticationPlugin.php
new file mode 100644
index 000000000..428aafb02
--- /dev/null
+++ b/plugins/CasAuthentication/CasAuthenticationPlugin.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to enable Single Sign On via CAS (Central Authentication Service)
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Craig Andrews <candrews@integralblue.com>
+ * @copyright 2009 Craig Andrews http://candrews.integralblue.com
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+ exit(1);
+}
+
+// We bundle the phpCAS library...
+set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/CAS');
+
+class CasAuthenticationPlugin extends AuthenticationPlugin
+{
+ public $server;
+ public $port = 443;
+ public $path = '';
+
+ function checkPassword($username, $password)
+ {
+ global $casTempPassword;
+ return ($casTempPassword == $password);
+ }
+
+ function onAutoload($cls)
+ {
+ switch ($cls)
+ {
+ case 'phpCAS':
+ require_once(INSTALLDIR.'/plugins/CasAuthentication/extlib/CAS.php');
+ return false;
+ case 'CasloginAction':
+ require_once(INSTALLDIR.'/plugins/CasAuthentication/' . strtolower(mb_substr($cls, 0, -6)) . '.php');
+ return false;
+ default:
+ return parent::onAutoload($cls);
+ }
+ }
+
+ function onStartInitializeRouter($m)
+ {
+ $m->connect('main/cas', array('action' => 'caslogin'));
+ return true;
+ }
+
+ function onEndLoginGroupNav(&$action)
+ {
+ $action_name = $action->trimmed('action');
+
+ $action->menuItem(common_local_url('caslogin'),
+ _m('CAS'),
+ _m('Login or register with CAS'),
+ $action_name === 'caslogin');
+
+ return true;
+ }
+
+ function onEndShowPageNotice($action)
+ {
+ $name = $action->trimmed('action');
+
+ switch ($name)
+ {
+ case 'login':
+ $instr = '(Have an account with CAS? ' .
+ 'Try our [CAS login]'.
+ '(%%action.caslogin%%)!)';
+ break;
+ default:
+ return true;
+ }
+
+ $output = common_markup_to_html($instr);
+ $action->raw($output);
+ return true;
+ }
+
+ function onLoginAction($action, &$login)
+ {
+ switch ($action)
+ {
+ case 'caslogin':
+ $login = true;
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ function onInitializePlugin(){
+ parent::onInitializePlugin();
+ if(!isset($this->server)){
+ throw new Exception("must specify a server");
+ }
+ if(!isset($this->port)){
+ throw new Exception("must specify a port");
+ }
+ if(!isset($this->path)){
+ throw new Exception("must specify a path");
+ }
+ //These values need to be accessible to a action object
+ //I can't think of any other way than global variables
+ //to allow the action instance to be able to see values :-(
+ global $casSettings;
+ $casSettings = array();
+ $casSettings['server']=$this->server;
+ $casSettings['port']=$this->port;
+ $casSettings['path']=$this->path;
+ }
+}
diff --git a/plugins/CasAuthentication/README b/plugins/CasAuthentication/README
new file mode 100644
index 000000000..2ee54dc05
--- /dev/null
+++ b/plugins/CasAuthentication/README
@@ -0,0 +1,38 @@
+The CAS Authentication plugin allows for StatusNet to handle authentication
+through CAS (Central Authentication Service).
+
+Installation
+============
+add "addPlugin('casAuthentication',
+ array('setting'=>'value', 'setting2'=>'value2', ...);"
+to the bottom of your config.php
+
+Settings
+========
+provider_name*: a unique name for this authentication provider.
+authoritative (false): Set to true if CAS's responses are authoritative
+ (if authorative and CAS fails, no other password checking will be done).
+autoregistration (false): Set to true if users should be automatically created
+ when they attempt to login.
+email_changeable (true): Are users allowed to change their email address?
+ (true or false)
+password_changeable*: must be set to false. This plugin does not support changing passwords.
+
+server*: CAS server to authentication against
+port (443): Port the CAS server listens on. Almost always 443
+path (): Path on the server to CAS. Usually blank.
+
+* required
+default values are in (parenthesis)
+
+Example
+=======
+addPlugin('casAuthentication', array(
+ 'provider_name'=>'Example',
+ 'authoritative'=>true,
+ 'autoregistration'=>true,
+ 'server'=>'sso-cas.univ-rennes1.fr',
+ 'port'=>443,
+ 'path'=>''
+));
+
diff --git a/plugins/CasAuthentication/caslogin.php b/plugins/CasAuthentication/caslogin.php
new file mode 100644
index 000000000..390a75d8b
--- /dev/null
+++ b/plugins/CasAuthentication/caslogin.php
@@ -0,0 +1,66 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+class CasloginAction extends Action
+{
+ function handle($args)
+ {
+ parent::handle($args);
+ if (common_is_real_login()) {
+ $this->clientError(_m('Already logged in.'));
+ } else {
+ global $casSettings;
+ phpCAS::client(CAS_VERSION_2_0,$casSettings['server'],$casSettings['port'],$casSettings['path']);
+ phpCAS::setNoCasServerValidation();
+ phpCAS::handleLogoutRequests();
+ phpCAS::forceAuthentication();
+ global $casTempPassword;
+ $casTempPassword = common_good_rand(16);
+ $user = common_check_user(phpCAS::getUser(), $casTempPassword);
+ if (!$user) {
+ $this->serverError(_('Incorrect username or password.'));
+ return;
+ }
+
+ // success!
+ if (!common_set_user($user)) {
+ $this->serverError(_('Error setting user. You are probably not authorized.'));
+ return;
+ }
+
+ common_real_login(true);
+
+ $url = common_get_returnto();
+
+ if ($url) {
+ // We don't have to return to it again
+ common_set_returnto(null);
+ } else {
+ $url = common_local_url('all',
+ array('nickname' =>
+ $user->nickname));
+ }
+
+ common_redirect($url, 303);
+
+ }
+ }
+}
diff --git a/plugins/CasAuthentication/extlib/CAS.php b/plugins/CasAuthentication/extlib/CAS.php
new file mode 100644
index 000000000..59238eb81
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS.php
@@ -0,0 +1,1471 @@
+<?php
+
+// commented in 0.4.22-RC2 for Sylvain Derosiaux
+// error_reporting(E_ALL ^ E_NOTICE);
+
+//
+// hack by Vangelis Haniotakis to handle the absence of $_SERVER['REQUEST_URI'] in IIS
+//
+if (!$_SERVER['REQUEST_URI']) {
+ $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'];
+}
+
+//
+// another one by Vangelis Haniotakis also to make phpCAS work with PHP5
+//
+if (version_compare(PHP_VERSION,'5','>=')) {
+ require_once(dirname(__FILE__).'/CAS/domxml-php4-php5.php');
+}
+
+/**
+ * @file CAS/CAS.php
+ * Interface class of the phpCAS library
+ *
+ * @ingroup public
+ */
+
+// ########################################################################
+// CONSTANTS
+// ########################################################################
+
+// ------------------------------------------------------------------------
+// CAS VERSIONS
+// ------------------------------------------------------------------------
+
+/**
+ * phpCAS version. accessible for the user by phpCAS::getVersion().
+ */
+define('PHPCAS_VERSION','1.0.1');
+
+// ------------------------------------------------------------------------
+// CAS VERSIONS
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup public
+ * @{
+ */
+
+/**
+ * CAS version 1.0
+ */
+define("CAS_VERSION_1_0",'1.0');
+/*!
+ * CAS version 2.0
+ */
+define("CAS_VERSION_2_0",'2.0');
+
+/** @} */
+ /**
+ * @addtogroup publicPGTStorage
+ * @{
+ */
+// ------------------------------------------------------------------------
+// FILE PGT STORAGE
+// ------------------------------------------------------------------------
+ /**
+ * Default path used when storing PGT's to file
+ */
+define("CAS_PGT_STORAGE_FILE_DEFAULT_PATH",'/tmp');
+/**
+ * phpCAS::setPGTStorageFile()'s 2nd parameter to write plain text files
+ */
+define("CAS_PGT_STORAGE_FILE_FORMAT_PLAIN",'plain');
+/**
+ * phpCAS::setPGTStorageFile()'s 2nd parameter to write xml files
+ */
+define("CAS_PGT_STORAGE_FILE_FORMAT_XML",'xml');
+/**
+ * Default format used when storing PGT's to file
+ */
+define("CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT",CAS_PGT_STORAGE_FILE_FORMAT_PLAIN);
+// ------------------------------------------------------------------------
+// DATABASE PGT STORAGE
+// ------------------------------------------------------------------------
+ /**
+ * default database type when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE",'mysql');
+/**
+ * default host when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME",'localhost');
+/**
+ * default port when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_PORT",'');
+/**
+ * default database when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE",'phpCAS');
+/**
+ * default table when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_TABLE",'pgt');
+
+/** @} */
+// ------------------------------------------------------------------------
+// SERVICE ACCESS ERRORS
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup publicServices
+ * @{
+ */
+
+/**
+ * phpCAS::service() error code on success
+ */
+define("PHPCAS_SERVICE_OK",0);
+/**
+ * phpCAS::service() error code when the PT could not retrieve because
+ * the CAS server did not respond.
+ */
+define("PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE",1);
+/**
+ * phpCAS::service() error code when the PT could not retrieve because
+ * the response of the CAS server was ill-formed.
+ */
+define("PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE",2);
+/**
+ * phpCAS::service() error code when the PT could not retrieve because
+ * the CAS server did not want to.
+ */
+define("PHPCAS_SERVICE_PT_FAILURE",3);
+/**
+ * phpCAS::service() error code when the service was not available.
+ */
+define("PHPCAS_SERVICE_NOT AVAILABLE",4);
+
+/** @} */
+// ------------------------------------------------------------------------
+// LANGUAGES
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup publicLang
+ * @{
+ */
+
+define("PHPCAS_LANG_ENGLISH", 'english');
+define("PHPCAS_LANG_FRENCH", 'french');
+define("PHPCAS_LANG_GREEK", 'greek');
+define("PHPCAS_LANG_GERMAN", 'german');
+define("PHPCAS_LANG_JAPANESE", 'japanese');
+define("PHPCAS_LANG_SPANISH", 'spanish');
+define("PHPCAS_LANG_CATALAN", 'catalan');
+
+/** @} */
+
+/**
+ * @addtogroup internalLang
+ * @{
+ */
+
+/**
+ * phpCAS default language (when phpCAS::setLang() is not used)
+ */
+define("PHPCAS_LANG_DEFAULT", PHPCAS_LANG_ENGLISH);
+
+/** @} */
+// ------------------------------------------------------------------------
+// DEBUG
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup publicDebug
+ * @{
+ */
+
+/**
+ * The default directory for the debug file under Unix.
+ */
+define('DEFAULT_DEBUG_DIR','/tmp/');
+
+/** @} */
+// ------------------------------------------------------------------------
+// MISC
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup internalMisc
+ * @{
+ */
+
+/**
+ * This global variable is used by the interface class phpCAS.
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_CLIENT'] = null;
+
+/**
+ * This global variable is used to store where the initializer is called from
+ * (to print a comprehensive error in case of multiple calls).
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_INIT_CALL'] = array('done' => FALSE,
+ 'file' => '?',
+ 'line' => -1,
+ 'method' => '?');
+
+/**
+ * This global variable is used to store where the method checking
+ * the authentication is called from (to print comprehensive errors)
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_AUTH_CHECK_CALL'] = array('done' => FALSE,
+ 'file' => '?',
+ 'line' => -1,
+ 'method' => '?',
+ 'result' => FALSE);
+
+/**
+ * This global variable is used to store phpCAS debug mode.
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_DEBUG'] = array('filename' => FALSE,
+ 'indent' => 0,
+ 'unique_id' => '');
+
+/** @} */
+
+// ########################################################################
+// CLIENT CLASS
+// ########################################################################
+
+// include client class
+include_once(dirname(__FILE__).'/CAS/client.php');
+
+// ########################################################################
+// INTERFACE CLASS
+// ########################################################################
+
+/**
+ * @class phpCAS
+ * The phpCAS class is a simple container for the phpCAS library. It provides CAS
+ * authentication for web applications written in PHP.
+ *
+ * @ingroup public
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * \internal All its methods access the same object ($PHPCAS_CLIENT, declared
+ * at the end of CAS/client.php).
+ */
+
+
+
+class phpCAS
+{
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * @addtogroup publicInit
+ * @{
+ */
+
+ /**
+ * phpCAS client initializer.
+ * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
+ * called, only once, and before all other methods (except phpCAS::getVersion()
+ * and phpCAS::setDebug()).
+ *
+ * @param $server_version the version of the CAS server
+ * @param $server_hostname the hostname of the CAS server
+ * @param $server_port the port the CAS server is running on
+ * @param $server_uri the URI the CAS server is responding on
+ * @param $start_session Have phpCAS start PHP sessions (default true)
+ *
+ * @return a newly created CASClient object
+ */
+ function client($server_version,
+ $server_hostname,
+ $server_port,
+ $server_uri,
+ $start_session = true)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
+
+ phpCAS::traceBegin();
+ if ( is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
+ }
+ if ( gettype($server_version) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
+ }
+ if ( gettype($server_hostname) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
+ }
+ if ( gettype($server_port) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
+ }
+ if ( gettype($server_uri) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
+ }
+
+ // store where the initialzer is called from
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_INIT_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__);
+
+ // initialize the global object $PHPCAS_CLIENT
+ $PHPCAS_CLIENT = new CASClient($server_version,FALSE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * phpCAS proxy initializer.
+ * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
+ * called, only once, and before all other methods (except phpCAS::getVersion()
+ * and phpCAS::setDebug()).
+ *
+ * @param $server_version the version of the CAS server
+ * @param $server_hostname the hostname of the CAS server
+ * @param $server_port the port the CAS server is running on
+ * @param $server_uri the URI the CAS server is responding on
+ * @param $start_session Have phpCAS start PHP sessions (default true)
+ *
+ * @return a newly created CASClient object
+ */
+ function proxy($server_version,
+ $server_hostname,
+ $server_port,
+ $server_uri,
+ $start_session = true)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
+
+ phpCAS::traceBegin();
+ if ( is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
+ }
+ if ( gettype($server_version) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
+ }
+ if ( gettype($server_hostname) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
+ }
+ if ( gettype($server_port) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
+ }
+ if ( gettype($server_uri) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
+ }
+
+ // store where the initialzer is called from
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_INIT_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__);
+
+ // initialize the global object $PHPCAS_CLIENT
+ $PHPCAS_CLIENT = new CASClient($server_version,TRUE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * @addtogroup publicDebug
+ * @{
+ */
+
+ /**
+ * Set/unset debug mode
+ *
+ * @param $filename the name of the file used for logging, or FALSE to stop debugging.
+ */
+ function setDebug($filename='')
+ {
+ global $PHPCAS_DEBUG;
+
+ if ( $filename != FALSE && gettype($filename) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $dbg (should be FALSE or the name of the log file)');
+ }
+
+ if ( empty($filename) ) {
+ if ( preg_match('/^Win.*/',getenv('OS')) ) {
+ if ( isset($_ENV['TMP']) ) {
+ $debugDir = $_ENV['TMP'].'/';
+ } else if ( isset($_ENV['TEMP']) ) {
+ $debugDir = $_ENV['TEMP'].'/';
+ } else {
+ $debugDir = '';
+ }
+ } else {
+ $debugDir = DEFAULT_DEBUG_DIR;
+ }
+ $filename = $debugDir . 'phpCAS.log';
+ }
+
+ if ( empty($PHPCAS_DEBUG['unique_id']) ) {
+ $PHPCAS_DEBUG['unique_id'] = substr(strtoupper(md5(uniqid(''))),0,4);
+ }
+
+ $PHPCAS_DEBUG['filename'] = $filename;
+
+ phpCAS::trace('START ******************');
+ }
+
+ /** @} */
+ /**
+ * @addtogroup internalDebug
+ * @{
+ */
+
+ /**
+ * This method is a wrapper for debug_backtrace() that is not available
+ * in all PHP versions (>= 4.3.0 only)
+ */
+ function backtrace()
+ {
+ if ( function_exists('debug_backtrace') ) {
+ return debug_backtrace();
+ } else {
+ // poor man's hack ... but it does work ...
+ return array();
+ }
+ }
+
+ /**
+ * Logs a string in debug mode.
+ *
+ * @param $str the string to write
+ *
+ * @private
+ */
+ function log($str)
+ {
+ $indent_str = ".";
+ global $PHPCAS_DEBUG;
+
+ if ( $PHPCAS_DEBUG['filename'] ) {
+ for ($i=0;$i<$PHPCAS_DEBUG['indent'];$i++) {
+ $indent_str .= '| ';
+ }
+ error_log($PHPCAS_DEBUG['unique_id'].' '.$indent_str.$str."\n",3,$PHPCAS_DEBUG['filename']);
+ }
+
+ }
+
+ /**
+ * This method is used by interface methods to print an error and where the function
+ * was originally called from.
+ *
+ * @param $msg the message to print
+ *
+ * @private
+ */
+ function error($msg)
+ {
+ $dbg = phpCAS::backtrace();
+ $function = '?';
+ $file = '?';
+ $line = '?';
+ if ( is_array($dbg) ) {
+ for ( $i=1; $i<sizeof($dbg); $i++) {
+ if ( is_array($dbg[$i]) ) {
+ if ( $dbg[$i]['class'] == __CLASS__ ) {
+ $function = $dbg[$i]['function'];
+ $file = $dbg[$i]['file'];
+ $line = $dbg[$i]['line'];
+ }
+ }
+ }
+ }
+ echo "<br />\n<b>phpCAS error</b>: <font color=\"FF0000\"><b>".__CLASS__."::".$function.'(): '.htmlentities($msg)."</b></font> in <b>".$file."</b> on line <b>".$line."</b><br />\n";
+ phpCAS::trace($msg);
+ phpCAS::traceExit();
+ exit();
+ }
+
+ /**
+ * This method is used to log something in debug mode.
+ */
+ function trace($str)
+ {
+ $dbg = phpCAS::backtrace();
+ phpCAS::log($str.' ['.basename($dbg[1]['file']).':'.$dbg[1]['line'].']');
+ }
+
+ /**
+ * This method is used to indicate the start of the execution of a function in debug mode.
+ */
+ function traceBegin()
+ {
+ global $PHPCAS_DEBUG;
+
+ $dbg = phpCAS::backtrace();
+ $str = '=> ';
+ if ( !empty($dbg[2]['class']) ) {
+ $str .= $dbg[2]['class'].'::';
+ }
+ $str .= $dbg[2]['function'].'(';
+ if ( is_array($dbg[2]['args']) ) {
+ foreach ($dbg[2]['args'] as $index => $arg) {
+ if ( $index != 0 ) {
+ $str .= ', ';
+ }
+ $str .= str_replace("\n","",var_export($arg,TRUE));
+ }
+ }
+ $str .= ') ['.basename($dbg[2]['file']).':'.$dbg[2]['line'].']';
+ phpCAS::log($str);
+ $PHPCAS_DEBUG['indent'] ++;
+ }
+
+ /**
+ * This method is used to indicate the end of the execution of a function in debug mode.
+ *
+ * @param $res the result of the function
+ */
+ function traceEnd($res='')
+ {
+ global $PHPCAS_DEBUG;
+
+ $PHPCAS_DEBUG['indent'] --;
+ $dbg = phpCAS::backtrace();
+ $str = '';
+ $str .= '<= '.str_replace("\n","",var_export($res,TRUE));
+ phpCAS::log($str);
+ }
+
+ /**
+ * This method is used to indicate the end of the execution of the program
+ */
+ function traceExit()
+ {
+ global $PHPCAS_DEBUG;
+
+ phpCAS::log('exit()');
+ while ( $PHPCAS_DEBUG['indent'] > 0 ) {
+ phpCAS::log('-');
+ $PHPCAS_DEBUG['indent'] --;
+ }
+ }
+
+ /** @} */
+ // ########################################################################
+ // INTERNATIONALIZATION
+ // ########################################################################
+ /**
+ * @addtogroup publicLang
+ * @{
+ */
+
+ /**
+ * This method is used to set the language used by phpCAS.
+ * @note Can be called only once.
+ *
+ * @param $lang a string representing the language.
+ *
+ * @sa PHPCAS_LANG_FRENCH, PHPCAS_LANG_ENGLISH
+ */
+ function setLang($lang)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($lang) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $lang (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setLang($lang);
+ }
+
+ /** @} */
+ // ########################################################################
+ // VERSION
+ // ########################################################################
+ /**
+ * @addtogroup public
+ * @{
+ */
+
+ /**
+ * This method returns the phpCAS version.
+ *
+ * @return the phpCAS version.
+ */
+ function getVersion()
+ {
+ return PHPCAS_VERSION;
+ }
+
+ /** @} */
+ // ########################################################################
+ // HTML OUTPUT
+ // ########################################################################
+ /**
+ * @addtogroup publicOutput
+ * @{
+ */
+
+ /**
+ * This method sets the HTML header used for all outputs.
+ *
+ * @param $header the HTML header.
+ */
+ function setHTMLHeader($header)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($header) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $header (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setHTMLHeader($header);
+ }
+
+ /**
+ * This method sets the HTML footer used for all outputs.
+ *
+ * @param $footer the HTML footer.
+ */
+ function setHTMLFooter($footer)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($footer) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $footer (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setHTMLFooter($footer);
+ }
+
+ /** @} */
+ // ########################################################################
+ // PGT STORAGE
+ // ########################################################################
+ /**
+ * @addtogroup publicPGTStorage
+ * @{
+ */
+
+ /**
+ * This method is used to tell phpCAS to store the response of the
+ * CAS server to PGT requests onto the filesystem.
+ *
+ * @param $format the format used to store the PGT's (`plain' and `xml' allowed)
+ * @param $path the path where the PGT's should be stored
+ */
+ function setPGTStorageFile($format='',
+ $path='')
+ {
+ global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
+ }
+ if ( gettype($format) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $format (should be `string\')');
+ }
+ if ( gettype($path) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $format (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setPGTStorageFile($format,$path);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to tell phpCAS to store the response of the
+ * CAS server to PGT requests into a database.
+ * @note The connection to the database is done only when needed.
+ * As a consequence, bad parameters are detected only when
+ * initializing PGT storage, except in debug mode.
+ *
+ * @param $user the user to access the data with
+ * @param $password the user's password
+ * @param $database_type the type of the database hosting the data
+ * @param $hostname the server hosting the database
+ * @param $port the port the server is listening on
+ * @param $database the name of the database
+ * @param $table the name of the table storing the data
+ */
+ function setPGTStorageDB($user,
+ $password,
+ $database_type='',
+ $hostname='',
+ $port=0,
+ $database='',
+ $table='')
+ {
+ global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
+ }
+ if ( gettype($user) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $user (should be `string\')');
+ }
+ if ( gettype($password) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $password (should be `string\')');
+ }
+ if ( gettype($database_type) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $database_type (should be `string\')');
+ }
+ if ( gettype($hostname) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $hostname (should be `string\')');
+ }
+ if ( gettype($port) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $port (should be `integer\')');
+ }
+ if ( gettype($database) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $database (should be `string\')');
+ }
+ if ( gettype($table) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $table (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setPGTStorageDB($this,$user,$password,$hostname,$port,$database,$table);
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+ // ########################################################################
+ // ACCESS TO EXTERNAL SERVICES
+ // ########################################################################
+ /**
+ * @addtogroup publicServices
+ * @{
+ */
+
+ /**
+ * This method is used to access an HTTP[S] service.
+ *
+ * @param $url the service to access.
+ * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
+ * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
+ * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
+ * @param $output the output of the service (also used to give an error
+ * message on failure).
+ *
+ * @return TRUE on success, FALSE otherwise (in this later case, $err_code
+ * gives the reason why it failed and $output contains an error message).
+ */
+ function serviceWeb($url,&$err_code,&$output)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+
+ $res = $PHPCAS_CLIENT->serviceWeb($url,$err_code,$output);
+
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /**
+ * This method is used to access an IMAP/POP3/NNTP service.
+ *
+ * @param $url a string giving the URL of the service, including the mailing box
+ * for IMAP URLs, as accepted by imap_open().
+ * @param $flags options given to imap_open().
+ * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
+ * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
+ * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
+ * @param $err_msg an error message on failure
+ * @param $pt the Proxy Ticket (PT) retrieved from the CAS server to access the URL
+ * on success, FALSE on error).
+ *
+ * @return an IMAP stream on success, FALSE otherwise (in this later case, $err_code
+ * gives the reason why it failed and $err_msg contains an error message).
+ */
+ function serviceMail($url,$flags,&$err_code,&$err_msg,&$pt)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+
+ if ( gettype($flags) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $flags (should be `integer\')');
+ }
+
+ $res = $PHPCAS_CLIENT->serviceMail($url,$flags,$err_code,$err_msg,$pt);
+
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /** @} */
+ // ########################################################################
+ // AUTHENTICATION
+ // ########################################################################
+ /**
+ * @addtogroup publicAuth
+ * @{
+ */
+
+ /**
+ * Set the times authentication will be cached before really accessing the CAS server in gateway mode:
+ * - -1: check only once, and then never again (until you pree login)
+ * - 0: always check
+ * - n: check every "n" time
+ *
+ * @param $n an integer.
+ */
+ function setCacheTimesForAuthRecheck($n)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($n) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $header (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCacheTimesForAuthRecheck($n);
+ }
+
+ /**
+ * This method is called to check if the user is authenticated (use the gateway feature).
+ * @return TRUE when the user is authenticated; otherwise FALSE.
+ */
+ function checkAuthentication()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ $auth = $PHPCAS_CLIENT->checkAuthentication();
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__,
+ 'result' => $auth );
+ phpCAS::traceEnd($auth);
+ return $auth;
+ }
+
+ /**
+ * This method is called to force authentication if the user was not already
+ * authenticated. If the user is not authenticated, halt by redirecting to
+ * the CAS server.
+ */
+ function forceAuthentication()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ $auth = $PHPCAS_CLIENT->forceAuthentication();
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__,
+ 'result' => $auth );
+
+ if ( !$auth ) {
+ phpCAS::trace('user is not authenticated, redirecting to the CAS server');
+ $PHPCAS_CLIENT->forceAuthentication();
+ } else {
+ phpCAS::trace('no need to authenticate (user `'.phpCAS::getUser().'\' is already authenticated)');
+ }
+
+ phpCAS::traceEnd();
+ return $auth;
+ }
+
+ /**
+ * This method is called to renew the authentication.
+ **/
+ function renewAuthentication() {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before'.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE, 'file' => $dbg[0]['file'], 'line' => $dbg[0]['line'], 'method' => __CLASS__.'::'.__FUNCTION__, 'result' => $auth );
+
+ $PHPCAS_CLIENT->renewAuthentication();
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method has been left from version 0.4.1 for compatibility reasons.
+ */
+ function authenticate()
+ {
+ phpCAS::error('this method is deprecated. You should use '.__CLASS__.'::forceAuthentication() instead');
+ }
+
+ /**
+ * This method is called to check if the user is authenticated (previously or by
+ * tickets given in the URL).
+ *
+ * @return TRUE when the user is authenticated.
+ */
+ function isAuthenticated()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ // call the isAuthenticated method of the global $PHPCAS_CLIENT object
+ $auth = $PHPCAS_CLIENT->isAuthenticated();
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__,
+ 'result' => $auth );
+ phpCAS::traceEnd($auth);
+ return $auth;
+ }
+
+ /**
+ * Checks whether authenticated based on $_SESSION. Useful to avoid
+ * server calls.
+ * @return true if authenticated, false otherwise.
+ * @since 0.4.22 by Brendan Arnold
+ */
+ function isSessionAuthenticated ()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return($PHPCAS_CLIENT->isSessionAuthenticated());
+ }
+
+ /**
+ * This method returns the CAS user's login name.
+ * @warning should not be called only after phpCAS::forceAuthentication()
+ * or phpCAS::checkAuthentication().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getUser()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ return $PHPCAS_CLIENT->getUser();
+ }
+
+ /**
+ * Handle logout requests.
+ */
+ function handleLogoutRequests($check_client=true, $allowed_clients=false)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return($PHPCAS_CLIENT->handleLogoutRequests($check_client, $allowed_clients));
+ }
+
+ /**
+ * This method returns the URL to be used to login.
+ * or phpCAS::isAuthenticated().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getServerLoginURL()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return $PHPCAS_CLIENT->getServerLoginURL();
+ }
+
+ /**
+ * Set the login URL of the CAS server.
+ * @param $url the login URL
+ * @since 0.4.21 by Wyman Chan
+ */
+ function setServerLoginURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerLoginURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method returns the URL to be used to login.
+ * or phpCAS::isAuthenticated().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getServerLogoutURL()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return $PHPCAS_CLIENT->getServerLogoutURL();
+ }
+
+ /**
+ * Set the logout URL of the CAS server.
+ * @param $url the logout URL
+ * @since 0.4.21 by Wyman Chan
+ */
+ function setServerLogoutURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerLogoutURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS.
+ * @params $params an array that contains the optional url and service parameters that will be passed to the CAS server
+ * @public
+ */
+ function logout($params = "") {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if (!is_object($PHPCAS_CLIENT)) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ $parsedParams = array();
+ if ($params != "") {
+ if (is_string($params)) {
+ phpCAS::error('method `phpCAS::logout($url)\' is now deprecated, use `phpCAS::logoutWithUrl($url)\' instead');
+ }
+ if (!is_array($params)) {
+ phpCAS::error('type mismatched for parameter $params (should be `array\')');
+ }
+ foreach ($params as $key => $value) {
+ if ($key != "service" && $key != "url") {
+ phpCAS::error('only `url\' and `service\' parameters are allowed for method `phpCAS::logout($params)\'');
+ }
+ $parsedParams[$key] = $value;
+ }
+ }
+ $PHPCAS_CLIENT->logout($parsedParams);
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS. Halts by redirecting to the CAS server.
+ * @param $service a URL that will be transmitted to the CAS server
+ */
+ function logoutWithRedirectService($service) {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if (!is_string($service)) {
+ phpCAS::error('type mismatched for parameter $service (should be `string\')');
+ }
+ $PHPCAS_CLIENT->logout(array("service" => $service));
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS. Halts by redirecting to the CAS server.
+ * @param $url a URL that will be transmitted to the CAS server
+ */
+ function logoutWithUrl($url) {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if (!is_string($url)) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->logout(array("url" => $url));
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS. Halts by redirecting to the CAS server.
+ * @param $service a URL that will be transmitted to the CAS server
+ * @param $url a URL that will be transmitted to the CAS server
+ */
+ function logoutWithRedirectServiceAndUrl($service, $url) {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if (!is_string($service)) {
+ phpCAS::error('type mismatched for parameter $service (should be `string\')');
+ }
+ if (!is_string($url)) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->logout(array("service" => $service, "url" => $url));
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the fixed URL that will be used by the CAS server to transmit the PGT.
+ * When this method is not called, a phpCAS script uses its own URL for the callback.
+ *
+ * @param $url the URL
+ */
+ function setFixedCallbackURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCallbackURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the fixed URL that will be set as the CAS service parameter. When this
+ * method is not called, a phpCAS script uses its own URL.
+ *
+ * @param $url the URL
+ */
+ function setFixedServiceURL($url)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Get the URL that is set as the CAS service parameter.
+ */
+ function getServiceURL()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ return($PHPCAS_CLIENT->getURL());
+ }
+
+ /**
+ * Retrieve a Proxy Ticket from the CAS server.
+ */
+ function retrievePT($target_service,&$err_code,&$err_msg)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($target_service) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $target_service(should be `string\')');
+ }
+ return($PHPCAS_CLIENT->retrievePT($target_service,$err_code,$err_msg));
+ }
+
+ /**
+ * Set the certificate of the CAS server.
+ *
+ * @param $cert the PEM certificate
+ */
+ function setCasServerCert($cert)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if ( gettype($cert) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $cert (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCasServerCert($cert);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the certificate of the CAS server CA.
+ *
+ * @param $cert the CA certificate
+ */
+ function setCasServerCACert($cert)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if ( gettype($cert) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $cert (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCasServerCACert($cert);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set no SSL validation for the CAS server.
+ */
+ function setNoCasServerValidation()
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ $PHPCAS_CLIENT->setNoCasServerValidation();
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+
+ /**
+ * Change CURL options.
+ * CURL is used to connect through HTTPS to CAS server
+ * @param $key the option key
+ * @param $value the value to set
+ */
+ function setExtraCurlOption($key, $value)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ $PHPCAS_CLIENT->setExtraCurlOption($key, $value);
+ phpCAS::traceEnd();
+ }
+
+}
+
+// ########################################################################
+// DOCUMENTATION
+// ########################################################################
+
+// ########################################################################
+// MAIN PAGE
+
+/**
+ * @mainpage
+ *
+ * The following pages only show the source documentation.
+ *
+ */
+
+// ########################################################################
+// MODULES DEFINITION
+
+/** @defgroup public User interface */
+
+/** @defgroup publicInit Initialization
+ * @ingroup public */
+
+/** @defgroup publicAuth Authentication
+ * @ingroup public */
+
+/** @defgroup publicServices Access to external services
+ * @ingroup public */
+
+/** @defgroup publicConfig Configuration
+ * @ingroup public */
+
+/** @defgroup publicLang Internationalization
+ * @ingroup publicConfig */
+
+/** @defgroup publicOutput HTML output
+ * @ingroup publicConfig */
+
+/** @defgroup publicPGTStorage PGT storage
+ * @ingroup publicConfig */
+
+/** @defgroup publicDebug Debugging
+ * @ingroup public */
+
+
+/** @defgroup internal Implementation */
+
+/** @defgroup internalAuthentication Authentication
+ * @ingroup internal */
+
+/** @defgroup internalBasic CAS Basic client features (CAS 1.0, Service Tickets)
+ * @ingroup internal */
+
+/** @defgroup internalProxy CAS Proxy features (CAS 2.0, Proxy Granting Tickets)
+ * @ingroup internal */
+
+/** @defgroup internalPGTStorage PGT storage
+ * @ingroup internalProxy */
+
+/** @defgroup internalPGTStorageDB PGT storage in a database
+ * @ingroup internalPGTStorage */
+
+/** @defgroup internalPGTStorageFile PGT storage on the filesystem
+ * @ingroup internalPGTStorage */
+
+/** @defgroup internalCallback Callback from the CAS server
+ * @ingroup internalProxy */
+
+/** @defgroup internalProxied CAS proxied client features (CAS 2.0, Proxy Tickets)
+ * @ingroup internal */
+
+/** @defgroup internalConfig Configuration
+ * @ingroup internal */
+
+/** @defgroup internalOutput HTML output
+ * @ingroup internalConfig */
+
+/** @defgroup internalLang Internationalization
+ * @ingroup internalConfig
+ *
+ * To add a new language:
+ * - 1. define a new constant PHPCAS_LANG_XXXXXX in CAS/CAS.php
+ * - 2. copy any file from CAS/languages to CAS/languages/XXXXXX.php
+ * - 3. Make the translations
+ */
+
+/** @defgroup internalDebug Debugging
+ * @ingroup internal */
+
+/** @defgroup internalMisc Miscellaneous
+ * @ingroup internal */
+
+// ########################################################################
+// EXAMPLES
+
+/**
+ * @example example_simple.php
+ */
+ /**
+ * @example example_proxy.php
+ */
+ /**
+ * @example example_proxy2.php
+ */
+ /**
+ * @example example_lang.php
+ */
+ /**
+ * @example example_html.php
+ */
+ /**
+ * @example example_file.php
+ */
+ /**
+ * @example example_db.php
+ */
+ /**
+ * @example example_service.php
+ */
+ /**
+ * @example example_session_proxy.php
+ */
+ /**
+ * @example example_session_service.php
+ */
+ /**
+ * @example example_gateway.php
+ */
+
+
+
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php
new file mode 100644
index 000000000..5a589e4b2
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php
@@ -0,0 +1,190 @@
+<?php
+
+/**
+ * @file CAS/PGTStorage/pgt-db.php
+ * Basic class for PGT database storage
+ */
+
+/**
+ * @class PGTStorageDB
+ * The PGTStorageDB class is a class for PGT database storage. An instance of
+ * this class is returned by CASClient::SetPGTStorageDB().
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * @ingroup internalPGTStorageDB
+ */
+
+class PGTStorageDB extends PGTStorage
+{
+ /**
+ * @addtogroup internalPGTStorageDB
+ * @{
+ */
+
+ /**
+ * a string representing a PEAR DB URL to connect to the database. Written by
+ * PGTStorageDB::PGTStorageDB(), read by getURL().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_url='';
+
+ /**
+ * This method returns the PEAR DB URL to use to connect to the database.
+ *
+ * @return a PEAR DB URL
+ *
+ * @private
+ */
+ function getURL()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * The handle of the connection to the database where PGT's are stored. Written by
+ * PGTStorageDB::init(), read by getLink().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_link = null;
+
+ /**
+ * This method returns the handle of the connection to the database where PGT's are
+ * stored.
+ *
+ * @return a handle of connection.
+ *
+ * @private
+ */
+ function getLink()
+ {
+ return $this->_link;
+ }
+
+ /**
+ * The name of the table where PGT's are stored. Written by
+ * PGTStorageDB::PGTStorageDB(), read by getTable().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_table = '';
+
+ /**
+ * This method returns the name of the table where PGT's are stored.
+ *
+ * @return the name of a table.
+ *
+ * @private
+ */
+ function getTable()
+ {
+ return $this->_table;
+ }
+
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * This method returns an informational string giving the type of storage
+ * used by the object (used for debugging purposes).
+ *
+ * @return an informational string.
+ * @public
+ */
+ function getStorageType()
+ {
+ return "database";
+ }
+
+ /**
+ * This method returns an informational string giving informations on the
+ * parameters of the storage.(used for debugging purposes).
+ *
+ * @public
+ */
+ function getStorageInfo()
+ {
+ return 'url=`'.$this->getURL().'\', table=`'.$this->getTable().'\'';
+ }
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+
+ /**
+ * The class constructor, called by CASClient::SetPGTStorageDB().
+ *
+ * @param $cas_parent the CASClient instance that creates the object.
+ * @param $user the user to access the data with
+ * @param $password the user's password
+ * @param $database_type the type of the database hosting the data
+ * @param $hostname the server hosting the database
+ * @param $port the port the server is listening on
+ * @param $database the name of the database
+ * @param $table the name of the table storing the data
+ *
+ * @public
+ */
+ function PGTStorageDB($cas_parent,$user,$password,$database_type,$hostname,$port,$database,$table)
+ {
+ phpCAS::traceBegin();
+
+ // call the ancestor's constructor
+ $this->PGTStorage($cas_parent);
+
+ if ( empty($database_type) ) $database_type = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE;
+ if ( empty($hostname) ) $hostname = CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME;
+ if ( $port==0 ) $port = CAS_PGT_STORAGE_DB_DEFAULT_PORT;
+ if ( empty($database) ) $database = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE;
+ if ( empty($table) ) $table = CAS_PGT_STORAGE_DB_DEFAULT_TABLE;
+
+ // build and store the PEAR DB URL
+ $this->_url = $database_type.':'.'//'.$user.':'.$password.'@'.$hostname.':'.$port.'/'.$database;
+
+ // XXX should use setURL and setTable
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * This method is used to initialize the storage. Halts on error.
+ *
+ * @public
+ */
+ function init()
+ {
+ phpCAS::traceBegin();
+ // if the storage has already been initialized, return immediatly
+ if ( $this->isInitialized() )
+ return;
+ // call the ancestor's method (mark as initialized)
+ parent::init();
+
+ //include phpDB library (the test was introduced in release 0.4.8 for
+ //the integration into Tikiwiki).
+ if (!class_exists('DB')) {
+ include_once('DB.php');
+ }
+
+ // try to connect to the database
+ $this->_link = DB::connect($this->getURL());
+ if ( DB::isError($this->_link) ) {
+ phpCAS::error('could not connect to database ('.DB::errorMessage($this->_link).')');
+ }
+ var_dump($this->_link);
+ phpCAS::traceBEnd();
+ }
+
+ /** @} */
+}
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php
new file mode 100644
index 000000000..bc07485b8
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php
@@ -0,0 +1,249 @@
+<?php
+
+/**
+ * @file CAS/PGTStorage/pgt-file.php
+ * Basic class for PGT file storage
+ */
+
+/**
+ * @class PGTStorageFile
+ * The PGTStorageFile class is a class for PGT file storage. An instance of
+ * this class is returned by CASClient::SetPGTStorageFile().
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * @ingroup internalPGTStorageFile
+ */
+
+class PGTStorageFile extends PGTStorage
+{
+ /**
+ * @addtogroup internalPGTStorageFile
+ * @{
+ */
+
+ /**
+ * a string telling where PGT's should be stored on the filesystem. Written by
+ * PGTStorageFile::PGTStorageFile(), read by getPath().
+ *
+ * @private
+ */
+ var $_path;
+
+ /**
+ * This method returns the name of the directory where PGT's should be stored
+ * on the filesystem.
+ *
+ * @return the name of a directory (with leading and trailing '/')
+ *
+ * @private
+ */
+ function getPath()
+ {
+ return $this->_path;
+ }
+
+ /**
+ * a string telling the format to use to store PGT's (plain or xml). Written by
+ * PGTStorageFile::PGTStorageFile(), read by getFormat().
+ *
+ * @private
+ */
+ var $_format;
+
+ /**
+ * This method returns the format to use when storing PGT's on the filesystem.
+ *
+ * @return a string corresponding to the format used (plain or xml).
+ *
+ * @private
+ */
+ function getFormat()
+ {
+ return $this->_format;
+ }
+
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * This method returns an informational string giving the type of storage
+ * used by the object (used for debugging purposes).
+ *
+ * @return an informational string.
+ * @public
+ */
+ function getStorageType()
+ {
+ return "file";
+ }
+
+ /**
+ * This method returns an informational string giving informations on the
+ * parameters of the storage.(used for debugging purposes).
+ *
+ * @return an informational string.
+ * @public
+ */
+ function getStorageInfo()
+ {
+ return 'path=`'.$this->getPath().'\', format=`'.$this->getFormat().'\'';
+ }
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+
+ /**
+ * The class constructor, called by CASClient::SetPGTStorageFile().
+ *
+ * @param $cas_parent the CASClient instance that creates the object.
+ * @param $format the format used to store the PGT's (`plain' and `xml' allowed).
+ * @param $path the path where the PGT's should be stored
+ *
+ * @public
+ */
+ function PGTStorageFile($cas_parent,$format,$path)
+ {
+ phpCAS::traceBegin();
+ // call the ancestor's constructor
+ $this->PGTStorage($cas_parent);
+
+ if (empty($format) ) $format = CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT;
+ if (empty($path) ) $path = CAS_PGT_STORAGE_FILE_DEFAULT_PATH;
+
+ // check that the path is an absolute path
+ if (getenv("OS")=="Windows_NT"){
+
+ if (!preg_match('`^[a-zA-Z]:`', $path)) {
+ phpCAS::error('an absolute path is needed for PGT storage to file');
+ }
+
+ }
+ else
+ {
+
+ if ( $path[0] != '/' ) {
+ phpCAS::error('an absolute path is needed for PGT storage to file');
+ }
+
+ // store the path (with a leading and trailing '/')
+ $path = preg_replace('|[/]*$|','/',$path);
+ $path = preg_replace('|^[/]*|','/',$path);
+ }
+
+ $this->_path = $path;
+ // check the format and store it
+ switch ($format) {
+ case CAS_PGT_STORAGE_FILE_FORMAT_PLAIN:
+ case CAS_PGT_STORAGE_FILE_FORMAT_XML:
+ $this->_format = $format;
+ break;
+ default:
+ phpCAS::error('unknown PGT file storage format (`'.CAS_PGT_STORAGE_FILE_FORMAT_PLAIN.'\' and `'.CAS_PGT_STORAGE_FILE_FORMAT_XML.'\' allowed)');
+ }
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * This method is used to initialize the storage. Halts on error.
+ *
+ * @public
+ */
+ function init()
+ {
+ phpCAS::traceBegin();
+ // if the storage has already been initialized, return immediatly
+ if ( $this->isInitialized() )
+ return;
+ // call the ancestor's method (mark as initialized)
+ parent::init();
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // PGT I/O
+ // ########################################################################
+
+ /**
+ * This method returns the filename corresponding to a PGT Iou.
+ *
+ * @param $pgt_iou the PGT iou.
+ *
+ * @return a filename
+ * @private
+ */
+ function getPGTIouFilename($pgt_iou)
+ {
+ phpCAS::traceBegin();
+ $filename = $this->getPath().$pgt_iou.'.'.$this->getFormat();
+ phpCAS::traceEnd($filename);
+ return $filename;
+ }
+
+ /**
+ * This method stores a PGT and its corresponding PGT Iou into a file. Echoes a
+ * warning on error.
+ *
+ * @param $pgt the PGT
+ * @param $pgt_iou the PGT iou
+ *
+ * @public
+ */
+ function write($pgt,$pgt_iou)
+ {
+ phpCAS::traceBegin();
+ $fname = $this->getPGTIouFilename($pgt_iou);
+ if ( $f=fopen($fname,"w") ) {
+ if ( fputs($f,$pgt) === FALSE ) {
+ phpCAS::error('could not write PGT to `'.$fname.'\'');
+ }
+ fclose($f);
+ } else {
+ phpCAS::error('could not open `'.$fname.'\'');
+ }
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method reads a PGT corresponding to a PGT Iou and deletes the
+ * corresponding file.
+ *
+ * @param $pgt_iou the PGT iou
+ *
+ * @return the corresponding PGT, or FALSE on error
+ *
+ * @public
+ */
+ function read($pgt_iou)
+ {
+ phpCAS::traceBegin();
+ $pgt = FALSE;
+ $fname = $this->getPGTIouFilename($pgt_iou);
+ if ( !($f=fopen($fname,"r")) ) {
+ phpCAS::trace('could not open `'.$fname.'\'');
+ } else {
+ if ( ($pgt=fgets($f)) === FALSE ) {
+ phpCAS::trace('could not read PGT from `'.$fname.'\'');
+ }
+ fclose($f);
+ }
+
+ // delete the PGT file
+ @unlink($fname);
+
+ phpCAS::traceEnd($pgt);
+ return $pgt;
+ }
+
+ /** @} */
+
+}
+
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php
new file mode 100644
index 000000000..cd9b49967
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php
@@ -0,0 +1,188 @@
+<?php
+
+/**
+ * @file CAS/PGTStorage/pgt-main.php
+ * Basic class for PGT storage
+ */
+
+/**
+ * @class PGTStorage
+ * The PGTStorage class is a generic class for PGT storage. This class should
+ * not be instanciated itself but inherited by specific PGT storage classes.
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * @ingroup internalPGTStorage
+ */
+
+class PGTStorage
+{
+ /**
+ * @addtogroup internalPGTStorage
+ * @{
+ */
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+
+ /**
+ * The constructor of the class, should be called only by inherited classes.
+ *
+ * @param $cas_parent the CASclient instance that creates the current object.
+ *
+ * @protected
+ */
+ function PGTStorage($cas_parent)
+ {
+ phpCAS::traceBegin();
+ if ( !$cas_parent->isProxy() ) {
+ phpCAS::error('defining PGT storage makes no sense when not using a CAS proxy');
+ }
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * This virtual method returns an informational string giving the type of storage
+ * used by the object (used for debugging purposes).
+ *
+ * @public
+ */
+ function getStorageType()
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ /**
+ * This virtual method returns an informational string giving informations on the
+ * parameters of the storage.(used for debugging purposes).
+ *
+ * @public
+ */
+ function getStorageInfo()
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ // ########################################################################
+ // ERROR HANDLING
+ // ########################################################################
+
+ /**
+ * string used to store an error message. Written by PGTStorage::setErrorMessage(),
+ * read by PGTStorage::getErrorMessage().
+ *
+ * @hideinitializer
+ * @private
+ * @deprecated not used.
+ */
+ var $_error_message=FALSE;
+
+ /**
+ * This method sets en error message, which can be read later by
+ * PGTStorage::getErrorMessage().
+ *
+ * @param $error_message an error message
+ *
+ * @protected
+ * @deprecated not used.
+ */
+ function setErrorMessage($error_message)
+ {
+ $this->_error_message = $error_message;
+ }
+
+ /**
+ * This method returns an error message set by PGTStorage::setErrorMessage().
+ *
+ * @return an error message when set by PGTStorage::setErrorMessage(), FALSE
+ * otherwise.
+ *
+ * @public
+ * @deprecated not used.
+ */
+ function getErrorMessage()
+ {
+ return $this->_error_message;
+ }
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * a boolean telling if the storage has already been initialized. Written by
+ * PGTStorage::init(), read by PGTStorage::isInitialized().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_initialized = FALSE;
+
+ /**
+ * This method tells if the storage has already been intialized.
+ *
+ * @return a boolean
+ *
+ * @protected
+ */
+ function isInitialized()
+ {
+ return $this->_initialized;
+ }
+
+ /**
+ * This virtual method initializes the object.
+ *
+ * @protected
+ */
+ function init()
+ {
+ $this->_initialized = TRUE;
+ }
+
+ // ########################################################################
+ // PGT I/O
+ // ########################################################################
+
+ /**
+ * This virtual method stores a PGT and its corresponding PGT Iuo.
+ * @note Should never be called.
+ *
+ * @param $pgt the PGT
+ * @param $pgt_iou the PGT iou
+ *
+ * @protected
+ */
+ function write($pgt,$pgt_iou)
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ /**
+ * This virtual method reads a PGT corresponding to a PGT Iou and deletes
+ * the corresponding storage entry.
+ * @note Should never be called.
+ *
+ * @param $pgt_iou the PGT iou
+ *
+ * @protected
+ */
+ function read($pgt_iou)
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ /** @} */
+
+}
+
+// include specific PGT storage classes
+include_once(dirname(__FILE__).'/pgt-file.php');
+include_once(dirname(__FILE__).'/pgt-db.php');
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/client.php b/plugins/CasAuthentication/extlib/CAS/client.php
new file mode 100644
index 000000000..bfea59052
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/client.php
@@ -0,0 +1,2297 @@
+<?php
+
+/**
+ * @file CAS/client.php
+ * Main class of the phpCAS library
+ */
+
+// include internationalization stuff
+include_once(dirname(__FILE__).'/languages/languages.php');
+
+// include PGT storage classes
+include_once(dirname(__FILE__).'/PGTStorage/pgt-main.php');
+
+/**
+ * @class CASClient
+ * The CASClient class is a client interface that provides CAS authentication
+ * to PHP applications.
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ */
+
+class CASClient
+{
+
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ // XX XX
+ // XX CONFIGURATION XX
+ // XX XX
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+
+ // ########################################################################
+ // HTML OUTPUT
+ // ########################################################################
+ /**
+ * @addtogroup internalOutput
+ * @{
+ */
+
+ /**
+ * This method filters a string by replacing special tokens by appropriate values
+ * and prints it. The corresponding tokens are taken into account:
+ * - __CAS_VERSION__
+ * - __PHPCAS_VERSION__
+ * - __SERVER_BASE_URL__
+ *
+ * Used by CASClient::PrintHTMLHeader() and CASClient::printHTMLFooter().
+ *
+ * @param $str the string to filter and output
+ *
+ * @private
+ */
+ function HTMLFilterOutput($str)
+ {
+ $str = str_replace('__CAS_VERSION__',$this->getServerVersion(),$str);
+ $str = str_replace('__PHPCAS_VERSION__',phpCAS::getVersion(),$str);
+ $str = str_replace('__SERVER_BASE_URL__',$this->getServerBaseURL(),$str);
+ echo $str;
+ }
+
+ /**
+ * A string used to print the header of HTML pages. Written by CASClient::setHTMLHeader(),
+ * read by CASClient::printHTMLHeader().
+ *
+ * @hideinitializer
+ * @private
+ * @see CASClient::setHTMLHeader, CASClient::printHTMLHeader()
+ */
+ var $_output_header = '';
+
+ /**
+ * This method prints the header of the HTML output (after filtering). If
+ * CASClient::setHTMLHeader() was not used, a default header is output.
+ *
+ * @param $title the title of the page
+ *
+ * @see HTMLFilterOutput()
+ * @private
+ */
+ function printHTMLHeader($title)
+ {
+ $this->HTMLFilterOutput(str_replace('__TITLE__',
+ $title,
+ (empty($this->_output_header)
+ ? '<html><head><title>__TITLE__</title></head><body><h1>__TITLE__</h1>'
+ : $this->_output_header)
+ )
+ );
+ }
+
+ /**
+ * A string used to print the footer of HTML pages. Written by CASClient::setHTMLFooter(),
+ * read by printHTMLFooter().
+ *
+ * @hideinitializer
+ * @private
+ * @see CASClient::setHTMLFooter, CASClient::printHTMLFooter()
+ */
+ var $_output_footer = '';
+
+ /**
+ * This method prints the footer of the HTML output (after filtering). If
+ * CASClient::setHTMLFooter() was not used, a default footer is output.
+ *
+ * @see HTMLFilterOutput()
+ * @private
+ */
+ function printHTMLFooter()
+ {
+ $this->HTMLFilterOutput(empty($this->_output_footer)
+ ?('<hr><address>phpCAS __PHPCAS_VERSION__ '.$this->getString(CAS_STR_USING_SERVER).' <a href="__SERVER_BASE_URL__">__SERVER_BASE_URL__</a> (CAS __CAS_VERSION__)</a></address></body></html>')
+ :$this->_output_footer);
+ }
+
+ /**
+ * This method set the HTML header used for all outputs.
+ *
+ * @param $header the HTML header.
+ *
+ * @public
+ */
+ function setHTMLHeader($header)
+ {
+ $this->_output_header = $header;
+ }
+
+ /**
+ * This method set the HTML footer used for all outputs.
+ *
+ * @param $footer the HTML footer.
+ *
+ * @public
+ */
+ function setHTMLFooter($footer)
+ {
+ $this->_output_footer = $footer;
+ }
+
+ /** @} */
+ // ########################################################################
+ // INTERNATIONALIZATION
+ // ########################################################################
+ /**
+ * @addtogroup internalLang
+ * @{
+ */
+ /**
+ * A string corresponding to the language used by phpCAS. Written by
+ * CASClient::setLang(), read by CASClient::getLang().
+
+ * @note debugging information is always in english (debug purposes only).
+ *
+ * @hideinitializer
+ * @private
+ * @sa CASClient::_strings, CASClient::getString()
+ */
+ var $_lang = '';
+
+ /**
+ * This method returns the language used by phpCAS.
+ *
+ * @return a string representing the language
+ *
+ * @private
+ */
+ function getLang()
+ {
+ if ( empty($this->_lang) )
+ $this->setLang(PHPCAS_LANG_DEFAULT);
+ return $this->_lang;
+ }
+
+ /**
+ * array containing the strings used by phpCAS. Written by CASClient::setLang(), read by
+ * CASClient::getString() and used by CASClient::setLang().
+ *
+ * @note This array is filled by instructions in CAS/languages/<$this->_lang>.php
+ *
+ * @private
+ * @see CASClient::_lang, CASClient::getString(), CASClient::setLang(), CASClient::getLang()
+ */
+ var $_strings;
+
+ /**
+ * This method returns a string depending on the language.
+ *
+ * @param $str the index of the string in $_string.
+ *
+ * @return the string corresponding to $index in $string.
+ *
+ * @private
+ */
+ function getString($str)
+ {
+ // call CASclient::getLang() to be sure the language is initialized
+ $this->getLang();
+
+ if ( !isset($this->_strings[$str]) ) {
+ trigger_error('string `'.$str.'\' not defined for language `'.$this->getLang().'\'',E_USER_ERROR);
+ }
+ return $this->_strings[$str];
+ }
+
+ /**
+ * This method is used to set the language used by phpCAS.
+ * @note Can be called only once.
+ *
+ * @param $lang a string representing the language.
+ *
+ * @public
+ * @sa CAS_LANG_FRENCH, CAS_LANG_ENGLISH
+ */
+ function setLang($lang)
+ {
+ // include the corresponding language file
+ include_once(dirname(__FILE__).'/languages/'.$lang.'.php');
+
+ if ( !is_array($this->_strings) ) {
+ trigger_error('language `'.$lang.'\' is not implemented',E_USER_ERROR);
+ }
+ $this->_lang = $lang;
+ }
+
+ /** @} */
+ // ########################################################################
+ // CAS SERVER CONFIG
+ // ########################################################################
+ /**
+ * @addtogroup internalConfig
+ * @{
+ */
+
+ /**
+ * a record to store information about the CAS server.
+ * - $_server["version"]: the version of the CAS server
+ * - $_server["hostname"]: the hostname of the CAS server
+ * - $_server["port"]: the port the CAS server is running on
+ * - $_server["uri"]: the base URI the CAS server is responding on
+ * - $_server["base_url"]: the base URL of the CAS server
+ * - $_server["login_url"]: the login URL of the CAS server
+ * - $_server["service_validate_url"]: the service validating URL of the CAS server
+ * - $_server["proxy_url"]: the proxy URL of the CAS server
+ * - $_server["proxy_validate_url"]: the proxy validating URL of the CAS server
+ * - $_server["logout_url"]: the logout URL of the CAS server
+ *
+ * $_server["version"], $_server["hostname"], $_server["port"] and $_server["uri"]
+ * are written by CASClient::CASClient(), read by CASClient::getServerVersion(),
+ * CASClient::getServerHostname(), CASClient::getServerPort() and CASClient::getServerURI().
+ *
+ * The other fields are written and read by CASClient::getServerBaseURL(),
+ * CASClient::getServerLoginURL(), CASClient::getServerServiceValidateURL(),
+ * CASClient::getServerProxyValidateURL() and CASClient::getServerLogoutURL().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_server = array(
+ 'version' => -1,
+ 'hostname' => 'none',
+ 'port' => -1,
+ 'uri' => 'none'
+ );
+
+ /**
+ * This method is used to retrieve the version of the CAS server.
+ * @return the version of the CAS server.
+ * @private
+ */
+ function getServerVersion()
+ {
+ return $this->_server['version'];
+ }
+
+ /**
+ * This method is used to retrieve the hostname of the CAS server.
+ * @return the hostname of the CAS server.
+ * @private
+ */
+ function getServerHostname()
+ { return $this->_server['hostname']; }
+
+ /**
+ * This method is used to retrieve the port of the CAS server.
+ * @return the port of the CAS server.
+ * @private
+ */
+ function getServerPort()
+ { return $this->_server['port']; }
+
+ /**
+ * This method is used to retrieve the URI of the CAS server.
+ * @return a URI.
+ * @private
+ */
+ function getServerURI()
+ { return $this->_server['uri']; }
+
+ /**
+ * This method is used to retrieve the base URL of the CAS server.
+ * @return a URL.
+ * @private
+ */
+ function getServerBaseURL()
+ {
+ // the URL is build only when needed
+ if ( empty($this->_server['base_url']) ) {
+ $this->_server['base_url'] = 'https://'
+ .$this->getServerHostname()
+ .':'
+ .$this->getServerPort()
+ .$this->getServerURI();
+ }
+ return $this->_server['base_url'];
+ }
+
+ /**
+ * This method is used to retrieve the login URL of the CAS server.
+ * @param $gateway true to check authentication, false to force it
+ * @param $renew true to force the authentication with the CAS server
+ * NOTE : It is recommended that CAS implementations ignore the
+ "gateway" parameter if "renew" is set
+ * @return a URL.
+ * @private
+ */
+ function getServerLoginURL($gateway=false,$renew=false) {
+ phpCAS::traceBegin();
+ // the URL is build only when needed
+ if ( empty($this->_server['login_url']) ) {
+ $this->_server['login_url'] = $this->getServerBaseURL();
+ $this->_server['login_url'] .= 'login?service=';
+ // $this->_server['login_url'] .= preg_replace('/&/','%26',$this->getURL());
+ $this->_server['login_url'] .= urlencode($this->getURL());
+ if($renew) {
+ // It is recommended that when the "renew" parameter is set, its value be "true"
+ $this->_server['login_url'] .= '&renew=true';
+ } elseif ($gateway) {
+ // It is recommended that when the "gateway" parameter is set, its value be "true"
+ $this->_server['login_url'] .= '&gateway=true';
+ }
+ }
+ phpCAS::traceEnd($this->_server['login_url']);
+ return $this->_server['login_url'];
+ }
+
+ /**
+ * This method sets the login URL of the CAS server.
+ * @param $url the login URL
+ * @private
+ * @since 0.4.21 by Wyman Chan
+ */
+ function setServerLoginURL($url)
+ {
+ return $this->_server['login_url'] = $url;
+ }
+
+ /**
+ * This method is used to retrieve the service validating URL of the CAS server.
+ * @return a URL.
+ * @private
+ */
+ function getServerServiceValidateURL()
+ {
+ // the URL is build only when needed
+ if ( empty($this->_server['service_validate_url']) ) {
+ switch ($this->getServerVersion()) {
+ case CAS_VERSION_1_0:
+ $this->_server['service_validate_url'] = $this->getServerBaseURL().'validate';
+ break;
+ case CAS_VERSION_2_0:
+ $this->_server['service_validate_url'] = $this->getServerBaseURL().'serviceValidate';
+ break;
+ }
+ }
+ // return $this->_server['service_validate_url'].'?service='.preg_replace('/&/','%26',$this->getURL());
+ return $this->_server['service_validate_url'].'?service='.urlencode($this->getURL());
+ }
+
+ /**
+ * This method is used to retrieve the proxy validating URL of the CAS server.
+ * @return a URL.
+ * @private
+ */
+ function getServerProxyValidateURL()
+ {
+ // the URL is build only when needed
+ if ( empty($this->_server['proxy_validate_url']) ) {
+ switch ($this->getServerVersion()) {
+ case CAS_VERSION_1_0:
+ $this->_server['proxy_validate_url'] = '';
+ break;
+ case CAS_VERSION_2_0:
+ $this->_server['proxy_validate_url'] = $this->getServerBaseURL().'proxyValidate';
+ break;
+ }
+ }
+ // return $this->_server['proxy_validate_url'].'?service='.preg_replace('/&/','%26',$this->getURL());
+ return $this->_server['proxy_validate_url'].'?service='.urlencode($this->getURL());
+ }
+
+ /**
+ * This method is used to retrieve the proxy URL of the CAS server.
+ * @return a URL.
+ * @private
+ */
+ function getServerProxyURL()
+ {
+ // the URL is build only when needed
+ if ( empty($this->_server['proxy_url']) ) {
+ switch ($this->getServerVersion()) {
+ case CAS_VERSION_1_0:
+ $this->_server['proxy_url'] = '';
+ break;
+ case CAS_VERSION_2_0:
+ $this->_server['proxy_url'] = $this->getServerBaseURL().'proxy';
+ break;
+ }
+ }
+ return $this->_server['proxy_url'];
+ }
+
+ /**
+ * This method is used to retrieve the logout URL of the CAS server.
+ * @return a URL.
+ * @private
+ */
+ function getServerLogoutURL()
+ {
+ // the URL is build only when needed
+ if ( empty($this->_server['logout_url']) ) {
+ $this->_server['logout_url'] = $this->getServerBaseURL().'logout';
+ }
+ return $this->_server['logout_url'];
+ }
+
+ /**
+ * This method sets the logout URL of the CAS server.
+ * @param $url the logout URL
+ * @private
+ * @since 0.4.21 by Wyman Chan
+ */
+ function setServerLogoutURL($url)
+ {
+ return $this->_server['logout_url'] = $url;
+ }
+
+ /**
+ * An array to store extra curl options.
+ */
+ var $_curl_options = array();
+
+ /**
+ * This method is used to set additional user curl options.
+ */
+ function setExtraCurlOption($key, $value)
+ {
+ $this->_curl_options[$key] = $value;
+ }
+
+ /**
+ * This method checks to see if the request is secured via HTTPS
+ * @return true if https, false otherwise
+ * @private
+ */
+ function isHttps() {
+ //if ( isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) ) {
+ //0.4.24 by Hinnack
+ if ( isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+ /**
+ * CASClient constructor.
+ *
+ * @param $server_version the version of the CAS server
+ * @param $proxy TRUE if the CAS client is a CAS proxy, FALSE otherwise
+ * @param $server_hostname the hostname of the CAS server
+ * @param $server_port the port the CAS server is running on
+ * @param $server_uri the URI the CAS server is responding on
+ * @param $start_session Have phpCAS start PHP sessions (default true)
+ *
+ * @return a newly created CASClient object
+ *
+ * @public
+ */
+ function CASClient(
+ $server_version,
+ $proxy,
+ $server_hostname,
+ $server_port,
+ $server_uri,
+ $start_session = true) {
+
+ phpCAS::traceBegin();
+
+ if (!$this->isLogoutRequest() && !empty($_GET['ticket']) && $start_session) {
+ // copy old session vars and destroy the current session
+ if (!isset($_SESSION)) {
+ session_start();
+ }
+ $old_session = $_SESSION;
+ session_destroy();
+ // set up a new session, of name based on the ticket
+ $session_id = preg_replace('/[^\w]/','',$_GET['ticket']);
+ phpCAS::LOG("Session ID: " . $session_id);
+ session_id($session_id);
+ if (!isset($_SESSION)) {
+ session_start();
+ }
+ // restore old session vars
+ $_SESSION = $old_session;
+ // Redirect to location without ticket.
+ header('Location: '.$this->getURL());
+ }
+
+ //activate session mechanism if desired
+ if (!$this->isLogoutRequest() && $start_session) {
+ session_start();
+ }
+
+ $this->_proxy = $proxy;
+
+ //check version
+ switch ($server_version) {
+ case CAS_VERSION_1_0:
+ if ( $this->isProxy() )
+ phpCAS::error('CAS proxies are not supported in CAS '
+ .$server_version);
+ break;
+ case CAS_VERSION_2_0:
+ break;
+ default:
+ phpCAS::error('this version of CAS (`'
+ .$server_version
+ .'\') is not supported by phpCAS '
+ .phpCAS::getVersion());
+ }
+ $this->_server['version'] = $server_version;
+
+ //check hostname
+ if ( empty($server_hostname)
+ || !preg_match('/[\.\d\-abcdefghijklmnopqrstuvwxyz]*/',$server_hostname) ) {
+ phpCAS::error('bad CAS server hostname (`'.$server_hostname.'\')');
+ }
+ $this->_server['hostname'] = $server_hostname;
+
+ //check port
+ if ( $server_port == 0
+ || !is_int($server_port) ) {
+ phpCAS::error('bad CAS server port (`'.$server_hostname.'\')');
+ }
+ $this->_server['port'] = $server_port;
+
+ //check URI
+ if ( !preg_match('/[\.\d\-_abcdefghijklmnopqrstuvwxyz\/]*/',$server_uri) ) {
+ phpCAS::error('bad CAS server URI (`'.$server_uri.'\')');
+ }
+ //add leading and trailing `/' and remove doubles
+ $server_uri = preg_replace('/\/\//','/','/'.$server_uri.'/');
+ $this->_server['uri'] = $server_uri;
+
+ //set to callback mode if PgtIou and PgtId CGI GET parameters are provided
+ if ( $this->isProxy() ) {
+ $this->setCallbackMode(!empty($_GET['pgtIou'])&&!empty($_GET['pgtId']));
+ }
+
+ if ( $this->isCallbackMode() ) {
+ //callback mode: check that phpCAS is secured
+ if ( !$this->isHttps() ) {
+ phpCAS::error('CAS proxies must be secured to use phpCAS; PGT\'s will not be received from the CAS server');
+ }
+ } else {
+ //normal mode: get ticket and remove it from CGI parameters for developpers
+ $ticket = (isset($_GET['ticket']) ? $_GET['ticket'] : null);
+ switch ($this->getServerVersion()) {
+ case CAS_VERSION_1_0: // check for a Service Ticket
+ if( preg_match('/^ST-/',$ticket) ) {
+ phpCAS::trace('ST \''.$ticket.'\' found');
+ //ST present
+ $this->setST($ticket);
+ //ticket has been taken into account, unset it to hide it to applications
+ unset($_GET['ticket']);
+ } else if ( !empty($ticket) ) {
+ //ill-formed ticket, halt
+ phpCAS::error('ill-formed ticket found in the URL (ticket=`'.htmlentities($ticket).'\')');
+ }
+ break;
+ case CAS_VERSION_2_0: // check for a Service or Proxy Ticket
+ if( preg_match('/^[SP]T-/',$ticket) ) {
+ phpCAS::trace('ST or PT \''.$ticket.'\' found');
+ $this->setPT($ticket);
+ unset($_GET['ticket']);
+ } else if ( !empty($ticket) ) {
+ //ill-formed ticket, halt
+ phpCAS::error('ill-formed ticket found in the URL (ticket=`'.htmlentities($ticket).'\')');
+ }
+ break;
+ }
+ }
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ // XX XX
+ // XX AUTHENTICATION XX
+ // XX XX
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+
+ /**
+ * @addtogroup internalAuthentication
+ * @{
+ */
+
+ /**
+ * The Authenticated user. Written by CASClient::setUser(), read by CASClient::getUser().
+ * @attention client applications should use phpCAS::getUser().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_user = '';
+
+ /**
+ * This method sets the CAS user's login name.
+ *
+ * @param $user the login name of the authenticated user.
+ *
+ * @private
+ */
+ function setUser($user)
+ {
+ $this->_user = $user;
+ }
+
+ /**
+ * This method returns the CAS user's login name.
+ * @warning should be called only after CASClient::forceAuthentication() or
+ * CASClient::isAuthenticated(), otherwise halt with an error.
+ *
+ * @return the login name of the authenticated user
+ */
+ function getUser()
+ {
+ if ( empty($this->_user) ) {
+ phpCAS::error('this method should be used only after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
+ }
+ return $this->_user;
+ }
+
+ /**
+ * This method is called to renew the authentication of the user
+ * If the user is authenticated, renew the connection
+ * If not, redirect to CAS
+ * @public
+ */
+ function renewAuthentication(){
+ phpCAS::traceBegin();
+ // Either way, the user is authenticated by CAS
+ if( isset( $_SESSION['phpCAS']['auth_checked'] ) )
+ unset($_SESSION['phpCAS']['auth_checked']);
+ if ( $this->isAuthenticated() ) {
+ phpCAS::trace('user already authenticated; renew');
+ $this->redirectToCas(false,true);
+ } else {
+ $this->redirectToCas();
+ }
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is called to be sure that the user is authenticated. When not
+ * authenticated, halt by redirecting to the CAS server; otherwise return TRUE.
+ * @return TRUE when the user is authenticated; otherwise halt.
+ * @public
+ */
+ function forceAuthentication()
+ {
+ phpCAS::traceBegin();
+
+ if ( $this->isAuthenticated() ) {
+ // the user is authenticated, nothing to be done.
+ phpCAS::trace('no need to authenticate');
+ $res = TRUE;
+ } else {
+ // the user is not authenticated, redirect to the CAS server
+ if (isset($_SESSION['phpCAS']['auth_checked'])) {
+ unset($_SESSION['phpCAS']['auth_checked']);
+ }
+ $this->redirectToCas(FALSE/* no gateway */);
+ // never reached
+ $res = FALSE;
+ }
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /**
+ * An integer that gives the number of times authentication will be cached before rechecked.
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_cache_times_for_auth_recheck = 0;
+
+ /**
+ * Set the number of times authentication will be cached before rechecked.
+ *
+ * @param $n an integer.
+ *
+ * @public
+ */
+ function setCacheTimesForAuthRecheck($n)
+ {
+ $this->_cache_times_for_auth_recheck = $n;
+ }
+
+ /**
+ * This method is called to check whether the user is authenticated or not.
+ * @return TRUE when the user is authenticated, FALSE otherwise.
+ * @public
+ */
+ function checkAuthentication()
+ {
+ phpCAS::traceBegin();
+
+ if ( $this->isAuthenticated() ) {
+ phpCAS::trace('user is authenticated');
+ $res = TRUE;
+ } else if (isset($_SESSION['phpCAS']['auth_checked'])) {
+ // the previous request has redirected the client to the CAS server with gateway=true
+ unset($_SESSION['phpCAS']['auth_checked']);
+ $res = FALSE;
+ } else {
+ // $_SESSION['phpCAS']['auth_checked'] = true;
+ // $this->redirectToCas(TRUE/* gateway */);
+ // // never reached
+ // $res = FALSE;
+ // avoid a check against CAS on every request
+ if (! isset($_SESSION['phpCAS']['unauth_count']) )
+ $_SESSION['phpCAS']['unauth_count'] = -2; // uninitialized
+
+ if (($_SESSION['phpCAS']['unauth_count'] != -2 && $this->_cache_times_for_auth_recheck == -1)
+ || ($_SESSION['phpCAS']['unauth_count'] >= 0 && $_SESSION['phpCAS']['unauth_count'] < $this->_cache_times_for_auth_recheck))
+ {
+ $res = FALSE;
+
+ if ($this->_cache_times_for_auth_recheck != -1)
+ {
+ $_SESSION['phpCAS']['unauth_count']++;
+ phpCAS::trace('user is not authenticated (cached for '.$_SESSION['phpCAS']['unauth_count'].' times of '.$this->_cache_times_for_auth_recheck.')');
+ }
+ else
+ {
+ phpCAS::trace('user is not authenticated (cached for until login pressed)');
+ }
+ }
+ else
+ {
+ $_SESSION['phpCAS']['unauth_count'] = 0;
+ $_SESSION['phpCAS']['auth_checked'] = true;
+ phpCAS::trace('user is not authenticated (cache reset)');
+ $this->redirectToCas(TRUE/* gateway */);
+ // never reached
+ $res = FALSE;
+ }
+ }
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /**
+ * This method is called to check if the user is authenticated (previously or by
+ * tickets given in the URL).
+ *
+ * @return TRUE when the user is authenticated.
+ *
+ * @public
+ */
+ function isAuthenticated()
+ {
+ phpCAS::traceBegin();
+ $res = FALSE;
+ $validate_url = '';
+
+ if ( $this->wasPreviouslyAuthenticated() ) {
+ // the user has already (previously during the session) been
+ // authenticated, nothing to be done.
+ phpCAS::trace('user was already authenticated, no need to look for tickets');
+ $res = TRUE;
+ }
+ elseif ( $this->hasST() ) {
+ // if a Service Ticket was given, validate it
+ phpCAS::trace('ST `'.$this->getST().'\' is present');
+ $this->validateST($validate_url,$text_response,$tree_response); // if it fails, it halts
+ phpCAS::trace('ST `'.$this->getST().'\' was validated');
+ if ( $this->isProxy() ) {
+ $this->validatePGT($validate_url,$text_response,$tree_response); // idem
+ phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
+ $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ }
+ $_SESSION['phpCAS']['user'] = $this->getUser();
+ $res = TRUE;
+ }
+ elseif ( $this->hasPT() ) {
+ // if a Proxy Ticket was given, validate it
+ phpCAS::trace('PT `'.$this->getPT().'\' is present');
+ $this->validatePT($validate_url,$text_response,$tree_response); // note: if it fails, it halts
+ phpCAS::trace('PT `'.$this->getPT().'\' was validated');
+ if ( $this->isProxy() ) {
+ $this->validatePGT($validate_url,$text_response,$tree_response); // idem
+ phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
+ $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ }
+ $_SESSION['phpCAS']['user'] = $this->getUser();
+ $res = TRUE;
+ }
+ else {
+ // no ticket given, not authenticated
+ phpCAS::trace('no ticket found');
+ }
+
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /**
+ * This method tells if the current session is authenticated.
+ * @return true if authenticated based soley on $_SESSION variable
+ * @since 0.4.22 by Brendan Arnold
+ */
+ function isSessionAuthenticated ()
+ {
+ return !empty($_SESSION['phpCAS']['user']);
+ }
+
+ /**
+ * This method tells if the user has already been (previously) authenticated
+ * by looking into the session variables.
+ *
+ * @note This function switches to callback mode when needed.
+ *
+ * @return TRUE when the user has already been authenticated; FALSE otherwise.
+ *
+ * @private
+ */
+ function wasPreviouslyAuthenticated()
+ {
+ phpCAS::traceBegin();
+
+ if ( $this->isCallbackMode() ) {
+ $this->callback();
+ }
+
+ $auth = FALSE;
+
+ if ( $this->isProxy() ) {
+ // CAS proxy: username and PGT must be present
+ if ( $this->isSessionAuthenticated() && !empty($_SESSION['phpCAS']['pgt']) ) {
+ // authentication already done
+ $this->setUser($_SESSION['phpCAS']['user']);
+ $this->setPGT($_SESSION['phpCAS']['pgt']);
+ phpCAS::trace('user = `'.$_SESSION['phpCAS']['user'].'\', PGT = `'.$_SESSION['phpCAS']['pgt'].'\'');
+ $auth = TRUE;
+ } elseif ( $this->isSessionAuthenticated() && empty($_SESSION['phpCAS']['pgt']) ) {
+ // these two variables should be empty or not empty at the same time
+ phpCAS::trace('username found (`'.$_SESSION['phpCAS']['user'].'\') but PGT is empty');
+ // unset all tickets to enforce authentication
+ unset($_SESSION['phpCAS']);
+ $this->setST('');
+ $this->setPT('');
+ } elseif ( !$this->isSessionAuthenticated() && !empty($_SESSION['phpCAS']['pgt']) ) {
+ // these two variables should be empty or not empty at the same time
+ phpCAS::trace('PGT found (`'.$_SESSION['phpCAS']['pgt'].'\') but username is empty');
+ // unset all tickets to enforce authentication
+ unset($_SESSION['phpCAS']);
+ $this->setST('');
+ $this->setPT('');
+ } else {
+ phpCAS::trace('neither user not PGT found');
+ }
+ } else {
+ // `simple' CAS client (not a proxy): username must be present
+ if ( $this->isSessionAuthenticated() ) {
+ // authentication already done
+ $this->setUser($_SESSION['phpCAS']['user']);
+ phpCAS::trace('user = `'.$_SESSION['phpCAS']['user'].'\'');
+ $auth = TRUE;
+ } else {
+ phpCAS::trace('no user found');
+ }
+ }
+
+ phpCAS::traceEnd($auth);
+ return $auth;
+ }
+
+ /**
+ * This method is used to redirect the client to the CAS server.
+ * It is used by CASClient::forceAuthentication() and CASClient::checkAuthentication().
+ * @param $gateway true to check authentication, false to force it
+ * @param $renew true to force the authentication with the CAS server
+ * @public
+ */
+ function redirectToCas($gateway=false,$renew=false){
+ phpCAS::traceBegin();
+ $cas_url = $this->getServerLoginURL($gateway,$renew);
+ header('Location: '.$cas_url);
+ phpCAS::log( "Redirect to : ".$cas_url );
+
+ $this->printHTMLHeader($this->getString(CAS_STR_AUTHENTICATION_WANTED));
+
+ printf('<p>'.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'</p>',$cas_url);
+ $this->printHTMLFooter();
+ phpCAS::traceExit();
+ exit();
+ }
+
+// /**
+// * This method is used to logout from CAS.
+// * @param $url a URL that will be transmitted to the CAS server (to come back to when logged out)
+// * @public
+// */
+// function logout($url = "") {
+// phpCAS::traceBegin();
+// $cas_url = $this->getServerLogoutURL();
+// // v0.4.14 sebastien.gougeon at univ-rennes1.fr
+// // header('Location: '.$cas_url);
+// if ( $url != "" ) {
+// // Adam Moore 1.0.0RC2
+// $url = '?service=' . $url . '&url=' . $url;
+// }
+// header('Location: '.$cas_url . $url);
+// session_unset();
+// session_destroy();
+// $this->printHTMLHeader($this->getString(CAS_STR_LOGOUT));
+// printf('<p>'.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'</p>',$cas_url);
+// $this->printHTMLFooter();
+// phpCAS::traceExit();
+// exit();
+// }
+
+ /**
+ * This method is used to logout from CAS.
+ * @params $params an array that contains the optional url and service parameters that will be passed to the CAS server
+ * @public
+ */
+ function logout($params) {
+ phpCAS::traceBegin();
+ $cas_url = $this->getServerLogoutURL();
+ $paramSeparator = '?';
+ if (isset($params['url'])) {
+ $cas_url = $cas_url . $paramSeparator . "url=" . urlencode($params['url']);
+ $paramSeparator = '&';
+ }
+ if (isset($params['service'])) {
+ $cas_url = $cas_url . $paramSeparator . "service=" . urlencode($params['service']);
+ }
+ header('Location: '.$cas_url);
+ session_unset();
+ session_destroy();
+ $this->printHTMLHeader($this->getString(CAS_STR_LOGOUT));
+ printf('<p>'.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'</p>',$cas_url);
+ $this->printHTMLFooter();
+ phpCAS::traceExit();
+ exit();
+ }
+
+ /**
+ * @return true if the current request is a logout request.
+ * @private
+ */
+ function isLogoutRequest() {
+ return !empty($_POST['logoutRequest']);
+ }
+
+ /**
+ * @return true if a logout request is allowed.
+ * @private
+ */
+ function isLogoutRequestAllowed() {
+ }
+
+ /**
+ * This method handles logout requests.
+ * @param $check_client true to check the client bofore handling the request,
+ * false not to perform any access control. True by default.
+ * @param $allowed_clients an array of host names allowed to send logout requests.
+ * By default, only the CAs server (declared in the constructor) will be allowed.
+ * @public
+ */
+ function handleLogoutRequests($check_client=true, $allowed_clients=false) {
+ phpCAS::traceBegin();
+ if (!$this->isLogoutRequest()) {
+ phpCAS::log("Not a logout request");
+ phpCAS::traceEnd();
+ return;
+ }
+ phpCAS::log("Logout requested");
+ phpCAS::log("SAML REQUEST: ".$_POST['logoutRequest']);
+ if ($check_client) {
+ if (!$allowed_clients) {
+ $allowed_clients = array( $this->getServerHostname() );
+ }
+ $client_ip = $_SERVER['REMOTE_ADDR'];
+ $client = gethostbyaddr($client_ip);
+ phpCAS::log("Client: ".$client);
+ $allowed = false;
+ foreach ($allowed_clients as $allowed_client) {
+ if ($client == $allowed_client) {
+ phpCAS::log("Allowed client '".$allowed_client."' matches, logout request is allowed");
+ $allowed = true;
+ break;
+ } else {
+ phpCAS::log("Allowed client '".$allowed_client."' does not match");
+ }
+ }
+ if (!$allowed) {
+ phpCAS::error("Unauthorized logout request from client '".$client."'");
+ printf("Unauthorized!");
+ phpCAS::traceExit();
+ exit();
+ }
+ } else {
+ phpCAS::log("No access control set");
+ }
+ // Extract the ticket from the SAML Request
+ preg_match("|<samlp:SessionIndex>(.*)</samlp:SessionIndex>|", $_POST['logoutRequest'], $tick, PREG_OFFSET_CAPTURE, 3);
+ $wrappedSamlSessionIndex = preg_replace('|<samlp:SessionIndex>|','',$tick[0][0]);
+ $ticket2logout = preg_replace('|</samlp:SessionIndex>|','',$wrappedSamlSessionIndex);
+ phpCAS::log("Ticket to logout: ".$ticket2logout);
+ $session_id = preg_replace('/[^\w]/','',$ticket2logout);
+ phpCAS::log("Session id: ".$session_id);
+
+ // fix New session ID
+ session_id($session_id);
+ $_COOKIE[session_name()]=$session_id;
+ $_GET[session_name()]=$session_id;
+
+ // Overwrite session
+ session_start();
+ session_unset();
+ session_destroy();
+ printf("Disconnected!");
+ phpCAS::traceExit();
+ exit();
+ }
+
+ /** @} */
+
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ // XX XX
+ // XX BASIC CLIENT FEATURES (CAS 1.0) XX
+ // XX XX
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+
+ // ########################################################################
+ // ST
+ // ########################################################################
+ /**
+ * @addtogroup internalBasic
+ * @{
+ */
+
+ /**
+ * the Service Ticket provided in the URL of the request if present
+ * (empty otherwise). Written by CASClient::CASClient(), read by
+ * CASClient::getST() and CASClient::hasPGT().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_st = '';
+
+ /**
+ * This method returns the Service Ticket provided in the URL of the request.
+ * @return The service ticket.
+ * @private
+ */
+ function getST()
+ { return $this->_st; }
+
+ /**
+ * This method stores the Service Ticket.
+ * @param $st The Service Ticket.
+ * @private
+ */
+ function setST($st)
+ { $this->_st = $st; }
+
+ /**
+ * This method tells if a Service Ticket was stored.
+ * @return TRUE if a Service Ticket has been stored.
+ * @private
+ */
+ function hasST()
+ { return !empty($this->_st); }
+
+ /** @} */
+
+ // ########################################################################
+ // ST VALIDATION
+ // ########################################################################
+ /**
+ * @addtogroup internalBasic
+ * @{
+ */
+
+ /**
+ * the certificate of the CAS server.
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_cas_server_cert = '';
+
+ /**
+ * the certificate of the CAS server CA.
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_cas_server_ca_cert = '';
+
+ /**
+ * Set to true not to validate the CAS server.
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_no_cas_server_validation = false;
+
+ /**
+ * Set the certificate of the CAS server.
+ *
+ * @param $cert the PEM certificate
+ */
+ function setCasServerCert($cert)
+ {
+ $this->_cas_server_cert = $cert;
+ }
+
+ /**
+ * Set the CA certificate of the CAS server.
+ *
+ * @param $cert the PEM certificate of the CA that emited the cert of the server
+ */
+ function setCasServerCACert($cert)
+ {
+ $this->_cas_server_ca_cert = $cert;
+ }
+
+ /**
+ * Set no SSL validation for the CAS server.
+ */
+ function setNoCasServerValidation()
+ {
+ $this->_no_cas_server_validation = true;
+ }
+
+ /**
+ * This method is used to validate a ST; halt on failure, and sets $validate_url,
+ * $text_reponse and $tree_response on success. These parameters are used later
+ * by CASClient::validatePGT() for CAS proxies.
+ *
+ * @param $validate_url the URL of the request to the CAS server.
+ * @param $text_response the response of the CAS server, as is (XML text).
+ * @param $tree_response the response of the CAS server, as a DOM XML tree.
+ *
+ * @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
+ *
+ * @private
+ */
+ function validateST($validate_url,&$text_response,&$tree_response)
+ {
+ phpCAS::traceBegin();
+ // build the URL to validate the ticket
+ $validate_url = $this->getServerServiceValidateURL().'&ticket='.$this->getST();
+ if ( $this->isProxy() ) {
+ // pass the callback url for CAS proxies
+ $validate_url .= '&pgtUrl='.$this->getCallbackURL();
+ }
+
+ // open and read the URL
+ if ( !$this->readURL($validate_url,''/*cookies*/,$headers,$text_response,$err_msg) ) {
+ phpCAS::trace('could not open URL \''.$validate_url.'\' to validate ('.$err_msg.')');
+ $this->authError('ST not validated',
+ $validate_url,
+ TRUE/*$no_response*/);
+ }
+
+ // analyze the result depending on the version
+ switch ($this->getServerVersion()) {
+ case CAS_VERSION_1_0:
+ if (preg_match('/^no\n/',$text_response)) {
+ phpCAS::trace('ST has not been validated');
+ $this->authError('ST not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ FALSE/*$bad_response*/,
+ $text_response);
+ }
+ if (!preg_match('/^yes\n/',$text_response)) {
+ phpCAS::trace('ill-formed response');
+ $this->authError('ST not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // ST has been validated, extract the user name
+ $arr = preg_split('/\n/',$text_response);
+ $this->setUser(trim($arr[1]));
+ break;
+ case CAS_VERSION_2_0:
+ // read the response of the CAS server into a DOM object
+ if ( !($dom = domxml_open_mem($text_response))) {
+ phpCAS::trace('domxml_open_mem() failed');
+ $this->authError('ST not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // read the root node of the XML tree
+ if ( !($tree_response = $dom->document_element()) ) {
+ phpCAS::trace('document_element() failed');
+ $this->authError('ST not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // insure that tag name is 'serviceResponse'
+ if ( $tree_response->node_name() != 'serviceResponse' ) {
+ phpCAS::trace('bad XML root node (should be `serviceResponse\' instead of `'.$tree_response->node_name().'\'');
+ $this->authError('ST not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ if ( sizeof($success_elements = $tree_response->get_elements_by_tagname("authenticationSuccess")) != 0) {
+ // authentication succeded, extract the user name
+ if ( sizeof($user_elements = $success_elements[0]->get_elements_by_tagname("user")) == 0) {
+ phpCAS::trace('<authenticationSuccess> found, but no <user>');
+ $this->authError('ST not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ $user = trim($user_elements[0]->get_content());
+ phpCAS::trace('user = `'.$user);
+ $this->setUser($user);
+
+ } else if ( sizeof($failure_elements = $tree_response->get_elements_by_tagname("authenticationFailure")) != 0) {
+ phpCAS::trace('<authenticationFailure> found');
+ // authentication failed, extract the error code and message
+ $this->authError('ST not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ FALSE/*$bad_response*/,
+ $text_response,
+ $failure_elements[0]->get_attribute('code')/*$err_code*/,
+ trim($failure_elements[0]->get_content())/*$err_msg*/);
+ } else {
+ phpCAS::trace('neither <authenticationSuccess> nor <authenticationFailure> found');
+ $this->authError('ST not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ break;
+ }
+
+ // at this step, ST has been validated and $this->_user has been set,
+ phpCAS::traceEnd(TRUE);
+ return TRUE;
+ }
+
+ /** @} */
+
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ // XX XX
+ // XX PROXY FEATURES (CAS 2.0) XX
+ // XX XX
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+
+ // ########################################################################
+ // PROXYING
+ // ########################################################################
+ /**
+ * @addtogroup internalProxy
+ * @{
+ */
+
+ /**
+ * A boolean telling if the client is a CAS proxy or not. Written by CASClient::CASClient(),
+ * read by CASClient::isProxy().
+ *
+ * @private
+ */
+ var $_proxy;
+
+ /**
+ * Tells if a CAS client is a CAS proxy or not
+ *
+ * @return TRUE when the CAS client is a CAs proxy, FALSE otherwise
+ *
+ * @private
+ */
+ function isProxy()
+ {
+ return $this->_proxy;
+ }
+
+ /** @} */
+ // ########################################################################
+ // PGT
+ // ########################################################################
+ /**
+ * @addtogroup internalProxy
+ * @{
+ */
+
+ /**
+ * the Proxy Grnting Ticket given by the CAS server (empty otherwise).
+ * Written by CASClient::setPGT(), read by CASClient::getPGT() and CASClient::hasPGT().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_pgt = '';
+
+ /**
+ * This method returns the Proxy Granting Ticket given by the CAS server.
+ * @return The Proxy Granting Ticket.
+ * @private
+ */
+ function getPGT()
+ { return $this->_pgt; }
+
+ /**
+ * This method stores the Proxy Granting Ticket.
+ * @param $pgt The Proxy Granting Ticket.
+ * @private
+ */
+ function setPGT($pgt)
+ { $this->_pgt = $pgt; }
+
+ /**
+ * This method tells if a Proxy Granting Ticket was stored.
+ * @return TRUE if a Proxy Granting Ticket has been stored.
+ * @private
+ */
+ function hasPGT()
+ { return !empty($this->_pgt); }
+
+ /** @} */
+
+ // ########################################################################
+ // CALLBACK MODE
+ // ########################################################################
+ /**
+ * @addtogroup internalCallback
+ * @{
+ */
+ /**
+ * each PHP script using phpCAS in proxy mode is its own callback to get the
+ * PGT back from the CAS server. callback_mode is detected by the constructor
+ * thanks to the GET parameters.
+ */
+
+ /**
+ * a boolean to know if the CAS client is running in callback mode. Written by
+ * CASClient::setCallBackMode(), read by CASClient::isCallbackMode().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_callback_mode = FALSE;
+
+ /**
+ * This method sets/unsets callback mode.
+ *
+ * @param $callback_mode TRUE to set callback mode, FALSE otherwise.
+ *
+ * @private
+ */
+ function setCallbackMode($callback_mode)
+ {
+ $this->_callback_mode = $callback_mode;
+ }
+
+ /**
+ * This method returns TRUE when the CAs client is running i callback mode,
+ * FALSE otherwise.
+ *
+ * @return A boolean.
+ *
+ * @private
+ */
+ function isCallbackMode()
+ {
+ return $this->_callback_mode;
+ }
+
+ /**
+ * the URL that should be used for the PGT callback (in fact the URL of the
+ * current request without any CGI parameter). Written and read by
+ * CASClient::getCallbackURL().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_callback_url = '';
+
+ /**
+ * This method returns the URL that should be used for the PGT callback (in
+ * fact the URL of the current request without any CGI parameter, except if
+ * phpCAS::setFixedCallbackURL() was used).
+ *
+ * @return The callback URL
+ *
+ * @private
+ */
+ function getCallbackURL()
+ {
+ // the URL is built when needed only
+ if ( empty($this->_callback_url) ) {
+ $final_uri = '';
+ // remove the ticket if present in the URL
+ $final_uri = 'https://';
+ /* replaced by Julien Marchal - v0.4.6
+ * $this->uri .= $_SERVER['SERVER_NAME'];
+ */
+ if(empty($_SERVER['HTTP_X_FORWARDED_SERVER'])){
+ /* replaced by teedog - v0.4.12
+ * $final_uri .= $_SERVER['SERVER_NAME'];
+ */
+ if (empty($_SERVER['SERVER_NAME'])) {
+ $final_uri .= $_SERVER['HTTP_HOST'];
+ } else {
+ $final_uri .= $_SERVER['SERVER_NAME'];
+ }
+ } else {
+ $final_uri .= $_SERVER['HTTP_X_FORWARDED_SERVER'];
+ }
+ if ( ($this->isHttps() && $_SERVER['SERVER_PORT']!=443)
+ || (!$this->isHttps() && $_SERVER['SERVER_PORT']!=80) ) {
+ $final_uri .= ':';
+ $final_uri .= $_SERVER['SERVER_PORT'];
+ }
+ $request_uri = $_SERVER['REQUEST_URI'];
+ $request_uri = preg_replace('/\?.*$/','',$request_uri);
+ $final_uri .= $request_uri;
+ $this->setCallbackURL($final_uri);
+ }
+ return $this->_callback_url;
+ }
+
+ /**
+ * This method sets the callback url.
+ *
+ * @param $callback_url url to set callback
+ *
+ * @private
+ */
+ function setCallbackURL($url)
+ {
+ return $this->_callback_url = $url;
+ }
+
+ /**
+ * This method is called by CASClient::CASClient() when running in callback
+ * mode. It stores the PGT and its PGT Iou, prints its output and halts.
+ *
+ * @private
+ */
+ function callback()
+ {
+ phpCAS::traceBegin();
+ $this->printHTMLHeader('phpCAS callback');
+ $pgt_iou = $_GET['pgtIou'];
+ $pgt = $_GET['pgtId'];
+ phpCAS::trace('Storing PGT `'.$pgt.'\' (id=`'.$pgt_iou.'\')');
+ echo '<p>Storing PGT `'.$pgt.'\' (id=`'.$pgt_iou.'\').</p>';
+ $this->storePGT($pgt,$pgt_iou);
+ $this->printHTMLFooter();
+ phpCAS::traceExit();
+ }
+
+ /** @} */
+
+ // ########################################################################
+ // PGT STORAGE
+ // ########################################################################
+ /**
+ * @addtogroup internalPGTStorage
+ * @{
+ */
+
+ /**
+ * an instance of a class inheriting of PGTStorage, used to deal with PGT
+ * storage. Created by CASClient::setPGTStorageFile() or CASClient::setPGTStorageDB(), used
+ * by CASClient::setPGTStorageFile(), CASClient::setPGTStorageDB() and CASClient::initPGTStorage().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_pgt_storage = null;
+
+ /**
+ * This method is used to initialize the storage of PGT's.
+ * Halts on error.
+ *
+ * @private
+ */
+ function initPGTStorage()
+ {
+ // if no SetPGTStorageXxx() has been used, default to file
+ if ( !is_object($this->_pgt_storage) ) {
+ $this->setPGTStorageFile();
+ }
+
+ // initializes the storage
+ $this->_pgt_storage->init();
+ }
+
+ /**
+ * This method stores a PGT. Halts on error.
+ *
+ * @param $pgt the PGT to store
+ * @param $pgt_iou its corresponding Iou
+ *
+ * @private
+ */
+ function storePGT($pgt,$pgt_iou)
+ {
+ // ensure that storage is initialized
+ $this->initPGTStorage();
+ // writes the PGT
+ $this->_pgt_storage->write($pgt,$pgt_iou);
+ }
+
+ /**
+ * This method reads a PGT from its Iou and deletes the corresponding storage entry.
+ *
+ * @param $pgt_iou the PGT Iou
+ *
+ * @return The PGT corresponding to the Iou, FALSE when not found.
+ *
+ * @private
+ */
+ function loadPGT($pgt_iou)
+ {
+ // ensure that storage is initialized
+ $this->initPGTStorage();
+ // read the PGT
+ return $this->_pgt_storage->read($pgt_iou);
+ }
+
+ /**
+ * This method is used to tell phpCAS to store the response of the
+ * CAS server to PGT requests onto the filesystem.
+ *
+ * @param $format the format used to store the PGT's (`plain' and `xml' allowed)
+ * @param $path the path where the PGT's should be stored
+ *
+ * @public
+ */
+ function setPGTStorageFile($format='',
+ $path='')
+ {
+ // check that the storage has not already been set
+ if ( is_object($this->_pgt_storage) ) {
+ phpCAS::error('PGT storage already defined');
+ }
+
+ // create the storage object
+ $this->_pgt_storage = &new PGTStorageFile($this,$format,$path);
+ }
+
+ /**
+ * This method is used to tell phpCAS to store the response of the
+ * CAS server to PGT requests into a database.
+ * @note The connection to the database is done only when needed.
+ * As a consequence, bad parameters are detected only when
+ * initializing PGT storage.
+ *
+ * @param $user the user to access the data with
+ * @param $password the user's password
+ * @param $database_type the type of the database hosting the data
+ * @param $hostname the server hosting the database
+ * @param $port the port the server is listening on
+ * @param $database the name of the database
+ * @param $table the name of the table storing the data
+ *
+ * @public
+ */
+ function setPGTStorageDB($user,
+ $password,
+ $database_type,
+ $hostname,
+ $port,
+ $database,
+ $table)
+ {
+ // check that the storage has not already been set
+ if ( is_object($this->_pgt_storage) ) {
+ phpCAS::error('PGT storage already defined');
+ }
+
+ // warn the user that he should use file storage...
+ trigger_error('PGT storage into database is an experimental feature, use at your own risk',E_USER_WARNING);
+
+ // create the storage object
+ $this->_pgt_storage = & new PGTStorageDB($this,$user,$password,$database_type,$hostname,$port,$database,$table);
+ }
+
+ // ########################################################################
+ // PGT VALIDATION
+ // ########################################################################
+ /**
+ * This method is used to validate a PGT; halt on failure.
+ *
+ * @param $validate_url the URL of the request to the CAS server.
+ * @param $text_response the response of the CAS server, as is (XML text); result
+ * of CASClient::validateST() or CASClient::validatePT().
+ * @param $tree_response the response of the CAS server, as a DOM XML tree; result
+ * of CASClient::validateST() or CASClient::validatePT().
+ *
+ * @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
+ *
+ * @private
+ */
+ function validatePGT(&$validate_url,$text_response,$tree_response)
+ {
+ phpCAS::traceBegin();
+ if ( sizeof($arr = $tree_response->get_elements_by_tagname("proxyGrantingTicket")) == 0) {
+ phpCAS::trace('<proxyGrantingTicket> not found');
+ // authentication succeded, but no PGT Iou was transmitted
+ $this->authError('Ticket validated but no PGT Iou transmitted',
+ $validate_url,
+ FALSE/*$no_response*/,
+ FALSE/*$bad_response*/,
+ $text_response);
+ } else {
+ // PGT Iou transmitted, extract it
+ $pgt_iou = trim($arr[0]->get_content());
+ $pgt = $this->loadPGT($pgt_iou);
+ if ( $pgt == FALSE ) {
+ phpCAS::trace('could not load PGT');
+ $this->authError('PGT Iou was transmitted but PGT could not be retrieved',
+ $validate_url,
+ FALSE/*$no_response*/,
+ FALSE/*$bad_response*/,
+ $text_response);
+ }
+ $this->setPGT($pgt);
+ }
+ phpCAS::traceEnd(TRUE);
+ return TRUE;
+ }
+
+ // ########################################################################
+ // PGT VALIDATION
+ // ########################################################################
+
+ /**
+ * This method is used to retrieve PT's from the CAS server thanks to a PGT.
+ *
+ * @param $target_service the service to ask for with the PT.
+ * @param $err_code an error code (PHPCAS_SERVICE_OK on success).
+ * @param $err_msg an error message (empty on success).
+ *
+ * @return a Proxy Ticket, or FALSE on error.
+ *
+ * @private
+ */
+ function retrievePT($target_service,&$err_code,&$err_msg)
+ {
+ phpCAS::traceBegin();
+
+ // by default, $err_msg is set empty and $pt to TRUE. On error, $pt is
+ // set to false and $err_msg to an error message. At the end, if $pt is FALSE
+ // and $error_msg is still empty, it is set to 'invalid response' (the most
+ // commonly encountered error).
+ $err_msg = '';
+
+ // build the URL to retrieve the PT
+ // $cas_url = $this->getServerProxyURL().'?targetService='.preg_replace('/&/','%26',$target_service).'&pgt='.$this->getPGT();
+ $cas_url = $this->getServerProxyURL().'?targetService='.urlencode($target_service).'&pgt='.$this->getPGT();
+
+ // open and read the URL
+ if ( !$this->readURL($cas_url,''/*cookies*/,$headers,$cas_response,$err_msg) ) {
+ phpCAS::trace('could not open URL \''.$cas_url.'\' to validate ('.$err_msg.')');
+ $err_code = PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE;
+ $err_msg = 'could not retrieve PT (no response from the CAS server)';
+ phpCAS::traceEnd(FALSE);
+ return FALSE;
+ }
+
+ $bad_response = FALSE;
+
+ if ( !$bad_response ) {
+ // read the response of the CAS server into a DOM object
+ if ( !($dom = @domxml_open_mem($cas_response))) {
+ phpCAS::trace('domxml_open_mem() failed');
+ // read failed
+ $bad_response = TRUE;
+ }
+ }
+
+ if ( !$bad_response ) {
+ // read the root node of the XML tree
+ if ( !($root = $dom->document_element()) ) {
+ phpCAS::trace('document_element() failed');
+ // read failed
+ $bad_response = TRUE;
+ }
+ }
+
+ if ( !$bad_response ) {
+ // insure that tag name is 'serviceResponse'
+ if ( $root->node_name() != 'serviceResponse' ) {
+ phpCAS::trace('node_name() failed');
+ // bad root node
+ $bad_response = TRUE;
+ }
+ }
+
+ if ( !$bad_response ) {
+ // look for a proxySuccess tag
+ if ( sizeof($arr = $root->get_elements_by_tagname("proxySuccess")) != 0) {
+ // authentication succeded, look for a proxyTicket tag
+ if ( sizeof($arr = $root->get_elements_by_tagname("proxyTicket")) != 0) {
+ $err_code = PHPCAS_SERVICE_OK;
+ $err_msg = '';
+ phpCAS::trace('original PT: '.trim($arr[0]->get_content()));
+ $pt = trim($arr[0]->get_content());
+ phpCAS::traceEnd($pt);
+ return $pt;
+ } else {
+ phpCAS::trace('<proxySuccess> was found, but not <proxyTicket>');
+ }
+ }
+ // look for a proxyFailure tag
+ else if ( sizeof($arr = $root->get_elements_by_tagname("proxyFailure")) != 0) {
+ // authentication failed, extract the error
+ $err_code = PHPCAS_SERVICE_PT_FAILURE;
+ $err_msg = 'PT retrieving failed (code=`'
+ .$arr[0]->get_attribute('code')
+ .'\', message=`'
+ .trim($arr[0]->get_content())
+ .'\')';
+ phpCAS::traceEnd(FALSE);
+ return FALSE;
+ } else {
+ phpCAS::trace('neither <proxySuccess> nor <proxyFailure> found');
+ }
+ }
+
+ // at this step, we are sure that the response of the CAS server was ill-formed
+ $err_code = PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE;
+ $err_msg = 'Invalid response from the CAS server (response=`'.$cas_response.'\')';
+
+ phpCAS::traceEnd(FALSE);
+ return FALSE;
+ }
+
+ // ########################################################################
+ // ACCESS TO EXTERNAL SERVICES
+ // ########################################################################
+
+ /**
+ * This method is used to acces a remote URL.
+ *
+ * @param $url the URL to access.
+ * @param $cookies an array containing cookies strings such as 'name=val'
+ * @param $headers an array containing the HTTP header lines of the response
+ * (an empty array on failure).
+ * @param $body the body of the response, as a string (empty on failure).
+ * @param $err_msg an error message, filled on failure.
+ *
+ * @return TRUE on success, FALSE otherwise (in this later case, $err_msg
+ * contains an error message).
+ *
+ * @private
+ */
+ function readURL($url,$cookies,&$headers,&$body,&$err_msg)
+ {
+ phpCAS::traceBegin();
+ $headers = '';
+ $body = '';
+ $err_msg = '';
+
+ $res = TRUE;
+
+ // initialize the CURL session
+ $ch = curl_init($url);
+
+ if (version_compare(PHP_VERSION,'5.1.3','>=')) {
+ //only avaible in php5
+ curl_setopt_array($ch, $this->_curl_options);
+ } else {
+ foreach ($this->_curl_options as $key => $value) {
+ curl_setopt($ch, $key, $value);
+ }
+ }
+
+ if ($this->_cas_server_cert == '' && $this->_cas_server_ca_cert == '' && !$this->_no_cas_server_validation) {
+ phpCAS::error('one of the methods phpCAS::setCasServerCert(), phpCAS::setCasServerCACert() or phpCAS::setNoCasServerValidation() must be called.');
+ }
+ if ($this->_cas_server_cert != '' ) {
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
+ curl_setopt($ch, CURLOPT_SSLCERT, $this->_cas_server_cert);
+ } else if ($this->_cas_server_ca_cert != '') {
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
+ curl_setopt($ch, CURLOPT_CAINFO, $this->_cas_server_ca_cert);
+ } else {
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+ }
+
+ // return the CURL output into a variable
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ // get the HTTP header with a callback
+ $this->_curl_headers = array(); // empty the headers array
+ curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, '_curl_read_headers'));
+ // add cookies headers
+ if ( is_array($cookies) ) {
+ curl_setopt($ch,CURLOPT_COOKIE,implode(';',$cookies));
+ }
+ // perform the query
+ $buf = curl_exec ($ch);
+ if ( $buf === FALSE ) {
+ phpCAS::trace('curl_exec() failed');
+ $err_msg = 'CURL error #'.curl_errno($ch).': '.curl_error($ch);
+ // close the CURL session
+ curl_close ($ch);
+ $res = FALSE;
+ } else {
+ // close the CURL session
+ curl_close ($ch);
+
+ $headers = $this->_curl_headers;
+ $body = $buf;
+ }
+
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /**
+ * This method is the callback used by readURL method to request HTTP headers.
+ */
+ var $_curl_headers = array();
+ function _curl_read_headers($ch, $header)
+ {
+ $this->_curl_headers[] = $header;
+ return strlen($header);
+ }
+
+ /**
+ * This method is used to access an HTTP[S] service.
+ *
+ * @param $url the service to access.
+ * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
+ * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
+ * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
+ * @param $output the output of the service (also used to give an error
+ * message on failure).
+ *
+ * @return TRUE on success, FALSE otherwise (in this later case, $err_code
+ * gives the reason why it failed and $output contains an error message).
+ *
+ * @public
+ */
+ function serviceWeb($url,&$err_code,&$output)
+ {
+ phpCAS::traceBegin();
+ // at first retrieve a PT
+ $pt = $this->retrievePT($url,$err_code,$output);
+
+ $res = TRUE;
+
+ // test if PT was retrieved correctly
+ if ( !$pt ) {
+ // note: $err_code and $err_msg are filled by CASClient::retrievePT()
+ phpCAS::trace('PT was not retrieved correctly');
+ $res = FALSE;
+ } else {
+ // add cookies if necessary
+ if ( is_array($_SESSION['phpCAS']['services'][$url]['cookies']) ) {
+ foreach ( $_SESSION['phpCAS']['services'][$url]['cookies'] as $name => $val ) {
+ $cookies[] = $name.'='.$val;
+ }
+ }
+
+ // build the URL including the PT
+ if ( strstr($url,'?') === FALSE ) {
+ $service_url = $url.'?ticket='.$pt;
+ } else {
+ $service_url = $url.'&ticket='.$pt;
+ }
+
+ phpCAS::trace('reading URL`'.$service_url.'\'');
+ if ( !$this->readURL($service_url,$cookies,$headers,$output,$err_msg) ) {
+ phpCAS::trace('could not read URL`'.$service_url.'\'');
+ $err_code = PHPCAS_SERVICE_NOT_AVAILABLE;
+ // give an error message
+ $output = sprintf($this->getString(CAS_STR_SERVICE_UNAVAILABLE),
+ $service_url,
+ $err_msg);
+ $res = FALSE;
+ } else {
+ // URL has been fetched, extract the cookies
+ phpCAS::trace('URL`'.$service_url.'\' has been read, storing cookies:');
+ foreach ( $headers as $header ) {
+ // test if the header is a cookie
+ if ( preg_match('/^Set-Cookie:/',$header) ) {
+ // the header is a cookie, remove the beginning
+ $header_val = preg_replace('/^Set-Cookie: */','',$header);
+ // extract interesting information
+ $name_val = strtok($header_val,'; ');
+ // extract the name and the value of the cookie
+ $cookie_name = strtok($name_val,'=');
+ $cookie_val = strtok('=');
+ // store the cookie
+ $_SESSION['phpCAS']['services'][$url]['cookies'][$cookie_name] = $cookie_val;
+ phpCAS::trace($cookie_name.' -> '.$cookie_val);
+ }
+ }
+ }
+ }
+
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /**
+ * This method is used to access an IMAP/POP3/NNTP service.
+ *
+ * @param $url a string giving the URL of the service, including the mailing box
+ * for IMAP URLs, as accepted by imap_open().
+ * @param $flags options given to imap_open().
+ * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
+ * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
+ * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
+ * @param $err_msg an error message on failure
+ * @param $pt the Proxy Ticket (PT) retrieved from the CAS server to access the URL
+ * on success, FALSE on error).
+ *
+ * @return an IMAP stream on success, FALSE otherwise (in this later case, $err_code
+ * gives the reason why it failed and $err_msg contains an error message).
+ *
+ * @public
+ */
+ function serviceMail($url,$flags,&$err_code,&$err_msg,&$pt)
+ {
+ phpCAS::traceBegin();
+ // at first retrieve a PT
+ $pt = $this->retrievePT($target_service,$err_code,$output);
+
+ $stream = FALSE;
+
+ // test if PT was retrieved correctly
+ if ( !$pt ) {
+ // note: $err_code and $err_msg are filled by CASClient::retrievePT()
+ phpCAS::trace('PT was not retrieved correctly');
+ } else {
+ phpCAS::trace('opening IMAP URL `'.$url.'\'...');
+ $stream = @imap_open($url,$this->getUser(),$pt,$flags);
+ if ( !$stream ) {
+ phpCAS::trace('could not open URL');
+ $err_code = PHPCAS_SERVICE_NOT_AVAILABLE;
+ // give an error message
+ $err_msg = sprintf($this->getString(CAS_STR_SERVICE_UNAVAILABLE),
+ $service_url,
+ var_export(imap_errors(),TRUE));
+ $pt = FALSE;
+ $stream = FALSE;
+ } else {
+ phpCAS::trace('ok');
+ }
+ }
+
+ phpCAS::traceEnd($stream);
+ return $stream;
+ }
+
+ /** @} */
+
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ // XX XX
+ // XX PROXIED CLIENT FEATURES (CAS 2.0) XX
+ // XX XX
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+
+ // ########################################################################
+ // PT
+ // ########################################################################
+ /**
+ * @addtogroup internalProxied
+ * @{
+ */
+
+ /**
+ * the Proxy Ticket provided in the URL of the request if present
+ * (empty otherwise). Written by CASClient::CASClient(), read by
+ * CASClient::getPT() and CASClient::hasPGT().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_pt = '';
+
+ /**
+ * This method returns the Proxy Ticket provided in the URL of the request.
+ * @return The proxy ticket.
+ * @private
+ */
+ function getPT()
+ {
+ // return 'ST'.substr($this->_pt, 2);
+ return $this->_pt;
+ }
+
+ /**
+ * This method stores the Proxy Ticket.
+ * @param $pt The Proxy Ticket.
+ * @private
+ */
+ function setPT($pt)
+ { $this->_pt = $pt; }
+
+ /**
+ * This method tells if a Proxy Ticket was stored.
+ * @return TRUE if a Proxy Ticket has been stored.
+ * @private
+ */
+ function hasPT()
+ { return !empty($this->_pt); }
+
+ /** @} */
+ // ########################################################################
+ // PT VALIDATION
+ // ########################################################################
+ /**
+ * @addtogroup internalProxied
+ * @{
+ */
+
+ /**
+ * This method is used to validate a PT; halt on failure
+ *
+ * @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
+ *
+ * @private
+ */
+ function validatePT(&$validate_url,&$text_response,&$tree_response)
+ {
+ phpCAS::traceBegin();
+ // build the URL to validate the ticket
+ $validate_url = $this->getServerProxyValidateURL().'&ticket='.$this->getPT();
+
+ if ( $this->isProxy() ) {
+ // pass the callback url for CAS proxies
+ $validate_url .= '&pgtUrl='.$this->getCallbackURL();
+ }
+
+ // open and read the URL
+ if ( !$this->readURL($validate_url,''/*cookies*/,$headers,$text_response,$err_msg) ) {
+ phpCAS::trace('could not open URL \''.$validate_url.'\' to validate ('.$err_msg.')');
+ $this->authError('PT not validated',
+ $validate_url,
+ TRUE/*$no_response*/);
+ }
+
+ // read the response of the CAS server into a DOM object
+ if ( !($dom = domxml_open_mem($text_response))) {
+ // read failed
+ $this->authError('PT not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // read the root node of the XML tree
+ if ( !($tree_response = $dom->document_element()) ) {
+ // read failed
+ $this->authError('PT not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // insure that tag name is 'serviceResponse'
+ if ( $tree_response->node_name() != 'serviceResponse' ) {
+ // bad root node
+ $this->authError('PT not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ if ( sizeof($arr = $tree_response->get_elements_by_tagname("authenticationSuccess")) != 0) {
+ // authentication succeded, extract the user name
+ if ( sizeof($arr = $tree_response->get_elements_by_tagname("user")) == 0) {
+ // no user specified => error
+ $this->authError('PT not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ $this->setUser(trim($arr[0]->get_content()));
+
+ } else if ( sizeof($arr = $tree_response->get_elements_by_tagname("authenticationFailure")) != 0) {
+ // authentication succeded, extract the error code and message
+ $this->authError('PT not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ FALSE/*$bad_response*/,
+ $text_response,
+ $arr[0]->get_attribute('code')/*$err_code*/,
+ trim($arr[0]->get_content())/*$err_msg*/);
+ } else {
+ $this->authError('PT not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+
+ // at this step, PT has been validated and $this->_user has been set,
+
+ phpCAS::traceEnd(TRUE);
+ return TRUE;
+ }
+
+ /** @} */
+
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ // XX XX
+ // XX MISC XX
+ // XX XX
+ // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+
+ /**
+ * @addtogroup internalMisc
+ * @{
+ */
+
+ // ########################################################################
+ // URL
+ // ########################################################################
+ /**
+ * the URL of the current request (without any ticket CGI parameter). Written
+ * and read by CASClient::getURL().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_url = '';
+
+ /**
+ * This method returns the URL of the current request (without any ticket
+ * CGI parameter).
+ *
+ * @return The URL
+ *
+ * @private
+ */
+ function getURL()
+ {
+ phpCAS::traceBegin();
+ // the URL is built when needed only
+ if ( empty($this->_url) ) {
+ $final_uri = '';
+ // remove the ticket if present in the URL
+ $final_uri = ($this->isHttps()) ? 'https' : 'http';
+ $final_uri .= '://';
+ /* replaced by Julien Marchal - v0.4.6
+ * $this->_url .= $_SERVER['SERVER_NAME'];
+ */
+ if(empty($_SERVER['HTTP_X_FORWARDED_SERVER'])){
+ /* replaced by teedog - v0.4.12
+ * $this->_url .= $_SERVER['SERVER_NAME'];
+ */
+ if (empty($_SERVER['SERVER_NAME'])) {
+ $server_name = $_SERVER['HTTP_HOST'];
+ } else {
+ $server_name = $_SERVER['SERVER_NAME'];
+ }
+ } else {
+ $server_name = $_SERVER['HTTP_X_FORWARDED_SERVER'];
+ }
+ $final_uri .= $server_name;
+ if (!strpos($server_name, ':')) {
+ if ( ($this->isHttps() && $_SERVER['SERVER_PORT']!=443)
+ || (!$this->isHttps() && $_SERVER['SERVER_PORT']!=80) ) {
+ $final_uri .= ':';
+ $final_uri .= $_SERVER['SERVER_PORT'];
+ }
+ }
+
+ $final_uri .= strtok($_SERVER['REQUEST_URI'],"?");
+ $cgi_params = '?'.strtok("?");
+ // remove the ticket if present in the CGI parameters
+ $cgi_params = preg_replace('/&ticket=[^&]*/','',$cgi_params);
+ $cgi_params = preg_replace('/\?ticket=[^&;]*/','?',$cgi_params);
+ $cgi_params = preg_replace('/\?%26/','?',$cgi_params);
+ $cgi_params = preg_replace('/\?&/','?',$cgi_params);
+ $cgi_params = preg_replace('/\?$/','',$cgi_params);
+ $final_uri .= $cgi_params;
+ $this->setURL($final_uri);
+ }
+ phpCAS::traceEnd($this->_url);
+ return $this->_url;
+ }
+
+ /**
+ * This method sets the URL of the current request
+ *
+ * @param $url url to set for service
+ *
+ * @private
+ */
+ function setURL($url)
+ {
+ $this->_url = $url;
+ }
+
+ // ########################################################################
+ // AUTHENTICATION ERROR HANDLING
+ // ########################################################################
+ /**
+ * This method is used to print the HTML output when the user was not authenticated.
+ *
+ * @param $failure the failure that occured
+ * @param $cas_url the URL the CAS server was asked for
+ * @param $no_response the response from the CAS server (other
+ * parameters are ignored if TRUE)
+ * @param $bad_response bad response from the CAS server ($err_code
+ * and $err_msg ignored if TRUE)
+ * @param $cas_response the response of the CAS server
+ * @param $err_code the error code given by the CAS server
+ * @param $err_msg the error message given by the CAS server
+ *
+ * @private
+ */
+ function authError($failure,$cas_url,$no_response,$bad_response='',$cas_response='',$err_code='',$err_msg='')
+ {
+ phpCAS::traceBegin();
+
+ $this->printHTMLHeader($this->getString(CAS_STR_AUTHENTICATION_FAILED));
+ printf($this->getString(CAS_STR_YOU_WERE_NOT_AUTHENTICATED),$this->getURL(),$_SERVER['SERVER_ADMIN']);
+ phpCAS::trace('CAS URL: '.$cas_url);
+ phpCAS::trace('Authentication failure: '.$failure);
+ if ( $no_response ) {
+ phpCAS::trace('Reason: no response from the CAS server');
+ } else {
+ if ( $bad_response ) {
+ phpCAS::trace('Reason: bad response from the CAS server');
+ } else {
+ switch ($this->getServerVersion()) {
+ case CAS_VERSION_1_0:
+ phpCAS::trace('Reason: CAS error');
+ break;
+ case CAS_VERSION_2_0:
+ if ( empty($err_code) )
+ phpCAS::trace('Reason: no CAS error');
+ else
+ phpCAS::trace('Reason: ['.$err_code.'] CAS error: '.$err_msg);
+ break;
+ }
+ }
+ phpCAS::trace('CAS response: '.$cas_response);
+ }
+ $this->printHTMLFooter();
+ phpCAS::traceExit();
+ exit();
+ }
+
+ /** @} */
+}
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php b/plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php
new file mode 100644
index 000000000..d64747514
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php
@@ -0,0 +1,277 @@
+<?php
+/**
+ * @file domxml-php4-php5.php
+ * Require PHP5, uses built-in DOM extension.
+ * To be used in PHP4 scripts using DOMXML extension.
+ * Allows PHP4/DOMXML scripts to run on PHP5/DOM.
+ * (Requires PHP5/XSL extension for domxml_xslt functions)
+ *
+ * Typical use:
+ * <pre>
+ * {
+ * if (version_compare(PHP_VERSION,'5','>='))
+ * require_once('domxml-php4-to-php5.php');
+ * }
+ * </pre>
+ *
+ * Version 1.5.5, 2005-01-18, http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
+ *
+ * ------------------------------------------------------------------<br>
+ * Written by Alexandre Alapetite, http://alexandre.alapetite.net/cv/
+ *
+ * Copyright 2004, Licence: Creative Commons "Attribution-ShareAlike 2.0 France" BY-SA (FR),
+ * http://creativecommons.org/licenses/by-sa/2.0/fr/
+ * http://alexandre.alapetite.net/divers/apropos/#by-sa
+ * - Attribution. You must give the original author credit
+ * - Share Alike. If you alter, transform, or build upon this work,
+ * you may distribute the resulting work only under a license identical to this one
+ * - The French law is authoritative
+ * - Any of these conditions can be waived if you get permission from Alexandre Alapetite
+ * - Please send to Alexandre Alapetite the modifications you make,
+ * in order to improve this file for the benefit of everybody
+ *
+ * If you want to distribute this code, please do it as a link to:
+ * http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
+ */
+
+function domxml_new_doc($version) {return new php4DOMDocument('');}
+function domxml_open_file($filename) {return new php4DOMDocument($filename);}
+function domxml_open_mem($str)
+{
+ $dom=new php4DOMDocument('');
+ $dom->myDOMNode->loadXML($str);
+ return $dom;
+}
+function xpath_eval($xpath_context,$eval_str,$contextnode=null) {return $xpath_context->query($eval_str,$contextnode);}
+function xpath_new_context($dom_document) {return new php4DOMXPath($dom_document);}
+
+class php4DOMAttr extends php4DOMNode
+{
+ function php4DOMAttr($aDOMAttr) {$this->myDOMNode=$aDOMAttr;}
+ function Name() {return $this->myDOMNode->name;}
+ function Specified() {return $this->myDOMNode->specified;}
+ function Value() {return $this->myDOMNode->value;}
+}
+
+class php4DOMDocument extends php4DOMNode
+{
+ function php4DOMDocument($filename='')
+ {
+ $this->myDOMNode=new DOMDocument();
+ if ($filename!='') $this->myDOMNode->load($filename);
+ }
+ function create_attribute($name,$value)
+ {
+ $myAttr=$this->myDOMNode->createAttribute($name);
+ $myAttr->value=$value;
+ return new php4DOMAttr($myAttr,$this);
+ }
+ function create_cdata_section($content) {return new php4DOMNode($this->myDOMNode->createCDATASection($content),$this);}
+ function create_comment($data) {return new php4DOMNode($this->myDOMNode->createComment($data),$this);}
+ function create_element($name) {return new php4DOMElement($this->myDOMNode->createElement($name),$this);}
+ function create_text_node($content) {return new php4DOMNode($this->myDOMNode->createTextNode($content),$this);}
+ function document_element() {return new php4DOMElement($this->myDOMNode->documentElement,$this);}
+ function dump_file($filename,$compressionmode=false,$format=false) {return $this->myDOMNode->save($filename);}
+ function dump_mem($format=false,$encoding=false) {return $this->myDOMNode->saveXML();}
+ function get_element_by_id($id) {return new php4DOMElement($this->myDOMNode->getElementById($id),$this);}
+ function get_elements_by_tagname($name)
+ {
+ $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i))
+ {
+ $nodeSet[]=new php4DOMElement($node,$this);
+ $i++;
+ }
+ return $nodeSet;
+ }
+ function html_dump_mem() {return $this->myDOMNode->saveHTML();}
+ function root() {return new php4DOMElement($this->myDOMNode->documentElement,$this);}
+}
+
+class php4DOMElement extends php4DOMNode
+{
+ function get_attribute($name) {return $this->myDOMNode->getAttribute($name);}
+ function get_elements_by_tagname($name)
+ {
+ $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i))
+ {
+ $nodeSet[]=new php4DOMElement($node,$this->myOwnerDocument);
+ $i++;
+ }
+ return $nodeSet;
+ }
+ function has_attribute($name) {return $this->myDOMNode->hasAttribute($name);}
+ function remove_attribute($name) {return $this->myDOMNode->removeAttribute($name);}
+ function set_attribute($name,$value) {return $this->myDOMNode->setAttribute($name,$value);}
+ function tagname() {return $this->myDOMNode->tagName;}
+}
+
+class php4DOMNode
+{
+ var $myDOMNode;
+ var $myOwnerDocument;
+ function php4DOMNode($aDomNode,$aOwnerDocument)
+ {
+ $this->myDOMNode=$aDomNode;
+ $this->myOwnerDocument=$aOwnerDocument;
+ }
+ function __get($name)
+ {
+ if ($name=='type') return $this->myDOMNode->nodeType;
+ elseif ($name=='tagname') return $this->myDOMNode->tagName;
+ elseif ($name=='content') return $this->myDOMNode->textContent;
+ else
+ {
+ $myErrors=debug_backtrace();
+ trigger_error('Undefined property: '.get_class($this).'::$'.$name.' ['.$myErrors[0]['file'].':'.$myErrors[0]['line'].']',E_USER_NOTICE);
+ return false;
+ }
+ }
+ function append_child($newnode) {return new php4DOMElement($this->myDOMNode->appendChild($newnode->myDOMNode),$this->myOwnerDocument);}
+ function append_sibling($newnode) {return new php4DOMElement($this->myDOMNode->parentNode->appendChild($newnode->myDOMNode),$this->myOwnerDocument);}
+ function attributes()
+ {
+ $myDOMNodeList=$this->myDOMNode->attributes;
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i))
+ {
+ $nodeSet[]=new php4DOMAttr($node,$this->myOwnerDocument);
+ $i++;
+ }
+ return $nodeSet;
+ }
+ function child_nodes()
+ {
+ $myDOMNodeList=$this->myDOMNode->childNodes;
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i))
+ {
+ $nodeSet[]=new php4DOMElement($node,$this->myOwnerDocument);
+ $i++;
+ }
+ return $nodeSet;
+ }
+ function children() {return $this->child_nodes();}
+ function clone_node($deep=false) {return new php4DOMElement($this->myDOMNode->cloneNode($deep),$this->myOwnerDocument);}
+ function first_child() {return new php4DOMElement($this->myDOMNode->firstChild,$this->myOwnerDocument);}
+ function get_content() {return $this->myDOMNode->textContent;}
+ function has_attributes() {return $this->myDOMNode->hasAttributes();}
+ function has_child_nodes() {return $this->myDOMNode->hasChildNodes();}
+ function insert_before($newnode,$refnode) {return new php4DOMElement($this->myDOMNode->insertBefore($newnode->myDOMNode,$refnode->myDOMNode),$this->myOwnerDocument);}
+ function is_blank_node()
+ {
+ $myDOMNodeList=$this->myDOMNode->childNodes;
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i))
+ {
+ if (($node->nodeType==XML_ELEMENT_NODE)||
+ (($node->nodeType==XML_TEXT_NODE)&&!ereg('^([[:cntrl:]]|[[:space:]])*$',$node->nodeValue)))
+ return false;
+ $i++;
+ }
+ return true;
+ }
+ function last_child() {return new php4DOMElement($this->myDOMNode->lastChild,$this->myOwnerDocument);}
+ function new_child($name,$content)
+ {
+ $mySubNode=$this->myDOMNode->ownerDocument->createElement($name);
+ $mySubNode->appendChild($this->myDOMNode->ownerDocument->createTextNode($content));
+ $this->myDOMNode->appendChild($mySubNode);
+ return new php4DOMElement($mySubNode,$this->myOwnerDocument);
+ }
+ function next_sibling() {return new php4DOMElement($this->myDOMNode->nextSibling,$this->myOwnerDocument);}
+ function node_name() {return $this->myDOMNode->localName;}
+ function node_type() {return $this->myDOMNode->nodeType;}
+ function node_value() {return $this->myDOMNode->nodeValue;}
+ function owner_document() {return $this->myOwnerDocument;}
+ function parent_node() {return new php4DOMElement($this->myDOMNode->parentNode,$this->myOwnerDocument);}
+ function prefix() {return $this->myDOMNode->prefix;}
+ function previous_sibling() {return new php4DOMElement($this->myDOMNode->previousSibling,$this->myOwnerDocument);}
+ function remove_child($oldchild) {return new php4DOMElement($this->myDOMNode->removeChild($oldchild->myDOMNode),$this->myOwnerDocument);}
+ function replace_child($oldnode,$newnode) {return new php4DOMElement($this->myDOMNode->replaceChild($oldnode->myDOMNode,$newnode->myDOMNode),$this->myOwnerDocument);}
+ function set_content($text)
+ {
+ if (($this->myDOMNode->hasChildNodes())&&($this->myDOMNode->firstChild->nodeType==XML_TEXT_NODE))
+ $this->myDOMNode->removeChild($this->myDOMNode->firstChild);
+ return $this->myDOMNode->appendChild($this->myDOMNode->ownerDocument->createTextNode($text));
+ }
+}
+
+class php4DOMNodelist
+{
+ var $myDOMNodelist;
+ var $nodeset;
+ function php4DOMNodelist($aDOMNodelist,$aOwnerDocument)
+ {
+ $this->myDOMNodelist=$aDOMNodelist;
+ $this->nodeset=array();
+ $i=0;
+ if (isset($this->myDOMNodelist))
+ while ($node=$this->myDOMNodelist->item($i))
+ {
+ $this->nodeset[]=new php4DOMElement($node,$aOwnerDocument);
+ $i++;
+ }
+ }
+}
+
+class php4DOMXPath
+{
+ var $myDOMXPath;
+ var $myOwnerDocument;
+ function php4DOMXPath($dom_document)
+ {
+ $this->myOwnerDocument=$dom_document;
+ $this->myDOMXPath=new DOMXPath($dom_document->myDOMNode);
+ }
+ function query($eval_str,$contextnode)
+ {
+ if (isset($contextnode)) return new php4DOMNodelist($this->myDOMXPath->query($eval_str,$contextnode->myDOMNode),$this->myOwnerDocument);
+ else return new php4DOMNodelist($this->myDOMXPath->query($eval_str),$this->myOwnerDocument);
+ }
+ function xpath_register_ns($prefix,$namespaceURI) {return $this->myDOMXPath->registerNamespace($prefix,$namespaceURI);}
+}
+
+if (extension_loaded('xsl'))
+{//See also: http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/
+ function domxml_xslt_stylesheet($xslstring) {return new php4DomXsltStylesheet(DOMDocument::loadXML($xslstring));}
+ function domxml_xslt_stylesheet_doc($dom_document) {return new php4DomXsltStylesheet($dom_document);}
+ function domxml_xslt_stylesheet_file($xslfile) {return new php4DomXsltStylesheet(DOMDocument::load($xslfile));}
+ class php4DomXsltStylesheet
+ {
+ var $myxsltProcessor;
+ function php4DomXsltStylesheet($dom_document)
+ {
+ $this->myxsltProcessor=new xsltProcessor();
+ $this->myxsltProcessor->importStyleSheet($dom_document);
+ }
+ function process($dom_document,$xslt_parameters=array(),$param_is_xpath=false)
+ {
+ foreach ($xslt_parameters as $param=>$value)
+ $this->myxsltProcessor->setParameter('',$param,$value);
+ $myphp4DOMDocument=new php4DOMDocument();
+ $myphp4DOMDocument->myDOMNode=$this->myxsltProcessor->transformToDoc($dom_document->myDOMNode);
+ return $myphp4DOMDocument;
+ }
+ function result_dump_file($dom_document,$filename)
+ {
+ $html=$dom_document->myDOMNode->saveHTML();
+ file_put_contents($filename,$html);
+ return $html;
+ }
+ function result_dump_mem($dom_document) {return $dom_document->myDOMNode->saveHTML();}
+ }
+}
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/catalan.php b/plugins/CasAuthentication/extlib/CAS/languages/catalan.php
new file mode 100644
index 000000000..3d67473d9
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/languages/catalan.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file languages/spanish.php
+ * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'usant servidor',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'Autentificació CAS necessària!',
+ CAS_STR_LOGOUT
+ => 'Sortida de CAS necessària!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'Ja hauria d\ haver estat redireccionat al servidor CAS. Feu click <a href="%s">aquí</a> per a continuar.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'Autentificació CAS fallida!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>No estàs autentificat.</p><p>Pots tornar a intentar-ho fent click <a href="%s">aquí</a>.</p><p>Si el problema persisteix hauría de contactar amb l\'<a href="mailto:%s">administrador d\'aquest llocc</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'El servei `<b>%s</b>\' no està disponible (<b>%s</b>).'
+);
+
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/english.php b/plugins/CasAuthentication/extlib/CAS/languages/english.php
new file mode 100644
index 000000000..c14345031
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/languages/english.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file languages/english.php
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'using server',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'CAS Authentication wanted!',
+ CAS_STR_LOGOUT
+ => 'CAS logout wanted!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'You should already have been redirected to the CAS server. Click <a href="%s">here</a> to continue.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'CAS Authentication failed!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>You were not authenticated.</p><p>You may submit your request again by clicking <a href="%s">here</a>.</p><p>If the problem persists, you may contact <a href="mailto:%s">the administrator of this site</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'The service `<b>%s</b>\' is not available (<b>%s</b>).'
+);
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/french.php b/plugins/CasAuthentication/extlib/CAS/languages/french.php
new file mode 100644
index 000000000..675a7fc04
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/languages/french.php
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @file languages/english.php
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'utilisant le serveur',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'Authentication CAS ncessaire&nbsp;!',
+ CAS_STR_LOGOUT
+ => 'Dconnexion demande&nbsp;!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'Vous auriez du etre redirig(e) vers le serveur CAS. Cliquez <a href="%s">ici</a> pour continuer.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'Authentification CAS infructueuse&nbsp;!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>Vous n\'avez pas t authentifi(e).</p><p>Vous pouvez soumettre votre requete nouveau en cliquant <a href="%s">ici</a>.</p><p>Si le problme persiste, vous pouvez contacter <a href="mailto:%s">l\'administrateur de ce site</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'Le service `<b>%s</b>\' est indisponible (<b>%s</b>)'
+
+);
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/german.php b/plugins/CasAuthentication/extlib/CAS/languages/german.php
new file mode 100644
index 000000000..29daeb35d
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/languages/german.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file languages/german.php
+ * @author Henrik Genssen <hg at mediafactory.de>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'via Server',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'CAS Authentifizierung erforderlich!',
+ CAS_STR_LOGOUT
+ => 'CAS Abmeldung!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'eigentlich h&auml;ten Sie zum CAS Server weitergeleitet werden sollen. Dr&uuml;cken Sie <a href="%s">hier</a> um fortzufahren.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'CAS Anmeldung fehlgeschlagen!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>Sie wurden nicht angemeldet.</p><p>Um es erneut zu versuchen klicken Sie <a href="%s">hier</a>.</p><p>Wenn das Problem bestehen bleibt, kontkatieren Sie den <a href="mailto:%s">Administrator</a> dieser Seite.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'Der Dienst `<b>%s</b>\' ist nicht verf&uuml;gbar (<b>%s</b>).'
+);
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/greek.php b/plugins/CasAuthentication/extlib/CAS/languages/greek.php
new file mode 100644
index 000000000..c17b1d663
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/languages/greek.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file languages/greek.php
+ * @author Vangelis Haniotakis <haniotak at ucnet.uoc.gr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => ' ',
+ CAS_STR_AUTHENTICATION_WANTED
+ => ' CAS!',
+ CAS_STR_LOGOUT
+ => ' CAS!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => ' CAS. <a href="%s"></a> .',
+ CAS_STR_AUTHENTICATION_FAILED
+ => ' CAS !',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p> .</p><p> , <a href="%s"></a>.</p><p> , <a href="mailto:%s"></a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => ' `<b>%s</b>\' (<b>%s</b>).'
+);
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/japanese.php b/plugins/CasAuthentication/extlib/CAS/languages/japanese.php
new file mode 100644
index 000000000..333bb17b6
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/languages/japanese.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file languages/japanese.php
+ * @author fnorif (fnorif@yahoo.co.jp)
+ *
+ * Now Encoding is EUC-JP and LF
+ **/
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'using server',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'CASˤǧڤԤޤ',
+ CAS_STR_LOGOUT
+ => 'CASȤޤ!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'CASФ˹ԤɬפޤưŪžʤ <a href="%s"></a> 򥯥å³Ԥޤ',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'CASˤǧڤ˼Ԥޤ',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>ǧڤǤޤǤ.</p><p>⤦٥ꥯȤ<a href="%s"></a>򥯥å.</p><p>꤬褷ʤ <a href="mailto:%s">ΥȤδ</a>䤤碌Ƥ.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'ӥ `<b>%s</b>\' ѤǤޤ (<b>%s</b>).'
+);
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/languages.php b/plugins/CasAuthentication/extlib/CAS/languages/languages.php
new file mode 100644
index 000000000..2c6f8bb3b
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/languages/languages.php
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * @file languages/languages.php
+ * Internationalization constants
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+//@{
+/**
+ * a phpCAS string index
+ */
+define("CAS_STR_USING_SERVER", 1);
+define("CAS_STR_AUTHENTICATION_WANTED", 2);
+define("CAS_STR_LOGOUT", 3);
+define("CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED", 4);
+define("CAS_STR_AUTHENTICATION_FAILED", 5);
+define("CAS_STR_YOU_WERE_NOT_AUTHENTICATED", 6);
+define("CAS_STR_SERVICE_UNAVAILABLE", 7);
+//@}
+
+?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/spanish.php b/plugins/CasAuthentication/extlib/CAS/languages/spanish.php
new file mode 100644
index 000000000..3a8ffc253
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/languages/spanish.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file languages/spanish.php
+ * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'usando servidor',
+ CAS_STR_AUTHENTICATION_WANTED
+ => '¡Autentificación CAS necesaria!',
+ CAS_STR_LOGOUT
+ => '¡Salida CAS necesaria!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'Ya debería haber sido redireccionado al servidor CAS. Haga click <a href="%s">aquí</a> para continuar.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => '¡Autentificación CAS fallida!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>No estás autentificado.</p><p>Puedes volver a intentarlo haciendo click <a href="%s">aquí</a>.</p><p>Si el problema persiste debería contactar con el <a href="mailto:%s">administrador de este sitio</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'El servicio `<b>%s</b>\' no está disponible (<b>%s</b>).'
+);
+
+?>
diff --git a/plugins/GeonamesPlugin.php b/plugins/GeonamesPlugin.php
index df99c7849..805166eaa 100644
--- a/plugins/GeonamesPlugin.php
+++ b/plugins/GeonamesPlugin.php
@@ -76,38 +76,25 @@ class GeonamesPlugin extends Plugin
return false;
}
- $client = HTTPClient::start();
-
- // XXX: break down a name by commas, narrow by each
-
- $result = $client->get($this->wsUrl('search',
- array('maxRows' => 1,
- 'q' => $name,
- 'lang' => $language,
- 'type' => 'json')));
-
- if (!$result->isOk()) {
- $this->log(LOG_WARNING, "Error code " . $result->code .
- " from " . $this->host . " for $name");
+ try {
+ $geonames = $this->getGeonames('search',
+ array('maxRows' => 1,
+ 'q' => $name,
+ 'lang' => $language,
+ 'type' => 'xml'));
+ } catch (Exception $e) {
+ $this->log(LOG_WARNING, "Error for $name: " . $e->getMessage());
return true;
}
- $rj = json_decode($result->getBody());
-
- if (count($rj->geonames) <= 0) {
- $this->log(LOG_WARNING, "No results in response from " .
- $this->host . " for $name");
- return true;
- }
-
- $n = $rj->geonames[0];
+ $n = $geonames[0];
$location = new Location();
- $location->lat = $n->lat;
- $location->lon = $n->lng;
- $location->names[$language] = $n->name;
- $location->location_id = $n->geonameId;
+ $location->lat = (string)$n->lat;
+ $location->lon = (string)$n->lng;
+ $location->names[$language] = (string)$n->name;
+ $location->location_id = (string)$n->geonameId;
$location->location_ns = self::LOCATION_NS;
$this->setCache(array('name' => $name,
@@ -143,54 +130,41 @@ class GeonamesPlugin extends Plugin
return false;
}
- $client = HTTPClient::start();
-
- $result = $client->get($this->wsUrl('hierarchyJSON',
- array('geonameId' => $id,
- 'lang' => $language)));
-
- if (!$result->isOk()) {
- $this->log(LOG_WARNING,
- "Error code " . $result->code .
- " from " . $this->host . " for ID $id");
- return false;
- }
-
- $rj = json_decode($result->getBody());
-
- if (count($rj->geonames) <= 0) {
- $this->log(LOG_WARNING,
- "No results in response from " .
- $this->host . " for ID $id");
+ try {
+ $geonames = $this->getGeonames('hierarchy',
+ array('geonameId' => $id,
+ 'lang' => $language));
+ } catch (Exception $e) {
+ $this->log(LOG_WARNING, "Error for ID $id: " . $e->getMessage());
return false;
}
$parts = array();
- foreach ($rj->geonames as $level) {
+ foreach ($geonames as $level) {
if (in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
- $parts[] = $level->name;
+ $parts[] = (string)$level->name;
}
}
- $last = $rj->geonames[count($rj->geonames)-1];
+ $last = $geonames[count($geonames)-1];
if (!in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
- $parts[] = $last->name;
+ $parts[] = (string)$last->name;
}
$location = new Location();
- $location->location_id = $last->geonameId;
+ $location->location_id = (string)$last->geonameId;
$location->location_ns = self::LOCATION_NS;
- $location->lat = $last->lat;
- $location->lon = $last->lng;
+ $location->lat = (string)$last->lat;
+ $location->lon = (string)$last->lng;
$location->names[$language] = implode(', ', array_reverse($parts));
- $this->setCache(array('id' => $last->geonameId),
+ $this->setCache(array('id' => (string)$last->geonameId),
$location);
- // We're responsible for this NAMESPACE; nobody else
+ // We're responsible for this namespace; nobody else
// can resolve it
return false;
@@ -223,50 +197,36 @@ class GeonamesPlugin extends Plugin
return false;
}
- $client = HTTPClient::start();
-
- $result =
- $client->get($this->wsUrl('findNearbyPlaceNameJSON',
- array('lat' => $lat,
- 'lng' => $lon,
- 'lang' => $language)));
-
- if (!$result->isOk()) {
- $this->log(LOG_WARNING,
- "Error code " . $result->code .
- " from " . $this->host . " for coords $lat, $lon");
- return true;
- }
-
- $rj = json_decode($result->getBody());
-
- if (count($rj->geonames) <= 0) {
- $this->log(LOG_WARNING,
- "No results in response from " .
- $this->host . " for coords $lat, $lon");
+ try {
+ $geonames = $this->getGeonames('findNearbyPlaceName',
+ array('lat' => $lat,
+ 'lng' => $lon,
+ 'lang' => $language));
+ } catch (Exception $e) {
+ $this->log(LOG_WARNING, "Error for coords $lat, $lon: " . $e->getMessage());
return true;
}
- $n = $rj->geonames[0];
+ $n = $geonames[0];
$parts = array();
$location = new Location();
- $parts[] = $n->name;
+ $parts[] = (string)$n->name;
if (!empty($n->adminName1)) {
- $parts[] = $n->adminName1;
+ $parts[] = (string)$n->adminName1;
}
if (!empty($n->countryName)) {
- $parts[] = $n->countryName;
+ $parts[] = (string)$n->countryName;
}
- $location->location_id = $n->geonameId;
+ $location->location_id = (string)$n->geonameId;
$location->location_ns = self::LOCATION_NS;
- $location->lat = $lat;
- $location->lon = $lon;
+ $location->lat = (string)$lat;
+ $location->lon = (string)$lon;
$location->names[$language] = implode(', ', $parts);
@@ -299,7 +259,9 @@ class GeonamesPlugin extends Plugin
return true;
}
- $n = $this->getCache(array('id' => $location->location_id,
+ $id = $location->location_id;
+
+ $n = $this->getCache(array('id' => $id,
'language' => $language));
if (!empty($n)) {
@@ -307,45 +269,32 @@ class GeonamesPlugin extends Plugin
return false;
}
- $client = HTTPClient::start();
-
- $result = $client->get($this->wsUrl('hierarchyJSON',
- array('geonameId' => $location->location_id,
- 'lang' => $language)));
-
- if (!$result->isOk()) {
- $this->log(LOG_WARNING,
- "Error code " . $result->code .
- " from " . $this->host . " for ID " . $location->location_id);
- return false;
- }
-
- $rj = json_decode($result->getBody());
-
- if (count($rj->geonames) <= 0) {
- $this->log(LOG_WARNING,
- "No results " .
- " from " . $this->host . " for ID " . $location->location_id);
+ try {
+ $geonames = $this->getGeonames('hierarchy',
+ array('geonameId' => $id,
+ 'lang' => $language));
+ } catch (Exception $e) {
+ $this->log(LOG_WARNING, "Error for ID $id: " . $e->getMessage());
return false;
}
$parts = array();
- foreach ($rj->geonames as $level) {
+ foreach ($geonames as $level) {
if (in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
- $parts[] = $level->name;
+ $parts[] = (string)$level->name;
}
}
- $last = $rj->geonames[count($rj->geonames)-1];
+ $last = $geonames[count($geonames)-1];
if (!in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
- $parts[] = $last->name;
+ $parts[] = (string)$last->name;
}
if (count($parts)) {
$name = implode(', ', array_reverse($parts));
- $this->setCache(array('id' => $location->location_id,
+ $this->setCache(array('id' => $id,
'language' => $language),
$name);
}
@@ -354,7 +303,7 @@ class GeonamesPlugin extends Plugin
}
/**
- * Human-readable name for a location
+ * Human-readable URL for a location
*
* Given a location, we try to retrieve a geonames.org URL.
*
@@ -452,4 +401,29 @@ class GeonamesPlugin extends Plugin
return 'http://'.$this->host.'/'.$method.'?'.$str;
}
+
+ function getGeonames($method, $params)
+ {
+ $client = HTTPClient::start();
+
+ $result = $client->get($this->wsUrl($method, $params));
+
+ if (!$result->isOk()) {
+ throw new Exception("HTTP error code " . $result->code);
+ }
+
+ $document = new SimpleXMLElement($result->getBody());
+
+ if (empty($document)) {
+ throw new Exception("No results in response");
+ }
+
+ if (isset($document->status)) {
+ throw new Exception("Error #".$document->status['value']." ('".$document->status['message']."')");
+ }
+
+ // Array of elements
+
+ return $document->geoname;
+ }
}
diff --git a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
index 8caacff46..39967fe42 100644
--- a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
+++ b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
@@ -67,6 +67,18 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
throw new Exception("if password_changeable is set, the password attribute and password_encoding must also be specified");
}
}
+
+ function onAutoload($cls)
+ {
+ switch ($cls)
+ {
+ case 'MemcacheSchemaCache':
+ require_once(INSTALLDIR.'/plugins/LdapAuthentication/MemcacheSchemaCache.php');
+ return false;
+ default:
+ return parent::onAutoload($cls);
+ }
+ }
//---interface implementation---//
@@ -174,6 +186,14 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
return false;
}
if($config == null) $this->default_ldap=$ldap;
+
+ $c = common_memcache();
+ if (!empty($c)) {
+ $cacheObj = new MemcacheSchemaCache(
+ array('c'=>$c,
+ 'cacheKey' => common_cache_key('ldap_schema:' . crc32(serialize($config)))));
+ $ldap->registerSchemaCache($cacheObj);
+ }
return $ldap;
}
@@ -192,20 +212,21 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
$options = array(
'attributes' => $attributes
);
- $search = $ldap->search(null,$filter,$options);
+ $search = $ldap->search($this->basedn, $filter, $options);
if (PEAR::isError($search)) {
common_log(LOG_WARNING, 'Error while getting DN for user: '.$search->getMessage());
return false;
}
- if($search->count()==0){
+ $searchcount = $search->count();
+ if($searchcount == 0) {
return false;
- }else if($search->count()==1){
+ }else if($searchcount == 1) {
$entry = $search->shiftEntry();
return $entry;
}else{
- common_log(LOG_WARNING, 'Found ' . $search->count() . ' ldap user with the username: ' . $username);
+ common_log(LOG_WARNING, 'Found ' . $searchcount . ' ldap user with the username: ' . $username);
return false;
}
}
diff --git a/plugins/LdapAuthentication/MemcacheSchemaCache.php b/plugins/LdapAuthentication/MemcacheSchemaCache.php
new file mode 100644
index 000000000..6b91d17d6
--- /dev/null
+++ b/plugins/LdapAuthentication/MemcacheSchemaCache.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Cache the LDAP schema in memcache to improve performance
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Craig Andrews <candrews@integralblue.com>
+ * @copyright 2009 Craig Andrews http://candrews.integralblue.com
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+class MemcacheSchemaCache implements Net_LDAP2_SchemaCache
+{
+ protected $c;
+ protected $cacheKey;
+
+ /**
+ * Initialize the simple cache
+ *
+ * Config is as following:
+ * memcache memcache instance
+ * cachekey the key in the cache to look at
+ *
+ * @param array $cfg Config array
+ */
+ public function MemcacheSchemaCache($cfg)
+ {
+ $this->c = $cfg['c'];
+ $this->cacheKey = $cfg['cacheKey'];
+ }
+
+ /**
+ * Return the schema object from the cache
+ *
+ * @return Net_LDAP2_Schema|Net_LDAP2_Error|false
+ */
+ public function loadSchema()
+ {
+ return $this->c->get($this->cacheKey);
+ }
+
+ /**
+ * Store a schema object in the cache
+ *
+ * This method will be called, if Net_LDAP2 has fetched a fresh
+ * schema object from LDAP and wants to init or refresh the cache.
+ *
+ * To invalidate the cache and cause Net_LDAP2 to refresh the cache,
+ * you can call this method with null or false as value.
+ * The next call to $ldap->schema() will then refresh the caches object.
+ *
+ * @param mixed $schema The object that should be cached
+ * @return true|Net_LDAP2_Error|false
+ */
+ public function storeSchema($schema) {
+ return $this->c->set($this->cacheKey, $schema);
+ }
+}
diff --git a/plugins/LdapAuthentication/README b/plugins/LdapAuthentication/README
index 2226159c2..0460fb639 100644
--- a/plugins/LdapAuthentication/README
+++ b/plugins/LdapAuthentication/README
@@ -42,6 +42,8 @@ filter: Default search filter.
See http://pear.php.net/manual/en/package.networking.net-ldap2.connecting.php
scope: Default search scope.
See http://pear.php.net/manual/en/package.networking.net-ldap2.connecting.php
+schema_cachefile: File location to store ldap schema.
+schema_maxage: TTL for cache file.
attributes: an array that relates StatusNet user attributes to LDAP ones
username*: LDAP attribute value entered when authenticating to StatusNet
diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php
index 35678bedd..14d2500e8 100644
--- a/plugins/MobileProfile/MobileProfilePlugin.php
+++ b/plugins/MobileProfile/MobileProfilePlugin.php
@@ -316,6 +316,10 @@ class MobileProfilePlugin extends WAP20Plugin
$action->menuItem(common_local_url($connect),
_('Connect'));
}
+ if ($user->hasRight(Right::CONFIGURESITE)) {
+ $action->menuItem(common_local_url('siteadminpanel'),
+ _('Admin'), _('Change site configuration'), false, 'nav_admin');
+ }
if (common_config('invite', 'enabled')) {
$action->menuItem(common_local_url('invite'),
_('Invite'));
diff --git a/plugins/MobileProfile/mp-screen.css b/plugins/MobileProfile/mp-screen.css
index e05adeb83..3eefc0c8e 100644
--- a/plugins/MobileProfile/mp-screen.css
+++ b/plugins/MobileProfile/mp-screen.css
@@ -179,11 +179,11 @@ padding-bottom:4px;
}
.notice div.entry-content {
margin-left:0;
-width:65%;
+width:62.5%;
}
.notice-options {
-width:30%;
-margin-right:2%;
+width:34%;
+margin-right:1%;
}
.notice-options form {
diff --git a/plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php b/plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php
new file mode 100644
index 000000000..460550518
--- /dev/null
+++ b/plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Outputs 'powered by StatusNet' after site name
+ *
+ * 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 Action
+ * @package StatusNet
+ * @author Sarven Capadisli <csarven@status.net>
+ * @copyright 2008 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+ exit(1);
+}
+
+class PoweredByStatusNetPlugin extends Plugin
+{
+ function onEndAddressData($action)
+ {
+ $action->elementStart('span', 'poweredby');
+ $action->text(_('powered by'));
+ $action->element('a', array('href' => 'http://status.net/'), 'StatusNet');
+ $action->elementEnd('span');
+
+ return true;
+ }
+}
diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js
index 281d3d82d..52151f9de 100644
--- a/plugins/Realtime/realtimeupdate.js
+++ b/plugins/Realtime/realtimeupdate.js
@@ -130,8 +130,8 @@ RealtimeUpdate = {
}
user = data['user'];
- html = data['html'].replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"');
- source = data['source'].replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"');
+ html = data['html'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
+ source = data['source'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
ni = "<li class=\"hentry notice\" id=\"notice-"+unique+"\">"+
"<div class=\"entry-title\">"+
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 2f4636391..810b3aa80 100644
--- a/theme/base/css/display.css
+++ b/theme/base/css/display.css
@@ -259,6 +259,17 @@ font-weight:bold;
address img + .fn {
display:none;
}
+address a {
+text-decoration:none;
+}
+address .poweredby {
+float:left;
+clear:left;
+display:block;
+position:relative;
+top:7px;
+margin-right:-47px;
+}
#header {
width:100%;
@@ -993,24 +1004,58 @@ top:4px;
left:0;
}
+.dialogbox {
+position:absolute;
+top:-4px;
+right:29px;
+z-index:9;
+min-width:199px;
+float:none;
+background-color:#FFF;
+padding:11px;
+border-radius:7px;
+-moz-border-radius:7px;
+-webkit-border-radius:7px;
+border-style:solid;
+border-width:1px;
+border-color:#DDDDDD;
+-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
+}
+
+.dialogbox legend {
+display:block !important;
+margin-right:18px;
+}
+
+.dialogbox button.close {
+position:absolute;
+right:3px;
+top:3px;
+}
+
+.dialogbox .submit_dialogbox {
+text-indent:0;
+font-weight:bold;
+}
+
.notice-options {
position:relative;
font-size:0.95em;
-width:125px;
+width:113px;
float:right;
+margin-right:4px;
}
.notice-options a {
float:left;
}
-.notice-options .notice_delete,
.notice-options .notice_reply,
.notice-options .form_repeat,
.notice-options .form_favor,
.notice-options .form_disfavor,
.notice-options .repeated {
float:left;
-margin-left:14%;
+margin-left:14.2%;
}
.notice-options .form_favor,
.notice-options .form_disfavor {
@@ -1030,6 +1075,9 @@ border:0;
.notice-options .notice_delete {
text-decoration:none;
}
+.notice .notice-options .notice_delete {
+float:right;
+}
.notice-options form input.submit {
width:16px;
height:16px;
diff --git a/theme/default/css/display.css b/theme/default/css/display.css
index f1d9a9d0b..50209bfd3 100644
--- a/theme/default/css/display.css
+++ b/theme/default/css/display.css
@@ -88,6 +88,7 @@ color:#FFFFFF;
border-color:transparent;
text-shadow:none;
}
+.dialogbox .submit_dialogbox,
input.submit,
.form_notice input.submit {
background:#AAAAAA url(../../base/images/illustrations/illu_pattern-01.png) 0 0 repeat-x;
@@ -97,9 +98,11 @@ border-color:#AAAAAA;
border-top-color:#CCCCCC;
border-left-color:#CCCCCC;
}
+.dialogbox .submit_dialogbox:hover,
input.submit:hover {
background-position:0 -5px;
}
+.dialogbox .submit_dialogbox:focus,
input.submit:focus {
background-position:0 -15px;
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
@@ -351,6 +354,9 @@ opacity:0.4;
.notices li:hover div.notice-options {
opacity:1;
}
+.opaque {
+opacity:1 !important;
+}
.notice-options a,
.notice-options input {
font-family:sans-serif;
diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css
index aa02070ac..e86ee2437 100644
--- a/theme/identica/css/display.css
+++ b/theme/identica/css/display.css
@@ -88,6 +88,7 @@ color:#FFFFFF;
border-color:transparent;
text-shadow:none;
}
+.dialogbox .submit_dialogbox,
input.submit,
.form_notice input.submit {
background:#AAAAAA url(../../base/images/illustrations/illu_pattern-01.png) 0 0 repeat-x;
@@ -97,9 +98,11 @@ border-color:#AAAAAA;
border-top-color:#CCCCCC;
border-left-color:#CCCCCC;
}
+.dialogbox .submit_dialogbox:hover,
input.submit:hover {
background-position:0 -5px;
}
+.dialogbox .submit_dialogbox:focus,
input.submit:focus {
background-position:0 -15px;
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
@@ -350,6 +353,9 @@ opacity:0.4;
.notices li:hover div.notice-options {
opacity:1;
}
+.opaque {
+opacity:1 !important;
+}
.notice-options a,
.notice-options input {
font-family:sans-serif;