Merge remote-tracking branch 'upstream/develop' into 1602-mixed-content

This commit is contained in:
Michael Vogel 2016-02-17 12:18:46 +01:00
commit c770b00d6d
67 changed files with 4438 additions and 22303 deletions

View file

@ -590,15 +590,6 @@ class App {
if(x($_SERVER,'SERVER_NAME')) {
$this->hostname = $_SERVER['SERVER_NAME'];
// See bug 437 - this didn't work so disabling it
//if(stristr($this->hostname,'xn--')) {
// PHP or webserver may have converted idn to punycode, so
// convert punycode back to utf-8
// require_once('library/simplepie/idn/idna_convert.class.php');
// $x = new idna_convert();
// $this->hostname = $x->decode($_SERVER['SERVER_NAME']);
//}
if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443)
$this->hostname .= ':' . $_SERVER['SERVER_PORT'];
/*

View file

@ -2,6 +2,7 @@
require_once('library/HTML5/Parser.php');
require_once('include/crypto.php');
require_once('include/feed.php');
if(! function_exists('scrape_dfrn')) {
function scrape_dfrn($url, $dont_probe = false) {
@ -379,8 +380,6 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
$network = NETWORK_TWITTER;
}
// Twitter is deactivated since twitter closed its old API
//$twitter = ((strpos($url,'twitter.com') !== false) ? true : false);
$lastfm = ((strpos($url,'last.fm/user') !== false) ? true : false);
$at_addr = ((strpos($url,'@') !== false) ? true : false);
@ -617,21 +616,6 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
$vcard['nick'] = $addr_parts[0];
}
/* if($twitter) {
logger('twitter: setup');
$tid = basename($url);
$tapi = 'https://api.twitter.com/1/statuses/user_timeline.rss';
if(intval($tid))
$poll = $tapi . '?user_id=' . $tid;
else
$poll = $tapi . '?screen_name=' . $tid;
$profile = 'http://twitter.com/#!/' . $tid;
//$vcard['photo'] = 'https://api.twitter.com/1/users/profile_image/' . $tid;
$vcard['photo'] = 'https://api.twitter.com/1/users/profile_image?screen_name=' . $tid . '&size=bigger';
$vcard['nick'] = $tid;
$vcard['fn'] = $tid;
} */
if($lastfm) {
$profile = $url;
$poll = str_replace(array('www.','last.fm/'),array('','ws.audioscrobbler.com/1.0/'),$url) . '/recenttracks.rss';
@ -675,85 +659,34 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
if(x($feedret,'photo') && (! x($vcard,'photo')))
$vcard['photo'] = $feedret['photo'];
require_once('library/simplepie/simplepie.inc');
$feed = new SimplePie();
$cookiejar = tempnam(get_temppath(), 'cookiejar-scrape-feed-');
$xml = fetch_url($poll, false, $redirects, 0, Null, $cookiejar);
unlink($cookiejar);
logger('probe_url: fetch feed: ' . $poll . ' returns: ' . $xml, LOGGER_DATA);
$a = get_app();
logger('probe_url: scrape_feed: headers: ' . $a->get_curl_headers(), LOGGER_DATA);
// Don't try and parse an empty string
$feed->set_raw_data(($xml) ? $xml : '<?xml version="1.0" encoding="utf-8" ?><xml></xml>');
$feed->init();
if($feed->error()) {
logger('probe_url: scrape_feed: Error parsing XML: ' . $feed->error());
if ($xml == "") {
logger("scrape_feed: XML is empty for feed ".$poll);
$network = NETWORK_PHANTOM;
}
} else {
$data = feed_import($xml,$dummy1,$dummy2, $dummy3, true);
if(! x($vcard,'photo'))
$vcard['photo'] = $feed->get_image_url();
$author = $feed->get_author();
if (!is_array($data)) {
logger("scrape_feed: This doesn't seem to be a feed: ".$poll);
$network = NETWORK_PHANTOM;
} else {
if (($vcard["photo"] == "") AND ($data["header"]["author-avatar"] != ""))
$vcard["photo"] = $data["header"]["author-avatar"];
if($author) {
$vcard['fn'] = unxmlify(trim($author->get_name()));
if(! $vcard['fn'])
$vcard['fn'] = trim(unxmlify($author->get_email()));
if(strpos($vcard['fn'],'@') !== false)
$vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
if (($vcard["fn"] == "") AND ($data["header"]["author-name"] != ""))
$vcard["fn"] = $data["header"]["author-name"];
$email = unxmlify($author->get_email());
if(! $profile && $author->get_link())
$profile = trim(unxmlify($author->get_link()));
if(! $vcard['photo']) {
$rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
if($rawtags) {
$elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10];
if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo'))
$vcard['photo'] = $elems['link'][0]['attribs']['']['href'];
}
}
// Fetch fullname via poco:displayName
$pocotags = $feed->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
if ($pocotags) {
$elems = $pocotags[0]['child']['http://portablecontacts.net/spec/1.0'];
if (isset($elems["displayName"]))
$vcard['fn'] = $elems["displayName"][0]["data"];
if (isset($elems["preferredUsername"]))
$vcard['nick'] = $elems["preferredUsername"][0]["data"];
}
}
else {
$item = $feed->get_item(0);
if($item) {
$author = $item->get_author();
if($author) {
$vcard['fn'] = trim(unxmlify($author->get_name()));
if(! $vcard['fn'])
$vcard['fn'] = trim(unxmlify($author->get_email()));
if(strpos($vcard['fn'],'@') !== false)
$vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
$email = unxmlify($author->get_email());
if(! $profile && $author->get_link())
$profile = trim(unxmlify($author->get_link()));
}
if(! $vcard['photo']) {
$rawmedia = $item->get_item_tags('http://search.yahoo.com/mrss/','thumbnail');
if($rawmedia && $rawmedia[0]['attribs']['']['url'])
$vcard['photo'] = unxmlify($rawmedia[0]['attribs']['']['url']);
}
if(! $vcard['photo']) {
$rawtags = $item->get_item_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
if($rawtags) {
$elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10];
if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo'))
$vcard['photo'] = $elems['link'][0]['attribs']['']['href'];
}
}
if (($vcard["nick"] == "") AND ($data["header"]["author-nick"] != ""))
$vcard["nick"] = $data["header"]["author-nick"];
if(!$profile AND ($data["header"]["author-link"] != "") AND !in_array($network, array("", NETWORK_FEED)))
$profile = $data["header"]["author-link"];
}
}
@ -796,27 +729,9 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
}
}
if((! $vcard['photo']) && strlen($email))
$vcard['photo'] = avatar_img($email);
if($poll === $profile)
$lnk = $feed->get_permalink();
if(isset($lnk) && strlen($lnk))
$profile = $lnk;
if(! $network) {
if(! $network)
$network = NETWORK_FEED;
// If it is a feed, don't take the author name as feed name
unset($vcard['fn']);
}
if(! (x($vcard,'fn')))
$vcard['fn'] = notags($feed->get_title());
if(! (x($vcard,'fn')))
$vcard['fn'] = notags($feed->get_description());
if(strpos($vcard['fn'],'Twitter / ') !== false) {
$vcard['fn'] = substr($vcard['fn'],strpos($vcard['fn'],'/')+1);
$vcard['fn'] = trim($vcard['fn']);
}
if(! x($vcard,'nick')) {
$vcard['nick'] = strtolower(notags(unxmlify($vcard['fn'])));
if(strpos($vcard['nick'],' '))
@ -829,7 +744,7 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
if(! x($vcard,'photo')) {
$a = get_app();
$vcard['photo'] = $a->get_baseurl() . '/images/person-175.jpg' ;
$vcard['photo'] = App::get_baseurl() . '/images/person-175.jpg' ;
}
if(! $profile)

View file

@ -2,7 +2,18 @@
require_once("include/html2bbcode.php");
require_once("include/items.php");
function feed_import($xml,$importer,&$contact, &$hub) {
/**
* @brief Read a RSS/RDF/Atom feed and create an item entry for it
*
* @param string $xml The feed data
* @param array $importer The user record of the importer
* @param array $contact The contact record of the feed
* @param string $hub Unused dummy value for compatibility reasons
* @param bool $simulate If enabled, no data is imported
*
* @return array In simulation mode it returns the header and the first item
*/
function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
$a = get_app();
@ -14,18 +25,19 @@ function feed_import($xml,$importer,&$contact, &$hub) {
$doc = new DOMDocument();
@$doc->loadXML($xml);
$xpath = new DomXPath($doc);
$xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom");
$xpath->registerNamespace('atom', NAMESPACE_ATOM1);
$xpath->registerNamespace('dc', "http://purl.org/dc/elements/1.1/");
$xpath->registerNamespace('content', "http://purl.org/rss/1.0/modules/content/");
$xpath->registerNamespace('rdf', "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
$xpath->registerNamespace('rss', "http://purl.org/rss/1.0/");
$xpath->registerNamespace('media', "http://search.yahoo.com/mrss/");
$xpath->registerNamespace('poco', NAMESPACE_POCO);
$author = array();
// Is it RDF?
if ($xpath->query('/rdf:RDF/rss:channel')->length > 0) {
//$author["author-link"] = $xpath->evaluate('/rdf:RDF/rss:channel/rss:link/text()')->item(0)->nodeValue;
$author["author-link"] = $xpath->evaluate('/rdf:RDF/rss:channel/rss:link/text()')->item(0)->nodeValue;
$author["author-name"] = $xpath->evaluate('/rdf:RDF/rss:channel/rss:title/text()')->item(0)->nodeValue;
if ($author["author-name"] == "")
@ -36,19 +48,27 @@ function feed_import($xml,$importer,&$contact, &$hub) {
// Is it Atom?
if ($xpath->query('/atom:feed/atom:entry')->length > 0) {
//$self = $xpath->query("/atom:feed/atom:link[@rel='self']")->item(0)->attributes;
//if (is_object($self))
// foreach($self AS $attributes)
// if ($attributes->name == "href")
// $author["author-link"] = $attributes->textContent;
$alternate = $xpath->query("atom:link[@rel='alternate']")->item(0)->attributes;
if (is_object($alternate))
foreach($alternate AS $attributes)
if ($attributes->name == "href")
$author["author-link"] = $attributes->textContent;
//if ($author["author-link"] == "") {
// $alternate = $xpath->query("/atom:feed/atom:link[@rel='alternate']")->item(0)->attributes;
// if (is_object($alternate))
// foreach($alternate AS $attributes)
// if ($attributes->name == "href")
// $author["author-link"] = $attributes->textContent;
//}
if ($author["author-link"] == "")
$author["author-link"] = $xpath->evaluate('/atom:feed/atom:author/atom:uri/text()')->item(0)->nodeValue;
if ($author["author-link"] == "") {
$self = $xpath->query("atom:link[@rel='self']")->item(0)->attributes;
if (is_object($self))
foreach($self AS $attributes)
if ($attributes->name == "href")
$author["author-link"] = $attributes->textContent;
}
if ($author["author-link"] == "")
$author["author-link"] = $xpath->evaluate('/atom:feed/atom:id/text()')->item(0)->nodeValue;
$author["author-avatar"] = $xpath->evaluate('/atom:feed/atom:logo/text()')->item(0)->nodeValue;
$author["author-name"] = $xpath->evaluate('/atom:feed/atom:title/text()')->item(0)->nodeValue;
@ -58,7 +78,13 @@ function feed_import($xml,$importer,&$contact, &$hub) {
if ($author["author-name"] == "")
$author["author-name"] = $xpath->evaluate('/atom:feed/atom:author/atom:name/text()')->item(0)->nodeValue;
//$author["author-avatar"] = $xpath->evaluate('/atom:feed/atom:logo/text()')->item(0)->nodeValue;
$value = $xpath->evaluate('atom:author/poco:displayName/text()')->item(0)->nodeValue;
if ($value != "")
$author["author-name"] = $value;
$value = $xpath->evaluate('atom:author/poco:preferredUsername/text()')->item(0)->nodeValue;
if ($value != "")
$author["author-nick"] = $value;
$author["edited"] = $author["created"] = $xpath->query('/atom:feed/atom:updated/text()')->item(0)->nodeValue;
@ -69,9 +95,10 @@ function feed_import($xml,$importer,&$contact, &$hub) {
// Is it RSS?
if ($xpath->query('/rss/channel')->length > 0) {
//$author["author-link"] = $xpath->evaluate('/rss/channel/link/text()')->item(0)->nodeValue;
$author["author-link"] = $xpath->evaluate('/rss/channel/link/text()')->item(0)->nodeValue;
$author["author-name"] = $xpath->evaluate('/rss/channel/title/text()')->item(0)->nodeValue;
//$author["author-avatar"] = $xpath->evaluate('/rss/channel/image/url/text()')->item(0)->nodeValue;
$author["author-avatar"] = $xpath->evaluate('/rss/channel/image/url/text()')->item(0)->nodeValue;
if ($author["author-name"] == "")
$author["author-name"] = $xpath->evaluate('/rss/channel/copyright/text()')->item(0)->nodeValue;
@ -86,18 +113,21 @@ function feed_import($xml,$importer,&$contact, &$hub) {
$entries = $xpath->query('/rss/channel/item');
}
//if ($author["author-link"] == "")
if (!$simulate) {
$author["author-link"] = $contact["url"];
if ($author["author-name"] == "")
$author["author-name"] = $contact["name"];
if ($author["author-name"] == "")
$author["author-name"] = $contact["name"];
//if ($author["author-avatar"] == "")
$author["author-avatar"] = $contact["thumb"];
$author["owner-link"] = $contact["url"];
$author["owner-name"] = $contact["name"];
$author["owner-avatar"] = $contact["thumb"];
$author["owner-link"] = $contact["url"];
$author["owner-name"] = $contact["name"];
$author["owner-avatar"] = $contact["thumb"];
// This is no field in the item table. So we have to unset it.
unset($author["author-nick"]);
}
$header = array();
$header["uid"] = $importer["uid"];
@ -120,6 +150,8 @@ function feed_import($xml,$importer,&$contact, &$hub) {
if (!is_object($entries))
return;
$items = array();
$entrylist = array();
foreach ($entries AS $entry)
@ -201,13 +233,13 @@ function feed_import($xml,$importer,&$contact, &$hub) {
if ($creator != "")
$item["author-name"] = $creator;
//$item["object"] = $xml;
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')",
intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN));
if ($r) {
logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG);
continue;
if (!$simulate) {
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')",
intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN));
if ($r) {
logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG);
continue;
}
}
/// @TODO ?
@ -272,14 +304,21 @@ function feed_import($xml,$importer,&$contact, &$hub) {
$item["body"] = html2bbcode($body);
}
logger("Stored feed: ".print_r($item, true), LOGGER_DEBUG);
if (!$simulate) {
logger("Stored feed: ".print_r($item, true), LOGGER_DEBUG);
$notify = item_is_remote_self($contact, $item);
$id = item_store($item, false, $notify);
$notify = item_is_remote_self($contact, $item);
$id = item_store($item, false, $notify);
//print_r($item);
logger("Feed for contact ".$contact["url"]." stored under id ".$id);
} else
$items[] = $item;
logger("Feed for contact ".$contact["url"]." stored under id ".$id);
if ($simulate)
break;
}
if ($simulate)
return array("header" => $author, "items" => $items);
}
?>

View file

@ -1,26 +0,0 @@
Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
* Neither the name of the SimplePie Team nor the names of its contributors may be used
to endorse or promote products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

View file

@ -1,53 +0,0 @@
# SimplePie
## Authors and contributors
* [Ryan Parman](http://ryanparman.com)
* [Geoffrey Sneddon](http://gsnedders.com)
* [Ryan McCue](http://ryanmccue.info)
* [Michael Shipley](http://michaelpshipley.com)
* [Steve Minutillo](http://minutillo.com/steve/)
## License
[New BSD license](http://www.opensource.org/licenses/bsd-license.php)
## Project status
SimplePie is currently maintained by Ryan McCue.
At the moment, there isn't a lot of active development happening. If the community decides that SimplePie is a valuable tool, then the community will come together to maintain it into the future.
If you're interested in getting involved with SimplePie, please get in touch with Ryan McCue.
## What comes in the package?
1. `simplepie.inc` - The SimplePie library. This is all that's required for your pages.
2. `README.markdown` - This document.
3. `LICENSE.txt` - A copy of the BSD license.
4. `compatibility_test/` - The SimplePie compatibility test that checks your server for required settings.
5. `demo/` - A basic feed reader demo that shows off some of SimplePie's more noticable features.
6. `idn/` - A third-party library that SimplePie can optionally use to understand Internationalized Domain Names (IDNs).
7. `test/` - SimplePie's unit test suite.
## To start the demo
1. Upload this package to your webserver.
2. Make sure that the cache folder inside of the demo folder is server-writable.
3. Navigate your browser to the demo folder.
## Need support?
For further setup and install documentation, function references, etc., visit:
[http://simplepie.org/wiki/](http://simplepie.org/wiki/)
For bug reports and feature requests, visit:
[http://github.com/rmccue/simplepie/issues](http://github.com/rmccue/simplepie/issues)
Support mailing list -- powered by users, for users.
[http://tech.groups.yahoo.com/group/simplepie-support/](http://tech.groups.yahoo.com/group/simplepie-support/)

View file

@ -1,7 +0,0 @@
SIMPLEPIE COMPATIBILITY TEST
1) Upload sp_compatibility_test.php to the web-accessible root of your website.
For example, if your website is www.example.com, upload it so that you can get
to it at www.example.com/sp_compatibility_test.php
2) Open your web browser and go to the page you just uploaded.

File diff suppressed because one or more lines are too long

View file

@ -1,178 +0,0 @@
<?php
require_once 'simplepie.inc';
function normalize_character_set($charset)
{
return strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset));
}
function build_character_set_list()
{
$file = new SimplePie_File('http://www.iana.org/assignments/character-sets');
if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)))
{
return false;
}
else
{
$data = explode("\n", $file->body);
unset($file);
foreach ($data as $line)
{
// New character set
if (substr($line, 0, 5) === 'Name:')
{
// If we already have one, push it on to the array
if (isset($aliases))
{
for ($i = 0, $count = count($aliases); $i < $count; $i++)
{
$aliases[$i] = normalize_character_set($aliases[$i]);
}
$charsets[$preferred] = array_unique($aliases);
natsort($charsets[$preferred]);
}
$start = 5 + strspn($line, "\x09\x0A\x0B\xC\x0D\x20", 5);
$chars = strcspn($line, "\x09\x0A\x0B\xC\x0D\x20", $start);
$aliases = array(substr($line, $start, $chars));
$preferred = end($aliases);
}
// Another alias
elseif(substr($line, 0, 6) === 'Alias:')
{
$start = 7 + strspn($line, "\x09\x0A\x0B\xC\x0D\x20", 7);
$chars = strcspn($line, "\x09\x0A\x0B\xC\x0D\x20", $start);
$aliases[] = substr($line, $start, $chars);
if (end($aliases) === 'None')
{
array_pop($aliases);
}
elseif (substr($line, 7 + $chars + 1, 21) === '(preferred MIME name)')
{
$preferred = end($aliases);
}
}
}
// Compatibility replacements
$compat = array(
'EUC-KR' => 'windows-949',
'GB2312' => 'GBK',
'GB_2312-80' => 'GBK',
'ISO-8859-1' => 'windows-1252',
'ISO-8859-9' => 'windows-1254',
'ISO-8859-11' => 'windows-874',
'KS_C_5601-1987' => 'windows-949',
'TIS-620' => 'windows-874',
//'US-ASCII' => 'windows-1252',
'x-x-big5' => 'Big5',
);
foreach ($compat as $real => $replace)
{
if (isset($charsets[$real]) && isset($charsets[$replace]))
{
$charsets[$replace] = array_merge($charsets[$replace], $charsets[$real]);
unset($charsets[$real]);
}
elseif (isset($charsets[$real]))
{
$charsets[$replace] = $charsets[$real];
$charsets[$replace][] = normalize_character_set($replace);
unset($charsets[$real]);
}
else
{
$charsets[$replace][] = normalize_character_set($real);
}
$charsets[$replace] = array_unique($charsets[$replace]);
natsort($charsets[$replace]);
}
// Sort it
uksort($charsets, 'strnatcasecmp');
// Check that nothing matches more than one
$all = call_user_func_array('array_merge', $charsets);
$all_count = array_count_values($all);
if (max($all_count) > 1)
{
echo "Duplicated charsets:\n";
foreach ($all_count as $charset => $count)
{
if ($count > 1)
{
echo "$charset\n";
}
}
}
// And we're done!
return $charsets;
}
}
function charset($charset)
{
$normalized_charset = normalize_character_set($charset);
if ($charsets = build_character_set_list())
{
foreach ($charsets as $preferred => $aliases)
{
if (in_array($normalized_charset, $aliases))
{
return $preferred;
}
}
return $charset;
}
else
{
return false;
}
}
function build_function()
{
if ($charsets = build_character_set_list())
{
$return = <<<EOF
function charset(\$charset)
{
// Normalization from UTS #22
switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\\1', \$charset)))
{
EOF;
foreach ($charsets as $preferred => $aliases)
{
foreach ($aliases as $alias)
{
$return .= "\t\tcase " . var_export($alias, true) . ":\n";
}
$return .= "\t\t\treturn " . var_export($preferred, true) . ";\n\n";
}
$return .= <<<EOF
default:
return \$charset;
}
}
EOF;
return $return;
}
else
{
return false;
}
}
if (php_sapi_name() === 'cli' && realpath($_SERVER['argv'][0]) === __FILE__)
{
echo build_function();
}
?>

View file

@ -1,38 +0,0 @@
/* SQLite */
CREATE TABLE cache_data (
id TEXT NOT NULL,
items SMALLINT NOT NULL DEFAULT 0,
data BLOB NOT NULL,
mtime INTEGER UNSIGNED NOT NULL
);
CREATE UNIQUE INDEX id ON cache_data(id);
CREATE TABLE items (
feed_id TEXT NOT NULL,
id TEXT NOT NULL,
data TEXT NOT NULL,
posted INTEGER UNSIGNED NOT NULL
);
CREATE INDEX feed_id ON items(feed_id);
/* MySQL */
CREATE TABLE `cache_data` (
`id` TEXT CHARACTER SET utf8 NOT NULL,
`items` SMALLINT NOT NULL DEFAULT 0,
`data` BLOB NOT NULL,
`mtime` INT UNSIGNED NOT NULL,
UNIQUE (
`id`(125)
)
);
CREATE TABLE `items` (
`feed_id` TEXT CHARACTER SET utf8 NOT NULL,
`id` TEXT CHARACTER SET utf8 NOT NULL,
`data` TEXT CHARACTER SET utf8 NOT NULL,
`posted` INT UNSIGNED NOT NULL,
INDEX `feed_id` (
`feed_id`(125)
)
);

View file

@ -1,23 +0,0 @@
#!/usr/bin/php
<?php
include_once('../simplepie.inc');
// Parse it
$feed = new SimplePie();
if (isset($argv[1]) && $argv[1] !== '')
{
$feed->set_feed_url($argv[1]);
$feed->enable_cache(false);
$feed->init();
}
$items = $feed->get_items();
foreach ($items as $item)
{
echo $item->get_title() . "\n";
}
var_dump($feed->get_item_quantity());
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

View file

@ -1,5 +0,0 @@
<html>
<head>
<meta http-equiv="refresh" content="0;url=http://www.jeroenwijering.com/extras/readme.html">
</head>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 851 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

View file

@ -1,35 +0,0 @@
/*=:project
scalable Inman Flash Replacement (sIFR) version 3.
=:file
Copyright: 2006 Mark Wubben.
Author: Mark Wubben, <http://novemberborn.net/>
=:history
* IFR: Shaun Inman
* sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin
* sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben
=:license
This software is licensed and provided under the CC-GNU LGPL.
See <http://creativecommons.org/licenses/LGPL/2.1/>
*/
/* This is the print stylesheet to hide the Flash headlines from the browser... regular browser text headlines will now print as normal */
.sIFR-flash {
display: none !important;
height: 0;
width: 0;
position: absolute;
overflow: hidden;
}
.sIFR-alternate {
visibility: visible !important;
display: block !important;
position: static !important;
left: auto !important;
top: auto !important;
}

View file

@ -1,39 +0,0 @@
/*=:project
scalable Inman Flash Replacement (sIFR) version 3.
=:file
Copyright: 2006 Mark Wubben.
Author: Mark Wubben, <http://novemberborn.net/>
=:history
* IFR: Shaun Inman
* sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin
* sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben
=:license
This software is licensed and provided under the CC-GNU LGPL.
See <http://creativecommons.org/licenses/LGPL/2.1/>
*/
/*---- sIFR ---*/
.sIFR-flash {
visibility: visible !important;
margin: 0;
padding: 0;
}
.sIFR-replaced {
visibility: visible !important;
}
.sIFR-alternate {
position: absolute;
left: 0;
top: 0;
width: 0;
height: 0;
display: block;
overflow: hidden;
}
/*---- Header styling ---*/

View file

@ -1,40 +0,0 @@
var yanone_kaffeesatz = {
src: './for_the_demo/yanone-kaffeesatz-bold.swf'
};
var lucida_grande = {
src: './for_the_demo/lucida-grande-bold.swf'
};
sIFR.activate(yanone_kaffeesatz);
//sIFR.activate(lucida_grande);
sIFR.replace(yanone_kaffeesatz, {
//sIFR.replace(lucida_grande, {
selector: 'h3.header',
wmode: 'transparent',
css: {
'.sIFR-root': {
'text-align': 'center',
'color': '#000000',
'font-weight': 'bold',
'background-color': '#EEFFEE',
'font-size': '50px', // For Yanone Kaffeesatz
//'font-size': '40px', // For Lucida Grande
'letter-spacing': '0' // For Yanone Kaffeesatz
//'letter-spacing': '-4' // For Lucida Grande
},
'a': {
'text-decoration': 'none',
'color': '#000000'
},
'a:hover': {
'text-decoration': 'none',
'color': '#666666'
}
}
});

File diff suppressed because one or more lines are too long

View file

@ -1,397 +0,0 @@
/*
Theme Name: SimplePie
Theme URI: http://simplepie.org
Description: A simple, yet beautiful theme inspired by several cleanly designed websites.
Version: 1.4
Author: Ryan Parman
Author URI: http://skyzyx.com
Updated: 21 June 2007
*/
/*********************************************
HYPERLINK STYLES
*********************************************/
a {
color:#369;
text-decoration:underline;
padding:0 1px;
}
a:hover {
color:#fff !important;
background-color:#333;
text-decoration:none;
padding:0 1px;
}
a.nohover {
text-decoration:none;
border:none;
}
a.nohover:hover {
background-color:transparent;
border:none;
}
a.namelink {
padding:0;
margin:0;
overflow:hidden;
height:1px;
}
h4 a,
.sample_feeds a {
color:#000;
}
/*********************************************
GENERAL STYLES
*********************************************/
body {
/*font:12px/18px Verdana, sans-serif;*/
font:14px/1.5em "Lucida Grande", Tahoma, sans-serif;
letter-spacing:0px;
color:#333;
background-color:#fff;
margin:0;
padding:0;
}
div#site {
width:600px;
margin:50px auto 0 auto;
}
h1#logo {
margin:0;
padding:0;
text-align:center;
}
h1#logo a,
h1#logo a:hover {
background-color:transparent;
text-decoration:none;
padding:0;
}
h2.image {
margin:0;
padding:0;
text-align:center;
}
h3 {
margin:20px 0 0 0;
padding:0;
font-size:1.5em;
}
h4 {
margin:20px 0 0 0;
padding:0;
font-size:1.2em;
letter-spacing:-1px;
}
h5 {
margin:10px 0 0 0;
padding:0;
font-size:1em;
font-weight:bold;
}
em {
font-style:normal;
background-color:#ffc;
}
p {
margin:0;
padding:5px 0;
}
ul, ol {
margin:10px 0 10px 20px;
padding:0 0 0 15px;
}
ul li, ol li {
margin:0 0 7px 0;
padding:0 0 0 3px;
}
form {
margin:0;
padding:0;
}
code {
font-size:1em;
background-color:#f3f3ff;
color:#000;
}
div#site pre {
background-color:#f3f3ff;
color:#000080;
border:1px dotted #000080;
overflow:auto;
padding:3px 5px;
}
blockquote {
font-size:1em;
color:#666;
border-left:4px solid #666;
margin:10px 0 10px 30px;
padding:0 5px 0 10px;
background:#f3f3f3 url(background_blockquote.png) repeat top left;
}
input, select, textarea {
font-size:12px;
line-height:1.2em;
padding:2px;
}
input[type=text], select, textarea {
background-color:#e9f5ff;
border:1px solid #333;
}
input[type=text]:focus, select:focus, textarea:focus {
background-color:#ffe;
}
.clearLeft {clear:left;}
.clearRight {clear:right;}
.clearBoth {clear:both;}
.hide {display:none;}
/*********************************************
NAVIGATION STYLES
*********************************************/
div#header {
background:#fff url(top_gradient.gif) repeat-x top left;
margin:0;
padding:0;
}
div#header form {
margin:0;
padding:0;
}
div#header div#headerInner {
margin:0;
padding:0;
}
div#header div#headerInner div#logoContainer {}
div#header div#headerInner div#logoContainerInner {
width:550px;
margin:0 auto;
padding:20px;
}
div#header div#headerInner div#logoContainer div#logo {
float:left;
width:200px;
}
div#header div#headerInner div#logoContainer div#logo a,
div#header div#headerInner div#logoContainer div#logo a:hover {
border:none;
background:none;
}
div#header div#headerInner div#logoContainer div#feed {
float:right;
width:300px;
text-align:right;
padding:10px 0 0 0;
}
div#header div#headerInner div#logoContainer div#feed input.text {
width:60%;
}
div#header div#headerInner div#menu {
background:#eee url(background_menuitem_shadow.gif) repeat-x top left;
border-top:2px solid #ccc;
border-bottom:1px solid #ddd;
text-align:center;
}
div#header div#headerInner div#menu table {
width:auto;
margin:0 auto;
}
div#header div#headerInner div#menu ul {
display:block;
width:100%;
margin:0 auto;
padding:0;
font-size:12px;
}
div#header div#headerInner div#menu ul li {
display:block;
float:left;
}
div#header div#headerInner div#menu ul li a {
display:block;
margin:-2px 0 0 0;
padding:5px 7px 8px 7px;
text-decoration:none;
color:#666 !important;
background-color:transparent;
}
div#header div#headerInner div#menu ul li a:hover {
display:block;
margin:-2px 0 0 0;
padding:5px 7px 8px 7px;
text-decoration:none;
color:#666;
background:#fff url(background_menuitem_off.gif) no-repeat bottom right;
}
body#bodydemo div#header div#headerInner div#menu ul li#demo a {
display:block;
margin:-2px 0 0 0;
padding:5px 7px 8px 7px;
text-decoration:none;
color:#333;
font-weight:bold;
background:#fff url(background_menuitem.gif) no-repeat bottom right;
}
/*********************************************
CONTENT STYLES
*********************************************/
div.chunk {
margin:20px 0 0 0;
padding:0 0 10px 0;
border-bottom:1px solid #ccc;
}
div.topchunk {
margin:0 !important;
}
.footnote,
.footnote a {
font-size:12px;
line-height:1.3em;
color:#aaa;
}
.footnote em {
background-color:transparent;
font-style:italic;
}
.footnote code {
background-color:transparent;
font:11px/14px monospace;
color:#aaa;
}
p.subscribe {
background-color:#f3f3f3;
font-size:12px;
text-align:center;
}
p.highlight {
background-color:#ffc;
font-size:12px;
text-align:center;
}
p.sample_feeds {
font-size:12px;
line-height:1.2em;
}
div.sp_errors {
background-color:#eee;
padding:5px;
text-align:center;
font-size:12px;
}
.noborder {
border:none !important;
}
img.favicon {
margin:0 4px -2px 0;
width:16px;
height:16px;
}
p.favicons a,
p.favicons a:hover {
border:none;
background-color:transparent;
}
p.favicons img {
border:none;
}
/*********************************************
DEMO STYLES
*********************************************/
div#sp_input {
background-color:#ffc;
border:2px solid #f90;
padding:5px;
text-align:center;
}
div#sp_input input.text {
border:1px solid #999;
background:#e9f5ff url(feed.png) no-repeat 4px 50%;
width:75%;
padding:2px 2px 2px 28px;
font:18px/22px "Lucida Grande", Verdana, sans-serif;
font-weight:bold;
letter-spacing:-1px;
}
form#sp_form {
margin:15px 0;
}
div.focus {
margin:0;
padding:10px 20px;
background-color:#efe;
}
p.sample_feeds {
text-align:justify;
}
/*********************************************
SIFR STYLES
*********************************************/
.sIFR-active h3.header {
visibility:hidden;
line-height:1em;
}

View file

@ -1,31 +0,0 @@
/**********************************************************
Sleight
(c) 2001, Aaron Boodman
http://www.youngpup.net
**********************************************************/
if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent)
{
document.writeln('<style type="text/css">img { visibility:hidden; } </style>');
window.attachEvent("onload", fnLoadPngs);
}
function fnLoadPngs()
{
var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);
for (var i = document.images.length - 1, img = null; (img = document.images[i]); i--)
{
if (itsAllGood && img.src.match(/\.png$/i) != null)
{
var src = img.src;
var div = document.createElement("DIV");
div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizing='scale')"
div.style.width = img.width + "px";
div.style.height = img.height + "px";
img.replaceNode(div);
}
img.style.visibility = "visible";
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

View file

@ -1,71 +0,0 @@
/*=:project
scalable Inman Flash Replacement (sIFR) version 3.
=:file
Copyright: 2006 Mark Wubben.
Author: Mark Wubben, <http://novemberborn.net/>
=:history
* IFR: Shaun Inman
* sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin
* sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben
=:license
This software is licensed and provided under the CC-GNU LGPL.
See <http://creativecommons.org/licenses/LGPL/2.1/>
*/
import TextField.StyleSheet;
class SifrStyleSheet extends TextField.StyleSheet {
public var fontSize;
public var latestLeading = 0;
public function parseCSS(cssText:String) {
var native = new TextField.StyleSheet();
var parsed = native.parseCSS(cssText);
if(!parsed) return false;
var selectors = native.getStyleNames();
for(var i = selectors.length - 1; i >= 0; i--) {
var selector = selectors[i];
var nativeStyle = native.getStyle(selector);
var style = this.getStyle(selector) || nativeStyle;
if(style != nativeStyle) {
for(var property in nativeStyle) style[property] = nativeStyle[property];
}
this.setStyle(selector, style);
}
return true;
}
// Apply leading to the textFormat. Much thanks to <http://www.blog.lessrain.com/?p=98>.
private function applyLeading(format, leading) {
this.latestLeading = leading;
if(leading >= 0) {
format.leading = leading;
return format;
}
// Workaround for negative leading, which is ignored otherwise.
var newFormat = new TextFormat(null, null, null, null, null, null, null, null, null, null, null, null, leading);
for(var property in format) if(property != 'leading') newFormat[property] = format[property];
return newFormat;
}
public function transform(style) {
var format = super.transform(style);
if(style.leading) format = applyLeading(format, style.leading);
if(style.letterSpacing) format.letterSpacing = style.letterSpacing;
// Support font sizes relative to the size of .sIFR-root.
if(this.fontSize && style.fontSize && style.fontSize.indexOf('%')) {
format.size = this.fontSize * parseInt(style.fontSize) / 100;
}
format.kerning = _root.kerning == 'true' || !(_root.kerning == 'false') || sIFR.defaultKerning;
return format;
}
}

View file

@ -1,12 +0,0 @@
This is a pre-release nightly of sIFR 3 (r245 to be exact). We (the SimplePie team) will be updating the
sIFR code and font files from time to time as new releases of sIFR 3 are made available.
In this folder you'll find a few Flash 8 files. The only one of you might want to mess with is sifr.fla.
* Open it up
* Double-click the rectangle in the middle
* Select all
* Change the font
More information about sIFR 3 can be found here:
* http://dev.novemberborn.net/sifr3/
* http://wiki.novemberborn.net/sifr3/

View file

@ -1,12 +0,0 @@
// MTASC only parses as-files with class definitions, so here goes...
class Options {
public static function apply() {
sIFR.fromLocal = true;
sIFR.domains = ['*'];
// Parsing `p.foo` might not work, see: <http://livedocs.macromedia.com/flash/mx2004/main_7_2/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Flash_MX_2004&file=00001766.html>
// Appearantly you have to use hex color codes as well, names are not supported!
sIFR.styles.parseCSS('.foo { text-decoration: underline; }');
}
}

View file

@ -1,359 +0,0 @@
/*=:project
scalable Inman Flash Replacement (sIFR) version 3.
=:file
Copyright: 2006 Mark Wubben.
Author: Mark Wubben, <http://novemberborn.net/>
=:history
* IFR: Shaun Inman
* sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin
* sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben
=:license
This software is licensed and provided under the CC-GNU LGPL.
See <http://creativecommons.org/licenses/LGPL/2.1/>
*/
import SifrStyleSheet;
class sIFR {
public static var DEFAULT_TEXT = 'Rendered with sIFR 3, revision 245';
public static var CSS_ROOT_CLASS = 'sIFR-root';
public static var DEFAULT_WIDTH = 300;
public static var DEFAULT_HEIGHT = 100;
public static var DEFAULT_ANTI_ALIAS_TYPE = 'advanced';
public static var MARGIN_LEFT = -3;
public static var PADDING_BOTTOM = 5; // Extra padding to make sure the movie is high enough in most cases.
public static var LEADING_REMAINDER = 2; // Flash uses the specified leading minus 2 as the applied leading.
public static var MAX_FONT_SIZE = 126;
public static var ALIASING_MAX_FONT_SIZE = 48;
//= Holds CSS properties and other rendering properties for the Flash movie.
// *Don't overwrite!*
public static var styles:SifrStyleSheet = new SifrStyleSheet();
//= Allow sIFR to be run from localhost
public static var fromLocal:Boolean = true;
//= Array containing domains for which sIFR may render text. Used to prevent
// hotlinking. Use `*` to allow all domains.
public static var domains:Array = [];
//= Whether kerning is enabled by default. This can be overriden from the client side.
// See also <http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002811.html>.
public static var defaultKerning:Boolean = true;
//= Default value which can be overriden from the client side.
// See also <http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002788.html>.
public static var defaultSharpness:Number = 0;
//= Default value which can be overriden from the client side.
// See also <http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002787.html>.
public static var defaultThickness:Number = 0;
//= Default value which can be overriden from the client side.
// See also <http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002732.html>.
public static var defaultOpacity:Number = -1; // Use client settings
//= Default value which can be overriden from the client side.
// See also <http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002788.html>.
public static var defaultBlendMode:Number = -1; // Use cliest settings
//= Overrides the grid fit type as defined on the client side.
// See also <http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002444.html>.
public static var enforcedGridFitType:String = null;
//= If `true` sIFR won't override the anti aliasing set in the Flash IDE when exporting.
// Thickness and sharpness won't be affected either.
public static var preserveAntiAlias:Boolean = false;
//= If `true` sIFR will disable anti-aliasing if the font size is larger than `ALIASING_MAX_FONT_SIZE`.
// This setting is *independent* from `preserveAntiAlias`.
public static var conditionalAntiAlias:Boolean = true;
//= Sets the anti alias type. By default it's `DEFAULT_ANTI_ALIAS_TYPE`.
// See also <http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002733.html>.
public static var antiAliasType:String = null;
//= Flash filters can be added to this array and will be applied to the text field.
public static var filters:Array = [];
//= A mapping from the names of the filters to their actual objecs, used when transforming
// filters defined on the client. You can add additional filters here so they'll be supported
// when defined on the client.
public static var filterMap:Object = {
DisplacementMapFilter : flash.filters.DisplacementMapFilter,
ColorMatrixFilter : flash.filters.ColorMatrixFilter,
ConvolutionFilter : flash.filters.ConvolutionFilter,
GradientBevelFilter : flash.filters.GradientBevelFilter,
GradientGlowFilter : flash.filters.GradientGlowFilter,
BevelFilter : flash.filters.BevelFilter,
GlowFilter : flash.filters.GlowFilter,
BlurFilter : flash.filters.BlurFilter,
DropShadowFilter : flash.filters.DropShadowFilter
};
private static var instance;
private var textField;
private var content;
private var realHeight;
private var originalHeight;
private var currentHeight;
private var fontSize;
private var tuneWidth;
private var tuneHeight;
//= Sets the default styles for `sIFR.styles`. This method is called
// directly in `sifr.fla`, before options are applied.
public static function setDefaultStyles() {
sIFR.styles.parseCSS([
'.', CSS_ROOT_CLASS, ' { color: #000000; }',
'strong { display: inline; font-weight: bold; } ',
'em { display: inline; font-style: italic; }',
'a { color: #0000FF; text-decoration: underline; }',
'a:hover { color: #0000FF; text-decoration: none; }'
].join(''));
}
//= Validates the domain sIFR is being used on.
// Returns `true` if the domain is valid, `false` otherwise.
public static function checkDomain():Boolean {
if(sIFR.domains.length == 0) return true;
var domain = (new LocalConnection()).domain();
if(sIFR.fromLocal) sIFR.domains.push('localhost');
for(var i = 0; i < sIFR.domains.length; i++) {
var match = sIFR.domains[i];
if(match == '*' || match == domain) return true;
var wildcard = match.lastIndexOf('*');
if(wildcard > -1) {
match = match.substr(wildcard + 1);
var matchPosition = domain.lastIndexOf(match);
if(matchPosition > -1 && (matchPosition + match.length) == domain.length) return true;
}
}
return false;
}
//= Runs sIFR. Called automatically.
public static function run() {
var holder = _root.holder;
var content = checkDomain() ? unescape(_root.content) : DEFAULT_TEXT
if(content == 'undefined' || content == '') {
content = DEFAULT_TEXT;
fscommand('resetmovie', '');
} else fscommand('ping', '');
// Sets stage parameters
Stage.scaleMode = 'noscale';
Stage.align = 'TL';
Stage.showMenu = false;
// Other parameters
var opacity = parseInt(_root.opacity);
if(!isNaN(opacity)) holder._alpha = sIFR.defaultOpacity == -1 ? opacity : sIFR.defaultOpacity;
else holder._alpha = 100;
_root.blendMode = sIFR.defaultBlendMode == -1 ? _root.blendmode : sIFR.defaultBlendMode;
sIFR.instance = new sIFR(holder.txtF, content);
// This should ignore resizes from the callback. Disabled for now.
/* if(_root.zoomsupport == 'true') Stage.addListener({onResize: function() { sIFR.instance.scale() }});*/
// Setup callbacks
_root.watch('callbackTrigger', function() {
sIFR.callback();
return false;
});
}
private static function eval(str) {
var as;
if(str.charAt(0) == '{') { // Ah, we need to create an object
as = {};
str = str.substring(1, str.length - 1);
var $ = str.split(',');
for(var i = 0; i < $.length; i++) {
var $1 = $[i].split(':');
as[$1[0]] = sIFR.eval($1[1]);
}
} else if(str.charAt(0) == '"') { // String
as = str.substring(1, str.length - 1);
} else if(str == 'true' || str == 'false') { // Boolean
as = str == 'true';
} else { // Float
as = parseFloat(str);
}
return as;
}
private function applyFilters() {
var $filters = this.textField.filters;
$filters = $filters.concat(sIFR.filters);
var $ = _root.flashfilters.split(';'); // name,prop:value,...;
for(var i = 0; i < $.length; i++) {
var $1 = $[i].split(',');
var newFilter = new sIFR.filterMap[$1[0]]();
for(var j = 1; j < $1.length; j++) {
var $2 = $1[j].split(':');
newFilter[$2[0]] = sIFR.eval(unescape($2[1]));
}
$filters.push(newFilter);
}
this.textField.filters = $filters;
}
private function sIFR(textField, content) {
this.textField = textField;
this.content = content;
var offsetLeft = parseInt(_root.offsetleft);
textField._x = MARGIN_LEFT + (isNaN(offsetLeft) ? 0 : offsetLeft);
var offsetTop = parseInt(_root.offsettop);
if(!isNaN(offsetTop)) textField._y += offsetTop;
tuneWidth = parseInt(_root.tunewidth);
if(isNaN(tuneWidth)) tuneWidth = 0;
tuneHeight = parseInt(_root.tuneheight);
if(isNaN(tuneHeight)) tuneHeight = 0;
textField._width = tuneWidth + (isNaN(parseInt(_root.width)) ? DEFAULT_WIDTH : parseInt(_root.width));
textField._height = tuneHeight + (isNaN(parseInt(_root.height)) ? DEFAULT_HEIGHT : parseInt(_root.height));
textField.wordWrap = true;
textField.selectable = _root.selectable == 'true';
textField.gridFitType = sIFR.enforcedGridFitType || _root.gridfittype;
this.applyFilters();
// Determine font-size and the number of lines
this.fontSize = parseInt(_root.size);
if(isNaN(this.fontSize)) this.fontSize = 26;
styles.fontSize = this.fontSize;
if(!sIFR.preserveAntiAlias && (sIFR.conditionalAntiAlias && this.fontSize < ALIASING_MAX_FONT_SIZE
|| !sIFR.conditionalAntiAlias)) {
textField.antiAliasType = sIFR.antiAliasType || DEFAULT_ANTI_ALIAS_TYPE;
}
if(!sIFR.preserveAntiAlias || !isNaN(parseInt(_root.sharpness))) {
textField.sharpness = parseInt(_root.sharpness);
}
if(isNaN(textField.sharpness)) textField.sharpness = sIFR.defaultSharpness;
if(!sIFR.preserveAntiAlias || !isNaN(parseInt(_root.thickness))) {
textField.thickness = parseInt(_root.thickness);
}
if(isNaN(textField.thickness)) textField.thickness = sIFR.defaultThickness;
// Set font-size and other styles
sIFR.styles.parseCSS(unescape(_root.css));
var rootStyle = styles.getStyle('.sIFR-root') || {};
rootStyle.fontSize = this.fontSize; // won't go higher than 126!
styles.setStyle('.sIFR-root', rootStyle);
textField.styleSheet = styles;
this.write(content);
this.repaint();
}
private function repaint() {
var leadingFix = this.isSingleLine() ? sIFR.styles.latestLeading : 0;
if(leadingFix > 0) leadingFix -= LEADING_REMAINDER;
// Flash wants to scroll the movie by one line, by adding the fontSize to the
// textField height this is no longer happens. We also add the absolute tuneHeight,
// to prevent a negative value from triggering the bug. We won't send the fake
// value to the JavaScript side, though.
textField._height = textField.textHeight + PADDING_BOTTOM + this.fontSize + Math.abs(tuneHeight) + tuneHeight - leadingFix;
this.realHeight = textField._height - this.fontSize - Math.abs(tuneHeight);
var arg = 'height:' + this.realHeight;
if(_root.fitexactly == 'true') arg += ',width:' + (textField.textWidth + tuneWidth);
fscommand('resize', arg);
this.originalHeight = textField._height;
this.currentHeight = Stage.height;
textField._xscale = textField._yscale = parseInt(_root.zoom);
}
private function write(content) {
this.textField.htmlText = ['<p class="', CSS_ROOT_CLASS, '">',
content, '</p>'
].join('');
}
private function isSingleLine() {
return Math.round((this.textField.textHeight - sIFR.styles.latestLeading) / this.fontSize) == 1;
}
//= Scales the text field to the new scale of the Flash movie itself.
public function scale() {
this.currentHeight = Stage.height;
var scale = 100 * Math.round(this.currentHeight / this.originalHeight);
textField._xscale = textField._yscale = scale;
}
private function calculateRatios() {
var strings = ['X', 'X<br>X', 'X<br>X<br>X', 'X<br>X<br>X<br>X'];
var results = {};
for(var i = 1; i <= strings.length; i++) {
var size = 6;
this.write(strings[i - 1]);
while(size < MAX_FONT_SIZE) {
var rootStyle = sIFR.styles.getStyle('.sIFR-root') || {};
rootStyle.fontSize = size;
sIFR.styles.setStyle('.sIFR-root', rootStyle);
this.textField.styleSheet = sIFR.styles;
this.repaint();
var ratio = (this.realHeight - PADDING_BOTTOM) / i / size;
if(!results[size]) results[size] = ratio;
else results[size] = ((i - 1) * results[size] + ratio) / i;
size++;
}
}
var sizes = [], ratios = [];
var ratiosToSizes = {}, sizesToRatios = {};
for(var size in results) {
if(results[size] == Object.prototype[size]) continue;
var ratio = results[size];
ratiosToSizes[ratio] = Math.max(ratio, parseInt(size));
}
for(var ratio in ratiosToSizes) {
if(ratiosToSizes[ratio] == Object.prototype[ratio]) continue;
sizesToRatios[ratiosToSizes[ratio]] = roundDecimals(ratio, 2);
sizes.push(ratiosToSizes[ratio]);
}
sizes.sort(function(a, b) { return a - b; });
for(var j = 0; j < sizes.length - 1; j++) ratios.push(sizes[j], sizesToRatios[sizes[j]]);
ratios.push(sizesToRatios[sizes[sizes.length - 1]]);
fscommand('debug:ratios', '[' + ratios.join(',') + ']');
}
private function roundDecimals(value, decimals) {
return Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals);
}
public static function callback() {
switch(_root.callbackType) {
case 'replacetext':
sIFR.instance.content = _root.callbackValue;
sIFR.instance.write(_root.callbackValue);
sIFR.instance.repaint();
break;
case 'resettext':
sIFR.instance.write('');
sIFR.instance.write(sIFR.instance.content);
break;
case 'ratios':
sIFR.instance.calculateRatios();
break;
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -1,6 +0,0 @@
<?php
// This should be modifed as your own use warrants.
require_once('../simplepie.inc');
SimplePie_Misc::display_cached_file($_GET['i'], './cache', 'spi');
?>

View file

@ -1,295 +0,0 @@
<?php
// Start counting time for the page load
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
// Include SimplePie
// Located in the parent directory
include_once('../simplepie.inc');
include_once('../idn/idna_convert.class.php');
// Create a new instance of the SimplePie object
$feed = new SimplePie();
//$feed->force_fsockopen(true);
// Make sure that page is getting passed a URL
if (isset($_GET['feed']) && $_GET['feed'] !== '')
{
// Strip slashes if magic quotes is enabled (which automatically escapes certain characters)
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
$_GET['feed'] = stripslashes($_GET['feed']);
}
// Use the URL that was passed to the page in SimplePie
$feed->set_feed_url($_GET['feed']);
// XML dump
$feed->enable_xml_dump(isset($_GET['xmldump']) ? true : false);
}
// Allow us to change the input encoding from the URL string if we want to. (optional)
if (!empty($_GET['input']))
{
$feed->set_input_encoding($_GET['input']);
}
// Allow us to choose to not re-order the items by date. (optional)
if (!empty($_GET['orderbydate']) && $_GET['orderbydate'] == 'false')
{
$feed->enable_order_by_date(false);
}
// Allow us to cache images in feeds. This will also bypass any hotlink blocking put in place by the website.
if (!empty($_GET['image']) && $_GET['image'] == 'true')
{
$feed->set_image_handler('./handler_image.php');
}
// We'll enable the discovering and caching of favicons.
$feed->set_favicon_handler('./handler_image.php');
// Initialize the whole SimplePie object. Read the feed, process it, parse it, cache it, and
// all that other good stuff. The feed's information will not be available to SimplePie before
// this is called.
$success = $feed->init();
// We'll make sure that the right content type and character encoding gets set automatically.
// This function will grab the proper character encoding, as well as set the content type to text/html.
$feed->handle_content_type();
// When we end our PHP block, we want to make sure our DOCTYPE is on the top line to make
// sure that the browser snaps into Standards Mode.
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
<title>SimplePie: Demo</title>
<link rel="stylesheet" href="./for_the_demo/sIFR-screen.css" type="text/css" media="screen">
<link rel="stylesheet" href="./for_the_demo/sIFR-print.css" type="text/css" media="print">
<link rel="stylesheet" href="./for_the_demo/simplepie.css" type="text/css" media="screen, projector" />
<script type="text/javascript" src="./for_the_demo/sifr.js"></script>
<script type="text/javascript" src="./for_the_demo/sifr-config.js"></script>
<script type="text/javascript" src="./for_the_demo/sleight.js"></script>
</head>
<body id="bodydemo">
<div id="header">
<div id="headerInner">
<div id="logoContainer">
<div id="logoContainerInner">
<div align="center"><a href="http://simplepie.org"><img src="./for_the_demo/logo_simplepie_demo.png" alt="SimplePie Demo: PHP-based RSS and Atom feed handling" title="SimplePie Demo: PHP-based RSS and Atom feed handling" border="0" /></a></div>
<div class="clearLeft"></div>
</div>
</div>
<div id="menu">
<!-- I know, I know, I know... tables for layout, I know. If a web standards evangelist (like me) has to resort
to using tables for something, it's because no other possible solution could be found. This issue? No way to
do centered floats purely with CSS. The table box model allows for a dynamic width while centered, while the
CSS box model for DIVs doesn't allow for it. :( -->
<table cellpadding="0" cellspacing="0" border="0"><tbody><tr><td>
<ul><li id="demo"><a href="./">SimplePie Demo</a></li><li><a href="http://simplepie.org/wiki/faq/start">FAQ/Troubleshooting</a></li><li><a href="http://simplepie.org/support/">Support Forums</a></li><li><a href="http://simplepie.org/wiki/reference/start">API Reference</a></li><li><a href="http://simplepie.org/blog/">Weblog</a></li><li><a href="../test/test.php">Unit Tests</a></li></ul>
<div class="clearLeft"></div>
</td></tr></tbody></table>
</div>
</div>
</div>
<div id="site">
<div id="content">
<div class="chunk">
<form action="" method="get" name="sp_form" id="sp_form">
<div id="sp_input">
<!-- If a feed has already been passed through the form, then make sure that the URL remains in the form field. -->
<p><input type="text" name="feed" value="<?php if ($feed->subscribe_url()) echo $feed->subscribe_url(); ?>" class="text" id="feed_input" />&nbsp;<input type="submit" value="Read" class="button" /></p>
</div>
</form>
<?php
// Check to see if there are more than zero errors (i.e. if there are any errors at all)
if ($feed->error())
{
// If so, start a <div> element with a classname so we can style it.
echo '<div class="sp_errors">' . "\r\n";
// ... and display it.
echo '<p>' . htmlspecialchars($feed->error()) . "</p>\r\n";
// Close the <div> element we opened.
echo '</div>' . "\r\n";
}
?>
<!-- Here are some sample feeds. -->
<p class="sample_feeds"><strong>Or try one of the following:</strong>
<a href="?feed=http://www.詹姆斯.com/atomtests/iri/everything.atom" title="Test: International Domain Name support">詹姆斯.com</a>,
<a href="?feed=http://www.adultswim.com/williams/podcast/tools/xml/video_rss.xml" title="Humor from the people who make [adult swim] cartoons.">adult swim</a>,
<a href="?feed=http://afterdawn.com/news/afterdawn_rss.xml" title="Ripping, Burning, DRM, and the Dark Side of Consumer Electronics Media">Afterdawn</a>,
<a href="?feed=http://feeds.feedburner.com/ajaxian" title="AJAX and Scripting News">Ajaxian</a>,
<a href="?feed=http://www.andybudd.com/index.rdf&amp;image=true" title="Test: Bypass Image Hotlink Blocking">Andy Budd</a>,
<a href="?feed=http://feeds.feedburner.com/AskANinja" title="Test: Embedded Enclosures">Ask a Ninja</a>,
<a href="?feed=http://www.atomenabled.org/atom.xml" title="Test: Atom 1.0 Support">AtomEnabled.org</a>,
<a href="?feed=http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml" title="World News">BBC News</a>,
<a href="?feed=http://newsrss.bbc.co.uk/rss/arabic/news/rss.xml" title="Test: Windows-1256 Encoding">BBC Arabic</a>,
<a href="?feed=http://newsrss.bbc.co.uk/rss/chinese/simp/news/rss.xml" title="Test: GB2312 Encoding">BBC China</a>,
<a href="?feed=http://newsrss.bbc.co.uk/rss/russian/news/rss.xml" title="Test: Windows-1251 Encoding">BBC Russia</a>,
<a href="?feed=http://inessential.com/xml/rss.xml" title="Developer of NetNewsWire">Brent Simmons</a>,
<a href="?feed=http://www.channelfrederator.com/rss" title="Test: Embedded Enclosures">Channel Frederator</a>,
<a href="?feed=http://rss.cnn.com/rss/cnn_topstories.rss" title="World News">CNN</a>,
<a href="?feed=http://digg.com/rss/index.xml" title="Tech news. Better than Slashdot.">Digg</a>,
<a href="?feed=http://revision3.com/diggnation/feed/quicktime-large" title="Tech and industry videocast.">Diggnation</a>,
<a href="?feed=http://www.flickr.com/services/feeds/photos_public.gne?format=rss2" title="Flickr Photos">Flickr</a>,
<a href="?feed=http://news.google.com/?output=rss" title="World News">Google News</a>,
<a href="?feed=http://video.google.com/videofeed?type=top100new&num=20&output=rss" title="Test: Media RSS Support">Google Video</a>,
<a href="?feed=http://blogs.law.harvard.edu/home/feed/rdf/" title="Test: Tag Stripping">Harvard Law</a>,
<a href="?feed=http://hagada.org.il/hagada/html/backend.php" title="Test: Window-1255 Encoding">Hebrew Language</a>,
<a href="?feed=http://www.infoworld.com/rss/news.xml" title="Test: Ad Stripping">InfoWorld</a>,
<a href="?feed=http://phobos.apple.com/WebObjects/MZStore.woa/wpa/MRSS/topsongs/limit=10/rss.xml&orderbydate=false" title="Test: Tag Stripping">iTunes</a>,
<a href="?feed=http://blog.japan.cnet.com/lessig/index.rdf" title="Test: EUC-JP Encoding">Japanese Language</a>,
<a href="?feed=http://nurapt.kaist.ac.kr/~jamaica/htmls/blog/rss.php&amp;input=EUC-KR" title="Test: EUC-KR Encoding">Korean Language</a>,
<a href="?feed=http://mir.aculo.us/xml/rss/feed.xml" title="Weblog for the developer of Scriptaculous">mir.aculo.us</a>,
<a href="?feed=http://images.apple.com/trailers/rss/newtrailers.rss" title="Apple's QuickTime movie trailer site">Movie Trailers</a>,
<a href="?feed=http://www.newspond.com/rss/main.xml" title="Tech and Science News">Newspond</a>,
<a href="?feed=http://nick.typepad.com/blog/index.rss" title="Developer of TopStyle and FeedDemon">Nick Bradbury</a>,
<a href="?feed=http://feeds.feedburner.com/ok-cancel" title="Usability comics and commentary">OK/Cancel</a>,
<a href="?feed=http://osnews.com/files/recent.rdf" title="News about every OS ever">OS News</a>,
<a href="?feed=http://weblog.philringnalda.com/feed/" title="Test: Atom 1.0 Support">Phil Ringnalda</a>,
<a href="?feed=http://kabili.libsyn.com/rss" title="Test: Improved enclosure type sniffing">Photoshop Videocast</a>,
<a href="?feed=http://www.pariurisportive.com/blog/xmlsrv/rss2.php?blog=2" title="Test: ISO-8859-1 Encoding">Romanian Language</a>,
<a href="?feed=http://www.erased.info/rss2.php" title="Test: KOI8-R Encoding">Russian Language</a>,
<a href="?feed=http://www.upsaid.com/isis/index.rdf" title="Test: BIG5 Encoding">Traditional Chinese Language</a>,
<a href="?feed=http://technorati.com/watchlists/rss.html?wid=29290" title="Technorati watch for SimplePie">Technorati</a>,
<a href="?feed=http://www.tbray.org/ongoing/ongoing.atom" title="Test: Atom 1.0 Support">Tim Bray</a>,
<a href="?feed=http://tuaw.com/rss.xml" title="Apple News">TUAW</a>,
<a href="?feed=http://www.tvgasm.com/atom.xml&amp;image=true" title="Test: Bypass Image Hotlink Blocking">TVgasm</a>,
<a href="?feed=http://uneasysilence.com/feed/" title="Interesting tech randomness">UNEASYsilence</a>,
<a href="?feed=http://feeds.feedburner.com/web20Show" title="Test: Embedded Enclosures">Web 2.0 Show</a>,
<a href="?feed=http://windowsvistablog.com/blogs/MainFeed.aspx" title="Test: Tag Stripping">Windows Vista Blog</a>,
<a href="?feed=http://xkcd.com/rss.xml" title="Test: LightHTTPd and GZipping">XKCD</a>,
<a href="?feed=http://rss.news.yahoo.com/rss/topstories" title="World News">Yahoo! News</a>,
<a href="?feed=http://youtube.com/rss/global/top_favorites.rss" title="Funny user-submitted videos">You Tube</a>,
<a href="?feed=http://zeldman.com/rss/" title="The father of the web standards movement">Zeldman</a></p>
</div>
<div id="sp_results">
<!-- As long as the feed has data to work with... -->
<?php if ($success): ?>
<div class="chunk focus" align="center">
<!-- If the feed has a link back to the site that publishes it (which 99% of them do), link the feed's title to it. -->
<h3 class="header"><?php if ($feed->get_link()) echo '<a href="' . $feed->get_link() . '">'; echo $feed->get_title(); if ($feed->get_link()) echo '</a>'; ?></h3>
<!-- If the feed has a description, display it. -->
<?php echo $feed->get_description(); ?>
</div>
<!-- Add subscribe links for several different aggregation services -->
<p class="subscribe"><strong>Subscribe:</strong> <a href="<?php echo $feed->subscribe_bloglines(); ?>">Bloglines</a>, <a href="<?php echo $feed->subscribe_google(); ?>">Google Reader</a>, <a href="<?php echo $feed->subscribe_msn(); ?>">My MSN</a>, <a href="<?php echo $feed->subscribe_netvibes(); ?>">Netvibes</a>, <a href="<?php echo $feed->subscribe_newsburst(); ?>">Newsburst</a><br /><a href="<?php echo $feed->subscribe_newsgator(); ?>">Newsgator</a>, <a href="<?php echo $feed->subscribe_odeo(); ?>">Odeo</a>, <a href="<?php echo $feed->subscribe_podnova(); ?>">Podnova</a>, <a href="<?php echo $feed->subscribe_rojo(); ?>">Rojo</a>, <a href="<?php echo $feed->subscribe_yahoo(); ?>">My Yahoo!</a>, <a href="<?php echo $feed->subscribe_feed(); ?>">Desktop Reader</a></p>
<!-- Let's begin looping through each individual news item in the feed. -->
<?php foreach($feed->get_items() as $item): ?>
<div class="chunk">
<?php
// Let's add a favicon for each item. If one doesn't exist, we'll use an alternate one.
if (!$favicon = $feed->get_favicon())
{
$favicon = './for_the_demo/favicons/alternate.png';
}
?>
<!-- If the item has a permalink back to the original post (which 99% of them do), link the item's title to it. -->
<h4><img src="<?php echo $favicon; ?>" alt="Favicon" class="favicon" /><?php if ($item->get_permalink()) echo '<a href="' . $item->get_permalink() . '">'; echo $item->get_title(); if ($item->get_permalink()) echo '</a>'; ?>&nbsp;<span class="footnote"><?php echo $item->get_date('j M Y, g:i a'); ?></span></h4>
<!-- Display the item's primary content. -->
<?php echo $item->get_content(); ?>
<?php
// Check for enclosures. If an item has any, set the first one to the $enclosure variable.
if ($enclosure = $item->get_enclosure(0))
{
// Use the embed() method to embed the enclosure into the page inline.
echo '<div align="center">';
echo '<p>' . $enclosure->embed(array(
'audio' => './for_the_demo/place_audio.png',
'video' => './for_the_demo/place_video.png',
'mediaplayer' => './for_the_demo/mediaplayer.swf',
'altclass' => 'download'
)) . '</p>';
if ($enclosure->get_link() && $enclosure->get_type())
{
echo '<p class="footnote" align="center">(' . $enclosure->get_type();
if ($enclosure->get_size())
{
echo '; ' . $enclosure->get_size() . ' MB';
}
echo ')</p>';
}
if ($enclosure->get_thumbnail())
{
echo '<div><img src="' . $enclosure->get_thumbnail() . '" alt="" /></div>';
}
echo '</div>';
}
?>
<!-- Add links to add this post to one of a handful of services. -->
<p class="footnote favicons" align="center">
<a href="<?php echo $item->add_to_blinklist(); ?>" title="Add post to Blinklist"><img src="./for_the_demo/favicons/blinklist.png" alt="Blinklist" /></a>
<a href="<?php echo $item->add_to_blogmarks(); ?>" title="Add post to Blogmarks"><img src="./for_the_demo/favicons/blogmarks.png" alt="Blogmarks" /></a>
<a href="<?php echo $item->add_to_delicious(); ?>" title="Add post to del.icio.us"><img src="./for_the_demo/favicons/delicious.png" alt="del.icio.us" /></a>
<a href="<?php echo $item->add_to_digg(); ?>" title="Digg this!"><img src="./for_the_demo/favicons/digg.png" alt="Digg" /></a>
<a href="<?php echo $item->add_to_magnolia(); ?>" title="Add post to Ma.gnolia"><img src="./for_the_demo/favicons/magnolia.png" alt="Ma.gnolia" /></a>
<a href="<?php echo $item->add_to_myweb20(); ?>" title="Add post to My Web 2.0"><img src="./for_the_demo/favicons/myweb2.png" alt="My Web 2.0" /></a>
<a href="<?php echo $item->add_to_newsvine(); ?>" title="Add post to Newsvine"><img src="./for_the_demo/favicons/newsvine.png" alt="Newsvine" /></a>
<a href="<?php echo $item->add_to_reddit(); ?>" title="Add post to Reddit"><img src="./for_the_demo/favicons/reddit.png" alt="Reddit" /></a>
<a href="<?php echo $item->add_to_segnalo(); ?>" title="Add post to Segnalo"><img src="./for_the_demo/favicons/segnalo.png" alt="Segnalo" /></a>
<a href="<?php echo $item->add_to_simpy(); ?>" title="Add post to Simpy"><img src="./for_the_demo/favicons/simpy.png" alt="Simpy" /></a>
<a href="<?php echo $item->add_to_spurl(); ?>" title="Add post to Spurl"><img src="./for_the_demo/favicons/spurl.png" alt="Spurl" /></a>
<a href="<?php echo $item->add_to_wists(); ?>" title="Add post to Wists"><img src="./for_the_demo/favicons/wists.png" alt="Wists" /></a>
<a href="<?php echo $item->search_technorati(); ?>" title="Who's linking to this post?"><img src="./for_the_demo/favicons/technorati.png" alt="Technorati" /></a>
</p>
</div>
<!-- Stop looping through each item once we've gone through all of them. -->
<?php endforeach; ?>
<!-- From here on, we're no longer using data from the feed. -->
<?php endif; ?>
</div>
<div>
<!-- Display how fast the page was rendered. -->
<p class="footnote">Page processed in <?php $mtime = explode(' ', microtime()); echo round($mtime[0] + $mtime[1] - $starttime, 3); ?> seconds.</p>
<!-- Display the version of SimplePie being loaded. -->
<p class="footnote">Powered by <a href="<?php echo SIMPLEPIE_URL; ?>"><?php echo SIMPLEPIE_NAME . ' ' . SIMPLEPIE_VERSION . ', Build ' . SIMPLEPIE_BUILD; ?></a>. Run the <a href="../compatibility_test/sp_compatibility_test.php">SimplePie Compatibility Test</a>. SimplePie is &copy; 2004&ndash;<?php echo date('Y'); ?>, Ryan Parman and Geoffrey Sneddon, and licensed under the <a href="http://www.opensource.org/licenses/bsd-license.php">BSD License</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -1,137 +0,0 @@
<?php
function microtime_float()
{
if (version_compare(phpversion(), '5.0.0', '>='))
{
return microtime(true);
}
else
{
list($usec, $sec) = explode(' ', microtime());
return ((float) $usec + (float) $sec);
}
}
$start = microtime_float();
include('../simplepie.inc');
// Parse it
$feed = new SimplePie();
if (!empty($_GET['feed']))
{
if (get_magic_quotes_gpc())
{
$_GET['feed'] = stripslashes($_GET['feed']);
}
$feed->set_feed_url($_GET['feed']);
$feed->init();
}
$feed->handle_content_type();
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo (empty($_GET['feed'])) ? 'SimplePie' : 'SimplePie: ' . $feed->get_title(); ?></title>
<!-- META HTTP-EQUIV -->
<meta http-equiv="content-type" content="text/html; charset=<?php echo ($feed->get_encoding()) ? $feed->get_encoding() : 'UTF-8'; ?>" />
<meta http-equiv="imagetoolbar" content="false" />
<style type="text/css">
html, body {
height:100%;
margin:0;
padding:0;
}
h1 {
background-color:#333;
color:#fff;
font-size:3em;
margin:0;
padding:5px 15px;
text-align:center;
}
div#footer {
padding:5px 0;
}
div#footer,
div#footer a {
text-align:center;
font-size:0.7em;
}
div#footer a {
text-decoration:underline;
}
code {
background-color:#f3f3ff;
color:#000;
}
pre {
background-color:#f3f3ff;
color:#000080;
border:1px dotted #000080;
padding:3px 5px;
}
form {
margin:0;
padding:0;
}
div.chunk {
border-bottom:1px solid #ccc;
}
form#sp_form {
text-align:center;
margin:0;
padding:0;
}
form#sp_form input.text {
width:85%;
}
</style>
</head>
<body>
<h1><?php echo (empty($_GET['feed'])) ? 'SimplePie' : 'SimplePie: ' . $feed->get_title(); ?></h1>
<form action="" method="get" name="sp_form" id="sp_form">
<p><input type="text" name="feed" value="<?php echo ($feed->subscribe_url()) ? htmlspecialchars($feed->subscribe_url()) : 'http://'; ?>" class="text" id="feed_input" />&nbsp;<input type="submit" value="Read" class="button" /></p>
</form>
<div id="sp_results">
<?php if ($feed->data): ?>
<?php $items = $feed->get_items(); ?>
<p align="center"><span style="background-color:#ffc;">Displaying <?php echo $feed->get_item_quantity(); ?> most recent entries.</span></p>
<?php foreach($items as $item): ?>
<div class="chunk" style="padding:0 5px;">
<h4><a href="<?php echo $item->get_permalink(); ?>"><?php echo $item->get_title(); ?></a> <?php echo $item->get_date('j M Y'); ?></h4>
<?php echo $item->get_content(); ?>
<?php
if ($enclosure = $item->get_enclosure(0))
echo '<p><a href="' . $enclosure->get_link() . '" class="download"><img src="./for_the_demo/mini_podcast.png" alt="Podcast" title="Download the Podcast" border="0" /></a></p>';
?>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
<div id="footer">
Powered by <?php echo SIMPLEPIE_LINKBACK; ?>, a product of <a href="http://www.skyzyx.com">Skyzyx Technologies</a>.<br />
Page created in <?php echo round(microtime_float()-$start, 3); ?> seconds.
</div>
</body>
</html>

View file

@ -1,108 +0,0 @@
<?php
/********************************************************************
MULTIFEEDS TEST PAGE
Nothing too exciting here. Just a sample page that demos integrated
Multifeeds support as well as cached favicons and perhaps a few other
things.
Lots of this code is commented to help explain some of the new stuff.
Code was tested in PHP 5.2.2, but *should* also work with earlier
versions of PHP, as supported by SimplePie (PHP 4.1).
********************************************************************/
// Include the SimplePie library, and the one that handles internationalized domain names.
require_once('../simplepie.inc');
require_once('../idn/idna_convert.class.php');
// Initialize some feeds for use.
$feed = new SimplePie();
$feed->set_feed_url(array(
'http://rss.news.yahoo.com/rss/topstories',
'http://news.google.com/?output=atom',
'http://rss.cnn.com/rss/cnn_topstories.rss'
));
// When we set these, we need to make sure that the handler_image.php file is also trying to read from the same cache directory that we are.
$feed->set_favicon_handler('./handler_image.php');
$feed->set_image_handler('./handler_image.php');
// Initialize the feed.
$feed->init();
// Make sure the page is being served with the UTF-8 headers.
$feed->handle_content_type();
// Begin the (X)HTML page.
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Multifeeds Test page</title>
<link rel="stylesheet" href="../demo/for_the_demo/simplepie.css" type="text/css" media="screen" title="SimplePie Styles" charset="utf-8" />
<style type="text/css">
div#site {
width:600px;
}
span.footnote {
white-space:nowrap;
}
h1 {
line-height:1.4em;
}
h4 {
padding-left:20px;
background-color:transparent;
background-repeat:no-repeat;
background-position:0 1px;
}
.clearBoth {
clear:both;
}
</style>
</head>
<body>
<div id="site">
<?php if ($feed->error): ?>
<p><?=$feed->error()?></p>
<?php endif ?>
<div class="chunk">
<h1>Quick-n-Dirty Multifeeds Demo</a></h1>
</div>
<?php
// Let's loop through each item in the feed.
foreach($feed->get_items() as $item):
// Let's give ourselves a reference to the parent $feed object for this particular item.
$feed = $item->get_feed();
?>
<div class="chunk">
<h4 style="background-image:url(<?php echo $feed->get_favicon(); ?>);"><a href="<?php echo $item->get_permalink(); ?>"><?php echo html_entity_decode($item->get_title(), ENT_QUOTES, 'UTF-8'); ?></a></h4>
<!-- get_content() prefers full content over summaries -->
<?php echo $item->get_content(); ?>
<?php if ($enclosure = $item->get_enclosure()): ?>
<div>
<?php echo $enclosure->native_embed(array(
// New 'mediaplayer' attribute shows off Flash-based MP3 and FLV playback.
'mediaplayer' => '../demo/for_the_demo/mediaplayer.swf'
)); ?>
</div>
<?php endif; ?>
<p class="footnote">Source: <a href="<?php echo $feed->get_permalink(); ?>"><?php echo $feed->get_title(); ?></a> | <?php echo $item->get_date('j M Y | g:i a'); ?></p>
</div>
<?php endforeach ?>
<p class="footnote">This is a test of the emergency broadcast system. This is only a test&hellip; beeeeeeeeeeeeeeeeeeeeeeeeeep!</p>
</div>
</body>
</html>

View file

@ -1,62 +0,0 @@
<?php
include_once('../simplepie.inc');
include_once('../idn/idna_convert.class.php');
// Parse it
$feed = new SimplePie();
if (isset($_GET['feed']) && $_GET['feed'] !== '')
{
if (get_magic_quotes_gpc())
{
$_GET['feed'] = stripslashes($_GET['feed']);
}
$feed->set_feed_url($_GET['feed']);
$feed->enable_cache(false);
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$feed->init();
$endtime = explode(' ', microtime());
$endtime = $endtime[1] + $endtime[0];
$time = $endtime - $starttime;
}
else
{
$time = 'null';
}
$feed->handle_content_type();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>SimplePie Test</title>
<pre>
<?php
// memory_get_peak_usage() only exists on PHP 5.2 and higher if PHP is compiled with the --enable-memory-limit configuration option or on PHP 5.2.1 and higher (which runs as if --enable-memory-limit was on, with no option)
if (function_exists('memory_get_peak_usage'))
{
var_dump($time, memory_get_usage(), memory_get_peak_usage());
}
// memory_get_usage() only exists if PHP is compiled with the --enable-memory-limit configuration option or on PHP 5.2.1 and higher (which runs as if --enable-memory-limit was on, with no option)
else if (function_exists('memory_get_usage'))
{
var_dump($time, memory_get_usage());
}
else
{
var_dump($time);
}
// Output buffer
function callable_htmlspecialchars($string)
{
return htmlspecialchars($string);
}
ob_start('callable_htmlspecialchars');
// Output
print_r($feed);
ob_end_flush();
?>
</pre>

View file

@ -1,502 +0,0 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

View file

@ -1,123 +0,0 @@
*******************************************************************************
* *
* IDNA Convert (idna_convert.class.php) *
* *
* http://idnaconv.phlymail.de mailto:phlymail@phlylabs.de *
*******************************************************************************
* (c) 2004-2007 phlyLabs, Berlin *
* This file is encoded in UTF-8 *
*******************************************************************************
Introduction
------------
The class idna_convert allows to convert internationalized domain names
(see RFC 3490, 3491, 3492 and 3454 for detials) as they can be used with various
registries worldwide to be translated between their original (localized) form
and their encoded form as it will be used in the DNS (Domain Name System).
The class provides two public methods, encode() and decode(), which do exactly
what you would expect them to do. You are allowed to use complete domain names,
simple strings and complete email addresses as well. That means, that you might
use any of the following notations:
- www.nörgler.com
- xn--nrgler-wxa
- xn--brse-5qa.xn--knrz-1ra.info
Errors, incorrectly encoded or invalid strings will lead to either a FALSE
response (when in strict mode) or to only partially converted strings.
You can query the occured error by calling the method get_last_error().
Unicode strings are expected to be either UTF-8 strings, UCS-4 strings or UCS-4
arrays. The default format is UTF-8. For setting different encodings, you can
call the method setParams() - please see the inline documentation for details.
ACE strings (the Punycode form) are always 7bit ASCII strings.
ATTENTION: We no longer supply the PHP5 version of the class. It is not
necessary for achieving a successfull conversion, since the supplied PHP code is
compatible with both PHP4 and PHP5. We expect to see no compatibility issues
with the upcoming PHP6, too.
Files
-----
idna_convert.class.php - The actual class
idna_convert.create.npdata.php - Useful for (re)creating the NPData file
npdata.ser - Serialized data for NamePrep
example.php - An example web page for converting
ReadMe.txt - This file
LICENCE - The LGPL licence file
The class is contained in idna_convert.class.php.
MAKE SURE to copy the npdata.ser file into the same folder as the class file
itself!
Examples
--------
1. Say we wish to encode the domain name nörgler.com:
// Include the class
include_once('idna_convert.class.php');
// Instantiate it *
$IDN = new idna_convert();
// The input string, if input is not UTF-8 or UCS-4, it must be converted before
$input = utf8_encode('nörgler.com');
// Encode it to its punycode presentation
$output = $IDN->encode($input);
// Output, what we got now
echo $output; // This will read: xn--nrgler-wxa.com
2. We received an email from a punycoded domain and are willing to learn, how
the domain name reads originally
// Include the class
include_once('idna_convert.class.php');
// Instantiate it (depending on the version you are using) with
$IDN = new idna_convert();
// The input string
$input = 'andre@xn--brse-5qa.xn--knrz-1ra.info';
// Encode it to its punycode presentation
$output = $IDN->decode($input);
// Output, what we got now, if output should be in a format different to UTF-8
// or UCS-4, you will have to convert it before outputting it
echo utf8_decode($output); // This will read: andre@börse.knörz.info
3. The input is read from a UCS-4 coded file and encoded line by line. By
appending the optional second parameter we tell enode() about the input
format to be used
// Include the class
include_once('idna_convert.class.php');
// Instantiate it
$IDN = new dinca_convert();
// Iterate through the input file line by line
foreach (file('ucs4-domains.txt') as $line) {
echo $IDN->encode(trim($line), 'ucs4_string');
echo "\n";
}
NPData
------
Should you need to recreate the npdata.ser file, which holds all necessary translation
tables in a serialized format, you can run the file idna_convert.create.npdata.php, which
creates the file for you and stores it in the same folder, where it is placed.
Should you need to do changes to the tables you can do so, but beware of the consequences.
Contact us
----------
In case of errors, bugs, questions, wishes, please don't hesitate to contact us
under the email address above.
The team of phlyLabs
http://phlylabs.de
mailto:phlymail@phlylabs.de

View file

@ -1,969 +0,0 @@
<?php
// {{{ license
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
//
// +----------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU Lesser General Public License as |
// | published by the Free Software Foundation; either version 2.1 of the |
// | License, or (at your option) any later version. |
// | |
// | This library 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 |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
// | USA. |
// +----------------------------------------------------------------------+
//
// }}}
/**
* Encode/decode Internationalized Domain Names.
*
* The class allows to convert internationalized domain names
* (see RFC 3490 for details) as they can be used with various registries worldwide
* to be translated between their original (localized) form and their encoded form
* as it will be used in the DNS (Domain Name System).
*
* The class provides two public methods, encode() and decode(), which do exactly
* what you would expect them to do. You are allowed to use complete domain names,
* simple strings and complete email addresses as well. That means, that you might
* use any of the following notations:
*
* - www.nörgler.com
* - xn--nrgler-wxa
* - xn--brse-5qa.xn--knrz-1ra.info
*
* Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4
* array. Unicode output is available in the same formats.
* You can select your preferred format via {@link set_paramter()}.
*
* ACE input and output is always expected to be ASCII.
*
* @author Matthias Sommerfeld <mso@phlylabs.de>
* @copyright 2004-2007 phlyLabs Berlin, http://phlylabs.de
* @version 0.5.1
*
*/
class idna_convert
{
/**
* Holds all relevant mapping tables, loaded from a seperate file on construct
* See RFC3454 for details
*
* @var array
* @access private
*/
var $NP = array();
// Internal settings, do not mess with them
var $_punycode_prefix = 'xn--';
var $_invalid_ucs = 0x80000000;
var $_max_ucs = 0x10FFFF;
var $_base = 36;
var $_tmin = 1;
var $_tmax = 26;
var $_skew = 38;
var $_damp = 700;
var $_initial_bias = 72;
var $_initial_n = 0x80;
var $_sbase = 0xAC00;
var $_lbase = 0x1100;
var $_vbase = 0x1161;
var $_tbase = 0x11A7;
var $_lcount = 19;
var $_vcount = 21;
var $_tcount = 28;
var $_ncount = 588; // _vcount * _tcount
var $_scount = 11172; // _lcount * _tcount * _vcount
var $_error = false;
// See {@link set_paramter()} for details of how to change the following
// settings from within your script / application
var $_api_encoding = 'utf8'; // Default input charset is UTF-8
var $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden
var $_strict_mode = false; // Behave strict or not
// The constructor
function idna_convert($options = false)
{
$this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
if (function_exists('file_get_contents')) {
$this->NP = unserialize(file_get_contents(dirname(__FILE__).'/npdata.ser'));
} else {
$this->NP = unserialize(join('', file(dirname(__FILE__).'/npdata.ser')));
}
// If parameters are given, pass these to the respective method
if (is_array($options)) {
return $this->set_parameter($options);
}
return true;
}
/**
* Sets a new option value. Available options and values:
* [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
* 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
* [overlong - Unicode does not allow unnecessarily long encodings of chars,
* to allow this, set this parameter to true, else to false;
* default is false.]
* [strict - true: strict mode, good for registration purposes - Causes errors
* on failures; false: loose mode, ideal for "wildlife" applications
* by silently ignoring errors and returning the original input instead
*
* @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs)
* @param string Value to use (if parameter 1 is a string)
* @return boolean true on success, false otherwise
* @access public
*/
function set_parameter($option, $value = false)
{
if (!is_array($option)) {
$option = array($option => $value);
}
foreach ($option as $k => $v) {
switch ($k) {
case 'encoding':
switch ($v) {
case 'utf8':
case 'ucs4_string':
case 'ucs4_array':
$this->_api_encoding = $v;
break;
default:
$this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k);
return false;
}
break;
case 'overlong':
$this->_allow_overlong = ($v) ? true : false;
break;
case 'strict':
$this->_strict_mode = ($v) ? true : false;
break;
default:
$this->_error('Set Parameter: Unknown option '.$k);
return false;
}
}
return true;
}
/**
* Decode a given ACE domain name
* @param string Domain name (ACE string)
* [@param string Desired output encoding, see {@link set_parameter}]
* @return string Decoded Domain name (UTF-8 or UCS-4)
* @access public
*/
function decode($input, $one_time_encoding = false)
{
// Optionally set
if ($one_time_encoding) {
switch ($one_time_encoding) {
case 'utf8':
case 'ucs4_string':
case 'ucs4_array':
break;
default:
$this->_error('Unknown encoding '.$one_time_encoding);
return false;
}
}
// Make sure to drop any newline characters around
$input = trim($input);
// Negotiate input and try to determine, whether it is a plain string,
// an email address or something like a complete URL
if (strpos($input, '@')) { // Maybe it is an email address
// No no in strict mode
if ($this->_strict_mode) {
$this->_error('Only simple domain name parts can be handled in strict mode');
return false;
}
list ($email_pref, $input) = explode('@', $input, 2);
$arr = explode('.', $input);
foreach ($arr as $k => $v) {
if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
$conv = $this->_decode($v);
if ($conv) $arr[$k] = $conv;
}
}
$input = join('.', $arr);
$arr = explode('.', $email_pref);
foreach ($arr as $k => $v) {
if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
$conv = $this->_decode($v);
if ($conv) $arr[$k] = $conv;
}
}
$email_pref = join('.', $arr);
$return = $email_pref . '@' . $input;
} elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
// No no in strict mode
if ($this->_strict_mode) {
$this->_error('Only simple domain name parts can be handled in strict mode');
return false;
}
$parsed = parse_url($input);
if (isset($parsed['host'])) {
$arr = explode('.', $parsed['host']);
foreach ($arr as $k => $v) {
$conv = $this->_decode($v);
if ($conv) $arr[$k] = $conv;
}
$parsed['host'] = join('.', $arr);
$return =
(empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://'))
.(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@')
.$parsed['host']
.(empty($parsed['port']) ? '' : ':'.$parsed['port'])
.(empty($parsed['path']) ? '' : $parsed['path'])
.(empty($parsed['query']) ? '' : '?'.$parsed['query'])
.(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']);
} else { // parse_url seems to have failed, try without it
$arr = explode('.', $input);
foreach ($arr as $k => $v) {
$conv = $this->_decode($v);
$arr[$k] = ($conv) ? $conv : $v;
}
$return = join('.', $arr);
}
} else { // Otherwise we consider it being a pure domain name string
$return = $this->_decode($input);
if (!$return) $return = $input;
}
// The output is UTF-8 by default, other output formats need conversion here
// If one time encoding is given, use this, else the objects property
switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
case 'utf8':
return $return;
break;
case 'ucs4_string':
return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
break;
case 'ucs4_array':
return $this->_utf8_to_ucs4($return);
break;
default:
$this->_error('Unsupported output format');
return false;
}
}
/**
* Encode a given UTF-8 domain name
* @param string Domain name (UTF-8 or UCS-4)
* [@param string Desired input encoding, see {@link set_parameter}]
* @return string Encoded Domain name (ACE string)
* @access public
*/
function encode($decoded, $one_time_encoding = false)
{
// Forcing conversion of input to UCS4 array
// If one time encoding is given, use this, else the objects property
switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
case 'utf8':
$decoded = $this->_utf8_to_ucs4($decoded);
break;
case 'ucs4_string':
$decoded = $this->_ucs4_string_to_ucs4($decoded);
case 'ucs4_array':
break;
default:
$this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
return false;
}
// No input, no output, what else did you expect?
if (empty($decoded)) return '';
// Anchors for iteration
$last_begin = 0;
// Output string
$output = '';
foreach ($decoded as $k => $v) {
// Make sure to use just the plain dot
switch($v) {
case 0x3002:
case 0xFF0E:
case 0xFF61:
$decoded[$k] = 0x2E;
// Right, no break here, the above are converted to dots anyway
// Stumbling across an anchoring character
case 0x2E:
case 0x2F:
case 0x3A:
case 0x3F:
case 0x40:
// Neither email addresses nor URLs allowed in strict mode
if ($this->_strict_mode) {
$this->_error('Neither email addresses nor URLs are allowed in strict mode.');
return false;
} else {
// Skip first char
if ($k) {
$encoded = '';
$encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin)));
if ($encoded) {
$output .= $encoded;
} else {
$output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin)));
}
$output .= chr($decoded[$k]);
}
$last_begin = $k + 1;
}
}
}
// Catch the rest of the string
if ($last_begin) {
$inp_len = sizeof($decoded);
$encoded = '';
$encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
if ($encoded) {
$output .= $encoded;
} else {
$output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
}
return $output;
} else {
if ($output = $this->_encode($decoded)) {
return $output;
} else {
return $this->_ucs4_to_utf8($decoded);
}
}
}
/**
* Use this method to get the last error ocurred
* @param void
* @return string The last error, that occured
* @access public
*/
function get_last_error()
{
return $this->_error;
}
/**
* The actual decoding algorithm
* @access private
*/
function _decode($encoded)
{
// We do need to find the Punycode prefix
if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) {
$this->_error('This is not a punycode string');
return false;
}
$encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded);
// If nothing left after removing the prefix, it is hopeless
if (!$encode_test) {
$this->_error('The given encoded string was empty');
return false;
}
// Find last occurence of the delimiter
$delim_pos = strrpos($encoded, '-');
if ($delim_pos > strlen($this->_punycode_prefix)) {
for ($k = strlen($this->_punycode_prefix); $k < $delim_pos; ++$k) {
$decoded[] = ord($encoded{$k});
}
} else {
$decoded = array();
}
$deco_len = count($decoded);
$enco_len = strlen($encoded);
// Wandering through the strings; init
$is_first = true;
$bias = $this->_initial_bias;
$idx = 0;
$char = $this->_initial_n;
for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) {
$digit = $this->_decode_digit($encoded{$enco_idx++});
$idx += $digit * $w;
$t = ($k <= $bias) ? $this->_tmin :
(($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
if ($digit < $t) break;
$w = (int) ($w * ($this->_base - $t));
}
$bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
$is_first = false;
$char += (int) ($idx / ($deco_len + 1));
$idx %= ($deco_len + 1);
if ($deco_len > 0) {
// Make room for the decoded char
for ($i = $deco_len; $i > $idx; $i--) {
$decoded[$i] = $decoded[($i - 1)];
}
}
$decoded[$idx++] = $char;
}
return $this->_ucs4_to_utf8($decoded);
}
/**
* The actual encoding algorithm
* @access private
*/
function _encode($decoded)
{
// We cannot encode a domain name containing the Punycode prefix
$extract = strlen($this->_punycode_prefix);
$check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
$check_deco = array_slice($decoded, 0, $extract);
if ($check_pref == $check_deco) {
$this->_error('This is already a punycode string');
return false;
}
// We will not try to encode strings consisting of basic code points only
$encodable = false;
foreach ($decoded as $k => $v) {
if ($v > 0x7a) {
$encodable = true;
break;
}
}
if (!$encodable) {
$this->_error('The given string does not contain encodable chars');
return false;
}
// Do NAMEPREP
$decoded = $this->_nameprep($decoded);
if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed
$deco_len = count($decoded);
if (!$deco_len) return false; // Empty array
$codecount = 0; // How many chars have been consumed
$encoded = '';
// Copy all basic code points to output
for ($i = 0; $i < $deco_len; ++$i) {
$test = $decoded[$i];
// Will match [-0-9a-zA-Z]
if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B)
|| (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
$encoded .= chr($decoded[$i]);
$codecount++;
}
}
if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones
// Start with the prefix; copy it to output
$encoded = $this->_punycode_prefix.$encoded;
// If we have basic code points in output, add an hyphen to the end
if ($codecount) $encoded .= '-';
// Now find and encode all non-basic code points
$is_first = true;
$cur_code = $this->_initial_n;
$bias = $this->_initial_bias;
$delta = 0;
while ($codecount < $deco_len) {
// Find the smallest code point >= the current code point and
// remember the last ouccrence of it in the input
for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
$next_code = $decoded[$i];
}
}
$delta += ($next_code - $cur_code) * ($codecount + 1);
$cur_code = $next_code;
// Scan input again and encode all characters whose code point is $cur_code
for ($i = 0; $i < $deco_len; $i++) {
if ($decoded[$i] < $cur_code) {
$delta++;
} elseif ($decoded[$i] == $cur_code) {
for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
$t = ($k <= $bias) ? $this->_tmin :
(($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
if ($q < $t) break;
$encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
$q = (int) (($q - $t) / ($this->_base - $t));
}
$encoded .= $this->_encode_digit($q);
$bias = $this->_adapt($delta, $codecount+1, $is_first);
$codecount++;
$delta = 0;
$is_first = false;
}
}
$delta++;
$cur_code++;
}
return $encoded;
}
/**
* Adapt the bias according to the current code point and position
* @access private
*/
function _adapt($delta, $npoints, $is_first)
{
$delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
$delta += intval($delta / $npoints);
for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
$delta = intval($delta / ($this->_base - $this->_tmin));
}
return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
}
/**
* Encoding a certain digit
* @access private
*/
function _encode_digit($d)
{
return chr($d + 22 + 75 * ($d < 26));
}
/**
* Decode a certain digit
* @access private
*/
function _decode_digit($cp)
{
$cp = ord($cp);
return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
}
/**
* Internal error handling method
* @access private
*/
function _error($error = '')
{
$this->_error = $error;
}
/**
* Do Nameprep according to RFC3491 and RFC3454
* @param array Unicode Characters
* @return string Unicode Characters, Nameprep'd
* @access private
*/
function _nameprep($input)
{
$output = array();
$error = false;
//
// Mapping
// Walking through the input array, performing the required steps on each of
// the input chars and putting the result into the output array
// While mapping required chars we apply the cannonical ordering
foreach ($input as $v) {
// Map to nothing == skip that code point
if (in_array($v, $this->NP['map_nothing'])) continue;
// Try to find prohibited input
if (in_array($v, $this->NP['prohibit']) || in_array($v, $this->NP['general_prohibited'])) {
$this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
return false;
}
foreach ($this->NP['prohibit_ranges'] as $range) {
if ($range[0] <= $v && $v <= $range[1]) {
$this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
return false;
}
}
//
// Hangul syllable decomposition
if (0xAC00 <= $v && $v <= 0xD7AF) {
foreach ($this->_hangul_decompose($v) as $out) {
$output[] = (int) $out;
}
// There's a decomposition mapping for that code point
} elseif (isset($this->NP['replacemaps'][$v])) {
foreach ($this->_apply_cannonical_ordering($this->NP['replacemaps'][$v]) as $out) {
$output[] = (int) $out;
}
} else {
$output[] = (int) $v;
}
}
// Before applying any Combining, try to rearrange any Hangul syllables
$output = $this->_hangul_compose($output);
//
// Combine code points
//
$last_class = 0;
$last_starter = 0;
$out_len = count($output);
for ($i = 0; $i < $out_len; ++$i) {
$class = $this->_get_combining_class($output[$i]);
if ((!$last_class || $last_class > $class) && $class) {
// Try to match
$seq_len = $i - $last_starter;
$out = $this->_combine(array_slice($output, $last_starter, $seq_len));
// On match: Replace the last starter with the composed character and remove
// the now redundant non-starter(s)
if ($out) {
$output[$last_starter] = $out;
if (count($out) != $seq_len) {
for ($j = $i+1; $j < $out_len; ++$j) {
$output[$j-1] = $output[$j];
}
unset($output[$out_len]);
}
// Rewind the for loop by one, since there can be more possible compositions
$i--;
$out_len--;
$last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]);
continue;
}
}
// The current class is 0
if (!$class) $last_starter = $i;
$last_class = $class;
}
return $output;
}
/**
* Decomposes a Hangul syllable
* (see http://www.unicode.org/unicode/reports/tr15/#Hangul
* @param integer 32bit UCS4 code point
* @return array Either Hangul Syllable decomposed or original 32bit value as one value array
* @access private
*/
function _hangul_decompose($char)
{
$sindex = (int) $char - $this->_sbase;
if ($sindex < 0 || $sindex >= $this->_scount) {
return array($char);
}
$result = array();
$result[] = (int) $this->_lbase + $sindex / $this->_ncount;
$result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
$T = intval($this->_tbase + $sindex % $this->_tcount);
if ($T != $this->_tbase) $result[] = $T;
return $result;
}
/**
* Ccomposes a Hangul syllable
* (see http://www.unicode.org/unicode/reports/tr15/#Hangul
* @param array Decomposed UCS4 sequence
* @return array UCS4 sequence with syllables composed
* @access private
*/
function _hangul_compose($input)
{
$inp_len = count($input);
if (!$inp_len) return array();
$result = array();
$last = (int) $input[0];
$result[] = $last; // copy first char from input to output
for ($i = 1; $i < $inp_len; ++$i) {
$char = (int) $input[$i];
$sindex = $last - $this->_sbase;
$lindex = $last - $this->_lbase;
$vindex = $char - $this->_vbase;
$tindex = $char - $this->_tbase;
// Find out, whether two current characters are LV and T
if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0)
&& 0 <= $tindex && $tindex <= $this->_tcount) {
// create syllable of form LVT
$last += $tindex;
$result[(count($result) - 1)] = $last; // reset last
continue; // discard char
}
// Find out, whether two current characters form L and V
if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
// create syllable of form LV
$last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
$result[(count($result) - 1)] = $last; // reset last
continue; // discard char
}
// if neither case was true, just add the character
$last = $char;
$result[] = $char;
}
return $result;
}
/**
* Returns the combining class of a certain wide char
* @param integer Wide char to check (32bit integer)
* @return integer Combining class if found, else 0
* @access private
*/
function _get_combining_class($char)
{
return isset($this->NP['norm_combcls'][$char]) ? $this->NP['norm_combcls'][$char] : 0;
}
/**
* Apllies the cannonical ordering of a decomposed UCS4 sequence
* @param array Decomposed UCS4 sequence
* @return array Ordered USC4 sequence
* @access private
*/
function _apply_cannonical_ordering($input)
{
$swap = true;
$size = count($input);
while ($swap) {
$swap = false;
$last = $this->_get_combining_class(intval($input[0]));
for ($i = 0; $i < $size-1; ++$i) {
$next = $this->_get_combining_class(intval($input[$i+1]));
if ($next != 0 && $last > $next) {
// Move item leftward until it fits
for ($j = $i + 1; $j > 0; --$j) {
if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break;
$t = intval($input[$j]);
$input[$j] = intval($input[$j-1]);
$input[$j-1] = $t;
$swap = true;
}
// Reentering the loop looking at the old character again
$next = $last;
}
$last = $next;
}
}
return $input;
}
/**
* Do composition of a sequence of starter and non-starter
* @param array UCS4 Decomposed sequence
* @return array Ordered USC4 sequence
* @access private
*/
function _combine($input)
{
$inp_len = count($input);
foreach ($this->NP['replacemaps'] as $np_src => $np_target) {
if ($np_target[0] != $input[0]) continue;
if (count($np_target) != $inp_len) continue;
$hit = false;
foreach ($input as $k2 => $v2) {
if ($v2 == $np_target[$k2]) {
$hit = true;
} else {
$hit = false;
break;
}
}
if ($hit) return $np_src;
}
return false;
}
/**
* This converts an UTF-8 encoded string to its UCS-4 representation
* By talking about UCS-4 "strings" we mean arrays of 32bit integers representing
* each of the "chars". This is due to PHP not being able to handle strings with
* bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too.
* The following UTF-8 encodings are supported:
* bytes bits representation
* 1 7 0xxxxxxx
* 2 11 110xxxxx 10xxxxxx
* 3 16 1110xxxx 10xxxxxx 10xxxxxx
* 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
* 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
* 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
* Each x represents a bit that can be used to store character data.
* The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000
* @access private
*/
function _utf8_to_ucs4($input)
{
$output = array();
$out_len = 0;
$inp_len = strlen($input);
$mode = 'next';
$test = 'none';
for ($k = 0; $k < $inp_len; ++$k) {
$v = ord($input{$k}); // Extract byte from input string
if ($v < 128) { // We found an ASCII char - put into stirng as is
$output[$out_len] = $v;
++$out_len;
if ('add' == $mode) {
$this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
return false;
}
continue;
}
if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
$start_byte = $v;
$mode = 'add';
$test = 'range';
if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
$next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
$v = ($v - 192) << 6;
} elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
$next_byte = 1;
$v = ($v - 224) << 12;
} elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
$next_byte = 2;
$v = ($v - 240) << 18;
} elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
$next_byte = 3;
$v = ($v - 248) << 24;
} elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
$next_byte = 4;
$v = ($v - 252) << 30;
} else {
$this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k);
return false;
}
if ('add' == $mode) {
$output[$out_len] = (int) $v;
++$out_len;
continue;
}
}
if ('add' == $mode) {
if (!$this->_allow_overlong && $test == 'range') {
$test = 'none';
if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
$this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k);
return false;
}
}
if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
$v = ($v - 128) << ($next_byte * 6);
$output[($out_len - 1)] += $v;
--$next_byte;
} else {
$this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
return false;
}
if ($next_byte < 0) {
$mode = 'next';
}
}
} // for
return $output;
}
/**
* Convert UCS-4 string into UTF-8 string
* See _utf8_to_ucs4() for details
* @access private
*/
function _ucs4_to_utf8($input)
{
$output = '';
$k = 0;
foreach ($input as $v) {
++$k;
// $v = ord($v);
if ($v < 128) { // 7bit are transferred literally
$output .= chr($v);
} elseif ($v < (1 << 11)) { // 2 bytes
$output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63));
} elseif ($v < (1 << 16)) { // 3 bytes
$output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
} elseif ($v < (1 << 21)) { // 4 bytes
$output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63))
. chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
} elseif ($v < (1 << 26)) { // 5 bytes
$output .= chr(248 + ($v >> 24)) . chr(128 + (($v >> 18) & 63))
. chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63))
. chr(128 + ($v & 63));
} elseif ($v < (1 << 31)) { // 6 bytes
$output .= chr(252 + ($v >> 30)) . chr(128 + (($v >> 24) & 63))
. chr(128 + (($v >> 18) & 63)) . chr(128 + (($v >> 12) & 63))
. chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
} else {
$this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k);
return false;
}
}
return $output;
}
/**
* Convert UCS-4 array into UCS-4 string
*
* @access private
*/
function _ucs4_to_ucs4_string($input)
{
$output = '';
// Take array values and split output to 4 bytes per value
// The bit mask is 255, which reads &11111111
foreach ($input as $v) {
$output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255);
}
return $output;
}
/**
* Convert UCS-4 strin into UCS-4 garray
*
* @access private
*/
function _ucs4_string_to_ucs4($input)
{
$output = array();
$inp_len = strlen($input);
// Input length must be dividable by 4
if ($inp_len % 4) {
$this->_error('Input UCS4 string is broken');
return false;
}
// Empty input - return empty output
if (!$inp_len) return $output;
for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
// Increment output position every 4 input bytes
if (!($i % 4)) {
$out_len++;
$output[$out_len] = 0;
}
$output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
}
return $output;
}
}
/**
* Adapter class for aligning the API of idna_convert with that of Net_IDNA
* @author Matthias Sommerfeld <mso@phlylabs.de>
*/
class Net_IDNA_php4 extends idna_convert
{
/**
* Sets a new option value. Available options and values:
* [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
* 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
* [overlong - Unicode does not allow unnecessarily long encodings of chars,
* to allow this, set this parameter to true, else to false;
* default is false.]
* [strict - true: strict mode, good for registration purposes - Causes errors
* on failures; false: loose mode, ideal for "wildlife" applications
* by silently ignoring errors and returning the original input instead
*
* @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs)
* @param string Value to use (if parameter 1 is a string)
* @return boolean true on success, false otherwise
* @access public
*/
function setParams($option, $param = false)
{
return $this->IC->set_parameters($option, $param);
}
}
?>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -10,7 +10,7 @@ Internationalisation
extract.php - extracts translatable strings from our project files. It
currently doesn't pick up strings in other libraries we might be using such as
tinymce, simplepie, and the HTML parsers.
tinymce and the HTML parsers.
In order for extract to do its job, every use of the t() translation function
must be preceded by one space. The string also can not contain parentheses. If

View file

@ -46,17 +46,20 @@ for i in c:
n1 = len(contributors)
print(' > found %d contributors' % n1)
# get the contributors to the addons
os.chdir(path+'/addon')
# get the contributors
print('> getting contributors to the addons')
p = subprocess.Popen(['git', 'shortlog', '--no-merges', '-s'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
c = iter(p.stdout.readline, b'')
for i in c:
name = i.decode().split('\t')[1].split('\n')[0]
if not name in contributors and name not in dontinclude:
contributors.append(name)
try:
os.chdir(path+'/addon')
# get the contributors
print('> getting contributors to the addons')
p = subprocess.Popen(['git', 'shortlog', '--no-merges', '-s'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
c = iter(p.stdout.readline, b'')
for i in c:
name = i.decode().split('\t')[1].split('\n')[0]
if not name in contributors and name not in dontinclude:
contributors.append(name)
except FileNotFoundError:
print(' > no addon directory found ( THE LIST OF CONTRIBUTORS WILL BE INCOMPLETE )')
n2 = len(contributors)
print(' > found %d new contributors' % (n2-n1))
print('> total of %d contributors to the repositories of friendica' % n2)

View file

@ -1,8 +1,9 @@
# FRIENDICA Distributed Social Network
# Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project
# This file is distributed under the same license as the Friendica package.
#
#
# Translators:
# Aliaksei Sakalou <nullbsd@gmail.com>, 2016
# Alex <info@pixelbits.de>, 2013
# vislav <bizadmin@list.ru>, 2014
# Alex <info@pixelbits.de>, 2013
@ -15,1151 +16,1317 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-09 08:57+0100\n"
"PO-Revision-Date: 2015-02-09 09:46+0000\n"
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/friendica/language/ru/)\n"
"POT-Creation-Date: 2016-01-24 06:49+0100\n"
"PO-Revision-Date: 2016-02-16 18:28+0300\n"
"Last-Translator: Aliaksei Sakalou <nullbsd@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/"
"language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
"%100>=11 && n%100<=14)? 2 : 3);\n"
"X-Generator: Poedit 1.5.4\n"
#: ../../mod/contacts.php:108
#: mod/contacts.php:50 include/identity.php:395
msgid "Network:"
msgstr "Сеть:"
#: mod/contacts.php:51 mod/contacts.php:961 mod/videos.php:37
#: mod/viewcontacts.php:105 mod/dirfind.php:214 mod/network.php:598
#: mod/allfriends.php:77 mod/match.php:82 mod/directory.php:172
#: mod/common.php:123 mod/suggest.php:95 mod/photos.php:41
#: include/identity.php:298
msgid "Forum"
msgstr "Форум"
#: mod/contacts.php:128
#, php-format
msgid "%d contact edited."
msgid_plural "%d contacts edited"
msgstr[0] "%d контакт изменён."
msgstr[1] "%d контакты изменены"
msgstr[2] "%d контакты изменены"
msgid_plural "%d contacts edited."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
#: ../../mod/contacts.php:139 ../../mod/contacts.php:272
#: mod/contacts.php:159 mod/contacts.php:383
msgid "Could not access contact record."
msgstr "Не удалось получить доступ к записи контакта."
#: ../../mod/contacts.php:153
#: mod/contacts.php:173
msgid "Could not locate selected profile."
msgstr "Не удалось найти выбранный профиль."
#: ../../mod/contacts.php:186
#: mod/contacts.php:206
msgid "Contact updated."
msgstr "Контакт обновлен."
#: ../../mod/contacts.php:188 ../../mod/dfrn_request.php:576
#: mod/contacts.php:208 mod/dfrn_request.php:575
msgid "Failed to update contact record."
msgstr "Не удалось обновить запись контакта."
#: ../../mod/contacts.php:254 ../../mod/manage.php:96
#: ../../mod/display.php:499 ../../mod/profile_photo.php:19
#: ../../mod/profile_photo.php:169 ../../mod/profile_photo.php:180
#: ../../mod/profile_photo.php:193 ../../mod/follow.php:9
#: ../../mod/item.php:168 ../../mod/item.php:184 ../../mod/group.php:19
#: ../../mod/dfrn_confirm.php:55 ../../mod/fsuggest.php:78
#: ../../mod/wall_upload.php:66 ../../mod/viewcontacts.php:24
#: ../../mod/notifications.php:66 ../../mod/message.php:38
#: ../../mod/message.php:174 ../../mod/crepair.php:119
#: ../../mod/nogroup.php:25 ../../mod/network.php:4 ../../mod/allfriends.php:9
#: ../../mod/events.php:140 ../../mod/install.php:151
#: ../../mod/wallmessage.php:9 ../../mod/wallmessage.php:33
#: ../../mod/wallmessage.php:79 ../../mod/wallmessage.php:103
#: ../../mod/wall_attach.php:55 ../../mod/settings.php:102
#: ../../mod/settings.php:596 ../../mod/settings.php:601
#: ../../mod/register.php:42 ../../mod/delegate.php:12 ../../mod/mood.php:114
#: ../../mod/suggest.php:58 ../../mod/profiles.php:165
#: ../../mod/profiles.php:618 ../../mod/editpost.php:10 ../../mod/api.php:26
#: ../../mod/api.php:31 ../../mod/notes.php:20 ../../mod/poke.php:135
#: ../../mod/invite.php:15 ../../mod/invite.php:101 ../../mod/photos.php:134
#: ../../mod/photos.php:1050 ../../mod/regmod.php:110 ../../mod/uimport.php:23
#: ../../mod/attach.php:33 ../../include/items.php:4712 ../../index.php:369
#: mod/contacts.php:365 mod/manage.php:96 mod/display.php:509
#: mod/profile_photo.php:19 mod/profile_photo.php:175
#: mod/profile_photo.php:186 mod/profile_photo.php:199
#: mod/ostatus_subscribe.php:9 mod/follow.php:11 mod/follow.php:73
#: mod/follow.php:155 mod/item.php:180 mod/item.php:192 mod/group.php:19
#: mod/dfrn_confirm.php:55 mod/fsuggest.php:78 mod/wall_upload.php:77
#: mod/wall_upload.php:80 mod/viewcontacts.php:40 mod/notifications.php:69
#: mod/message.php:45 mod/message.php:181 mod/crepair.php:117
#: mod/dirfind.php:11 mod/nogroup.php:25 mod/network.php:4
#: mod/allfriends.php:12 mod/events.php:165 mod/wallmessage.php:9
#: mod/wallmessage.php:33 mod/wallmessage.php:79 mod/wallmessage.php:103
#: mod/wall_attach.php:67 mod/wall_attach.php:70 mod/settings.php:20
#: mod/settings.php:126 mod/settings.php:646 mod/register.php:42
#: mod/delegate.php:12 mod/common.php:18 mod/mood.php:114 mod/suggest.php:58
#: mod/profiles.php:165 mod/profiles.php:615 mod/editpost.php:10
#: mod/api.php:26 mod/api.php:31 mod/notes.php:22 mod/poke.php:149
#: mod/repair_ostatus.php:9 mod/invite.php:15 mod/invite.php:101
#: mod/photos.php:171 mod/photos.php:1105 mod/regmod.php:110
#: mod/uimport.php:23 mod/attach.php:33 include/items.php:5096 index.php:383
msgid "Permission denied."
msgstr "Нет разрешения."
#: ../../mod/contacts.php:287
#: mod/contacts.php:404
msgid "Contact has been blocked"
msgstr "Контакт заблокирован"
#: ../../mod/contacts.php:287
#: mod/contacts.php:404
msgid "Contact has been unblocked"
msgstr "Контакт разблокирован"
#: ../../mod/contacts.php:298
#: mod/contacts.php:415
msgid "Contact has been ignored"
msgstr "Контакт проигнорирован"
#: ../../mod/contacts.php:298
#: mod/contacts.php:415
msgid "Contact has been unignored"
msgstr "У контакта отменено игнорирование"
#: ../../mod/contacts.php:310
#: mod/contacts.php:427
msgid "Contact has been archived"
msgstr "Контакт заархивирован"
#: ../../mod/contacts.php:310
#: mod/contacts.php:427
msgid "Contact has been unarchived"
msgstr "Контакт разархивирован"
#: ../../mod/contacts.php:335 ../../mod/contacts.php:711
#: mod/contacts.php:454 mod/contacts.php:802
msgid "Do you really want to delete this contact?"
msgstr "Вы действительно хотите удалить этот контакт?"
#: ../../mod/contacts.php:337 ../../mod/message.php:209
#: ../../mod/settings.php:1010 ../../mod/settings.php:1016
#: ../../mod/settings.php:1024 ../../mod/settings.php:1028
#: ../../mod/settings.php:1033 ../../mod/settings.php:1039
#: ../../mod/settings.php:1045 ../../mod/settings.php:1051
#: ../../mod/settings.php:1081 ../../mod/settings.php:1082
#: ../../mod/settings.php:1083 ../../mod/settings.php:1084
#: ../../mod/settings.php:1085 ../../mod/dfrn_request.php:830
#: ../../mod/register.php:233 ../../mod/suggest.php:29
#: ../../mod/profiles.php:661 ../../mod/profiles.php:664 ../../mod/api.php:105
#: ../../include/items.php:4557
#: mod/contacts.php:456 mod/follow.php:110 mod/message.php:216
#: mod/settings.php:1103 mod/settings.php:1109 mod/settings.php:1117
#: mod/settings.php:1121 mod/settings.php:1126 mod/settings.php:1132
#: mod/settings.php:1138 mod/settings.php:1144 mod/settings.php:1170
#: mod/settings.php:1171 mod/settings.php:1172 mod/settings.php:1173
#: mod/settings.php:1174 mod/dfrn_request.php:857 mod/register.php:238
#: mod/suggest.php:29 mod/profiles.php:658 mod/profiles.php:661
#: mod/profiles.php:687 mod/api.php:105 include/items.php:4928
msgid "Yes"
msgstr "Да"
#: ../../mod/contacts.php:340 ../../mod/tagrm.php:11 ../../mod/tagrm.php:94
#: ../../mod/message.php:212 ../../mod/fbrowser.php:81
#: ../../mod/fbrowser.php:116 ../../mod/settings.php:615
#: ../../mod/settings.php:641 ../../mod/dfrn_request.php:844
#: ../../mod/suggest.php:32 ../../mod/editpost.php:148
#: ../../mod/photos.php:203 ../../mod/photos.php:292
#: ../../include/conversation.php:1129 ../../include/items.php:4560
#: mod/contacts.php:459 mod/tagrm.php:11 mod/tagrm.php:94 mod/follow.php:121
#: mod/videos.php:131 mod/message.php:219 mod/fbrowser.php:93
#: mod/fbrowser.php:128 mod/settings.php:660 mod/settings.php:686
#: mod/dfrn_request.php:871 mod/suggest.php:32 mod/editpost.php:148
#: mod/photos.php:247 mod/photos.php:336 include/conversation.php:1220
#: include/items.php:4931
msgid "Cancel"
msgstr "Отмена"
#: ../../mod/contacts.php:352
#: mod/contacts.php:471
msgid "Contact has been removed."
msgstr "Контакт удален."
#: ../../mod/contacts.php:390
#: mod/contacts.php:512
#, php-format
msgid "You are mutual friends with %s"
msgstr "У Вас взаимная дружба с %s"
#: ../../mod/contacts.php:394
#: mod/contacts.php:516
#, php-format
msgid "You are sharing with %s"
msgstr "Вы делитесь с %s"
#: ../../mod/contacts.php:399
#: mod/contacts.php:521
#, php-format
msgid "%s is sharing with you"
msgstr "%s делитса с Вами"
#: ../../mod/contacts.php:416
#: mod/contacts.php:541
msgid "Private communications are not available for this contact."
msgstr "Личные коммуникации недоступны для этого контакта."
#: ../../mod/contacts.php:419 ../../mod/admin.php:569
#: mod/contacts.php:544 mod/admin.php:822
msgid "Never"
msgstr "Никогда"
#: ../../mod/contacts.php:423
#: mod/contacts.php:548
msgid "(Update was successful)"
msgstr "(Обновление было успешно)"
#: ../../mod/contacts.php:423
#: mod/contacts.php:548
msgid "(Update was not successful)"
msgstr "(Обновление не удалось)"
#: ../../mod/contacts.php:425
#: mod/contacts.php:550
msgid "Suggest friends"
msgstr "Предложить друзей"
#: ../../mod/contacts.php:429
#: mod/contacts.php:554
#, php-format
msgid "Network type: %s"
msgstr "Сеть: %s"
#: ../../mod/contacts.php:432 ../../include/contact_widgets.php:200
#, php-format
msgid "%d contact in common"
msgid_plural "%d contacts in common"
msgstr[0] "%d Контакт"
msgstr[1] "%d Контактов"
msgstr[2] "%d Контактов"
#: ../../mod/contacts.php:437
msgid "View all contacts"
msgstr "Показать все контакты"
#: ../../mod/contacts.php:442 ../../mod/contacts.php:501
#: ../../mod/contacts.php:714 ../../mod/admin.php:1009
msgid "Unblock"
msgstr "Разблокировать"
#: ../../mod/contacts.php:442 ../../mod/contacts.php:501
#: ../../mod/contacts.php:714 ../../mod/admin.php:1008
msgid "Block"
msgstr "Заблокировать"
#: ../../mod/contacts.php:445
msgid "Toggle Blocked status"
msgstr "Изменить статус блокированности (заблокировать/разблокировать)"
#: ../../mod/contacts.php:448 ../../mod/contacts.php:502
#: ../../mod/contacts.php:715
msgid "Unignore"
msgstr "Не игнорировать"
#: ../../mod/contacts.php:448 ../../mod/contacts.php:502
#: ../../mod/contacts.php:715 ../../mod/notifications.php:51
#: ../../mod/notifications.php:164 ../../mod/notifications.php:210
msgid "Ignore"
msgstr "Игнорировать"
#: ../../mod/contacts.php:451
msgid "Toggle Ignored status"
msgstr "Изменить статус игнорирования"
#: ../../mod/contacts.php:455 ../../mod/contacts.php:716
msgid "Unarchive"
msgstr "Разархивировать"
#: ../../mod/contacts.php:455 ../../mod/contacts.php:716
msgid "Archive"
msgstr "Архивировать"
#: ../../mod/contacts.php:458
msgid "Toggle Archive status"
msgstr "Сменить статус архивации (архивирова/не архивировать)"
#: ../../mod/contacts.php:461
msgid "Repair"
msgstr "Восстановить"
#: ../../mod/contacts.php:464
msgid "Advanced Contact Settings"
msgstr "Дополнительные Настройки Контакта"
#: ../../mod/contacts.php:470
#: mod/contacts.php:567
msgid "Communications lost with this contact!"
msgstr "Связь с контактом утеряна!"
#: ../../mod/contacts.php:473
msgid "Contact Editor"
msgstr "Редактор контакта"
#: mod/contacts.php:570
msgid "Fetch further information for feeds"
msgstr ""
#: ../../mod/contacts.php:475 ../../mod/manage.php:110
#: ../../mod/fsuggest.php:107 ../../mod/message.php:335
#: ../../mod/message.php:564 ../../mod/crepair.php:186
#: ../../mod/events.php:478 ../../mod/content.php:710
#: ../../mod/install.php:248 ../../mod/install.php:286 ../../mod/mood.php:137
#: ../../mod/profiles.php:686 ../../mod/localtime.php:45
#: ../../mod/poke.php:199 ../../mod/invite.php:140 ../../mod/photos.php:1084
#: ../../mod/photos.php:1203 ../../mod/photos.php:1514
#: ../../mod/photos.php:1565 ../../mod/photos.php:1609
#: ../../mod/photos.php:1697 ../../object/Item.php:678
#: ../../view/theme/cleanzero/config.php:80
#: ../../view/theme/dispy/config.php:70 ../../view/theme/quattro/config.php:64
#: ../../view/theme/diabook/config.php:148
#: ../../view/theme/diabook/theme.php:633 ../../view/theme/vier/config.php:53
#: ../../view/theme/duepuntozero/config.php:59
#: mod/contacts.php:571 mod/admin.php:831
msgid "Disabled"
msgstr "Отключенный"
#: mod/contacts.php:571
msgid "Fetch information"
msgstr ""
#: mod/contacts.php:571
msgid "Fetch information and keywords"
msgstr ""
#: mod/contacts.php:587 mod/manage.php:143 mod/fsuggest.php:107
#: mod/message.php:342 mod/message.php:525 mod/crepair.php:196
#: mod/events.php:574 mod/content.php:712 mod/install.php:261
#: mod/install.php:299 mod/mood.php:137 mod/profiles.php:696
#: mod/localtime.php:45 mod/poke.php:198 mod/invite.php:140
#: mod/photos.php:1137 mod/photos.php:1261 mod/photos.php:1579
#: mod/photos.php:1630 mod/photos.php:1678 mod/photos.php:1766
#: object/Item.php:710 view/theme/cleanzero/config.php:80
#: view/theme/dispy/config.php:70 view/theme/quattro/config.php:64
#: view/theme/diabook/config.php:148 view/theme/diabook/theme.php:633
#: view/theme/vier/config.php:107 view/theme/duepuntozero/config.php:59
msgid "Submit"
msgstr "Подтвердить"
msgstr "Добавить"
#: ../../mod/contacts.php:476
#: mod/contacts.php:588
msgid "Profile Visibility"
msgstr "Видимость профиля"
#: ../../mod/contacts.php:477
#: mod/contacts.php:589
#, php-format
msgid ""
"Please choose the profile you would like to display to %s when viewing your "
"profile securely."
msgstr "Пожалуйста, выберите профиль, который вы хотите отображать %s, когда просмотр вашего профиля безопасен."
msgstr ""
"Пожалуйста, выберите профиль, который вы хотите отображать %s, когда "
"просмотр вашего профиля безопасен."
#: ../../mod/contacts.php:478
#: mod/contacts.php:590
msgid "Contact Information / Notes"
msgstr "Информация о контакте / Заметки"
#: ../../mod/contacts.php:479
#: mod/contacts.php:591
msgid "Edit contact notes"
msgstr "Редактировать заметки контакта"
#: ../../mod/contacts.php:484 ../../mod/contacts.php:679
#: ../../mod/viewcontacts.php:64 ../../mod/nogroup.php:40
#: mod/contacts.php:596 mod/contacts.php:952 mod/viewcontacts.php:97
#: mod/nogroup.php:41
#, php-format
msgid "Visit %s's profile [%s]"
msgstr "Посетить профиль %s [%s]"
#: ../../mod/contacts.php:485
#: mod/contacts.php:597
msgid "Block/Unblock contact"
msgstr "Блокировать / Разблокировать контакт"
#: ../../mod/contacts.php:486
#: mod/contacts.php:598
msgid "Ignore contact"
msgstr "Игнорировать контакт"
#: ../../mod/contacts.php:487
#: mod/contacts.php:599
msgid "Repair URL settings"
msgstr "Восстановить настройки URL"
#: ../../mod/contacts.php:488
#: mod/contacts.php:600
msgid "View conversations"
msgstr "Просмотр бесед"
#: ../../mod/contacts.php:490
#: mod/contacts.php:602
msgid "Delete contact"
msgstr "Удалить контакт"
#: ../../mod/contacts.php:494
#: mod/contacts.php:606
msgid "Last update:"
msgstr "Последнее обновление: "
#: ../../mod/contacts.php:496
#: mod/contacts.php:608
msgid "Update public posts"
msgstr "Обновить публичные сообщения"
#: ../../mod/contacts.php:498 ../../mod/admin.php:1503
#: mod/contacts.php:610
msgid "Update now"
msgstr "Обновить сейчас"
#: ../../mod/contacts.php:505
#: mod/contacts.php:612 mod/follow.php:103 mod/dirfind.php:196
#: mod/allfriends.php:65 mod/match.php:71 mod/suggest.php:82
#: include/contact_widgets.php:32 include/Contact.php:297
#: include/conversation.php:924
msgid "Connect/Follow"
msgstr "Подключиться/Следовать"
#: mod/contacts.php:615 mod/contacts.php:806 mod/contacts.php:865
#: mod/admin.php:1312
msgid "Unblock"
msgstr "Разблокировать"
#: mod/contacts.php:615 mod/contacts.php:806 mod/contacts.php:865
#: mod/admin.php:1311
msgid "Block"
msgstr "Заблокировать"
#: mod/contacts.php:616 mod/contacts.php:807 mod/contacts.php:872
msgid "Unignore"
msgstr "Не игнорировать"
#: mod/contacts.php:616 mod/contacts.php:807 mod/contacts.php:872
#: mod/notifications.php:54 mod/notifications.php:179
#: mod/notifications.php:259
msgid "Ignore"
msgstr "Игнорировать"
#: mod/contacts.php:619
msgid "Currently blocked"
msgstr "В настоящее время заблокирован"
#: ../../mod/contacts.php:506
#: mod/contacts.php:620
msgid "Currently ignored"
msgstr "В настоящее время игнорируется"
#: ../../mod/contacts.php:507
#: mod/contacts.php:621
msgid "Currently archived"
msgstr "В данный момент архивирован"
#: ../../mod/contacts.php:508 ../../mod/notifications.php:157
#: ../../mod/notifications.php:204
#: mod/contacts.php:622 mod/notifications.php:172 mod/notifications.php:251
msgid "Hide this contact from others"
msgstr "Скрыть этот контакт от других"
#: ../../mod/contacts.php:508
#: mod/contacts.php:622
msgid ""
"Replies/likes to your public posts <strong>may</strong> still be visible"
msgstr "Ответы/лайки ваших публичных сообщений <strong>будут</strong> видимы."
#: ../../mod/contacts.php:509
#: mod/contacts.php:623
msgid "Notification for new posts"
msgstr ""
#: ../../mod/contacts.php:509
#: mod/contacts.php:623
msgid "Send a notification of every new post of this contact"
msgstr ""
#: ../../mod/contacts.php:510
msgid "Fetch further information for feeds"
msgstr ""
#: ../../mod/contacts.php:511
msgid "Disabled"
msgstr ""
#: ../../mod/contacts.php:511
msgid "Fetch information"
msgstr ""
#: ../../mod/contacts.php:511
msgid "Fetch information and keywords"
msgstr ""
#: ../../mod/contacts.php:513
#: mod/contacts.php:626
msgid "Blacklisted keywords"
msgstr ""
#: ../../mod/contacts.php:513
#: mod/contacts.php:626
msgid ""
"Comma separated list of keywords that should not be converted to hashtags, "
"when \"Fetch information and keywords\" is selected"
msgstr ""
#: ../../mod/contacts.php:564
#: mod/contacts.php:633 mod/follow.php:126 mod/notifications.php:255
msgid "Profile URL"
msgstr "URL профиля"
#: mod/contacts.php:636 mod/notifications.php:244 mod/events.php:566
#: mod/directory.php:145 include/identity.php:308 include/bb2diaspora.php:170
#: include/event.php:36 include/event.php:60
msgid "Location:"
msgstr "Откуда:"
#: mod/contacts.php:638 mod/notifications.php:246 mod/directory.php:153
#: include/identity.php:317 include/identity.php:631
msgid "About:"
msgstr "О себе:"
#: mod/contacts.php:640 mod/follow.php:134 mod/notifications.php:248
#: include/identity.php:625
msgid "Tags:"
msgstr "Ключевые слова: "
#: mod/contacts.php:685
msgid "Suggestions"
msgstr "Предложения"
#: ../../mod/contacts.php:567
#: mod/contacts.php:688
msgid "Suggest potential friends"
msgstr "Предложить потенциального знакомого"
#: ../../mod/contacts.php:570 ../../mod/group.php:194
#: mod/contacts.php:693 mod/group.php:192
msgid "All Contacts"
msgstr "Все контакты"
#: ../../mod/contacts.php:573
#: mod/contacts.php:696
msgid "Show all contacts"
msgstr "Показать все контакты"
#: ../../mod/contacts.php:576
#: mod/contacts.php:701
msgid "Unblocked"
msgstr "Не блокирован"
#: ../../mod/contacts.php:579
#: mod/contacts.php:704
msgid "Only show unblocked contacts"
msgstr "Показать только не блокированные контакты"
#: ../../mod/contacts.php:583
#: mod/contacts.php:710
msgid "Blocked"
msgstr "Заблокирован"
#: ../../mod/contacts.php:586
#: mod/contacts.php:713
msgid "Only show blocked contacts"
msgstr "Показать только блокированные контакты"
#: ../../mod/contacts.php:590
#: mod/contacts.php:719
msgid "Ignored"
msgstr "Игнорирован"
#: ../../mod/contacts.php:593
#: mod/contacts.php:722
msgid "Only show ignored contacts"
msgstr "Показать только игнорируемые контакты"
#: ../../mod/contacts.php:597
#: mod/contacts.php:728
msgid "Archived"
msgstr "Архивированные"
#: ../../mod/contacts.php:600
#: mod/contacts.php:731
msgid "Only show archived contacts"
msgstr "Показывать только архивные контакты"
#: ../../mod/contacts.php:604
#: mod/contacts.php:737
msgid "Hidden"
msgstr "Скрытые"
#: ../../mod/contacts.php:607
#: mod/contacts.php:740
msgid "Only show hidden contacts"
msgstr "Показывать только скрытые контакты"
#: ../../mod/contacts.php:655
msgid "Mutual Friendship"
msgstr "Взаимная дружба"
#: ../../mod/contacts.php:659
msgid "is a fan of yours"
msgstr "является вашим поклонником"
#: ../../mod/contacts.php:663
msgid "you are a fan of"
msgstr "Вы - поклонник"
#: ../../mod/contacts.php:680 ../../mod/nogroup.php:41
msgid "Edit contact"
msgstr "Редактировать контакт"
#: ../../mod/contacts.php:702 ../../include/nav.php:177
#: ../../view/theme/diabook/theme.php:125
#: mod/contacts.php:793 mod/contacts.php:841 mod/viewcontacts.php:116
#: include/identity.php:741 include/identity.php:744 include/text.php:1012
#: include/nav.php:123 include/nav.php:187 view/theme/diabook/theme.php:125
msgid "Contacts"
msgstr "Контакты"
#: ../../mod/contacts.php:706
#: mod/contacts.php:797
msgid "Search your contacts"
msgstr "Поиск ваших контактов"
#: ../../mod/contacts.php:707 ../../mod/directory.php:61
#: mod/contacts.php:798
msgid "Finding: "
msgstr "Результат поиска: "
#: ../../mod/contacts.php:708 ../../mod/directory.php:63
#: ../../include/contact_widgets.php:34
#: mod/contacts.php:799 mod/directory.php:210 include/contact_widgets.php:34
msgid "Find"
msgstr "Найти"
#: ../../mod/contacts.php:713 ../../mod/settings.php:132
#: ../../mod/settings.php:640
#: mod/contacts.php:805 mod/settings.php:156 mod/settings.php:685
msgid "Update"
msgstr "Обновление"
#: ../../mod/contacts.php:717 ../../mod/group.php:171 ../../mod/admin.php:1007
#: ../../mod/content.php:438 ../../mod/content.php:741
#: ../../mod/settings.php:677 ../../mod/photos.php:1654
#: ../../object/Item.php:130 ../../include/conversation.php:614
#: mod/contacts.php:808 mod/contacts.php:879
msgid "Archive"
msgstr "Архивировать"
#: mod/contacts.php:808 mod/contacts.php:879
msgid "Unarchive"
msgstr "Разархивировать"
#: mod/contacts.php:809 mod/group.php:171 mod/admin.php:1310
#: mod/content.php:440 mod/content.php:743 mod/settings.php:722
#: mod/photos.php:1723 object/Item.php:134 include/conversation.php:635
msgid "Delete"
msgstr "Удалить"
#: ../../mod/hcard.php:10
#: mod/contacts.php:822 include/identity.php:686 include/nav.php:75
msgid "Status"
msgstr "Посты"
#: mod/contacts.php:825 mod/follow.php:143 include/identity.php:689
msgid "Status Messages and Posts"
msgstr "Ваши посты"
#: mod/contacts.php:830 mod/profperm.php:104 mod/newmember.php:32
#: include/identity.php:579 include/identity.php:665 include/identity.php:694
#: include/nav.php:76 view/theme/diabook/theme.php:124
msgid "Profile"
msgstr "Информация"
#: mod/contacts.php:833 include/identity.php:697
msgid "Profile Details"
msgstr "Информация о вас"
#: mod/contacts.php:844
msgid "View all contacts"
msgstr "Показать все контакты"
#: mod/contacts.php:850 mod/common.php:134
msgid "Common Friends"
msgstr "Общие друзья"
#: mod/contacts.php:853
msgid "View all common friends"
msgstr ""
#: mod/contacts.php:857
msgid "Repair"
msgstr "Восстановить"
#: mod/contacts.php:860
msgid "Advanced Contact Settings"
msgstr "Дополнительные Настройки Контакта"
#: mod/contacts.php:868
msgid "Toggle Blocked status"
msgstr "Изменить статус блокированности (заблокировать/разблокировать)"
#: mod/contacts.php:875
msgid "Toggle Ignored status"
msgstr "Изменить статус игнорирования"
#: mod/contacts.php:882
msgid "Toggle Archive status"
msgstr "Сменить статус архивации (архивирова/не архивировать)"
#: mod/contacts.php:924
msgid "Mutual Friendship"
msgstr "Взаимная дружба"
#: mod/contacts.php:928
msgid "is a fan of yours"
msgstr "является вашим поклонником"
#: mod/contacts.php:932
msgid "you are a fan of"
msgstr "Вы - поклонник"
#: mod/contacts.php:953 mod/nogroup.php:42
msgid "Edit contact"
msgstr "Редактировать контакт"
#: mod/hcard.php:10
msgid "No profile"
msgstr "Нет профиля"
#: ../../mod/manage.php:106
#: mod/manage.php:139
msgid "Manage Identities and/or Pages"
msgstr "Управление идентификацией и / или страницами"
#: ../../mod/manage.php:107
#: mod/manage.php:140
msgid ""
"Toggle between different identities or community/group pages which share "
"your account details or which you have been granted \"manage\" permissions"
msgstr ""
#: ../../mod/manage.php:108
#: mod/manage.php:141
msgid "Select an identity to manage: "
msgstr "Выберите идентификацию для управления: "
#: ../../mod/oexchange.php:25
#: mod/oexchange.php:25
msgid "Post successful."
msgstr "Успешно добавлено."
#: ../../mod/profperm.php:19 ../../mod/group.php:72 ../../index.php:368
#: mod/profperm.php:19 mod/group.php:72 index.php:382
msgid "Permission denied"
msgstr "Доступ запрещен"
#: ../../mod/profperm.php:25 ../../mod/profperm.php:55
#: mod/profperm.php:25 mod/profperm.php:56
msgid "Invalid profile identifier."
msgstr "Недопустимый идентификатор профиля."
#: ../../mod/profperm.php:101
#: mod/profperm.php:102
msgid "Profile Visibility Editor"
msgstr "Редактор видимости профиля"
#: ../../mod/profperm.php:103 ../../mod/newmember.php:32 ../../boot.php:2119
#: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:87
#: ../../include/nav.php:77 ../../view/theme/diabook/theme.php:124
msgid "Profile"
msgstr "Профиль"
#: ../../mod/profperm.php:105 ../../mod/group.php:224
#: mod/profperm.php:106 mod/group.php:223
msgid "Click on a contact to add or remove."
msgstr "Нажмите на контакт, чтобы добавить или удалить."
#: ../../mod/profperm.php:114
#: mod/profperm.php:115
msgid "Visible To"
msgstr "Видимый для"
#: ../../mod/profperm.php:130
#: mod/profperm.php:131
msgid "All Contacts (with secure profile access)"
msgstr "Все контакты (с безопасным доступом к профилю)"
#: ../../mod/display.php:82 ../../mod/display.php:284
#: ../../mod/display.php:503 ../../mod/viewsrc.php:15 ../../mod/admin.php:169
#: ../../mod/admin.php:1052 ../../mod/admin.php:1265 ../../mod/notice.php:15
#: ../../include/items.php:4516
#: mod/display.php:82 mod/display.php:291 mod/display.php:513
#: mod/viewsrc.php:15 mod/admin.php:234 mod/admin.php:1365 mod/admin.php:1599
#: mod/notice.php:15 include/items.php:4887
msgid "Item not found."
msgstr "Пункт не найден."
#: ../../mod/display.php:212 ../../mod/videos.php:115
#: ../../mod/viewcontacts.php:19 ../../mod/community.php:18
#: ../../mod/dfrn_request.php:762 ../../mod/search.php:89
#: ../../mod/directory.php:33 ../../mod/photos.php:920
#: mod/display.php:220 mod/videos.php:197 mod/viewcontacts.php:35
#: mod/community.php:22 mod/dfrn_request.php:786 mod/search.php:93
#: mod/search.php:99 mod/directory.php:37 mod/photos.php:976
msgid "Public access denied."
msgstr "Свободный доступ закрыт."
#: ../../mod/display.php:332 ../../mod/profile.php:155
#: mod/display.php:339 mod/profile.php:155
msgid "Access to this profile has been restricted."
msgstr "Доступ к этому профилю ограничен."
#: ../../mod/display.php:496
#: mod/display.php:506
msgid "Item has been removed."
msgstr "Пункт был удален."
#: ../../mod/newmember.php:6
#: mod/newmember.php:6
msgid "Welcome to Friendica"
msgstr "Добро пожаловать в Friendica"
#: ../../mod/newmember.php:8
#: mod/newmember.php:8
msgid "New Member Checklist"
msgstr "Новый контрольный список участников"
#: ../../mod/newmember.php:12
#: mod/newmember.php:12
msgid ""
"We would like to offer some tips and links to help make your experience "
"enjoyable. Click any item to visit the relevant page. A link to this page "
"will be visible from your home page for two weeks after your initial "
"registration and then will quietly disappear."
msgstr "Мы хотели бы предложить некоторые советы и ссылки, помогающие сделать вашу работу приятнее. Нажмите на любой элемент, чтобы посетить соответствующую страницу. Ссылка на эту страницу будет видна на вашей домашней странице в течение двух недель после первоначальной регистрации, а затем она исчезнет."
msgstr ""
"Мы хотели бы предложить некоторые советы и ссылки, помогающие сделать вашу "
"работу приятнее. Нажмите на любой элемент, чтобы посетить соответствующую "
"страницу. Ссылка на эту страницу будет видна на вашей домашней странице в "
"течение двух недель после первоначальной регистрации, а затем она исчезнет."
#: ../../mod/newmember.php:14
#: mod/newmember.php:14
msgid "Getting Started"
msgstr "Начало работы"
#: ../../mod/newmember.php:18
#: mod/newmember.php:18
msgid "Friendica Walk-Through"
msgstr "Friendica тур"
#: ../../mod/newmember.php:18
#: mod/newmember.php:18
msgid ""
"On your <em>Quick Start</em> page - find a brief introduction to your "
"profile and network tabs, make some new connections, and find some groups to"
" join."
msgstr "На вашей странице <em>Быстрый старт</em> - можно найти краткое введение в ваш профиль и сетевые закладки, создать новые связи, и найти группы, чтобы присоединиться к ним."
"profile and network tabs, make some new connections, and find some groups to "
"join."
msgstr ""
"На вашей странице <em>Быстрый старт</em> - можно найти краткое введение в "
"ваш профиль и сетевые закладки, создать новые связи, и найти группы, чтобы "
"присоединиться к ним."
#: ../../mod/newmember.php:22 ../../mod/admin.php:1104
#: ../../mod/admin.php:1325 ../../mod/settings.php:85
#: ../../include/nav.php:172 ../../view/theme/diabook/theme.php:544
#: ../../view/theme/diabook/theme.php:648
#: mod/newmember.php:22 mod/admin.php:1418 mod/admin.php:1676
#: mod/settings.php:109 include/nav.php:182 view/theme/diabook/theme.php:544
#: view/theme/diabook/theme.php:648
msgid "Settings"
msgstr "Настройки"
#: ../../mod/newmember.php:26
#: mod/newmember.php:26
msgid "Go to Your Settings"
msgstr "Перейти к вашим настройкам"
#: ../../mod/newmember.php:26
#: mod/newmember.php:26
msgid ""
"On your <em>Settings</em> page - change your initial password. Also make a "
"note of your Identity Address. This looks just like an email address - and "
"will be useful in making friends on the free social web."
msgstr "На вашей странице <em>Настройки</em> - вы можете изменить свой первоначальный пароль. Также обратите внимание на ваш личный адрес. Он выглядит так же, как адрес электронной почты - и будет полезен для поиска друзей в свободной социальной сети."
msgstr ""
"На вашей странице <em>Настройки</em> - вы можете изменить свой "
"первоначальный пароль. Также обратите внимание на ваш личный адрес. Он "
"выглядит так же, как адрес электронной почты - и будет полезен для поиска "
"друзей в свободной социальной сети."
#: ../../mod/newmember.php:28
#: mod/newmember.php:28
msgid ""
"Review the other settings, particularly the privacy settings. An unpublished"
" directory listing is like having an unlisted phone number. In general, you "
"Review the other settings, particularly the privacy settings. An unpublished "
"directory listing is like having an unlisted phone number. In general, you "
"should probably publish your listing - unless all of your friends and "
"potential friends know exactly how to find you."
msgstr "Просмотрите другие установки, в частности, параметры конфиденциальности. Неопубликованные пункты каталога с частными номерами телефона. В общем, вам, вероятно, следует опубликовать свою информацию - если все ваши друзья и потенциальные друзья точно знают, как вас найти."
msgstr ""
"Просмотрите другие установки, в частности, параметры конфиденциальности. "
"Неопубликованные пункты каталога с частными номерами телефона. В общем, вам, "
"вероятно, следует опубликовать свою информацию - если все ваши друзья и "
"потенциальные друзья точно знают, как вас найти."
#: ../../mod/newmember.php:36 ../../mod/profile_photo.php:244
#: ../../mod/profiles.php:699
#: mod/newmember.php:36 mod/profile_photo.php:250 mod/profiles.php:709
msgid "Upload Profile Photo"
msgstr "Загрузить фото профиля"
#: ../../mod/newmember.php:36
#: mod/newmember.php:36
msgid ""
"Upload a profile photo if you have not done so already. Studies have shown "
"that people with real photos of themselves are ten times more likely to make"
" friends than people who do not."
msgstr "Загрузите фотографию профиля, если вы еще не сделали это. Исследования показали, что люди с реальными фотографиями имеют в десять раз больше шансов подружиться, чем люди, которые этого не делают."
"that people with real photos of themselves are ten times more likely to make "
"friends than people who do not."
msgstr ""
"Загрузите фотографию профиля, если вы еще не сделали это. Исследования "
"показали, что люди с реальными фотографиями имеют в десять раз больше шансов "
"подружиться, чем люди, которые этого не делают."
#: ../../mod/newmember.php:38
#: mod/newmember.php:38
msgid "Edit Your Profile"
msgstr "Редактировать профиль"
#: ../../mod/newmember.php:38
#: mod/newmember.php:38
msgid ""
"Edit your <strong>default</strong> profile to your liking. Review the "
"settings for hiding your list of friends and hiding the profile from unknown"
" visitors."
msgstr "Отредактируйте профиль <strong>по умолчанию</strong> на свой ​​вкус. Просмотрите установки для сокрытия вашего списка друзей и сокрытия профиля от неизвестных посетителей."
"settings for hiding your list of friends and hiding the profile from unknown "
"visitors."
msgstr ""
"Отредактируйте профиль <strong>по умолчанию</strong> на свой ​​вкус. "
"Просмотрите установки для сокрытия вашего списка друзей и сокрытия профиля "
"от неизвестных посетителей."
#: ../../mod/newmember.php:40
#: mod/newmember.php:40
msgid "Profile Keywords"
msgstr "Ключевые слова профиля"
#: ../../mod/newmember.php:40
#: mod/newmember.php:40
msgid ""
"Set some public keywords for your default profile which describe your "
"interests. We may be able to find other people with similar interests and "
"suggest friendships."
msgstr "Установите некоторые публичные ключевые слова для вашего профиля по умолчанию, которые описывают ваши интересы. Мы можем быть в состоянии найти других людей со схожими интересами и предложить дружбу."
msgstr ""
"Установите некоторые публичные ключевые слова для вашего профиля по "
"умолчанию, которые описывают ваши интересы. Мы можем быть в состоянии найти "
"других людей со схожими интересами и предложить дружбу."
#: ../../mod/newmember.php:44
#: mod/newmember.php:44
msgid "Connecting"
msgstr "Подключение"
#: ../../mod/newmember.php:49 ../../mod/newmember.php:51
#: ../../include/contact_selectors.php:81
msgid "Facebook"
msgstr "Facebook"
#: ../../mod/newmember.php:49
msgid ""
"Authorise the Facebook Connector if you currently have a Facebook account "
"and we will (optionally) import all your Facebook friends and conversations."
msgstr "Авторизуйте Facebook Connector , если у вас уже есть аккаунт на Facebook, и мы (по желанию) импортируем всех ваших друзей и беседы с Facebook."
#: ../../mod/newmember.php:51
msgid ""
"<em>If</em> this is your own personal server, installing the Facebook addon "
"may ease your transition to the free social web."
msgstr "<em>Если</em> это ваш личный сервер, установите дополнение Facebook, это может облегчить ваш переход на свободную социальную сеть."
#: ../../mod/newmember.php:56
#: mod/newmember.php:51
msgid "Importing Emails"
msgstr "Импортирование Email-ов"
#: ../../mod/newmember.php:56
#: mod/newmember.php:51
msgid ""
"Enter your email access information on your Connector Settings page if you "
"wish to import and interact with friends or mailing lists from your email "
"INBOX"
msgstr "Введите информацию о доступе к вашему email на странице настроек вашего коннектора, если вы хотите импортировать, и общаться с друзьями или получать рассылки на ваш ящик электронной почты"
msgstr ""
"Введите информацию о доступе к вашему email на странице настроек вашего "
"коннектора, если вы хотите импортировать, и общаться с друзьями или получать "
"рассылки на ваш ящик электронной почты"
#: ../../mod/newmember.php:58
#: mod/newmember.php:53
msgid "Go to Your Contacts Page"
msgstr "Перейти на страницу ваших контактов"
#: ../../mod/newmember.php:58
#: mod/newmember.php:53
msgid ""
"Your Contacts page is your gateway to managing friendships and connecting "
"with friends on other networks. Typically you enter their address or site "
"URL in the <em>Add New Contact</em> dialog."
msgstr "Ваша страница контактов - это ваш шлюз к управлению дружбой и общением с друзьями в других сетях. Обычно вы вводите свой ​​адрес или адрес сайта в диалог <em>Добавить новый контакт</em>."
msgstr ""
"Ваша страница контактов - это ваш шлюз к управлению дружбой и общением с "
"друзьями в других сетях. Обычно вы вводите свой ​​адрес или адрес сайта в "
"диалог <em>Добавить новый контакт</em>."
#: ../../mod/newmember.php:60
#: mod/newmember.php:55
msgid "Go to Your Site's Directory"
msgstr "Перейти в каталог вашего сайта"
#: ../../mod/newmember.php:60
#: mod/newmember.php:55
msgid ""
"The Directory page lets you find other people in this network or other "
"federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on "
"their profile page. Provide your own Identity Address if requested."
msgstr "На странице каталога вы можете найти других людей в этой сети или на других похожих сайтах. Ищите ссылки <em>Подключить</em> или <em>Следовать</em> на страницах их профилей. Укажите свой собственный адрес идентификации, если требуется."
msgstr ""
"На странице каталога вы можете найти других людей в этой сети или на других "
"похожих сайтах. Ищите ссылки <em>Подключить</em> или <em>Следовать</em> на "
"страницах их профилей. Укажите свой собственный адрес идентификации, если "
"требуется."
#: ../../mod/newmember.php:62
#: mod/newmember.php:57
msgid "Finding New People"
msgstr "Поиск людей"
#: ../../mod/newmember.php:62
#: mod/newmember.php:57
msgid ""
"On the side panel of the Contacts page are several tools to find new "
"friends. We can match people by interest, look up people by name or "
"interest, and provide suggestions based on network relationships. On a brand"
" new site, friend suggestions will usually begin to be populated within 24 "
"interest, and provide suggestions based on network relationships. On a brand "
"new site, friend suggestions will usually begin to be populated within 24 "
"hours."
msgstr "На боковой панели страницы Контакты есть несколько инструментов, чтобы найти новых друзей. Мы можем искать по соответствию интересам, посмотреть людей по имени или интересам, и внести предложения на основе сетевых отношений. На новом сайте, предложения дружбы, как правило, начинают заполняться в течение 24 часов."
msgstr ""
"На боковой панели страницы Контакты есть несколько инструментов, чтобы найти "
"новых друзей. Мы можем искать по соответствию интересам, посмотреть людей "
"по имени или интересам, и внести предложения на основе сетевых отношений. На "
"новом сайте, предложения дружбы, как правило, начинают заполняться в течение "
"24 часов."
#: ../../mod/newmember.php:66 ../../include/group.php:270
#: mod/newmember.php:61 include/group.php:283
msgid "Groups"
msgstr "Группы"
#: ../../mod/newmember.php:70
#: mod/newmember.php:65
msgid "Group Your Contacts"
msgstr "Группа \"ваши контакты\""
#: ../../mod/newmember.php:70
#: mod/newmember.php:65
msgid ""
"Once you have made some friends, organize them into private conversation "
"groups from the sidebar of your Contacts page and then you can interact with"
" each group privately on your Network page."
msgstr "После того, как вы найдете несколько друзей, организуйте их в группы частных бесед в боковой панели на странице Контакты, а затем вы можете взаимодействовать с каждой группой приватно или на вашей странице Сеть."
"groups from the sidebar of your Contacts page and then you can interact with "
"each group privately on your Network page."
msgstr ""
"После того, как вы найдете несколько друзей, организуйте их в группы частных "
"бесед в боковой панели на странице Контакты, а затем вы можете "
"взаимодействовать с каждой группой приватно или на вашей странице Сеть."
#: ../../mod/newmember.php:73
#: mod/newmember.php:68
msgid "Why Aren't My Posts Public?"
msgstr "Почему мои посты не публичные?"
#: ../../mod/newmember.php:73
#: mod/newmember.php:68
msgid ""
"Friendica respects your privacy. By default, your posts will only show up to"
" people you've added as friends. For more information, see the help section "
"Friendica respects your privacy. By default, your posts will only show up to "
"people you've added as friends. For more information, see the help section "
"from the link above."
msgstr "Friendica уважает вашу приватность. По умолчанию, ваши сообщения будут показываться только для людей, которых вы добавили в список друзей. Для получения дополнительной информации см. раздел справки по ссылке выше."
msgstr ""
"Friendica уважает вашу приватность. По умолчанию, ваши сообщения будут "
"показываться только для людей, которых вы добавили в список друзей. Для "
"получения дополнительной информации см. раздел справки по ссылке выше."
#: ../../mod/newmember.php:78
#: mod/newmember.php:73
msgid "Getting Help"
msgstr "Получить помощь"
#: ../../mod/newmember.php:82
#: mod/newmember.php:77
msgid "Go to the Help Section"
msgstr "Перейти в раздел справки"
#: ../../mod/newmember.php:82
#: mod/newmember.php:77
msgid ""
"Our <strong>help</strong> pages may be consulted for detail on other program"
" features and resources."
msgstr "Наши страницы <strong>помощи</strong> могут проконсультировать о подробностях и возможностях программы и ресурса."
"Our <strong>help</strong> pages may be consulted for detail on other program "
"features and resources."
msgstr ""
"Наши страницы <strong>помощи</strong> могут проконсультировать о "
"подробностях и возможностях программы и ресурса."
#: ../../mod/openid.php:24
#: mod/openid.php:24
msgid "OpenID protocol error. No ID returned."
msgstr "Ошибка протокола OpenID. Не возвращён ID."
#: ../../mod/openid.php:53
#: mod/openid.php:53
msgid ""
"Account not found and OpenID registration is not permitted on this site."
msgstr "Аккаунт не найден и OpenID регистрация не допускается на этом сайте."
#: ../../mod/openid.php:93 ../../include/auth.php:112
#: ../../include/auth.php:175
#: mod/openid.php:93 include/auth.php:118 include/auth.php:181
msgid "Login failed."
msgstr "Войти не удалось."
#: ../../mod/profile_photo.php:44
#: mod/profile_photo.php:44
msgid "Image uploaded but image cropping failed."
msgstr "Изображение загружено, но обрезка изображения не удалась."
#: ../../mod/profile_photo.php:74 ../../mod/profile_photo.php:81
#: ../../mod/profile_photo.php:88 ../../mod/profile_photo.php:204
#: ../../mod/profile_photo.php:296 ../../mod/profile_photo.php:305
#: ../../mod/photos.php:155 ../../mod/photos.php:731 ../../mod/photos.php:1187
#: ../../mod/photos.php:1210 ../../include/user.php:335
#: ../../include/user.php:342 ../../include/user.php:349
#: ../../view/theme/diabook/theme.php:500
#: mod/profile_photo.php:74 mod/profile_photo.php:81 mod/profile_photo.php:88
#: mod/profile_photo.php:210 mod/profile_photo.php:302
#: mod/profile_photo.php:311 mod/photos.php:78 mod/photos.php:192
#: mod/photos.php:775 mod/photos.php:1245 mod/photos.php:1268
#: mod/photos.php:1862 include/user.php:345 include/user.php:352
#: include/user.php:359 view/theme/diabook/theme.php:500
msgid "Profile Photos"
msgstr "Фотографии профиля"
#: ../../mod/profile_photo.php:77 ../../mod/profile_photo.php:84
#: ../../mod/profile_photo.php:91 ../../mod/profile_photo.php:308
#: mod/profile_photo.php:77 mod/profile_photo.php:84 mod/profile_photo.php:91
#: mod/profile_photo.php:314
#, php-format
msgid "Image size reduction [%s] failed."
msgstr "Уменьшение размера изображения [%s] не удалось."
#: ../../mod/profile_photo.php:118
#: mod/profile_photo.php:124
msgid ""
"Shift-reload the page or clear browser cache if the new photo does not "
"display immediately."
msgstr "Перезагрузите страницу с зажатой клавишей \"Shift\" для того, чтобы увидеть свое новое фото немедленно."
msgstr ""
"Перезагрузите страницу с зажатой клавишей \"Shift\" для того, чтобы увидеть "
"свое новое фото немедленно."
#: ../../mod/profile_photo.php:128
#: mod/profile_photo.php:134
msgid "Unable to process image"
msgstr "Не удается обработать изображение"
#: ../../mod/profile_photo.php:144 ../../mod/wall_upload.php:122
#: mod/profile_photo.php:150 mod/wall_upload.php:151 mod/photos.php:811
#, php-format
msgid "Image exceeds size limit of %d"
msgstr "Изображение превышает предельный размер %d"
msgid "Image exceeds size limit of %s"
msgstr ""
#: ../../mod/profile_photo.php:153 ../../mod/wall_upload.php:144
#: ../../mod/photos.php:807
#: mod/profile_photo.php:159 mod/wall_upload.php:183 mod/photos.php:851
msgid "Unable to process image."
msgstr "Невозможно обработать фото."
#: ../../mod/profile_photo.php:242
#: mod/profile_photo.php:248
msgid "Upload File:"
msgstr "Загрузить файл:"
#: ../../mod/profile_photo.php:243
#: mod/profile_photo.php:249
msgid "Select a profile:"
msgstr "Выбрать этот профиль:"
#: ../../mod/profile_photo.php:245
#: mod/profile_photo.php:251
msgid "Upload"
msgstr "Загрузить"
#: ../../mod/profile_photo.php:248 ../../mod/settings.php:1062
#: mod/profile_photo.php:254
msgid "or"
msgstr "или"
#: ../../mod/profile_photo.php:248
#: mod/profile_photo.php:254
msgid "skip this step"
msgstr "пропустить этот шаг"
#: ../../mod/profile_photo.php:248
#: mod/profile_photo.php:254
msgid "select a photo from your photo albums"
msgstr "выберите фото из ваших фотоальбомов"
#: ../../mod/profile_photo.php:262
#: mod/profile_photo.php:268
msgid "Crop Image"
msgstr "Обрезать изображение"
#: ../../mod/profile_photo.php:263
#: mod/profile_photo.php:269
msgid "Please adjust the image cropping for optimum viewing."
msgstr "Пожалуйста, настройте обрезку изображения для оптимального просмотра."
#: ../../mod/profile_photo.php:265
#: mod/profile_photo.php:271
msgid "Done Editing"
msgstr "Редактирование выполнено"
#: ../../mod/profile_photo.php:299
#: mod/profile_photo.php:305
msgid "Image uploaded successfully."
msgstr "Изображение загружено успешно."
#: ../../mod/profile_photo.php:301 ../../mod/wall_upload.php:172
#: ../../mod/photos.php:834
#: mod/profile_photo.php:307 mod/wall_upload.php:216 mod/photos.php:878
msgid "Image upload failed."
msgstr "Загрузка фото неудачная."
#: ../../mod/subthread.php:87 ../../mod/tagger.php:62 ../../mod/like.php:149
#: ../../include/conversation.php:126 ../../include/conversation.php:254
#: ../../include/text.php:1968 ../../include/diaspora.php:2087
#: ../../view/theme/diabook/theme.php:471
#: mod/subthread.php:87 mod/tagger.php:62 include/like.php:165
#: include/conversation.php:130 include/conversation.php:266
#: include/text.php:2000 include/diaspora.php:2169
#: view/theme/diabook/theme.php:471
msgid "photo"
msgstr "фото"
#: ../../mod/subthread.php:87 ../../mod/tagger.php:62 ../../mod/like.php:149
#: ../../mod/like.php:319 ../../include/conversation.php:121
#: ../../include/conversation.php:130 ../../include/conversation.php:249
#: ../../include/conversation.php:258 ../../include/diaspora.php:2087
#: ../../view/theme/diabook/theme.php:466
#: ../../view/theme/diabook/theme.php:475
#: mod/subthread.php:87 mod/tagger.php:62 include/like.php:165
#: include/like.php:334 include/conversation.php:125
#: include/conversation.php:134 include/conversation.php:261
#: include/conversation.php:270 include/diaspora.php:2169
#: view/theme/diabook/theme.php:466 view/theme/diabook/theme.php:475
msgid "status"
msgstr "статус"
#: ../../mod/subthread.php:103
#: mod/subthread.php:103
#, php-format
msgid "%1$s is following %2$s's %3$s"
msgstr ""
#: ../../mod/tagrm.php:41
#: mod/tagrm.php:41
msgid "Tag removed"
msgstr "Ключевое слово удалено"
#: ../../mod/tagrm.php:79
#: mod/tagrm.php:79
msgid "Remove Item Tag"
msgstr "Удалить ключевое слово"
#: ../../mod/tagrm.php:81
#: mod/tagrm.php:81
msgid "Select a tag to remove: "
msgstr "Выберите ключевое слово для удаления: "
#: ../../mod/tagrm.php:93 ../../mod/delegate.php:139
#: mod/tagrm.php:93 mod/delegate.php:139
msgid "Remove"
msgstr "Удалить"
#: ../../mod/filer.php:30 ../../include/conversation.php:1006
#: ../../include/conversation.php:1024
#: mod/ostatus_subscribe.php:14
msgid "Subscribing to OStatus contacts"
msgstr ""
#: mod/ostatus_subscribe.php:25
msgid "No contact provided."
msgstr ""
#: mod/ostatus_subscribe.php:30
msgid "Couldn't fetch information for contact."
msgstr ""
#: mod/ostatus_subscribe.php:38
msgid "Couldn't fetch friends for contact."
msgstr ""
#: mod/ostatus_subscribe.php:51 mod/repair_ostatus.php:44
msgid "Done"
msgstr "Готово"
#: mod/ostatus_subscribe.php:65
msgid "success"
msgstr "удачно"
#: mod/ostatus_subscribe.php:67
msgid "failed"
msgstr "неудача"
#: mod/ostatus_subscribe.php:69 object/Item.php:235
msgid "ignored"
msgstr ""
#: mod/ostatus_subscribe.php:73 mod/repair_ostatus.php:50
msgid "Keep this window open until done."
msgstr ""
#: mod/filer.php:30 include/conversation.php:1132
#: include/conversation.php:1150
msgid "Save to Folder:"
msgstr "Сохранить в папку:"
#: ../../mod/filer.php:30
#: mod/filer.php:30
msgid "- select -"
msgstr "- выбрать -"
#: ../../mod/filer.php:31 ../../mod/editpost.php:109 ../../mod/notes.php:63
#: ../../include/text.php:956
#: mod/filer.php:31 mod/editpost.php:109 mod/notes.php:61
#: include/text.php:1004
msgid "Save"
msgstr "Сохранить"
#: ../../mod/follow.php:27
#: mod/follow.php:19 mod/dfrn_request.php:870
msgid "Submit Request"
msgstr "Отправить запрос"
#: mod/follow.php:30
msgid "You already added this contact."
msgstr ""
#: mod/follow.php:39
msgid "Diaspora support isn't enabled. Contact can't be added."
msgstr ""
#: mod/follow.php:46
msgid "OStatus support is disabled. Contact can't be added."
msgstr ""
#: mod/follow.php:53
msgid "The network type couldn't be detected. Contact can't be added."
msgstr ""
#: mod/follow.php:109 mod/dfrn_request.php:856
msgid "Please answer the following:"
msgstr "Пожалуйста, ответьте следующее:"
#: mod/follow.php:110 mod/dfrn_request.php:857
#, php-format
msgid "Does %s know you?"
msgstr "%s знает вас?"
#: mod/follow.php:110 mod/settings.php:1103 mod/settings.php:1109
#: mod/settings.php:1117 mod/settings.php:1121 mod/settings.php:1126
#: mod/settings.php:1132 mod/settings.php:1138 mod/settings.php:1144
#: mod/settings.php:1170 mod/settings.php:1171 mod/settings.php:1172
#: mod/settings.php:1173 mod/settings.php:1174 mod/dfrn_request.php:857
#: mod/register.php:239 mod/profiles.php:658 mod/profiles.php:662
#: mod/profiles.php:687 mod/api.php:106
msgid "No"
msgstr "Нет"
#: mod/follow.php:111 mod/dfrn_request.php:861
msgid "Add a personal note:"
msgstr "Добавить личную заметку:"
#: mod/follow.php:117 mod/dfrn_request.php:867
msgid "Your Identity Address:"
msgstr "Ваш идентификационный адрес:"
#: mod/follow.php:180
msgid "Contact added"
msgstr "Контакт добавлен"
#: ../../mod/item.php:113
#: mod/item.php:114
msgid "Unable to locate original post."
msgstr "Не удалось найти оригинальный пост."
#: ../../mod/item.php:345
#: mod/item.php:329
msgid "Empty post discarded."
msgstr "Пустое сообщение отбрасывается."
#: ../../mod/item.php:484 ../../mod/wall_upload.php:169
#: ../../mod/wall_upload.php:178 ../../mod/wall_upload.php:185
#: ../../include/Photo.php:916 ../../include/Photo.php:931
#: ../../include/Photo.php:938 ../../include/Photo.php:960
#: ../../include/message.php:144
#: mod/item.php:467 mod/wall_upload.php:213 mod/wall_upload.php:227
#: mod/wall_upload.php:234 include/Photo.php:958 include/Photo.php:973
#: include/Photo.php:980 include/Photo.php:1002 include/message.php:145
msgid "Wall Photos"
msgstr "Фото стены"
#: ../../mod/item.php:938
#: mod/item.php:842
msgid "System error. Post not saved."
msgstr "Системная ошибка. Сообщение не сохранено."
#: ../../mod/item.php:964
#: mod/item.php:971
#, php-format
msgid ""
"This message was sent to you by %s, a member of the Friendica social "
"network."
msgstr "Это сообщение было отправлено вам %s, участником социальной сети Friendica."
"This message was sent to you by %s, a member of the Friendica social network."
msgstr ""
"Это сообщение было отправлено вам %s, участником социальной сети Friendica."
#: ../../mod/item.php:966
#: mod/item.php:973
#, php-format
msgid "You may visit them online at %s"
msgstr "Вы можете посетить их в онлайне на %s"
#: ../../mod/item.php:967
#: mod/item.php:974
msgid ""
"Please contact the sender by replying to this post if you do not wish to "
"receive these messages."
msgstr "Пожалуйста, свяжитесь с отправителем, ответив на это сообщение, если вы не хотите получать эти сообщения."
msgstr ""
"Пожалуйста, свяжитесь с отправителем, ответив на это сообщение, если вы не "
"хотите получать эти сообщения."
#: ../../mod/item.php:971
#: mod/item.php:978
#, php-format
msgid "%s posted an update."
msgstr "%s отправил/а/ обновление."
#: ../../mod/group.php:29
#: mod/group.php:29
msgid "Group created."
msgstr "Группа создана."
#: ../../mod/group.php:35
#: mod/group.php:35
msgid "Could not create group."
msgstr "Не удалось создать группу."
#: ../../mod/group.php:47 ../../mod/group.php:140
#: mod/group.php:47 mod/group.php:140
msgid "Group not found."
msgstr "Группа не найдена."
#: ../../mod/group.php:60
#: mod/group.php:60
msgid "Group name changed."
msgstr "Название группы изменено."
#: ../../mod/group.php:87
#: mod/group.php:87
msgid "Save Group"
msgstr "Сохранить группу"
#: ../../mod/group.php:93
#: mod/group.php:93
msgid "Create a group of contacts/friends."
msgstr "Создать группу контактов / друзей."
#: ../../mod/group.php:94 ../../mod/group.php:180
#: mod/group.php:94 mod/group.php:178 include/group.php:289
msgid "Group Name: "
msgstr "Название группы: "
#: ../../mod/group.php:113
#: mod/group.php:113
msgid "Group removed."
msgstr "Группа удалена."
#: ../../mod/group.php:115
#: mod/group.php:115
msgid "Unable to remove group."
msgstr "Не удается удалить группу."
#: ../../mod/group.php:179
#: mod/group.php:177
msgid "Group Editor"
msgstr "Редактор групп"
#: ../../mod/group.php:192
#: mod/group.php:190
msgid "Members"
msgstr "Участники"
#: ../../mod/apps.php:7 ../../index.php:212
#: mod/group.php:193 mod/network.php:576 mod/content.php:130
msgid "Group is empty"
msgstr "Группа пуста"
#: mod/apps.php:7 index.php:226
msgid "You must be logged in to use addons. "
msgstr "Вы должны войти в систему, чтобы использовать аддоны."
#: ../../mod/apps.php:11
#: mod/apps.php:11
msgid "Applications"
msgstr "Приложения"
#: ../../mod/apps.php:14
#: mod/apps.php:14
msgid "No installed applications."
msgstr "Нет установленных приложений."
#: ../../mod/dfrn_confirm.php:64 ../../mod/profiles.php:18
#: ../../mod/profiles.php:133 ../../mod/profiles.php:179
#: ../../mod/profiles.php:630
#: mod/dfrn_confirm.php:64 mod/profiles.php:18 mod/profiles.php:133
#: mod/profiles.php:179 mod/profiles.php:627
msgid "Profile not found."
msgstr "Профиль не найден."
#: ../../mod/dfrn_confirm.php:120 ../../mod/fsuggest.php:20
#: ../../mod/fsuggest.php:92 ../../mod/crepair.php:133
#: mod/dfrn_confirm.php:120 mod/fsuggest.php:20 mod/fsuggest.php:92
#: mod/crepair.php:131
msgid "Contact not found."
msgstr "Контакт не найден."
#: ../../mod/dfrn_confirm.php:121
#: mod/dfrn_confirm.php:121
msgid ""
"This may occasionally happen if contact was requested by both persons and it"
" has already been approved."
msgstr "Это может иногда происходить, если контакт запрашивали двое людей, и он был уже одобрен."
"This may occasionally happen if contact was requested by both persons and it "
"has already been approved."
msgstr ""
"Это может иногда происходить, если контакт запрашивали двое людей, и он был "
"уже одобрен."
#: ../../mod/dfrn_confirm.php:240
#: mod/dfrn_confirm.php:240
msgid "Response from remote site was not understood."
msgstr "Ответ от удаленного сайта не был понят."
#: ../../mod/dfrn_confirm.php:249 ../../mod/dfrn_confirm.php:254
#: mod/dfrn_confirm.php:249 mod/dfrn_confirm.php:254
msgid "Unexpected response from remote site: "
msgstr "Неожиданный ответ от удаленного сайта: "
#: ../../mod/dfrn_confirm.php:263
#: mod/dfrn_confirm.php:263
msgid "Confirmation completed successfully."
msgstr "Подтверждение успешно завершено."
#: ../../mod/dfrn_confirm.php:265 ../../mod/dfrn_confirm.php:279
#: ../../mod/dfrn_confirm.php:286
#: mod/dfrn_confirm.php:265 mod/dfrn_confirm.php:279 mod/dfrn_confirm.php:286
msgid "Remote site reported: "
msgstr "Удаленный сайт сообщил: "
#: ../../mod/dfrn_confirm.php:277
#: mod/dfrn_confirm.php:277
msgid "Temporary failure. Please wait and try again."
msgstr "Временные неудачи. Подождите и попробуйте еще раз."
#: ../../mod/dfrn_confirm.php:284
#: mod/dfrn_confirm.php:284
msgid "Introduction failed or was revoked."
msgstr "Запрос ошибочен или был отозван."
#: ../../mod/dfrn_confirm.php:429
#: mod/dfrn_confirm.php:430
msgid "Unable to set contact photo."
msgstr "Не удается установить фото контакта."
#: ../../mod/dfrn_confirm.php:486 ../../include/conversation.php:172
#: ../../include/diaspora.php:620
#: mod/dfrn_confirm.php:487 include/conversation.php:185
#: include/diaspora.php:637
#, php-format
msgid "%1$s is now friends with %2$s"
msgstr "%1$s и %2$s теперь друзья"
#: ../../mod/dfrn_confirm.php:571
#: mod/dfrn_confirm.php:572
#, php-format
msgid "No user record found for '%s' "
msgstr "Не найдено записи пользователя для '%s' "
#: ../../mod/dfrn_confirm.php:581
#: mod/dfrn_confirm.php:582
msgid "Our site encryption key is apparently messed up."
msgstr "Наш ключ шифрования сайта, по-видимому, перепутался."
#: ../../mod/dfrn_confirm.php:592
#: mod/dfrn_confirm.php:593
msgid "Empty site URL was provided or URL could not be decrypted by us."
msgstr "Был предоставлен пустой URL сайта ​​или URL не может быть расшифрован нами."
msgstr ""
"Был предоставлен пустой URL сайта ​​или URL не может быть расшифрован нами."
#: ../../mod/dfrn_confirm.php:613
#: mod/dfrn_confirm.php:614
msgid "Contact record was not found for you on our site."
msgstr "Запись контакта не найдена для вас на нашем сайте."
#: ../../mod/dfrn_confirm.php:627
#: mod/dfrn_confirm.php:628
#, php-format
msgid "Site public key not available in contact record for URL %s."
msgstr "Публичный ключ недоступен в записи о контакте по ссылке %s"
#: ../../mod/dfrn_confirm.php:647
#: mod/dfrn_confirm.php:648
msgid ""
"The ID provided by your system is a duplicate on our system. It should work "
"if you try again."
msgstr "ID, предложенный вашей системой, является дубликатом в нашей системе. Он должен работать, если вы повторите попытку."
msgstr ""
"ID, предложенный вашей системой, является дубликатом в нашей системе. Он "
"должен работать, если вы повторите попытку."
#: ../../mod/dfrn_confirm.php:658
#: mod/dfrn_confirm.php:659
msgid "Unable to set your contact credentials on our system."
msgstr "Не удалось установить ваши учетные данные контакта в нашей системе."
#: ../../mod/dfrn_confirm.php:725
#: mod/dfrn_confirm.php:726
msgid "Unable to update your contact profile details on our system"
msgstr "Не удается обновить ваши контактные детали профиля в нашей системе"
#: ../../mod/dfrn_confirm.php:752 ../../mod/dfrn_request.php:717
#: ../../include/items.php:4008
#: mod/dfrn_confirm.php:753 mod/dfrn_request.php:741 include/items.php:4299
msgid "[Name Withheld]"
msgstr "[Имя не разглашается]"
#: ../../mod/dfrn_confirm.php:797
#: mod/dfrn_confirm.php:798
#, php-format
msgid "%1$s has joined %2$s"
msgstr "%1$s присоединился %2$s"
#: ../../mod/profile.php:21 ../../boot.php:1458
#: mod/profile.php:21 include/identity.php:51
msgid "Requested profile is not available."
msgstr "Запрашиваемый профиль недоступен."
#: ../../mod/profile.php:180
#: mod/profile.php:179
msgid "Tips for New Members"
msgstr "Советы для новых участников"
#: ../../mod/videos.php:125
#: mod/videos.php:123
msgid "Do you really want to delete this video?"
msgstr ""
#: mod/videos.php:128
msgid "Delete Video"
msgstr "Удалить видео"
#: mod/videos.php:207
msgid "No videos selected"
msgstr "Видео не выбрано"
#: ../../mod/videos.php:226 ../../mod/photos.php:1031
#: mod/videos.php:308 mod/photos.php:1087
msgid "Access to this item is restricted."
msgstr "Доступ к этому пункту ограничен."
#: ../../mod/videos.php:301 ../../include/text.php:1405
#: mod/videos.php:383 include/text.php:1472
msgid "View Video"
msgstr "Просмотреть видео"
#: ../../mod/videos.php:308 ../../mod/photos.php:1808
#: mod/videos.php:390 mod/photos.php:1890
msgid "View Album"
msgstr "Просмотреть альбом"
#: ../../mod/videos.php:317
#: mod/videos.php:399
msgid "Recent Videos"
msgstr "Последние видео"
#: ../../mod/videos.php:319
#: mod/videos.php:401
msgid "Upload New Videos"
msgstr "Загрузить новые видео"
#: ../../mod/tagger.php:95 ../../include/conversation.php:266
#: mod/tagger.php:95 include/conversation.php:278
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "%1$s tagged %2$s's %3$s в %4$s"
#: ../../mod/fsuggest.php:63
#: mod/fsuggest.php:63
msgid "Friend suggestion sent."
msgstr "Приглашение в друзья отправлено."
#: ../../mod/fsuggest.php:97
#: mod/fsuggest.php:97
msgid "Suggest Friends"
msgstr "Предложить друзей"
#: ../../mod/fsuggest.php:99
#: mod/fsuggest.php:99
#, php-format
msgid "Suggest a friend for %s"
msgstr "Предложить друга для %s."
#: ../../mod/lostpass.php:19
#: mod/wall_upload.php:20 mod/wall_upload.php:33 mod/wall_upload.php:86
#: mod/wall_upload.php:122 mod/wall_upload.php:125 mod/wall_attach.php:17
#: mod/wall_attach.php:25 mod/wall_attach.php:76 include/api.php:1781
msgid "Invalid request."
msgstr "Неверный запрос."
#: mod/lostpass.php:19
msgid "No valid account found."
msgstr "Не найдено действительного аккаунта."
#: ../../mod/lostpass.php:35
#: mod/lostpass.php:35
msgid "Password reset request issued. Check your email."
msgstr "Запрос на сброс пароля принят. Проверьте вашу электронную почту."
#: ../../mod/lostpass.php:42
#: mod/lostpass.php:42
#, php-format
msgid ""
"\n"
"\t\tDear %1$s,\n"
"\t\t\tA request was recently received at \"%2$s\" to reset your account\n"
"\t\tpassword. In order to confirm this request, please select the verification link\n"
"\t\tpassword. In order to confirm this request, please select the "
"verification link\n"
"\t\tbelow or paste it into your web browser address bar.\n"
"\n"
"\t\tIf you did NOT request this change, please DO NOT follow the link\n"
@ -1169,7 +1336,7 @@ msgid ""
"\t\tissued this request."
msgstr ""
#: ../../mod/lostpass.php:53
#: mod/lostpass.php:53
#, php-format
msgid ""
"\n"
@ -1178,7 +1345,8 @@ msgid ""
"\t\t%1$s\n"
"\n"
"\t\tYou will then receive a follow-up message containing the new password.\n"
"\t\tYou may change that password from your account settings page after logging in.\n"
"\t\tYou may change that password from your account settings page after "
"logging in.\n"
"\n"
"\t\tThe login details are as follows:\n"
"\n"
@ -1186,55 +1354,60 @@ msgid ""
"\t\tLogin Name:\t%3$s"
msgstr ""
#: ../../mod/lostpass.php:72
#: mod/lostpass.php:72
#, php-format
msgid "Password reset requested at %s"
msgstr "Запрос на сброс пароля получен %s"
#: ../../mod/lostpass.php:92
#: mod/lostpass.php:92
msgid ""
"Request could not be verified. (You may have previously submitted it.) "
"Password reset failed."
msgstr "Запрос не может быть проверен. (Вы, возможно, ранее представляли его.) Попытка сброса пароля неудачная."
msgstr ""
"Запрос не может быть проверен. (Вы, возможно, ранее представляли его.) "
"Попытка сброса пароля неудачная."
#: ../../mod/lostpass.php:109 ../../boot.php:1280
#: mod/lostpass.php:109 boot.php:1444
msgid "Password Reset"
msgstr "Сброс пароля"
#: ../../mod/lostpass.php:110
#: mod/lostpass.php:110
msgid "Your password has been reset as requested."
msgstr "Ваш пароль был сброшен по требованию."
#: ../../mod/lostpass.php:111
#: mod/lostpass.php:111
msgid "Your new password is"
msgstr "Ваш новый пароль"
#: ../../mod/lostpass.php:112
#: mod/lostpass.php:112
msgid "Save or copy your new password - and then"
msgstr "Сохраните или скопируйте новый пароль - и затем"
#: ../../mod/lostpass.php:113
#: mod/lostpass.php:113
msgid "click here to login"
msgstr "нажмите здесь для входа"
#: ../../mod/lostpass.php:114
#: mod/lostpass.php:114
msgid ""
"Your password may be changed from the <em>Settings</em> page after "
"successful login."
msgstr "Ваш пароль может быть изменен на странице <em>Настройки</em> после успешного входа."
msgstr ""
"Ваш пароль может быть изменен на странице <em>Настройки</em> после успешного "
"входа."
#: ../../mod/lostpass.php:125
#: mod/lostpass.php:125
#, php-format
msgid ""
"\n"
"\t\t\t\tDear %1$s,\n"
"\t\t\t\t\tYour password has been changed as requested. Please retain this\n"
"\t\t\t\tinformation for your records (or change your password immediately to\n"
"\t\t\t\tinformation for your records (or change your password immediately "
"to\n"
"\t\t\t\tsomething that you will remember).\n"
"\t\t\t"
msgstr ""
#: ../../mod/lostpass.php:131
#: mod/lostpass.php:131
#, php-format
msgid ""
"\n"
@ -1244,1379 +1417,1693 @@ msgid ""
"\t\t\t\tLogin Name:\t%2$s\n"
"\t\t\t\tPassword:\t%3$s\n"
"\n"
"\t\t\t\tYou may change that password from your account settings page after logging in.\n"
"\t\t\t\tYou may change that password from your account settings page after "
"logging in.\n"
"\t\t\t"
msgstr ""
#: ../../mod/lostpass.php:147
#: mod/lostpass.php:147
#, php-format
msgid "Your password has been changed at %s"
msgstr "Ваш пароль был изменен %s"
#: ../../mod/lostpass.php:159
#: mod/lostpass.php:159
msgid "Forgot your Password?"
msgstr "Забыли пароль?"
#: ../../mod/lostpass.php:160
#: mod/lostpass.php:160
msgid ""
"Enter your email address and submit to have your password reset. Then check "
"your email for further instructions."
msgstr "Введите адрес электронной почты и подтвердите, что вы хотите сбросить ваш пароль. Затем проверьте свою электронную почту для получения дальнейших инструкций."
msgstr ""
"Введите адрес электронной почты и подтвердите, что вы хотите сбросить ваш "
"пароль. Затем проверьте свою электронную почту для получения дальнейших "
"инструкций."
#: ../../mod/lostpass.php:161
#: mod/lostpass.php:161
msgid "Nickname or Email: "
msgstr "Ник или E-mail: "
#: ../../mod/lostpass.php:162
#: mod/lostpass.php:162
msgid "Reset"
msgstr "Сброс"
#: ../../mod/like.php:166 ../../include/conversation.php:137
#: ../../include/diaspora.php:2103 ../../view/theme/diabook/theme.php:480
#, php-format
msgid "%1$s likes %2$s's %3$s"
msgstr "%1$s нравится %3$s от %2$s "
#: ../../mod/like.php:168 ../../include/conversation.php:140
#, php-format
msgid "%1$s doesn't like %2$s's %3$s"
msgstr "%1$s не нравится %3$s от %2$s "
#: ../../mod/ping.php:240
#: mod/ping.php:265
msgid "{0} wants to be your friend"
msgstr "{0} хочет стать Вашим другом"
#: ../../mod/ping.php:245
#: mod/ping.php:280
msgid "{0} sent you a message"
msgstr "{0} отправил Вам сообщение"
#: ../../mod/ping.php:250
#: mod/ping.php:295
msgid "{0} requested registration"
msgstr "{0} требуемая регистрация"
#: ../../mod/ping.php:256
#, php-format
msgid "{0} commented %s's post"
msgstr "{0} прокомментировал сообщение от %s"
#: ../../mod/ping.php:261
#, php-format
msgid "{0} liked %s's post"
msgstr "{0} нравится сообщение от %s"
#: ../../mod/ping.php:266
#, php-format
msgid "{0} disliked %s's post"
msgstr "{0} не нравится сообщение от %s"
#: ../../mod/ping.php:271
#, php-format
msgid "{0} is now friends with %s"
msgstr "{0} теперь друзья с %s"
#: ../../mod/ping.php:276
msgid "{0} posted"
msgstr "{0} опубликовано"
#: ../../mod/ping.php:281
#, php-format
msgid "{0} tagged %s's post with #%s"
msgstr "{0} пометил сообщение %s с #%s"
#: ../../mod/ping.php:287
msgid "{0} mentioned you in a post"
msgstr "{0} упоменул Вас в сообщение"
#: ../../mod/viewcontacts.php:41
#: mod/viewcontacts.php:72
msgid "No contacts."
msgstr "Нет контактов."
#: ../../mod/viewcontacts.php:78 ../../include/text.php:876
msgid "View Contacts"
msgstr "Просмотр контактов"
#: ../../mod/notifications.php:26
#: mod/notifications.php:29
msgid "Invalid request identifier."
msgstr "Неверный идентификатор запроса."
#: ../../mod/notifications.php:35 ../../mod/notifications.php:165
#: ../../mod/notifications.php:211
#: mod/notifications.php:38 mod/notifications.php:180
#: mod/notifications.php:260
msgid "Discard"
msgstr "Отказаться"
#: ../../mod/notifications.php:78
#: mod/notifications.php:81
msgid "System"
msgstr "Система"
#: ../../mod/notifications.php:83 ../../include/nav.php:145
#: mod/notifications.php:87 mod/admin.php:390 include/nav.php:154
msgid "Network"
msgstr "Сеть"
msgstr "Новости"
#: ../../mod/notifications.php:88 ../../mod/network.php:371
#: mod/notifications.php:93 mod/network.php:384
msgid "Personal"
msgstr "Персонал"
#: ../../mod/notifications.php:93 ../../include/nav.php:105
#: ../../include/nav.php:148 ../../view/theme/diabook/theme.php:123
#: mod/notifications.php:99 include/nav.php:104 include/nav.php:157
#: view/theme/diabook/theme.php:123
msgid "Home"
msgstr "Главная"
msgstr "Мой профиль"
#: ../../mod/notifications.php:98 ../../include/nav.php:154
#: mod/notifications.php:105 include/nav.php:162
msgid "Introductions"
msgstr "Запросы"
#: ../../mod/notifications.php:122
#: mod/notifications.php:130
msgid "Show Ignored Requests"
msgstr "Показать проигнорированные запросы"
#: ../../mod/notifications.php:122
#: mod/notifications.php:130
msgid "Hide Ignored Requests"
msgstr "Скрыть проигнорированные запросы"
#: ../../mod/notifications.php:149 ../../mod/notifications.php:195
#: mod/notifications.php:164 mod/notifications.php:234
msgid "Notification type: "
msgstr "Тип уведомления: "
#: ../../mod/notifications.php:150
#: mod/notifications.php:165
msgid "Friend Suggestion"
msgstr "Предложение в друзья"
#: ../../mod/notifications.php:152
#: mod/notifications.php:167
#, php-format
msgid "suggested by %s"
msgstr "предложено юзером %s"
#: ../../mod/notifications.php:158 ../../mod/notifications.php:205
#: mod/notifications.php:173 mod/notifications.php:252
msgid "Post a new friend activity"
msgstr "Настроение"
#: ../../mod/notifications.php:158 ../../mod/notifications.php:205
#: mod/notifications.php:173 mod/notifications.php:252
msgid "if applicable"
msgstr "если требуется"
#: ../../mod/notifications.php:161 ../../mod/notifications.php:208
#: ../../mod/admin.php:1005
#: mod/notifications.php:176 mod/notifications.php:257 mod/admin.php:1308
msgid "Approve"
msgstr "Одобрить"
#: ../../mod/notifications.php:181
#: mod/notifications.php:196
msgid "Claims to be known to you: "
msgstr "Утверждения, о которых должно быть вам известно: "
#: ../../mod/notifications.php:181
#: mod/notifications.php:196
msgid "yes"
msgstr "да"
#: ../../mod/notifications.php:181
#: mod/notifications.php:196
msgid "no"
msgstr "нет"
#: ../../mod/notifications.php:188
msgid "Approve as: "
msgstr "Утвердить как: "
#: mod/notifications.php:197
msgid ""
"Shall your connection be bidirectional or not? \"Friend\" implies that you "
"allow to read and you subscribe to their posts. \"Fan/Admirer\" means that "
"you allow to read but you do not want to read theirs. Approve as: "
msgstr ""
#: ../../mod/notifications.php:189
#: mod/notifications.php:200
msgid ""
"Shall your connection be bidirectional or not? \"Friend\" implies that you "
"allow to read and you subscribe to their posts. \"Sharer\" means that you "
"allow to read but you do not want to read theirs. Approve as: "
msgstr ""
#: mod/notifications.php:208
msgid "Friend"
msgstr "Друг"
#: ../../mod/notifications.php:190
#: mod/notifications.php:209
msgid "Sharer"
msgstr "Участник"
#: ../../mod/notifications.php:190
#: mod/notifications.php:209
msgid "Fan/Admirer"
msgstr "Фанат / Поклонник"
#: ../../mod/notifications.php:196
#: mod/notifications.php:235
msgid "Friend/Connect Request"
msgstr "Запрос в друзья / на подключение"
#: ../../mod/notifications.php:196
#: mod/notifications.php:235
msgid "New Follower"
msgstr "Новый фолловер"
#: ../../mod/notifications.php:217
#: mod/notifications.php:250 mod/directory.php:147 include/identity.php:310
#: include/identity.php:590
msgid "Gender:"
msgstr "Пол:"
#: mod/notifications.php:266
msgid "No introductions."
msgstr "Запросов нет."
#: ../../mod/notifications.php:220 ../../include/nav.php:155
#: mod/notifications.php:269 include/nav.php:165
msgid "Notifications"
msgstr "Уведомления"
#: ../../mod/notifications.php:258 ../../mod/notifications.php:387
#: ../../mod/notifications.php:478
#: mod/notifications.php:307 mod/notifications.php:436
#: mod/notifications.php:527
#, php-format
msgid "%s liked %s's post"
msgstr "%s нравится %s сообшение"
#: ../../mod/notifications.php:268 ../../mod/notifications.php:397
#: ../../mod/notifications.php:488
#: mod/notifications.php:317 mod/notifications.php:446
#: mod/notifications.php:537
#, php-format
msgid "%s disliked %s's post"
msgstr "%s не нравится %s сообшение"
#: ../../mod/notifications.php:283 ../../mod/notifications.php:412
#: ../../mod/notifications.php:503
#: mod/notifications.php:332 mod/notifications.php:461
#: mod/notifications.php:552
#, php-format
msgid "%s is now friends with %s"
msgstr "%s теперь друзья с %s"
#: ../../mod/notifications.php:290 ../../mod/notifications.php:419
#: mod/notifications.php:339 mod/notifications.php:468
#, php-format
msgid "%s created a new post"
msgstr "%s написал новое сообщение"
#: ../../mod/notifications.php:291 ../../mod/notifications.php:420
#: ../../mod/notifications.php:513
#: mod/notifications.php:340 mod/notifications.php:469
#: mod/notifications.php:562
#, php-format
msgid "%s commented on %s's post"
msgstr "%s прокомментировал %s сообщение"
#: ../../mod/notifications.php:306
#: mod/notifications.php:355
msgid "No more network notifications."
msgstr "Уведомлений из сети больше нет."
#: ../../mod/notifications.php:310
#: mod/notifications.php:359
msgid "Network Notifications"
msgstr "Уведомления сети"
#: ../../mod/notifications.php:336 ../../mod/notify.php:75
#: mod/notifications.php:385 mod/notify.php:72
msgid "No more system notifications."
msgstr "Системных уведомлений больше нет."
#: ../../mod/notifications.php:340 ../../mod/notify.php:79
#: mod/notifications.php:389 mod/notify.php:76
msgid "System Notifications"
msgstr "Уведомления системы"
#: ../../mod/notifications.php:435
#: mod/notifications.php:484
msgid "No more personal notifications."
msgstr "Персональных уведомлений больше нет."
#: ../../mod/notifications.php:439
#: mod/notifications.php:488
msgid "Personal Notifications"
msgstr "Личные уведомления"
#: ../../mod/notifications.php:520
#: mod/notifications.php:569
msgid "No more home notifications."
msgstr "Уведомлений больше нет."
#: ../../mod/notifications.php:524
#: mod/notifications.php:573
msgid "Home Notifications"
msgstr "Уведомления"
#: ../../mod/babel.php:17
#: mod/babel.php:17
msgid "Source (bbcode) text:"
msgstr "Код (bbcode):"
#: ../../mod/babel.php:23
#: mod/babel.php:23
msgid "Source (Diaspora) text to convert to BBcode:"
msgstr "Код (Diaspora) для конвертации в BBcode:"
#: ../../mod/babel.php:31
#: mod/babel.php:31
msgid "Source input: "
msgstr "Ввести код:"
#: ../../mod/babel.php:35
#: mod/babel.php:35
msgid "bb2html (raw HTML): "
msgstr "bb2html (raw HTML): "
#: ../../mod/babel.php:39
#: mod/babel.php:39
msgid "bb2html: "
msgstr "bb2html: "
#: ../../mod/babel.php:43
#: mod/babel.php:43
msgid "bb2html2bb: "
msgstr "bb2html2bb: "
#: ../../mod/babel.php:47
#: mod/babel.php:47
msgid "bb2md: "
msgstr "bb2md: "
#: ../../mod/babel.php:51
#: mod/babel.php:51
msgid "bb2md2html: "
msgstr "bb2md2html: "
#: ../../mod/babel.php:55
#: mod/babel.php:55
msgid "bb2dia2bb: "
msgstr "bb2dia2bb: "
#: ../../mod/babel.php:59
#: mod/babel.php:59
msgid "bb2md2html2bb: "
msgstr "bb2md2html2bb: "
#: ../../mod/babel.php:69
#: mod/babel.php:69
msgid "Source input (Diaspora format): "
msgstr "Ввод кода (формат Diaspora):"
#: ../../mod/babel.php:74
#: mod/babel.php:74
msgid "diaspora2bb: "
msgstr "diaspora2bb: "
#: ../../mod/navigation.php:20 ../../include/nav.php:34
#: mod/navigation.php:19 include/nav.php:33
msgid "Nothing new here"
msgstr "Ничего нового здесь"
#: ../../mod/navigation.php:24 ../../include/nav.php:38
#: mod/navigation.php:23 include/nav.php:37
msgid "Clear notifications"
msgstr "Стереть уведомления"
#: ../../mod/message.php:9 ../../include/nav.php:164
#: mod/message.php:15 include/nav.php:174
msgid "New Message"
msgstr "Новое сообщение"
#: ../../mod/message.php:63 ../../mod/wallmessage.php:56
#: mod/message.php:70 mod/wallmessage.php:56
msgid "No recipient selected."
msgstr "Не выбран получатель."
#: ../../mod/message.php:67
#: mod/message.php:74
msgid "Unable to locate contact information."
msgstr "Не удалось найти контактную информацию."
#: ../../mod/message.php:70 ../../mod/wallmessage.php:62
#: mod/message.php:77 mod/wallmessage.php:62
msgid "Message could not be sent."
msgstr "Сообщение не может быть отправлено."
#: ../../mod/message.php:73 ../../mod/wallmessage.php:65
#: mod/message.php:80 mod/wallmessage.php:65
msgid "Message collection failure."
msgstr "Неудача коллекции сообщения."
#: ../../mod/message.php:76 ../../mod/wallmessage.php:68
#: mod/message.php:83 mod/wallmessage.php:68
msgid "Message sent."
msgstr "Сообщение отправлено."
#: ../../mod/message.php:182 ../../include/nav.php:161
#: mod/message.php:189 include/nav.php:171
msgid "Messages"
msgstr "Сообщения"
#: ../../mod/message.php:207
#: mod/message.php:214
msgid "Do you really want to delete this message?"
msgstr "Вы действительно хотите удалить это сообщение?"
#: ../../mod/message.php:227
#: mod/message.php:234
msgid "Message deleted."
msgstr "Сообщение удалено."
#: ../../mod/message.php:258
#: mod/message.php:265
msgid "Conversation removed."
msgstr "Беседа удалена."
#: ../../mod/message.php:283 ../../mod/message.php:291
#: ../../mod/message.php:466 ../../mod/message.php:474
#: ../../mod/wallmessage.php:127 ../../mod/wallmessage.php:135
#: ../../include/conversation.php:1002 ../../include/conversation.php:1020
#: mod/message.php:290 mod/message.php:298 mod/message.php:427
#: mod/message.php:435 mod/wallmessage.php:127 mod/wallmessage.php:135
#: include/conversation.php:1128 include/conversation.php:1146
msgid "Please enter a link URL:"
msgstr "Пожалуйста, введите URL ссылки:"
#: ../../mod/message.php:319 ../../mod/wallmessage.php:142
#: mod/message.php:326 mod/wallmessage.php:142
msgid "Send Private Message"
msgstr "Отправить личное сообщение"
#: ../../mod/message.php:320 ../../mod/message.php:553
#: ../../mod/wallmessage.php:144
#: mod/message.php:327 mod/message.php:514 mod/wallmessage.php:144
msgid "To:"
msgstr "Кому:"
#: ../../mod/message.php:325 ../../mod/message.php:555
#: ../../mod/wallmessage.php:145
#: mod/message.php:332 mod/message.php:516 mod/wallmessage.php:145
msgid "Subject:"
msgstr "Тема:"
#: ../../mod/message.php:329 ../../mod/message.php:558
#: ../../mod/wallmessage.php:151 ../../mod/invite.php:134
#: mod/message.php:336 mod/message.php:519 mod/wallmessage.php:151
#: mod/invite.php:134
msgid "Your message:"
msgstr "Ваше сообщение:"
#: ../../mod/message.php:332 ../../mod/message.php:562
#: ../../mod/wallmessage.php:154 ../../mod/editpost.php:110
#: ../../include/conversation.php:1091
#: mod/message.php:339 mod/message.php:523 mod/wallmessage.php:154
#: mod/editpost.php:110 include/conversation.php:1183
msgid "Upload photo"
msgstr "Загрузить фото"
#: ../../mod/message.php:333 ../../mod/message.php:563
#: ../../mod/wallmessage.php:155 ../../mod/editpost.php:114
#: ../../include/conversation.php:1095
#: mod/message.php:340 mod/message.php:524 mod/wallmessage.php:155
#: mod/editpost.php:114 include/conversation.php:1187
msgid "Insert web link"
msgstr "Вставить веб-ссылку"
#: ../../mod/message.php:334 ../../mod/message.php:565
#: ../../mod/content.php:499 ../../mod/content.php:883
#: ../../mod/wallmessage.php:156 ../../mod/editpost.php:124
#: ../../mod/photos.php:1545 ../../object/Item.php:364
#: ../../include/conversation.php:692 ../../include/conversation.php:1109
#: mod/message.php:341 mod/message.php:526 mod/content.php:501
#: mod/content.php:885 mod/wallmessage.php:156 mod/editpost.php:124
#: mod/photos.php:1610 object/Item.php:396 include/conversation.php:713
#: include/conversation.php:1201
msgid "Please wait"
msgstr "Пожалуйста, подождите"
#: ../../mod/message.php:371
#: mod/message.php:368
msgid "No messages."
msgstr "Нет сообщений."
#: ../../mod/message.php:378
#: mod/message.php:411
msgid "Message not available."
msgstr "Сообщение не доступно."
#: mod/message.php:481
msgid "Delete message"
msgstr "Удалить сообщение"
#: mod/message.php:507 mod/message.php:584
msgid "Delete conversation"
msgstr "Удалить историю общения"
#: mod/message.php:509
msgid ""
"No secure communications available. You <strong>may</strong> be able to "
"respond from the sender's profile page."
msgstr ""
"Невозможно защищённое соединение. Вы <strong>имеете</strong> возможность "
"ответить со страницы профиля отправителя."
#: mod/message.php:513
msgid "Send Reply"
msgstr "Отправить ответ"
#: mod/message.php:557
#, php-format
msgid "Unknown sender - %s"
msgstr "Неизвестный отправитель - %s"
#: ../../mod/message.php:381
#: mod/message.php:560
#, php-format
msgid "You and %s"
msgstr "Вы и %s"
#: ../../mod/message.php:384
#: mod/message.php:563
#, php-format
msgid "%s and You"
msgstr "%s и Вы"
#: ../../mod/message.php:405 ../../mod/message.php:546
msgid "Delete conversation"
msgstr "Удалить историю общения"
#: ../../mod/message.php:408
#: mod/message.php:587
msgid "D, d M Y - g:i A"
msgstr "D, d M Y - g:i A"
#: ../../mod/message.php:411
#: mod/message.php:590
#, php-format
msgid "%d message"
msgid_plural "%d messages"
msgstr[0] "%d сообщение"
msgstr[1] "%d сообщений"
msgstr[2] "%d сообщений"
msgstr[3] "%d сообщений"
#: ../../mod/message.php:450
msgid "Message not available."
msgstr "Сообщение не доступно."
#: ../../mod/message.php:520
msgid "Delete message"
msgstr "Удалить сообщение"
#: ../../mod/message.php:548
msgid ""
"No secure communications available. You <strong>may</strong> be able to "
"respond from the sender's profile page."
msgstr "Невозможно защищённое соединение. Вы <strong>имеете</strong> возможность ответить со страницы профиля отправителя."
#: ../../mod/message.php:552
msgid "Send Reply"
msgstr "Отправить ответ"
#: ../../mod/update_display.php:22 ../../mod/update_community.php:18
#: ../../mod/update_notes.php:37 ../../mod/update_profile.php:41
#: ../../mod/update_network.php:25
#: mod/update_display.php:22 mod/update_community.php:18
#: mod/update_notes.php:37 mod/update_profile.php:41 mod/update_network.php:25
msgid "[Embedded content - reload page to view]"
msgstr "[Встроенное содержание - перезагрузите страницу для просмотра]"
#: ../../mod/crepair.php:106
#: mod/crepair.php:104
msgid "Contact settings applied."
msgstr "Установки контакта приняты."
#: ../../mod/crepair.php:108
#: mod/crepair.php:106
msgid "Contact update failed."
msgstr "Обновление контакта неудачное."
#: ../../mod/crepair.php:139
msgid "Repair Contact Settings"
msgstr "Восстановить установки контакта"
#: ../../mod/crepair.php:141
#: mod/crepair.php:137
msgid ""
"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect"
" information your communications with this contact may stop working."
msgstr "<strong>ВНИМАНИЕ: Это крайне важно!</strong> Если вы введете неверную информацию, ваша связь с этим контактом перестанет работать."
"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect "
"information your communications with this contact may stop working."
msgstr ""
"<strong>ВНИМАНИЕ: Это крайне важно!</strong> Если вы введете неверную "
"информацию, ваша связь с этим контактом перестанет работать."
#: ../../mod/crepair.php:142
#: mod/crepair.php:138
msgid ""
"Please use your browser 'Back' button <strong>now</strong> if you are "
"uncertain what to do on this page."
msgstr "Пожалуйста, нажмите клавишу вашего браузера 'Back' или 'Назад' <strong>сейчас</strong>, если вы не уверены, что делаете на этой странице."
msgstr ""
"Пожалуйста, нажмите клавишу вашего браузера 'Back' или 'Назад' "
"<strong>сейчас</strong>, если вы не уверены, что делаете на этой странице."
#: ../../mod/crepair.php:148
msgid "Return to contact editor"
msgstr "Возврат к редактору контакта"
#: ../../mod/crepair.php:159 ../../mod/crepair.php:161
#: mod/crepair.php:151 mod/crepair.php:153
msgid "No mirroring"
msgstr ""
#: ../../mod/crepair.php:159
#: mod/crepair.php:151
msgid "Mirror as forwarded posting"
msgstr ""
#: ../../mod/crepair.php:159 ../../mod/crepair.php:161
#: mod/crepair.php:151 mod/crepair.php:153
msgid "Mirror as my own posting"
msgstr ""
#: ../../mod/crepair.php:165 ../../mod/admin.php:1003 ../../mod/admin.php:1015
#: ../../mod/admin.php:1016 ../../mod/admin.php:1029
#: ../../mod/settings.php:616 ../../mod/settings.php:642
#: mod/crepair.php:167
msgid "Return to contact editor"
msgstr "Возврат к редактору контакта"
#: mod/crepair.php:169
msgid "Refetch contact data"
msgstr ""
#: mod/crepair.php:170 mod/admin.php:1306 mod/admin.php:1318
#: mod/admin.php:1319 mod/admin.php:1332 mod/settings.php:661
#: mod/settings.php:687
msgid "Name"
msgstr "Имя"
#: ../../mod/crepair.php:166
#: mod/crepair.php:171
msgid "Account Nickname"
msgstr "Ник аккаунта"
#: ../../mod/crepair.php:167
#: mod/crepair.php:172
msgid "@Tagname - overrides Name/Nickname"
msgstr ""
#: ../../mod/crepair.php:168
#: mod/crepair.php:173
msgid "Account URL"
msgstr "URL аккаунта"
#: ../../mod/crepair.php:169
#: mod/crepair.php:174
msgid "Friend Request URL"
msgstr "URL запроса в друзья"
#: ../../mod/crepair.php:170
#: mod/crepair.php:175
msgid "Friend Confirm URL"
msgstr "URL подтверждения друга"
#: ../../mod/crepair.php:171
#: mod/crepair.php:176
msgid "Notification Endpoint URL"
msgstr "URL эндпоинта уведомления"
#: ../../mod/crepair.php:172
#: mod/crepair.php:177
msgid "Poll/Feed URL"
msgstr "URL опроса/ленты"
#: ../../mod/crepair.php:173
#: mod/crepair.php:178
msgid "New photo from this URL"
msgstr "Новое фото из этой URL"
#: ../../mod/crepair.php:174
#: mod/crepair.php:179
msgid "Remote Self"
msgstr ""
#: ../../mod/crepair.php:176
#: mod/crepair.php:182
msgid "Mirror postings from this contact"
msgstr ""
#: ../../mod/crepair.php:176
#: mod/crepair.php:184
msgid ""
"Mark this contact as remote_self, this will cause friendica to repost new "
"entries from this contact."
msgstr ""
#: ../../mod/bookmarklet.php:12 ../../boot.php:1266 ../../include/nav.php:92
#: mod/bookmarklet.php:12 boot.php:1430 include/nav.php:91
msgid "Login"
msgstr "Вход"
#: ../../mod/bookmarklet.php:41
#: mod/bookmarklet.php:41
msgid "The post was created"
msgstr ""
#: ../../mod/viewsrc.php:7
#: mod/viewsrc.php:7
msgid "Access denied."
msgstr "Доступ запрещен."
#: ../../mod/dirfind.php:26
msgid "People Search"
msgstr "Поиск людей"
#: mod/dirfind.php:194 mod/allfriends.php:80 mod/match.php:85
#: mod/suggest.php:98 include/contact_widgets.php:10 include/identity.php:212
msgid "Connect"
msgstr "Подключить"
#: ../../mod/dirfind.php:60 ../../mod/match.php:65
#: mod/dirfind.php:195 mod/allfriends.php:64 mod/match.php:70
#: mod/directory.php:162 mod/suggest.php:81 include/Contact.php:283
#: include/Contact.php:296 include/Contact.php:338
#: include/conversation.php:912 include/conversation.php:926
msgid "View Profile"
msgstr "Просмотреть профиль"
#: mod/dirfind.php:224
#, php-format
msgid "People Search - %s"
msgstr ""
#: mod/dirfind.php:231 mod/match.php:105
msgid "No matches"
msgstr "Нет соответствий"
#: ../../mod/fbrowser.php:25 ../../boot.php:2126 ../../include/nav.php:78
#: ../../view/theme/diabook/theme.php:126
#: mod/fbrowser.php:32 include/identity.php:702 include/nav.php:77
#: view/theme/diabook/theme.php:126
msgid "Photos"
msgstr "Фото"
#: ../../mod/fbrowser.php:113
#: mod/fbrowser.php:41 mod/fbrowser.php:62 mod/photos.php:62
#: mod/photos.php:192 mod/photos.php:1119 mod/photos.php:1245
#: mod/photos.php:1268 mod/photos.php:1838 mod/photos.php:1850
#: view/theme/diabook/theme.php:499
msgid "Contact Photos"
msgstr "Фотографии контакта"
#: mod/fbrowser.php:125
msgid "Files"
msgstr "Файлы"
#: ../../mod/nogroup.php:59
#: mod/nogroup.php:63
msgid "Contacts who are not members of a group"
msgstr "Контакты, которые не являются членами группы"
#: ../../mod/admin.php:57
#: mod/admin.php:92
msgid "Theme settings updated."
msgstr "Настройки темы обновлены."
#: ../../mod/admin.php:104 ../../mod/admin.php:619
#: mod/admin.php:156 mod/admin.php:888
msgid "Site"
msgstr "Сайт"
#: ../../mod/admin.php:105 ../../mod/admin.php:998 ../../mod/admin.php:1013
#: mod/admin.php:157 mod/admin.php:832 mod/admin.php:1301 mod/admin.php:1316
msgid "Users"
msgstr "Пользователи"
#: ../../mod/admin.php:106 ../../mod/admin.php:1102 ../../mod/admin.php:1155
#: ../../mod/settings.php:57
#: mod/admin.php:158 mod/admin.php:1416 mod/admin.php:1476 mod/settings.php:72
msgid "Plugins"
msgstr "Плагины"
#: ../../mod/admin.php:107 ../../mod/admin.php:1323 ../../mod/admin.php:1357
#: mod/admin.php:159 mod/admin.php:1674 mod/admin.php:1724
msgid "Themes"
msgstr "Темы"
#: ../../mod/admin.php:108
#: mod/admin.php:160 mod/settings.php:50
msgid "Additional features"
msgstr "Дополнительные возможности"
#: mod/admin.php:161
msgid "DB updates"
msgstr "Обновление БД"
#: ../../mod/admin.php:123 ../../mod/admin.php:132 ../../mod/admin.php:1444
#: mod/admin.php:162 mod/admin.php:385
msgid "Inspect Queue"
msgstr ""
#: mod/admin.php:163 mod/admin.php:354
msgid "Federation Statistics"
msgstr ""
#: mod/admin.php:177 mod/admin.php:188 mod/admin.php:1792
msgid "Logs"
msgstr "Журналы"
#: ../../mod/admin.php:124
#: mod/admin.php:178 mod/admin.php:1859
msgid "View Logs"
msgstr "Просмотр логов"
#: mod/admin.php:179
msgid "probe address"
msgstr ""
#: ../../mod/admin.php:125
#: mod/admin.php:180
msgid "check webfinger"
msgstr ""
#: ../../mod/admin.php:130 ../../include/nav.php:184
#: mod/admin.php:186 include/nav.php:194
msgid "Admin"
msgstr "Администратор"
#: ../../mod/admin.php:131
#: mod/admin.php:187
msgid "Plugin Features"
msgstr "Возможности плагина"
#: ../../mod/admin.php:133
#: mod/admin.php:189
msgid "diagnostics"
msgstr ""
msgstr "Диагностика"
#: ../../mod/admin.php:134
#: mod/admin.php:190
msgid "User registrations waiting for confirmation"
msgstr "Регистрации пользователей, ожидающие подтверждения"
#: ../../mod/admin.php:193 ../../mod/admin.php:952
msgid "Normal Account"
msgstr "Обычный аккаунт"
#: mod/admin.php:347
msgid ""
"This page offers you some numbers to the known part of the federated social "
"network your Friendica node is part of. These numbers are not complete but "
"only reflect the part of the network your node is aware of."
msgstr ""
#: ../../mod/admin.php:194 ../../mod/admin.php:953
msgid "Soapbox Account"
msgstr "Аккаунт Витрина"
#: mod/admin.php:348
msgid ""
"The <em>Auto Discovered Contact Directory</em> feature is not enabled, it "
"will improve the data displayed here."
msgstr ""
#: ../../mod/admin.php:195 ../../mod/admin.php:954
msgid "Community/Celebrity Account"
msgstr "Аккаунт Сообщество / Знаменитость"
#: ../../mod/admin.php:196 ../../mod/admin.php:955
msgid "Automatic Friend Account"
msgstr "\"Автоматический друг\" Аккаунт"
#: ../../mod/admin.php:197
msgid "Blog Account"
msgstr "Аккаунт блога"
#: ../../mod/admin.php:198
msgid "Private Forum"
msgstr "Личный форум"
#: ../../mod/admin.php:217
msgid "Message queues"
msgstr "Очереди сообщений"
#: ../../mod/admin.php:222 ../../mod/admin.php:618 ../../mod/admin.php:997
#: ../../mod/admin.php:1101 ../../mod/admin.php:1154 ../../mod/admin.php:1322
#: ../../mod/admin.php:1356 ../../mod/admin.php:1443
#: mod/admin.php:353 mod/admin.php:384 mod/admin.php:441 mod/admin.php:887
#: mod/admin.php:1300 mod/admin.php:1415 mod/admin.php:1475 mod/admin.php:1673
#: mod/admin.php:1723 mod/admin.php:1791 mod/admin.php:1858
msgid "Administration"
msgstr "Администрация"
#: ../../mod/admin.php:223
#: mod/admin.php:360
#, php-format
msgid "Currently this node is aware of %d nodes from the following platforms:"
msgstr ""
#: mod/admin.php:387
msgid "ID"
msgstr ""
#: mod/admin.php:388
msgid "Recipient Name"
msgstr ""
#: mod/admin.php:389
msgid "Recipient Profile"
msgstr ""
#: mod/admin.php:391
msgid "Created"
msgstr ""
#: mod/admin.php:392
msgid "Last Tried"
msgstr ""
#: mod/admin.php:393
msgid ""
"This page lists the content of the queue for outgoing postings. These are "
"postings the initial delivery failed for. They will be resend later and "
"eventually deleted if the delivery fails permanently."
msgstr ""
#: mod/admin.php:412 mod/admin.php:1254
msgid "Normal Account"
msgstr "Обычный аккаунт"
#: mod/admin.php:413 mod/admin.php:1255
msgid "Soapbox Account"
msgstr "Аккаунт Витрина"
#: mod/admin.php:414 mod/admin.php:1256
msgid "Community/Celebrity Account"
msgstr "Аккаунт Сообщество / Знаменитость"
#: mod/admin.php:415 mod/admin.php:1257
msgid "Automatic Friend Account"
msgstr "\"Автоматический друг\" Аккаунт"
#: mod/admin.php:416
msgid "Blog Account"
msgstr "Аккаунт блога"
#: mod/admin.php:417
msgid "Private Forum"
msgstr "Личный форум"
#: mod/admin.php:436
msgid "Message queues"
msgstr "Очереди сообщений"
#: mod/admin.php:442
msgid "Summary"
msgstr "Резюме"
#: ../../mod/admin.php:225
#: mod/admin.php:444
msgid "Registered users"
msgstr "Зарегистрированные пользователи"
#: ../../mod/admin.php:227
#: mod/admin.php:446
msgid "Pending registrations"
msgstr "Ожидающие регистрации"
#: ../../mod/admin.php:228
#: mod/admin.php:447
msgid "Version"
msgstr "Версия"
#: ../../mod/admin.php:232
#: mod/admin.php:452
msgid "Active plugins"
msgstr "Активные плагины"
#: ../../mod/admin.php:255
#: mod/admin.php:475
msgid "Can not parse base url. Must have at least <scheme>://<domain>"
msgstr "Невозможно определить базовый URL. Он должен иметь следующий вид - <scheme>://<domain>"
msgstr ""
"Невозможно определить базовый URL. Он должен иметь следующий вид - "
"<scheme>://<domain>"
#: ../../mod/admin.php:516
#: mod/admin.php:760
msgid "RINO2 needs mcrypt php extension to work."
msgstr "Для функционирования RINO2 необходим пакет php5-mcrypt"
#: mod/admin.php:768
msgid "Site settings updated."
msgstr "Установки сайта обновлены."
#: ../../mod/admin.php:545 ../../mod/settings.php:828
#: mod/admin.php:796 mod/settings.php:912
msgid "No special theme for mobile devices"
msgstr "Нет специальной темы для мобильных устройств"
#: ../../mod/admin.php:562
#: mod/admin.php:815
msgid "No community page"
msgstr ""
#: ../../mod/admin.php:563
#: mod/admin.php:816
msgid "Public postings from users of this site"
msgstr ""
#: ../../mod/admin.php:564
#: mod/admin.php:817
msgid "Global community page"
msgstr ""
#: ../../mod/admin.php:570
#: mod/admin.php:823
msgid "At post arrival"
msgstr ""
#: ../../mod/admin.php:571 ../../include/contact_selectors.php:56
#: mod/admin.php:824 include/contact_selectors.php:56
msgid "Frequently"
msgstr "Часто"
#: ../../mod/admin.php:572 ../../include/contact_selectors.php:57
#: mod/admin.php:825 include/contact_selectors.php:57
msgid "Hourly"
msgstr "Раз в час"
#: ../../mod/admin.php:573 ../../include/contact_selectors.php:58
#: mod/admin.php:826 include/contact_selectors.php:58
msgid "Twice daily"
msgstr "Два раза в день"
#: ../../mod/admin.php:574 ../../include/contact_selectors.php:59
#: mod/admin.php:827 include/contact_selectors.php:59
msgid "Daily"
msgstr "Ежедневно"
#: ../../mod/admin.php:579
#: mod/admin.php:833
msgid "Users, Global Contacts"
msgstr ""
#: mod/admin.php:834
msgid "Users, Global Contacts/fallback"
msgstr ""
#: mod/admin.php:838
msgid "One month"
msgstr "Один месяц"
#: mod/admin.php:839
msgid "Three months"
msgstr "Три месяца"
#: mod/admin.php:840
msgid "Half a year"
msgstr "Пол года"
#: mod/admin.php:841
msgid "One year"
msgstr "Один год"
#: mod/admin.php:846
msgid "Multi user instance"
msgstr "Многопользовательский вид"
#: ../../mod/admin.php:602
#: mod/admin.php:869
msgid "Closed"
msgstr "Закрыто"
#: ../../mod/admin.php:603
#: mod/admin.php:870
msgid "Requires approval"
msgstr "Требуется подтверждение"
#: ../../mod/admin.php:604
#: mod/admin.php:871
msgid "Open"
msgstr "Открыто"
#: ../../mod/admin.php:608
#: mod/admin.php:875
msgid "No SSL policy, links will track page SSL state"
msgstr "Нет режима SSL, состояние SSL не будет отслеживаться"
#: ../../mod/admin.php:609
#: mod/admin.php:876
msgid "Force all links to use SSL"
msgstr "Заставить все ссылки использовать SSL"
#: ../../mod/admin.php:610
#: mod/admin.php:877
msgid "Self-signed certificate, use SSL for local links only (discouraged)"
msgstr "Само-подписанный сертификат, использовать SSL только локально (не рекомендуется)"
msgstr ""
"Само-подписанный сертификат, использовать SSL только локально (не "
"рекомендуется)"
#: ../../mod/admin.php:620 ../../mod/admin.php:1156 ../../mod/admin.php:1358
#: ../../mod/admin.php:1445 ../../mod/settings.php:614
#: ../../mod/settings.php:724 ../../mod/settings.php:798
#: ../../mod/settings.php:880 ../../mod/settings.php:1113
#: mod/admin.php:889 mod/admin.php:1477 mod/admin.php:1725 mod/admin.php:1793
#: mod/admin.php:1942 mod/settings.php:659 mod/settings.php:769
#: mod/settings.php:813 mod/settings.php:882 mod/settings.php:969
#: mod/settings.php:1204
msgid "Save Settings"
msgstr "Сохранить настройки"
#: ../../mod/admin.php:621 ../../mod/register.php:255
#: mod/admin.php:890 mod/register.php:263
msgid "Registration"
msgstr "Регистрация"
#: ../../mod/admin.php:622
#: mod/admin.php:891
msgid "File upload"
msgstr "Загрузка файлов"
#: ../../mod/admin.php:623
#: mod/admin.php:892
msgid "Policies"
msgstr "Политики"
#: ../../mod/admin.php:624
#: mod/admin.php:893
msgid "Advanced"
msgstr "Расширенный"
#: ../../mod/admin.php:625
#: mod/admin.php:894
msgid "Auto Discovered Contact Directory"
msgstr ""
#: mod/admin.php:895
msgid "Performance"
msgstr "Производительность"
#: ../../mod/admin.php:626
#: mod/admin.php:896
msgid ""
"Relocate - WARNING: advanced function. Could make this server unreachable."
msgstr "Переместить - ПРЕДУПРЕЖДЕНИЕ: расширеная функция. Может сделать этот сервер недоступным."
msgstr ""
"Переместить - ПРЕДУПРЕЖДЕНИЕ: расширеная функция. Может сделать этот сервер "
"недоступным."
#: ../../mod/admin.php:629
#: mod/admin.php:899
msgid "Site name"
msgstr "Название сайта"
#: ../../mod/admin.php:630
#: mod/admin.php:900
msgid "Host name"
msgstr ""
msgstr "Имя хоста"
#: ../../mod/admin.php:631
#: mod/admin.php:901
msgid "Sender Email"
msgstr ""
msgstr "Системный Email"
#: ../../mod/admin.php:632
#: mod/admin.php:901
msgid ""
"The email address your server shall use to send notification emails from."
msgstr "Адрес с которого будут приходить письма пользователям."
#: mod/admin.php:902
msgid "Banner/Logo"
msgstr "Баннер/Логотип"
#: ../../mod/admin.php:633
#: mod/admin.php:903
msgid "Shortcut icon"
msgstr ""
#: ../../mod/admin.php:634
#: mod/admin.php:903
msgid "Link to an icon that will be used for browsers."
msgstr ""
#: mod/admin.php:904
msgid "Touch icon"
msgstr ""
#: ../../mod/admin.php:635
#: mod/admin.php:904
msgid "Link to an icon that will be used for tablets and mobiles."
msgstr ""
#: mod/admin.php:905
msgid "Additional Info"
msgstr "Дополнительная информация"
#: ../../mod/admin.php:635
#: mod/admin.php:905
#, php-format
msgid ""
"For public servers: you can add additional information here that will be "
"listed at dir.friendica.com/siteinfo."
msgstr "Для публичных серверов: вы можете добавить дополнительную информацию, которая будет перечислена в dir.friendica.com/siteinfo."
"listed at %s/siteinfo."
msgstr ""
#: ../../mod/admin.php:636
#: mod/admin.php:906
msgid "System language"
msgstr "Системный язык"
#: ../../mod/admin.php:637
#: mod/admin.php:907
msgid "System theme"
msgstr "Системная тема"
#: ../../mod/admin.php:637
#: mod/admin.php:907
msgid ""
"Default system theme - may be over-ridden by user profiles - <a href='#' "
"id='cnftheme'>change theme settings</a>"
msgstr "Тема системы по умолчанию - может быть переопределена пользователем - <a href='#' id='cnftheme'>изменить настройки темы</a>"
msgstr ""
"Тема системы по умолчанию - может быть переопределена пользователем - <a "
"href='#' id='cnftheme'>изменить настройки темы</a>"
#: ../../mod/admin.php:638
#: mod/admin.php:908
msgid "Mobile system theme"
msgstr "Мобильная тема системы"
#: ../../mod/admin.php:638
#: mod/admin.php:908
msgid "Theme for mobile devices"
msgstr "Тема для мобильных устройств"
#: ../../mod/admin.php:639
#: mod/admin.php:909
msgid "SSL link policy"
msgstr "Политика SSL"
#: ../../mod/admin.php:639
#: mod/admin.php:909
msgid "Determines whether generated links should be forced to use SSL"
msgstr "Ссылки должны быть вынуждены использовать SSL"
#: ../../mod/admin.php:640
#: mod/admin.php:910
msgid "Force SSL"
msgstr ""
msgstr "SSL принудительно"
#: ../../mod/admin.php:640
#: mod/admin.php:910
msgid ""
"Force all Non-SSL requests to SSL - Attention: on some systems it could lead"
" to endless loops."
"Force all Non-SSL requests to SSL - Attention: on some systems it could lead "
"to endless loops."
msgstr ""
#: ../../mod/admin.php:641
#: mod/admin.php:911
msgid "Old style 'Share'"
msgstr "Старый стиль 'Share'"
#: ../../mod/admin.php:641
#: mod/admin.php:911
msgid "Deactivates the bbcode element 'share' for repeating items."
msgstr "Отключение BBCode элемента 'share' для повторяющихся элементов."
#: ../../mod/admin.php:642
#: mod/admin.php:912
msgid "Hide help entry from navigation menu"
msgstr "Скрыть пункт \"помощь\" в меню навигации"
#: ../../mod/admin.php:642
#: mod/admin.php:912
msgid ""
"Hides the menu entry for the Help pages from the navigation menu. You can "
"still access it calling /help directly."
msgstr "Скрывает элемент меню для страницы справки из меню навигации. Вы все еще можете получить доступ к нему через вызов/помощь напрямую."
msgstr ""
"Скрывает элемент меню для страницы справки из меню навигации. Вы все еще "
"можете получить доступ к нему через вызов/помощь напрямую."
#: ../../mod/admin.php:643
#: mod/admin.php:913
msgid "Single user instance"
msgstr "Однопользовательский режим"
#: ../../mod/admin.php:643
#: mod/admin.php:913
msgid "Make this instance multi-user or single-user for the named user"
msgstr "Сделать этот экземпляр многопользовательским, или однопользовательским для названного пользователя"
msgstr ""
"Сделать этот экземпляр многопользовательским, или однопользовательским для "
"названного пользователя"
#: ../../mod/admin.php:644
#: mod/admin.php:914
msgid "Maximum image size"
msgstr "Максимальный размер изображения"
#: ../../mod/admin.php:644
#: mod/admin.php:914
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
msgstr "Максимальный размер в байтах для загружаемых изображений. По умолчанию 0, что означает отсутствие ограничений."
msgstr ""
"Максимальный размер в байтах для загружаемых изображений. По умолчанию 0, "
"что означает отсутствие ограничений."
#: ../../mod/admin.php:645
#: mod/admin.php:915
msgid "Maximum image length"
msgstr "Максимальная длина картинки"
#: ../../mod/admin.php:645
#: mod/admin.php:915
msgid ""
"Maximum length in pixels of the longest side of uploaded images. Default is "
"-1, which means no limits."
msgstr "Максимальная длина в пикселях для длинной стороны загруженных изображений. По умолчанию равно -1, что означает отсутствие ограничений."
msgstr ""
"Максимальная длина в пикселях для длинной стороны загруженных изображений. "
"По умолчанию равно -1, что означает отсутствие ограничений."
#: ../../mod/admin.php:646
#: mod/admin.php:916
msgid "JPEG image quality"
msgstr "Качество JPEG изображения"
#: ../../mod/admin.php:646
#: mod/admin.php:916
msgid ""
"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
"100, which is full quality."
msgstr "Загруженные изображения JPEG будут сохранены в этом качестве [0-100]. По умолчанию 100, что означает полное качество."
msgstr ""
"Загруженные изображения JPEG будут сохранены в этом качестве [0-100]. По "
"умолчанию 100, что означает полное качество."
#: ../../mod/admin.php:648
#: mod/admin.php:918
msgid "Register policy"
msgstr "Политика регистрация"
#: ../../mod/admin.php:649
#: mod/admin.php:919
msgid "Maximum Daily Registrations"
msgstr "Максимальное число регистраций в день"
#: ../../mod/admin.php:649
#: mod/admin.php:919
msgid ""
"If registration is permitted above, this sets the maximum number of new user"
" registrations to accept per day. If register is set to closed, this "
"setting has no effect."
msgstr "Если регистрация разрешена, этот параметр устанавливает максимальное количество новых регистраций пользователей в день. Если регистрация закрыта, эта опция не имеет никакого эффекта."
"If registration is permitted above, this sets the maximum number of new user "
"registrations to accept per day. If register is set to closed, this setting "
"has no effect."
msgstr ""
"Если регистрация разрешена, этот параметр устанавливает максимальное "
"количество новых регистраций пользователей в день. Если регистрация закрыта, "
"эта опция не имеет никакого эффекта."
#: ../../mod/admin.php:650
#: mod/admin.php:920
msgid "Register text"
msgstr "Текст регистрации"
#: ../../mod/admin.php:650
#: mod/admin.php:920
msgid "Will be displayed prominently on the registration page."
msgstr "Будет находиться на видном месте на странице регистрации."
#: ../../mod/admin.php:651
#: mod/admin.php:921
msgid "Accounts abandoned after x days"
msgstr "Аккаунт считается после x дней не воспользованным"
#: ../../mod/admin.php:651
#: mod/admin.php:921
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
msgstr "Не будет тратить ресурсы для опроса сайтов для бесхозных контактов. Введите 0 для отключения лимита времени."
msgstr ""
"Не будет тратить ресурсы для опроса сайтов для бесхозных контактов. Введите "
"0 для отключения лимита времени."
#: ../../mod/admin.php:652
#: mod/admin.php:922
msgid "Allowed friend domains"
msgstr "Разрешенные домены друзей"
#: ../../mod/admin.php:652
#: mod/admin.php:922
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr "Разделенный запятыми список доменов, которые разрешены для установления связей. Групповые символы принимаются. Оставьте пустым для разрешения связи со всеми доменами."
msgstr ""
"Разделенный запятыми список доменов, которые разрешены для установления "
"связей. Групповые символы принимаются. Оставьте пустым для разрешения связи "
"со всеми доменами."
#: ../../mod/admin.php:653
#: mod/admin.php:923
msgid "Allowed email domains"
msgstr "Разрешенные почтовые домены"
#: ../../mod/admin.php:653
#: mod/admin.php:923
msgid ""
"Comma separated list of domains which are allowed in email addresses for "
"registrations to this site. Wildcards are accepted. Empty to allow any "
"domains"
msgstr "Разделенный запятыми список доменов, которые разрешены для установления связей. Групповые символы принимаются. Оставьте пустым для разрешения связи со всеми доменами."
msgstr ""
"Разделенный запятыми список доменов, которые разрешены для установления "
"связей. Групповые символы принимаются. Оставьте пустым для разрешения связи "
"со всеми доменами."
#: ../../mod/admin.php:654
#: mod/admin.php:924
msgid "Block public"
msgstr "Блокировать общественный доступ"
#: ../../mod/admin.php:654
#: mod/admin.php:924
msgid ""
"Check to block public access to all otherwise public personal pages on this "
"site unless you are currently logged in."
msgstr "Отметьте, чтобы заблокировать публичный доступ ко всем иным публичным персональным страницам на этом сайте, если вы не вошли на сайт."
msgstr ""
"Отметьте, чтобы заблокировать публичный доступ ко всем иным публичным "
"персональным страницам на этом сайте, если вы не вошли на сайт."
#: ../../mod/admin.php:655
#: mod/admin.php:925
msgid "Force publish"
msgstr "Принудительная публикация"
#: ../../mod/admin.php:655
#: mod/admin.php:925
msgid ""
"Check to force all profiles on this site to be listed in the site directory."
msgstr "Отметьте, чтобы принудительно заставить все профили на этом сайте, быть перечислеными в каталоге сайта."
msgstr ""
"Отметьте, чтобы принудительно заставить все профили на этом сайте, быть "
"перечислеными в каталоге сайта."
#: ../../mod/admin.php:656
msgid "Global directory update URL"
msgstr "URL обновления глобального каталога"
#: mod/admin.php:926
msgid "Global directory URL"
msgstr ""
#: ../../mod/admin.php:656
#: mod/admin.php:926
msgid ""
"URL to update the global directory. If this is not set, the global directory"
" is completely unavailable to the application."
msgstr "URL для обновления глобального каталога. Если он не установлен, глобальный каталог полностью недоступен для приложения."
"URL to the global directory. If this is not set, the global directory is "
"completely unavailable to the application."
msgstr ""
#: ../../mod/admin.php:657
#: mod/admin.php:927
msgid "Allow threaded items"
msgstr "Разрешить темы в обсуждении"
#: ../../mod/admin.php:657
#: mod/admin.php:927
msgid "Allow infinite level threading for items on this site."
msgstr "Разрешить бесконечный уровень для тем на этом сайте."
#: ../../mod/admin.php:658
#: mod/admin.php:928
msgid "Private posts by default for new users"
msgstr "Частные сообщения по умолчанию для новых пользователей"
#: ../../mod/admin.php:658
#: mod/admin.php:928
msgid ""
"Set default post permissions for all new members to the default privacy "
"group rather than public."
msgstr "Установить права на создание постов по умолчанию для всех участников в дефолтной приватной группе, а не для публичных участников."
msgstr ""
"Установить права на создание постов по умолчанию для всех участников в "
"дефолтной приватной группе, а не для публичных участников."
#: ../../mod/admin.php:659
#: mod/admin.php:929
msgid "Don't include post content in email notifications"
msgstr "Не включать текст сообщения в email-оповещение."
#: ../../mod/admin.php:659
#: mod/admin.php:929
msgid ""
"Don't include the content of a post/comment/private message/etc. in the "
"email notifications that are sent out from this site, as a privacy measure."
msgstr "Не включать содержание сообщения/комментария/личного сообщения и т.д.. в уведомления электронной почты, отправленных с сайта, в качестве меры конфиденциальности."
msgstr ""
"Не включать содержание сообщения/комментария/личного сообщения и т.д.. в "
"уведомления электронной почты, отправленных с сайта, в качестве меры "
"конфиденциальности."
#: ../../mod/admin.php:660
#: mod/admin.php:930
msgid "Disallow public access to addons listed in the apps menu."
msgstr "Запретить публичный доступ к аддонам, перечисленным в меню приложений."
#: ../../mod/admin.php:660
#: mod/admin.php:930
msgid ""
"Checking this box will restrict addons listed in the apps menu to members "
"only."
msgstr "При установке этого флажка, будут ограничены аддоны, перечисленные в меню приложений, только для участников."
msgstr ""
"При установке этого флажка, будут ограничены аддоны, перечисленные в меню "
"приложений, только для участников."
#: ../../mod/admin.php:661
#: mod/admin.php:931
msgid "Don't embed private images in posts"
msgstr "Не вставлять личные картинки в постах"
#: ../../mod/admin.php:661
#: mod/admin.php:931
msgid ""
"Don't replace locally-hosted private photos in posts with an embedded copy "
"of the image. This means that contacts who receive posts containing private "
"photos will have to authenticate and load each image, which may take a "
"while."
msgstr "Не заменяйте локально расположенные фотографии в постах на внедрённые копии изображений. Это означает, что контакты, которые получают сообщения, содержащие личные фотографии, будут вынуждены идентефицироваться и грузить каждое изображение, что может занять некоторое время."
"photos will have to authenticate and load each image, which may take a while."
msgstr ""
"Не заменяйте локально расположенные фотографии в постах на внедрённые копии "
"изображений. Это означает, что контакты, которые получают сообщения, "
"содержащие личные фотографии, будут вынуждены идентефицироваться и грузить "
"каждое изображение, что может занять некоторое время."
#: ../../mod/admin.php:662
#: mod/admin.php:932
msgid "Allow Users to set remote_self"
msgstr "Разрешить пользователям установить remote_self"
#: ../../mod/admin.php:662
#: mod/admin.php:932
msgid ""
"With checking this, every user is allowed to mark every contact as a "
"remote_self in the repair contact dialog. Setting this flag on a contact "
"causes mirroring every posting of that contact in the users stream."
msgstr ""
#: ../../mod/admin.php:663
#: mod/admin.php:933
msgid "Block multiple registrations"
msgstr "Блокировать множественные регистрации"
#: ../../mod/admin.php:663
#: mod/admin.php:933
msgid "Disallow users to register additional accounts for use as pages."
msgstr "Запретить пользователям регистрировать дополнительные аккаунты для использования в качестве страниц."
msgstr ""
"Запретить пользователям регистрировать дополнительные аккаунты для "
"использования в качестве страниц."
#: ../../mod/admin.php:664
#: mod/admin.php:934
msgid "OpenID support"
msgstr "Поддержка OpenID"
#: ../../mod/admin.php:664
#: mod/admin.php:934
msgid "OpenID support for registration and logins."
msgstr "OpenID поддержка для регистрации и входа в систему."
#: ../../mod/admin.php:665
#: mod/admin.php:935
msgid "Fullname check"
msgstr "Проверка полного имени"
#: ../../mod/admin.php:665
#: mod/admin.php:935
msgid ""
"Force users to register with a space between firstname and lastname in Full "
"name, as an antispam measure"
msgstr "Принудить пользователей регистрироваться с пробелом между именем и фамилией в строке \"полное имя\". Антиспам мера."
msgstr ""
"Принудить пользователей регистрироваться с пробелом между именем и фамилией "
"в строке \"полное имя\". Антиспам мера."
#: ../../mod/admin.php:666
#: mod/admin.php:936
msgid "UTF-8 Regular expressions"
msgstr "UTF-8 регулярные выражения"
#: ../../mod/admin.php:666
#: mod/admin.php:936
msgid "Use PHP UTF8 regular expressions"
msgstr "Используйте PHP UTF-8 для регулярных выражений"
#: ../../mod/admin.php:667
#: mod/admin.php:937
msgid "Community Page Style"
msgstr ""
#: ../../mod/admin.php:667
#: mod/admin.php:937
msgid ""
"Type of community page to show. 'Global community' shows every public "
"posting from an open distributed network that arrived on this server."
msgstr ""
#: ../../mod/admin.php:668
#: mod/admin.php:938
msgid "Posts per user on community page"
msgstr ""
#: ../../mod/admin.php:668
#: mod/admin.php:938
msgid ""
"The maximum number of posts per user on the community page. (Not valid for "
"'Global Community')"
msgstr ""
#: ../../mod/admin.php:669
#: mod/admin.php:939
msgid "Enable OStatus support"
msgstr "Включить поддержку OStatus"
#: ../../mod/admin.php:669
#: mod/admin.php:939
msgid ""
"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All "
"communications in OStatus are public, so privacy warnings will be "
"occasionally displayed."
msgstr ""
#: ../../mod/admin.php:670
#: mod/admin.php:940
msgid "OStatus conversation completion interval"
msgstr ""
#: ../../mod/admin.php:670
#: mod/admin.php:940
msgid ""
"How often shall the poller check for new entries in OStatus conversations? "
"This can be a very ressource task."