diff options
author | zotlabs <mike@macgirvin.com> | 2017-03-05 11:02:19 -0800 |
---|---|---|
committer | zotlabs <mike@macgirvin.com> | 2017-03-05 11:02:19 -0800 |
commit | 384db9d10dbded64e83564daa4c51dac05674a2b (patch) | |
tree | 9f878ae892650ac124f073b129190d9801c3e4a8 | |
parent | b2ea61ea3e389cd3ca36a656e6165fb3500035e5 (diff) | |
parent | 5d8b0acc167a8028d3476ba468223da8c6f1a276 (diff) | |
download | volse-hubzilla-384db9d10dbded64e83564daa4c51dac05674a2b.tar.gz volse-hubzilla-384db9d10dbded64e83564daa4c51dac05674a2b.tar.bz2 volse-hubzilla-384db9d10dbded64e83564daa4c51dac05674a2b.zip |
Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge
22 files changed, 5247 insertions, 4756 deletions
diff --git a/composer.json b/composer.json index d977987eb..b59c81bba 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,8 @@ "ext-xml" : "*", "ext-openssl" : "*", "sabre/dav" : "~3.2", - "michelf/php-markdown" : "^1.7" + "michelf/php-markdown" : "^1.7", + "pixel418/markdownify": "^2.2" }, "require-dev" : { "php" : ">=5.6", diff --git a/composer.lock b/composer.lock index cf348bdae..06fb17410 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "4b24468c1f8babe7c8804fba8ee602f7", + "content-hash": "c0cafbf9fd702be588f6b392b9742cb6", "packages": [ { "name": "michelf/php-markdown", @@ -58,6 +58,62 @@ "time": "2016-10-29T18:58:20+00:00" }, { + "name": "pixel418/markdownify", + "version": "v2.2.1", + "source": { + "type": "git", + "url": "https://github.com/Elephant418/Markdownify.git", + "reference": "0160677f04c784550dd10fd72fdf3994967db848" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Elephant418/Markdownify/zipball/0160677f04c784550dd10fd72fdf3994967db848", + "reference": "0160677f04c784550dd10fd72fdf3994967db848", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "type": "lib", + "autoload": { + "psr-4": { + "Markdownify\\": "src", + "Test\\Markdownify\\": "test" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Peter Kruithof", + "email": "pkruithof@gmail.com", + "homepage": "http://pkruithof.tumblr.com/" + }, + { + "name": "Milian Wolff", + "email": "mail@milianw.de", + "homepage": "http://milianw.de" + }, + { + "name": "Thomas Zilliox", + "email": "hello@tzi.fr", + "homepage": "http://tzi.fr" + } + ], + "description": "The HTML to Markdown converter for PHP ", + "homepage": "https://github.com/elephant418/Markdownify", + "keywords": [ + "markdown", + "markdownify" + ], + "time": "2016-09-21T13:01:43+00:00" + }, + { "name": "psr/log", "version": "1.0.2", "source": { diff --git a/include/markdown.php b/include/markdown.php index 43d973808..7e1f1c42c 100644 --- a/include/markdown.php +++ b/include/markdown.php @@ -5,12 +5,12 @@ */ use Michelf\MarkdownExtra; +use Markdownify\Converter; require_once("include/oembed.php"); require_once("include/event.php"); require_once("include/html2bbcode.php"); require_once("include/bbcode.php"); -require_once("library/markdownify/markdownify.php"); function get_bb_tag_pos($s, $name, $occurance = 1) { @@ -367,7 +367,6 @@ function bb2diaspora_itemwallwall(&$item,$uplink = false) { function bb2diaspora_itembody($item, $force_update = false, $have_channel = false, $uplink = false) { - if(! get_iconfig($item,'diaspora','fields')) { $force_update = true; } @@ -454,7 +453,7 @@ function bb2diaspora_itembody($item, $force_update = false, $have_channel = fals return html_entity_decode($body); } -function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { +function bb2diaspora($Text, $preserve_nl = false, $fordiaspora = true) { // Re-enabling the converter again. // The bbcode parser now handles youtube-links (and the other stuff) correctly. @@ -496,11 +495,10 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { $Text = str_replace(array('<','>','&'),array('&_lt_;','&_gt_;','&_amp_;'),$Text); // Now convert HTML to Markdown - $md = new Markdownify(false, false, false); + $md = new Converter(Converter::LINK_AFTER_CONTENT, false, false); $Text = $md->parseString($Text); - // It also adds backslashes to our attempt at getting around the html entity preservation for some weird reason. $Text = str_replace(array('&\\_lt\\_;','&\\_gt\\_;','&\\_amp\\_;'),array('<','>','&'),$Text); @@ -522,7 +520,7 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { $Text = trim($Text); - call_hooks('bb2diaspora',$Text); + call_hooks('bb2diaspora', $Text); return $Text; } diff --git a/library/markdownify/TODO b/library/markdownify/TODO deleted file mode 100644 index 06ec8508b..000000000 --- a/library/markdownify/TODO +++ /dev/null @@ -1,29 +0,0 @@ -Markdownify -=========== -* handle non-markdownifiable lists (i.e. `<ul><li id="foobar">asdf</li></ul>`) -* organize methods better (i.e. flushlinebreaks & setlinebreaks close to each other) -* take a look at function names etc. -* is the new (in rev. 93) lastclosedtag property needed? -* word wrapping (some work is done but it's still very buggy) - - -Markdownify Extra -================= - -* handle table alignment with KEEP_HTML=false -* handle tables without headings when KEEP_HTML=false is set -* handle Markdown inside non-markdownable tags - - -Implementation Thoughts -======================= -* non-markdownifiable lists and markdown inside non-markdownable tags as well as the current - table implementation could be rewritten by using a rollback mechanism. - - example: - - <ul><li>asdf</li><li id="foobar">asdf</li></ul> - - we come to `<ul>`, know that this might fail and create a snapshot of our current parser - we keep on parsing and when we reach `<li id="foobar">` we gotta rollback and keep this - list in HTML format. diff --git a/library/markdownify/example.php b/library/markdownify/example.php deleted file mode 100644 index ef86dca83..000000000 --- a/library/markdownify/example.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php - error_reporting(E_ALL); - if (!empty($_POST['input'])) { - include 'markdownify_extra.php'; - if (!isset($_POST['leap'])) { - $leap = MDFY_LINKS_EACH_PARAGRAPH; - } else { - $leap = $_POST['leap']; - } - - if (!isset($_POST['keepHTML'])) { - $keephtml = MDFY_KEEPHTML; - } else { - $keephtml = $_POST['keepHTML']; - } - if (!empty($_POST['extra'])) { - $md = new Markdownify_Extra($leap, MDFY_BODYWIDTH, $keephtml); - } else { - $md = new Markdownify($leap, MDFY_BODYWIDTH, $keephtml); - } - if (ini_get('magic_quotes_gpc')) { - $_POST['input'] = stripslashes($_POST['input']); - } - $output = $md->parseString($_POST['input']); - } else { - $_POST['input'] = ''; - } -?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> - <title>HTML to Markdown Converter</title> - </head> - <body> - <?php if (empty($_POST['input'])): ?> - <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> - <fieldset> - <legend>HTML Input</legend> - <textarea style="width:100%;" cols="85" rows="40" name="input"><?php echo htmlspecialchars($_POST['input'], ENT_NOQUOTES, 'UTF-8'); ?></textarea> - </fieldset> - <label for="extra">Markdownify Extra: <input name="extra" checked="checked" id="extra" type="checkbox" value="1" /></label> - <label for="leap">Links after each block elem: <input name="leap" id="leap" type="checkbox" value="1" /></label> - <label for="keepHTML">keep HTML: <input name="keepHTML" id="keepHTML" type="checkbox" value="1" checked="checked" /></label> - <input type="submit" name="submit" value="submit" /> - </form> - <?php else: ?> - <h1 style="text-align:right;"><a href="<?php echo $_SERVER['PHP_SELF']; ?>">BACK</a></h1> - <pre><?php echo htmlspecialchars($output, ENT_NOQUOTES, 'UTF-8'); ?></pre> - <?php endif; ?> - </body> -</html>
\ No newline at end of file diff --git a/library/markdownify/markdownify.php b/library/markdownify/markdownify.php deleted file mode 100644 index 0d4429a01..000000000 --- a/library/markdownify/markdownify.php +++ /dev/null @@ -1,1197 +0,0 @@ -<?php -/** - * Markdownify converts HTML Markup to [Markdown][1] (by [John Gruber][2]. It - * also supports [Markdown Extra][3] by [Michel Fortin][4] via Markdownify_Extra. - * - * It all started as `html2text.php` - a port of [Aaron Swartz'][5] [`html2text.py`][6] - but - * got a long way since. This is far more than a mere port now! - * Starting with version 2.0.0 this is a complete rewrite and cannot be - * compared to Aaron Swatz' `html2text.py` anylonger. I'm now using a HTML parser - * (see `parsehtml.php` which I also wrote) which makes most of the evil - * RegEx magic go away and additionally it gives a much cleaner class - * structure. Also notably is the fact that I now try to prevent regressions by - * utilizing testcases of Michel Fortin's [MDTest][7]. - * - * [1]: http://daringfireball.com/projects/markdown - * [2]: http://daringfireball.com/ - * [3]: http://www.michelf.com/projects/php-markdown/extra/ - * [4]: http://www.michelf.com/ - * [5]: http://www.aaronsw.com/ - * [6]: http://www.aaronsw.com/2002/html2text/ - * [7]: http://article.gmane.org/gmane.text.markdown.general/2540 - * - * @version 2.0.0 alpha - * @author Milian Wolff (<mail@milianw.de>, <http://milianw.de>) - * @license LGPL, see LICENSE_LGPL.txt and the summary below - * @copyright (C) 2007 Milian Wolff - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * HTML Parser, see http://sf.net/projects/parseHTML - */ -require_once dirname(__FILE__).'/parsehtml/parsehtml.php'; - -/** - * default configuration - */ -define('MDFY_LINKS_EACH_PARAGRAPH', false); -define('MDFY_BODYWIDTH', false); -define('MDFY_KEEPHTML', true); - -/** - * HTML to Markdown converter class - */ -class Markdownify { - /** - * html parser object - * - * @var parseHTML - */ - var $parser; - /** - * markdown output - * - * @var string - */ - var $output; - /** - * stack with tags which where not converted to html - * - * @var array<string> - */ - var $notConverted = array(); - /** - * skip conversion to markdown - * - * @var bool - */ - var $skipConversion = false; - /* options */ - /** - * keep html tags which cannot be converted to markdown - * - * @var bool - */ - var $keepHTML = false; - /** - * wrap output, set to 0 to skip wrapping - * - * @var int - */ - var $bodyWidth = 0; - /** - * minimum body width - * - * @var int - */ - var $minBodyWidth = 25; - /** - * display links after each paragraph - * - * @var bool - */ - var $linksAfterEachParagraph = false; - /** - * constructor, set options, setup parser - * - * @param bool $linksAfterEachParagraph wether or not to flush stacked links after each paragraph - * defaults to false - * @param int $bodyWidth wether or not to wrap the output to the given width - * defaults to false - * @param bool $keepHTML wether to keep non markdownable HTML or to discard it - * defaults to true (HTML will be kept) - * @return void - */ - function Markdownify($linksAfterEachParagraph = MDFY_LINKS_EACH_PARAGRAPH, $bodyWidth = MDFY_BODYWIDTH, $keepHTML = MDFY_KEEPHTML) { - $this->linksAfterEachParagraph = $linksAfterEachParagraph; - $this->keepHTML = $keepHTML; - - if ($bodyWidth > $this->minBodyWidth) { - $this->bodyWidth = intval($bodyWidth); - } else { - $this->bodyWidth = false; - } - - $this->parser = new parseHTML; - $this->parser->noTagsInCode = true; - - # we don't have to do this every time - $search = array(); - $replace = array(); - foreach ($this->escapeInText as $s => $r) { - array_push($search, '#(?<!\\\)'.$s.'#U'); - array_push($replace, $r); - } - $this->escapeInText = array( - 'search' => $search, - 'replace' => $replace - ); - } - /** - * parse a HTML string - * - * @param string $html - * @return string markdown formatted - */ - function parseString($html) { - $this->parser->html = $html; - $this->parse(); - return $this->output; - } - /** - * tags with elements which can be handled by markdown - * - * @var array<string> - */ - var $isMarkdownable = array( - 'p' => array(), - 'ul' => array(), - 'ol' => array(), - 'li' => array(), - 'br' => array(), - 'blockquote' => array(), - 'code' => array(), - 'pre' => array(), - 'a' => array( - 'href' => 'required', - 'title' => 'optional', - ), - 'strong' => array(), - 'b' => array(), - 'em' => array(), - 'i' => array(), - 'img' => array( - 'src' => 'required', - 'alt' => 'optional', - 'title' => 'optional', - ), - 'h1' => array(), - 'h2' => array(), - 'h3' => array(), - 'h4' => array(), - 'h5' => array(), - 'h6' => array(), - 'hr' => array(), - ); - /** - * html tags to be ignored (contents will be parsed) - * - * @var array<string> - */ - var $ignore = array( - 'html', - 'body', - ); - /** - * html tags to be dropped (contents will not be parsed!) - * - * @var array<string> - */ - var $drop = array( - 'script', - 'head', - 'style', - 'form', - 'area', - 'object', - 'param', - 'iframe', - ); - /** - * Markdown indents which could be wrapped - * @note: use strings in regex format - * - * @var array<string> - */ - var $wrappableIndents = array( - '\* ', # ul - '\d. ', # ol - '\d\d. ', # ol - '> ', # blockquote - '', # p - ); - /** - * list of chars which have to be escaped in normal text - * @note: use strings in regex format - * - * @var array - * - * TODO: what's with block chars / sequences at the beginning of a block? - */ - var $escapeInText = array( - '([-*_])([ ]{0,2}\1){2,}' => '\\\\$0|', # hr - '\*\*([^*\s]+)\*\*' => '\*\*$1\*\*', # strong - '\*([^*\s]+)\*' => '\*$1\*', # em - '__(?! |_)(.+)(?!<_| )__' => '\_\_$1\_\_', # em - '_(?! |_)(.+)(?!<_| )_' => '\_$1\_', # em - '`(.+)`' => '\`$1\`', # code - '\[(.+)\](\s*\()' => '\[$1\]$2', # links: [text] (url) => [text\] (url) - '\[(.+)\](\s*)\[(.*)\]' => '\[$1\]$2\[$3\]', # links: [text][id] => [text\][id\] - ); - /** - * wether last processed node was a block tag or not - * - * @var bool - */ - var $lastWasBlockTag = false; - /** - * name of last closed tag - * - * @var string - */ - var $lastClosedTag = ''; - /** - * iterate through the nodes and decide what we - * shall do with the current node - * - * @param void - * @return void - */ - function parse() { - $this->output = ''; - # drop tags - $this->parser->html = preg_replace('#<('.implode('|', $this->drop).')[^>]*>.*</\\1>#sU', '', $this->parser->html); - while ($this->parser->nextNode()) { - switch ($this->parser->nodeType) { - case 'doctype': - break; - case 'pi': - case 'comment': - if ($this->keepHTML) { - $this->flushLinebreaks(); - $this->out($this->parser->node); - $this->setLineBreaks(2); - } - # else drop - break; - case 'text': - $this->handleText(); - break; - case 'tag': - if (in_array($this->parser->tagName, $this->ignore)) { - break; - } - if ($this->parser->isStartTag) { - $this->flushLinebreaks(); - } - if ($this->skipConversion) { - $this->isMarkdownable(); # update notConverted - $this->handleTagToText(); - continue; - } - if (!$this->parser->keepWhitespace && $this->parser->isBlockElement && $this->parser->isStartTag) { - $this->parser->html = ltrim($this->parser->html); - } - if ($this->isMarkdownable()) { - if ($this->parser->isBlockElement && $this->parser->isStartTag && !$this->lastWasBlockTag && !empty($this->output)) { - if (!empty($this->buffer)) { - $str =& $this->buffer[count($this->buffer) -1]; - } else { - $str =& $this->output; - } - if (substr($str, -strlen($this->indent)-1) != "\n".$this->indent) { - $str .= "\n".$this->indent; - } - } - $func = 'handleTag_'.$this->parser->tagName; - $this->$func(); - if ($this->linksAfterEachParagraph && $this->parser->isBlockElement && !$this->parser->isStartTag && empty($this->parser->openTags)) { - $this->flushStacked(); - } - if (!$this->parser->isStartTag) { - $this->lastClosedTag = $this->parser->tagName; - } - } else { - $this->handleTagToText(); - $this->lastClosedTag = ''; - } - break; - default: - trigger_error('invalid node type', E_USER_ERROR); - break; - } - $this->lastWasBlockTag = $this->parser->nodeType == 'tag' && $this->parser->isStartTag && $this->parser->isBlockElement; - } - if (!empty($this->buffer)) { - trigger_error('buffer was not flushed, this is a bug. please report!', E_USER_WARNING); - while (!empty($this->buffer)) { - $this->out($this->unbuffer()); - } - } - ### cleanup - $this->output = rtrim(str_replace('&', '&', str_replace('<', '<', str_replace('>', '>', $this->output)))); - # end parsing, flush stacked tags - $this->flushStacked(); - $this->stack = array(); - } - /** - * check if current tag can be converted to Markdown - * - * @param void - * @return bool - */ - function isMarkdownable() { - if (!isset($this->isMarkdownable[$this->parser->tagName])) { - # simply not markdownable - return false; - } - if ($this->parser->isStartTag) { - $return = true; - if ($this->keepHTML) { - $diff = array_diff(array_keys($this->parser->tagAttributes), array_keys($this->isMarkdownable[$this->parser->tagName])); - if (!empty($diff)) { - # non markdownable attributes given - $return = false; - } - } - if ($return) { - foreach ($this->isMarkdownable[$this->parser->tagName] as $attr => $type) { - if ($type == 'required' && !isset($this->parser->tagAttributes[$attr])) { - # required markdown attribute not given - $return = false; - break; - } - } - } - if (!$return) { - array_push($this->notConverted, $this->parser->tagName.'::'.implode('/', $this->parser->openTags)); - } - return $return; - } else { - if (!empty($this->notConverted) && end($this->notConverted) === $this->parser->tagName.'::'.implode('/', $this->parser->openTags)) { - array_pop($this->notConverted); - return false; - } - return true; - } - } - /** - * output all stacked tags - * - * @param void - * @return void - */ - function flushStacked() { - # links - foreach ($this->stack as $tag => $a) { - if (!empty($a)) { - call_user_func(array(&$this, 'flushStacked_'.$tag)); - } - } - } - /** - * output link references (e.g. [1]: http://example.com "title"); - * - * @param void - * @return void - */ - function flushStacked_a() { - $out = false; - foreach ($this->stack['a'] as $k => $tag) { - if (!isset($tag['unstacked'])) { - if (!$out) { - $out = true; - $this->out("\n\n", true); - } else { - $this->out("\n", true); - } - $this->out(' ['.$tag['linkID'].']: '.$tag['href'].(isset($tag['title']) ? ' "'.$tag['title'].'"' : ''), true); - $tag['unstacked'] = true; - $this->stack['a'][$k] = $tag; - } - } - } - /** - * flush enqued linebreaks - * - * @param void - * @return void - */ - function flushLinebreaks() { - if ($this->lineBreaks && !empty($this->output)) { - $this->out(str_repeat("\n".$this->indent, $this->lineBreaks), true); - } - $this->lineBreaks = 0; - } - /** - * handle non Markdownable tags - * - * @param void - * @return void - */ - function handleTagToText() { - if (!$this->keepHTML) { - if (!$this->parser->isStartTag && $this->parser->isBlockElement) { - $this->setLineBreaks(2); - } - } else { - # dont convert to markdown inside this tag - /** TODO: markdown extra **/ - if (!$this->parser->isEmptyTag) { - if ($this->parser->isStartTag) { - if (!$this->skipConversion) { - $this->skipConversion = $this->parser->tagName.'::'.implode('/', $this->parser->openTags); - } - } else { - if ($this->skipConversion == $this->parser->tagName.'::'.implode('/', $this->parser->openTags)) { - $this->skipConversion = false; - } - } - } - - if ($this->parser->isBlockElement) { - if ($this->parser->isStartTag) { - if (in_array($this->parent(), array('ins', 'del'))) { - # looks like ins or del are block elements now - $this->out("\n", true); - $this->indent(' '); - } - if ($this->parser->tagName != 'pre') { - $this->out($this->parser->node."\n".$this->indent); - if (!$this->parser->isEmptyTag) { - $this->indent(' '); - } else { - $this->setLineBreaks(1); - } - $this->parser->html = ltrim($this->parser->html); - } else { - # don't indent inside <pre> tags - $this->out($this->parser->node); - static $indent; - $indent = $this->indent; - $this->indent = ''; - } - } else { - if (!$this->parser->keepWhitespace) { - $this->output = rtrim($this->output); - } - if ($this->parser->tagName != 'pre') { - $this->indent(' '); - $this->out("\n".$this->indent.$this->parser->node); - } else { - # reset indentation - $this->out($this->parser->node); - static $indent; - $this->indent = $indent; - } - - if (in_array($this->parent(), array('ins', 'del'))) { - # ins or del was block element - $this->out("\n"); - $this->indent(' '); - } - if ($this->parser->tagName == 'li') { - $this->setLineBreaks(1); - } else { - $this->setLineBreaks(2); - } - } - } else { - $this->out($this->parser->node); - } - if (in_array($this->parser->tagName, array('code', 'pre'))) { - if ($this->parser->isStartTag) { - $this->buffer(); - } else { - # add stuff so cleanup just reverses this - $this->out(str_replace('<', '&lt;', str_replace('>', '&gt;', $this->unbuffer()))); - } - } - } - } - /** - * handle plain text - * - * @param void - * @return void - */ - function handleText() { - if ($this->hasParent('pre') && strpos($this->parser->node, "\n") !== false) { - $this->parser->node = str_replace("\n", "\n".$this->indent, $this->parser->node); - } - if (!$this->hasParent('code') && !$this->hasParent('pre')) { - # entity decode - $this->parser->node = $this->decode($this->parser->node); - if (!$this->skipConversion) { - # escape some chars in normal Text - $this->parser->node = preg_replace($this->escapeInText['search'], $this->escapeInText['replace'], $this->parser->node); - } - } else { - $this->parser->node = str_replace(array('"', '&apos'), array('"', '\''), $this->parser->node); - } - $this->out($this->parser->node); - $this->lastClosedTag = ''; - } - /** - * handle <em> and <i> tags - * - * @param void - * @return void - */ - function handleTag_em() { - $this->out('*', true); - } - function handleTag_i() { - $this->handleTag_em(); - } - /** - * handle <strong> and <b> tags - * - * @param void - * @return void - */ - function handleTag_strong() { - $this->out('**', true); - } - function handleTag_b() { - $this->handleTag_strong(); - } - /** - * handle <h1> tags - * - * @param void - * @return void - */ - function handleTag_h1() { - $this->handleHeader(1); - } - /** - * handle <h2> tags - * - * @param void - * @return void - */ - function handleTag_h2() { - $this->handleHeader(2); - } - /** - * handle <h3> tags - * - * @param void - * @return void - */ - function handleTag_h3() { - $this->handleHeader(3); - } - /** - * handle <h4> tags - * - * @param void - * @return void - */ - function handleTag_h4() { - $this->handleHeader(4); - } - /** - * handle <h5> tags - * - * @param void - * @return void - */ - function handleTag_h5() { - $this->handleHeader(5); - } - /** - * handle <h6> tags - * - * @param void - * @return void - */ - function handleTag_h6() { - $this->handleHeader(6); - } - /** - * number of line breaks before next inline output - */ - var $lineBreaks = 0; - /** - * handle header tags (<h1> - <h6>) - * - * @param int $level 1-6 - * @return void - */ - function handleHeader($level) { - if ($this->parser->isStartTag) { - $this->out(str_repeat('#', $level).' ', true); - } else { - $this->setLineBreaks(2); - } - } - /** - * handle <p> tags - * - * @param void - * @return void - */ - function handleTag_p() { - if (!$this->parser->isStartTag) { - $this->setLineBreaks(2); - } - } - /** - * handle <a> tags - * - * @param void - * @return void - */ - function handleTag_a() { - if ($this->parser->isStartTag) { - $this->buffer(); - if (isset($this->parser->tagAttributes['title'])) { - $this->parser->tagAttributes['title'] = $this->decode($this->parser->tagAttributes['title']); - } else { - $this->parser->tagAttributes['title'] = null; - } - $this->parser->tagAttributes['href'] = $this->decode(trim($this->parser->tagAttributes['href'])); - $this->stack(); - } else { - $tag = $this->unstack(); - $buffer = $this->unbuffer(); - - if (empty($tag['href']) && empty($tag['title'])) { - # empty links... testcase mania, who would possibly do anything like that?! - $this->out('['.$buffer.']()', true); - return; - } - - if ($buffer == $tag['href'] && empty($tag['title'])) { - # <http://example.com> - $this->out('<'.$buffer.'>', true); - return; - } - - $bufferDecoded = $this->decode(trim($buffer)); - if (substr($tag['href'], 0, 7) == 'mailto:' && 'mailto:'.$bufferDecoded == $tag['href']) { - if (is_null($tag['title'])) { - # <mail@example.com> - $this->out('<'.$bufferDecoded.'>', true); - return; - } - # [mail@example.com][1] - # ... - # [1]: mailto:mail@example.com Title - $tag['href'] = 'mailto:'.$bufferDecoded; - } - - $this->out('['.$buffer.']('.$tag['href'].' "'.$tag['title'].'")', true); - -/* - # [This link][id] - foreach ($this->stack['a'] as $tag2) { - if ($tag2['href'] == $tag['href'] && $tag2['title'] === $tag['title']) { - $tag['linkID'] = $tag2['linkID']; - break; - } - } - if (!isset($tag['linkID'])) { - $tag['linkID'] = count($this->stack['a']) + 1; - array_push($this->stack['a'], $tag); - } - - $this->out('['.$buffer.']['.$tag['linkID'].']', true); -*/ - } - } - /** - * handle <img /> tags - * - * @param void - * @return void - */ - function handleTag_img() { - if (!$this->parser->isStartTag) { - return; # just to be sure this is really an empty tag... - } - - if (isset($this->parser->tagAttributes['title'])) { - $this->parser->tagAttributes['title'] = $this->decode($this->parser->tagAttributes['title']); - } else { - $this->parser->tagAttributes['title'] = null; - } - if (isset($this->parser->tagAttributes['alt'])) { - $this->parser->tagAttributes['alt'] = $this->decode($this->parser->tagAttributes['alt']); - } else { - $this->parser->tagAttributes['alt'] = null; - } - - if (empty($this->parser->tagAttributes['src'])) { - # support for "empty" images... dunno if this is really needed - # but there are some testcases which do that... - if (!empty($this->parser->tagAttributes['title'])) { - $this->parser->tagAttributes['title'] = ' '.$this->parser->tagAttributes['title'].' '; - } - $this->out('!['.$this->parser->tagAttributes['alt'].']('.$this->parser->tagAttributes['title'].')', true); - return; - } else { - $this->parser->tagAttributes['src'] = $this->decode($this->parser->tagAttributes['src']); - } - -// ![Alt text](/path/to/img.jpg "Optional title") - if ($this->parser->tagAttributes['title'] != "") - $this->out('!['.$this->parser->tagAttributes['alt'].']('.$this->parser->tagAttributes['src'].' "'.$this->parser->tagAttributes['title'].'")', true); - else - $this->out('!['.$this->parser->tagAttributes['alt'].']('.$this->parser->tagAttributes['src'].')', true); - -/* - # [This link][id] - $link_id = false; - if (!empty($this->stack['a'])) { - foreach ($this->stack['a'] as $tag) { - if ($tag['href'] == $this->parser->tagAttributes['src'] - && $tag['title'] === $this->parser->tagAttributes['title']) { - $link_id = $tag['linkID']; - break; - } - } - } else { - $this->stack['a'] = array(); - } - if (!$link_id) { - $link_id = count($this->stack['a']) + 1; - $tag = array( - 'href' => $this->parser->tagAttributes['src'], - 'linkID' => $link_id, - 'title' => $this->parser->tagAttributes['title'] - ); - array_push($this->stack['a'], $tag); - } - - $this->out('!['.$this->parser->tagAttributes['alt'].']['.$link_id.']', true); -*/ - } - /** - * handle <code> tags - * - * @param void - * @return void - */ - function handleTag_code() { - if ($this->hasParent('pre')) { - # ignore code blocks inside <pre> - return; - } - if ($this->parser->isStartTag) { - $this->buffer(); - } else { - $buffer = $this->unbuffer(); - # use as many backticks as needed - preg_match_all('#`+#', $buffer, $matches); - if (!empty($matches[0])) { - rsort($matches[0]); - - $ticks = '`'; - while (true) { - if (!in_array($ticks, $matches[0])) { - break; - } - $ticks .= '`'; - } - } else { - $ticks = '`'; - } - if ($buffer[0] == '`' || substr($buffer, -1) == '`') { - $buffer = ' '.$buffer.' '; - } - $this->out($ticks.$buffer.$ticks, true); - } - } - /** - * handle <pre> tags - * - * @param void - * @return void - */ - function handleTag_pre() { - if ($this->keepHTML && $this->parser->isStartTag) { - # check if a simple <code> follows - if (!preg_match('#^\s*<code\s*>#Us', $this->parser->html)) { - # this is no standard markdown code block - $this->handleTagToText(); - return; - } - } - $this->indent(' '); - if (!$this->parser->isStartTag) { - $this->setLineBreaks(2); - } else { - $this->parser->html = ltrim($this->parser->html); - } - } - /** - * handle <blockquote> tags - * - * @param void - * @return void - */ - function handleTag_blockquote() { - $this->indent('> '); - } - /** - * handle <ul> tags - * - * @param void - * @return void - */ - function handleTag_ul() { - if ($this->parser->isStartTag) { - $this->stack(); - if (!$this->keepHTML && $this->lastClosedTag == $this->parser->tagName) { - $this->out("\n".$this->indent.'<!-- -->'."\n".$this->indent."\n".$this->indent); - } - } else { - $this->unstack(); - if ($this->parent() != 'li' || preg_match('#^\s*(</li\s*>\s*<li\s*>\s*)?<(p|blockquote)\s*>#sU', $this->parser->html)) { - # dont make Markdown add unneeded paragraphs - $this->setLineBreaks(2); - } - } - } - /** - * handle <ul> tags - * - * @param void - * @return void - */ - function handleTag_ol() { - # same as above - $this->parser->tagAttributes['num'] = 0; - $this->handleTag_ul(); - } - /** - * handle <li> tags - * - * @param void - * @return void - */ - function handleTag_li() { - if ($this->parent() == 'ol') { - $parent =& $this->getStacked('ol'); - if ($this->parser->isStartTag) { - $parent['num']++; - $this->out($parent['num'].'.'.str_repeat(' ', 3 - strlen($parent['num'])), true); - } - $this->indent(' ', false); - } else { - if ($this->parser->isStartTag) { - $this->out('* ', true); - } - $this->indent(' ', false); - } - if (!$this->parser->isStartTag) { - $this->setLineBreaks(1); - } - } - /** - * handle <hr /> tags - * - * @param void - * @return void - */ - function handleTag_hr() { - if (!$this->parser->isStartTag) { - return; # just to be sure this really is an empty tag - } - $this->out('* * *', true); - $this->setLineBreaks(2); - } - /** - * handle <br /> tags - * - * @param void - * @return void - */ - function handleTag_br() { - $this->out(" \n".$this->indent, true); - $this->parser->html = ltrim($this->parser->html); - } - /** - * node stack, e.g. for <a> and <abbr> tags - * - * @var array<array> - */ - var $stack = array(); - /** - * add current node to the stack - * this only stores the attributes - * - * @param void - * @return void - */ - function stack() { - if (!isset($this->stack[$this->parser->tagName])) { - $this->stack[$this->parser->tagName] = array(); - } - array_push($this->stack[$this->parser->tagName], $this->parser->tagAttributes); - } - /** - * remove current tag from stack - * - * @param void - * @return array - */ - function unstack() { - if (!isset($this->stack[$this->parser->tagName]) || !is_array($this->stack[$this->parser->tagName])) { - trigger_error('Trying to unstack from empty stack. This must not happen.', E_USER_ERROR); - } - return array_pop($this->stack[$this->parser->tagName]); - } - /** - * get last stacked element of type $tagName - * - * @param string $tagName - * @return array - */ - function & getStacked($tagName) { - // no end() so it can be referenced - return $this->stack[$tagName][count($this->stack[$tagName])-1]; - } - /** - * set number of line breaks before next start tag - * - * @param int $number - * @return void - */ - function setLineBreaks($number) { - if ($this->lineBreaks < $number) { - $this->lineBreaks = $number; - } - } - /** - * stores current buffers - * - * @var array<string> - */ - var $buffer = array(); - /** - * buffer next parser output until unbuffer() is called - * - * @param void - * @return void - */ - function buffer() { - array_push($this->buffer, ''); - } - /** - * end current buffer and return buffered output - * - * @param void - * @return string - */ - function unbuffer() { - return array_pop($this->buffer); - } - /** - * append string to the correct var, either - * directly to $this->output or to the current - * buffers - * - * @param string $put - * @return void - */ - function out($put, $nowrap = false) { - if (empty($put)) { - return; - } - if (!empty($this->buffer)) { - $this->buffer[count($this->buffer) - 1] .= $put; - } else { - if ($this->bodyWidth && !$this->parser->keepWhitespace) { # wrap lines - // get last line - $pos = strrpos($this->output, "\n"); - if ($pos === false) { - $line = $this->output; - } else { - $line = substr($this->output, $pos); - } - - if ($nowrap) { - if ($put[0] != "\n" && $this->strlen($line) + $this->strlen($put) > $this->bodyWidth) { - $this->output .= "\n".$this->indent.$put; - } else { - $this->output .= $put; - } - return; - } else { - $put .= "\n"; # make sure we get all lines in the while below - $lineLen = $this->strlen($line); - while ($pos = strpos($put, "\n")) { - $putLine = substr($put, 0, $pos+1); - $put = substr($put, $pos+1); - $putLen = $this->strlen($putLine); - if ($lineLen + $putLen < $this->bodyWidth) { - $this->output .= $putLine; - $lineLen = $putLen; - } else { - $split = preg_split('#^(.{0,'.($this->bodyWidth - $lineLen).'})\b#', $putLine, 2, PREG_SPLIT_OFFSET_CAPTURE | PREG_SPLIT_DELIM_CAPTURE); - $this->output .= rtrim($split[1][0])."\n".$this->indent.$this->wordwrap(ltrim($split[2][0]), $this->bodyWidth, "\n".$this->indent, false); - } - } - $this->output = substr($this->output, 0, -1); - return; - } - } else { - $this->output .= $put; - } - } - } - /** - * current indentation - * - * @var string - */ - var $indent = ''; - /** - * indent next output (start tag) or unindent (end tag) - * - * @param string $str indentation - * @param bool $output add indendation to output - * @return void - */ - function indent($str, $output = true) { - if ($this->parser->isStartTag) { - $this->indent .= $str; - if ($output) { - $this->out($str, true); - } - } else { - $this->indent = substr($this->indent, 0, -strlen($str)); - } - } - /** - * decode email addresses - * - * @author derernst@gmx.ch <http://www.php.net/manual/en/function.html-entity-decode.php#68536> - * @author Milian Wolff <http://milianw.de> - */ - function decode($text, $quote_style = ENT_QUOTES) { - if (version_compare(PHP_VERSION, '5', '>=')) { - # UTF-8 is only supported in PHP 5.x.x and above - $text = html_entity_decode($text, $quote_style, 'UTF-8'); - } else { - if (function_exists('html_entity_decode')) { - $text = html_entity_decode($text, $quote_style, 'ISO-8859-1'); - } else { - static $trans_tbl; - if (!isset($trans_tbl)) { - $trans_tbl = array_flip(get_html_translation_table(HTML_ENTITIES, $quote_style)); - } - $text = strtr($text, $trans_tbl); - } - $text = preg_replace_callback('~&#x([0-9a-f]+);~i', array(&$this, '_decode_hex'), $text); - $text = preg_replace_callback('~&#(\d{2,5});~', array(&$this, '_decode_numeric'), $text); - } - return $text; - } - /** - * callback for decode() which converts a hexadecimal entity to UTF-8 - * - * @param array $matches - * @return string UTF-8 encoded - */ - function _decode_hex($matches) { - return $this->unichr(hexdec($matches[1])); - } - /** - * callback for decode() which converts a numerical entity to UTF-8 - * - * @param array $matches - * @return string UTF-8 encoded - */ - function _decode_numeric($matches) { - return $this->unichr($matches[1]); - } - /** - * UTF-8 chr() which supports numeric entities - * - * @author grey - greywyvern - com <http://www.php.net/manual/en/function.chr.php#55978> - * @param array $matches - * @return string UTF-8 encoded - */ - function unichr($dec) { - if ($dec < 128) { - $utf = chr($dec); - } else if ($dec < 2048) { - $utf = chr(192 + (($dec - ($dec % 64)) / 64)); - $utf .= chr(128 + ($dec % 64)); - } else { - $utf = chr(224 + (($dec - ($dec % 4096)) / 4096)); - $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64)); - $utf .= chr(128 + ($dec % 64)); - } - return $utf; - } - /** - * UTF-8 strlen() - * - * @param string $str - * @return int - * - * @author dtorop 932 at hotmail dot com <http://www.php.net/manual/en/function.strlen.php#37975> - * @author Milian Wolff <http://milianw.de> - */ - function strlen($str) { - if (function_exists('mb_strlen')) { - return mb_strlen($str, 'UTF-8'); - } else { - return preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $var_empty); - } - } - /** - * wordwrap for utf8 encoded strings - * - * @param string $str - * @param integer $len - * @param string $what - * @return string - */ - function wordwrap($str, $width, $break, $cut = false){ - if (!$cut) { - $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){1,'.$width.'}\b#'; - } else { - $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.'}#'; - } - $return = ''; - while (preg_match($regexp, $str, $matches)) { - $string = $matches[0]; - $str = ltrim(substr($str, strlen($string))); - if (!$cut && isset($str[0]) && in_array($str[0], array('.', '!', ';', ':', '?', ','))) { - $string .= $str[0]; - $str = ltrim(substr($str, 1)); - } - $return .= $string.$break; - } - return $return.ltrim($str); - } - /** - * check if current node has a $tagName as parent (somewhere, not only the direct parent) - * - * @param string $tagName - * @return bool - */ - function hasParent($tagName) { - return in_array($tagName, $this->parser->openTags); - } - /** - * get tagName of direct parent tag - * - * @param void - * @return string $tagName - */ - function parent() { - return end($this->parser->openTags); - } -} diff --git a/library/markdownify/markdownify_cli.php b/library/markdownify/markdownify_cli.php deleted file mode 100755 index b3fffbd5c..000000000 --- a/library/markdownify/markdownify_cli.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/php -<?php -require dirname(__FILE__) .'/markdownify_extra.php'; - -function param($name, $default = false) { - if (!in_array('--'.$name, $_SERVER['argv'])) - return $default; - reset($_SERVER['argv']); - while (each($_SERVER['argv'])) { - if (current($_SERVER['argv']) == '--'.$name) - break; - } - $value = next($_SERVER['argv']); - if ($value === false || substr($value, 0, 2) == '--') - return true; - else - return $value; -} - - -$input = stream_get_contents(STDIN); - -$linksAfterEachParagraph = param('links'); -$bodyWidth = param('width'); -$keepHTML = param('html', true); - -if (param('no_extra')) { - $parser = new Markdownify($linksAfterEachParagraph, $bodyWidth, $keepHTML); -} else { - $parser = new Markdownify_Extra($linksAfterEachParagraph, $bodyWidth, $keepHTML); -} - -echo $parser->parseString($input) ."\n";
\ No newline at end of file diff --git a/library/markdownify/markdownify_extra.php b/library/markdownify/markdownify_extra.php deleted file mode 100644 index e978a1c8a..000000000 --- a/library/markdownify/markdownify_extra.php +++ /dev/null @@ -1,489 +0,0 @@ -<?php -/** - * Class to convert HTML to Markdown with PHP Markdown Extra syntax support. - * - * @version 1.0.0 alpha - * @author Milian Wolff (<mail@milianw.de>, <http://milianw.de>) - * @license LGPL, see LICENSE_LGPL.txt and the summary below - * @copyright (C) 2007 Milian Wolff - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * standard Markdownify class - */ -require_once dirname(__FILE__).'/markdownify.php'; - -class Markdownify_Extra extends Markdownify { - /** - * table data, including rows with content and the maximum width of each col - * - * @var array - */ - var $table = array(); - /** - * current col - * - * @var int - */ - var $col = -1; - /** - * current row - * - * @var int - */ - var $row = 0; - /** - * constructor, see Markdownify::Markdownify() for more information - */ - function Markdownify_Extra($linksAfterEachParagraph = MDFY_LINKS_EACH_PARAGRAPH, $bodyWidth = MDFY_BODYWIDTH, $keepHTML = MDFY_KEEPHTML) { - parent::Markdownify($linksAfterEachParagraph, $bodyWidth, $keepHTML); - - ### new markdownable tags & attributes - # header ids: # foo {bar} - $this->isMarkdownable['h1']['id'] = 'optional'; - $this->isMarkdownable['h2']['id'] = 'optional'; - $this->isMarkdownable['h3']['id'] = 'optional'; - $this->isMarkdownable['h4']['id'] = 'optional'; - $this->isMarkdownable['h5']['id'] = 'optional'; - $this->isMarkdownable['h6']['id'] = 'optional'; - # tables - $this->isMarkdownable['table'] = array(); - $this->isMarkdownable['th'] = array( - 'align' => 'optional', - ); - $this->isMarkdownable['td'] = array( - 'align' => 'optional', - ); - $this->isMarkdownable['tr'] = array(); - array_push($this->ignore, 'thead'); - array_push($this->ignore, 'tbody'); - array_push($this->ignore, 'tfoot'); - # definition lists - $this->isMarkdownable['dl'] = array(); - $this->isMarkdownable['dd'] = array(); - $this->isMarkdownable['dt'] = array(); - # footnotes - $this->isMarkdownable['fnref'] = array( - 'target' => 'required', - ); - $this->isMarkdownable['footnotes'] = array(); - $this->isMarkdownable['fn'] = array( - 'name' => 'required', - ); - $this->parser->blockElements['fnref'] = false; - $this->parser->blockElements['fn'] = true; - $this->parser->blockElements['footnotes'] = true; - # abbr - $this->isMarkdownable['abbr'] = array( - 'title' => 'required', - ); - # build RegEx lookahead to decide wether table can pe parsed or not - $inlineTags = array_keys($this->parser->blockElements, false); - $colContents = '(?:[^<]|<(?:'.implode('|', $inlineTags).'|[^a-z]))+'; - $this->tableLookaheadHeader = '{ - ^\s*(?:<thead\s*>)?\s* # open optional thead - <tr\s*>\s*(?: # start required row with headers - <th(?:\s+align=("|\')(?:left|center|right)\1)?\s*> # header with optional align - \s*'.$colContents.'\s* # contents - </th>\s* # close header - )+</tr> # close row with headers - \s*(?:</thead>)? # close optional thead - }sxi'; - $this->tdSubstitute = '\s*'.$colContents.'\s* # contents - </td>\s*'; - $this->tableLookaheadBody = '{ - \s*(?:<tbody\s*>)?\s* # open optional tbody - (?:<tr\s*>\s* # start row - %s # cols to be substituted - </tr>)+ # close row - \s*(?:</tbody>)? # close optional tbody - \s*</table> # close table - }sxi'; - } - /** - * handle header tags (<h1> - <h6>) - * - * @param int $level 1-6 - * @return void - */ - function handleHeader($level) { - static $id = null; - if ($this->parser->isStartTag) { - if (isset($this->parser->tagAttributes['id'])) { - $id = $this->parser->tagAttributes['id']; - } - } else { - if (!is_null($id)) { - $this->out(' {#'.$id.'}'); - $id = null; - } - } - parent::handleHeader($level); - } - /** - * handle <abbr> tags - * - * @param void - * @return void - */ - function handleTag_abbr() { - if ($this->parser->isStartTag) { - $this->stack(); - $this->buffer(); - } else { - $tag = $this->unstack(); - $tag['text'] = $this->unbuffer(); - $add = true; - foreach ($this->stack['abbr'] as $stacked) { - if ($stacked['text'] == $tag['text']) { - /** TODO: differing abbr definitions, i.e. different titles for same text **/ - $add = false; - break; - } - } - $this->out($tag['text']); - if ($add) { - array_push($this->stack['abbr'], $tag); - } - } - } - /** - * flush stacked abbr tags - * - * @param void - * @return void - */ - function flushStacked_abbr() { - $out = array(); - foreach ($this->stack['abbr'] as $k => $tag) { - if (!isset($tag['unstacked'])) { - array_push($out, ' *['.$tag['text'].']: '.$tag['title']); - $tag['unstacked'] = true; - $this->stack['abbr'][$k] = $tag; - } - } - if (!empty($out)) { - $this->out("\n\n".implode("\n", $out)); - } - } - /** - * handle <table> tags - * - * @param void - * @return void - */ - function handleTag_table() { - if ($this->parser->isStartTag) { - # check if upcoming table can be converted - if ($this->keepHTML) { - if (preg_match($this->tableLookaheadHeader, $this->parser->html, $matches)) { - # header seems good, now check body - # get align & number of cols - preg_match_all('#<th(?:\s+align=("|\')(left|right|center)\1)?\s*>#si', $matches[0], $cols); - $regEx = ''; - $i = 1; - $aligns = array(); - foreach ($cols[2] as $align) { - $align = strtolower($align); - array_push($aligns, $align); - if (empty($align)) { - $align = 'left'; # default value - } - $td = '\s+align=("|\')'.$align.'\\'.$i; - $i++; - if ($align == 'left') { - # look for empty align or left - $td = '(?:'.$td.')?'; - } - $td = '<td'.$td.'\s*>'; - $regEx .= $td.$this->tdSubstitute; - } - $regEx = sprintf($this->tableLookaheadBody, $regEx); - if (preg_match($regEx, $this->parser->html, $matches, null, strlen($matches[0]))) { - # this is a markdownable table tag! - $this->table = array( - 'rows' => array(), - 'col_widths' => array(), - 'aligns' => $aligns, - ); - $this->row = 0; - } else { - # non markdownable table - $this->handleTagToText(); - } - } else { - # non markdownable table - $this->handleTagToText(); - } - } else { - $this->table = array( - 'rows' => array(), - 'col_widths' => array(), - 'aligns' => array(), - ); - $this->row = 0; - } - } else { - # finally build the table in Markdown Extra syntax - $separator = array(); - # seperator with correct align identifikators - foreach($this->table['aligns'] as $col => $align) { - if (!$this->keepHTML && !isset($this->table['col_widths'][$col])) { - break; - } - $left = ' '; - $right = ' '; - switch ($align) { - case 'left': - $left = ':'; - break; - case 'center': - $right = ':'; - $left = ':'; - case 'right': - $right = ':'; - break; - } - array_push($separator, $left.str_repeat('-', $this->table['col_widths'][$col]).$right); - } - $separator = '|'.implode('|', $separator).'|'; - - $rows = array(); - # add padding - array_walk_recursive($this->table['rows'], array(&$this, 'alignTdContent')); - $header = array_shift($this->table['rows']); - array_push($rows, '| '.implode(' | ', $header).' |'); - array_push($rows, $separator); - foreach ($this->table['rows'] as $row) { - array_push($rows, '| '.implode(' | ', $row).' |'); - } - $this->out(implode("\n".$this->indent, $rows)); - $this->table = array(); - $this->setLineBreaks(2); - } - } - /** - * properly pad content so it is aligned as whished - * should be used with array_walk_recursive on $this->table['rows'] - * - * @param string &$content - * @param int $col - * @return void - */ - function alignTdContent(&$content, $col) { - switch ($this->table['aligns'][$col]) { - default: - case 'left': - $content .= str_repeat(' ', $this->table['col_widths'][$col] - $this->strlen($content)); - break; - case 'right': - $content = str_repeat(' ', $this->table['col_widths'][$col] - $this->strlen($content)).$content; - break; - case 'center': - $paddingNeeded = $this->table['col_widths'][$col] - $this->strlen($content); - $left = floor($paddingNeeded / 2); - $right = $paddingNeeded - $left; - $content = str_repeat(' ', $left).$content.str_repeat(' ', $right); - break; - } - } - /** - * handle <tr> tags - * - * @param void - * @return void - */ - function handleTag_tr() { - if ($this->parser->isStartTag) { - $this->col = -1; - } else { - $this->row++; - } - } - /** - * handle <td> tags - * - * @param void - * @return void - */ - function handleTag_td() { - if ($this->parser->isStartTag) { - $this->col++; - if (!isset($this->table['col_widths'][$this->col])) { - $this->table['col_widths'][$this->col] = 0; - } - $this->buffer(); - } else { - $buffer = trim($this->unbuffer()); - $this->table['col_widths'][$this->col] = max($this->table['col_widths'][$this->col], $this->strlen($buffer)); - $this->table['rows'][$this->row][$this->col] = $buffer; - } - } - /** - * handle <th> tags - * - * @param void - * @return void - */ - function handleTag_th() { - if (!$this->keepHTML && !isset($this->table['rows'][1]) && !isset($this->table['aligns'][$this->col+1])) { - if (isset($this->parser->tagAttributes['align'])) { - $this->table['aligns'][$this->col+1] = $this->parser->tagAttributes['align']; - } else { - $this->table['aligns'][$this->col+1] = ''; - } - } - $this->handleTag_td(); - } - /** - * handle <dl> tags - * - * @param void - * @return void - */ - function handleTag_dl() { - if (!$this->parser->isStartTag) { - $this->setLineBreaks(2); - } - } - /** - * handle <dt> tags - * - * @param void - * @return void - **/ - function handleTag_dt() { - if (!$this->parser->isStartTag) { - $this->setLineBreaks(1); - } - } - /** - * handle <dd> tags - * - * @param void - * @return void - */ - function handleTag_dd() { - if ($this->parser->isStartTag) { - if (substr(ltrim($this->parser->html), 0, 3) == '<p>') { - # next comes a paragraph, so we'll need an extra line - $this->out("\n".$this->indent); - } elseif (substr($this->output, -2) == "\n\n") { - $this->output = substr($this->output, 0, -1); - } - $this->out(': '); - $this->indent(' ', false); - } else { - # lookahead for next dt - if (substr(ltrim($this->parser->html), 0, 4) == '<dt>') { - $this->setLineBreaks(2); - } else { - $this->setLineBreaks(1); - } - $this->indent(' '); - } - } - /** - * handle <fnref /> tags (custom footnote references, see markdownify_extra::parseString()) - * - * @param void - * @return void - */ - function handleTag_fnref() { - $this->out('[^'.$this->parser->tagAttributes['target'].']'); - } - /** - * handle <fn> tags (custom footnotes, see markdownify_extra::parseString() - * and markdownify_extra::_makeFootnotes()) - * - * @param void - * @return void - */ - function handleTag_fn() { - if ($this->parser->isStartTag) { - $this->out('[^'.$this->parser->tagAttributes['name'].']:'); - $this->setLineBreaks(1); - } else { - $this->setLineBreaks(2); - } - $this->indent(' '); - } - /** - * handle <footnotes> tag (custom footnotes, see markdownify_extra::parseString() - * and markdownify_extra::_makeFootnotes()) - * - * @param void - * @return void - */ - function handleTag_footnotes() { - if (!$this->parser->isStartTag) { - $this->setLineBreaks(2); - } - } - /** - * parse a HTML string, clean up footnotes prior - * - * @param string $HTML input - * @return string Markdown formatted output - */ - function parseString($html) { - /** TODO: custom markdown-extra options, e.g. titles & classes **/ - # <sup id="fnref:..."><a href"#fn..." rel="footnote">...</a></sup> - # => <fnref target="..." /> - $html = preg_replace('@<sup id="fnref:([^"]+)">\s*<a href="#fn:\1" rel="footnote">\s*\d+\s*</a>\s*</sup>@Us', '<fnref target="$1" />', $html); - # <div class="footnotes"> - # <hr /> - # <ol> - # - # <li id="fn:...">...</li> - # ... - # - # </ol> - # </div> - # => - # <footnotes> - # <fn name="...">...</fn> - # ... - # </footnotes> - $html = preg_replace_callback('#<div class="footnotes">\s*<hr />\s*<ol>\s*(.+)\s*</ol>\s*</div>#Us', array(&$this, '_makeFootnotes'), $html); - return parent::parseString($html); - } - /** - * replace HTML representation of footnotes with something more easily parsable - * - * @note this is a callback to be used in parseString() - * - * @param array $matches - * @return string - */ - function _makeFootnotes($matches) { - # <li id="fn:1"> - # ... - # <a href="#fnref:block" rev="footnote">↩</a></p> - # </li> - # => <fn name="1">...</fn> - # remove footnote link - $fns = preg_replace('@\s*( \s*)?<a href="#fnref:[^"]+" rev="footnote"[^>]*>↩</a>\s*@s', '', $matches[1]); - # remove empty paragraph - $fns = preg_replace('@<p>\s*</p>@s', '', $fns); - # <li id="fn:1">...</li> -> <footnote nr="1">...</footnote> - $fns = str_replace('<li id="fn:', '<fn name="', $fns); - - $fns = '<footnotes>'.$fns.'</footnotes>'; - return preg_replace('#</li>\s*(?=(?:<fn|</footnotes>))#s', '</fn>$1', $fns); - } -}
\ No newline at end of file diff --git a/library/markdownify/parsehtml/parsehtml.php b/library/markdownify/parsehtml/parsehtml.php deleted file mode 100644 index 1a8ecacda..000000000 --- a/library/markdownify/parsehtml/parsehtml.php +++ /dev/null @@ -1,618 +0,0 @@ -<?php -/** - * parseHTML is a HTML parser which works with PHP 4 and above. - * It tries to handle invalid HTML to some degree. - * - * @version 1.0 beta - * @author Milian Wolff (mail@milianw.de, http://milianw.de) - * @license LGPL, see LICENSE_LGPL.txt and the summary below - * @copyright (C) 2007 Milian Wolff - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -class parseHTML { - /** - * tags which are always empty (<br /> etc.) - * - * @var array<string> - */ - var $emptyTags = array( - 'br', - 'hr', - 'input', - 'img', - 'area', - 'link', - 'meta', - 'param', - ); - /** - * tags with preformatted text - * whitespaces wont be touched in them - * - * @var array<string> - */ - var $preformattedTags = array( - 'script', - 'style', - 'pre', - 'code', - ); - /** - * supress HTML tags inside preformatted tags (see above) - * - * @var bool - */ - var $noTagsInCode = false; - /** - * html to be parsed - * - * @var string - */ - var $html = ''; - /** - * node type: - * - * - tag (see isStartTag) - * - text (includes cdata) - * - comment - * - doctype - * - pi (processing instruction) - * - * @var string - */ - var $nodeType = ''; - /** - * current node content, i.e. either a - * simple string (text node), or something like - * <tag attrib="value"...> - * - * @var string - */ - var $node = ''; - /** - * wether current node is an opening tag (<a>) or not (</a>) - * set to NULL if current node is not a tag - * NOTE: empty tags (<br />) set this to true as well! - * - * @var bool | null - */ - var $isStartTag = null; - /** - * wether current node is an empty tag (<br />) or not (<a></a>) - * - * @var bool | null - */ - var $isEmptyTag = null; - /** - * tag name - * - * @var string | null - */ - var $tagName = ''; - /** - * attributes of current tag - * - * @var array (attribName=>value) | null - */ - var $tagAttributes = null; - /** - * wether the current tag is a block element - * - * @var bool | null - */ - var $isBlockElement = null; - - /** - * keep whitespace - * - * @var int - */ - var $keepWhitespace = 0; - /** - * list of open tags - * count this to get current depth - * - * @var array - */ - var $openTags = array(); - /** - * list of block elements - * - * @var array - * TODO: what shall we do with <del> and <ins> ?! - */ - var $blockElements = array ( - # tag name => <bool> is block - # block elements - 'address' => true, - 'blockquote' => true, - 'center' => true, - 'del' => true, - 'dir' => true, - 'div' => true, - 'dl' => true, - 'fieldset' => true, - 'form' => true, - 'h1' => true, - 'h2' => true, - 'h3' => true, - 'h4' => true, - 'h5' => true, - 'h6' => true, - 'hr' => true, - 'ins' => true, - 'isindex' => true, - 'menu' => true, - 'noframes' => true, - 'noscript' => true, - 'ol' => true, - 'p' => true, - 'pre' => true, - 'table' => true, - 'ul' => true, - # set table elements and list items to block as well - 'thead' => true, - 'tbody' => true, - 'tfoot' => true, - 'td' => true, - 'tr' => true, - 'th' => true, - 'li' => true, - 'dd' => true, - 'dt' => true, - # header items and html / body as well - 'html' => true, - 'body' => true, - 'head' => true, - 'meta' => true, - 'link' => true, - 'style' => true, - 'title' => true, - # unfancy media tags, when indented should be rendered as block - 'map' => true, - 'object' => true, - 'param' => true, - 'embed' => true, - 'area' => true, - # inline elements - 'a' => false, - 'abbr' => false, - 'acronym' => false, - 'applet' => false, - 'b' => false, - 'basefont' => false, - 'bdo' => false, - 'big' => false, - 'br' => false, - 'button' => false, - 'cite' => false, - 'code' => false, - 'del' => false, - 'dfn' => false, - 'em' => false, - 'font' => false, - 'i' => false, - 'img' => false, - 'ins' => false, - 'input' => false, - 'iframe' => false, - 'kbd' => false, - 'label' => false, - 'q' => false, - 'samp' => false, - 'script' => false, - 'select' => false, - 'small' => false, - 'span' => false, - 'strong' => false, - 'sub' => false, - 'sup' => false, - 'textarea' => false, - 'tt' => false, - 'var' => false, - ); - /** - * get next node, set $this->html prior! - * - * @param void - * @return bool - */ - function nextNode() { - if (empty($this->html)) { - # we are done with parsing the html string - return false; - } - static $skipWhitespace = true; - if ($this->isStartTag && !$this->isEmptyTag) { - array_push($this->openTags, $this->tagName); - if (in_array($this->tagName, $this->preformattedTags)) { - # dont truncate whitespaces for <code> or <pre> contents - $this->keepWhitespace++; - } - } - - if ($this->html[0] == '<') { - $token = substr($this->html, 0, 9); - if (substr($token, 0, 2) == '<?') { - # xml prolog or other pi's - /** TODO **/ - #trigger_error('this might need some work', E_USER_NOTICE); - $pos = strpos($this->html, '>'); - $this->setNode('pi', $pos + 1); - return true; - } - if (substr($token, 0, 4) == '<!--') { - # comment - $pos = strpos($this->html, '-->'); - if ($pos === false) { - # could not find a closing -->, use next gt instead - # this is firefox' behaviour - $pos = strpos($this->html, '>') + 1; - } else { - $pos += 3; - } - $this->setNode('comment', $pos); - - $skipWhitespace = true; - return true; - } - if ($token == '<!DOCTYPE') { - # doctype - $this->setNode('doctype', strpos($this->html, '>')+1); - - $skipWhitespace = true; - return true; - } - if ($token == '<![CDATA[') { - # cdata, use text node - - # remove leading <![CDATA[ - $this->html = substr($this->html, 9); - - $this->setNode('text', strpos($this->html, ']]>')+3); - - # remove trailing ]]> and trim - $this->node = substr($this->node, 0, -3); - $this->handleWhitespaces(); - - $skipWhitespace = true; - return true; - } - if ($this->parseTag()) { - # seems to be a tag - # handle whitespaces - if ($this->isBlockElement) { - $skipWhitespace = true; - } else { - $skipWhitespace = false; - } - return true; - } - } - if ($this->keepWhitespace) { - $skipWhitespace = false; - } - # when we get here it seems to be a text node - $pos = strpos($this->html, '<'); - if ($pos === false) { - $pos = strlen($this->html); - } - $this->setNode('text', $pos); - $this->handleWhitespaces(); - if ($skipWhitespace && $this->node == ' ') { - return $this->nextNode(); - } - $skipWhitespace = false; - return true; - } - /** - * parse tag, set tag name and attributes, see if it's a closing tag and so forth... - * - * @param void - * @return bool - */ - function parseTag() { - static $a_ord, $z_ord, $special_ords; - if (!isset($a_ord)) { - $a_ord = ord('a'); - $z_ord = ord('z'); - $special_ords = array( - ord(':'), // for xml:lang - ord('-'), // for http-equiv - ); - } - - $tagName = ''; - - $pos = 1; - $isStartTag = $this->html[$pos] != '/'; - if (!$isStartTag) { - $pos++; - } - # get tagName - while (isset($this->html[$pos])) { - $pos_ord = ord(strtolower($this->html[$pos])); - if (($pos_ord >= $a_ord && $pos_ord <= $z_ord) || (!empty($tagName) && is_numeric($this->html[$pos]))) { - $tagName .= $this->html[$pos]; - $pos++; - } else { - $pos--; - break; - } - } - - $tagName = strtolower($tagName); - if (empty($tagName) || !isset($this->blockElements[$tagName])) { - # something went wrong => invalid tag - $this->invalidTag(); - return false; - } - if ($this->noTagsInCode && end($this->openTags) == 'code' && !($tagName == 'code' && !$isStartTag)) { - # we supress all HTML tags inside code tags - $this->invalidTag(); - return false; - } - - # get tag attributes - /** TODO: in html 4 attributes do not need to be quoted **/ - $isEmptyTag = false; - $attributes = array(); - $currAttrib = ''; - while (isset($this->html[$pos+1])) { - $pos++; - # close tag - if ($this->html[$pos] == '>' || $this->html[$pos].$this->html[$pos+1] == '/>') { - if ($this->html[$pos] == '/') { - $isEmptyTag = true; - $pos++; - } - break; - } - - $pos_ord = ord(strtolower($this->html[$pos])); - if ( ($pos_ord >= $a_ord && $pos_ord <= $z_ord) || in_array($pos_ord, $special_ords)) { - # attribute name - $currAttrib .= $this->html[$pos]; - } elseif (in_array($this->html[$pos], array(' ', "\t", "\n"))) { - # drop whitespace - } elseif (in_array($this->html[$pos].$this->html[$pos+1], array('="', "='"))) { - # get attribute value - $pos++; - $await = $this->html[$pos]; # single or double quote - $pos++; - $value = ''; - while (isset($this->html[$pos]) && $this->html[$pos] != $await) { - $value .= $this->html[$pos]; - $pos++; - } - $attributes[$currAttrib] = $value; - $currAttrib = ''; - } else { - $this->invalidTag(); - return false; - } - } - if ($this->html[$pos] != '>') { - $this->invalidTag(); - return false; - } - - if (!empty($currAttrib)) { - # html 4 allows something like <option selected> instead of <option selected="selected"> - $attributes[$currAttrib] = $currAttrib; - } - if (!$isStartTag) { - if (!empty($attributes) || $tagName != end($this->openTags)) { - # end tags must not contain any attributes - # or maybe we did not expect a different tag to be closed - $this->invalidTag(); - return false; - } - array_pop($this->openTags); - if (in_array($tagName, $this->preformattedTags)) { - $this->keepWhitespace--; - } - } - $pos++; - $this->node = substr($this->html, 0, $pos); - $this->html = substr($this->html, $pos); - $this->tagName = $tagName; - $this->tagAttributes = $attributes; - $this->isStartTag = $isStartTag; - $this->isEmptyTag = $isEmptyTag || in_array($tagName, $this->emptyTags); - if ($this->isEmptyTag) { - # might be not well formed - $this->node = preg_replace('# */? *>$#', ' />', $this->node); - } - $this->nodeType = 'tag'; - $this->isBlockElement = $this->blockElements[$tagName]; - return true; - } - /** - * handle invalid tags - * - * @param void - * @return void - */ - function invalidTag() { - $this->html = substr_replace($this->html, '<', 0, 1); - } - /** - * update all vars and make $this->html shorter - * - * @param string $type see description for $this->nodeType - * @param int $pos to which position shall we cut? - * @return void - */ - function setNode($type, $pos) { - if ($this->nodeType == 'tag') { - # set tag specific vars to null - # $type == tag should not be called here - # see this::parseTag() for more - $this->tagName = null; - $this->tagAttributes = null; - $this->isStartTag = null; - $this->isEmptyTag = null; - $this->isBlockElement = null; - - } - $this->nodeType = $type; - $this->node = substr($this->html, 0, $pos); - $this->html = substr($this->html, $pos); - } - /** - * check if $this->html begins with $str - * - * @param string $str - * @return bool - */ - function match($str) { - return substr($this->html, 0, strlen($str)) == $str; - } - /** - * truncate whitespaces - * - * @param void - * @return void - */ - function handleWhitespaces() { - if ($this->keepWhitespace) { - # <pre> or <code> before... - return; - } - # truncate multiple whitespaces to a single one - $this->node = preg_replace('#\s+#s', ' ', $this->node); - } - /** - * normalize self::node - * - * @param void - * @return void - */ - function normalizeNode() { - $this->node = '<'; - if (!$this->isStartTag) { - $this->node .= '/'.$this->tagName.'>'; - return; - } - $this->node .= $this->tagName; - foreach ($this->tagAttributes as $name => $value) { - $this->node .= ' '.$name.'="'.str_replace('"', '"', $value).'"'; - } - if ($this->isEmptyTag) { - $this->node .= ' /'; - } - $this->node .= '>'; - } -} - -/** - * indent a HTML string properly - * - * @param string $html - * @param string $indent optional - * @return string - */ -function indentHTML($html, $indent = " ", $noTagsInCode = false) { - $parser = new parseHTML; - $parser->noTagsInCode = $noTagsInCode; - $parser->html = $html; - $html = ''; - $last = true; # last tag was block elem - $indent_a = array(); - while($parser->nextNode()) { - if ($parser->nodeType == 'tag') { - $parser->normalizeNode(); - } - if ($parser->nodeType == 'tag' && $parser->isBlockElement) { - $isPreOrCode = in_array($parser->tagName, array('code', 'pre')); - if (!$parser->keepWhitespace && !$last && !$isPreOrCode) { - $html = rtrim($html)."\n"; - } - if ($parser->isStartTag) { - $html .= implode($indent_a); - if (!$parser->isEmptyTag) { - array_push($indent_a, $indent); - } - } else { - array_pop($indent_a); - if (!$isPreOrCode) { - $html .= implode($indent_a); - } - } - $html .= $parser->node; - if (!$parser->keepWhitespace && !($isPreOrCode && $parser->isStartTag)) { - $html .= "\n"; - } - $last = true; - } else { - if ($parser->nodeType == 'tag' && $parser->tagName == 'br') { - $html .= $parser->node."\n"; - $last = true; - continue; - } elseif ($last && !$parser->keepWhitespace) { - $html .= implode($indent_a); - $parser->node = ltrim($parser->node); - } - $html .= $parser->node; - - if (in_array($parser->nodeType, array('comment', 'pi', 'doctype'))) { - $html .= "\n"; - } else { - $last = false; - } - } - } - return $html; -} -/* -# testcase / example -error_reporting(E_ALL); - -$html = '<p>Simple block on one line:</p> - -<div>foo</div> - -<p>And nested without indentation:</p> - -<div> -<div> -<div> -foo -</div> -<div style=">"/> -</div> -<div>bar</div> -</div> - -<p>And with attributes:</p> - -<div> - <div id="foo"> - </div> -</div> - -<p>This was broken in 1.0.2b7:</p> - -<div class="inlinepage"> -<div class="toggleableend"> -foo -</div> -</div>'; -#$html = '<a href="asdfasdf" title=\'asdf\' foo="bar">asdf</a>'; -echo indentHTML($html); -die(); -*/ diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 8b8d3dd58..2adb2fe53 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -7,6 +7,9 @@ $baseDir = dirname($vendorDir); return array( 'Hubzilla\\Import\\Import' => $baseDir . '/include/Import/Importer.php', + 'Markdownify\\Converter' => $vendorDir . '/pixel418/markdownify/src/Converter.php', + 'Markdownify\\ConverterExtra' => $vendorDir . '/pixel418/markdownify/src/ConverterExtra.php', + 'Markdownify\\Parser' => $vendorDir . '/pixel418/markdownify/src/Parser.php', 'Michelf\\Markdown' => $vendorDir . '/michelf/php-markdown/Michelf/Markdown.php', 'Michelf\\MarkdownExtra' => $vendorDir . '/michelf/php-markdown/Michelf/MarkdownExtra.php', 'Michelf\\MarkdownInterface' => $vendorDir . '/michelf/php-markdown/Michelf/MarkdownInterface.php', @@ -18,6 +21,8 @@ return array( 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', + 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'Sabre\\CalDAV\\Backend\\AbstractBackend' => $vendorDir . '/sabre/dav/lib/CalDAV/Backend/AbstractBackend.php', 'Sabre\\CalDAV\\Backend\\BackendInterface' => $vendorDir . '/sabre/dav/lib/CalDAV/Backend/BackendInterface.php', 'Sabre\\CalDAV\\Backend\\NotificationSupport' => $vendorDir . '/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php', @@ -268,7 +273,6 @@ return array( 'Sabre\\HTTP\\URLUtil' => $vendorDir . '/sabre/http/lib/URLUtil.php', 'Sabre\\HTTP\\Util' => $vendorDir . '/sabre/http/lib/Util.php', 'Sabre\\HTTP\\Version' => $vendorDir . '/sabre/http/lib/Version.php', - 'Sabre\\Uri\\InvalidUriException' => $vendorDir . '/sabre/uri/lib/InvalidUriException.php', 'Sabre\\Uri\\Version' => $vendorDir . '/sabre/uri/lib/Version.php', 'Sabre\\VObject\\BirthdayCalendarGenerator' => $vendorDir . '/sabre/vobject/lib/BirthdayCalendarGenerator.php', 'Sabre\\VObject\\Cli' => $vendorDir . '/sabre/vobject/lib/Cli.php', @@ -357,6 +361,9 @@ return array( 'Sabre\\Xml\\Writer' => $vendorDir . '/sabre/xml/lib/Writer.php', 'Sabre\\Xml\\XmlDeserializable' => $vendorDir . '/sabre/xml/lib/XmlDeserializable.php', 'Sabre\\Xml\\XmlSerializable' => $vendorDir . '/sabre/xml/lib/XmlSerializable.php', + 'Test\\Markdownify\\ConverterExtraTest' => $vendorDir . '/pixel418/markdownify/test/ConverterExtraTest.php', + 'Test\\Markdownify\\ConverterTest' => $vendorDir . '/pixel418/markdownify/test/ConverterTest.php', + 'Test\\Markdownify\\ConverterTestCase' => $vendorDir . '/pixel418/markdownify/test/ConverterTestCase.php', 'Zotlabs\\Access\\AccessList' => $baseDir . '/Zotlabs/Access/AccessList.php', 'Zotlabs\\Access\\PermissionLimits' => $baseDir . '/Zotlabs/Access/PermissionLimits.php', 'Zotlabs\\Access\\PermissionRoles' => $baseDir . '/Zotlabs/Access/PermissionRoles.php', diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index e8ea2ed78..00a183cc1 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -7,6 +7,7 @@ $baseDir = dirname($vendorDir); return array( 'Zotlabs\\' => array($baseDir . '/Zotlabs'), + 'Test\\Markdownify\\' => array($vendorDir . '/pixel418/markdownify/test'), 'Sabre\\Xml\\' => array($vendorDir . '/sabre/xml/lib'), 'Sabre\\VObject\\' => array($vendorDir . '/sabre/vobject/lib'), 'Sabre\\Uri\\' => array($vendorDir . '/sabre/uri/lib'), @@ -17,5 +18,6 @@ return array( 'Sabre\\CardDAV\\' => array($vendorDir . '/sabre/dav/lib/CardDAV'), 'Sabre\\CalDAV\\' => array($vendorDir . '/sabre/dav/lib/CalDAV'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), + 'Markdownify\\' => array($vendorDir . '/pixel418/markdownify/src'), 'Hubzilla\\' => array($baseDir . '/include'), ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 070595527..a7c84b7f1 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -21,6 +21,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d array ( 'Zotlabs\\' => 8, ), + 'T' => + array ( + 'Test\\Markdownify\\' => 17, + ), 'S' => array ( 'Sabre\\Xml\\' => 10, @@ -37,6 +41,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d array ( 'Psr\\Log\\' => 8, ), + 'M' => + array ( + 'Markdownify\\' => 12, + ), 'H' => array ( 'Hubzilla\\' => 9, @@ -48,6 +56,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d array ( 0 => __DIR__ . '/../..' . '/Zotlabs', ), + 'Test\\Markdownify\\' => + array ( + 0 => __DIR__ . '/..' . '/pixel418/markdownify/test', + ), 'Sabre\\Xml\\' => array ( 0 => __DIR__ . '/..' . '/sabre/xml/lib', @@ -88,6 +100,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d array ( 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', ), + 'Markdownify\\' => + array ( + 0 => __DIR__ . '/..' . '/pixel418/markdownify/src', + ), 'Hubzilla\\' => array ( 0 => __DIR__ . '/../..' . '/include', @@ -106,6 +122,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d public static $classMap = array ( 'Hubzilla\\Import\\Import' => __DIR__ . '/../..' . '/include/Import/Importer.php', + 'Markdownify\\Converter' => __DIR__ . '/..' . '/pixel418/markdownify/src/Converter.php', + 'Markdownify\\ConverterExtra' => __DIR__ . '/..' . '/pixel418/markdownify/src/ConverterExtra.php', + 'Markdownify\\Parser' => __DIR__ . '/..' . '/pixel418/markdownify/src/Parser.php', 'Michelf\\Markdown' => __DIR__ . '/..' . '/michelf/php-markdown/Michelf/Markdown.php', 'Michelf\\MarkdownExtra' => __DIR__ . '/..' . '/michelf/php-markdown/Michelf/MarkdownExtra.php', 'Michelf\\MarkdownInterface' => __DIR__ . '/..' . '/michelf/php-markdown/Michelf/MarkdownInterface.php', @@ -117,6 +136,8 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', + 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'Sabre\\CalDAV\\Backend\\AbstractBackend' => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV/Backend/AbstractBackend.php', 'Sabre\\CalDAV\\Backend\\BackendInterface' => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV/Backend/BackendInterface.php', 'Sabre\\CalDAV\\Backend\\NotificationSupport' => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php', @@ -367,7 +388,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Sabre\\HTTP\\URLUtil' => __DIR__ . '/..' . '/sabre/http/lib/URLUtil.php', 'Sabre\\HTTP\\Util' => __DIR__ . '/..' . '/sabre/http/lib/Util.php', 'Sabre\\HTTP\\Version' => __DIR__ . '/..' . '/sabre/http/lib/Version.php', - 'Sabre\\Uri\\InvalidUriException' => __DIR__ . '/..' . '/sabre/uri/lib/InvalidUriException.php', 'Sabre\\Uri\\Version' => __DIR__ . '/..' . '/sabre/uri/lib/Version.php', 'Sabre\\VObject\\BirthdayCalendarGenerator' => __DIR__ . '/..' . '/sabre/vobject/lib/BirthdayCalendarGenerator.php', 'Sabre\\VObject\\Cli' => __DIR__ . '/..' . '/sabre/vobject/lib/Cli.php', @@ -456,6 +476,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Sabre\\Xml\\Writer' => __DIR__ . '/..' . '/sabre/xml/lib/Writer.php', 'Sabre\\Xml\\XmlDeserializable' => __DIR__ . '/..' . '/sabre/xml/lib/XmlDeserializable.php', 'Sabre\\Xml\\XmlSerializable' => __DIR__ . '/..' . '/sabre/xml/lib/XmlSerializable.php', + 'Test\\Markdownify\\ConverterExtraTest' => __DIR__ . '/..' . '/pixel418/markdownify/test/ConverterExtraTest.php', + 'Test\\Markdownify\\ConverterTest' => __DIR__ . '/..' . '/pixel418/markdownify/test/ConverterTest.php', + 'Test\\Markdownify\\ConverterTestCase' => __DIR__ . '/..' . '/pixel418/markdownify/test/ConverterTestCase.php', 'Zotlabs\\Access\\AccessList' => __DIR__ . '/../..' . '/Zotlabs/Access/AccessList.php', 'Zotlabs\\Access\\PermissionLimits' => __DIR__ . '/../..' . '/Zotlabs/Access/PermissionLimits.php', 'Zotlabs\\Access\\PermissionRoles' => __DIR__ . '/../..' . '/Zotlabs/Access/PermissionRoles.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 73827081f..0fb88e5a1 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -518,5 +518,63 @@ "keywords": [ "markdown" ] + }, + { + "name": "pixel418/markdownify", + "version": "v2.2.1", + "version_normalized": "2.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Elephant418/Markdownify.git", + "reference": "0160677f04c784550dd10fd72fdf3994967db848" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Elephant418/Markdownify/zipball/0160677f04c784550dd10fd72fdf3994967db848", + "reference": "0160677f04c784550dd10fd72fdf3994967db848", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "time": "2016-09-21T13:01:43+00:00", + "type": "lib", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Markdownify\\": "src", + "Test\\Markdownify\\": "test" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Peter Kruithof", + "email": "pkruithof@gmail.com", + "homepage": "http://pkruithof.tumblr.com/" + }, + { + "name": "Milian Wolff", + "email": "mail@milianw.de", + "homepage": "http://milianw.de" + }, + { + "name": "Thomas Zilliox", + "email": "hello@tzi.fr", + "homepage": "http://tzi.fr" + } + ], + "description": "The HTML to Markdown converter for PHP ", + "homepage": "https://github.com/elephant418/Markdownify", + "keywords": [ + "markdown", + "markdownify" + ] } ] diff --git a/vendor/pixel418/markdownify/CHANGELOG.md b/vendor/pixel418/markdownify/CHANGELOG.md new file mode 100644 index 000000000..a0900fdf5 --- /dev/null +++ b/vendor/pixel418/markdownify/CHANGELOG.md @@ -0,0 +1,76 @@ +CHANGELOG +============== + + +21/09/2016 v2.2.1 +-------------- + + * Fix: Moving trailing whitespace from inline elements outside of the element + * Feature: Use PSR-4 + * Feature: PHP 7.0 support in continuous integration + * Doc: Update of the README + + +07/09/2016 v2.2.0 +-------------- + + * Fix: Reset state between each parsing + + +19/02/2016 v2.1.11 +-------------- + + * Fix: Empty table cell conversion + + +10/02/2016 v2.1.10 +-------------- + + * Fix: Handle nested table. + + +01/04/2015 v2.1.9 +-------------- + + * Fix: Handle HTML breaks & spaces in a less destructive way. + + +26/03/2015 v2.1.8 +-------------- + + * Fix: Use alternative italic character + * Fix: Handle HTML breaks inside another tag + * Fix: Handle HTML spaces around tags + + +07/11/2014 v2.1.7 +-------------- + + * Change composer name to "elephant418/markdownify" + + +14/07/2014 v2.1.6 +-------------- + + * Fix: Simulate a paragraph for inline text preceding block element + * Fix: Nested lists + * Fix: setKeepHTML method + * Feature: PHP 5.5 & 5.6 support in continuous integration + + +16/03/2014 v2.1.5 +-------------- + +Add display settings + + * Test: Add tests for footnotes after every paragraph or not + * Feature: Allow to display link reference in paragraph, without footnotes + + +27/02/2014 v2.1.4 +-------------- + +Improve how ConverterExtra handle id & class attributes: + + * Feature: Allow id & class attributes on links + * Feature: Allow class attributes on headings
\ No newline at end of file diff --git a/library/markdownify/LICENSE_LGPL.txt b/vendor/pixel418/markdownify/LICENSE index 5ab7695ab..5ab7695ab 100644 --- a/library/markdownify/LICENSE_LGPL.txt +++ b/vendor/pixel418/markdownify/LICENSE diff --git a/vendor/pixel418/markdownify/README.md b/vendor/pixel418/markdownify/README.md new file mode 100644 index 000000000..8855b0d05 --- /dev/null +++ b/vendor/pixel418/markdownify/README.md @@ -0,0 +1,63 @@ +# Markdownify + +[![Build Status](https://travis-ci.org/Elephant418/Markdownify.png?branch=master)](https://travis-ci.org/Elephant418/Markdownify?branch=master) +[![Total Downloads](https://poser.pugx.org/pixel418/markdownify/downloads)](https://packagist.org/packages/pixel418/markdownify) +[![License LGPL](https://poser.pugx.org/pixel418/markdownify/license)](https://opensource.org/licenses/lgpl-2.1.php) + +The HTML to Markdown converter for PHP + +[Code example](#code-example) | [How to Install](#how-to-install) | [How to Contribute](#how-to-contribute) | [Author & Community](#author--community) + + + +Code example +-------- + +### Markdown + +```php +$converter = new Markdownify\Converter; +$converter->parseString('<h1>Heading</h1>'); +// Returns: # Heading +``` + +### Markdown Extra [as defined by @michelf](http://michelf.ca/projects/php-markdown/extra/) + +```php +$converter = new Markdownify\ConverterExtra; +$converter->parseString('<h1 id="md">Heading</h1>'); +// Returns: # Heading {#md} +``` + + + +How to Install +-------- + +This library package requires `PHP 5.3` or later.<br> +Install [Composer](http://getcomposer.org/doc/01-basic-usage.md#installation) and run the following command to get the latest version: + +```sh +composer require pixel418/markdownify +``` + + + +How to Contribute +-------- + +1. Fork the Markdownify repository +2. Create a new branch for each feature or improvement +3. Send a pull request from each feature branch to the **v2.x** branch + +If you don't know much about pull request, you can read [the Github article](https://help.github.com/articles/using-pull-requests) + + + +Author & Community +-------- + +Markdownify is under [LGPL License](http://opensource.org/licenses/LGPL-2.1)<br> +It was created by [Milian Wolff](http://milianw.de)<br> +It was converted to a Symfony Bundle by [Peter Kruithof](https://github.com/pkruithof)<br> +It is maintained by [Thomas ZILLIOX](http://tzi.fr) diff --git a/vendor/pixel418/markdownify/composer.json b/vendor/pixel418/markdownify/composer.json new file mode 100644 index 000000000..71d9f3565 --- /dev/null +++ b/vendor/pixel418/markdownify/composer.json @@ -0,0 +1,38 @@ +{ + "name": "pixel418/markdownify", + "type": "lib", + "description": "The HTML to Markdown converter for PHP ", + "keywords": ["markdown", "markdownify"], + "license": "LGPL", + "homepage": "https://github.com/elephant418/Markdownify", + "authors": [ + { + "name": "Milian Wolff", + "email": "mail@milianw.de", + "homepage": "http://milianw.de" + + }, + { + "name": "Peter Kruithof", + "email": "pkruithof@gmail.com", + "homepage": "http://pkruithof.tumblr.com/" + }, + { + "name": "Thomas Zilliox", + "email": "hello@tzi.fr", + "homepage": "http://tzi.fr" + } + ], + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "autoload": { + "psr-4": { + "Markdownify\\": "src", + "Test\\Markdownify\\": "test" + } + } +} diff --git a/vendor/pixel418/markdownify/src/Converter.php b/vendor/pixel418/markdownify/src/Converter.php new file mode 100644 index 000000000..77c62dc7e --- /dev/null +++ b/vendor/pixel418/markdownify/src/Converter.php @@ -0,0 +1,1400 @@ +<?php + +/* This file is part of the Markdownify project, which is under LGPL license */ + +namespace Markdownify; + +/** + * default configuration + */ +define('MDFY_BODYWIDTH', false); +define('MDFY_KEEPHTML', true); + +/** + * HTML to Markdown converter class + */ +class Converter +{ + /** + * html parser object + * + * @var parseHTML + */ + protected $parser; + + /** + * markdown output + * + * @var string + */ + protected $output; + + /** + * stack with tags which where not converted to html + * + * @var array<string> + */ + protected $notConverted = array(); + + /** + * skip conversion to markdown + * + * @var bool + */ + protected $skipConversion = false; + + /* options */ + + /** + * keep html tags which cannot be converted to markdown + * + * @var bool + */ + protected $keepHTML = false; + + /** + * wrap output, set to 0 to skip wrapping + * + * @var int + */ + protected $bodyWidth = 0; + + /** + * minimum body width + * + * @var int + */ + protected $minBodyWidth = 25; + + /** + * position where the link reference will be displayed + * + * + * @var int + */ + protected $linkPosition; + const LINK_AFTER_CONTENT = 0; + const LINK_AFTER_PARAGRAPH = 1; + const LINK_IN_PARAGRAPH = 2; + + /** + * stores current buffers + * + * @var array<string> + */ + protected $buffer = array(); + + /** + * stores current buffers + * + * @var array<string> + */ + protected $footnotes = array(); + + /** + * tags with elements which can be handled by markdown + * + * @var array<string> + */ + protected $isMarkdownable = array( + 'p' => array(), + 'ul' => array(), + 'ol' => array(), + 'li' => array(), + 'br' => array(), + 'blockquote' => array(), + 'code' => array(), + 'pre' => array(), + 'a' => array( + 'href' => 'required', + 'title' => 'optional', + ), + 'strong' => array(), + 'b' => array(), + 'em' => array(), + 'i' => array(), + 'img' => array( + 'src' => 'required', + 'alt' => 'optional', + 'title' => 'optional', + ), + 'h1' => array(), + 'h2' => array(), + 'h3' => array(), + 'h4' => array(), + 'h5' => array(), + 'h6' => array(), + 'hr' => array(), + ); + + /** + * html tags to be ignored (contents will be parsed) + * + * @var array<string> + */ + protected $ignore = array( + 'html', + 'body', + ); + + /** + * html tags to be dropped (contents will not be parsed!) + * + * @var array<string> + */ + protected $drop = array( + 'script', + 'head', + 'style', + 'form', + 'area', + 'object', + 'param', + 'iframe', + ); + + /** + * html block tags that allow inline & block children + * + * @var array<string> + */ + protected $allowMixedChildren = array( + 'li' + ); + + /** + * Markdown indents which could be wrapped + * @note: use strings in regex format + * + * @var array<string> + */ + protected $wrappableIndents = array( + '\* ', // ul + '\d. ', // ol + '\d\d. ', // ol + '> ', // blockquote + '', // p + ); + + /** + * list of chars which have to be escaped in normal text + * @note: use strings in regex format + * + * @var array + * + * TODO: what's with block chars / sequences at the beginning of a block? + */ + protected $escapeInText = array( + '\*\*([^*]+)\*\*' => '\*\*$1\*\*', // strong + '\*([^*]+)\*' => '\*$1\*', // em + '__(?! |_)(.+)(?!<_| )__' => '\_\_$1\_\_', // strong + '_(?! |_)(.+)(?!<_| )_' => '\_$1\_', // em + '([-*_])([ ]{0,2}\1){2,}' => '\\\\$0', // hr + '`' => '\`', // code + '\[(.+)\](\s*\()' => '\[$1\]$2', // links: [text] (url) => [text\] (url) + '\[(.+)\](\s*)\[(.*)\]' => '\[$1\]$2\[$3\]', // links: [text][id] => [text\][id\] + '^#(#{0,5}) ' => '\#$1 ', // header + ); + + /** + * wether last processed node was a block tag or not + * + * @var bool + */ + protected $lastWasBlockTag = false; + + /** + * name of last closed tag + * + * @var string + */ + protected $lastClosedTag = ''; + + /** + * number of line breaks before next inline output + */ + protected $lineBreaks = 0; + + /** + * node stack, e.g. for <a> and <abbr> tags + * + * @var array<array> + */ + protected $stack = array(); + + /** + * current indentation + * + * @var string + */ + protected $indent = ''; + + /** + * constructor, set options, setup parser + * + * @param int $linkPosition define the position of links + * @param int $bodyWidth whether or not to wrap the output to the given width + * defaults to false + * @param bool $keepHTML whether to keep non markdownable HTML or to discard it + * defaults to true (HTML will be kept) + * @return void + */ + public function __construct($linkPosition = self::LINK_AFTER_CONTENT, $bodyWidth = MDFY_BODYWIDTH, $keepHTML = MDFY_KEEPHTML) + { + $this->linkPosition = $linkPosition; + $this->keepHTML = $keepHTML; + + if ($bodyWidth > $this->minBodyWidth) { + $this->bodyWidth = intval($bodyWidth); + } else { + $this->bodyWidth = false; + } + + $this->parser = new Parser; + $this->parser->noTagsInCode = true; + + // we don't have to do this every time + $search = array(); + $replace = array(); + foreach ($this->escapeInText as $s => $r) { + array_push($search, '@(?<!\\\)' . $s . '@U'); + array_push($replace, $r); + } + $this->escapeInText = array( + 'search' => $search, + 'replace' => $replace + ); + } + + /** + * parse a HTML string + * + * @param string $html + * @return string markdown formatted + */ + public function parseString($html) + { + $this->resetState(); + + $this->parser->html = $html; + $this->parse(); + + return $this->output; + } + + /** + * set the position where the link reference will be displayed + * + * @param int $linkPosition + * @return void + */ + public function setLinkPosition($linkPosition) + { + $this->linkPosition = $linkPosition; + } + + /** + * set keep HTML tags which cannot be converted to markdown + * + * @param bool $linkPosition + * @return void + */ + public function setKeepHTML($keepHTML) + { + $this->keepHTML = $keepHTML; + } + + /** + * iterate through the nodes and decide what we + * shall do with the current node + * + * @param void + * @return void + */ + protected function parse() + { + $this->output = ''; + // drop tags + $this->parser->html = preg_replace('#<(' . implode('|', $this->drop) . ')[^>]*>.*</\\1>#sU', '', $this->parser->html); + while ($this->parser->nextNode()) { + switch ($this->parser->nodeType) { + case 'doctype': + break; + case 'pi': + case 'comment': + if ($this->keepHTML) { + $this->flushLinebreaks(); + $this->out($this->parser->node); + $this->setLineBreaks(2); + } + // else drop + break; + case 'text': + $this->handleText(); + break; + case 'tag': + if (in_array($this->parser->tagName, $this->ignore)) { + break; + } + // If the previous tag was not a block element, we simulate a paragraph tag + if ($this->parser->isBlockElement && $this->parser->isNextToInlineContext && !in_array($this->parent(), $this->allowMixedChildren)) { + $this->setLineBreaks(2); + } + if ($this->parser->isStartTag) { + $this->flushLinebreaks(); + } + if ($this->skipConversion) { + $this->isMarkdownable(); // update notConverted + $this->handleTagToText(); + continue; + } + + // block elements + if (!$this->parser->keepWhitespace && $this->parser->isBlockElement) { + $this->fixBlockElementSpacing(); + } + + // inline elements + if (!$this->parser->keepWhitespace && $this->parser->isInlineContext) { + $this->fixInlineElementSpacing(); + } + + if ($this->isMarkdownable()) { + if ($this->parser->isBlockElement && $this->parser->isStartTag && !$this->lastWasBlockTag && !empty($this->output)) { + if (!empty($this->buffer)) { + $str =& $this->buffer[count($this->buffer) - 1]; + } else { + $str =& $this->output; + } + if (substr($str, -strlen($this->indent) - 1) != "\n" . $this->indent) { + $str .= "\n" . $this->indent; + } + } + $func = 'handleTag_' . $this->parser->tagName; + $this->$func(); + if ($this->linkPosition == self::LINK_AFTER_PARAGRAPH && $this->parser->isBlockElement && !$this->parser->isStartTag && empty($this->parser->openTags)) { + $this->flushFootnotes(); + } + if (!$this->parser->isStartTag) { + $this->lastClosedTag = $this->parser->tagName; + } + } else { + $this->handleTagToText(); + $this->lastClosedTag = ''; + } + break; + default: + trigger_error('invalid node type', E_USER_ERROR); + break; + } + $this->lastWasBlockTag = $this->parser->nodeType == 'tag' && $this->parser->isStartTag && $this->parser->isBlockElement; + } + if (!empty($this->buffer)) { + // trigger_error('buffer was not flushed, this is a bug. please report!', E_USER_WARNING); + while (!empty($this->buffer)) { + $this->out($this->unbuffer()); + } + } + // cleanup + $this->output = rtrim(str_replace('&', '&', str_replace('<', '<', str_replace('>', '>', $this->output)))); + // end parsing, flush stacked tags + $this->flushFootnotes(); + $this->stack = array(); + } + + /** + * check if current tag can be converted to Markdown + * + * @param void + * @return bool + */ + protected function isMarkdownable() + { + if (!isset($this->isMarkdownable[$this->parser->tagName])) { + // simply not markdownable + + return false; + } + if ($this->parser->isStartTag) { + $return = true; + if ($this->keepHTML) { + $diff = array_diff(array_keys($this->parser->tagAttributes), array_keys($this->isMarkdownable[$this->parser->tagName])); + if (!empty($diff)) { + // non markdownable attributes given + $return = false; + } + } + if ($return) { + foreach ($this->isMarkdownable[$this->parser->tagName] as $attr => $type) { + if ($type == 'required' && !isset($this->parser->tagAttributes[$attr])) { + // required markdown attribute not given + $return = false; + break; + } + } + } + if (!$return) { + array_push($this->notConverted, $this->parser->tagName . '::' . implode('/', $this->parser->openTags)); + } + + return $return; + } else { + if (!empty($this->notConverted) && end($this->notConverted) === $this->parser->tagName . '::' . implode('/', $this->parser->openTags)) { + array_pop($this->notConverted); + + return false; + } + + return true; + } + } + + /** + * output footnotes + * + * @param void + * @return void + */ + protected function flushFootnotes() + { + $out = false; + foreach ($this->footnotes as $k => $tag) { + if (!isset($tag['unstacked'])) { + if (!$out) { + $out = true; + $this->out("\n\n", true); + } else { + $this->out("\n", true); + } + $this->out(' [' . $tag['linkID'] . ']: ' . $this->getLinkReference($tag), true); + $tag['unstacked'] = true; + $this->footnotes[$k] = $tag; + } + } + } + + /** + * return formated link reference + * + * @param array $tag + * @return string link reference + */ + protected function getLinkReference($tag) + { + return $tag['href'] . (isset($tag['title']) ? ' "' . $tag['title'] . '"' : ''); + } + + /** + * flush enqued linebreaks + * + * @param void + * @return void + */ + protected function flushLinebreaks() + { + if ($this->lineBreaks && !empty($this->output)) { + $this->out(str_repeat("\n" . $this->indent, $this->lineBreaks), true); + } + $this->lineBreaks = 0; + } + + /** + * handle non Markdownable tags + * + * @param void + * @return void + */ + protected function handleTagToText() + { + if (!$this->keepHTML) { + if (!$this->parser->isStartTag && $this->parser->isBlockElement) { + $this->setLineBreaks(2); + } + } else { + // dont convert to markdown inside this tag + /** TODO: markdown extra **/ + if (!$this->parser->isEmptyTag) { + if ($this->parser->isStartTag) { + if (!$this->skipConversion) { + $this->skipConversion = $this->parser->tagName . '::' . implode('/', $this->parser->openTags); + } + } else { + if ($this->skipConversion == $this->parser->tagName . '::' . implode('/', $this->parser->openTags)) { + $this->skipConversion = false; + } + } + } + + if ($this->parser->isBlockElement) { + if ($this->parser->isStartTag) { + // looks like ins or del are block elements now + if (in_array($this->parent(), array('ins', 'del'))) { + $this->out("\n", true); + $this->indent(' '); + } + // don't indent inside <pre> tags + if ($this->parser->tagName == 'pre') { + $this->out($this->parser->node); + static $indent; + $indent = $this->indent; + $this->indent = ''; + } else { + $this->out($this->parser->node . "\n" . $this->indent); + if (!$this->parser->isEmptyTag) { + $this->indent(' '); + } else { + $this->setLineBreaks(1); + } + $this->parser->html = ltrim($this->parser->html); + } + } else { + if (!$this->parser->keepWhitespace) { + $this->output = rtrim($this->output); + } + if ($this->parser->tagName != 'pre') { + $this->indent(' '); + $this->out("\n" . $this->indent . $this->parser->node); + } else { + // reset indentation + $this->out($this->parser->node); + static $indent; + $this->indent = $indent; + } + + if (in_array($this->parent(), array('ins', 'del'))) { + // ins or del was block element + $this->out("\n"); + $this->indent(' '); + } + if ($this->parser->tagName == 'li') { + $this->setLineBreaks(1); + } else { + $this->setLineBreaks(2); + } + } + } else { + $this->out($this->parser->node); + } + if (in_array($this->parser->tagName, array('code', 'pre'))) { + if ($this->parser->isStartTag) { + $this->buffer(); + } else { + // add stuff so cleanup just reverses this + $this->out(str_replace('<', '&lt;', str_replace('>', '&gt;', $this->unbuffer()))); + } + } + } + } + + /** + * handle plain text + * + * @param void + * @return void + */ + protected function handleText() + { + if ($this->hasParent('pre') && strpos($this->parser->node, "\n") !== false) { + $this->parser->node = str_replace("\n", "\n" . $this->indent, $this->parser->node); + } + if (!$this->hasParent('code') && !$this->hasParent('pre')) { + // entity decode + $this->parser->node = $this->decode($this->parser->node); + if (!$this->skipConversion) { + // escape some chars in normal Text + $this->parser->node = preg_replace($this->escapeInText['search'], $this->escapeInText['replace'], $this->parser->node); + } + } else { + $this->parser->node = str_replace(array('"', '&apos'), array('"', '\''), $this->parser->node); + } + $this->out($this->parser->node); + $this->lastClosedTag = ''; + } + + /** + * handle <em> and <i> tags + * + * @param void + * @return void + */ + protected function handleTag_em() + { + $this->out('_', true); + } + + protected function handleTag_i() + { + $this->handleTag_em(); + } + + /** + * handle <strong> and <b> tags + * + * @param void + * @return void + */ + protected function handleTag_strong() + { + $this->out('**', true); + } + + protected function handleTag_b() + { + $this->handleTag_strong(); + } + + /** + * handle <h1> tags + * + * @param void + * @return void + */ + protected function handleTag_h1() + { + $this->handleHeader(1); + } + + /** + * handle <h2> tags + * + * @param void + * @return void + */ + protected function handleTag_h2() + { + $this->handleHeader(2); + } + + /** + * handle <h3> tags + * + * @param void + * @return void + */ + protected function handleTag_h3() + { + $this->handleHeader(3); + } + + /** + * handle <h4> tags + * + * @param void + * @return void + */ + protected function handleTag_h4() + { + $this->handleHeader(4); + } + + /** + * handle <h5> tags + * + * @param void + * @return void + */ + protected function handleTag_h5() + { + $this->handleHeader(5); + } + + /** + * handle <h6> tags + * + * @param void + * @return void + */ + protected function handleTag_h6() + { + $this->handleHeader(6); + } + + /** + * handle header tags (<h1> - <h6>) + * + * @param int $level 1-6 + * @return void + */ + protected function handleHeader($level) + { + if ($this->parser->isStartTag) { + $this->out(str_repeat('#', $level) . ' ', true); + } else { + $this->setLineBreaks(2); + } + } + + /** + * handle <p> tags + * + * @param void + * @return void + */ + protected function handleTag_p() + { + if (!$this->parser->isStartTag) { + $this->setLineBreaks(2); + } + } + + /** + * handle <a> tags + * + * @param void + * @return void + */ + protected function handleTag_a() + { + if ($this->parser->isStartTag) { + $this->buffer(); + $this->handleTag_a_parser(); + $this->stack(); + } else { + $tag = $this->unstack(); + $buffer = $this->unbuffer(); + $this->handleTag_a_converter($tag, $buffer); + $this->out($this->handleTag_a_converter($tag, $buffer), true); + } + } + + /** + * handle <a> tags parsing + * + * @param void + * @return void + */ + protected function handleTag_a_parser() + { + if (isset($this->parser->tagAttributes['title'])) { + $this->parser->tagAttributes['title'] = $this->decode($this->parser->tagAttributes['title']); + } else { + $this->parser->tagAttributes['title'] = null; + } + $this->parser->tagAttributes['href'] = $this->decode(trim($this->parser->tagAttributes['href'])); + } + + /** + * handle <a> tags conversion + * + * @param array $tag + * @param string $buffer + * @return string The markdownified link + */ + protected function handleTag_a_converter($tag, $buffer) + { + if (empty($tag['href']) && empty($tag['title'])) { + // empty links... testcase mania, who would possibly do anything like that?! + return '[' . $buffer . ']()'; + } + + if ($buffer == $tag['href'] && empty($tag['title'])) { + // <http://example.com> + return '<' . $buffer . '>'; + } + + $bufferDecoded = $this->decode(trim($buffer)); + if (substr($tag['href'], 0, 7) == 'mailto:' && 'mailto:' . $bufferDecoded == $tag['href']) { + if (is_null($tag['title'])) { + // <mail@example.com> + return '<' . $bufferDecoded . '>'; + } + // [mail@example.com][1] + // ... + // [1]: mailto:mail@example.com Title + $tag['href'] = 'mailto:' . $bufferDecoded; + } + + if ($this->linkPosition == self::LINK_IN_PARAGRAPH) { + return '[' . $buffer . '](' . $this->getLinkReference($tag) . ')'; + } + + // [This link][id] + foreach ($this->footnotes as $tag2) { + if ($tag2['href'] == $tag['href'] && $tag2['title'] === $tag['title']) { + $tag['linkID'] = $tag2['linkID']; + break; + } + } + if (!isset($tag['linkID'])) { + $tag['linkID'] = count($this->footnotes) + 1; + array_push($this->footnotes, $tag); + } + + return '[' . $buffer . '][' . $tag['linkID'] . ']'; + } + + /** + * handle <img /> tags + * + * @param void + * @return void + */ + protected function handleTag_img() + { + if (!$this->parser->isStartTag) { + return; // just to be sure this is really an empty tag... + } + + if (isset($this->parser->tagAttributes['title'])) { + $this->parser->tagAttributes['title'] = $this->decode($this->parser->tagAttributes['title']); + } else { + $this->parser->tagAttributes['title'] = null; + } + if (isset($this->parser->tagAttributes['alt'])) { + $this->parser->tagAttributes['alt'] = $this->decode($this->parser->tagAttributes['alt']); + } else { + $this->parser->tagAttributes['alt'] = null; + } + + if (empty($this->parser->tagAttributes['src'])) { + // support for "empty" images... dunno if this is really needed + // but there are some test cases which do that... + if (!empty($this->parser->tagAttributes['title'])) { + $this->parser->tagAttributes['title'] = ' ' . $this->parser->tagAttributes['title'] . ' '; + } + $this->out('![' . $this->parser->tagAttributes['alt'] . '](' . $this->parser->tagAttributes['title'] . ')', true); + + return; + } else { + $this->parser->tagAttributes['src'] = $this->decode($this->parser->tagAttributes['src']); + } + + $out = '![' . $this->parser->tagAttributes['alt'] . ']'; + if ($this->linkPosition == self::LINK_IN_PARAGRAPH) { + $out .= '(' . $this->parser->tagAttributes['src']; + if ($this->parser->tagAttributes['title']) { + $out .= ' "' . $this->parser->tagAttributes['title'] . '"'; + } + $out .= ')'; + $this->out($out, true); + return; + } + + // ![This image][id] + $link_id = false; + if (!empty($this->footnotes)) { + foreach ($this->footnotes as $tag) { + if ($tag['href'] == $this->parser->tagAttributes['src'] + && $tag['title'] === $this->parser->tagAttributes['title'] + ) { + $link_id = $tag['linkID']; + break; + } + } + } + if (!$link_id) { + $link_id = count($this->footnotes) + 1; + $tag = array( + 'href' => $this->parser->tagAttributes['src'], + 'linkID' => $link_id, + 'title' => $this->parser->tagAttributes['title'] + ); + array_push($this->footnotes, $tag); + } + $out .= '[' . $link_id . ']'; + + $this->out($out, true); + } + + /** + * handle <code> tags + * + * @param void + * @return void + */ + protected function handleTag_code() + { + if ($this->hasParent('pre')) { + // ignore code blocks inside <pre> + + return; + } + if ($this->parser->isStartTag) { + $this->buffer(); + } else { + $buffer = $this->unbuffer(); + // use as many backticks as needed + preg_match_all('#`+#', $buffer, $matches); + if (!empty($matches[0])) { + rsort($matches[0]); + + $ticks = '`'; + while (true) { + if (!in_array($ticks, $matches[0])) { + break; + } + $ticks .= '`'; + } + } else { + $ticks = '`'; + } + if ($buffer[0] == '`' || substr($buffer, -1) == '`') { + $buffer = ' ' . $buffer . ' '; + } + $this->out($ticks . $buffer . $ticks, true); + } + } + + /** + * handle <pre> tags + * + * @param void + * @return void + */ + protected function handleTag_pre() + { + if ($this->keepHTML && $this->parser->isStartTag) { + // check if a simple <code> follows + if (!preg_match('#^\s*<code\s*>#Us', $this->parser->html)) { + // this is no standard markdown code block + $this->handleTagToText(); + + return; + } + } + $this->indent(' '); + if (!$this->parser->isStartTag) { + $this->setLineBreaks(2); + } else { + $this->parser->html = ltrim($this->parser->html); + } + } + + /** + * handle <blockquote> tags + * + * @param void + * @return void + */ + protected function handleTag_blockquote() + { + $this->indent('> '); + } + + /** + * handle <ul> tags + * + * @param void + * @return void + */ + protected function handleTag_ul() + { + if ($this->parser->isStartTag) { + $this->stack(); + if (!$this->keepHTML && $this->lastClosedTag == $this->parser->tagName) { + $this->out("\n" . $this->indent . '<!-- -->' . "\n" . $this->indent . "\n" . $this->indent); + } + } else { + $this->unstack(); + if ($this->parent() != 'li' || preg_match('#^\s*(</li\s*>\s*<li\s*>\s*)?<(p|blockquote)\s*>#sU', $this->parser->html)) { + // dont make Markdown add unneeded paragraphs + $this->setLineBreaks(2); + } + } + } + + /** + * handle <ul> tags + * + * @param void + * @return void + */ + protected function handleTag_ol() + { + // same as above + $this->parser->tagAttributes['num'] = 0; + $this->handleTag_ul(); + } + + /** + * handle <li> tags + * + * @param void + * @return void + */ + protected function handleTag_li() + { + if ($this->parent() == 'ol') { + $parent =& $this->getStacked('ol'); + if ($this->parser->isStartTag) { + $parent['num']++; + $this->out(str_repeat(' ', 3 - strlen($parent['num'])) . $parent['num'] . '. ', true); + } + } else { + if ($this->parser->isStartTag) { + $this->out(' * ', true); + } + } + $this->indent(' ', false); + if (!$this->parser->isStartTag) { + $this->setLineBreaks(1); + } + } + + /** + * handle <hr /> tags + * + * @param void + * @return void + */ + protected function handleTag_hr() + { + if (!$this->parser->isStartTag) { + return; // just to be sure this really is an empty tag + } + $this->out('* * *', true); + $this->setLineBreaks(2); + } + + /** + * handle <br /> tags + * + * @param void + * @return void + */ + protected function handleTag_br() + { + $this->out(" \n" . $this->indent, true); + $this->parser->html = ltrim($this->parser->html); + } + + /** + * add current node to the stack + * this only stores the attributes + * + * @param void + * @return void + */ + protected function stack() + { + if (!isset($this->stack[$this->parser->tagName])) { + $this->stack[$this->parser->tagName] = array(); + } + array_push($this->stack[$this->parser->tagName], $this->parser->tagAttributes); + } + + /** + * remove current tag from stack + * + * @param void + * @return array + */ + protected function unstack() + { + if (!isset($this->stack[$this->parser->tagName]) || !is_array($this->stack[$this->parser->tagName])) { + trigger_error('Trying to unstack from empty stack. This must not happen.', E_USER_ERROR); + } + + return array_pop($this->stack[$this->parser->tagName]); + } + + /** + * get last stacked element of type $tagName + * + * @param string $tagName + * @return array + */ + protected function &getStacked($tagName) + { + // no end() so it can be referenced + return $this->stack[$tagName][count($this->stack[$tagName]) - 1]; + } + + /** + * set number of line breaks before next start tag + * + * @param int $number + * @return void + */ + protected function setLineBreaks($number) + { + if ($this->lineBreaks < $number) { + $this->lineBreaks = $number; + } + } + + /** + * buffer next parser output until unbuffer() is called + * + * @param void + * @return void + */ + protected function buffer() + { + array_push($this->buffer, ''); + } + + /** + * end current buffer and return buffered output + * + * @param void + * @return string + */ + protected function unbuffer() + { + return array_pop($this->buffer); + } + + /** + * append string to the correct var, either + * directly to $this->output or to the current + * buffers + * + * @param string $put + * @param boolean $nowrap + * @return void + */ + protected function out($put, $nowrap = false) + { + if (empty($put)) { + return; + } + if (!empty($this->buffer)) { + $this->buffer[count($this->buffer) - 1] .= $put; + } else { + if ($this->bodyWidth && !$this->parser->keepWhitespace) { // wrap lines + // get last line + $pos = strrpos($this->output, "\n"); + if ($pos === false) { + $line = $this->output; + } else { + $line = substr($this->output, $pos); + } + + if ($nowrap) { + if ($put[0] != "\n" && $this->strlen($line) + $this->strlen($put) > $this->bodyWidth) { + $this->output .= "\n" . $this->indent . $put; + } else { + $this->output .= $put; + } + + return; + } else { + $put .= "\n"; // make sure we get all lines in the while below + $lineLen = $this->strlen($line); + while ($pos = strpos($put, "\n")) { + $putLine = substr($put, 0, $pos + 1); + $put = substr($put, $pos + 1); + $putLen = $this->strlen($putLine); + if ($lineLen + $putLen < $this->bodyWidth) { + $this->output .= $putLine; + $lineLen = $putLen; + } else { + $split = preg_split('#^(.{0,' . ($this->bodyWidth - $lineLen) . '})\b#', $putLine, 2, PREG_SPLIT_OFFSET_CAPTURE | PREG_SPLIT_DELIM_CAPTURE); + $this->output .= rtrim($split[1][0]) . "\n" . $this->indent . $this->wordwrap(ltrim($split[2][0]), $this->bodyWidth, "\n" . $this->indent, false); + } + } + $this->output = substr($this->output, 0, -1); + + return; + } + } else { + $this->output .= $put; + } + } + } + + /** + * indent next output (start tag) or unindent (end tag) + * + * @param string $str indentation + * @param bool $output add indendation to output + * @return void + */ + protected function indent($str, $output = true) + { + if ($this->parser->isStartTag) { + $this->indent .= $str; + if ($output) { + $this->out($str, true); + } + } else { + $this->indent = substr($this->indent, 0, -strlen($str)); + } + } + + /** + * decode email addresses + * + * @author derernst@gmx.ch <http://www.php.net/manual/en/function.html-entity-decode.php#68536> + * @author Milian Wolff <http://milianw.de> + */ + protected function decode($text, $quote_style = ENT_QUOTES) + { + return htmlspecialchars_decode($text, $quote_style); + } + + /** + * callback for decode() which converts a hexadecimal entity to UTF-8 + * + * @param array $matches + * @return string UTF-8 encoded + */ + protected function _decode_hex($matches) + { + return $this->unichr(hexdec($matches[1])); + } + + /** + * callback for decode() which converts a numerical entity to UTF-8 + * + * @param array $matches + * @return string UTF-8 encoded + */ + protected function _decode_numeric($matches) + { + return $this->unichr($matches[1]); + } + + /** + * UTF-8 chr() which supports numeric entities + * + * @author grey - greywyvern - com <http://www.php.net/manual/en/function.chr.php#55978> + * @param array $matches + * @return string UTF-8 encoded + */ + protected function unichr($dec) + { + if ($dec < 128) { + $utf = chr($dec); + } elseif ($dec < 2048) { + $utf = chr(192 + (($dec - ($dec % 64)) / 64)); + $utf .= chr(128 + ($dec % 64)); + } else { + $utf = chr(224 + (($dec - ($dec % 4096)) / 4096)); + $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64)); + $utf .= chr(128 + ($dec % 64)); + } + + return $utf; + } + + /** + * UTF-8 strlen() + * + * @param string $str + * @return int + * + * @author dtorop 932 at hotmail dot com <http://www.php.net/manual/en/function.strlen.php#37975> + * @author Milian Wolff <http://milianw.de> + */ + protected function strlen($str) + { + if (function_exists('mb_strlen')) { + return mb_strlen($str, 'UTF-8'); + } else { + return preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $var_empty); + } + } + + /** + * wordwrap for utf8 encoded strings + * + * @param string $str + * @param integer $len + * @param string $what + * @return string + */ + protected function wordwrap($str, $width, $break, $cut = false) + { + if (!$cut) { + $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){1,' . $width . '}\b#'; + } else { + $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){' . $width . '}#'; + } + $return = ''; + while (preg_match($regexp, $str, $matches)) { + $string = $matches[0]; + $str = ltrim(substr($str, strlen($string))); + if (!$cut && isset($str[0]) && in_array($str[0], array('.', '!', ';', ':', '?', ','))) { + $string .= $str[0]; + $str = ltrim(substr($str, 1)); + } + $return .= $string . $break; + } + + return $return . ltrim($str); + } + + /** + * check if current node has a $tagName as parent (somewhere, not only the direct parent) + * + * @param string $tagName + * @return bool + */ + protected function hasParent($tagName) + { + return in_array($tagName, $this->parser->openTags); + } + + /** + * get tagName of direct parent tag + * + * @param void + * @return string $tagName + */ + protected function parent() + { + return end($this->parser->openTags); + } + + /** + * Trims whitespace in block-level elements, on the left side. + */ + protected function fixBlockElementSpacing() + { + if ($this->parser->isStartTag) { + $this->parser->html = ltrim($this->parser->html); + } + } + + /** + * Moves leading/trailing whitespace from inline elements outside of the + * element. This is to fix cases like `<strong> Text</strong>`, which if + * converted to `** strong**` would be incorrect Markdown. + * + * Examples: + * + * * leading: `<strong> Text</strong>` becomes ` <strong>Text</strong>` + * * trailing: `<strong>Text </strong>` becomes `<strong>Text</strong> ` + */ + protected function fixInlineElementSpacing() + { + if ($this->parser->isStartTag) { + // move spaces after the start element to before the element + if (preg_match('~^(\s+)~', $this->parser->html, $matches)) { + $this->out($matches[1]); + $this->parser->html = ltrim($this->parser->html, " \t\0\x0B"); + } + } else { + if (!empty($this->buffer)) { + $str =& $this->buffer[count($this->buffer) - 1]; + } else { + $str =& $this->output; + } + + // move spaces before the end element to after the element + if (preg_match('~(\s+)$~', $str, $matches)) { + $str = rtrim($str, " \t\0\x0B"); + $this->parser->html = $matches[1] . $this->parser->html; + } + } + } + + /** + * Resetting the state forces the instance to behave as a fresh instance. + * Ideal for running within a loop where you want to maintain a single instance. + */ + protected function resetState() + { + $this->notConverted = array(); + $this->skipConversion = false; + $this->buffer = array(); + $this->indent = ''; + $this->stack = array(); + $this->lineBreaks = 0; + $this->lastClosedTag = ''; + $this->lastWasBlockTag = false; + $this->footnotes = array(); + } +} diff --git a/vendor/pixel418/markdownify/src/ConverterExtra.php b/vendor/pixel418/markdownify/src/ConverterExtra.php new file mode 100644 index 000000000..733955448 --- /dev/null +++ b/vendor/pixel418/markdownify/src/ConverterExtra.php @@ -0,0 +1,573 @@ +<?php + +/* This file is part of the Markdownify project, which is under LGPL license */ + +namespace Markdownify; + +class ConverterExtra extends Converter +{ + + /** + * table data, including rows with content and the maximum width of each col + * + * @var array + */ + protected $table = array(); + + /** + * current col + * + * @var int + */ + protected $col = -1; + + /** + * current row + * + * @var int + */ + protected $row = 0; + + /** + * constructor, see Markdownify::Markdownify() for more information + */ + public function __construct($linksAfterEachParagraph = self::LINK_AFTER_CONTENT, $bodyWidth = MDFY_BODYWIDTH, $keepHTML = MDFY_KEEPHTML) + { + parent::__construct($linksAfterEachParagraph, $bodyWidth, $keepHTML); + + // new markdownable tags & attributes + // header ids: # foo {bar} + $this->isMarkdownable['h1']['id'] = 'optional'; + $this->isMarkdownable['h1']['class'] = 'optional'; + $this->isMarkdownable['h2']['id'] = 'optional'; + $this->isMarkdownable['h2']['class'] = 'optional'; + $this->isMarkdownable['h3']['id'] = 'optional'; + $this->isMarkdownable['h3']['class'] = 'optional'; + $this->isMarkdownable['h4']['id'] = 'optional'; + $this->isMarkdownable['h4']['class'] = 'optional'; + $this->isMarkdownable['h5']['id'] = 'optional'; + $this->isMarkdownable['h5']['class'] = 'optional'; + $this->isMarkdownable['h6']['id'] = 'optional'; + $this->isMarkdownable['h6']['class'] = 'optional'; + // tables + $this->isMarkdownable['table'] = array(); + $this->isMarkdownable['th'] = array( + 'align' => 'optional', + ); + $this->isMarkdownable['td'] = array( + 'align' => 'optional', + ); + $this->isMarkdownable['tr'] = array(); + array_push($this->ignore, 'thead'); + array_push($this->ignore, 'tbody'); + array_push($this->ignore, 'tfoot'); + // definition lists + $this->isMarkdownable['dl'] = array(); + $this->isMarkdownable['dd'] = array(); + $this->isMarkdownable['dt'] = array(); + // link class + $this->isMarkdownable['a']['id'] = 'optional'; + $this->isMarkdownable['a']['class'] = 'optional'; + // footnotes + $this->isMarkdownable['fnref'] = array( + 'target' => 'required', + ); + $this->isMarkdownable['footnotes'] = array(); + $this->isMarkdownable['fn'] = array( + 'name' => 'required', + ); + $this->parser->blockElements['fnref'] = false; + $this->parser->blockElements['fn'] = true; + $this->parser->blockElements['footnotes'] = true; + // abbr + $this->isMarkdownable['abbr'] = array( + 'title' => 'required', + ); + // build RegEx lookahead to decide wether table can pe parsed or not + $inlineTags = array_keys($this->parser->blockElements, false); + $colContents = '(?:[^<]|<(?:' . implode('|', $inlineTags) . '|[^a-z]))*'; + $this->tableLookaheadHeader = '{ + ^\s*(?:<thead\s*>)?\s* # open optional thead + <tr\s*>\s*(?: # start required row with headers + <th(?:\s+align=("|\')(?:left|center|right)\1)?\s*> # header with optional align + \s*' . $colContents . '\s* # contents + </th>\s* # close header + )+</tr> # close row with headers + \s*(?:</thead>)? # close optional thead + }sxi'; + $this->tdSubstitute = '\s*' . $colContents . '\s* # contents + </td>\s*'; + $this->tableLookaheadBody = '{ + \s*(?:<tbody\s*>)?\s* # open optional tbody + (?:<tr\s*>\s* # start row + %s # cols to be substituted + </tr>)+ # close row + \s*(?:</tbody>)? # close optional tbody + \s*</table> # close table + }sxi'; + } + + /** + * handle header tags (<h1> - <h6>) + * + * @param int $level 1-6 + * @return void + */ + protected function handleHeader($level) + { + if ($this->parser->isStartTag) { + $this->parser->tagAttributes['cssSelector'] = $this->getCurrentCssSelector(); + $this->stack(); + } else { + $tag = $this->unstack(); + if (!empty($tag['cssSelector'])) { + // {#id.class} + $this->out(' {' . $tag['cssSelector'] . '}'); + } + } + parent::handleHeader($level); + } + + /** + * handle <a> tags parsing + * + * @param void + * @return void + */ + protected function handleTag_a_parser() + { + parent::handleTag_a_parser(); + $this->parser->tagAttributes['cssSelector'] = $this->getCurrentCssSelector(); + } + + /** + * handle <a> tags conversion + * + * @param array $tag + * @param string $buffer + * @return string The markdownified link + */ + protected function handleTag_a_converter($tag, $buffer) + { + $output = parent::handleTag_a_converter($tag, $buffer); + if (!empty($tag['cssSelector'])) { + // [This link][id]{#id.class} + $output .= '{' . $tag['cssSelector'] . '}'; + } + + return $output; + } + + /** + * handle <abbr> tags + * + * @param void + * @return void + */ + protected function handleTag_abbr() + { + if ($this->parser->isStartTag) { + $this->stack(); + $this->buffer(); + } else { + $tag = $this->unstack(); + $tag['text'] = $this->unbuffer(); + $add = true; + foreach ($this->stack['abbr'] as $stacked) { + if ($stacked['text'] == $tag['text']) { + /** TODO: differing abbr definitions, i.e. different titles for same text **/ + $add = false; + break; + } + } + $this->out($tag['text']); + if ($add) { + array_push($this->stack['abbr'], $tag); + } + } + } + + /** + * flush stacked abbr tags + * + * @param void + * @return void + */ + protected function flushStacked_abbr() + { + $out = array(); + foreach ($this->stack['abbr'] as $k => $tag) { + if (!isset($tag['unstacked'])) { + array_push($out, ' *[' . $tag['text'] . ']: ' . $tag['title']); + $tag['unstacked'] = true; + $this->stack['abbr'][$k] = $tag; + } + } + if (!empty($out)) { + $this->out("\n\n" . implode("\n", $out)); + } + } + + /** + * handle <table> tags + * + * @param void + * @return void + */ + protected function handleTag_table() + { + if ($this->parser->isStartTag) { + // check if upcoming table can be converted + if ($this->keepHTML) { + if (preg_match($this->tableLookaheadHeader, $this->parser->html, $matches)) { + // header seems good, now check body + // get align & number of cols + preg_match_all('#<th(?:\s+align=("|\')(left|right|center)\1)?\s*>#si', $matches[0], $cols); + $regEx = ''; + $i = 1; + $aligns = array(); + foreach ($cols[2] as $align) { + $align = strtolower($align); + array_push($aligns, $align); + if (empty($align)) { + $align = 'left'; // default value + } + $td = '\s+align=("|\')' . $align . '\\' . $i; + $i++; + if ($align == 'left') { + // look for empty align or left + $td = '(?:' . $td . ')?'; + } + $td = '<td' . $td . '\s*>'; + $regEx .= $td . $this->tdSubstitute; + } + $regEx = sprintf($this->tableLookaheadBody, $regEx); + if (preg_match($regEx, $this->parser->html, $matches, null, strlen($matches[0]))) { + // this is a markdownable table tag! + $this->table = array( + 'rows' => array(), + 'col_widths' => array(), + 'aligns' => $aligns, + ); + $this->row = 0; + } else { + // non markdownable table + $this->handleTagToText(); + } + } else { + // non markdownable table + $this->handleTagToText(); + } + } else { + $this->table = array( + 'rows' => array(), + 'col_widths' => array(), + 'aligns' => array(), + ); + $this->row = 0; + } + } else { + // finally build the table in Markdown Extra syntax + $separator = array(); + if (!isset($this->table['aligns'])) { + $this->table['aligns'] = array(); + } + // seperator with correct align identifiers + foreach ($this->table['aligns'] as $col => $align) { + if (!$this->keepHTML && !isset($this->table['col_widths'][$col])) { + break; + } + $left = ' '; + $right = ' '; + switch ($align) { + case 'left': + $left = ':'; + break; + case 'center': + $right = ':'; + $left = ':'; + case 'right': + $right = ':'; + break; + } + array_push($separator, $left . str_repeat('-', $this->table['col_widths'][$col]) . $right); + } + $separator = '|' . implode('|', $separator) . '|'; + + $rows = array(); + // add padding + array_walk_recursive($this->table['rows'], array(&$this, 'alignTdContent')); + $header = array_shift($this->table['rows']); + array_push($rows, '| ' . implode(' | ', $header) . ' |'); + array_push($rows, $separator); + foreach ($this->table['rows'] as $row) { + array_push($rows, '| ' . implode(' | ', $row) . ' |'); + } + $this->out(implode("\n" . $this->indent, $rows)); + $this->table = array(); + $this->setLineBreaks(2); + } + } + + /** + * properly pad content so it is aligned as whished + * should be used with array_walk_recursive on $this->table['rows'] + * + * @param string &$content + * @param int $col + * @return void + */ + protected function alignTdContent(&$content, $col) + { + if (!isset($this->table['aligns'][$col])) { + $this->table['aligns'][$col] = 'left'; + } + switch ($this->table['aligns'][$col]) { + default: + case 'left': + $content .= str_repeat(' ', $this->table['col_widths'][$col] - $this->strlen($content)); + break; + case 'right': + $content = str_repeat(' ', $this->table['col_widths'][$col] - $this->strlen($content)) . $content; + break; + case 'center': + $paddingNeeded = $this->table['col_widths'][$col] - $this->strlen($content); + $left = floor($paddingNeeded / 2); + $right = $paddingNeeded - $left; + $content = str_repeat(' ', $left) . $content . str_repeat(' ', $right); + break; + } + } + + /** + * handle <tr> tags + * + * @param void + * @return void + */ + protected function handleTag_tr() + { + if ($this->parser->isStartTag) { + $this->col = -1; + } else { + $this->row++; + } + } + + /** + * handle <td> tags + * + * @param void + * @return void + */ + protected function handleTag_td() + { + if ($this->parser->isStartTag) { + $this->col++; + if (!isset($this->table['col_widths'][$this->col])) { + $this->table['col_widths'][$this->col] = 0; + } + $this->buffer(); + } else { + $buffer = trim($this->unbuffer()); + if (!isset($this->table['col_widths'][$this->col])) { + $this->table['col_widths'][$this->col] = 0; + } + $this->table['col_widths'][$this->col] = max($this->table['col_widths'][$this->col], $this->strlen($buffer)); + $this->table['rows'][$this->row][$this->col] = $buffer; + } + } + + /** + * handle <th> tags + * + * @param void + * @return void + */ + protected function handleTag_th() + { + if (!$this->keepHTML && !isset($this->table['rows'][1]) && !isset($this->table['aligns'][$this->col + 1])) { + if (isset($this->parser->tagAttributes['align'])) { + $this->table['aligns'][$this->col + 1] = $this->parser->tagAttributes['align']; + } else { + $this->table['aligns'][$this->col + 1] = ''; + } + } + $this->handleTag_td(); + } + + /** + * handle <dl> tags + * + * @param void + * @return void + */ + protected function handleTag_dl() + { + if (!$this->parser->isStartTag) { + $this->setLineBreaks(2); + } + } + + /** + * handle <dt> tags + * + * @param void + * @return void + **/ + protected function handleTag_dt() + { + if (!$this->parser->isStartTag) { + $this->setLineBreaks(1); + } + } + + /** + * handle <dd> tags + * + * @param void + * @return void + */ + protected function handleTag_dd() + { + if ($this->parser->isStartTag) { + if (substr(ltrim($this->parser->html), 0, 3) == '<p>') { + // next comes a paragraph, so we'll need an extra line + $this->out("\n" . $this->indent); + } elseif (substr($this->output, -2) == "\n\n") { + $this->output = substr($this->output, 0, -1); + } + $this->out(': '); + $this->indent(' ', false); + } else { + // lookahead for next dt + if (substr(ltrim($this->parser->html), 0, 4) == '<dt>') { + $this->setLineBreaks(2); + } else { + $this->setLineBreaks(1); + } + $this->indent(' '); + } + } + + /** + * handle <fnref /> tags (custom footnote references, see markdownify_extra::parseString()) + * + * @param void + * @return void + */ + protected function handleTag_fnref() + { + $this->out('[^' . $this->parser->tagAttributes['target'] . ']'); + } + + /** + * handle <fn> tags (custom footnotes, see markdownify_extra::parseString() + * and markdownify_extra::_makeFootnotes()) + * + * @param void + * @return void + */ + protected function handleTag_fn() + { + if ($this->parser->isStartTag) { + $this->out('[^' . $this->parser->tagAttributes['name'] . ']:'); + $this->setLineBreaks(1); + } else { + $this->setLineBreaks(2); + } + $this->indent(' '); + } + + /** + * handle <footnotes> tag (custom footnotes, see markdownify_extra::parseString() + * and markdownify_extra::_makeFootnotes()) + * + * @param void + * @return void + */ + protected function handleTag_footnotes() + { + if (!$this->parser->isStartTag) { + $this->setLineBreaks(2); + } + } + + /** + * parse a HTML string, clean up footnotes prior + * + * @param string $HTML input + * @return string Markdown formatted output + */ + public function parseString($html) + { + /** TODO: custom markdown-extra options, e.g. titles & classes **/ + // <sup id="fnref:..."><a href"#fn..." rel="footnote">...</a></sup> + // => <fnref target="..." /> + $html = preg_replace('@<sup id="fnref:([^"]+)">\s*<a href="#fn:\1" rel="footnote">\s*\d+\s*</a>\s*</sup>@Us', '<fnref target="$1" />', $html); + // <div class="footnotes"> + // <hr /> + // <ol> + // + // <li id="fn:...">...</li> + // ... + // + // </ol> + // </div> + // => + // <footnotes> + // <fn name="...">...</fn> + // ... + // </footnotes> + $html = preg_replace_callback('#<div class="footnotes">\s*<hr />\s*<ol>\s*(.+)\s*</ol>\s*</div>#Us', array(&$this, '_makeFootnotes'), $html); + + return parent::parseString($html); + } + + /** + * replace HTML representation of footnotes with something more easily parsable + * + * @note this is a callback to be used in parseString() + * + * @param array $matches + * @return string + */ + protected function _makeFootnotes($matches) + { + // <li id="fn:1"> + // ... + // <a href="#fnref:block" rev="footnote">↩</a></p> + // </li> + // => <fn name="1">...</fn> + // remove footnote link + $fns = preg_replace('@\s*( \s*)?<a href="#fnref:[^"]+" rev="footnote"[^>]*>↩</a>\s*@s', '', $matches[1]); + // remove empty paragraph + $fns = preg_replace('@<p>\s*</p>@s', '', $fns); + // <li id="fn:1">...</li> -> <footnote nr="1">...</footnote> + $fns = str_replace('<li id="fn:', '<fn name="', $fns); + + $fns = '<footnotes>' . $fns . '</footnotes>'; + + return preg_replace('#</li>\s*(?=(?:<fn|</footnotes>))#s', '</fn>$1', $fns); + } + + /** + * handle <a> tags parsing + * + * @param void + * @return void + */ + protected function getCurrentCssSelector() + { + $cssSelector = ''; + if (isset($this->parser->tagAttributes['id'])) { + $cssSelector .= '#' . $this->decode($this->parser->tagAttributes['id']); + } + if (isset($this->parser->tagAttributes['class'])) { + $classes = explode(' ', $this->decode($this->parser->tagAttributes['class'])); + $classes = array_filter($classes); + $cssSelector .= '.' . join('.', $classes); + } + return $cssSelector; + } +} diff --git a/vendor/pixel418/markdownify/src/Parser.php b/vendor/pixel418/markdownify/src/Parser.php new file mode 100644 index 000000000..90fcdf9f8 --- /dev/null +++ b/vendor/pixel418/markdownify/src/Parser.php @@ -0,0 +1,564 @@ +<?php + +/* This file is part of the Markdownify project, which is under LGPL license */ + +namespace Markdownify; + +class Parser +{ + public static $skipWhitespace = true; + public static $a_ord; + public static $z_ord; + public static $special_ords; + + /** + * tags which are always empty (<br /> etc.) + * + * @var array<string> + */ + public $emptyTags = array( + 'br', + 'hr', + 'input', + 'img', + 'area', + 'link', + 'meta', + 'param', + ); + + /** + * tags with preformatted text + * whitespaces wont be touched in them + * + * @var array<string> + */ + public $preformattedTags = array( + 'script', + 'style', + 'pre', + 'code', + ); + + /** + * supress HTML tags inside preformatted tags (see above) + * + * @var bool + */ + public $noTagsInCode = false; + + /** + * html to be parsed + * + * @var string + */ + public $html = ''; + + /** + * node type: + * + * - tag (see isStartTag) + * - text (includes cdata) + * - comment + * - doctype + * - pi (processing instruction) + * + * @var string + */ + public $nodeType = ''; + + /** + * current node content, i.e. either a + * simple string (text node), or something like + * <tag attrib="value"...> + * + * @var string + */ + public $node = ''; + + /** + * wether current node is an opening tag (<a>) or not (</a>) + * set to NULL if current node is not a tag + * NOTE: empty tags (<br />) set this to true as well! + * + * @var bool | null + */ + public $isStartTag = null; + + /** + * wether current node is an empty tag (<br />) or not (<a></a>) + * + * @var bool | null + */ + public $isEmptyTag = null; + + /** + * tag name + * + * @var string | null + */ + public $tagName = ''; + + /** + * attributes of current tag + * + * @var array (attribName=>value) | null + */ + public $tagAttributes = null; + + /** + * whether or not the actual context is a inline context + * + * @var bool | null + */ + public $isInlineContext = null; + + /** + * whether the current tag is a block element + * + * @var bool | null + */ + public $isBlockElement = null; + + /** + * whether the previous tag (browser) is a block element + * + * @var bool | null + */ + public $isNextToInlineContext = null; + + /** + * keep whitespace + * + * @var int + */ + public $keepWhitespace = 0; + + /** + * list of open tags + * count this to get current depth + * + * @var array + */ + public $openTags = array(); + + /** + * list of block elements + * + * @var array + * TODO: what shall we do with <del> and <ins> ?! + */ + public $blockElements = array( + // tag name => <bool> is block + // block elements + 'address' => true, + 'blockquote' => true, + 'center' => true, + 'del' => true, + 'dir' => true, + 'div' => true, + 'dl' => true, + 'fieldset' => true, + 'form' => true, + 'h1' => true, + 'h2' => true, + 'h3' => true, + 'h4' => true, + 'h5' => true, + 'h6' => true, + 'hr' => true, + 'ins' => true, + 'isindex' => true, + 'menu' => true, + 'noframes' => true, + 'noscript' => true, + 'ol' => true, + 'p' => true, + 'pre' => true, + 'table' => true, + 'ul' => true, + // set table elements and list items to block as well + 'thead' => true, + 'tbody' => true, + 'tfoot' => true, + 'td' => true, + 'tr' => true, + 'th' => true, + 'li' => true, + 'dd' => true, + 'dt' => true, + // header items and html / body as well + 'html' => true, + 'body' => true, + 'head' => true, + 'meta' => true, + 'link' => true, + 'style' => true, + 'title' => true, + // unfancy media tags, when indented should be rendered as block + 'map' => true, + 'object' => true, + 'param' => true, + 'embed' => true, + 'area' => true, + // inline elements + 'a' => false, + 'abbr' => false, + 'acronym' => false, + 'applet' => false, + 'b' => false, + 'basefont' => false, + 'bdo' => false, + 'big' => false, + 'br' => false, + 'button' => false, + 'cite' => false, + 'code' => false, + 'del' => false, + 'dfn' => false, + 'em' => false, + 'font' => false, + 'i' => false, + 'img' => false, + 'ins' => false, + 'input' => false, + 'iframe' => false, + 'kbd' => false, + 'label' => false, + 'q' => false, + 'samp' => false, + 'script' => false, + 'select' => false, + 'small' => false, + 'span' => false, + 'strong' => false, + 'sub' => false, + 'sup' => false, + 'textarea' => false, + 'tt' => false, + 'var' => false, + ); + + /** + * get next node, set $this->html prior! + * + * @param void + * @return bool + */ + public function nextNode() + { + if (empty($this->html)) { + // we are done with parsing the html string + + return false; + } + + if ($this->isStartTag && !$this->isEmptyTag) { + array_push($this->openTags, $this->tagName); + if (in_array($this->tagName, $this->preformattedTags)) { + // dont truncate whitespaces for <code> or <pre> contents + $this->keepWhitespace++; + } + } + + if ($this->html[0] == '<') { + $token = substr($this->html, 0, 9); + if (substr($token, 0, 2) == '<?') { + // xml prolog or other pi's + /** TODO **/ + // trigger_error('this might need some work', E_USER_NOTICE); + $pos = strpos($this->html, '>'); + $this->setNode('pi', $pos + 1); + + return true; + } + if (substr($token, 0, 4) == '<!--') { + // comment + $pos = strpos($this->html, '-->'); + if ($pos === false) { + // could not find a closing -->, use next gt instead + // this is firefox' behaviour + $pos = strpos($this->html, '>') + 1; + } else { + $pos += 3; + } + $this->setNode('comment', $pos); + + static::$skipWhitespace = true; + + return true; + } + if ($token == '<!DOCTYPE') { + // doctype + $this->setNode('doctype', strpos($this->html, '>') + 1); + + static::$skipWhitespace = true; + + return true; + } + if ($token == '<![CDATA[') { + // cdata, use text node + + // remove leading <![CDATA[ + $this->html = substr($this->html, 9); + + $this->setNode('text', strpos($this->html, ']]>') + 3); + + // remove trailing ]]> and trim + $this->node = substr($this->node, 0, -3); + $this->handleWhitespaces(); + + static::$skipWhitespace = true; + + return true; + } + if ($this->parseTag()) { + // seems to be a tag + // handle whitespaces + if ($this->isBlockElement) { + static::$skipWhitespace = true; + } else { + static::$skipWhitespace = false; + } + + return true; + } + } + if ($this->keepWhitespace) { + static::$skipWhitespace = false; + } + // when we get here it seems to be a text node + $pos = strpos($this->html, '<'); + if ($pos === false) { + $pos = strlen($this->html); + } + $this->setNode('text', $pos); + $this->handleWhitespaces(); + if (static::$skipWhitespace && $this->node == ' ') { + return $this->nextNode(); + } + $this->isInlineContext = true; + static::$skipWhitespace = false; + + return true; + } + + /** + * parse tag, set tag name and attributes, see if it's a closing tag and so forth... + * + * @param void + * @return bool + */ + protected function parseTag() + { + if (!isset(static::$a_ord)) { + static::$a_ord = ord('a'); + static::$z_ord = ord('z'); + static::$special_ords = array( + ord(':'), // for xml:lang + ord('-'), // for http-equiv + ); + } + + $tagName = ''; + + $pos = 1; + $isStartTag = $this->html[$pos] != '/'; + if (!$isStartTag) { + $pos++; + } + // get tagName + while (isset($this->html[$pos])) { + $pos_ord = ord(strtolower($this->html[$pos])); + if (($pos_ord >= static::$a_ord && $pos_ord <= static::$z_ord) || (!empty($tagName) && is_numeric($this->html[$pos]))) { + $tagName .= $this->html[$pos]; + $pos++; + } else { + $pos--; + break; + } + } + + $tagName = strtolower($tagName); + if (empty($tagName) || !isset($this->blockElements[$tagName])) { + // something went wrong => invalid tag + $this->invalidTag(); + + return false; + } + if ($this->noTagsInCode && end($this->openTags) == 'code' && !($tagName == 'code' && !$isStartTag)) { + // we supress all HTML tags inside code tags + $this->invalidTag(); + + return false; + } + + // get tag attributes + /** TODO: in html 4 attributes do not need to be quoted **/ + $isEmptyTag = false; + $attributes = array(); + $currAttrib = ''; + while (isset($this->html[$pos + 1])) { + $pos++; + // close tag + if ($this->html[$pos] == '>' || $this->html[$pos] . $this->html[$pos + 1] == '/>') { + if ($this->html[$pos] == '/') { + $isEmptyTag = true; + $pos++; + } + break; + } + + $pos_ord = ord(strtolower($this->html[$pos])); + if (($pos_ord >= static::$a_ord && $pos_ord <= static::$z_ord) || in_array($pos_ord, static::$special_ords)) { + // attribute name + $currAttrib .= $this->html[$pos]; + } elseif (in_array($this->html[$pos], array(' ', "\t", "\n"))) { + // drop whitespace + } elseif (in_array($this->html[$pos] . $this->html[$pos + 1], array('="', "='"))) { + // get attribute value + $pos++; + $await = $this->html[$pos]; // single or double quote + $pos++; + $value = ''; + while (isset($this->html[$pos]) && $this->html[$pos] != $await) { + $value .= $this->html[$pos]; + $pos++; + } + $attributes[$currAttrib] = $value; + $currAttrib = ''; + } else { + $this->invalidTag(); + + return false; + } + } + if ($this->html[$pos] != '>') { + $this->invalidTag(); + + return false; + } + + if (!empty($currAttrib)) { + // html 4 allows something like <option selected> instead of <option selected="selected"> + $attributes[$currAttrib] = $currAttrib; + } + if (!$isStartTag) { + if (!empty($attributes) || $tagName != end($this->openTags)) { + // end tags must not contain any attributes + // or maybe we did not expect a different tag to be closed + $this->invalidTag(); + + return false; + } + array_pop($this->openTags); + if (in_array($tagName, $this->preformattedTags)) { + $this->keepWhitespace--; + } + } + $pos++; + $this->node = substr($this->html, 0, $pos); + $this->html = substr($this->html, $pos); + $this->tagName = $tagName; + $this->tagAttributes = $attributes; + $this->isStartTag = $isStartTag; + $this->isEmptyTag = $isEmptyTag || in_array($tagName, $this->emptyTags); + if ($this->isEmptyTag) { + // might be not well formed + $this->node = preg_replace('# */? *>$#', ' />', $this->node); + } + $this->nodeType = 'tag'; + $this->isBlockElement = $this->blockElements[$tagName]; + $this->isNextToInlineContext = $isStartTag && $this->isInlineContext; + $this->isInlineContext = !$this->isBlockElement; + return true; + } + + /** + * handle invalid tags + * + * @param void + * @return void + */ + protected function invalidTag() + { + $this->html = substr_replace($this->html, '<', 0, 1); + } + + /** + * update all vars and make $this->html shorter + * + * @param string $type see description for $this->nodeType + * @param int $pos to which position shall we cut? + * @return void + */ + protected function setNode($type, $pos) + { + if ($this->nodeType == 'tag') { + // set tag specific vars to null + // $type == tag should not be called here + // see this::parseTag() for more + $this->tagName = null; + $this->tagAttributes = null; + $this->isStartTag = null; + $this->isEmptyTag = null; + $this->isBlockElement = null; + + } + $this->nodeType = $type; + $this->node = substr($this->html, 0, $pos); + $this->html = substr($this->html, $pos); + } + + /** + * check if $this->html begins with $str + * + * @param string $str + * @return bool + */ + protected function match($str) + { + return substr($this->html, 0, strlen($str)) == $str; + } + + /** + * truncate whitespaces + * + * @param void + * @return void + */ + protected function handleWhitespaces() + { + if ($this->keepWhitespace) { + // <pre> or <code> before... + + return; + } + // truncate multiple whitespaces to a single one + $this->node = preg_replace('#\s+#s', ' ', $this->node); + } + + /** + * normalize self::node + * + * @param void + * @return void + */ + protected function normalizeNode() + { + $this->node = '<'; + if (!$this->isStartTag) { + $this->node .= '/' . $this->tagName . '>'; + + return; + } + $this->node .= $this->tagName; + foreach ($this->tagAttributes as $name => $value) { + $this->node .= ' ' . $name . '="' . str_replace('"', '"', $value) . '"'; + } + if ($this->isEmptyTag) { + $this->node .= ' /'; + } + $this->node .= '>'; + } +} diff --git a/view/es-es/hmessages.po b/view/es-es/hmessages.po index f5f7372a4..9aef29eb0 100644 --- a/view/es-es/hmessages.po +++ b/view/es-es/hmessages.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: Redmatrix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-24 00:05-0800\n" -"PO-Revision-Date: 2017-02-26 06:51+0000\n" +"POT-Creation-Date: 2017-03-03 00:05-0800\n" +"PO-Revision-Date: 2017-03-04 10:57+0000\n" "Last-Translator: Manuel Jiménez Friaza <mjfriaza@openmailbox.org>\n" "Language-Team: Spanish (Spain) (http://www.transifex.com/Friendica/red-matrix/language/es_ES/)\n" "MIME-Version: 1.0\n" @@ -94,16 +94,16 @@ msgid "Special - Group Repository" msgstr "Especial - Repositorio de grupo" #: ../../Zotlabs/Access/PermissionRoles.php:270 -#: ../../Zotlabs/Module/Register.php:213 ../../Zotlabs/Module/Connedit.php:879 +#: ../../Zotlabs/Module/Register.php:213 ../../Zotlabs/Module/Connedit.php:925 #: ../../Zotlabs/Module/New_channel.php:132 -#: ../../Zotlabs/Module/Profiles.php:797 +#: ../../Zotlabs/Module/Profiles.php:798 #: ../../Zotlabs/Module/Settings/Channel.php:463 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1148 #: ../../extend/addon/addon/cdav/cdav.php:277 #: ../../extend/addon/addon/cdav/cdav.php:284 ../../include/selectors.php:49 #: ../../include/selectors.php:66 ../../include/selectors.php:104 -#: ../../include/selectors.php:140 ../../include/permissions.php:949 -#: ../../include/connections.php:675 ../../include/connections.php:682 +#: ../../include/selectors.php:140 ../../include/connections.php:675 +#: ../../include/connections.php:682 ../../include/permissions.php:949 msgid "Other" msgstr "Otro" @@ -188,7 +188,7 @@ msgstr "Se puede administrar mi canal" msgid "parent" msgstr "padre" -#: ../../Zotlabs/Storage/Browser.php:130 ../../include/text.php:2695 +#: ../../Zotlabs/Storage/Browser.php:130 ../../include/text.php:2700 msgid "Collection" msgstr "Colección" @@ -219,7 +219,7 @@ msgstr "Programar bandeja de salida" #: ../../extend/addon/addon/cdav/Mod_Cdav.php:745 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:746 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:753 -#: ../../include/widgets.php:1700 ../../include/conversation.php:1177 +#: ../../include/widgets.php:1757 ../../include/conversation.php:1177 msgid "Unknown" msgstr "Desconocido" @@ -236,35 +236,35 @@ msgstr "Total" msgid "Shared" msgstr "Compartido" -#: ../../Zotlabs/Storage/Browser.php:228 ../../Zotlabs/Storage/Browser.php:327 -#: ../../Zotlabs/Module/Menu.php:118 ../../Zotlabs/Module/Connedit.php:882 +#: ../../Zotlabs/Storage/Browser.php:228 ../../Zotlabs/Storage/Browser.php:330 +#: ../../Zotlabs/Module/Menu.php:118 ../../Zotlabs/Module/Connedit.php:928 #: ../../Zotlabs/Module/New_channel.php:147 #: ../../Zotlabs/Module/Webpages.php:243 ../../Zotlabs/Module/Blocks.php:159 -#: ../../Zotlabs/Module/Layouts.php:184 ../../Zotlabs/Module/Profiles.php:800 +#: ../../Zotlabs/Module/Layouts.php:184 ../../Zotlabs/Module/Profiles.php:801 #: ../../extend/addon/addon/cdav/include/widgets.php:127 #: ../../extend/addon/addon/cdav/include/widgets.php:164 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1151 msgid "Create" msgstr "Crear" -#: ../../Zotlabs/Storage/Browser.php:229 ../../Zotlabs/Storage/Browser.php:329 +#: ../../Zotlabs/Storage/Browser.php:229 ../../Zotlabs/Storage/Browser.php:332 #: ../../Zotlabs/Module/Cover_photo.php:357 -#: ../../Zotlabs/Module/Profile_photo.php:412 #: ../../Zotlabs/Module/Photos.php:811 ../../Zotlabs/Module/Photos.php:1368 +#: ../../Zotlabs/Module/Profile_photo.php:421 #: ../../Zotlabs/Module/Embedphotos.php:157 #: ../../extend/addon/addon/cdav/include/widgets.php:132 #: ../../extend/addon/addon/cdav/include/widgets.php:168 -#: ../../include/widgets.php:1713 +#: ../../include/widgets.php:1770 msgid "Upload" msgstr "Subir" #: ../../Zotlabs/Storage/Browser.php:233 #: ../../Zotlabs/Module/Admin/Channels.php:159 -#: ../../Zotlabs/Module/Connedit.php:867 -#: ../../Zotlabs/Module/Sharedwithme.php:99 ../../Zotlabs/Module/Wiki.php:170 +#: ../../Zotlabs/Module/Connedit.php:913 +#: ../../Zotlabs/Module/Sharedwithme.php:99 #: ../../Zotlabs/Module/Settings/Oauth.php:89 #: ../../Zotlabs/Module/Settings/Oauth.php:115 -#: ../../Zotlabs/Module/Chat.php:248 +#: ../../Zotlabs/Module/Wiki.php:171 ../../Zotlabs/Module/Chat.php:248 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1136 #: ../../extend/addon/addon/rendezvous/rendezvous.php:172 #: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:156 @@ -272,13 +272,13 @@ msgstr "Subir" msgid "Name" msgstr "Nombre" -#: ../../Zotlabs/Storage/Browser.php:234 ../../Zotlabs/Module/Wiki.php:171 +#: ../../Zotlabs/Storage/Browser.php:234 ../../Zotlabs/Module/Wiki.php:172 #: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:157 msgid "Type" msgstr "Tipo" #: ../../Zotlabs/Storage/Browser.php:235 -#: ../../Zotlabs/Module/Sharedwithme.php:101 ../../include/text.php:1408 +#: ../../Zotlabs/Module/Sharedwithme.php:101 ../../include/text.php:1414 msgid "Size" msgstr "Tamaño" @@ -296,17 +296,17 @@ msgstr "Última modificación" #: ../../Zotlabs/Module/Editwebpage.php:145 ../../Zotlabs/Module/Menu.php:112 #: ../../Zotlabs/Module/Editpost.php:85 ../../Zotlabs/Module/Webpages.php:244 #: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Layouts.php:192 -#: ../../Zotlabs/Module/Wiki.php:163 ../../Zotlabs/Module/Wiki.php:273 #: ../../Zotlabs/Module/Settings/Oauth.php:149 -#: ../../Zotlabs/Module/Thing.php:260 ../../Zotlabs/Lib/ThreadItem.php:106 +#: ../../Zotlabs/Module/Thing.php:260 ../../Zotlabs/Module/Wiki.php:164 +#: ../../Zotlabs/Module/Wiki.php:271 ../../Zotlabs/Lib/ThreadItem.php:106 #: ../../Zotlabs/Lib/Apps.php:357 #: ../../extend/addon/addon/cdav/include/widgets.php:125 #: ../../extend/addon/addon/cdav/include/widgets.php:161 #: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:149 #: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:251 -#: ../../include/channel.php:1044 ../../include/channel.php:1048 #: ../../include/page_widgets.php:9 ../../include/page_widgets.php:39 -#: ../../include/menu.php:113 +#: ../../include/menu.php:113 ../../include/channel.php:1044 +#: ../../include/channel.php:1048 msgid "Edit" msgstr "Editar" @@ -318,10 +318,10 @@ msgstr "Editar" #: ../../Zotlabs/Module/Admin/Channels.php:149 #: ../../Zotlabs/Module/Editlayout.php:137 #: ../../Zotlabs/Module/Editwebpage.php:170 -#: ../../Zotlabs/Module/Connedit.php:626 ../../Zotlabs/Module/Connedit.php:884 -#: ../../Zotlabs/Module/Group.php:177 ../../Zotlabs/Module/Webpages.php:246 -#: ../../Zotlabs/Module/Blocks.php:162 ../../Zotlabs/Module/Photos.php:1174 -#: ../../Zotlabs/Module/Profiles.php:802 +#: ../../Zotlabs/Module/Connedit.php:661 ../../Zotlabs/Module/Connedit.php:930 +#: ../../Zotlabs/Module/Photos.php:1174 ../../Zotlabs/Module/Group.php:177 +#: ../../Zotlabs/Module/Webpages.php:246 ../../Zotlabs/Module/Blocks.php:162 +#: ../../Zotlabs/Module/Profiles.php:803 #: ../../Zotlabs/Module/Settings/Oauth.php:150 #: ../../Zotlabs/Module/Thing.php:261 ../../Zotlabs/Lib/ThreadItem.php:126 #: ../../Zotlabs/Lib/Apps.php:358 @@ -345,15 +345,22 @@ msgstr "Está usando %1$s de %2$s que tiene a su disposición para ficheros. (%3 msgid "WARNING:" msgstr "ATENCIÓN: " -#: ../../Zotlabs/Storage/Browser.php:326 +#: ../../Zotlabs/Storage/Browser.php:325 +msgid "" +"Please use DAV to upload large (video, audio) files.<br>See <a class=\"zrl\"" +" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop " +"Clients</a>" +msgstr "Por favor, use DAV para subir ficheros de gran tamaño (vídeo, audio).<br>Mire en <a class=\"zrl\" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop Clients</a>" + +#: ../../Zotlabs/Storage/Browser.php:329 msgid "Create new folder" msgstr "Crear nueva carpeta" -#: ../../Zotlabs/Storage/Browser.php:328 +#: ../../Zotlabs/Storage/Browser.php:331 msgid "Upload file" msgstr "Subir fichero" -#: ../../Zotlabs/Storage/Browser.php:341 +#: ../../Zotlabs/Storage/Browser.php:345 msgid "Drop files here to immediately upload" msgstr "Arrastre los ficheros aquí para subirlos de forma inmediata" @@ -369,7 +376,7 @@ msgstr "Arrastre los ficheros aquí para subirlos de forma inmediata" msgid "Permission denied" msgstr "Permiso denegado" -#: ../../Zotlabs/Web/WebServer.php:128 ../../Zotlabs/Web/Router.php:67 +#: ../../Zotlabs/Web/WebServer.php:128 #: ../../Zotlabs/Module/Achievements.php:34 ../../Zotlabs/Module/Appman.php:82 #: ../../Zotlabs/Module/Register.php:77 ../../Zotlabs/Module/Authtest.php:16 #: ../../Zotlabs/Module/Bookmarks.php:61 ../../Zotlabs/Module/Editblock.php:67 @@ -388,7 +395,7 @@ msgstr "Permiso denegado" #: ../../Zotlabs/Module/Events.php:271 ../../Zotlabs/Module/Filestorage.php:23 #: ../../Zotlabs/Module/Filestorage.php:78 #: ../../Zotlabs/Module/Filestorage.php:93 -#: ../../Zotlabs/Module/Filestorage.php:120 +#: ../../Zotlabs/Module/Filestorage.php:120 ../../Zotlabs/Module/Photos.php:73 #: ../../Zotlabs/Module/Settings.php:59 ../../Zotlabs/Module/Group.php:13 #: ../../Zotlabs/Module/Mail.php:164 ../../Zotlabs/Module/Block.php:26 #: ../../Zotlabs/Module/Block.php:76 ../../Zotlabs/Module/Manage.php:10 @@ -404,25 +411,24 @@ msgstr "Permiso denegado" #: ../../Zotlabs/Module/Blocks.php:80 ../../Zotlabs/Module/Layouts.php:71 #: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89 #: ../../Zotlabs/Module/Rate.php:113 -#: ../../Zotlabs/Module/Profile_photo.php:274 -#: ../../Zotlabs/Module/Profile_photo.php:287 +#: ../../Zotlabs/Module/Profile_photo.php:278 +#: ../../Zotlabs/Module/Profile_photo.php:291 #: ../../Zotlabs/Module/Like.php:181 ../../Zotlabs/Module/Common.php:39 #: ../../Zotlabs/Module/Channel.php:115 ../../Zotlabs/Module/Channel.php:245 #: ../../Zotlabs/Module/Channel.php:285 ../../Zotlabs/Module/Mood.php:116 #: ../../Zotlabs/Module/Regmod.php:21 ../../Zotlabs/Module/Pdledit.php:29 #: ../../Zotlabs/Module/Profile.php:83 ../../Zotlabs/Module/Profile.php:100 -#: ../../Zotlabs/Module/Photos.php:73 ../../Zotlabs/Module/Profiles.php:198 -#: ../../Zotlabs/Module/Profiles.php:635 +#: ../../Zotlabs/Module/Viewsrc.php:18 #: ../../Zotlabs/Module/Service_limits.php:11 #: ../../Zotlabs/Module/Sharedwithme.php:11 #: ../../Zotlabs/Module/Sources.php:74 ../../Zotlabs/Module/Suggest.php:30 -#: ../../Zotlabs/Module/Wiki.php:49 ../../Zotlabs/Module/Wiki.php:214 -#: ../../Zotlabs/Module/Wiki.php:313 ../../Zotlabs/Module/Thing.php:274 -#: ../../Zotlabs/Module/Thing.php:294 ../../Zotlabs/Module/Thing.php:335 -#: ../../Zotlabs/Module/Setup.php:212 +#: ../../Zotlabs/Module/Profiles.php:198 ../../Zotlabs/Module/Profiles.php:635 +#: ../../Zotlabs/Module/Thing.php:274 ../../Zotlabs/Module/Thing.php:294 +#: ../../Zotlabs/Module/Thing.php:335 ../../Zotlabs/Module/Setup.php:212 #: ../../Zotlabs/Module/Viewconnections.php:28 #: ../../Zotlabs/Module/Viewconnections.php:33 -#: ../../Zotlabs/Module/Viewsrc.php:18 ../../Zotlabs/Module/Chat.php:98 +#: ../../Zotlabs/Module/Wiki.php:50 ../../Zotlabs/Module/Wiki.php:215 +#: ../../Zotlabs/Module/Wiki.php:311 ../../Zotlabs/Module/Chat.php:98 #: ../../Zotlabs/Module/Chat.php:103 ../../Zotlabs/Lib/Chatroom.php:137 #: ../../extend/addon/addon/friendica/dfrn_confirm.php:55 #: ../../extend/addon/addon/keepout/keepout.php:36 @@ -441,9 +447,9 @@ msgstr "Permiso denegado" msgid "Permission denied." msgstr "Acceso denegado." -#: ../../Zotlabs/Web/Router.php:152 ../../Zotlabs/Module/Page.php:94 +#: ../../Zotlabs/Web/Router.php:146 ../../Zotlabs/Module/Page.php:94 #: ../../Zotlabs/Module/Display.php:122 ../../Zotlabs/Module/Block.php:79 -#: ../../Zotlabs/Lib/NativeWikiPage.php:518 ../../include/help.php:66 +#: ../../Zotlabs/Lib/NativeWikiPage.php:518 ../../include/help.php:68 msgid "Page not found." msgstr "Página no encontrada." @@ -547,36 +553,37 @@ msgstr "Dirección (URL) donde adquirir la aplicación" #: ../../Zotlabs/Module/Admin/Logs.php:84 #: ../../Zotlabs/Module/Admin/Profs.php:157 #: ../../Zotlabs/Module/Admin/Security.php:104 -#: ../../Zotlabs/Module/Admin/Themes.php:156 #: ../../Zotlabs/Module/Admin/Account_edit.php:74 #: ../../Zotlabs/Module/Admin/Accounts.php:166 #: ../../Zotlabs/Module/Admin/Channels.php:147 -#: ../../Zotlabs/Module/Admin/Site.php:260 -#: ../../Zotlabs/Module/Admin/Plugins.php:433 -#: ../../Zotlabs/Module/Locs.php:121 ../../Zotlabs/Module/Connedit.php:847 -#: ../../Zotlabs/Module/Events.php:493 -#: ../../Zotlabs/Module/Filestorage.php:165 ../../Zotlabs/Module/Group.php:85 -#: ../../Zotlabs/Module/Mail.php:413 ../../Zotlabs/Module/Import_items.php:122 +#: ../../Zotlabs/Module/Admin/Site.php:268 +#: ../../Zotlabs/Module/Admin/Plugins.php:438 +#: ../../Zotlabs/Module/Admin/Themes.php:158 ../../Zotlabs/Module/Locs.php:121 +#: ../../Zotlabs/Module/Connedit.php:893 ../../Zotlabs/Module/Events.php:493 +#: ../../Zotlabs/Module/Filestorage.php:165 +#: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1053 +#: ../../Zotlabs/Module/Photos.php:1093 ../../Zotlabs/Module/Photos.php:1211 +#: ../../Zotlabs/Module/Group.php:85 ../../Zotlabs/Module/Mail.php:413 +#: ../../Zotlabs/Module/Import_items.php:122 #: ../../Zotlabs/Module/Mitem.php:243 ../../Zotlabs/Module/Cal.php:342 #: ../../Zotlabs/Module/Invite.php:149 ../../Zotlabs/Module/Poke.php:186 #: ../../Zotlabs/Module/Pconfig.php:107 ../../Zotlabs/Module/Rate.php:166 #: ../../Zotlabs/Module/Mood.php:139 ../../Zotlabs/Module/Pdledit.php:74 -#: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1053 -#: ../../Zotlabs/Module/Photos.php:1093 ../../Zotlabs/Module/Photos.php:1211 -#: ../../Zotlabs/Module/Profiles.php:726 ../../Zotlabs/Module/Sources.php:114 -#: ../../Zotlabs/Module/Sources.php:149 ../../Zotlabs/Module/Wiki.php:167 +#: ../../Zotlabs/Module/Sources.php:114 ../../Zotlabs/Module/Sources.php:149 +#: ../../Zotlabs/Module/Profiles.php:726 #: ../../Zotlabs/Module/Settings/Features.php:47 #: ../../Zotlabs/Module/Settings/Oauth.php:87 #: ../../Zotlabs/Module/Settings/Account.php:118 #: ../../Zotlabs/Module/Settings/Channel.php:476 -#: ../../Zotlabs/Module/Settings/Display.php:196 #: ../../Zotlabs/Module/Settings/Featured.php:50 #: ../../Zotlabs/Module/Settings/Permcats.php:112 #: ../../Zotlabs/Module/Settings/Tokens.php:168 +#: ../../Zotlabs/Module/Settings/Display.php:203 #: ../../Zotlabs/Module/Thing.php:320 ../../Zotlabs/Module/Thing.php:370 #: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:357 -#: ../../Zotlabs/Module/Chat.php:194 ../../Zotlabs/Module/Chat.php:239 -#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Lib/ThreadItem.php:731 +#: ../../Zotlabs/Module/Wiki.php:168 ../../Zotlabs/Module/Chat.php:194 +#: ../../Zotlabs/Module/Chat.php:239 ../../Zotlabs/Module/Xchan.php:15 +#: ../../Zotlabs/Lib/ThreadItem.php:731 #: ../../extend/addon/addon/chords/Mod_Chords.php:60 #: ../../extend/addon/addon/diaspora/diaspora.php:714 #: ../../extend/addon/addon/dwpost/dwpost.php:89 @@ -612,7 +619,7 @@ msgstr "Dirección (URL) donde adquirir la aplicación" #: ../../extend/addon/addon/statusnet/statusnet.php:380 #: ../../extend/addon/addon/statusnet/statusnet.php:432 #: ../../extend/addon/addon/statusnet/statusnet.php:899 -#: ../../extend/addon/addon/superblock/superblock.php:118 +#: ../../extend/addon/addon/superblock/superblock.php:120 #: ../../extend/addon/addon/twitter/twitter.php:217 #: ../../extend/addon/addon/twitter/twitter.php:259 #: ../../extend/addon/addon/visage/visage.php:170 @@ -750,7 +757,7 @@ msgid "yes" msgstr "sí" #: ../../Zotlabs/Module/Register.php:253 -#: ../../Zotlabs/Module/Admin/Site.php:261 +#: ../../Zotlabs/Module/Admin/Site.php:269 msgid "Registration" msgstr "Registro" @@ -980,10 +987,11 @@ msgstr "(No ha sido proporcionada ninguna instrucción específica por el propie msgid "Restricted or Premium Channel" msgstr "Canal premium o restringido" -#: ../../Zotlabs/Module/Admin.php:60 ../../Zotlabs/Module/Admin/Themes.php:69 -#: ../../Zotlabs/Module/Admin/Plugins.php:254 +#: ../../Zotlabs/Module/Admin.php:60 +#: ../../Zotlabs/Module/Admin/Plugins.php:259 +#: ../../Zotlabs/Module/Admin/Themes.php:72 #: ../../Zotlabs/Module/Filestorage.php:32 ../../Zotlabs/Module/Display.php:35 -#: ../../Zotlabs/Module/Thing.php:89 ../../Zotlabs/Module/Viewsrc.php:24 +#: ../../Zotlabs/Module/Viewsrc.php:24 ../../Zotlabs/Module/Thing.php:89 #: ../../include/items.php:3368 msgid "Item not found." msgstr "Elemento no encontrado." @@ -1026,13 +1034,13 @@ msgstr "Debe actualizar su software" #: ../../Zotlabs/Module/Admin.php:137 ../../Zotlabs/Module/Admin/Logs.php:82 #: ../../Zotlabs/Module/Admin/Security.php:86 -#: ../../Zotlabs/Module/Admin/Themes.php:120 -#: ../../Zotlabs/Module/Admin/Themes.php:154 #: ../../Zotlabs/Module/Admin/Accounts.php:164 #: ../../Zotlabs/Module/Admin/Channels.php:145 -#: ../../Zotlabs/Module/Admin/Site.php:258 -#: ../../Zotlabs/Module/Admin/Plugins.php:336 -#: ../../Zotlabs/Module/Admin/Plugins.php:431 +#: ../../Zotlabs/Module/Admin/Site.php:266 +#: ../../Zotlabs/Module/Admin/Plugins.php:341 +#: ../../Zotlabs/Module/Admin/Plugins.php:436 +#: ../../Zotlabs/Module/Admin/Themes.php:122 +#: ../../Zotlabs/Module/Admin/Themes.php:156 msgid "Administration" msgstr "Administración" @@ -1125,8 +1133,8 @@ msgstr "- seleccionar -" #: ../../Zotlabs/Module/Filer.php:53 ../../Zotlabs/Module/Admin/Profs.php:74 #: ../../Zotlabs/Module/Admin/Profs.php:94 ../../Zotlabs/Module/Rbmark.php:32 -#: ../../Zotlabs/Module/Rbmark.php:104 ../../include/text.php:1005 -#: ../../include/text.php:1017 ../../include/widgets.php:188 +#: ../../Zotlabs/Module/Rbmark.php:104 ../../include/widgets.php:188 +#: ../../include/text.php:1011 ../../include/text.php:1023 msgid "Save" msgstr "Guardar" @@ -1182,7 +1190,7 @@ msgstr "Nuevas" #: ../../Zotlabs/Module/Connections.php:92 #: ../../Zotlabs/Module/Connections.php:107 -#: ../../Zotlabs/Module/Connedit.php:674 ../../include/widgets.php:530 +#: ../../Zotlabs/Module/Connedit.php:720 ../../include/widgets.php:530 msgid "All" msgstr "Todos/as" @@ -1270,7 +1278,7 @@ msgid "Ignore connection" msgstr "Ignorar esta conexión" #: ../../Zotlabs/Module/Connections.php:287 -#: ../../Zotlabs/Module/Connedit.php:602 +#: ../../Zotlabs/Module/Connedit.php:637 msgid "Ignore" msgstr "Ignorar" @@ -1279,14 +1287,14 @@ msgid "Recent activity" msgstr "Actividad reciente" #: ../../Zotlabs/Module/Connections.php:312 ../../Zotlabs/Lib/Apps.php:216 -#: ../../include/text.php:934 ../../include/nav.php:203 +#: ../../include/nav.php:203 ../../include/text.php:940 msgid "Connections" msgstr "Conexiones" #: ../../Zotlabs/Module/Connections.php:316 ../../Zotlabs/Module/Search.php:44 -#: ../../Zotlabs/Lib/Apps.php:237 ../../include/acl_selectors.php:213 -#: ../../include/text.php:1004 ../../include/text.php:1016 -#: ../../include/widgets.php:302 ../../include/nav.php:180 +#: ../../Zotlabs/Lib/Apps.php:237 ../../include/widgets.php:302 +#: ../../include/acl_selectors.php:213 ../../include/nav.php:180 +#: ../../include/text.php:1010 ../../include/text.php:1022 msgid "Search" msgstr "Buscar" @@ -1320,17 +1328,17 @@ msgid "Image resize failed." msgstr "El ajuste del tamaño de la imagen ha fallado." #: ../../Zotlabs/Module/Cover_photo.php:168 -#: ../../Zotlabs/Module/Profile_photo.php:197 ../../include/photos.php:149 +#: ../../Zotlabs/Module/Profile_photo.php:201 ../../include/photos.php:149 msgid "Unable to process image" msgstr "No ha sido posible procesar la imagen" #: ../../Zotlabs/Module/Cover_photo.php:192 -#: ../../Zotlabs/Module/Profile_photo.php:232 +#: ../../Zotlabs/Module/Profile_photo.php:236 msgid "Image upload failed." msgstr "La carga de la imagen ha fallado." #: ../../Zotlabs/Module/Cover_photo.php:210 -#: ../../Zotlabs/Module/Profile_photo.php:251 +#: ../../Zotlabs/Module/Profile_photo.php:255 msgid "Unable to process image." msgstr "No ha sido posible procesar la imagen." @@ -1363,18 +1371,18 @@ msgstr "Imagen de portada del perfil" #: ../../Zotlabs/Module/Cover_photo.php:303 #: ../../Zotlabs/Module/Cover_photo.php:318 -#: ../../Zotlabs/Module/Profile_photo.php:312 -#: ../../Zotlabs/Module/Profile_photo.php:354 +#: ../../Zotlabs/Module/Profile_photo.php:316 +#: ../../Zotlabs/Module/Profile_photo.php:363 msgid "Photo not available." msgstr "Foto no disponible." #: ../../Zotlabs/Module/Cover_photo.php:354 -#: ../../Zotlabs/Module/Profile_photo.php:409 +#: ../../Zotlabs/Module/Profile_photo.php:418 msgid "Upload File:" msgstr "Subir fichero:" #: ../../Zotlabs/Module/Cover_photo.php:355 -#: ../../Zotlabs/Module/Profile_photo.php:410 +#: ../../Zotlabs/Module/Profile_photo.php:419 msgid "Select a profile:" msgstr "Seleccionar un perfil:" @@ -1383,33 +1391,33 @@ msgid "Upload Cover Photo" msgstr "Subir imagen de portada del perfil" #: ../../Zotlabs/Module/Cover_photo.php:361 -#: ../../Zotlabs/Module/Profile_photo.php:418 +#: ../../Zotlabs/Module/Profile_photo.php:427 #: ../../Zotlabs/Module/Settings/Channel.php:404 msgid "or" msgstr "o" #: ../../Zotlabs/Module/Cover_photo.php:361 -#: ../../Zotlabs/Module/Profile_photo.php:418 +#: ../../Zotlabs/Module/Profile_photo.php:427 msgid "skip this step" msgstr "Omitir este paso" #: ../../Zotlabs/Module/Cover_photo.php:361 -#: ../../Zotlabs/Module/Profile_photo.php:418 +#: ../../Zotlabs/Module/Profile_photo.php:427 msgid "select a photo from your photo albums" msgstr "Seleccione una foto de sus álbumes de fotos" #: ../../Zotlabs/Module/Cover_photo.php:377 -#: ../../Zotlabs/Module/Profile_photo.php:437 +#: ../../Zotlabs/Module/Profile_photo.php:446 msgid "Crop Image" msgstr "Recortar imagen" #: ../../Zotlabs/Module/Cover_photo.php:378 -#: ../../Zotlabs/Module/Profile_photo.php:438 +#: ../../Zotlabs/Module/Profile_photo.php:447 msgid "Please adjust the image cropping for optimum viewing." msgstr "Por favor ajuste el recorte de la imagen para una visión óptima." #: ../../Zotlabs/Module/Cover_photo.php:380 -#: ../../Zotlabs/Module/Profile_photo.php:440 +#: ../../Zotlabs/Module/Profile_photo.php:449 msgid "Done Editing" msgstr "Edición completada" @@ -1438,8 +1446,8 @@ msgstr "Gestionar las funcionalidades" msgid "Log settings updated." msgstr "Actualizado el informe de configuraciones." -#: ../../Zotlabs/Module/Admin/Logs.php:83 ../../include/widgets.php:1604 -#: ../../include/widgets.php:1614 +#: ../../Zotlabs/Module/Admin/Logs.php:83 ../../include/widgets.php:1661 +#: ../../include/widgets.php:1671 msgid "Logs" msgstr "Informes" @@ -1512,7 +1520,7 @@ msgstr "Definición del campo no encontrada" msgid "Edit Profile Field" msgstr "Modificar el campo del perfil" -#: ../../Zotlabs/Module/Admin/Profs.php:147 ../../include/widgets.php:1585 +#: ../../Zotlabs/Module/Admin/Profs.php:147 ../../include/widgets.php:1642 msgid "Profile Fields" msgstr "Campos del perfil" @@ -1564,7 +1572,7 @@ msgid "" "embedded content from that site is explicitly blocked." msgstr "El resto del contenido incrustado se filtrará, <strong>excepto</ strong> si el contenido incorporado desde ese sitio está bloqueado de forma explícita." -#: ../../Zotlabs/Module/Admin/Security.php:87 ../../include/widgets.php:1580 +#: ../../Zotlabs/Module/Admin/Security.php:87 ../../include/widgets.php:1637 msgid "Security" msgstr "Seguridad" @@ -1652,62 +1660,6 @@ msgstr "Un sitio por línea. El contenido incorporado se filtra de forma predete msgid "Block embedded HTML from these domains" msgstr "Bloquear contenido con HTML incorporado desde estos dominios" -#: ../../Zotlabs/Module/Admin/Themes.php:18 -msgid "Theme settings updated." -msgstr "Ajustes del tema actualizados." - -#: ../../Zotlabs/Module/Admin/Themes.php:58 -msgid "No themes found." -msgstr "No se han encontrado temas." - -#: ../../Zotlabs/Module/Admin/Themes.php:93 -#: ../../Zotlabs/Module/Admin/Plugins.php:305 -msgid "Disable" -msgstr "Desactivar" - -#: ../../Zotlabs/Module/Admin/Themes.php:95 -#: ../../Zotlabs/Module/Admin/Plugins.php:308 -msgid "Enable" -msgstr "Activar" - -#: ../../Zotlabs/Module/Admin/Themes.php:114 -msgid "Screenshot" -msgstr "Instantánea de pantalla" - -#: ../../Zotlabs/Module/Admin/Themes.php:121 -#: ../../Zotlabs/Module/Admin/Themes.php:155 ../../include/widgets.php:1583 -msgid "Themes" -msgstr "Temas" - -#: ../../Zotlabs/Module/Admin/Themes.php:122 -#: ../../Zotlabs/Module/Admin/Plugins.php:338 -msgid "Toggle" -msgstr "Cambiar" - -#: ../../Zotlabs/Module/Admin/Themes.php:123 -#: ../../Zotlabs/Module/Admin/Plugins.php:339 ../../Zotlabs/Lib/Apps.php:223 -#: ../../include/widgets.php:685 ../../include/nav.php:225 -msgid "Settings" -msgstr "Ajustes" - -#: ../../Zotlabs/Module/Admin/Themes.php:132 -#: ../../Zotlabs/Module/Admin/Plugins.php:346 -msgid "Author: " -msgstr "Autor:" - -#: ../../Zotlabs/Module/Admin/Themes.php:133 -#: ../../Zotlabs/Module/Admin/Plugins.php:347 -msgid "Maintainer: " -msgstr "Mantenedor:" - -#: ../../Zotlabs/Module/Admin/Themes.php:160 -msgid "[Experimental]" -msgstr "[Experimental]" - -#: ../../Zotlabs/Module/Admin/Themes.php:161 -msgid "[Unsupported]" -msgstr "[No soportado]" - #: ../../Zotlabs/Module/Admin/Account_edit.php:29 #, php-format msgid "Password changed for account %d." @@ -1779,7 +1731,7 @@ msgid "Account '%s' unblocked" msgstr "La cuenta '%s' ha sido desbloqueada" #: ../../Zotlabs/Module/Admin/Accounts.php:165 -#: ../../Zotlabs/Module/Admin/Accounts.php:178 ../../include/widgets.php:1578 +#: ../../Zotlabs/Module/Admin/Accounts.php:178 ../../include/widgets.php:1635 msgid "Accounts" msgstr "Cuentas" @@ -1798,13 +1750,13 @@ msgstr "Fecha de solicitud" #: ../../Zotlabs/Module/Admin/Accounts.php:169 #: ../../Zotlabs/Module/Admin/Accounts.php:181 -#: ../../Zotlabs/Module/Connedit.php:871 ../../Zotlabs/Module/Profiles.php:789 +#: ../../Zotlabs/Module/Connedit.php:917 ../../Zotlabs/Module/Profiles.php:790 #: ../../extend/addon/addon/redred/redred.php:107 #: ../../extend/addon/addon/rtof/rtof.php:93 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1140 #: ../../extend/addon/addon/openid/MysqlProvider.php:56 #: ../../extend/addon/addon/openid/MysqlProvider.php:57 -#: ../../include/network.php:2247 +#: ../../include/network.php:2270 msgid "Email" msgstr "Correo electrónico" @@ -1817,12 +1769,12 @@ msgid "Deny" msgstr "Rechazar" #: ../../Zotlabs/Module/Admin/Accounts.php:174 -#: ../../Zotlabs/Module/Connedit.php:594 +#: ../../Zotlabs/Module/Connedit.php:629 msgid "Block" msgstr "Bloquear" #: ../../Zotlabs/Module/Admin/Accounts.php:175 -#: ../../Zotlabs/Module/Connedit.php:594 +#: ../../Zotlabs/Module/Connedit.php:629 msgid "Unblock" msgstr "Desbloquear" @@ -1912,7 +1864,7 @@ msgstr "Código permitido al canal '%s'" msgid "Channel '%s' code disallowed" msgstr "Código no permitido al canal '%s'" -#: ../../Zotlabs/Module/Admin/Channels.php:146 ../../include/widgets.php:1579 +#: ../../Zotlabs/Module/Admin/Channels.php:146 ../../include/widgets.php:1636 msgid "Channels" msgstr "Canales" @@ -1942,8 +1894,8 @@ msgid "UID" msgstr "UID" #: ../../Zotlabs/Module/Admin/Channels.php:160 -#: ../../Zotlabs/Module/Locs.php:118 ../../Zotlabs/Module/Connedit.php:874 -#: ../../Zotlabs/Module/Profiles.php:502 ../../Zotlabs/Module/Profiles.php:792 +#: ../../Zotlabs/Module/Locs.php:118 ../../Zotlabs/Module/Connedit.php:920 +#: ../../Zotlabs/Module/Profiles.php:502 ../../Zotlabs/Module/Profiles.php:793 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1143 msgid "Address" msgstr "Dirección" @@ -2000,39 +1952,74 @@ msgstr "Marcar como exitosa (si la actualización se ha hecho manualmente)" msgid "Attempt to execute this update step automatically" msgstr "Intentar ejecutar este paso de actualización automáticamente" +#: ../../Zotlabs/Module/Admin/Queue.php:35 +msgid "Queue Statistics" +msgstr "Estadísticas de la cola" + +#: ../../Zotlabs/Module/Admin/Queue.php:36 +msgid "Total Entries" +msgstr "Total de entradas" + +#: ../../Zotlabs/Module/Admin/Queue.php:37 +msgid "Priority" +msgstr "Prioridad" + +#: ../../Zotlabs/Module/Admin/Queue.php:38 +msgid "Destination URL" +msgstr "Dirección de destino" + +#: ../../Zotlabs/Module/Admin/Queue.php:39 +msgid "Mark hub permanently offline" +msgstr "Marcar el servidor como permanentemente fuera de línea" + +#: ../../Zotlabs/Module/Admin/Queue.php:40 +msgid "Empty queue for this hub" +msgstr "Vaciar la cola para este servidor" + +#: ../../Zotlabs/Module/Admin/Queue.php:41 +msgid "Last known contact" +msgstr "Último contacto conocido" + #: ../../Zotlabs/Module/Admin/Site.php:133 msgid "Site settings updated." msgstr "Ajustes del sitio actualizados." -#: ../../Zotlabs/Module/Admin/Site.php:159 ../../include/text.php:2931 +#: ../../Zotlabs/Module/Admin/Site.php:159 ../../include/text.php:2936 msgid "Default" msgstr "Predeterminado" -#: ../../Zotlabs/Module/Admin/Site.php:169 -#: ../../Zotlabs/Module/Settings/Display.php:143 +#: ../../Zotlabs/Module/Admin/Site.php:170 +#: ../../Zotlabs/Module/Settings/Display.php:137 +#, php-format +msgid "%s - (Incompatible)" +msgstr "%s - (Incompatible)" + +#: ../../Zotlabs/Module/Admin/Site.php:177 +#: ../../Zotlabs/Module/Settings/Display.php:151 msgid "mobile" msgstr "móvil" -#: ../../Zotlabs/Module/Admin/Site.php:171 +#: ../../Zotlabs/Module/Admin/Site.php:179 msgid "experimental" msgstr "experimental" -#: ../../Zotlabs/Module/Admin/Site.php:173 +#: ../../Zotlabs/Module/Admin/Site.php:181 msgid "unsupported" msgstr "no soportado" -#: ../../Zotlabs/Module/Admin/Site.php:218 ../../Zotlabs/Module/Menu.php:100 +#: ../../Zotlabs/Module/Admin/Site.php:226 ../../Zotlabs/Module/Menu.php:100 #: ../../Zotlabs/Module/Menu.php:157 ../../Zotlabs/Module/Connedit.php:402 -#: ../../Zotlabs/Module/Connedit.php:740 ../../Zotlabs/Module/Events.php:470 +#: ../../Zotlabs/Module/Connedit.php:786 ../../Zotlabs/Module/Events.php:470 #: ../../Zotlabs/Module/Events.php:471 #: ../../Zotlabs/Module/Filestorage.php:160 -#: ../../Zotlabs/Module/Filestorage.php:168 ../../Zotlabs/Module/Mitem.php:162 +#: ../../Zotlabs/Module/Filestorage.php:168 +#: ../../Zotlabs/Module/Photos.php:652 ../../Zotlabs/Module/Mitem.php:162 #: ../../Zotlabs/Module/Mitem.php:163 ../../Zotlabs/Module/Mitem.php:240 #: ../../Zotlabs/Module/Mitem.php:241 ../../Zotlabs/Module/Api.php:97 -#: ../../Zotlabs/Module/Photos.php:652 ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Removeme.php:63 ../../Zotlabs/Module/Wiki.php:178 +#: ../../Zotlabs/Module/Removeme.php:63 ../../Zotlabs/Module/Profiles.php:681 #: ../../Zotlabs/Module/Settings/Channel.php:294 #: ../../Zotlabs/Module/Settings/Display.php:103 +#: ../../Zotlabs/Module/Wiki.php:179 #: ../../extend/addon/addon/dwpost/dwpost.php:73 #: ../../extend/addon/addon/dwpost/dwpost.php:85 #: ../../extend/addon/addon/flattrwidget/flattrwidget.php:120 @@ -2085,21 +2072,22 @@ msgstr "no soportado" msgid "No" msgstr "No" -#: ../../Zotlabs/Module/Admin/Site.php:219 +#: ../../Zotlabs/Module/Admin/Site.php:227 msgid "Yes - with approval" msgstr "Sí - con aprobación" -#: ../../Zotlabs/Module/Admin/Site.php:220 ../../Zotlabs/Module/Menu.php:100 +#: ../../Zotlabs/Module/Admin/Site.php:228 ../../Zotlabs/Module/Menu.php:100 #: ../../Zotlabs/Module/Menu.php:157 ../../Zotlabs/Module/Connedit.php:402 #: ../../Zotlabs/Module/Events.php:470 ../../Zotlabs/Module/Events.php:471 #: ../../Zotlabs/Module/Filestorage.php:160 -#: ../../Zotlabs/Module/Filestorage.php:168 ../../Zotlabs/Module/Mitem.php:162 +#: ../../Zotlabs/Module/Filestorage.php:168 +#: ../../Zotlabs/Module/Photos.php:652 ../../Zotlabs/Module/Mitem.php:162 #: ../../Zotlabs/Module/Mitem.php:163 ../../Zotlabs/Module/Mitem.php:240 #: ../../Zotlabs/Module/Mitem.php:241 ../../Zotlabs/Module/Api.php:96 -#: ../../Zotlabs/Module/Photos.php:652 ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Removeme.php:63 ../../Zotlabs/Module/Wiki.php:178 +#: ../../Zotlabs/Module/Removeme.php:63 ../../Zotlabs/Module/Profiles.php:681 #: ../../Zotlabs/Module/Settings/Channel.php:294 #: ../../Zotlabs/Module/Settings/Display.php:103 +#: ../../Zotlabs/Module/Wiki.php:179 #: ../../extend/addon/addon/dwpost/dwpost.php:73 #: ../../extend/addon/addon/dwpost/dwpost.php:85 #: ../../extend/addon/addon/flattrwidget/flattrwidget.php:120 @@ -2152,427 +2140,458 @@ msgstr "Sí - con aprobación" msgid "Yes" msgstr "Sí" -#: ../../Zotlabs/Module/Admin/Site.php:225 +#: ../../Zotlabs/Module/Admin/Site.php:233 msgid "My site is not a public server" msgstr "Mi sitio no es un servidor público" -#: ../../Zotlabs/Module/Admin/Site.php:226 +#: ../../Zotlabs/Module/Admin/Site.php:234 msgid "My site has paid access only" msgstr "Mi sitio es un servicio de pago" -#: ../../Zotlabs/Module/Admin/Site.php:227 +#: ../../Zotlabs/Module/Admin/Site.php:235 msgid "My site has free access only" msgstr "Mi sitio es un servicio gratuito" -#: ../../Zotlabs/Module/Admin/Site.php:228 +#: ../../Zotlabs/Module/Admin/Site.php:236 msgid "My site offers free accounts with optional paid upgrades" msgstr "Mi sitio ofrece cuentas gratuitas con opciones extra de pago" -#: ../../Zotlabs/Module/Admin/Site.php:239 ../../Zotlabs/Module/Setup.php:328 +#: ../../Zotlabs/Module/Admin/Site.php:247 ../../Zotlabs/Module/Setup.php:328 msgid "Basic/Minimal Social Networking" msgstr "Red social básica o mínima" -#: ../../Zotlabs/Module/Admin/Site.php:240 ../../Zotlabs/Module/Setup.php:329 +#: ../../Zotlabs/Module/Admin/Site.php:248 ../../Zotlabs/Module/Setup.php:329 msgid "Standard Configuration (default)" msgstr "Configuración estándar (por defecto)" -#: ../../Zotlabs/Module/Admin/Site.php:241 ../../Zotlabs/Module/Setup.php:330 +#: ../../Zotlabs/Module/Admin/Site.php:249 ../../Zotlabs/Module/Setup.php:330 msgid "Professional" msgstr "Profesional" -#: ../../Zotlabs/Module/Admin/Site.php:245 ../../Zotlabs/Lib/Techlevels.php:10 +#: ../../Zotlabs/Module/Admin/Site.php:253 ../../Zotlabs/Lib/Techlevels.php:10 msgid "Beginner/Basic" msgstr "Principiante / Básico" -#: ../../Zotlabs/Module/Admin/Site.php:246 ../../Zotlabs/Lib/Techlevels.php:11 +#: ../../Zotlabs/Module/Admin/Site.php:254 ../../Zotlabs/Lib/Techlevels.php:11 msgid "Novice - not skilled but willing to learn" msgstr "Novato: no cualificado, pero dispuesto a aprender" -#: ../../Zotlabs/Module/Admin/Site.php:247 ../../Zotlabs/Lib/Techlevels.php:12 +#: ../../Zotlabs/Module/Admin/Site.php:255 ../../Zotlabs/Lib/Techlevels.php:12 msgid "Intermediate - somewhat comfortable" msgstr "Intermedio: bastante cómodo" -#: ../../Zotlabs/Module/Admin/Site.php:248 ../../Zotlabs/Lib/Techlevels.php:13 +#: ../../Zotlabs/Module/Admin/Site.php:256 ../../Zotlabs/Lib/Techlevels.php:13 msgid "Advanced - very comfortable" msgstr "Avanzado: muy cómodo" -#: ../../Zotlabs/Module/Admin/Site.php:249 ../../Zotlabs/Lib/Techlevels.php:14 +#: ../../Zotlabs/Module/Admin/Site.php:257 ../../Zotlabs/Lib/Techlevels.php:14 msgid "Expert - I can write computer code" msgstr "Experto: puedo escribir código informático" -#: ../../Zotlabs/Module/Admin/Site.php:250 ../../Zotlabs/Lib/Techlevels.php:15 +#: ../../Zotlabs/Module/Admin/Site.php:258 ../../Zotlabs/Lib/Techlevels.php:15 msgid "Wizard - I probably know more than you do" msgstr "Asistente: probablemente sé más que tú" -#: ../../Zotlabs/Module/Admin/Site.php:259 ../../include/widgets.php:1577 +#: ../../Zotlabs/Module/Admin/Site.php:267 ../../include/widgets.php:1634 msgid "Site" msgstr "Sitio" -#: ../../Zotlabs/Module/Admin/Site.php:262 +#: ../../Zotlabs/Module/Admin/Site.php:270 msgid "File upload" msgstr "Subir fichero" -#: ../../Zotlabs/Module/Admin/Site.php:263 +#: ../../Zotlabs/Module/Admin/Site.php:271 msgid "Policies" msgstr "Políticas" -#: ../../Zotlabs/Module/Admin/Site.php:264 +#: ../../Zotlabs/Module/Admin/Site.php:272 #: ../../include/contact_widgets.php:16 msgid "Advanced" msgstr "Avanzado" -#: ../../Zotlabs/Module/Admin/Site.php:268 +#: ../../Zotlabs/Module/Admin/Site.php:276 #: ../../extend/addon/addon/statusnet/statusnet.php:890 msgid "Site name" msgstr "Nombre del sitio" -#: ../../Zotlabs/Module/Admin/Site.php:270 ../../Zotlabs/Module/Setup.php:351 +#: ../../Zotlabs/Module/Admin/Site.php:278 ../../Zotlabs/Module/Setup.php:351 msgid "Server Configuration/Role" msgstr "Configuración del servidor" -#: ../../Zotlabs/Module/Admin/Site.php:272 +#: ../../Zotlabs/Module/Admin/Site.php:280 msgid "Site default technical skill level" msgstr "Nivel de habilidad técnica predeterminado del sitio" -#: ../../Zotlabs/Module/Admin/Site.php:272 +#: ../../Zotlabs/Module/Admin/Site.php:280 msgid "Used to provide a member experience matched to technical comfort level" msgstr "Se utiliza para proporcionar una experiencia a los miembros adaptada a su nivel de comodidad técnica" -#: ../../Zotlabs/Module/Admin/Site.php:274 +#: ../../Zotlabs/Module/Admin/Site.php:282 msgid "Lock the technical skill level setting" msgstr "Bloquear el ajuste del nivel de habilidad técnica" -#: ../../Zotlabs/Module/Admin/Site.php:274 +#: ../../Zotlabs/Module/Admin/Site.php:282 msgid "Members can set their own technical comfort level by default" msgstr "Los miembros pueden configurar su nivel de comodidad técnica por defecto" -#: ../../Zotlabs/Module/Admin/Site.php:276 +#: ../../Zotlabs/Module/Admin/Site.php:284 msgid "Banner/Logo" msgstr "Banner/Logo" -#: ../../Zotlabs/Module/Admin/Site.php:277 +#: ../../Zotlabs/Module/Admin/Site.php:285 msgid "Administrator Information" msgstr "Información del Administrador" -#: ../../Zotlabs/Module/Admin/Site.php:277 +#: ../../Zotlabs/Module/Admin/Site.php:285 msgid "" "Contact information for site administrators. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Información de contacto de los administradores del sitio. Visible en la página \"siteinfo\". Se puede usar BBCode" -#: ../../Zotlabs/Module/Admin/Site.php:278 +#: ../../Zotlabs/Module/Admin/Site.php:286 #: ../../Zotlabs/Module/Siteinfo.php:23 msgid "Site Information" msgstr "Información sobre el sitio" -#: ../../Zotlabs/Module/Admin/Site.php:278 +#: ../../Zotlabs/Module/Admin/Site.php:286 msgid "" "Publicly visible description of this site. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Descripción pública de este sitio. Visible en la página \"siteinfo\". Se puede usar BBCode" -#: ../../Zotlabs/Module/Admin/Site.php:279 +#: ../../Zotlabs/Module/Admin/Site.php:287 msgid "System language" msgstr "Idioma del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:280 +#: ../../Zotlabs/Module/Admin/Site.php:288 msgid "System theme" msgstr "Tema gráfico del sistema" -#: ../../Zotlabs/Module/Admin/Site.php:280 +#: ../../Zotlabs/Module/Admin/Site.php:288 msgid "" "Default system theme - may be over-ridden by user profiles - <a href='#' " "id='cnftheme'>change theme settings</a>" msgstr "Tema del sistema por defecto - se puede cambiar por cada perfil de usuario - <a href='#' id='cnftheme'>modificar los ajustes del tema</a>" -#: ../../Zotlabs/Module/Admin/Site.php:281 +#: ../../Zotlabs/Module/Admin/Site.php:289 msgid "Mobile system theme" msgstr "Tema del sistema para móviles" -#: ../../Zotlabs/Module/Admin/Site.php:281 +#: ../../Zotlabs/Module/Admin/Site.php:289 msgid "Theme for mobile devices" msgstr "Tema para dispositivos móviles" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:291 msgid "Allow Feeds as Connections" msgstr "Permitir contenidos RSS como conexiones" -#: ../../Zotlabs/Module/Admin/Site.php:283 +#: ../../Zotlabs/Module/Admin/Site.php:291 msgid "(Heavy system resource usage)" msgstr "(Uso intenso de los recursos del sistema)" -#: ../../Zotlabs/Module/Admin/Site.php:284 +#: ../../Zotlabs/Module/Admin/Site.php:292 msgid "Maximum image size" msgstr "Tamaño máximo de la imagen" -#: ../../Zotlabs/Module/Admin/Site.php:284 +#: ../../Zotlabs/Module/Admin/Site.php:292 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "Tamaño máximo en bytes de la imagen subida. Por defecto, es 0, lo que significa que no hay límites." -#: ../../Zotlabs/Module/Admin/Site.php:285 +#: ../../Zotlabs/Module/Admin/Site.php:293 msgid "Does this site allow new member registration?" msgstr "¿Debe este sitio permitir el registro de nuevos miembros?" -#: ../../Zotlabs/Module/Admin/Site.php:286 +#: ../../Zotlabs/Module/Admin/Site.php:294 msgid "Invitation only" msgstr "Solo con una invitación" -#: ../../Zotlabs/Module/Admin/Site.php:286 +#: ../../Zotlabs/Module/Admin/Site.php:294 msgid "" "Only allow new member registrations with an invitation code. Above register " "policy must be set to Yes." msgstr "Solo se permiten inscripciones de nuevos miembros con un código de invitación. Además, deben aceptarse los términos del registro marcando \"Sí\"." -#: ../../Zotlabs/Module/Admin/Site.php:287 +#: ../../Zotlabs/Module/Admin/Site.php:295 msgid "Which best describes the types of account offered by this hub?" msgstr "¿Cómo describiría el tipo de servicio ofrecido por este servidor?" -#: ../../Zotlabs/Module/Admin/Site.php:288 +#: ../../Zotlabs/Module/Admin/Site.php:296 msgid "Register text" msgstr "Texto del registro" -#: ../../Zotlabs/Module/Admin/Site.php:288 +#: ../../Zotlabs/Module/Admin/Site.php:296 msgid "Will be displayed prominently on the registration page." msgstr "Se mostrará de forma destacada en la página de registro." -#: ../../Zotlabs/Module/Admin/Site.php:289 +#: ../../Zotlabs/Module/Admin/Site.php:297 msgid "Site homepage to show visitors (default: login box)" msgstr "Página personal que se mostrará a los visitantes (por defecto: la página de identificación)" -#: ../../Zotlabs/Module/Admin/Site.php:289 +#: ../../Zotlabs/Module/Admin/Site.php:297 msgid "" "example: 'public' to show public stream, 'page/sys/home' to show a system " "webpage called 'home' or 'include:home.html' to include a file." msgstr "ejemplo: 'public' para mostrar contenido público, 'page/sys/home' para mostrar la página web definida como \"home\" o 'include:home.html' para mostrar el contenido de un fichero." -#: ../../Zotlabs/Module/Admin/Site.php:290 +#: ../../Zotlabs/Module/Admin/Site.php:298 msgid "Preserve site homepage URL" msgstr "Preservar la dirección de la página personal" -#: ../../Zotlabs/Module/Admin/Site.php:290 +#: ../../Zotlabs/Module/Admin/Site.php:298 msgid "" "Present the site homepage in a frame at the original location instead of " "redirecting" msgstr "Presenta la página personal del sitio en un marco en la ubicación original, en vez de redirigirla." -#: ../../Zotlabs/Module/Admin/Site.php:291 +#: ../../Zotlabs/Module/Admin/Site.php:299 msgid "Accounts abandoned after x days" msgstr "Cuentas abandonadas después de x días" -#: ../../Zotlabs/Module/Admin/Site.php:291 +#: ../../Zotlabs/Module/Admin/Site.php:299 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo." -#: ../../Zotlabs/Module/Admin/Site.php:292 +#: ../../Zotlabs/Module/Admin/Site.php:300 msgid "Allowed friend domains" msgstr "Dominios amigos permitidos" -#: ../../Zotlabs/Module/Admin/Site.php:292 +#: ../../Zotlabs/Module/Admin/Site.php:300 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "Lista separada por comas de dominios a los que está permitido establecer relaciones de amistad con este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio." -#: ../../Zotlabs/Module/Admin/Site.php:293 +#: ../../Zotlabs/Module/Admin/Site.php:301 msgid "Verify Email Addresses" msgstr "Verificar las direcciones de correo electrónico" -#: ../../Zotlabs/Module/Admin/Site.php:293 +#: ../../Zotlabs/Module/Admin/Site.php:301 msgid "" "Check to verify email addresses used in account registration (recommended)." msgstr "Activar para la verificación de la dirección de correo electrónico en el registro de una cuenta (recomendado)." -#: ../../Zotlabs/Module/Admin/Site.php:294 +#: ../../Zotlabs/Module/Admin/Site.php:302 msgid "Force publish" msgstr "Forzar la publicación" -#: ../../Zotlabs/Module/Admin/Site.php:294 +#: ../../Zotlabs/Module/Admin/Site.php:302 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio." -#: ../../Zotlabs/Module/Admin/Site.php:295 +#: ../../Zotlabs/Module/Admin/Site.php:303 msgid "Import Public Streams" msgstr "Importar contenido público" -#: ../../Zotlabs/Module/Admin/Site.php:295 +#: ../../Zotlabs/Module/Admin/Site.php:303 msgid "" "Import and allow access to public content pulled from other sites. Warning: " "this content is unmoderated." msgstr "Importar y permitir acceso al contenido público sacado de otros sitios. Advertencia: este contenido no está moderado, por lo que podría encontrar cosas inapropiadas u ofensivas." -#: ../../Zotlabs/Module/Admin/Site.php:296 +#: ../../Zotlabs/Module/Admin/Site.php:304 msgid "Login on Homepage" msgstr "Iniciar sesión en la página personal" -#: ../../Zotlabs/Module/Admin/Site.php:296 +#: ../../Zotlabs/Module/Admin/Site.php:304 msgid "" "Present a login box to visitors on the home page if no other content has " "been configured." msgstr "Presentar a los visitantes una casilla de identificación en la página de inicio, si no se ha configurado otro tipo de contenido." -#: ../../Zotlabs/Module/Admin/Site.php:297 +#: ../../Zotlabs/Module/Admin/Site.php:305 msgid "Enable context help" msgstr "Habilitar la ayuda contextual" -#: ../../Zotlabs/Module/Admin/Site.php:297 +#: ../../Zotlabs/Module/Admin/Site.php:305 msgid "" "Display contextual help for the current page when the help button is " "pressed." msgstr "Ver la ayuda contextual para la página actual cuando se pulse el botón de Ayuda." -#: ../../Zotlabs/Module/Admin/Site.php:299 +#: ../../Zotlabs/Module/Admin/Site.php:307 msgid "Directory Server URL" msgstr "URL del servidor de directorio" -#: ../../Zotlabs/Module/Admin/Site.php:299 +#: ../../Zotlabs/Module/Admin/Site.php:307 msgid "Default directory server" msgstr "Servidor de directorio predeterminado" -#: ../../Zotlabs/Module/Admin/Site.php:301 +#: ../../Zotlabs/Module/Admin/Site.php:309 msgid "Proxy user" msgstr "Usuario del proxy" -#: ../../Zotlabs/Module/Admin/Site.php:302 +#: ../../Zotlabs/Module/Admin/Site.php:310 msgid "Proxy URL" msgstr "Dirección del proxy" -#: ../../Zotlabs/Module/Admin/Site.php:303 +#: ../../Zotlabs/Module/Admin/Site.php:311 msgid "Network timeout" msgstr "Tiempo de espera de la red" -#: ../../Zotlabs/Module/Admin/Site.php:303 +#: ../../Zotlabs/Module/Admin/Site.php:311 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "Valor en segundos. Poner a 0 para que no haya tiempo límite (no recomendado)" -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:312 msgid "Delivery interval" msgstr "Intervalo de entrega" -#: ../../Zotlabs/Module/Admin/Site.php:304 +#: ../../Zotlabs/Module/Admin/Site.php:312 msgid "" "Delay background delivery processes by this many seconds to reduce system " "load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 " "for large dedicated servers." msgstr "Retrasar los procesos de transmisión en segundo plano por esta cantidad de segundos para reducir la carga del sistema. Recomendado: 4-5 para sitios compartidos, 2-3 para servidores virtuales privados, 0-1 para grandes servidores dedicados." -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:313 msgid "Deliveries per process" msgstr "Intentos de envío por proceso" -#: ../../Zotlabs/Module/Admin/Site.php:305 +#: ../../Zotlabs/Module/Admin/Site.php:313 msgid "" "Number of deliveries to attempt in a single operating system process. Adjust" " if necessary to tune system performance. Recommend: 1-5." msgstr "Numero de envíos a intentar en un único proceso del sistema operativo. Ajustar si es necesario mejorar el rendimiento. Se recomienda: 1-5." -#: ../../Zotlabs/Module/Admin/Site.php:306 +#: ../../Zotlabs/Module/Admin/Site.php:314 msgid "Poll interval" msgstr "Intervalo máximo de tiempo entre dos mensajes sucesivos" -#: ../../Zotlabs/Module/Admin/Site.php:306 +#: ../../Zotlabs/Module/Admin/Site.php:314 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." msgstr "Retrasar el intervalo de envío en segundo plano, en esta cantidad de segundos, para reducir la carga del sistema. Si es 0, usar el intervalo de entrega." -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:315 msgid "Maximum Load Average" msgstr "Carga media máxima" -#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Admin/Site.php:315 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." msgstr "Carga máxima del sistema antes de que los procesos de entrega y envío se hayan retardado - por defecto, 50." -#: ../../Zotlabs/Module/Admin/Site.php:308 +#: ../../Zotlabs/Module/Admin/Site.php:316 msgid "Expiration period in days for imported (grid/network) content" msgstr "Caducidad del contenido importado de otros sitios (en días)" -#: ../../Zotlabs/Module/Admin/Site.php:308 +#: ../../Zotlabs/Module/Admin/Site.php:316 msgid "0 for no expiration of imported content" msgstr "0 para que no caduque el contenido importado" -#: ../../Zotlabs/Module/Admin/Plugins.php:284 +#: ../../Zotlabs/Module/Admin/Plugins.php:289 #, php-format msgid "Plugin %s disabled." msgstr "Extensión %s desactivada." -#: ../../Zotlabs/Module/Admin/Plugins.php:289 +#: ../../Zotlabs/Module/Admin/Plugins.php:294 #, php-format msgid "Plugin %s enabled." msgstr "Extensión %s activada." -#: ../../Zotlabs/Module/Admin/Plugins.php:337 -#: ../../Zotlabs/Module/Admin/Plugins.php:432 ../../include/widgets.php:1582 +#: ../../Zotlabs/Module/Admin/Plugins.php:310 +#: ../../Zotlabs/Module/Admin/Themes.php:95 +msgid "Disable" +msgstr "Desactivar" + +#: ../../Zotlabs/Module/Admin/Plugins.php:313 +#: ../../Zotlabs/Module/Admin/Themes.php:97 +msgid "Enable" +msgstr "Activar" + +#: ../../Zotlabs/Module/Admin/Plugins.php:342 +#: ../../Zotlabs/Module/Admin/Plugins.php:437 ../../include/widgets.php:1639 msgid "Plugins" msgstr "Extensiones (plugins)" -#: ../../Zotlabs/Module/Admin/Plugins.php:348 +#: ../../Zotlabs/Module/Admin/Plugins.php:343 +#: ../../Zotlabs/Module/Admin/Themes.php:124 +msgid "Toggle" +msgstr "Cambiar" + +#: ../../Zotlabs/Module/Admin/Plugins.php:344 +#: ../../Zotlabs/Module/Admin/Themes.php:125 ../../Zotlabs/Lib/Apps.php:223 +#: ../../include/widgets.php:685 ../../include/nav.php:225 +msgid "Settings" +msgstr "Ajustes" + +#: ../../Zotlabs/Module/Admin/Plugins.php:351 +#: ../../Zotlabs/Module/Admin/Themes.php:134 +msgid "Author: " +msgstr "Autor:" + +#: ../../Zotlabs/Module/Admin/Plugins.php:352 +#: ../../Zotlabs/Module/Admin/Themes.php:135 +msgid "Maintainer: " +msgstr "Mantenedor:" + +#: ../../Zotlabs/Module/Admin/Plugins.php:353 msgid "Minimum project version: " msgstr "Versión mínima del proyecto:" -#: ../../Zotlabs/Module/Admin/Plugins.php:349 +#: ../../Zotlabs/Module/Admin/Plugins.php:354 msgid "Maximum project version: " msgstr "Versión máxima del proyecto:" -#: ../../Zotlabs/Module/Admin/Plugins.php:350 +#: ../../Zotlabs/Module/Admin/Plugins.php:355 msgid "Minimum PHP version: " msgstr "Versión mínima de PHP:" -#: ../../Zotlabs/Module/Admin/Plugins.php:351 +#: ../../Zotlabs/Module/Admin/Plugins.php:356 msgid "Compatible Server Roles: " msgstr "Configuraciones compatibles con este servidor:" -#: ../../Zotlabs/Module/Admin/Plugins.php:352 +#: ../../Zotlabs/Module/Admin/Plugins.php:357 msgid "Requires: " msgstr "Se requiere:" -#: ../../Zotlabs/Module/Admin/Plugins.php:353 -#: ../../Zotlabs/Module/Admin/Plugins.php:437 +#: ../../Zotlabs/Module/Admin/Plugins.php:358 +#: ../../Zotlabs/Module/Admin/Plugins.php:442 msgid "Disabled - version incompatibility" msgstr "Deshabilitado - versiones incompatibles" -#: ../../Zotlabs/Module/Admin/Plugins.php:406 +#: ../../Zotlabs/Module/Admin/Plugins.php:411 msgid "Enter the public git repository URL of the plugin repo." msgstr "Escriba la URL pública del repositorio git del plugin." -#: ../../Zotlabs/Module/Admin/Plugins.php:407 +#: ../../Zotlabs/Module/Admin/Plugins.php:412 msgid "Plugin repo git URL" msgstr "URL del repositorio git del plugin" -#: ../../Zotlabs/Module/Admin/Plugins.php:408 +#: ../../Zotlabs/Module/Admin/Plugins.php:413 msgid "Custom repo name" msgstr "Nombre personalizado del repositorio" -#: ../../Zotlabs/Module/Admin/Plugins.php:408 +#: ../../Zotlabs/Module/Admin/Plugins.php:413 msgid "(optional)" msgstr "(opcional)" -#: ../../Zotlabs/Module/Admin/Plugins.php:409 +#: ../../Zotlabs/Module/Admin/Plugins.php:414 msgid "Download Plugin Repo" msgstr "Descargar el repositorio" -#: ../../Zotlabs/Module/Admin/Plugins.php:416 +#: ../../Zotlabs/Module/Admin/Plugins.php:421 msgid "Install new repo" msgstr "Instalar un nuevo repositorio" -#: ../../Zotlabs/Module/Admin/Plugins.php:417 ../../Zotlabs/Lib/Apps.php:348 +#: ../../Zotlabs/Module/Admin/Plugins.php:422 ../../Zotlabs/Lib/Apps.php:348 msgid "Install" msgstr "Instalar" -#: ../../Zotlabs/Module/Admin/Plugins.php:418 -#: ../../Zotlabs/Module/Connedit.php:885 ../../Zotlabs/Module/Fbrowser.php:66 -#: ../../Zotlabs/Module/Fbrowser.php:88 ../../Zotlabs/Module/Profiles.php:803 -#: ../../Zotlabs/Module/Wiki.php:263 ../../Zotlabs/Module/Wiki.php:288 +#: ../../Zotlabs/Module/Admin/Plugins.php:423 +#: ../../Zotlabs/Module/Connedit.php:931 ../../Zotlabs/Module/Fbrowser.php:66 +#: ../../Zotlabs/Module/Fbrowser.php:88 ../../Zotlabs/Module/Profiles.php:804 #: ../../Zotlabs/Module/Settings/Oauth.php:88 #: ../../Zotlabs/Module/Settings/Oauth.php:114 #: ../../Zotlabs/Module/Tagrm.php:15 ../../Zotlabs/Module/Tagrm.php:138 +#: ../../Zotlabs/Module/Wiki.php:261 ../../Zotlabs/Module/Wiki.php:286 #: ../../extend/addon/addon/friendica/dfrn_request.php:879 #: ../../extend/addon/addon/js_upload/js_upload.php:46 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:866 @@ -2583,63 +2602,60 @@ msgstr "Instalar" msgid "Cancel" msgstr "Cancelar" -#: ../../Zotlabs/Module/Admin/Plugins.php:440 +#: ../../Zotlabs/Module/Admin/Plugins.php:445 msgid "Manage Repos" msgstr "Gestionar los repositorios" -#: ../../Zotlabs/Module/Admin/Plugins.php:441 +#: ../../Zotlabs/Module/Admin/Plugins.php:446 msgid "Installed Plugin Repositories" msgstr "Repositorios de los plugins instalados" -#: ../../Zotlabs/Module/Admin/Plugins.php:442 +#: ../../Zotlabs/Module/Admin/Plugins.php:447 msgid "Install a New Plugin Repository" msgstr "Instalar un nuevo repositorio de plugins" -#: ../../Zotlabs/Module/Admin/Plugins.php:448 -#: ../../Zotlabs/Module/Connedit.php:883 ../../Zotlabs/Module/Profiles.php:801 +#: ../../Zotlabs/Module/Admin/Plugins.php:453 +#: ../../Zotlabs/Module/Connedit.php:929 ../../Zotlabs/Module/Profiles.php:802 #: ../../Zotlabs/Module/Settings/Oauth.php:42 #: ../../Zotlabs/Module/Settings/Oauth.php:113 ../../Zotlabs/Lib/Apps.php:348 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1152 msgid "Update" msgstr "Actualizar" -#: ../../Zotlabs/Module/Admin/Plugins.php:449 +#: ../../Zotlabs/Module/Admin/Plugins.php:454 msgid "Switch branch" msgstr "Cambiar la rama" -#: ../../Zotlabs/Module/Admin/Plugins.php:450 +#: ../../Zotlabs/Module/Admin/Plugins.php:455 #: ../../Zotlabs/Module/Photos.php:984 ../../Zotlabs/Module/Tagrm.php:137 -#: ../../extend/addon/addon/superblock/superblock.php:114 +#: ../../extend/addon/addon/superblock/superblock.php:116 msgid "Remove" msgstr "Eliminar" -#: ../../Zotlabs/Module/Admin/Queue.php:35 -msgid "Queue Statistics" -msgstr "Estadísticas de la cola" - -#: ../../Zotlabs/Module/Admin/Queue.php:36 -msgid "Total Entries" -msgstr "Total de entradas" +#: ../../Zotlabs/Module/Admin/Themes.php:26 +msgid "Theme settings updated." +msgstr "Ajustes del tema actualizados." -#: ../../Zotlabs/Module/Admin/Queue.php:37 -msgid "Priority" -msgstr "Prioridad" +#: ../../Zotlabs/Module/Admin/Themes.php:61 +msgid "No themes found." +msgstr "No se han encontrado temas." -#: ../../Zotlabs/Module/Admin/Queue.php:38 -msgid "Destination URL" -msgstr "Dirección de destino" +#: ../../Zotlabs/Module/Admin/Themes.php:116 +msgid "Screenshot" +msgstr "Instantánea de pantalla" -#: ../../Zotlabs/Module/Admin/Queue.php:39 -msgid "Mark hub permanently offline" -msgstr "Marcar el servidor como permanentemente fuera de línea" +#: ../../Zotlabs/Module/Admin/Themes.php:123 +#: ../../Zotlabs/Module/Admin/Themes.php:157 ../../include/widgets.php:1640 +msgid "Themes" +msgstr "Temas" -#: ../../Zotlabs/Module/Admin/Queue.php:40 -msgid "Empty queue for this hub" -msgstr "Vaciar la cola para este servidor" +#: ../../Zotlabs/Module/Admin/Themes.php:162 +msgid "[Experimental]" +msgstr "[Experimental]" -#: ../../Zotlabs/Module/Admin/Queue.php:41 -msgid "Last known contact" -msgstr "Último contacto conocido" +#: ../../Zotlabs/Module/Admin/Themes.php:163 +msgid "[Unsupported]" +msgstr "[No soportado]" #: ../../Zotlabs/Module/Uexport.php:57 ../../Zotlabs/Module/Uexport.php:58 msgid "Export Channel" @@ -2769,6 +2785,11 @@ msgstr "Grupo de canales: " msgid "Invalid connection." msgstr "Conexión no válida." +#: ../../Zotlabs/Module/Network.php:275 +#: ../../extend/addon/addon/redred/redred.php:65 +msgid "Invalid channel." +msgstr "El canal no es válido." + #: ../../Zotlabs/Module/Menu.php:49 msgid "Unable to update menu." msgstr "No se puede actualizar el menú." @@ -2805,7 +2826,7 @@ msgstr "El menú se puede usar para guardar marcadores" msgid "Submit and proceed" msgstr "Enviar y proceder" -#: ../../Zotlabs/Module/Menu.php:107 ../../include/text.php:2284 +#: ../../Zotlabs/Module/Menu.php:107 ../../include/text.php:2289 msgid "Menus" msgstr "Menús" @@ -2986,7 +3007,7 @@ msgstr "Valorar" #: ../../Zotlabs/Module/Pubsites.php:59 ../../Zotlabs/Module/Events.php:694 #: ../../Zotlabs/Module/Webpages.php:250 ../../Zotlabs/Module/Blocks.php:166 -#: ../../Zotlabs/Module/Layouts.php:197 ../../Zotlabs/Module/Wiki.php:165 +#: ../../Zotlabs/Module/Layouts.php:197 ../../Zotlabs/Module/Wiki.php:166 #: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:151 #: ../../include/page_widgets.php:42 msgid "View" @@ -3016,106 +3037,122 @@ msgstr "ahora está conectado/a" msgid "Could not access address book record." msgstr "No se pudo acceder al registro en su libreta de direcciones." -#: ../../Zotlabs/Module/Connedit.php:454 +#: ../../Zotlabs/Module/Connedit.php:482 msgid "Refresh failed - channel is currently unavailable." msgstr "Recarga fallida - no se puede encontrar el canal en este momento." -#: ../../Zotlabs/Module/Connedit.php:469 ../../Zotlabs/Module/Connedit.php:478 -#: ../../Zotlabs/Module/Connedit.php:487 ../../Zotlabs/Module/Connedit.php:496 -#: ../../Zotlabs/Module/Connedit.php:509 +#: ../../Zotlabs/Module/Connedit.php:497 ../../Zotlabs/Module/Connedit.php:506 +#: ../../Zotlabs/Module/Connedit.php:515 ../../Zotlabs/Module/Connedit.php:524 +#: ../../Zotlabs/Module/Connedit.php:537 msgid "Unable to set address book parameters." msgstr "No ha sido posible establecer los parámetros de la libreta de direcciones." -#: ../../Zotlabs/Module/Connedit.php:533 +#: ../../Zotlabs/Module/Connedit.php:561 msgid "Connection has been removed." msgstr "La conexión ha sido eliminada." -#: ../../Zotlabs/Module/Connedit.php:573 ../../Zotlabs/Lib/Apps.php:228 +#: ../../Zotlabs/Module/Connedit.php:601 ../../Zotlabs/Lib/Apps.php:228 #: ../../extend/addon/addon/openclipatar/openclipatar.php:57 #: ../../include/conversation.php:936 ../../include/conversation.php:1049 #: ../../include/nav.php:103 msgid "View Profile" msgstr "Ver el perfil" -#: ../../Zotlabs/Module/Connedit.php:576 +#: ../../Zotlabs/Module/Connedit.php:604 #, php-format msgid "View %s's profile" msgstr "Ver el perfil de %s" -#: ../../Zotlabs/Module/Connedit.php:580 +#: ../../Zotlabs/Module/Connedit.php:608 msgid "Refresh Permissions" msgstr "Recargar los permisos" -#: ../../Zotlabs/Module/Connedit.php:583 +#: ../../Zotlabs/Module/Connedit.php:611 msgid "Fetch updated permissions" msgstr "Obtener los permisos actualizados" -#: ../../Zotlabs/Module/Connedit.php:587 +#: ../../Zotlabs/Module/Connedit.php:615 +msgid "Refresh Photo" +msgstr "Actualizar la foto" + +#: ../../Zotlabs/Module/Connedit.php:618 +msgid "Fetch updated photo" +msgstr "Obtener una foto actualizada" + +#: ../../Zotlabs/Module/Connedit.php:622 msgid "Recent Activity" msgstr "Actividad reciente" -#: ../../Zotlabs/Module/Connedit.php:590 +#: ../../Zotlabs/Module/Connedit.php:625 msgid "View recent posts and comments" msgstr "Ver publicaciones y comentarios recientes" -#: ../../Zotlabs/Module/Connedit.php:597 +#: ../../Zotlabs/Module/Connedit.php:632 msgid "Block (or Unblock) all communications with this connection" msgstr "Bloquear (o desbloquear) todas las comunicaciones con esta conexión" -#: ../../Zotlabs/Module/Connedit.php:598 +#: ../../Zotlabs/Module/Connedit.php:633 msgid "This connection is blocked!" msgstr "¡Esta conexión está bloqueada!" -#: ../../Zotlabs/Module/Connedit.php:602 +#: ../../Zotlabs/Module/Connedit.php:637 msgid "Unignore" msgstr "Dejar de ignorar" -#: ../../Zotlabs/Module/Connedit.php:605 +#: ../../Zotlabs/Module/Connedit.php:640 msgid "Ignore (or Unignore) all inbound communications from this connection" msgstr "Ignorar (o dejar de ignorar) todas las comunicaciones entrantes de esta conexión" -#: ../../Zotlabs/Module/Connedit.php:606 +#: ../../Zotlabs/Module/Connedit.php:641 msgid "This connection is ignored!" msgstr "¡Esta conexión es ignorada!" -#: ../../Zotlabs/Module/Connedit.php:610 +#: ../../Zotlabs/Module/Connedit.php:645 msgid "Unarchive" msgstr "Desarchivar" -#: ../../Zotlabs/Module/Connedit.php:610 +#: ../../Zotlabs/Module/Connedit.php:645 msgid "Archive" msgstr "Archivar" -#: ../../Zotlabs/Module/Connedit.php:613 +#: ../../Zotlabs/Module/Connedit.php:648 msgid "" "Archive (or Unarchive) this connection - mark channel dead but keep content" msgstr "Archiva (o desarchiva) esta conexión - marca el canal como muerto aunque mantiene sus contenidos" -#: ../../Zotlabs/Module/Connedit.php:614 +#: ../../Zotlabs/Module/Connedit.php:649 msgid "This connection is archived!" msgstr "¡Esta conexión esta archivada!" -#: ../../Zotlabs/Module/Connedit.php:618 +#: ../../Zotlabs/Module/Connedit.php:653 msgid "Unhide" msgstr "Mostrar" -#: ../../Zotlabs/Module/Connedit.php:618 +#: ../../Zotlabs/Module/Connedit.php:653 msgid "Hide" msgstr "Ocultar" -#: ../../Zotlabs/Module/Connedit.php:621 +#: ../../Zotlabs/Module/Connedit.php:656 msgid "Hide or Unhide this connection from your other connections" msgstr "Ocultar o mostrar esta conexión a sus otras conexiones" -#: ../../Zotlabs/Module/Connedit.php:622 +#: ../../Zotlabs/Module/Connedit.php:657 msgid "This connection is hidden!" msgstr "¡Esta conexión está oculta!" -#: ../../Zotlabs/Module/Connedit.php:629 +#: ../../Zotlabs/Module/Connedit.php:664 msgid "Delete this connection" msgstr "Eliminar esta conexión" -#: ../../Zotlabs/Module/Connedit.php:637 +#: ../../Zotlabs/Module/Connedit.php:672 +msgid "Fetch Vcard" +msgstr "Obtener una vcard" + +#: ../../Zotlabs/Module/Connedit.php:675 +msgid "Fetch electronic calling card for this connection" +msgstr "Obtener una tarjeta de llamada electrónica para esta conexión" + +#: ../../Zotlabs/Module/Connedit.php:683 #: ../../Zotlabs/Module/Filestorage.php:152 #: ../../Zotlabs/Module/Photos.php:657 ../../Zotlabs/Module/Photos.php:1042 #: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:363 @@ -3123,191 +3160,190 @@ msgstr "Eliminar esta conexión" msgid "Permissions" msgstr "Permisos" -#: ../../Zotlabs/Module/Connedit.php:640 +#: ../../Zotlabs/Module/Connedit.php:686 msgid "Open Individual Permissions section by default" msgstr "Abrir la sección de permisos individuales por defecto" -#: ../../Zotlabs/Module/Connedit.php:663 +#: ../../Zotlabs/Module/Connedit.php:709 msgid "Affinity" msgstr "Afinidad" -#: ../../Zotlabs/Module/Connedit.php:666 +#: ../../Zotlabs/Module/Connedit.php:712 msgid "Open Set Affinity section by default" msgstr "Abrir por defecto la sección para definir la afinidad" -#: ../../Zotlabs/Module/Connedit.php:670 ../../include/widgets.php:526 +#: ../../Zotlabs/Module/Connedit.php:716 ../../include/widgets.php:526 msgid "Me" msgstr "Yo" -#: ../../Zotlabs/Module/Connedit.php:671 ../../include/widgets.php:527 +#: ../../Zotlabs/Module/Connedit.php:717 ../../include/widgets.php:527 msgid "Family" msgstr "Familia" -#: ../../Zotlabs/Module/Connedit.php:672 +#: ../../Zotlabs/Module/Connedit.php:718 #: ../../Zotlabs/Module/Settings/Channel.php:62 #: ../../Zotlabs/Module/Settings/Channel.php:66 #: ../../Zotlabs/Module/Settings/Channel.php:67 #: ../../Zotlabs/Module/Settings/Channel.php:70 -#: ../../Zotlabs/Module/Settings/Channel.php:81 -#: ../../include/selectors.php:123 ../../include/widgets.php:528 -#: ../../include/channel.php:408 ../../include/channel.php:409 -#: ../../include/channel.php:416 +#: ../../Zotlabs/Module/Settings/Channel.php:81 ../../include/widgets.php:528 +#: ../../include/selectors.php:123 ../../include/channel.php:408 +#: ../../include/channel.php:409 ../../include/channel.php:416 msgid "Friends" msgstr "Amigos/as" -#: ../../Zotlabs/Module/Connedit.php:673 ../../include/widgets.php:529 +#: ../../Zotlabs/Module/Connedit.php:719 ../../include/widgets.php:529 msgid "Acquaintances" msgstr "Conocidos/as" -#: ../../Zotlabs/Module/Connedit.php:700 +#: ../../Zotlabs/Module/Connedit.php:746 msgid "Filter" msgstr "Filtrar" -#: ../../Zotlabs/Module/Connedit.php:703 +#: ../../Zotlabs/Module/Connedit.php:749 msgid "Open Custom Filter section by default" msgstr "Abrir por defecto la sección de personalización de filtros" -#: ../../Zotlabs/Module/Connedit.php:740 +#: ../../Zotlabs/Module/Connedit.php:786 msgid "Approve this connection" msgstr "Aprobar esta conexión" -#: ../../Zotlabs/Module/Connedit.php:740 +#: ../../Zotlabs/Module/Connedit.php:786 msgid "Accept connection to allow communication" msgstr "Aceptar la conexión para permitir la comunicación" -#: ../../Zotlabs/Module/Connedit.php:745 +#: ../../Zotlabs/Module/Connedit.php:791 msgid "Set Affinity" msgstr "Ajustar la afinidad" -#: ../../Zotlabs/Module/Connedit.php:748 +#: ../../Zotlabs/Module/Connedit.php:794 msgid "Set Profile" msgstr "Ajustar el perfil" -#: ../../Zotlabs/Module/Connedit.php:751 +#: ../../Zotlabs/Module/Connedit.php:797 msgid "Set Affinity & Profile" msgstr "Ajustar la afinidad y el perfil" -#: ../../Zotlabs/Module/Connedit.php:809 +#: ../../Zotlabs/Module/Connedit.php:855 msgid "none" msgstr "-" -#: ../../Zotlabs/Module/Connedit.php:812 ../../include/widgets.php:661 +#: ../../Zotlabs/Module/Connedit.php:858 ../../include/widgets.php:661 msgid "Connection Default Permissions" msgstr "Permisos predeterminados de conexión" -#: ../../Zotlabs/Module/Connedit.php:812 ../../include/items.php:3934 +#: ../../Zotlabs/Module/Connedit.php:858 ../../include/items.php:3934 #, php-format msgid "Connection: %s" msgstr "Conexión: %s" -#: ../../Zotlabs/Module/Connedit.php:813 +#: ../../Zotlabs/Module/Connedit.php:859 msgid "Apply these permissions automatically" msgstr "Aplicar estos permisos automaticamente" -#: ../../Zotlabs/Module/Connedit.php:813 +#: ../../Zotlabs/Module/Connedit.php:859 msgid "Connection requests will be approved without your interaction" msgstr "Las solicitudes de conexión serán aprobadas sin su intervención" -#: ../../Zotlabs/Module/Connedit.php:814 +#: ../../Zotlabs/Module/Connedit.php:860 msgid "Permission role" msgstr "Rol de acceso" -#: ../../Zotlabs/Module/Connedit.php:815 +#: ../../Zotlabs/Module/Connedit.php:861 msgid "Add permission role" msgstr "Añadir un rol de acceso" -#: ../../Zotlabs/Module/Connedit.php:821 +#: ../../Zotlabs/Module/Connedit.php:867 msgid "This connection's primary address is" msgstr "La dirección primaria de esta conexión es" -#: ../../Zotlabs/Module/Connedit.php:822 +#: ../../Zotlabs/Module/Connedit.php:868 msgid "Available locations:" msgstr "Ubicaciones disponibles:" -#: ../../Zotlabs/Module/Connedit.php:826 +#: ../../Zotlabs/Module/Connedit.php:872 msgid "" "The permissions indicated on this page will be applied to all new " "connections." msgstr "Los permisos indicados en esta página serán aplicados en todas las nuevas conexiones." -#: ../../Zotlabs/Module/Connedit.php:827 +#: ../../Zotlabs/Module/Connedit.php:873 msgid "Connection Tools" msgstr "Gestión de las conexiones" -#: ../../Zotlabs/Module/Connedit.php:829 +#: ../../Zotlabs/Module/Connedit.php:875 msgid "Slide to adjust your degree of friendship" msgstr "Deslizar para ajustar el grado de amistad" -#: ../../Zotlabs/Module/Connedit.php:830 ../../Zotlabs/Module/Rate.php:155 +#: ../../Zotlabs/Module/Connedit.php:876 ../../Zotlabs/Module/Rate.php:155 #: ../../include/js_strings.php:20 msgid "Rating" msgstr "Valoración" -#: ../../Zotlabs/Module/Connedit.php:831 +#: ../../Zotlabs/Module/Connedit.php:877 msgid "Slide to adjust your rating" msgstr "Deslizar para ajustar su valoración" -#: ../../Zotlabs/Module/Connedit.php:832 ../../Zotlabs/Module/Connedit.php:837 +#: ../../Zotlabs/Module/Connedit.php:878 ../../Zotlabs/Module/Connedit.php:883 msgid "Optionally explain your rating" msgstr "Opcionalmente, puede explicar su valoración" -#: ../../Zotlabs/Module/Connedit.php:834 +#: ../../Zotlabs/Module/Connedit.php:880 msgid "Custom Filter" msgstr "Filtro personalizado" -#: ../../Zotlabs/Module/Connedit.php:835 +#: ../../Zotlabs/Module/Connedit.php:881 msgid "Only import posts with this text" msgstr "Importar solo entradas que contengan este texto" -#: ../../Zotlabs/Module/Connedit.php:835 ../../Zotlabs/Module/Connedit.php:836 +#: ../../Zotlabs/Module/Connedit.php:881 ../../Zotlabs/Module/Connedit.php:882 msgid "" "words one per line or #tags or /patterns/ or lang=xx, leave blank to import " "all posts" msgstr "Una sola opción por línea: palabras, #etiquetas, /patrones/ o lang=xx. Dejar en blanco para importarlo todo" -#: ../../Zotlabs/Module/Connedit.php:836 +#: ../../Zotlabs/Module/Connedit.php:882 msgid "Do not import posts with this text" msgstr "No importar entradas que contengan este texto" -#: ../../Zotlabs/Module/Connedit.php:838 +#: ../../Zotlabs/Module/Connedit.php:884 msgid "This information is public!" msgstr "¡Esta información es pública!" -#: ../../Zotlabs/Module/Connedit.php:843 +#: ../../Zotlabs/Module/Connedit.php:889 msgid "Connection Pending Approval" msgstr "Conexión pendiente de aprobación" -#: ../../Zotlabs/Module/Connedit.php:846 +#: ../../Zotlabs/Module/Connedit.php:892 #: ../../Zotlabs/Module/Settings/Permcats.php:107 #: ../../Zotlabs/Module/Settings/Tokens.php:163 msgid "inherited" msgstr "heredado" -#: ../../Zotlabs/Module/Connedit.php:848 +#: ../../Zotlabs/Module/Connedit.php:894 #, php-format msgid "" "Please choose the profile you would like to display to %s when viewing your " "profile securely." msgstr "Por favor, escoja el perfil que quiere mostrar a %s cuando esté viendo su perfil de forma segura." -#: ../../Zotlabs/Module/Connedit.php:850 +#: ../../Zotlabs/Module/Connedit.php:896 #: ../../Zotlabs/Module/Settings/Tokens.php:160 msgid "Their Settings" msgstr "Sus ajustes" -#: ../../Zotlabs/Module/Connedit.php:851 +#: ../../Zotlabs/Module/Connedit.php:897 #: ../../Zotlabs/Module/Settings/Permcats.php:105 #: ../../Zotlabs/Module/Settings/Tokens.php:161 msgid "My Settings" msgstr "Mis ajustes" -#: ../../Zotlabs/Module/Connedit.php:853 +#: ../../Zotlabs/Module/Connedit.php:899 #: ../../Zotlabs/Module/Settings/Permcats.php:110 #: ../../Zotlabs/Module/Settings/Tokens.php:166 msgid "Individual Permissions" msgstr "Permisos individuales" -#: ../../Zotlabs/Module/Connedit.php:854 +#: ../../Zotlabs/Module/Connedit.php:900 #: ../../Zotlabs/Module/Settings/Permcats.php:111 #: ../../Zotlabs/Module/Settings/Tokens.php:167 msgid "" @@ -3317,7 +3353,7 @@ msgid "" " settings here." msgstr "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. <strong>No</strong> puede cambiar estos ajustes aquí." -#: ../../Zotlabs/Module/Connedit.php:855 +#: ../../Zotlabs/Module/Connedit.php:901 msgid "" "Some permissions may be inherited from your channel's <a " "href=\"settings\"><strong>privacy settings</strong></a>, which have higher " @@ -3325,108 +3361,108 @@ msgid "" "they wont have any impact unless the inherited setting changes." msgstr "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. Puede cambiar estos ajustes aquí, pero no tendrán ningún consecuencia hasta que cambie los ajustes heredados." -#: ../../Zotlabs/Module/Connedit.php:856 +#: ../../Zotlabs/Module/Connedit.php:902 msgid "Last update:" msgstr "Última actualización:" -#: ../../Zotlabs/Module/Connedit.php:865 +#: ../../Zotlabs/Module/Connedit.php:911 msgid "Details" msgstr "Detalles" -#: ../../Zotlabs/Module/Connedit.php:868 +#: ../../Zotlabs/Module/Connedit.php:914 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1137 msgid "Organisation" msgstr "Organización" -#: ../../Zotlabs/Module/Connedit.php:869 +#: ../../Zotlabs/Module/Connedit.php:915 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1138 #: ../../include/page_widgets.php:46 msgid "Title" msgstr "Título" -#: ../../Zotlabs/Module/Connedit.php:870 ../../Zotlabs/Module/Profiles.php:788 +#: ../../Zotlabs/Module/Connedit.php:916 ../../Zotlabs/Module/Profiles.php:789 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1139 msgid "Phone" msgstr "Teléfono" -#: ../../Zotlabs/Module/Connedit.php:872 ../../Zotlabs/Module/Profiles.php:790 +#: ../../Zotlabs/Module/Connedit.php:918 ../../Zotlabs/Module/Profiles.php:791 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1141 msgid "Instant messenger" msgstr "Mensajería instantánea" -#: ../../Zotlabs/Module/Connedit.php:873 ../../Zotlabs/Module/Profiles.php:791 +#: ../../Zotlabs/Module/Connedit.php:919 ../../Zotlabs/Module/Profiles.php:792 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1142 msgid "Website" msgstr "Sitio web" -#: ../../Zotlabs/Module/Connedit.php:875 ../../Zotlabs/Module/Profiles.php:793 +#: ../../Zotlabs/Module/Connedit.php:921 ../../Zotlabs/Module/Profiles.php:794 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1144 msgid "Note" msgstr "Nota" -#: ../../Zotlabs/Module/Connedit.php:876 ../../Zotlabs/Module/Profiles.php:794 +#: ../../Zotlabs/Module/Connedit.php:922 ../../Zotlabs/Module/Profiles.php:795 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1145 #: ../../extend/addon/addon/cdav/cdav.php:270 #: ../../include/connections.php:668 msgid "Mobile" msgstr "Móvil" -#: ../../Zotlabs/Module/Connedit.php:877 ../../Zotlabs/Module/Profiles.php:795 +#: ../../Zotlabs/Module/Connedit.php:923 ../../Zotlabs/Module/Profiles.php:796 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1146 #: ../../extend/addon/addon/cdav/cdav.php:271 #: ../../include/connections.php:669 msgid "Home" msgstr "Inicio" -#: ../../Zotlabs/Module/Connedit.php:878 ../../Zotlabs/Module/Profiles.php:796 +#: ../../Zotlabs/Module/Connedit.php:924 ../../Zotlabs/Module/Profiles.php:797 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1147 #: ../../extend/addon/addon/cdav/cdav.php:274 #: ../../include/connections.php:672 msgid "Work" msgstr "Trabajo" -#: ../../Zotlabs/Module/Connedit.php:880 ../../Zotlabs/Module/Profiles.php:798 +#: ../../Zotlabs/Module/Connedit.php:926 ../../Zotlabs/Module/Profiles.php:799 #: ../../extend/addon/addon/jappixmini/jappixmini.php:368 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1149 msgid "Add Contact" msgstr "Añadir un contacto" -#: ../../Zotlabs/Module/Connedit.php:881 ../../Zotlabs/Module/Profiles.php:799 +#: ../../Zotlabs/Module/Connedit.php:927 ../../Zotlabs/Module/Profiles.php:800 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1150 msgid "Add Field" msgstr "Añadir un campo" -#: ../../Zotlabs/Module/Connedit.php:886 +#: ../../Zotlabs/Module/Connedit.php:932 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1155 msgid "P.O. Box" msgstr "Buzón de correos" -#: ../../Zotlabs/Module/Connedit.php:887 +#: ../../Zotlabs/Module/Connedit.php:933 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1156 msgid "Additional" msgstr "Adicional" -#: ../../Zotlabs/Module/Connedit.php:888 +#: ../../Zotlabs/Module/Connedit.php:934 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1157 msgid "Street" msgstr "Calle" -#: ../../Zotlabs/Module/Connedit.php:889 +#: ../../Zotlabs/Module/Connedit.php:935 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1158 msgid "Locality" msgstr "Localidad" -#: ../../Zotlabs/Module/Connedit.php:890 +#: ../../Zotlabs/Module/Connedit.php:936 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1159 msgid "Region" msgstr "Provincia, región o estado" -#: ../../Zotlabs/Module/Connedit.php:891 +#: ../../Zotlabs/Module/Connedit.php:937 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1160 msgid "ZIP Code" msgstr "Código postal" -#: ../../Zotlabs/Module/Connedit.php:892 ../../Zotlabs/Module/Profiles.php:760 +#: ../../Zotlabs/Module/Connedit.php:938 ../../Zotlabs/Module/Profiles.php:760 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:1161 msgid "Country" msgstr "País" @@ -3458,7 +3494,7 @@ msgstr "Evento no encontrado." #: ../../Zotlabs/Module/Events.php:260 ../../Zotlabs/Module/Like.php:372 #: ../../Zotlabs/Module/Tagger.php:51 ../../include/event.php:1141 -#: ../../include/text.php:1956 ../../include/conversation.php:123 +#: ../../include/conversation.php:123 ../../include/text.php:1961 msgid "event" msgstr "evento" @@ -3522,8 +3558,8 @@ msgstr "Editar la descripción" msgid "Edit Location" msgstr "Modificar la dirección" -#: ../../Zotlabs/Module/Events.php:478 ../../Zotlabs/Module/Webpages.php:251 -#: ../../Zotlabs/Module/Photos.php:1094 ../../Zotlabs/Lib/ThreadItem.php:740 +#: ../../Zotlabs/Module/Events.php:478 ../../Zotlabs/Module/Photos.php:1094 +#: ../../Zotlabs/Module/Webpages.php:251 ../../Zotlabs/Lib/ThreadItem.php:740 #: ../../include/page_widgets.php:43 ../../include/conversation.php:1347 msgid "Preview" msgstr "Previsualizar" @@ -3553,7 +3589,7 @@ msgid "Delete event" msgstr "Borrar evento" #: ../../Zotlabs/Module/Events.php:660 ../../Zotlabs/Module/Cal.php:312 -#: ../../include/text.php:1761 +#: ../../include/text.php:1766 msgid "Link to Source" msgstr "Enlazar con la entrada en su ubicación original" @@ -3570,15 +3606,15 @@ msgid "Create Event" msgstr "Crear un evento" #: ../../Zotlabs/Module/Events.php:689 ../../Zotlabs/Module/Events.php:698 -#: ../../Zotlabs/Module/Cal.php:336 ../../Zotlabs/Module/Cal.php:343 -#: ../../Zotlabs/Module/Photos.php:935 +#: ../../Zotlabs/Module/Photos.php:935 ../../Zotlabs/Module/Cal.php:336 +#: ../../Zotlabs/Module/Cal.php:343 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:846 msgid "Previous" msgstr "Anterior" #: ../../Zotlabs/Module/Events.php:690 ../../Zotlabs/Module/Events.php:699 -#: ../../Zotlabs/Module/Cal.php:337 ../../Zotlabs/Module/Cal.php:344 -#: ../../Zotlabs/Module/Photos.php:944 ../../Zotlabs/Module/Setup.php:264 +#: ../../Zotlabs/Module/Photos.php:944 ../../Zotlabs/Module/Cal.php:337 +#: ../../Zotlabs/Module/Cal.php:344 ../../Zotlabs/Module/Setup.php:264 #: ../../extend/addon/addon/cdav/Mod_Cdav.php:847 msgid "Next" msgstr "Siguiente" @@ -3675,14 +3711,305 @@ msgstr "Avisar a sus contactos sobre este fichero" msgid "Photos" msgstr "Fotos" -#: ../../Zotlabs/Module/Display.php:22 ../../Zotlabs/Module/Ratings.php:83 -#: ../../Zotlabs/Module/Search.php:17 ../../Zotlabs/Module/Directory.php:64 -#: ../../Zotlabs/Module/Photos.php:508 +#: ../../Zotlabs/Module/Photos.php:82 +msgid "Page owner information could not be retrieved." +msgstr "La información del propietario de la página no pudo ser recuperada." + +#: ../../Zotlabs/Module/Photos.php:97 ../../Zotlabs/Module/Photos.php:729 +#: ../../Zotlabs/Module/Profile_photo.php:115 +#: ../../Zotlabs/Module/Profile_photo.php:224 +#: ../../include/photo/photo_driver.php:730 +msgid "Profile Photos" +msgstr "Fotos del perfil" + +#: ../../Zotlabs/Module/Photos.php:103 ../../Zotlabs/Module/Photos.php:129 +msgid "Album not found." +msgstr "Álbum no encontrado." + +#: ../../Zotlabs/Module/Photos.php:112 +msgid "Delete Album" +msgstr "Borrar álbum" + +#: ../../Zotlabs/Module/Photos.php:133 +msgid "" +"Multiple storage folders exist with this album name, but within different " +"directories. Please remove the desired folder or folders using the Files " +"manager" +msgstr "Hay varias carpetas con este nombre de álbum, pero dentro de diferentes directorios. Por favor, elimine la carpeta o carpetas que desee utilizando el administrador de ficheros" + +#: ../../Zotlabs/Module/Photos.php:190 ../../Zotlabs/Module/Photos.php:1054 +msgid "Delete Photo" +msgstr "Borrar foto" + +#: ../../Zotlabs/Module/Photos.php:508 ../../Zotlabs/Module/Display.php:22 +#: ../../Zotlabs/Module/Ratings.php:83 ../../Zotlabs/Module/Search.php:17 +#: ../../Zotlabs/Module/Directory.php:64 #: ../../Zotlabs/Module/Viewconnections.php:23 #: ../../extend/addon/addon/friendica/dfrn_request.php:794 msgid "Public access denied." msgstr "Acceso público denegado." +#: ../../Zotlabs/Module/Photos.php:519 +msgid "No photos selected" +msgstr "No hay fotos seleccionadas" + +#: ../../Zotlabs/Module/Photos.php:568 +msgid "Access to this item is restricted." +msgstr "El acceso a este elemento está restringido." + +#: ../../Zotlabs/Module/Photos.php:607 +#, php-format +msgid "%1$.2f MB of %2$.2f MB photo storage used." +msgstr "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado." + +#: ../../Zotlabs/Module/Photos.php:610 +#, php-format +msgid "%1$.2f MB photo storage used." +msgstr "%1$.2f MB de almacenamiento de fotos utilizado." + +#: ../../Zotlabs/Module/Photos.php:646 +msgid "Upload Photos" +msgstr "Subir fotos" + +#: ../../Zotlabs/Module/Photos.php:650 +msgid "Enter an album name" +msgstr "Introducir un nombre de álbum" + +#: ../../Zotlabs/Module/Photos.php:651 +msgid "or select an existing album (doubleclick)" +msgstr "o seleccionar uno existente (doble click)" + +#: ../../Zotlabs/Module/Photos.php:652 +msgid "Create a status post for this upload" +msgstr "Crear un mensaje de estado para esta subida" + +#: ../../Zotlabs/Module/Photos.php:653 +msgid "Caption (optional):" +msgstr "Título (opcional):" + +#: ../../Zotlabs/Module/Photos.php:654 +msgid "Description (optional):" +msgstr "Descripción (opcional):" + +#: ../../Zotlabs/Module/Photos.php:685 +msgid "Album name could not be decoded" +msgstr "El nombre del álbum no ha podido ser descifrado" + +#: ../../Zotlabs/Module/Photos.php:729 +msgid "Contact Photos" +msgstr "Fotos de contacto" + +#: ../../Zotlabs/Module/Photos.php:752 +msgid "Show Newest First" +msgstr "Mostrar lo más reciente primero" + +#: ../../Zotlabs/Module/Photos.php:754 +msgid "Show Oldest First" +msgstr "Mostrar lo más antiguo primero" + +#: ../../Zotlabs/Module/Photos.php:778 ../../Zotlabs/Module/Photos.php:1335 +#: ../../Zotlabs/Module/Embedphotos.php:139 ../../include/widgets.php:1751 +msgid "View Photo" +msgstr "Ver foto" + +#: ../../Zotlabs/Module/Photos.php:809 +#: ../../Zotlabs/Module/Embedphotos.php:155 ../../include/widgets.php:1768 +msgid "Edit Album" +msgstr "Editar álbum" + +#: ../../Zotlabs/Module/Photos.php:856 +msgid "Permission denied. Access to this item may be restricted." +msgstr "Permiso denegado. El acceso a este elemento puede estar restringido." + +#: ../../Zotlabs/Module/Photos.php:858 +msgid "Photo not available" +msgstr "Foto no disponible" + +#: ../../Zotlabs/Module/Photos.php:916 +msgid "Use as profile photo" +msgstr "Usar como foto del perfil" + +#: ../../Zotlabs/Module/Photos.php:917 +msgid "Use as cover photo" +msgstr "Usar como imagen de portada del perfil" + +#: ../../Zotlabs/Module/Photos.php:924 +msgid "Private Photo" +msgstr "Foto privada" + +#: ../../Zotlabs/Module/Photos.php:939 +msgid "View Full Size" +msgstr "Ver tamaño completo" + +#: ../../Zotlabs/Module/Photos.php:1028 +msgid "Edit photo" +msgstr "Editar foto" + +#: ../../Zotlabs/Module/Photos.php:1030 +msgid "Rotate CW (right)" +msgstr "Girar CW (a la derecha)" + +#: ../../Zotlabs/Module/Photos.php:1031 +msgid "Rotate CCW (left)" +msgstr "Girar CCW (a la izquierda)" + +#: ../../Zotlabs/Module/Photos.php:1034 +msgid "Move photo to album" +msgstr "Mover la foto a un álbum" + +#: ../../Zotlabs/Module/Photos.php:1035 +msgid "Enter a new album name" +msgstr "Introducir un nuevo nombre de álbum" + +#: ../../Zotlabs/Module/Photos.php:1036 +msgid "or select an existing one (doubleclick)" +msgstr "o seleccionar uno (doble click) existente" + +#: ../../Zotlabs/Module/Photos.php:1039 +msgid "Caption" +msgstr "Título" + +#: ../../Zotlabs/Module/Photos.php:1041 +msgid "Add a Tag" +msgstr "Añadir una etiqueta" + +#: ../../Zotlabs/Module/Photos.php:1049 +msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" +msgstr "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com" + +#: ../../Zotlabs/Module/Photos.php:1052 +msgid "Flag as adult in album view" +msgstr "Marcar como \"solo para adultos\" en el álbum" + +#: ../../Zotlabs/Module/Photos.php:1071 ../../Zotlabs/Lib/ThreadItem.php:268 +msgid "I like this (toggle)" +msgstr "Me gusta (cambiar)" + +#: ../../Zotlabs/Module/Photos.php:1072 ../../Zotlabs/Lib/ThreadItem.php:269 +msgid "I don't like this (toggle)" +msgstr "No me gusta esto (cambiar)" + +#: ../../Zotlabs/Module/Photos.php:1073 ../../Zotlabs/Module/Webpages.php:245 +#: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Layouts.php:193 +#: ../../extend/addon/addon/cdav/include/widgets.php:123 +#: ../../include/conversation.php:1378 +msgid "Share" +msgstr "Compartir" + +#: ../../Zotlabs/Module/Photos.php:1074 ../../Zotlabs/Lib/ThreadItem.php:411 +#: ../../include/conversation.php:738 +msgid "Please wait" +msgstr "Espere por favor" + +#: ../../Zotlabs/Module/Photos.php:1090 ../../Zotlabs/Module/Photos.php:1208 +#: ../../Zotlabs/Lib/ThreadItem.php:728 +msgid "This is you" +msgstr "Este es usted" + +#: ../../Zotlabs/Module/Photos.php:1092 ../../Zotlabs/Module/Photos.php:1210 +#: ../../Zotlabs/Lib/ThreadItem.php:730 ../../include/js_strings.php:6 +msgid "Comment" +msgstr "Comentar" + +#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:577 +msgctxt "title" +msgid "Likes" +msgstr "Me gusta" + +#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:577 +msgctxt "title" +msgid "Dislikes" +msgstr "No me gusta" + +#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:578 +msgctxt "title" +msgid "Agree" +msgstr "De acuerdo" + +#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:578 +msgctxt "title" +msgid "Disagree" +msgstr "En desacuerdo" + +#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:578 +msgctxt "title" +msgid "Abstain" +msgstr "Abstención" + +#: ../../Zotlabs/Module/Photos.php:1110 ../../include/conversation.php:579 +msgctxt "title" +msgid "Attending" +msgstr "Participaré" + +#: ../../Zotlabs/Module/Photos.php:1110 ../../include/conversation.php:579 +msgctxt "title" +msgid "Not attending" +msgstr "No participaré" + +#: ../../Zotlabs/Module/Photos.php:1110 ../../include/conversation.php:579 +msgctxt "title" +msgid "Might attend" +msgstr "Quizá participe" + +#: ../../Zotlabs/Module/Photos.php:1127 ../../Zotlabs/Module/Photos.php:1139 +#: ../../Zotlabs/Lib/ThreadItem.php:186 ../../Zotlabs/Lib/ThreadItem.php:198 +#: ../../include/conversation.php:1928 +msgid "View all" +msgstr "Ver todo" + +#: ../../Zotlabs/Module/Photos.php:1131 ../../Zotlabs/Lib/ThreadItem.php:190 +#: ../../include/taxonomy.php:403 ../../include/conversation.php:1952 +#: ../../include/channel.php:1273 +msgctxt "noun" +msgid "Like" +msgid_plural "Likes" +msgstr[0] "Me gusta" +msgstr[1] "Me gusta" + +#: ../../Zotlabs/Module/Photos.php:1136 ../../Zotlabs/Lib/ThreadItem.php:195 +#: ../../include/conversation.php:1955 +msgctxt "noun" +msgid "Dislike" +msgid_plural "Dislikes" +msgstr[0] "No me gusta" +msgstr[1] "No me gusta" + +#: ../../Zotlabs/Module/Photos.php:1236 +msgid "Photo Tools" +msgstr "Gestión de las fotos" + +#: ../../Zotlabs/Module/Photos.php:1245 +msgid "In This Photo:" +msgstr "En esta foto:" + +#: ../../Zotlabs/Module/Photos.php:1250 +msgid "Map" +msgstr "Mapa" + +#: ../../Zotlabs/Module/Photos.php:1258 ../../Zotlabs/Lib/ThreadItem.php:400 +msgctxt "noun" +msgid "Likes" +msgstr "Me gusta" + +#: ../../Zotlabs/Module/Photos.php:1259 ../../Zotlabs/Lib/ThreadItem.php:401 +msgctxt "noun" +msgid "Dislikes" +msgstr "No me gusta" + +#: ../../Zotlabs/Module/Photos.php:1264 ../../Zotlabs/Lib/ThreadItem.php:406 +#: ../../include/acl_selectors.php:220 +msgid "Close" +msgstr "Cerrar" + +#: ../../Zotlabs/Module/Photos.php:1341 +msgid "View Album" +msgstr "Ver álbum" + +#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1365 +#: ../../Zotlabs/Module/Photos.php:1366 +msgid "Recent Photos" +msgstr "Fotos recientes" + #: ../../Zotlabs/Module/Group.php:24 msgid "Privacy group created." msgstr "El grupo de canales ha sido creado." @@ -3958,8 +4285,8 @@ msgstr "Ha creado %1$.0f de %2$.0f canales permitidos." msgid "Create a new channel" msgstr "Crear un nuevo canal" -#: ../../Zotlabs/Module/Manage.php:143 ../../Zotlabs/Module/Profiles.php:833 -#: ../../Zotlabs/Module/Wiki.php:166 ../../Zotlabs/Module/Chat.php:253 +#: ../../Zotlabs/Module/Manage.php:143 ../../Zotlabs/Module/Profiles.php:834 +#: ../../Zotlabs/Module/Wiki.php:167 ../../Zotlabs/Module/Chat.php:253 #: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:152 msgid "Create New" msgstr "Crear" @@ -4148,7 +4475,7 @@ msgstr "Elemento no disponible" msgid "Permissions denied." msgstr "Permisos denegados." -#: ../../Zotlabs/Module/Cal.php:341 ../../include/text.php:2307 +#: ../../Zotlabs/Module/Cal.php:341 ../../include/text.php:2312 msgid "Import" msgstr "Importar" @@ -4254,7 +4581,7 @@ msgstr "Acerca de este sitio" msgid "Site Name" msgstr "Nombre del sitio" -#: ../../Zotlabs/Module/Siteinfo.php:25 ../../include/network.php:1972 +#: ../../Zotlabs/Module/Siteinfo.php:25 ../../include/network.php:1995 msgid "Administrator" msgstr "Administrador" @@ -4321,13 +4648,6 @@ msgstr "Exportar los elementos seleccionados" msgid "Webpages" msgstr "Páginas web" -#: ../../Zotlabs/Module/Webpages.php:245 ../../Zotlabs/Module/Blocks.php:161 -#: ../../Zotlabs/Module/Layouts.php:193 ../../Zotlabs/Module/Photos.php:1073 -#: ../../extend/addon/addon/cdav/include/widgets.php:123 -#: ../../include/conversation.php:1378 -msgid "Share" -msgstr "Compartir" - #: ../../Zotlabs/Module/Webpages.php:252 ../../include/page_widgets.php:44 msgid "Actions" msgstr "Acciones" @@ -4472,12 +4792,12 @@ msgid "" " to correctly use this feature." msgstr "Atención: El cambio de algunos ajustes puede volver inutilizable su canal. Por favor, abandone la página excepto que esté seguro y sepa cómo usar correctamente esta característica." -#: ../../Zotlabs/Module/Search.php:223 +#: ../../Zotlabs/Module/Search.php:224 #, php-format msgid "Items tagged with: %s" msgstr "elementos etiquetados con: %s" -#: ../../Zotlabs/Module/Search.php:225 +#: ../../Zotlabs/Module/Search.php:226 #, php-format msgid "Search results for: %s" msgstr "Resultados de la búsqueda para: %s" @@ -4496,7 +4816,7 @@ msgctxt "acl" msgid "Profile" msgstr "Perfil" -#: ../../Zotlabs/Module/Blocks.php:154 ../../include/text.php:2283 +#: ../../Zotlabs/Module/Blocks.php:154 ../../include/text.php:2288 msgid "Blocks" msgstr "Bloques" @@ -4504,12 +4824,12 @@ msgstr "Bloques" msgid "Block Title" msgstr "Título del bloque" -#: ../../Zotlabs/Module/Layouts.php:183 ../../include/text.php:2285 +#: ../../Zotlabs/Module/Layouts.php:183 ../../include/text.php:2290 msgid "Layouts" msgstr "Plantillas" #: ../../Zotlabs/Module/Layouts.php:185 ../../Zotlabs/Lib/Apps.php:232 -#: ../../include/help.php:53 ../../include/help.php:59 +#: ../../include/help.php:55 ../../include/help.php:61 #: ../../include/nav.php:174 ../../include/nav.php:288 msgid "Help" msgstr "Ayuda" @@ -4543,29 +4863,22 @@ msgstr "Valoración (esta información es pública)" msgid "Optionally explain your rating (this information is public)" msgstr "Opcionalmente puede explicar su valoración (esta información es pública)" -#: ../../Zotlabs/Module/Profile_photo.php:115 -#: ../../Zotlabs/Module/Profile_photo.php:220 -#: ../../Zotlabs/Module/Photos.php:97 ../../Zotlabs/Module/Photos.php:729 -#: ../../include/photo/photo_driver.php:730 -msgid "Profile Photos" -msgstr "Fotos del perfil" - -#: ../../Zotlabs/Module/Profile_photo.php:190 -#: ../../extend/addon/addon/openclipatar/openclipatar.php:295 +#: ../../Zotlabs/Module/Profile_photo.php:194 +#: ../../extend/addon/addon/openclipatar/openclipatar.php:298 msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." msgstr "Recargue la página o limpie el caché del navegador si la nueva foto no se muestra inmediatamente." -#: ../../Zotlabs/Module/Profile_photo.php:411 +#: ../../Zotlabs/Module/Profile_photo.php:420 msgid "Use Photo for Profile" msgstr "Usar la fotografía para el perfil" -#: ../../Zotlabs/Module/Profile_photo.php:411 +#: ../../Zotlabs/Module/Profile_photo.php:420 msgid "Upload Profile Photo" msgstr "Subir foto de perfil" -#: ../../Zotlabs/Module/Profile_photo.php:412 +#: ../../Zotlabs/Module/Profile_photo.php:421 #: ../../extend/addon/addon/openclipatar/openclipatar.php:182 #: ../../extend/addon/addon/openclipatar/openclipatar.php:194 msgid "Use" @@ -4610,13 +4923,13 @@ msgstr "Acción anterior revocada." #: ../../Zotlabs/Module/Tagger.php:47 #: ../../extend/addon/addon/diaspora/inbound.php:1794 #: ../../extend/addon/addon/redphotos/redphotohelper.php:74 -#: ../../include/text.php:1953 ../../include/conversation.php:120 +#: ../../include/conversation.php:120 ../../include/text.php:1958 msgid "photo" msgstr "foto" #: ../../Zotlabs/Module/Like.php:370 ../../Zotlabs/Module/Subthread.php:87 #: ../../extend/addon/addon/diaspora/inbound.php:1794 -#: ../../include/text.php:1959 ../../include/conversation.php:148 +#: ../../include/conversation.php:148 ../../include/text.php:1964 msgid "status" msgstr "el mensaje de estado" @@ -4913,8 +5226,8 @@ msgid "Age:" msgstr "Edad:" #: ../../Zotlabs/Module/Directory.php:315 ../../include/event.php:52 -#: ../../include/event.php:84 ../../include/channel.php:1134 -#: ../../include/markdown.php:561 +#: ../../include/event.php:84 ../../include/markdown.php:562 +#: ../../include/channel.php:1134 msgid "Location:" msgstr "Ubicación:" @@ -4932,8 +5245,8 @@ msgstr "Sobre mí:" #: ../../Zotlabs/Module/Directory.php:329 ../../Zotlabs/Module/Suggest.php:56 #: ../../include/widgets.php:134 ../../include/widgets.php:171 -#: ../../include/channel.php:1119 ../../include/conversation.php:938 -#: ../../include/conversation.php:1069 ../../include/connections.php:110 +#: ../../include/connections.php:110 ../../include/conversation.php:938 +#: ../../include/conversation.php:1069 ../../include/channel.php:1119 msgid "Connect" msgstr "Conectar" @@ -5014,282 +5327,168 @@ msgstr "No se puede encontrar su servidor." msgid "Post successful." msgstr "Enviado con éxito." -#: ../../Zotlabs/Module/Photos.php:82 -msgid "Page owner information could not be retrieved." -msgstr "La información del propietario de la página no pudo ser recuperada." - -#: ../../Zotlabs/Module/Photos.php:103 ../../Zotlabs/Module/Photos.php:129 -msgid "Album not found." -msgstr "Álbum no encontrado." - -#: ../../Zotlabs/Module/Photos.php:112 -msgid "Delete Album" -msgstr "Borrar álbum" - -#: ../../Zotlabs/Module/Photos.php:133 -msgid "" -"Multiple storage folders exist with this album name, but within different " -"directories. Please remove the desired folder or folders using the Files " -"manager" -msgstr "Hay varias carpetas con este nombre de álbum, pero dentro de diferentes directorios. Por favor, elimine la carpeta o carpetas que desee utilizando el administrador de ficheros" - -#: ../../Zotlabs/Module/Photos.php:190 ../../Zotlabs/Module/Photos.php:1054 -msgid "Delete Photo" -msgstr "Borrar foto" - -#: ../../Zotlabs/Module/Photos.php:519 -msgid "No photos selected" -msgstr "No hay fotos seleccionadas" - -#: ../../Zotlabs/Module/Photos.php:568 -msgid "Access to this item is restricted." -msgstr "El acceso a este elemento está restringido." - -#: ../../Zotlabs/Module/Photos.php:607 -#, php-format -msgid "%1$.2f MB of %2$.2f MB photo storage used." -msgstr "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado." - -#: ../../Zotlabs/Module/Photos.php:610 -#, php-format -msgid "%1$.2f MB photo storage used." -msgstr "%1$.2f MB de almacenamiento de fotos utilizado." - -#: ../../Zotlabs/Module/Photos.php:646 -msgid "Upload Photos" -msgstr "Subir fotos" - -#: ../../Zotlabs/Module/Photos.php:650 -msgid "Enter an album name" -msgstr "Introducir un nombre de álbum" - -#: ../../Zotlabs/Module/Photos.php:651 -msgid "or select an existing album (doubleclick)" -msgstr "o seleccionar uno existente (doble click)" - -#: ../../Zotlabs/Module/Photos.php:652 -msgid "Create a status post for this upload" -msgstr "Crear un mensaje de estado para esta subida" - -#: ../../Zotlabs/Module/Photos.php:653 -msgid "Caption (optional):" -msgstr "Título (opcional):" - -#: ../../Zotlabs/Module/Photos.php:654 -msgid "Description (optional):" -msgstr "Descripción (opcional):" - -#: ../../Zotlabs/Module/Photos.php:685 -msgid "Album name could not be decoded" -msgstr "El nombre del álbum no ha podido ser descifrado" - -#: ../../Zotlabs/Module/Photos.php:729 -msgid "Contact Photos" -msgstr "Fotos de contacto" - -#: ../../Zotlabs/Module/Photos.php:752 -msgid "Show Newest First" -msgstr "Mostrar lo más reciente primero" - -#: ../../Zotlabs/Module/Photos.php:754 -msgid "Show Oldest First" -msgstr "Mostrar lo más antiguo primero" - -#: ../../Zotlabs/Module/Photos.php:778 ../../Zotlabs/Module/Photos.php:1335 -#: ../../Zotlabs/Module/Embedphotos.php:139 ../../include/widgets.php:1694 -msgid "View Photo" -msgstr "Ver foto" - -#: ../../Zotlabs/Module/Photos.php:809 -#: ../../Zotlabs/Module/Embedphotos.php:155 ../../include/widgets.php:1711 -msgid "Edit Album" -msgstr "Editar álbum" - -#: ../../Zotlabs/Module/Photos.php:856 -msgid "Permission denied. Access to this item may be restricted." -msgstr "Permiso denegado. El acceso a este elemento puede estar restringido." - -#: ../../Zotlabs/Module/Photos.php:858 -msgid "Photo not available" -msgstr "Foto no disponible" - -#: ../../Zotlabs/Module/Photos.php:916 -msgid "Use as profile photo" -msgstr "Usar como foto del perfil" - -#: ../../Zotlabs/Module/Photos.php:917 -msgid "Use as cover photo" -msgstr "Usar como imagen de portada del perfil" +#: ../../Zotlabs/Module/Viewsrc.php:46 +msgid "Source of Item" +msgstr "Origen del elemento" -#: ../../Zotlabs/Module/Photos.php:924 -msgid "Private Photo" -msgstr "Foto privada" +#: ../../Zotlabs/Module/Service_limits.php:23 +msgid "No service class restrictions found." +msgstr "No se han encontrado restricciones sobre esta clase de servicio." -#: ../../Zotlabs/Module/Photos.php:939 -msgid "View Full Size" -msgstr "Ver tamaño completo" +#: ../../Zotlabs/Module/Acl.php:344 +msgid "network" +msgstr "red" -#: ../../Zotlabs/Module/Photos.php:1028 -msgid "Edit photo" -msgstr "Editar foto" +#: ../../Zotlabs/Module/Acl.php:354 +msgid "RSS" +msgstr "RSS" -#: ../../Zotlabs/Module/Photos.php:1030 -msgid "Rotate CW (right)" -msgstr "Girar CW (a la derecha)" +#: ../../Zotlabs/Module/Removeme.php:35 +msgid "" +"Channel removals are not allowed within 48 hours of changing the account " +"password." +msgstr "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña." -#: ../../Zotlabs/Module/Photos.php:1031 -msgid "Rotate CCW (left)" -msgstr "Girar CCW (a la izquierda)" +#: ../../Zotlabs/Module/Removeme.php:60 +msgid "Remove This Channel" +msgstr "Eliminar este canal" -#: ../../Zotlabs/Module/Photos.php:1034 -msgid "Move photo to album" -msgstr "Mover la foto a un álbum" +#: ../../Zotlabs/Module/Removeme.php:61 +msgid "This channel will be completely removed from the network. " +msgstr "Este canal va a ser completamente eliminado de la red. " -#: ../../Zotlabs/Module/Photos.php:1035 -msgid "Enter a new album name" -msgstr "Introducir un nuevo nombre de álbum" +#: ../../Zotlabs/Module/Removeme.php:63 +msgid "Remove this channel and all its clones from the network" +msgstr "Eliminar este canal y todos sus clones de la red" -#: ../../Zotlabs/Module/Photos.php:1036 -msgid "or select an existing one (doubleclick)" -msgstr "o seleccionar uno (doble click) existente" +#: ../../Zotlabs/Module/Removeme.php:63 +msgid "" +"By default only the instance of the channel located on this hub will be " +"removed from the network" +msgstr "Por defecto, solo la instancia del canal alojado en este servidor será eliminado de la red" -#: ../../Zotlabs/Module/Photos.php:1039 -msgid "Caption" -msgstr "Título" +#: ../../Zotlabs/Module/Removeme.php:64 +#: ../../Zotlabs/Module/Settings/Channel.php:575 +msgid "Remove Channel" +msgstr "Eliminar el canal" -#: ../../Zotlabs/Module/Photos.php:1041 -msgid "Add a Tag" -msgstr "Añadir una etiqueta" +#: ../../Zotlabs/Module/Sharedwithme.php:98 +msgid "Files: shared with me" +msgstr "Ficheros: compartidos conmigo" -#: ../../Zotlabs/Module/Photos.php:1049 -msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" -msgstr "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com" +#: ../../Zotlabs/Module/Sharedwithme.php:100 +msgid "NEW" +msgstr "NUEVO" -#: ../../Zotlabs/Module/Photos.php:1052 -msgid "Flag as adult in album view" -msgstr "Marcar como \"solo para adultos\" en el álbum" +#: ../../Zotlabs/Module/Sharedwithme.php:103 +msgid "Remove all files" +msgstr "Eliminar todos los ficheros" -#: ../../Zotlabs/Module/Photos.php:1071 ../../Zotlabs/Lib/ThreadItem.php:268 -msgid "I like this (toggle)" -msgstr "Me gusta (cambiar)" +#: ../../Zotlabs/Module/Sharedwithme.php:104 +msgid "Remove this file" +msgstr "Eliminar este fichero" -#: ../../Zotlabs/Module/Photos.php:1072 ../../Zotlabs/Lib/ThreadItem.php:269 -msgid "I don't like this (toggle)" -msgstr "No me gusta esto (cambiar)" +#: ../../Zotlabs/Module/Tagger.php:55 ../../include/bbcode.php:274 +msgid "post" +msgstr "la entrada" -#: ../../Zotlabs/Module/Photos.php:1074 ../../Zotlabs/Lib/ThreadItem.php:411 -#: ../../include/conversation.php:738 -msgid "Please wait" -msgstr "Espere por favor" +#: ../../Zotlabs/Module/Tagger.php:57 ../../include/conversation.php:150 +#: ../../include/text.php:1966 +msgid "comment" +msgstr "el comentario" -#: ../../Zotlabs/Module/Photos.php:1090 ../../Zotlabs/Module/Photos.php:1208 -#: ../../Zotlabs/Lib/ThreadItem.php:728 -msgid "This is you" -msgstr "Este es usted" +#: ../../Zotlabs/Module/Tagger.php:95 +#, php-format +msgid "%1$s tagged %2$s's %3$s with %4$s" +msgstr "%1$s ha etiquetado %3$s de %2$s con %4$s" -#: ../../Zotlabs/Module/Photos.php:1092 ../../Zotlabs/Module/Photos.php:1210 -#: ../../Zotlabs/Lib/ThreadItem.php:730 ../../include/js_strings.php:6 -msgid "Comment" -msgstr "Comentar" +#: ../../Zotlabs/Module/Sources.php:37 +msgid "Failed to create source. No channel selected." +msgstr "No se ha podido crear el origen de los contenidos. No ha sido seleccionado ningún canal." -#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:577 -msgctxt "title" -msgid "Likes" -msgstr "Me gusta" +#: ../../Zotlabs/Module/Sources.php:51 +msgid "Source created." +msgstr "Fuente creada." -#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:577 -msgctxt "title" -msgid "Dislikes" -msgstr "No me gusta" +#: ../../Zotlabs/Module/Sources.php:64 +msgid "Source updated." +msgstr "Fuente actualizada." -#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:578 -msgctxt "title" -msgid "Agree" -msgstr "De acuerdo" +#: ../../Zotlabs/Module/Sources.php:90 +msgid "*" +msgstr "*" -#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:578 -msgctxt "title" -msgid "Disagree" -msgstr "En desacuerdo" +#: ../../Zotlabs/Module/Sources.php:96 ../../include/widgets.php:677 +#: ../../include/features.php:213 +msgid "Channel Sources" +msgstr "Orígenes de los contenidos del canal" -#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:578 -msgctxt "title" -msgid "Abstain" -msgstr "Abstención" +#: ../../Zotlabs/Module/Sources.php:97 +msgid "Manage remote sources of content for your channel." +msgstr "Gestionar contenido de origen remoto para su canal." -#: ../../Zotlabs/Module/Photos.php:1110 ../../include/conversation.php:579 -msgctxt "title" -msgid "Attending" -msgstr "Participaré" +#: ../../Zotlabs/Module/Sources.php:98 ../../Zotlabs/Module/Sources.php:108 +msgid "New Source" +msgstr "Nueva fuente" -#: ../../Zotlabs/Module/Photos.php:1110 ../../include/conversation.php:579 -msgctxt "title" -msgid "Not attending" -msgstr "No participaré" +#: ../../Zotlabs/Module/Sources.php:109 ../../Zotlabs/Module/Sources.php:143 +msgid "" +"Import all or selected content from the following channel into this channel " +"and distribute it according to your channel settings." +msgstr "Importar todo el contenido o una selección de los siguientes canales en este canal y distribuirlo de acuerdo con sus ajustes." -#: ../../Zotlabs/Module/Photos.php:1110 ../../include/conversation.php:579 -msgctxt "title" -msgid "Might attend" -msgstr "Quizá participe" +#: ../../Zotlabs/Module/Sources.php:110 ../../Zotlabs/Module/Sources.php:144 +msgid "Only import content with these words (one per line)" +msgstr "Importar solo contenido que contenga estas palabras (una por línea)" -#: ../../Zotlabs/Module/Photos.php:1127 ../../Zotlabs/Module/Photos.php:1139 -#: ../../Zotlabs/Lib/ThreadItem.php:186 ../../Zotlabs/Lib/ThreadItem.php:198 -#: ../../include/conversation.php:1928 -msgid "View all" -msgstr "Ver todo" +#: ../../Zotlabs/Module/Sources.php:110 ../../Zotlabs/Module/Sources.php:144 +msgid "Leave blank to import all public content" +msgstr "Dejar en blanco para importar todo el contenido público" -#: ../../Zotlabs/Module/Photos.php:1131 ../../Zotlabs/Lib/ThreadItem.php:190 -#: ../../include/taxonomy.php:403 ../../include/channel.php:1273 -#: ../../include/conversation.php:1952 -msgctxt "noun" -msgid "Like" -msgid_plural "Likes" -msgstr[0] "Me gusta" -msgstr[1] "Me gusta" +#: ../../Zotlabs/Module/Sources.php:111 ../../Zotlabs/Module/Sources.php:148 +msgid "Channel Name" +msgstr "Nombre del canal" -#: ../../Zotlabs/Module/Photos.php:1136 ../../Zotlabs/Lib/ThreadItem.php:195 -#: ../../include/conversation.php:1955 -msgctxt "noun" -msgid "Dislike" -msgid_plural "Dislikes" -msgstr[0] "No me gusta" -msgstr[1] "No me gusta" +#: ../../Zotlabs/Module/Sources.php:112 ../../Zotlabs/Module/Sources.php:147 +msgid "" +"Add the following categories to posts imported from this source (comma " +"separated)" +msgstr "Añadir los temas siguientes a las entradas importadas de esta fuente (separadas por comas)" -#: ../../Zotlabs/Module/Photos.php:1236 -msgid "Photo Tools" -msgstr "Gestión de las fotos" +#: ../../Zotlabs/Module/Sources.php:112 ../../Zotlabs/Module/Sources.php:147 +#: ../../Zotlabs/Module/Settings/Oauth.php:93 +msgid "Optional" +msgstr "Opcional" -#: ../../Zotlabs/Module/Photos.php:1245 -msgid "In This Photo:" -msgstr "En esta foto:" +#: ../../Zotlabs/Module/Sources.php:133 ../../Zotlabs/Module/Sources.php:161 +msgid "Source not found." +msgstr "Fuente no encontrada" -#: ../../Zotlabs/Module/Photos.php:1250 -msgid "Map" -msgstr "Mapa" +#: ../../Zotlabs/Module/Sources.php:140 +msgid "Edit Source" +msgstr "Editar fuente" -#: ../../Zotlabs/Module/Photos.php:1258 ../../Zotlabs/Lib/ThreadItem.php:400 -msgctxt "noun" -msgid "Likes" -msgstr "Me gusta" +#: ../../Zotlabs/Module/Sources.php:141 +msgid "Delete Source" +msgstr "Eliminar fuente" -#: ../../Zotlabs/Module/Photos.php:1259 ../../Zotlabs/Lib/ThreadItem.php:401 -msgctxt "noun" -msgid "Dislikes" -msgstr "No me gusta" +#: ../../Zotlabs/Module/Sources.php:169 +msgid "Source removed" +msgstr "Fuente eliminada" -#: ../../Zotlabs/Module/Photos.php:1264 ../../Zotlabs/Lib/ThreadItem.php:406 -#: ../../include/acl_selectors.php:220 -msgid "Close" -msgstr "Cerrar" +#: ../../Zotlabs/Module/Sources.php:171 +msgid "Unable to remove source." +msgstr "No se puede eliminar la fuente." -#: ../../Zotlabs/Module/Photos.php:1341 -msgid "View Album" -msgstr "Ver álbum" +#: ../../Zotlabs/Module/Suggest.php:39 +msgid "" +"No suggestions available. If this is a new site, please try again in 24 " +"hours." +msgstr "No hay sugerencias disponibles. Si es un sitio nuevo, espere 24 horas y pruebe de nuevo." -#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1365 -#: ../../Zotlabs/Module/Photos.php:1366 -msgid "Recent Photos" -msgstr "Fotos recientes" +#: ../../Zotlabs/Module/Suggest.php:58 ../../include/widgets.php:136 +msgid "Ignore/Hide" +msgstr "Ignorar/Ocultar" #: ../../Zotlabs/Module/Profiles.php:24 ../../Zotlabs/Module/Profiles.php:184 #: ../../Zotlabs/Module/Profiles.php:241 ../../Zotlabs/Module/Profiles.php:659 @@ -5382,7 +5581,7 @@ msgstr "Modificar los detalles de este perfil" msgid "View this profile" msgstr "Ver este perfil" -#: ../../Zotlabs/Module/Profiles.php:728 ../../Zotlabs/Module/Profiles.php:826 +#: ../../Zotlabs/Module/Profiles.php:728 ../../Zotlabs/Module/Profiles.php:827 #: ../../include/channel.php:1066 msgid "Edit visibility" msgstr "Editar visibilidad" @@ -5556,350 +5755,19 @@ msgstr "Información de contacto y redes sociales" msgid "My other channels" msgstr "Mis otros canales" -#: ../../Zotlabs/Module/Profiles.php:822 ../../include/channel.php:1062 +#: ../../Zotlabs/Module/Profiles.php:788 +msgid "Communications" +msgstr "Comunicaciones" + +#: ../../Zotlabs/Module/Profiles.php:823 ../../include/channel.php:1062 msgid "Profile Image" msgstr "Imagen del perfil" -#: ../../Zotlabs/Module/Profiles.php:832 ../../include/channel.php:1044 -#: ../../include/nav.php:105 +#: ../../Zotlabs/Module/Profiles.php:833 ../../include/nav.php:105 +#: ../../include/channel.php:1044 msgid "Edit Profiles" msgstr "Editar perfiles" -#: ../../Zotlabs/Module/Service_limits.php:23 -msgid "No service class restrictions found." -msgstr "No se han encontrado restricciones sobre esta clase de servicio." - -#: ../../Zotlabs/Module/Acl.php:344 -msgid "network" -msgstr "red" - -#: ../../Zotlabs/Module/Acl.php:354 -msgid "RSS" -msgstr "RSS" - -#: ../../Zotlabs/Module/Removeme.php:35 -msgid "" -"Channel removals are not allowed within 48 hours of changing the account " -"password." -msgstr "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña." - -#: ../../Zotlabs/Module/Removeme.php:60 -msgid "Remove This Channel" -msgstr "Eliminar este canal" - -#: ../../Zotlabs/Module/Removeme.php:61 -msgid "This channel will be completely removed from the network. " -msgstr "Este canal va a ser completamente eliminado de la red. " - -#: ../../Zotlabs/Module/Removeme.php:63 -msgid "Remove this channel and all its clones from the network" -msgstr "Eliminar este canal y todos sus clones de la red" - -#: ../../Zotlabs/Module/Removeme.php:63 -msgid "" -"By default only the instance of the channel located on this hub will be " -"removed from the network" -msgstr "Por defecto, solo la instancia del canal alojado en este servidor será eliminado de la red" - -#: ../../Zotlabs/Module/Removeme.php:64 -#: ../../Zotlabs/Module/Settings/Channel.php:575 -msgid "Remove Channel" -msgstr "Eliminar el canal" - -#: ../../Zotlabs/Module/Sharedwithme.php:98 -msgid "Files: shared with me" -msgstr "Ficheros: compartidos conmigo" - -#: ../../Zotlabs/Module/Sharedwithme.php:100 -msgid "NEW" -msgstr "NUEVO" - -#: ../../Zotlabs/Module/Sharedwithme.php:103 -msgid "Remove all files" -msgstr "Eliminar todos los ficheros" - -#: ../../Zotlabs/Module/Sharedwithme.php:104 -msgid "Remove this file" -msgstr "Eliminar este fichero" - -#: ../../Zotlabs/Module/Tagger.php:55 ../../include/bbcode.php:274 -msgid "post" -msgstr "la entrada" - -#: ../../Zotlabs/Module/Tagger.php:57 ../../include/text.php:1961 -#: ../../include/conversation.php:150 -msgid "comment" -msgstr "el comentario" - -#: ../../Zotlabs/Module/Tagger.php:95 -#, php-format -msgid "%1$s tagged %2$s's %3$s with %4$s" -msgstr "%1$s ha etiquetado %3$s de %2$s con %4$s" - -#: ../../Zotlabs/Module/Sources.php:37 -msgid "Failed to create source. No channel selected." -msgstr "No se ha podido crear el origen de los contenidos. No ha sido seleccionado ningún canal." - -#: ../../Zotlabs/Module/Sources.php:51 -msgid "Source created." -msgstr "Fuente creada." - -#: ../../Zotlabs/Module/Sources.php:64 -msgid "Source updated." -msgstr "Fuente actualizada." - -#: ../../Zotlabs/Module/Sources.php:90 -msgid "*" -msgstr "*" - -#: ../../Zotlabs/Module/Sources.php:96 ../../include/widgets.php:677 -#: ../../include/features.php:213 -msgid "Channel Sources" -msgstr "Orígenes de los contenidos del canal" - -#: ../../Zotlabs/Module/Sources.php:97 -msgid "Manage remote sources of content for your channel." -msgstr "Gestionar contenido de origen remoto para su canal." - -#: ../../Zotlabs/Module/Sources.php:98 ../../Zotlabs/Module/Sources.php:108 -msgid "New Source" -msgstr "Nueva fuente" - -#: ../../Zotlabs/Module/Sources.php:109 ../../Zotlabs/Module/Sources.php:143 -msgid "" -"Import all or selected content from the following channel into this channel " -"and distribute it according to your channel settings." -msgstr "Importar todo el contenido o una selección de los siguientes canales en este canal y distribuirlo de acuerdo con sus ajustes." - -#: ../../Zotlabs/Module/Sources.php:110 ../../Zotlabs/Module/Sources.php:144 -msgid "Only import content with these words (one per line)" -msgstr "Importar solo contenido que contenga estas palabras (una por línea)" - -#: ../../Zotlabs/Module/Sources.php:110 ../../Zotlabs/Module/Sources.php:144 -msgid "Leave blank to import all public content" -msgstr "Dejar en blanco para importar todo el contenido público" - -#: ../../Zotlabs/Module/Sources.php:111 ../../Zotlabs/Module/Sources.php:148 -msgid "Channel Name" -msgstr "Nombre del canal" - -#: ../../Zotlabs/Module/Sources.php:112 ../../Zotlabs/Module/Sources.php:147 -msgid "" -"Add the following categories to posts imported from this source (comma " -"separated)" -msgstr "Añadir los temas siguientes a las entradas importadas de esta fuente (separadas por comas)" - -#: ../../Zotlabs/Module/Sources.php:112 ../../Zotlabs/Module/Sources.php:147 -#: ../../Zotlabs/Module/Settings/Oauth.php:93 -msgid "Optional" -msgstr "Opcional" - -#: ../../Zotlabs/Module/Sources.php:133 ../../Zotlabs/Module/Sources.php:161 -msgid "Source not found." -msgstr "Fuente no encontrada" - -#: ../../Zotlabs/Module/Sources.php:140 -msgid "Edit Source" -msgstr "Editar fuente" - -#: ../../Zotlabs/Module/Sources.php:141 -msgid "Delete Source" -msgstr "Eliminar fuente" - -#: ../../Zotlabs/Module/Sources.php:169 -msgid "Source removed" -msgstr "Fuente eliminada" - -#: ../../Zotlabs/Module/Sources.php:171 -msgid "Unable to remove source." -msgstr "No se puede eliminar la fuente." - -#: ../../Zotlabs/Module/Suggest.php:39 -msgid "" -"No suggestions available. If this is a new site, please try again in 24 " -"hours." -msgstr "No hay sugerencias disponibles. Si es un sitio nuevo, espere 24 horas y pruebe de nuevo." - -#: ../../Zotlabs/Module/Suggest.php:58 ../../include/widgets.php:136 -msgid "Ignore/Hide" -msgstr "Ignorar/Ocultar" - -#: ../../Zotlabs/Module/Wiki.php:29 -msgid "Profile Unavailable." -msgstr "Perfil no disponible" - -#: ../../Zotlabs/Module/Wiki.php:43 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:40 -msgid "Not found" -msgstr "No encontrado" - -#: ../../Zotlabs/Module/Wiki.php:67 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:60 -msgid "Invalid channel" -msgstr "Canal no válido" - -#: ../../Zotlabs/Module/Wiki.php:158 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:144 -#: ../../include/conversation.php:1900 -msgid "Wikis" -msgstr "Wikis" - -#: ../../Zotlabs/Module/Wiki.php:164 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:150 -msgid "Download" -msgstr "Descargar" - -#: ../../Zotlabs/Module/Wiki.php:168 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:154 -msgid "Wiki name" -msgstr "Nombre del wiki" - -#: ../../Zotlabs/Module/Wiki.php:169 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:155 -msgid "Content type" -msgstr "Tipo de contenido" - -#: ../../Zotlabs/Module/Wiki.php:178 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:164 -msgid "Create a status post for this wiki" -msgstr "Crear un mensaje de estado para este wiki" - -#: ../../Zotlabs/Module/Wiki.php:203 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:183 -msgid "Wiki not found" -msgstr "Wiki no encontrado" - -#: ../../Zotlabs/Module/Wiki.php:227 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:208 -msgid "Rename page" -msgstr "Renombrar la página" - -#: ../../Zotlabs/Module/Wiki.php:231 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:212 -msgid "Error retrieving page content" -msgstr "Error al recuperar el contenido de la página" - -#: ../../Zotlabs/Module/Wiki.php:261 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:241 -msgid "Revision Comparison" -msgstr "Comparación de revisiones" - -#: ../../Zotlabs/Module/Wiki.php:262 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:242 -msgid "Revert" -msgstr "Revertir" - -#: ../../Zotlabs/Module/Wiki.php:266 -msgid "Short description of your changes (optional)" -msgstr "Breve descripción de sus cambios (opcional)" - -#: ../../Zotlabs/Module/Wiki.php:273 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:251 -msgid "Source" -msgstr "Fuente" - -#: ../../Zotlabs/Module/Wiki.php:281 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:259 -msgid "New page name" -msgstr "Nombre de la nueva página" - -#: ../../Zotlabs/Module/Wiki.php:286 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:264 -#: ../../include/conversation.php:1299 -msgid "Embed image from photo albums" -msgstr "Incluir una imagen de los álbumes de fotos" - -#: ../../Zotlabs/Module/Wiki.php:287 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:265 -#: ../../include/conversation.php:1393 -msgid "Embed an image from your albums" -msgstr "Incluir una imagen de sus álbumes" - -#: ../../Zotlabs/Module/Wiki.php:289 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:267 -#: ../../include/conversation.php:1395 ../../include/conversation.php:1442 -msgid "OK" -msgstr "OK" - -#: ../../Zotlabs/Module/Wiki.php:290 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:268 -#: ../../include/conversation.php:1335 -msgid "Choose images to embed" -msgstr "Elegir imágenes para incluir" - -#: ../../Zotlabs/Module/Wiki.php:291 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:269 -#: ../../include/conversation.php:1336 -msgid "Choose an album" -msgstr "Elegir un álbum" - -#: ../../Zotlabs/Module/Wiki.php:292 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:270 -msgid "Choose a different album" -msgstr "Elegir un álbum diferente..." - -#: ../../Zotlabs/Module/Wiki.php:293 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:271 -#: ../../include/conversation.php:1338 -msgid "Error getting album list" -msgstr "Error al obtener la lista de álbumes" - -#: ../../Zotlabs/Module/Wiki.php:294 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:272 -#: ../../include/conversation.php:1339 -msgid "Error getting photo link" -msgstr "Error al obtener el enlace de la foto" - -#: ../../Zotlabs/Module/Wiki.php:295 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:273 -#: ../../include/conversation.php:1340 -msgid "Error getting album" -msgstr "Error al obtener el álbum" - -#: ../../Zotlabs/Module/Wiki.php:359 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:337 -msgid "Error creating wiki. Invalid name." -msgstr "Error al crear el wiki: el nombre no es válido." - -#: ../../Zotlabs/Module/Wiki.php:371 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:348 -msgid "Wiki created, but error creating Home page." -msgstr "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio." - -#: ../../Zotlabs/Module/Wiki.php:378 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:353 -msgid "Error creating wiki" -msgstr "Error al crear el wiki" - -#: ../../Zotlabs/Module/Wiki.php:390 -msgid "Wiki delete permission denied." -msgstr "Se ha denegado el permiso para eliminar el wiki." - -#: ../../Zotlabs/Module/Wiki.php:400 -msgid "Error deleting wiki" -msgstr "Se ha producido un error al eliminar el wiki" - -#: ../../Zotlabs/Module/Wiki.php:426 -#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:400 -msgid "New page created" -msgstr "Se ha creado la nueva página" - -#: ../../Zotlabs/Module/Wiki.php:541 -msgid "Cannot delete Home" -msgstr "No se puede eliminar la página principal" - -#: ../../Zotlabs/Module/Wiki.php:605 -msgid "Current Revision" -msgstr "Revisión actual" - -#: ../../Zotlabs/Module/Wiki.php:605 -msgid "Selected Revision" -msgstr "Revisión seleccionada" - -#: ../../Zotlabs/Module/Wiki.php:655 -msgid "You must be authenticated." -msgstr "Debe estar autenticado." - #: ../../Zotlabs/Module/Settings/Features.php:45 msgid "Additional Features" msgstr "Funcionalidades" @@ -6427,119 +6295,6 @@ msgstr "Servicio de compartición de Firefox: proveedor $Projectname" msgid "Start calendar week on monday" msgstr "Comenzar el calendario semanal por el lunes" -#: ../../Zotlabs/Module/Settings/Display.php:137 -msgid "No special theme for mobile devices" -msgstr "Sin tema especial para dispositivos móviles" - -#: ../../Zotlabs/Module/Settings/Display.php:140 -#, php-format -msgid "%s - (Experimental)" -msgstr "%s - (Experimental)" - -#: ../../Zotlabs/Module/Settings/Display.php:191 -msgid "Display Settings" -msgstr "Ajustes de visualización" - -#: ../../Zotlabs/Module/Settings/Display.php:192 -msgid "Theme Settings" -msgstr "Ajustes del tema" - -#: ../../Zotlabs/Module/Settings/Display.php:193 -msgid "Custom Theme Settings" -msgstr "Ajustes personalizados del tema" - -#: ../../Zotlabs/Module/Settings/Display.php:194 -msgid "Content Settings" -msgstr "Ajustes del contenido" - -#: ../../Zotlabs/Module/Settings/Display.php:200 -msgid "Display Theme:" -msgstr "Tema gráfico del perfil:" - -#: ../../Zotlabs/Module/Settings/Display.php:201 -msgid "Select scheme" -msgstr "Elegir un esquema" - -#: ../../Zotlabs/Module/Settings/Display.php:203 -msgid "Mobile Theme:" -msgstr "Tema para el móvil:" - -#: ../../Zotlabs/Module/Settings/Display.php:204 -msgid "Preload images before rendering the page" -msgstr "Carga previa de las imágenes antes de generar la página" - -#: ../../Zotlabs/Module/Settings/Display.php:204 -msgid "" -"The subjective page load time will be longer but the page will be ready when" -" displayed" -msgstr "El tiempo subjetivo de carga de la página será más largo, pero la página estará lista cuando se muestre." - -#: ../../Zotlabs/Module/Settings/Display.php:205 -msgid "Enable user zoom on mobile devices" -msgstr "Habilitar zoom de usuario en dispositivos móviles" - -#: ../../Zotlabs/Module/Settings/Display.php:206 -msgid "Update browser every xx seconds" -msgstr "Actualizar navegador cada xx segundos" - -#: ../../Zotlabs/Module/Settings/Display.php:206 -msgid "Minimum of 10 seconds, no maximum" -msgstr "Mínimo de 10 segundos, sin máximo" - -#: ../../Zotlabs/Module/Settings/Display.php:207 -msgid "Maximum number of conversations to load at any time:" -msgstr "Máximo número de conversaciones a cargar en cualquier momento:" - -#: ../../Zotlabs/Module/Settings/Display.php:207 -msgid "Maximum of 100 items" -msgstr "Máximo de 100 elementos" - -#: ../../Zotlabs/Module/Settings/Display.php:208 -msgid "Show emoticons (smilies) as images" -msgstr "Mostrar emoticonos (smilies) como imágenes" - -#: ../../Zotlabs/Module/Settings/Display.php:209 -msgid "Manual conversation updates" -msgstr "Actualizaciones manuales de la conversación" - -#: ../../Zotlabs/Module/Settings/Display.php:209 -msgid "Default is on, turning this off may increase screen jumping" -msgstr "El valor predeterminado está activado, al desactivarlo puede aumentar el salto de pantalla" - -#: ../../Zotlabs/Module/Settings/Display.php:210 -msgid "Link post titles to source" -msgstr "Enlazar título de la publicación a la fuente original" - -#: ../../Zotlabs/Module/Settings/Display.php:211 -msgid "System Page Layout Editor - (advanced)" -msgstr "Editor de plantilla de página del sistema - (avanzado)" - -#: ../../Zotlabs/Module/Settings/Display.php:214 -msgid "Use blog/list mode on channel page" -msgstr "Usar modo blog/lista en la página de inicio del canal" - -#: ../../Zotlabs/Module/Settings/Display.php:214 -#: ../../Zotlabs/Module/Settings/Display.php:215 -msgid "(comments displayed separately)" -msgstr "(comentarios mostrados de forma separada)" - -#: ../../Zotlabs/Module/Settings/Display.php:215 -msgid "Use blog/list mode on grid page" -msgstr "Mostrar mi red en modo blog" - -#: ../../Zotlabs/Module/Settings/Display.php:216 -msgid "Channel page max height of content (in pixels)" -msgstr "Altura máxima del contenido de la página del canal (en píxeles)" - -#: ../../Zotlabs/Module/Settings/Display.php:216 -#: ../../Zotlabs/Module/Settings/Display.php:217 -msgid "click to expand content exceeding this height" -msgstr "Pulsar para expandir el contenido que exceda de esta altura" - -#: ../../Zotlabs/Module/Settings/Display.php:217 -msgid "Grid page max height of content (in pixels)" -msgstr "Altura máxima del contenido de mi red (en píxeles)" - #: ../../Zotlabs/Module/Settings/Featured.php:20 msgid "Affinity Slider settings updated." msgstr "Se han actualizado los ajustes del controlador de afinidad." @@ -6625,6 +6380,119 @@ msgstr "Contraseña de inicio de sesión" msgid "Expires (yyyy-mm-dd)" msgstr "Expira (aaaa-mm-dd)" +#: ../../Zotlabs/Module/Settings/Display.php:145 +msgid "No special theme for mobile devices" +msgstr "Sin tema especial para dispositivos móviles" + +#: ../../Zotlabs/Module/Settings/Display.php:148 +#, php-format +msgid "%s - (Experimental)" +msgstr "%s - (Experimental)" + +#: ../../Zotlabs/Module/Settings/Display.php:198 +msgid "Display Settings" +msgstr "Ajustes de visualización" + +#: ../../Zotlabs/Module/Settings/Display.php:199 +msgid "Theme Settings" +msgstr "Ajustes del tema" + +#: ../../Zotlabs/Module/Settings/Display.php:200 +msgid "Custom Theme Settings" +msgstr "Ajustes personalizados del tema" + +#: ../../Zotlabs/Module/Settings/Display.php:201 +msgid "Content Settings" +msgstr "Ajustes del contenido" + +#: ../../Zotlabs/Module/Settings/Display.php:207 +msgid "Display Theme:" +msgstr "Tema gráfico del perfil:" + +#: ../../Zotlabs/Module/Settings/Display.php:208 +msgid "Select scheme" +msgstr "Elegir un esquema" + +#: ../../Zotlabs/Module/Settings/Display.php:210 +msgid "Mobile Theme:" +msgstr "Tema para el móvil:" + +#: ../../Zotlabs/Module/Settings/Display.php:211 +msgid "Preload images before rendering the page" +msgstr "Carga previa de las imágenes antes de generar la página" + +#: ../../Zotlabs/Module/Settings/Display.php:211 +msgid "" +"The subjective page load time will be longer but the page will be ready when" +" displayed" +msgstr "El tiempo subjetivo de carga de la página será más largo, pero la página estará lista cuando se muestre." + +#: ../../Zotlabs/Module/Settings/Display.php:212 +msgid "Enable user zoom on mobile devices" +msgstr "Habilitar zoom de usuario en dispositivos móviles" + +#: ../../Zotlabs/Module/Settings/Display.php:213 +msgid "Update browser every xx seconds" +msgstr "Actualizar navegador cada xx segundos" + +#: ../../Zotlabs/Module/Settings/Display.php:213 +msgid "Minimum of 10 seconds, no maximum" +msgstr "Mínimo de 10 segundos, sin máximo" + +#: ../../Zotlabs/Module/Settings/Display.php:214 +msgid "Maximum number of conversations to load at any time:" +msgstr "Máximo número de conversaciones a cargar en cualquier momento:" + +#: ../../Zotlabs/Module/Settings/Display.php:214 +msgid "Maximum of 100 items" +msgstr "Máximo de 100 elementos" + +#: ../../Zotlabs/Module/Settings/Display.php:215 +msgid "Show emoticons (smilies) as images" +msgstr "Mostrar emoticonos (smilies) como imágenes" + +#: ../../Zotlabs/Module/Settings/Display.php:216 +msgid "Manual conversation updates" +msgstr "Actualizaciones manuales de la conversación" + +#: ../../Zotlabs/Module/Settings/Display.php:216 +msgid "Default is on, turning this off may increase screen jumping" +msgstr "El valor predeterminado está activado, al desactivarlo puede aumentar el salto de pantalla" + +#: ../../Zotlabs/Module/Settings/Display.php:217 +msgid "Link post titles to source" +msgstr "Enlazar título de la publicación a la fuente original" + +#: ../../Zotlabs/Module/Settings/Display.php:218 +msgid "System Page Layout Editor - (advanced)" +msgstr "Editor de plantilla de página del sistema - (avanzado)" + +#: ../../Zotlabs/Module/Settings/Display.php:221 +msgid "Use blog/list mode on channel page" +msgstr "Usar modo blog/lista en la página de inicio del canal" + +#: ../../Zotlabs/Module/Settings/Display.php:221 +#: ../../Zotlabs/Module/Settings/Display.php:222 +msgid "(comments displayed separately)" +msgstr "(comentarios mostrados de forma separada)" + +#: ../../Zotlabs/Module/Settings/Display.php:222 +msgid "Use blog/list mode on grid page" +msgstr "Mostrar mi red en modo blog" + +#: ../../Zotlabs/Module/Settings/Display.php:223 +msgid "Channel page max height of content (in pixels)" +msgstr "Altura máxima del contenido de la página del canal (en píxeles)" + +#: ../../Zotlabs/Module/Settings/Display.php:223 +#: ../../Zotlabs/Module/Settings/Display.php:224 +msgid "click to expand content exceeding this height" +msgstr "Pulsar para expandir el contenido que exceda de esta altura" + +#: ../../Zotlabs/Module/Settings/Display.php:224 +msgid "Grid page max height of content (in pixels)" +msgstr "Altura máxima del contenido de mi red (en píxeles)" + #: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98 msgid "Tag removed" msgstr "Etiqueta eliminada." @@ -7142,9 +7010,181 @@ msgstr "Visitar el perfil de %s [%s]" msgid "View Connections" msgstr "Ver conexiones" -#: ../../Zotlabs/Module/Viewsrc.php:44 -msgid "Source of Item" -msgstr "Origen del elemento" +#: ../../Zotlabs/Module/Wiki.php:30 +msgid "Profile Unavailable." +msgstr "Perfil no disponible" + +#: ../../Zotlabs/Module/Wiki.php:44 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:40 +msgid "Not found" +msgstr "No encontrado" + +#: ../../Zotlabs/Module/Wiki.php:68 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:60 +msgid "Invalid channel" +msgstr "Canal no válido" + +#: ../../Zotlabs/Module/Wiki.php:159 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:144 +#: ../../include/conversation.php:1900 +msgid "Wikis" +msgstr "Wikis" + +#: ../../Zotlabs/Module/Wiki.php:165 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:150 +msgid "Download" +msgstr "Descargar" + +#: ../../Zotlabs/Module/Wiki.php:169 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:154 +msgid "Wiki name" +msgstr "Nombre del wiki" + +#: ../../Zotlabs/Module/Wiki.php:170 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:155 +msgid "Content type" +msgstr "Tipo de contenido" + +#: ../../Zotlabs/Module/Wiki.php:179 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:164 +msgid "Create a status post for this wiki" +msgstr "Crear un mensaje de estado para este wiki" + +#: ../../Zotlabs/Module/Wiki.php:204 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:183 +msgid "Wiki not found" +msgstr "Wiki no encontrado" + +#: ../../Zotlabs/Module/Wiki.php:228 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:208 +msgid "Rename page" +msgstr "Renombrar la página" + +#: ../../Zotlabs/Module/Wiki.php:232 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:212 +msgid "Error retrieving page content" +msgstr "Error al recuperar el contenido de la página" + +#: ../../Zotlabs/Module/Wiki.php:259 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:241 +msgid "Revision Comparison" +msgstr "Comparación de revisiones" + +#: ../../Zotlabs/Module/Wiki.php:260 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:242 +msgid "Revert" +msgstr "Revertir" + +#: ../../Zotlabs/Module/Wiki.php:264 +msgid "Short description of your changes (optional)" +msgstr "Breve descripción de sus cambios (opcional)" + +#: ../../Zotlabs/Module/Wiki.php:271 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:251 +msgid "Source" +msgstr "Fuente" + +#: ../../Zotlabs/Module/Wiki.php:279 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:259 +msgid "New page name" +msgstr "Nombre de la nueva página" + +#: ../../Zotlabs/Module/Wiki.php:284 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:264 +#: ../../include/conversation.php:1299 +msgid "Embed image from photo albums" +msgstr "Incluir una imagen de los álbumes de fotos" + +#: ../../Zotlabs/Module/Wiki.php:285 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:265 +#: ../../include/conversation.php:1393 +msgid "Embed an image from your albums" +msgstr "Incluir una imagen de sus álbumes" + +#: ../../Zotlabs/Module/Wiki.php:287 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:267 +#: ../../include/conversation.php:1395 ../../include/conversation.php:1442 +msgid "OK" +msgstr "OK" + +#: ../../Zotlabs/Module/Wiki.php:288 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:268 +#: ../../include/conversation.php:1335 +msgid "Choose images to embed" +msgstr "Elegir imágenes para incluir" + +#: ../../Zotlabs/Module/Wiki.php:289 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:269 +#: ../../include/conversation.php:1336 +msgid "Choose an album" +msgstr "Elegir un álbum" + +#: ../../Zotlabs/Module/Wiki.php:290 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:270 +msgid "Choose a different album" +msgstr "Elegir un álbum diferente..." + +#: ../../Zotlabs/Module/Wiki.php:291 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:271 +#: ../../include/conversation.php:1338 +msgid "Error getting album list" +msgstr "Error al obtener la lista de álbumes" + +#: ../../Zotlabs/Module/Wiki.php:292 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:272 +#: ../../include/conversation.php:1339 +msgid "Error getting photo link" +msgstr "Error al obtener el enlace de la foto" + +#: ../../Zotlabs/Module/Wiki.php:293 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:273 +#: ../../include/conversation.php:1340 +msgid "Error getting album" +msgstr "Error al obtener el álbum" + +#: ../../Zotlabs/Module/Wiki.php:357 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:337 +msgid "Error creating wiki. Invalid name." +msgstr "Error al crear el wiki: el nombre no es válido." + +#: ../../Zotlabs/Module/Wiki.php:369 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:348 +msgid "Wiki created, but error creating Home page." +msgstr "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio." + +#: ../../Zotlabs/Module/Wiki.php:376 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:353 +msgid "Error creating wiki" +msgstr "Error al crear el wiki" + +#: ../../Zotlabs/Module/Wiki.php:388 +msgid "Wiki delete permission denied." +msgstr "Se ha denegado el permiso para eliminar el wiki." + +#: ../../Zotlabs/Module/Wiki.php:398 +msgid "Error deleting wiki" +msgstr "Se ha producido un error al eliminar el wiki" + +#: ../../Zotlabs/Module/Wiki.php:424 +#: ../../extend/addon/addon/gitwiki/Mod_Gitwiki.php:400 +msgid "New page created" +msgstr "Se ha creado la nueva página" + +#: ../../Zotlabs/Module/Wiki.php:539 +msgid "Cannot delete Home" +msgstr "No se puede eliminar la página principal" + +#: ../../Zotlabs/Module/Wiki.php:603 +msgid "Current Revision" +msgstr "Revisión actual" + +#: ../../Zotlabs/Module/Wiki.php:603 +msgid "Selected Revision" +msgstr "Revisión seleccionada" + +#: ../../Zotlabs/Module/Wiki.php:653 +msgid "You must be authenticated." +msgstr "Debe estar autenticado." #: ../../Zotlabs/Module/Chat.php:179 msgid "Room not found" @@ -7227,22 +7267,22 @@ msgstr "Sala no encontrada." msgid "Room is full" msgstr "La sala está llena." -#: ../../Zotlabs/Lib/Enotify.php:60 ../../include/network.php:1924 +#: ../../Zotlabs/Lib/Enotify.php:60 ../../include/network.php:1947 msgid "$Projectname Notification" msgstr "Notificación de $Projectname" #: ../../Zotlabs/Lib/Enotify.php:61 ../../extend/addon/addon/diaspora/p.php:46 #: ../../extend/addon/addon/diaspora/util.php:218 #: ../../extend/addon/addon/diaspora/util.php:231 -#: ../../include/network.php:1925 +#: ../../include/network.php:1948 msgid "$projectname" msgstr "$projectname" -#: ../../Zotlabs/Lib/Enotify.php:63 ../../include/network.php:1927 +#: ../../Zotlabs/Lib/Enotify.php:63 ../../include/network.php:1950 msgid "Thank You," msgstr "Gracias," -#: ../../Zotlabs/Lib/Enotify.php:65 ../../include/network.php:1929 +#: ../../Zotlabs/Lib/Enotify.php:65 ../../include/network.php:1952 #, php-format msgid "%s Administrator" msgstr "%s Administrador" @@ -7873,7 +7913,7 @@ msgstr "Canal aleatorio" msgid "Invite" msgstr "Invitar" -#: ../../Zotlabs/Lib/Apps.php:242 ../../include/widgets.php:1581 +#: ../../Zotlabs/Lib/Apps.php:242 ../../include/widgets.php:1638 msgid "Features" msgstr "Funcionalidades" @@ -8477,7 +8517,7 @@ msgid "Add a personal note:" msgstr "Añadir un comentario personal: " #: ../../extend/addon/addon/friendica/dfrn_request.php:871 -#: ../../include/network.php:2242 ../../include/network.php:2243 +#: ../../include/network.php:2265 ../../include/network.php:2266 msgid "Friendica" msgstr "Friendica" @@ -8486,7 +8526,7 @@ msgid "StatusNet/Federated Social Web" msgstr "Red social federada StatusNet" #: ../../extend/addon/addon/friendica/dfrn_request.php:873 -#: ../../include/network.php:2248 +#: ../../include/network.php:2271 msgid "Diaspora" msgstr "Diaspora" @@ -9177,7 +9217,7 @@ msgid "Page to load after image selection." msgstr "Página para cargar después de la selección de imágenes." #: ../../extend/addon/addon/openclipatar/openclipatar.php:58 -#: ../../include/channel.php:1048 ../../include/nav.php:107 +#: ../../include/nav.php:107 ../../include/channel.php:1048 msgid "Edit Profile" msgstr "Editar el perfil" @@ -9246,7 +9286,7 @@ msgstr "Término de búsqueda" msgid "Unknown error. Please try again later." msgstr "Error desconocido. Por favor, inténtelo otra vez." -#: ../../extend/addon/addon/openclipatar/openclipatar.php:305 +#: ../../extend/addon/addon/openclipatar/openclipatar.php:308 msgid "Profile photo updated successfully." msgstr "Se ha actualizado con éxito la foto de perfil." @@ -9522,10 +9562,6 @@ msgstr "Enviar a Red" msgid "Channel is required." msgstr "Se requiere un canal." -#: ../../extend/addon/addon/redred/redred.php:65 -msgid "Invalid channel." -msgstr "El canal no es válido." - #: ../../extend/addon/addon/redred/redred.php:76 msgid "redred Settings saved." msgstr "Se han salvado los ajustes de redred." @@ -9785,23 +9821,23 @@ msgstr "URL de la API" msgid "Application name" msgstr "Nombre de la aplicación" -#: ../../extend/addon/addon/superblock/superblock.php:110 +#: ../../extend/addon/addon/superblock/superblock.php:112 msgid "Currently blocked" msgstr "Actualmente bloqueado" -#: ../../extend/addon/addon/superblock/superblock.php:112 +#: ../../extend/addon/addon/superblock/superblock.php:114 msgid "No channels currently blocked" msgstr "No hay canales bloqueados actualmente" -#: ../../extend/addon/addon/superblock/superblock.php:118 +#: ../../extend/addon/addon/superblock/superblock.php:120 msgid "\"Superblock\" Settings" msgstr "Ajustes de \"Superblock\"" -#: ../../extend/addon/addon/superblock/superblock.php:322 +#: ../../extend/addon/addon/superblock/superblock.php:345 msgid "Block Completely" msgstr "Bloquear completamente" -#: ../../extend/addon/addon/superblock/superblock.php:371 +#: ../../extend/addon/addon/superblock/superblock.php:394 msgid "superblock settings updated" msgstr "se han actualizado los ajustes de superblock" @@ -10799,7 +10835,7 @@ msgstr "Buscar $Projectname" msgid "Cannot locate DNS info for database server '%s'" msgstr "No se ha podido localizar información de DNS para el servidor de base de datos “%s”" -#: ../../include/language.php:367 ../../include/text.php:1783 +#: ../../include/language.php:367 ../../include/text.php:1788 msgid "default" msgstr "por defecto" @@ -10875,50 +10911,241 @@ msgstr "Esta acción supera los límites establecidos por su plan de suscripció msgid "This action is not available under your subscription plan." msgstr "Esta acción no está disponible en su plan de suscripción." -#: ../../include/event.php:22 ../../include/event.php:69 -#: ../../include/markdown.php:539 -msgid "l F d, Y \\@ g:i A" -msgstr "l d de F, Y \\@ G:i" +#: ../../include/widgets.php:46 ../../include/widgets.php:455 +#: ../../include/taxonomy.php:188 ../../include/taxonomy.php:270 +#: ../../include/contact_widgets.php:91 +msgid "Categories" +msgstr "Temas" -#: ../../include/event.php:30 ../../include/event.php:73 -#: ../../include/markdown.php:545 -msgid "Starts:" -msgstr "Comienza:" +#: ../../include/widgets.php:141 +msgid "Suggestions" +msgstr "Sugerencias" -#: ../../include/event.php:40 ../../include/event.php:77 -#: ../../include/markdown.php:553 -msgid "Finishes:" -msgstr "Finaliza:" +#: ../../include/widgets.php:142 +msgid "See more..." +msgstr "Ver más..." -#: ../../include/event.php:1004 -msgid "This event has been added to your calendar." -msgstr "Este evento ha sido añadido a su calendario." +#: ../../include/widgets.php:162 +#, php-format +msgid "You have %1$.0f of %2$.0f allowed connections." +msgstr "Tiene %1$.0f de %2$.0f conexiones permitidas." -#: ../../include/event.php:1204 -msgid "Not specified" -msgstr "Sin especificar" +#: ../../include/widgets.php:168 +msgid "Add New Connection" +msgstr "Añadir nueva conexión" -#: ../../include/event.php:1205 -msgid "Needs Action" -msgstr "Necesita de una intervención" +#: ../../include/widgets.php:169 +msgid "Enter channel address" +msgstr "Dirección del canal" -#: ../../include/event.php:1206 -msgid "Completed" -msgstr "Completado/a" +#: ../../include/widgets.php:170 +msgid "Examples: bob@example.com, https://example.com/barbara" +msgstr "Ejemplos: manuel@ejemplo.com, https://ejemplo.com/carmen" -#: ../../include/event.php:1207 -msgid "In Process" -msgstr "En proceso" +#: ../../include/widgets.php:186 +msgid "Notes" +msgstr "Notas" -#: ../../include/event.php:1208 -msgid "Cancelled" -msgstr "Cancelado/a" +#: ../../include/widgets.php:262 +msgid "Remove term" +msgstr "Eliminar término" -#: ../../include/taxonomy.php:188 ../../include/taxonomy.php:270 -#: ../../include/widgets.php:46 ../../include/widgets.php:455 -#: ../../include/contact_widgets.php:91 -msgid "Categories" -msgstr "Temas" +#: ../../include/widgets.php:270 ../../include/features.php:301 +msgid "Saved Searches" +msgstr "Búsquedas guardadas" + +#: ../../include/widgets.php:271 ../../include/group.php:336 +msgid "add" +msgstr "añadir" + +#: ../../include/widgets.php:333 ../../include/contact_widgets.php:53 +#: ../../include/features.php:390 +msgid "Saved Folders" +msgstr "Carpetas guardadas" + +#: ../../include/widgets.php:336 ../../include/widgets.php:458 +#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:94 +msgid "Everything" +msgstr "Todo" + +#: ../../include/widgets.php:377 +msgid "Archives" +msgstr "Hemeroteca" + +#: ../../include/widgets.php:549 +msgid "Refresh" +msgstr "Recargar" + +#: ../../include/widgets.php:589 +msgid "Account settings" +msgstr "Configuración de la cuenta" + +#: ../../include/widgets.php:595 +msgid "Channel settings" +msgstr "Configuración del canal" + +#: ../../include/widgets.php:604 +msgid "Additional features" +msgstr "Funcionalidades" + +#: ../../include/widgets.php:611 +msgid "Feature/Addon settings" +msgstr "Complementos" + +#: ../../include/widgets.php:617 +msgid "Display settings" +msgstr "Ajustes de visualización" + +#: ../../include/widgets.php:624 +msgid "Manage locations" +msgstr "Gestión de ubicaciones (clones) del canal" + +#: ../../include/widgets.php:631 +msgid "Export channel" +msgstr "Exportar canal" + +#: ../../include/widgets.php:637 +msgid "Connected apps" +msgstr "Aplicaciones (apps) conectadas" + +#: ../../include/widgets.php:652 ../../include/features.php:153 +msgid "Permission Groups" +msgstr "Grupos de permisos" + +#: ../../include/widgets.php:669 +msgid "Premium Channel Settings" +msgstr "Configuración del canal premium" + +#: ../../include/widgets.php:698 +msgid "Private Mail Menu" +msgstr "Menú de correo privado" + +#: ../../include/widgets.php:700 +msgid "Combined View" +msgstr "Vista combinada" + +#: ../../include/widgets.php:705 ../../include/nav.php:213 +msgid "Inbox" +msgstr "Bandeja de entrada" + +#: ../../include/widgets.php:710 ../../include/nav.php:214 +msgid "Outbox" +msgstr "Bandeja de salida" + +#: ../../include/widgets.php:715 ../../include/nav.php:215 +msgid "New Message" +msgstr "Nuevo mensaje" + +#: ../../include/widgets.php:732 ../../include/widgets.php:744 +msgid "Conversations" +msgstr "Conversaciones" + +#: ../../include/widgets.php:736 +msgid "Received Messages" +msgstr "Mensajes recibidos" + +#: ../../include/widgets.php:740 +msgid "Sent Messages" +msgstr "Enviar mensajes" + +#: ../../include/widgets.php:754 +msgid "No messages." +msgstr "Sin mensajes." + +#: ../../include/widgets.php:772 +msgid "Delete conversation" +msgstr "Eliminar conversación" + +#: ../../include/widgets.php:798 +msgid "Events Tools" +msgstr "Gestión de eventos" + +#: ../../include/widgets.php:799 +msgid "Export Calendar" +msgstr "Exportar el calendario" + +#: ../../include/widgets.php:800 +msgid "Import Calendar" +msgstr "Importar un calendario" + +#: ../../include/widgets.php:888 ../../include/conversation.php:1866 +#: ../../include/conversation.php:1869 +msgid "Chatrooms" +msgstr "Salas de chat" + +#: ../../include/widgets.php:892 +msgid "Overview" +msgstr "Resumen" + +#: ../../include/widgets.php:899 +msgid "Chat Members" +msgstr "Miembros del chat" + +#: ../../include/widgets.php:977 +msgctxt "wiki_history" +msgid "Message" +msgstr "Mensaje" + +#: ../../include/widgets.php:999 +msgid "Bookmarked Chatrooms" +msgstr "Salas de chat preferidas" + +#: ../../include/widgets.php:1030 +msgid "Suggested Chatrooms" +msgstr "Salas de chat sugeridas" + +#: ../../include/widgets.php:1175 ../../include/widgets.php:1287 +msgid "photo/image" +msgstr "foto/imagen" + +#: ../../include/widgets.php:1230 +msgid "Click to show more" +msgstr "Hacer clic para ver más" + +#: ../../include/widgets.php:1381 +msgid "Rating Tools" +msgstr "Valoraciones" + +#: ../../include/widgets.php:1385 ../../include/widgets.php:1387 +msgid "Rate Me" +msgstr "Valorar este canal" + +#: ../../include/widgets.php:1390 +msgid "View Ratings" +msgstr "Mostrar las valoraciones" + +#: ../../include/widgets.php:1483 +msgid "Forums" +msgstr "Foros" + +#: ../../include/widgets.php:1540 +msgctxt "widget" +msgid "Activity" +msgstr "Actividad" + +#: ../../include/widgets.php:1569 +msgid "Tasks" +msgstr "Tareas" + +#: ../../include/widgets.php:1635 ../../include/widgets.php:1673 +msgid "Member registrations waiting for confirmation" +msgstr "Inscripciones de nuevos miembros pendientes de aprobación" + +#: ../../include/widgets.php:1641 +msgid "Inspect queue" +msgstr "Examinar la cola" + +#: ../../include/widgets.php:1643 +msgid "DB updates" +msgstr "Actualizaciones de la base de datos" + +#: ../../include/widgets.php:1668 ../../include/nav.php:233 +msgid "Admin" +msgstr "Administrador" + +#: ../../include/widgets.php:1669 +msgid "Plugin Features" +msgstr "Extensiones" #: ../../include/taxonomy.php:228 ../../include/taxonomy.php:249 msgid "Tags" @@ -10952,6 +11179,45 @@ msgstr "gusta de" msgid "dislikes" msgstr "no gusta de" +#: ../../include/event.php:22 ../../include/event.php:69 +#: ../../include/markdown.php:540 +msgid "l F d, Y \\@ g:i A" +msgstr "l d de F, Y \\@ G:i" + +#: ../../include/event.php:30 ../../include/event.php:73 +#: ../../include/markdown.php:546 +msgid "Starts:" +msgstr "Comienza:" + +#: ../../include/event.php:40 ../../include/event.php:77 +#: ../../include/markdown.php:554 +msgid "Finishes:" +msgstr "Finaliza:" + +#: ../../include/event.php:1004 +msgid "This event has been added to your calendar." +msgstr "Este evento ha sido añadido a su calendario." + +#: ../../include/event.php:1204 +msgid "Not specified" +msgstr "Sin especificar" + +#: ../../include/event.php:1205 +msgid "Needs Action" +msgstr "Necesita de una intervención" + +#: ../../include/event.php:1206 +msgid "Completed" +msgstr "Completado/a" + +#: ../../include/event.php:1207 +msgid "In Process" +msgstr "En proceso" + +#: ../../include/event.php:1208 +msgid "Cancelled" +msgstr "Cancelado/a" + #: ../../include/datetime.php:147 msgid "Birthday" msgstr "Cumpleaños" @@ -11354,723 +11620,21 @@ msgstr "$1 escribió:" msgid "%1$s's bookmarks" msgstr "Marcadores de %1$s" -#: ../../include/text.php:460 -msgid "prev" -msgstr "anterior" - -#: ../../include/text.php:462 -msgid "first" -msgstr "primera" - -#: ../../include/text.php:491 -msgid "last" -msgstr "última" - -#: ../../include/text.php:494 -msgid "next" -msgstr "próxima" - -#: ../../include/text.php:505 -msgid "older" -msgstr "más antiguas" - -#: ../../include/text.php:507 -msgid "newer" -msgstr "más recientes" - -#: ../../include/text.php:922 -msgid "No connections" -msgstr "Sin conexiones" - -#: ../../include/text.php:947 -#, php-format -msgid "View all %s connections" -msgstr "Ver todas las %s conexiones" - -#: ../../include/text.php:1092 ../../include/text.php:1097 -msgid "poke" -msgstr "un toque" - -#: ../../include/text.php:1092 ../../include/text.php:1097 -#: ../../include/conversation.php:243 -msgid "poked" -msgstr "ha dado un toque a" - -#: ../../include/text.php:1098 -msgid "ping" -msgstr "un \"ping\"" - -#: ../../include/text.php:1098 -msgid "pinged" -msgstr "ha enviado un \"ping\" a" - -#: ../../include/text.php:1099 -msgid "prod" -msgstr "una incitación " - -#: ../../include/text.php:1099 -msgid "prodded" -msgstr "ha incitado a " - -#: ../../include/text.php:1100 -msgid "slap" -msgstr "una bofetada " - -#: ../../include/text.php:1100 -msgid "slapped" -msgstr "ha abofeteado a " - -#: ../../include/text.php:1101 -msgid "finger" -msgstr "un \"finger\" " - -#: ../../include/text.php:1101 -msgid "fingered" -msgstr "envió un \"finger\" a" - -#: ../../include/text.php:1102 -msgid "rebuff" -msgstr "un reproche" - -#: ../../include/text.php:1102 -msgid "rebuffed" -msgstr "ha hecho un reproche a " - -#: ../../include/text.php:1114 -msgid "happy" -msgstr "feliz " - -#: ../../include/text.php:1115 -msgid "sad" -msgstr "triste " - -#: ../../include/text.php:1116 -msgid "mellow" -msgstr "tranquilo/a" - -#: ../../include/text.php:1117 -msgid "tired" -msgstr "cansado/a " - -#: ../../include/text.php:1118 -msgid "perky" -msgstr "vivaz" - -#: ../../include/text.php:1119 -msgid "angry" -msgstr "enfadado/a" - -#: ../../include/text.php:1120 -msgid "stupefied" -msgstr "asombrado/a" - -#: ../../include/text.php:1121 -msgid "puzzled" -msgstr "perplejo/a" - -#: ../../include/text.php:1122 -msgid "interested" -msgstr "interesado/a" - -#: ../../include/text.php:1123 -msgid "bitter" -msgstr "amargado/a" - -#: ../../include/text.php:1124 -msgid "cheerful" -msgstr "alegre" - -#: ../../include/text.php:1125 -msgid "alive" -msgstr "animado/a" - -#: ../../include/text.php:1126 -msgid "annoyed" -msgstr "molesto/a" - -#: ../../include/text.php:1127 -msgid "anxious" -msgstr "ansioso/a" - -#: ../../include/text.php:1128 -msgid "cranky" -msgstr "de mal humor" - -#: ../../include/text.php:1129 -msgid "disturbed" -msgstr "perturbado/a" - -#: ../../include/text.php:1130 -msgid "frustrated" -msgstr "frustrado/a" - -#: ../../include/text.php:1131 -msgid "depressed" -msgstr "deprimido/a" - -#: ../../include/text.php:1132 -msgid "motivated" -msgstr "motivado/a" - -#: ../../include/text.php:1133 -msgid "relaxed" -msgstr "relajado/a" - -#: ../../include/text.php:1134 -msgid "surprised" -msgstr "sorprendido/a" - -#: ../../include/text.php:1321 ../../include/js_strings.php:70 -msgid "Monday" -msgstr "lunes" - -#: ../../include/text.php:1321 ../../include/js_strings.php:71 -msgid "Tuesday" -msgstr "martes" - -#: ../../include/text.php:1321 ../../include/js_strings.php:72 -msgid "Wednesday" -msgstr "miércoles" - -#: ../../include/text.php:1321 ../../include/js_strings.php:73 -msgid "Thursday" -msgstr "jueves" - -#: ../../include/text.php:1321 ../../include/js_strings.php:74 -msgid "Friday" -msgstr "viernes" - -#: ../../include/text.php:1321 ../../include/js_strings.php:75 -msgid "Saturday" -msgstr "sábado" - -#: ../../include/text.php:1321 ../../include/js_strings.php:69 -msgid "Sunday" -msgstr "domingo" - -#: ../../include/text.php:1325 ../../include/js_strings.php:45 -msgid "January" -msgstr "enero" - -#: ../../include/text.php:1325 ../../include/js_strings.php:46 -msgid "February" -msgstr "febrero" - -#: ../../include/text.php:1325 ../../include/js_strings.php:47 -msgid "March" -msgstr "marzo" - -#: ../../include/text.php:1325 ../../include/js_strings.php:48 -msgid "April" -msgstr "abril" - -#: ../../include/text.php:1325 -msgid "May" -msgstr "mayo" - -#: ../../include/text.php:1325 ../../include/js_strings.php:50 -msgid "June" -msgstr "junio" - -#: ../../include/text.php:1325 ../../include/js_strings.php:51 -msgid "July" -msgstr "julio" - -#: ../../include/text.php:1325 ../../include/js_strings.php:52 -msgid "August" -msgstr "agosto" - -#: ../../include/text.php:1325 ../../include/js_strings.php:53 -msgid "September" -msgstr "septiembre" - -#: ../../include/text.php:1325 ../../include/js_strings.php:54 -msgid "October" -msgstr "octubre" - -#: ../../include/text.php:1325 ../../include/js_strings.php:55 -msgid "November" -msgstr "noviembre" - -#: ../../include/text.php:1325 ../../include/js_strings.php:56 -msgid "December" -msgstr "diciembre" - -#: ../../include/text.php:1402 ../../include/text.php:1406 -msgid "Unknown Attachment" -msgstr "Adjunto no reconocido" - -#: ../../include/text.php:1408 -msgid "unknown" -msgstr "desconocido" - -#: ../../include/text.php:1444 -msgid "remove category" -msgstr "eliminar el tema" - -#: ../../include/text.php:1521 -msgid "remove from file" -msgstr "eliminar del fichero" - -#: ../../include/text.php:1791 -msgid "Page layout" -msgstr "Plantilla de la página" - -#: ../../include/text.php:1791 -msgid "You can create your own with the layouts tool" -msgstr "Puede crear su propia disposición gráfica con la herramienta de plantillas" - -#: ../../include/text.php:1833 -msgid "Page content type" -msgstr "Tipo de contenido de la página" - -#: ../../include/text.php:1966 -msgid "activity" -msgstr "la actividad" - -#: ../../include/text.php:2280 -msgid "Design Tools" -msgstr "Herramientas de diseño web" - -#: ../../include/text.php:2286 -msgid "Pages" -msgstr "Páginas" - -#: ../../include/text.php:2308 -msgid "Import website..." -msgstr "Importar un sitio web..." - -#: ../../include/text.php:2309 -msgid "Select folder to import" -msgstr "Seleccionar la carpeta que se va a importar" - -#: ../../include/text.php:2310 -msgid "Import from a zipped folder:" -msgstr "Importar desde una carpeta comprimida: " - -#: ../../include/text.php:2311 -msgid "Import from cloud files:" -msgstr "Importar desde los ficheros en la nube: " - -#: ../../include/text.php:2312 -msgid "/cloud/channel/path/to/folder" -msgstr "/cloud/canal/ruta/a la/carpeta" - -#: ../../include/text.php:2313 -msgid "Enter path to website files" -msgstr "Ruta a los ficheros del sitio web" - -#: ../../include/text.php:2314 -msgid "Select folder" -msgstr "Seleccionar la carpeta" - -#: ../../include/text.php:2315 -msgid "Export website..." -msgstr "Exportar un sitio web..." - -#: ../../include/text.php:2316 -msgid "Export to a zip file" -msgstr "Exportar a un fichero comprimido .zip" - -#: ../../include/text.php:2317 -msgid "website.zip" -msgstr "sitio_web.zip" - -#: ../../include/text.php:2318 -msgid "Enter a name for the zip file." -msgstr "Escriba un nombre para el fichero zip." - -#: ../../include/text.php:2319 -msgid "Export to cloud files" -msgstr "Exportar a la nube de ficheros" - -#: ../../include/text.php:2320 -msgid "/path/to/export/folder" -msgstr "/ruta/para/exportar/carpeta" - -#: ../../include/text.php:2321 -msgid "Enter a path to a cloud files destination." -msgstr "Escriba una ruta de destino a la nube de ficheros." - -#: ../../include/text.php:2322 -msgid "Specify folder" -msgstr "Especificar una carpeta" - -#: ../../include/widgets.php:141 -msgid "Suggestions" -msgstr "Sugerencias" - -#: ../../include/widgets.php:142 -msgid "See more..." -msgstr "Ver más..." - -#: ../../include/widgets.php:162 -#, php-format -msgid "You have %1$.0f of %2$.0f allowed connections." -msgstr "Tiene %1$.0f de %2$.0f conexiones permitidas." - -#: ../../include/widgets.php:168 -msgid "Add New Connection" -msgstr "Añadir nueva conexión" - -#: ../../include/widgets.php:169 -msgid "Enter channel address" -msgstr "Dirección del canal" - -#: ../../include/widgets.php:170 -msgid "Examples: bob@example.com, https://example.com/barbara" -msgstr "Ejemplos: manuel@ejemplo.com, https://ejemplo.com/carmen" - -#: ../../include/widgets.php:186 -msgid "Notes" -msgstr "Notas" - -#: ../../include/widgets.php:262 -msgid "Remove term" -msgstr "Eliminar término" - -#: ../../include/widgets.php:270 ../../include/features.php:301 -msgid "Saved Searches" -msgstr "Búsquedas guardadas" - -#: ../../include/widgets.php:271 ../../include/group.php:336 -msgid "add" -msgstr "añadir" - -#: ../../include/widgets.php:333 ../../include/contact_widgets.php:53 -#: ../../include/features.php:390 -msgid "Saved Folders" -msgstr "Carpetas guardadas" - -#: ../../include/widgets.php:336 ../../include/widgets.php:458 -#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:94 -msgid "Everything" -msgstr "Todo" - -#: ../../include/widgets.php:377 -msgid "Archives" -msgstr "Hemeroteca" - -#: ../../include/widgets.php:549 -msgid "Refresh" -msgstr "Recargar" - -#: ../../include/widgets.php:589 -msgid "Account settings" -msgstr "Configuración de la cuenta" - -#: ../../include/widgets.php:595 -msgid "Channel settings" -msgstr "Configuración del canal" - -#: ../../include/widgets.php:604 -msgid "Additional features" -msgstr "Funcionalidades" - -#: ../../include/widgets.php:611 -msgid "Feature/Addon settings" -msgstr "Complementos" - -#: ../../include/widgets.php:617 -msgid "Display settings" -msgstr "Ajustes de visualización" - -#: ../../include/widgets.php:624 -msgid "Manage locations" -msgstr "Gestión de ubicaciones (clones) del canal" - -#: ../../include/widgets.php:631 -msgid "Export channel" -msgstr "Exportar canal" - -#: ../../include/widgets.php:637 -msgid "Connected apps" -msgstr "Aplicaciones (apps) conectadas" - -#: ../../include/widgets.php:652 ../../include/features.php:153 -msgid "Permission Groups" -msgstr "Grupos de permisos" - -#: ../../include/widgets.php:669 -msgid "Premium Channel Settings" -msgstr "Configuración del canal premium" - -#: ../../include/widgets.php:698 -msgid "Private Mail Menu" -msgstr "Menú de correo privado" - -#: ../../include/widgets.php:700 -msgid "Combined View" -msgstr "Vista combinada" - -#: ../../include/widgets.php:705 ../../include/nav.php:213 -msgid "Inbox" -msgstr "Bandeja de entrada" - -#: ../../include/widgets.php:710 ../../include/nav.php:214 -msgid "Outbox" -msgstr "Bandeja de salida" - -#: ../../include/widgets.php:715 ../../include/nav.php:215 -msgid "New Message" -msgstr "Nuevo mensaje" - -#: ../../include/widgets.php:732 ../../include/widgets.php:744 -msgid "Conversations" -msgstr "Conversaciones" - -#: ../../include/widgets.php:736 -msgid "Received Messages" -msgstr "Mensajes recibidos" - -#: ../../include/widgets.php:740 -msgid "Sent Messages" -msgstr "Enviar mensajes" - -#: ../../include/widgets.php:754 -msgid "No messages." -msgstr "Sin mensajes." - -#: ../../include/widgets.php:772 -msgid "Delete conversation" -msgstr "Eliminar conversación" - -#: ../../include/widgets.php:798 -msgid "Events Tools" -msgstr "Gestión de eventos" - -#: ../../include/widgets.php:799 -msgid "Export Calendar" -msgstr "Exportar el calendario" - -#: ../../include/widgets.php:800 -msgid "Import Calendar" -msgstr "Importar un calendario" - -#: ../../include/widgets.php:888 ../../include/conversation.php:1866 -#: ../../include/conversation.php:1869 -msgid "Chatrooms" -msgstr "Salas de chat" - -#: ../../include/widgets.php:892 -msgid "Overview" -msgstr "Resumen" - -#: ../../include/widgets.php:899 -msgid "Chat Members" -msgstr "Miembros del chat" - -#: ../../include/widgets.php:977 -msgctxt "wiki_history" -msgid "Message" -msgstr "Mensaje" - -#: ../../include/widgets.php:999 -msgid "Bookmarked Chatrooms" -msgstr "Salas de chat preferidas" - -#: ../../include/widgets.php:1030 -msgid "Suggested Chatrooms" -msgstr "Salas de chat sugeridas" - -#: ../../include/widgets.php:1175 ../../include/widgets.php:1287 -msgid "photo/image" -msgstr "foto/imagen" - -#: ../../include/widgets.php:1230 -msgid "Click to show more" -msgstr "Hacer clic para ver más" - -#: ../../include/widgets.php:1381 -msgid "Rating Tools" -msgstr "Valoraciones" - -#: ../../include/widgets.php:1385 ../../include/widgets.php:1387 -msgid "Rate Me" -msgstr "Valorar este canal" - -#: ../../include/widgets.php:1390 -msgid "View Ratings" -msgstr "Mostrar las valoraciones" - -#: ../../include/widgets.php:1483 -msgid "Forums" -msgstr "Foros" - -#: ../../include/widgets.php:1512 -msgid "Tasks" -msgstr "Tareas" - -#: ../../include/widgets.php:1578 ../../include/widgets.php:1616 -msgid "Member registrations waiting for confirmation" -msgstr "Inscripciones de nuevos miembros pendientes de aprobación" - -#: ../../include/widgets.php:1584 -msgid "Inspect queue" -msgstr "Examinar la cola" - -#: ../../include/widgets.php:1586 -msgid "DB updates" -msgstr "Actualizaciones de la base de datos" - -#: ../../include/widgets.php:1611 ../../include/nav.php:233 -msgid "Admin" -msgstr "Administrador" - -#: ../../include/widgets.php:1612 -msgid "Plugin Features" -msgstr "Extensiones" - -#: ../../include/channel.php:33 -msgid "Unable to obtain identity information from database" -msgstr "No ha sido posible obtener información sobre la identidad desde la base de datos" - -#: ../../include/channel.php:67 -msgid "Empty name" -msgstr "Nombre vacío" - -#: ../../include/channel.php:70 -msgid "Name too long" -msgstr "Nombre demasiado largo" - -#: ../../include/channel.php:181 -msgid "No account identifier" -msgstr "Ningún identificador de la cuenta" - -#: ../../include/channel.php:193 -msgid "Nickname is required." -msgstr "Se requiere un sobrenombre (alias)." - -#: ../../include/channel.php:207 -msgid "Reserved nickname. Please choose another." -msgstr "Sobrenombre en uso. Por favor, elija otro." - -#: ../../include/channel.php:212 -msgid "" -"Nickname has unsupported characters or is already being used on this site." -msgstr "El alias contiene caracteres no admitidos o está ya en uso por otros miembros de este sitio." - -#: ../../include/channel.php:272 -msgid "Unable to retrieve created identity" -msgstr "No ha sido posible recuperar la identidad creada" - -#: ../../include/channel.php:344 -msgid "Default Profile" -msgstr "Perfil principal" - -#: ../../include/channel.php:1045 -msgid "Create New Profile" -msgstr "Crear un nuevo perfil" - -#: ../../include/channel.php:1065 -msgid "Visible to everybody" -msgstr "Visible para todos" - -#: ../../include/channel.php:1138 ../../include/channel.php:1257 -msgid "Gender:" -msgstr "Género:" - -#: ../../include/channel.php:1140 ../../include/channel.php:1312 -msgid "Homepage:" -msgstr "Página personal:" - -#: ../../include/channel.php:1141 -msgid "Online Now" -msgstr "Ahora en línea" - -#: ../../include/channel.php:1262 -msgid "Like this channel" -msgstr "Me gusta este canal" - -#: ../../include/channel.php:1286 -msgid "j F, Y" -msgstr "j F Y" - -#: ../../include/channel.php:1287 -msgid "j F" -msgstr "j F" - -#: ../../include/channel.php:1294 -msgid "Birthday:" -msgstr "Cumpleaños:" - -#: ../../include/channel.php:1307 -#, php-format -msgid "for %1$d %2$s" -msgstr "por %1$d %2$s" - -#: ../../include/channel.php:1310 -msgid "Sexual Preference:" -msgstr "Orientación sexual:" - -#: ../../include/channel.php:1316 -msgid "Tags:" -msgstr "Etiquetas:" - -#: ../../include/channel.php:1318 -msgid "Political Views:" -msgstr "Posición política:" - -#: ../../include/channel.php:1320 -msgid "Religion:" -msgstr "Religión:" - -#: ../../include/channel.php:1324 -msgid "Hobbies/Interests:" -msgstr "Aficciones o intereses:" - -#: ../../include/channel.php:1326 -msgid "Likes:" -msgstr "Me gusta:" - -#: ../../include/channel.php:1328 -msgid "Dislikes:" -msgstr "No me gusta:" - -#: ../../include/channel.php:1330 -msgid "Contact information and Social Networks:" -msgstr "Información de contacto y redes sociales:" - -#: ../../include/channel.php:1332 -msgid "My other channels:" -msgstr "Mis otros canales:" - -#: ../../include/channel.php:1334 -msgid "Musical interests:" -msgstr "Preferencias musicales:" - -#: ../../include/channel.php:1336 -msgid "Books, literature:" -msgstr "Libros, literatura:" - -#: ../../include/channel.php:1338 -msgid "Television:" -msgstr "Televisión:" - -#: ../../include/channel.php:1340 -msgid "Film/dance/culture/entertainment:" -msgstr "Cine, danza, cultura, entretenimiento:" - -#: ../../include/channel.php:1342 -msgid "Love/Romance:" -msgstr "Vida sentimental o amorosa:" - -#: ../../include/channel.php:1344 -msgid "Work/employment:" -msgstr "Trabajo:" +#: ../../include/connections.php:127 +msgid "New window" +msgstr "Nueva ventana" -#: ../../include/channel.php:1346 -msgid "School/education:" -msgstr "Estudios:" +#: ../../include/connections.php:128 +msgid "Open the selected location in a different window or browser tab" +msgstr "Abrir la dirección seleccionada en una ventana o pestaña aparte" -#: ../../include/channel.php:1369 -msgid "Like this thing" -msgstr "Me gusta esto" +#: ../../include/help.php:33 +msgid "Help:" +msgstr "Ayuda:" -#: ../../include/channel.php:2103 -#, php-format -msgid "User '%s' deleted" -msgstr "El usuario '%s' ha sido eliminado" +#: ../../include/help.php:65 +msgid "Not Found" +msgstr "No encontrado" #: ../../include/page_widgets.php:7 msgid "New Page" @@ -12262,11 +11826,55 @@ msgstr " " msgid "timeago.numbers" msgstr "timeago.numbers" +#: ../../include/js_strings.php:45 ../../include/text.php:1331 +msgid "January" +msgstr "enero" + +#: ../../include/js_strings.php:46 ../../include/text.php:1331 +msgid "February" +msgstr "febrero" + +#: ../../include/js_strings.php:47 ../../include/text.php:1331 +msgid "March" +msgstr "marzo" + +#: ../../include/js_strings.php:48 ../../include/text.php:1331 +msgid "April" +msgstr "abril" + #: ../../include/js_strings.php:49 msgctxt "long" msgid "May" msgstr "mayo" +#: ../../include/js_strings.php:50 ../../include/text.php:1331 +msgid "June" +msgstr "junio" + +#: ../../include/js_strings.php:51 ../../include/text.php:1331 +msgid "July" +msgstr "julio" + +#: ../../include/js_strings.php:52 ../../include/text.php:1331 +msgid "August" +msgstr "agosto" + +#: ../../include/js_strings.php:53 ../../include/text.php:1331 +msgid "September" +msgstr "septiembre" + +#: ../../include/js_strings.php:54 ../../include/text.php:1331 +msgid "October" +msgstr "octubre" + +#: ../../include/js_strings.php:55 ../../include/text.php:1331 +msgid "November" +msgstr "noviembre" + +#: ../../include/js_strings.php:56 ../../include/text.php:1331 +msgid "December" +msgstr "diciembre" + #: ../../include/js_strings.php:57 msgid "Jan" msgstr "ene" @@ -12316,6 +11924,34 @@ msgstr "nov" msgid "Dec" msgstr "dic" +#: ../../include/js_strings.php:69 ../../include/text.php:1327 +msgid "Sunday" +msgstr "domingo" + +#: ../../include/js_strings.php:70 ../../include/text.php:1327 +msgid "Monday" +msgstr "lunes" + +#: ../../include/js_strings.php:71 ../../include/text.php:1327 +msgid "Tuesday" +msgstr "martes" + +#: ../../include/js_strings.php:72 ../../include/text.php:1327 +msgid "Wednesday" +msgstr "miércoles" + +#: ../../include/js_strings.php:73 ../../include/text.php:1327 +msgid "Thursday" +msgstr "jueves" + +#: ../../include/js_strings.php:74 ../../include/text.php:1327 +msgid "Friday" +msgstr "viernes" + +#: ../../include/js_strings.php:75 ../../include/text.php:1327 +msgid "Saturday" +msgstr "sábado" + #: ../../include/js_strings.php:76 msgid "Sun" msgstr "dom" @@ -12385,51 +12021,43 @@ msgstr "Solo foros públicos" msgid "This Website Only" msgstr "Solo este sitio web" -#: ../../include/markdown.php:444 -msgid "Attachments:" -msgstr "Ficheros adjuntos:" - -#: ../../include/markdown.php:541 -msgid "$Projectname event notification:" -msgstr "Notificación de eventos de $Projectname:" - -#: ../../include/network.php:733 +#: ../../include/network.php:756 msgid "view full size" msgstr "Ver en el tamaño original" -#: ../../include/network.php:1988 +#: ../../include/network.php:2011 msgid "No Subject" msgstr "Sin asunto" -#: ../../include/network.php:2244 +#: ../../include/network.php:2267 msgid "OStatus" msgstr "OStatus" -#: ../../include/network.php:2245 +#: ../../include/network.php:2268 msgid "GNU-Social" msgstr "GNU Social" -#: ../../include/network.php:2246 +#: ../../include/network.php:2269 msgid "RSS/Atom" msgstr "RSS/Atom" -#: ../../include/network.php:2249 +#: ../../include/network.php:2272 msgid "Facebook" msgstr "Facebook" -#: ../../include/network.php:2250 +#: ../../include/network.php:2273 msgid "Zot" msgstr "Zot" -#: ../../include/network.php:2251 +#: ../../include/network.php:2274 msgid "LinkedIn" msgstr "LinkedIn" -#: ../../include/network.php:2252 +#: ../../include/network.php:2275 msgid "XMPP/IM" msgstr "XMPP/IM" -#: ../../include/network.php:2253 +#: ../../include/network.php:2276 msgid "MySpace" msgstr "MySpace" @@ -12443,6 +12071,11 @@ msgstr "%1$s ahora está conectado/a con %2$s" msgid "%1$s poked %2$s" msgstr "%1$s ha dado un toque a %2$s" +#: ../../include/conversation.php:243 ../../include/text.php:1098 +#: ../../include/text.php:1103 +msgid "poked" +msgstr "ha dado un toque a" + #: ../../include/conversation.php:690 #, php-format msgid "View %s's profile @ %s" @@ -12750,14 +12383,6 @@ msgstr "Añadir un grupo de canales" msgid "Channels not in any privacy group" msgstr "Sin canales en ningún grupo" -#: ../../include/help.php:31 -msgid "Help:" -msgstr "Ayuda:" - -#: ../../include/help.php:63 -msgid "Not Found" -msgstr "No encontrado" - #: ../../include/items.php:843 ../../include/items.php:890 msgid "(Unknown)" msgstr "(Desconocido)" @@ -12827,6 +12452,14 @@ msgctxt "edit_activity" msgid "Comment" msgstr "Comentar" +#: ../../include/markdown.php:445 +msgid "Attachments:" +msgstr "Ficheros adjuntos:" + +#: ../../include/markdown.php:542 +msgid "$Projectname event notification:" +msgstr "Notificación de eventos de $Projectname:" + #: ../../include/security.php:117 msgid "guest:" msgstr "invitado: " @@ -12837,23 +12470,6 @@ msgid "" "form has been opened for too long (>3 hours) before submitting it." msgstr "El \"token\" de seguridad del formulario no es correcto. Esto ha ocurrido probablemente porque el formulario ha estado abierto demasiado tiempo (>3 horas) antes de ser enviado" -#: ../../include/zot.php:652 -msgid "Invalid data packet" -msgstr "Paquete de datos no válido" - -#: ../../include/zot.php:668 -msgid "Unable to verify channel signature" -msgstr "No ha sido posible de verificar la firma del canal" - -#: ../../include/zot.php:2319 -#, php-format -msgid "Unable to verify site signature for %s" -msgstr "No ha sido posible de verificar la firma del sitio para %s" - -#: ../../include/zot.php:3725 -msgid "invalid target signature" -msgstr "La firma recibida no es válida" - #: ../../include/nav.php:88 msgid "Remote authentication" msgstr "Acceder desde su servidor" @@ -13060,6 +12676,271 @@ msgstr "el almacenamiento en la base de datos ha fallado." msgid "Empty path" msgstr "Ruta vacía" +#: ../../include/text.php:461 +msgid "prev" +msgstr "anterior" + +#: ../../include/text.php:463 +msgid "first" +msgstr "primera" + +#: ../../include/text.php:492 +msgid "last" +msgstr "última" + +#: ../../include/text.php:495 +msgid "next" +msgstr "próxima" + +#: ../../include/text.php:506 +msgid "older" +msgstr "más antiguas" + +#: ../../include/text.php:508 +msgid "newer" +msgstr "más recientes" + +#: ../../include/text.php:928 +msgid "No connections" +msgstr "Sin conexiones" + +#: ../../include/text.php:953 +#, php-format +msgid "View all %s connections" +msgstr "Ver todas las %s conexiones" + +#: ../../include/text.php:1098 ../../include/text.php:1103 +msgid "poke" +msgstr "un toque" + +#: ../../include/text.php:1104 +msgid "ping" +msgstr "un \"ping\"" + +#: ../../include/text.php:1104 +msgid "pinged" +msgstr "ha enviado un \"ping\" a" + +#: ../../include/text.php:1105 +msgid "prod" +msgstr "una incitación " + +#: ../../include/text.php:1105 +msgid "prodded" +msgstr "ha incitado a " + +#: ../../include/text.php:1106 +msgid "slap" +msgstr "una bofetada " + +#: ../../include/text.php:1106 +msgid "slapped" +msgstr "ha abofeteado a " + +#: ../../include/text.php:1107 +msgid "finger" +msgstr "un \"finger\" " + +#: ../../include/text.php:1107 +msgid "fingered" +msgstr "envió un \"finger\" a" + +#: ../../include/text.php:1108 +msgid "rebuff" +msgstr "un reproche" + +#: ../../include/text.php:1108 +msgid "rebuffed" +msgstr "ha hecho un reproche a " + +#: ../../include/text.php:1120 +msgid "happy" +msgstr "feliz " + +#: ../../include/text.php:1121 +msgid "sad" +msgstr "triste " + +#: ../../include/text.php:1122 +msgid "mellow" +msgstr "tranquilo/a" + +#: ../../include/text.php:1123 +msgid "tired" +msgstr "cansado/a " + +#: ../../include/text.php:1124 +msgid "perky" +msgstr "vivaz" + +#: ../../include/text.php:1125 +msgid "angry" +msgstr "enfadado/a" + +#: ../../include/text.php:1126 +msgid "stupefied" +msgstr "asombrado/a" + +#: ../../include/text.php:1127 +msgid "puzzled" +msgstr "perplejo/a" + +#: ../../include/text.php:1128 +msgid "interested" +msgstr "interesado/a" + +#: ../../include/text.php:1129 +msgid "bitter" +msgstr "amargado/a" + +#: ../../include/text.php:1130 +msgid "cheerful" +msgstr "alegre" + +#: ../../include/text.php:1131 +msgid "alive" +msgstr "animado/a" + +#: ../../include/text.php:1132 +msgid "annoyed" +msgstr "molesto/a" + +#: ../../include/text.php:1133 +msgid "anxious" +msgstr "ansioso/a" + +#: ../../include/text.php:1134 +msgid "cranky" +msgstr "de mal humor" + +#: ../../include/text.php:1135 +msgid "disturbed" +msgstr "perturbado/a" + +#: ../../include/text.php:1136 +msgid "frustrated" +msgstr "frustrado/a" + +#: ../../include/text.php:1137 +msgid "depressed" +msgstr "deprimido/a" + +#: ../../include/text.php:1138 +msgid "motivated" +msgstr "motivado/a" + +#: ../../include/text.php:1139 +msgid "relaxed" +msgstr "relajado/a" + +#: ../../include/text.php:1140 +msgid "surprised" +msgstr "sorprendido/a" + +#: ../../include/text.php:1331 +msgid "May" +msgstr "mayo" + +#: ../../include/text.php:1408 ../../include/text.php:1412 +msgid "Unknown Attachment" +msgstr "Adjunto no reconocido" + +#: ../../include/text.php:1414 +msgid "unknown" +msgstr "desconocido" + +#: ../../include/text.php:1450 +msgid "remove category" +msgstr "eliminar el tema" + +#: ../../include/text.php:1527 +msgid "remove from file" +msgstr "eliminar del fichero" + +#: ../../include/text.php:1796 +msgid "Page layout" +msgstr "Plantilla de la página" + +#: ../../include/text.php:1796 +msgid "You can create your own with the layouts tool" +msgstr "Puede crear su propia disposición gráfica con la herramienta de plantillas" + +#: ../../include/text.php:1838 +msgid "Page content type" +msgstr "Tipo de contenido de la página" + +#: ../../include/text.php:1971 +msgid "activity" +msgstr "la actividad" + +#: ../../include/text.php:2285 +msgid "Design Tools" +msgstr "Herramientas de diseño web" + +#: ../../include/text.php:2291 +msgid "Pages" +msgstr "Páginas" + +#: ../../include/text.php:2313 +msgid "Import website..." +msgstr "Importar un sitio web..." + +#: ../../include/text.php:2314 +msgid "Select folder to import" +msgstr "Seleccionar la carpeta que se va a importar" + +#: ../../include/text.php:2315 +msgid "Import from a zipped folder:" +msgstr "Importar desde una carpeta comprimida: " + +#: ../../include/text.php:2316 +msgid "Import from cloud files:" +msgstr "Importar desde los ficheros en la nube: " + +#: ../../include/text.php:2317 +msgid "/cloud/channel/path/to/folder" +msgstr "/cloud/canal/ruta/a la/carpeta" + +#: ../../include/text.php:2318 +msgid "Enter path to website files" +msgstr "Ruta a los ficheros del sitio web" + +#: ../../include/text.php:2319 +msgid "Select folder" +msgstr "Seleccionar la carpeta" + +#: ../../include/text.php:2320 +msgid "Export website..." +msgstr "Exportar un sitio web..." + +#: ../../include/text.php:2321 +msgid "Export to a zip file" +msgstr "Exportar a un fichero comprimido .zip" + +#: ../../include/text.php:2322 +msgid "website.zip" +msgstr "sitio_web.zip" + +#: ../../include/text.php:2323 +msgid "Enter a name for the zip file." +msgstr "Escriba un nombre para el fichero zip." + +#: ../../include/text.php:2324 +msgid "Export to cloud files" +msgstr "Exportar a la nube de ficheros" + +#: ../../include/text.php:2325 +msgid "/path/to/export/folder" +msgstr "/ruta/para/exportar/carpeta" + +#: ../../include/text.php:2326 +msgid "Enter a path to a cloud files destination." +msgstr "Escriba una ruta de destino a la nube de ficheros." + +#: ../../include/text.php:2327 +msgid "Specify folder" +msgstr "Especificar una carpeta" + #: ../../include/auth.php:148 msgid "Logged out." msgstr "Desconectado/a." @@ -13145,6 +13026,23 @@ msgstr "Contenido incorporado" msgid "Embedding disabled" msgstr "Incrustación deshabilitada" +#: ../../include/zot.php:649 +msgid "Invalid data packet" +msgstr "Paquete de datos no válido" + +#: ../../include/zot.php:665 +msgid "Unable to verify channel signature" +msgstr "No ha sido posible de verificar la firma del canal" + +#: ../../include/zot.php:2316 +#, php-format +msgid "Unable to verify site signature for %s" +msgstr "No ha sido posible de verificar la firma del sitio para %s" + +#: ../../include/zot.php:3722 +msgid "invalid target signature" +msgstr "La firma recibida no es válida" + #: ../../include/permissions.php:35 msgid "Can view my normal stream and posts" msgstr "Pueden verse mi actividad y publicaciones normales" @@ -13221,14 +13119,6 @@ msgstr "Visitar %2$s de %1$s" msgid "%1$s has an updated %2$s, changing %3$s." msgstr "%1$s ha actualizado %2$s, cambiando %3$s." -#: ../../include/connections.php:127 -msgid "New window" -msgstr "Nueva ventana" - -#: ../../include/connections.php:128 -msgid "Open the selected location in a different window or browser tab" -msgstr "Abrir la dirección seleccionada en una ventana o pestaña aparte" - #: ../../include/features.php:58 msgid "General Features" msgstr "Funcionalidades básicas" @@ -13557,6 +13447,157 @@ msgstr "%1$s ha publicado %2$s en %3$s" msgid "Upload New Photos" msgstr "Subir nuevas fotos" +#: ../../include/channel.php:33 +msgid "Unable to obtain identity information from database" +msgstr "No ha sido posible obtener información sobre la identidad desde la base de datos" + +#: ../../include/channel.php:67 +msgid "Empty name" +msgstr "Nombre vacío" + +#: ../../include/channel.php:70 +msgid "Name too long" +msgstr "Nombre demasiado largo" + +#: ../../include/channel.php:181 +msgid "No account identifier" +msgstr "Ningún identificador de la cuenta" + +#: ../../include/channel.php:193 +msgid "Nickname is required." +msgstr "Se requiere un sobrenombre (alias)." + +#: ../../include/channel.php:207 +msgid "Reserved nickname. Please choose another." +msgstr "Sobrenombre en uso. Por favor, elija otro." + +#: ../../include/channel.php:212 +msgid "" +"Nickname has unsupported characters or is already being used on this site." +msgstr "El alias contiene caracteres no admitidos o está ya en uso por otros miembros de este sitio." + +#: ../../include/channel.php:272 +msgid "Unable to retrieve created identity" +msgstr "No ha sido posible recuperar la identidad creada" + +#: ../../include/channel.php:344 +msgid "Default Profile" +msgstr "Perfil principal" + +#: ../../include/channel.php:1045 +msgid "Create New Profile" +msgstr "Crear un nuevo perfil" + +#: ../../include/channel.php:1065 +msgid "Visible to everybody" +msgstr "Visible para todos" + +#: ../../include/channel.php:1138 ../../include/channel.php:1257 +msgid "Gender:" +msgstr "Género:" + +#: ../../include/channel.php:1140 ../../include/channel.php:1312 +msgid "Homepage:" +msgstr "Página personal:" + +#: ../../include/channel.php:1141 +msgid "Online Now" +msgstr "Ahora en línea" + +#: ../../include/channel.php:1262 +msgid "Like this channel" +msgstr "Me gusta este canal" + +#: ../../include/channel.php:1286 +msgid "j F, Y" +msgstr "j F Y" + +#: ../../include/channel.php:1287 +msgid "j F" +msgstr "j F" + +#: ../../include/channel.php:1294 +msgid "Birthday:" +msgstr "Cumpleaños:" + +#: ../../include/channel.php:1307 +#, php-format +msgid "for %1$d %2$s" +msgstr "por %1$d %2$s" + +#: ../../include/channel.php:1310 +msgid "Sexual Preference:" +msgstr "Orientación sexual:" + +#: ../../include/channel.php:1316 +msgid "Tags:" +msgstr "Etiquetas:" + +#: ../../include/channel.php:1318 +msgid "Political Views:" +msgstr "Posición política:" + +#: ../../include/channel.php:1320 +msgid "Religion:" +msgstr "Religión:" + +#: ../../include/channel.php:1324 +msgid "Hobbies/Interests:" +msgstr "Aficciones o intereses:" + +#: ../../include/channel.php:1326 +msgid "Likes:" +msgstr "Me gusta:" + +#: ../../include/channel.php:1328 +msgid "Dislikes:" +msgstr "No me gusta:" + +#: ../../include/channel.php:1330 +msgid "Contact information and Social Networks:" +msgstr "Información de contacto y redes sociales:" + +#: ../../include/channel.php:1332 +msgid "My other channels:" +msgstr "Mis otros canales:" + +#: ../../include/channel.php:1334 +msgid "Musical interests:" +msgstr "Preferencias musicales:" + +#: ../../include/channel.php:1336 +msgid "Books, literature:" +msgstr "Libros, literatura:" + +#: ../../include/channel.php:1338 +msgid "Television:" +msgstr "Televisión:" + +#: ../../include/channel.php:1340 +msgid "Film/dance/culture/entertainment:" +msgstr "Cine, danza, cultura, entretenimiento:" + +#: ../../include/channel.php:1342 +msgid "Love/Romance:" +msgstr "Vida sentimental o amorosa:" + +#: ../../include/channel.php:1344 +msgid "Work/employment:" +msgstr "Trabajo:" + +#: ../../include/channel.php:1346 +msgid "School/education:" +msgstr "Estudios:" + +#: ../../include/channel.php:1369 +msgid "Like this thing" +msgstr "Me gusta esto" + +#: ../../include/channel.php:2103 +#, php-format +msgid "User '%s' deleted" +msgstr "El usuario '%s' ha sido eliminado" + #: ../../util/nconfig.php:34 msgid "Source channel not found." msgstr "No se ha encontrado el canal de origen." diff --git a/view/es-es/hstrings.php b/view/es-es/hstrings.php index 810079c01..c7c6a5822 100644 --- a/view/es-es/hstrings.php +++ b/view/es-es/hstrings.php @@ -61,6 +61,7 @@ App::$strings["Delete"] = "Eliminar"; App::$strings["You are using %1\$s of your available file storage."] = "Está usando %1\$s de su espacio disponible para ficheros."; App::$strings["You are using %1\$s of %2\$s available file storage. (%3\$s%)"] = "Está usando %1\$s de %2\$s que tiene a su disposición para ficheros. (%3\$s%)"; App::$strings["WARNING:"] = "ATENCIÓN: "; +App::$strings["Please use DAV to upload large (video, audio) files.<br>See <a class=\"zrl\" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop Clients</a>"] = "Por favor, use DAV para subir ficheros de gran tamaño (vídeo, audio).<br>Mire en <a class=\"zrl\" href=\"help/member/member_guide#Cloud_Desktop_Clients\">Cloud Desktop Clients</a>"; App::$strings["Create new folder"] = "Crear nueva carpeta"; App::$strings["Upload file"] = "Subir fichero"; App::$strings["Drop files here to immediately upload"] = "Arrastre los ficheros aquí para subirlos de forma inmediata"; @@ -305,18 +306,6 @@ App::$strings["Only allow embeds from secure (SSL) websites and links."] = "Sól App::$strings["Allow unfiltered embedded HTML content only from these domains"] = "Permitir contenido HTML sin filtrar sólo desde estos dominios "; App::$strings["One site per line. By default embedded content is filtered."] = "Un sitio por línea. El contenido incorporado se filtra de forma predeterminada."; App::$strings["Block embedded HTML from these domains"] = "Bloquear contenido con HTML incorporado desde estos dominios"; -App::$strings["Theme settings updated."] = "Ajustes del tema actualizados."; -App::$strings["No themes found."] = "No se han encontrado temas."; -App::$strings["Disable"] = "Desactivar"; -App::$strings["Enable"] = "Activar"; -App::$strings["Screenshot"] = "Instantánea de pantalla"; -App::$strings["Themes"] = "Temas"; -App::$strings["Toggle"] = "Cambiar"; -App::$strings["Settings"] = "Ajustes"; -App::$strings["Author: "] = "Autor:"; -App::$strings["Maintainer: "] = "Mantenedor:"; -App::$strings["[Experimental]"] = "[Experimental]"; -App::$strings["[Unsupported]"] = "[No soportado]"; App::$strings["Password changed for account %d."] = "Ha cambiado la contraseña para la cuenta %d."; App::$strings["Account settings updated."] = "Se han actualizado los ajustes de la cuenta."; App::$strings["Account not found."] = "No se ha encontrado la cuenta."; @@ -392,8 +381,16 @@ App::$strings["No failed updates."] = "No ha fallado ninguna actualización."; App::$strings["Failed Updates"] = "Han fallado las actualizaciones"; App::$strings["Mark success (if update was manually applied)"] = "Marcar como exitosa (si la actualización se ha hecho manualmente)"; App::$strings["Attempt to execute this update step automatically"] = "Intentar ejecutar este paso de actualización automáticamente"; +App::$strings["Queue Statistics"] = "Estadísticas de la cola"; +App::$strings["Total Entries"] = "Total de entradas"; +App::$strings["Priority"] = "Prioridad"; +App::$strings["Destination URL"] = "Dirección de destino"; +App::$strings["Mark hub permanently offline"] = "Marcar el servidor como permanentemente fuera de línea"; +App::$strings["Empty queue for this hub"] = "Vaciar la cola para este servidor"; +App::$strings["Last known contact"] = "Último contacto conocido"; App::$strings["Site settings updated."] = "Ajustes del sitio actualizados."; App::$strings["Default"] = "Predeterminado"; +App::$strings["%s - (Incompatible)"] = "%s - (Incompatible)"; App::$strings["mobile"] = "móvil"; App::$strings["experimental"] = "experimental"; App::$strings["unsupported"] = "no soportado"; @@ -479,7 +476,13 @@ App::$strings["Expiration period in days for imported (grid/network) content"] = App::$strings["0 for no expiration of imported content"] = "0 para que no caduque el contenido importado"; App::$strings["Plugin %s disabled."] = "Extensión %s desactivada."; App::$strings["Plugin %s enabled."] = "Extensión %s activada."; +App::$strings["Disable"] = "Desactivar"; +App::$strings["Enable"] = "Activar"; App::$strings["Plugins"] = "Extensiones (plugins)"; +App::$strings["Toggle"] = "Cambiar"; +App::$strings["Settings"] = "Ajustes"; +App::$strings["Author: "] = "Autor:"; +App::$strings["Maintainer: "] = "Mantenedor:"; App::$strings["Minimum project version: "] = "Versión mínima del proyecto:"; App::$strings["Maximum project version: "] = "Versión máxima del proyecto:"; App::$strings["Minimum PHP version: "] = "Versión mínima de PHP:"; @@ -500,13 +503,12 @@ App::$strings["Install a New Plugin Repository"] = "Instalar un nuevo repositori App::$strings["Update"] = "Actualizar"; App::$strings["Switch branch"] = "Cambiar la rama"; App::$strings["Remove"] = "Eliminar"; -App::$strings["Queue Statistics"] = "Estadísticas de la cola"; -App::$strings["Total Entries"] = "Total de entradas"; -App::$strings["Priority"] = "Prioridad"; -App::$strings["Destination URL"] = "Dirección de destino"; -App::$strings["Mark hub permanently offline"] = "Marcar el servidor como permanentemente fuera de línea"; -App::$strings["Empty queue for this hub"] = "Vaciar la cola para este servidor"; -App::$strings["Last known contact"] = "Último contacto conocido"; +App::$strings["Theme settings updated."] = "Ajustes del tema actualizados."; +App::$strings["No themes found."] = "No se han encontrado temas."; +App::$strings["Screenshot"] = "Instantánea de pantalla"; +App::$strings["Themes"] = "Temas"; +App::$strings["[Experimental]"] = "[Experimental]"; +App::$strings["[Unsupported]"] = "[No soportado]"; App::$strings["Export Channel"] = "Exportar el canal"; App::$strings["Export your basic channel information to a file. This acts as a backup of your connections, permissions, profile and basic data, which can be used to import your data to a new server hub, but does not contain your content."] = "Exportar la información básica del canal a un fichero. Este equivale a una copia de seguridad de sus conexiones, el perfil y datos fundamentales, que puede usarse para importar sus datos a un nuevo servidor, pero no incluye su contenido."; App::$strings["Export Content"] = "Exportar contenidos"; @@ -533,6 +535,7 @@ App::$strings["Search Results For:"] = "Buscar resultados para:"; App::$strings["Privacy group is empty"] = "El grupo de canales está vacío"; App::$strings["Privacy group: "] = "Grupo de canales: "; App::$strings["Invalid connection."] = "Conexión no válida."; +App::$strings["Invalid channel."] = "El canal no es válido."; App::$strings["Unable to update menu."] = "No se puede actualizar el menú."; App::$strings["Unable to create menu."] = "No se puede crear el menú."; App::$strings["Menu Name"] = "Nombre del menú"; @@ -596,6 +599,8 @@ App::$strings["View Profile"] = "Ver el perfil"; App::$strings["View %s's profile"] = "Ver el perfil de %s"; App::$strings["Refresh Permissions"] = "Recargar los permisos"; App::$strings["Fetch updated permissions"] = "Obtener los permisos actualizados"; +App::$strings["Refresh Photo"] = "Actualizar la foto"; +App::$strings["Fetch updated photo"] = "Obtener una foto actualizada"; App::$strings["Recent Activity"] = "Actividad reciente"; App::$strings["View recent posts and comments"] = "Ver publicaciones y comentarios recientes"; App::$strings["Block (or Unblock) all communications with this connection"] = "Bloquear (o desbloquear) todas las comunicaciones con esta conexión"; @@ -612,6 +617,8 @@ App::$strings["Hide"] = "Ocultar"; App::$strings["Hide or Unhide this connection from your other connections"] = "Ocultar o mostrar esta conexión a sus otras conexiones"; App::$strings["This connection is hidden!"] = "¡Esta conexión está oculta!"; App::$strings["Delete this connection"] = "Eliminar esta conexión"; +App::$strings["Fetch Vcard"] = "Obtener una vcard"; +App::$strings["Fetch electronic calling card for this connection"] = "Obtener una tarjeta de llamada electrónica para esta conexión"; App::$strings["Permissions"] = "Permisos"; App::$strings["Open Individual Permissions section by default"] = "Abrir la sección de permisos individuales por defecto"; App::$strings["Affinity"] = "Afinidad"; @@ -730,7 +737,76 @@ App::$strings["Share this file"] = "Compartir este fichero"; App::$strings["Show URL to this file"] = "Mostrar la dirección de este fichero"; App::$strings["Notify your contacts about this file"] = "Avisar a sus contactos sobre este fichero"; App::$strings["Photos"] = "Fotos"; +App::$strings["Page owner information could not be retrieved."] = "La información del propietario de la página no pudo ser recuperada."; +App::$strings["Profile Photos"] = "Fotos del perfil"; +App::$strings["Album not found."] = "Álbum no encontrado."; +App::$strings["Delete Album"] = "Borrar álbum"; +App::$strings["Multiple storage folders exist with this album name, but within different directories. Please remove the desired folder or folders using the Files manager"] = "Hay varias carpetas con este nombre de álbum, pero dentro de diferentes directorios. Por favor, elimine la carpeta o carpetas que desee utilizando el administrador de ficheros"; +App::$strings["Delete Photo"] = "Borrar foto"; App::$strings["Public access denied."] = "Acceso público denegado."; +App::$strings["No photos selected"] = "No hay fotos seleccionadas"; +App::$strings["Access to this item is restricted."] = "El acceso a este elemento está restringido."; +App::$strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado."; +App::$strings["%1$.2f MB photo storage used."] = "%1$.2f MB de almacenamiento de fotos utilizado."; +App::$strings["Upload Photos"] = "Subir fotos"; +App::$strings["Enter an album name"] = "Introducir un nombre de álbum"; +App::$strings["or select an existing album (doubleclick)"] = "o seleccionar uno existente (doble click)"; +App::$strings["Create a status post for this upload"] = "Crear un mensaje de estado para esta subida"; +App::$strings["Caption (optional):"] = "Título (opcional):"; +App::$strings["Description (optional):"] = "Descripción (opcional):"; +App::$strings["Album name could not be decoded"] = "El nombre del álbum no ha podido ser descifrado"; +App::$strings["Contact Photos"] = "Fotos de contacto"; +App::$strings["Show Newest First"] = "Mostrar lo más reciente primero"; +App::$strings["Show Oldest First"] = "Mostrar lo más antiguo primero"; +App::$strings["View Photo"] = "Ver foto"; +App::$strings["Edit Album"] = "Editar álbum"; +App::$strings["Permission denied. Access to this item may be restricted."] = "Permiso denegado. El acceso a este elemento puede estar restringido."; +App::$strings["Photo not available"] = "Foto no disponible"; +App::$strings["Use as profile photo"] = "Usar como foto del perfil"; +App::$strings["Use as cover photo"] = "Usar como imagen de portada del perfil"; +App::$strings["Private Photo"] = "Foto privada"; +App::$strings["View Full Size"] = "Ver tamaño completo"; +App::$strings["Edit photo"] = "Editar foto"; +App::$strings["Rotate CW (right)"] = "Girar CW (a la derecha)"; +App::$strings["Rotate CCW (left)"] = "Girar CCW (a la izquierda)"; +App::$strings["Move photo to album"] = "Mover la foto a un álbum"; +App::$strings["Enter a new album name"] = "Introducir un nuevo nombre de álbum"; +App::$strings["or select an existing one (doubleclick)"] = "o seleccionar uno (doble click) existente"; +App::$strings["Caption"] = "Título"; +App::$strings["Add a Tag"] = "Añadir una etiqueta"; +App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com"; +App::$strings["Flag as adult in album view"] = "Marcar como \"solo para adultos\" en el álbum"; +App::$strings["I like this (toggle)"] = "Me gusta (cambiar)"; +App::$strings["I don't like this (toggle)"] = "No me gusta esto (cambiar)"; +App::$strings["Share"] = "Compartir"; +App::$strings["Please wait"] = "Espere por favor"; +App::$strings["This is you"] = "Este es usted"; +App::$strings["Comment"] = "Comentar"; +App::$strings["__ctx:title__ Likes"] = "Me gusta"; +App::$strings["__ctx:title__ Dislikes"] = "No me gusta"; +App::$strings["__ctx:title__ Agree"] = "De acuerdo"; +App::$strings["__ctx:title__ Disagree"] = "En desacuerdo"; +App::$strings["__ctx:title__ Abstain"] = "Abstención"; +App::$strings["__ctx:title__ Attending"] = "Participaré"; +App::$strings["__ctx:title__ Not attending"] = "No participaré"; +App::$strings["__ctx:title__ Might attend"] = "Quizá participe"; +App::$strings["View all"] = "Ver todo"; +App::$strings["__ctx:noun__ Like"] = array( + 0 => "Me gusta", + 1 => "Me gusta", +); +App::$strings["__ctx:noun__ Dislike"] = array( + 0 => "No me gusta", + 1 => "No me gusta", +); +App::$strings["Photo Tools"] = "Gestión de las fotos"; +App::$strings["In This Photo:"] = "En esta foto:"; +App::$strings["Map"] = "Mapa"; +App::$strings["__ctx:noun__ Likes"] = "Me gusta"; +App::$strings["__ctx:noun__ Dislikes"] = "No me gusta"; +App::$strings["Close"] = "Cerrar"; +App::$strings["View Album"] = "Ver álbum"; +App::$strings["Recent Photos"] = "Fotos recientes"; App::$strings["Privacy group created."] = "El grupo de canales ha sido creado."; App::$strings["Could not create privacy group."] = "No se puede crear el grupo de canales"; App::$strings["Privacy group not found."] = "Grupo de canales no encontrado."; @@ -884,7 +960,6 @@ App::$strings["Import selected"] = "Importar elementos seleccionados"; App::$strings["Export Webpage Elements"] = "Exportar elementos de una página web"; App::$strings["Export selected"] = "Exportar los elementos seleccionados"; App::$strings["Webpages"] = "Páginas web"; -App::$strings["Share"] = "Compartir"; App::$strings["Actions"] = "Acciones"; App::$strings["Page Link"] = "Vínculo de la página"; App::$strings["Page Title"] = "Título de página"; @@ -935,7 +1010,6 @@ App::$strings["Website:"] = "Sitio web:"; App::$strings["Remote Channel [%s] (not yet known on this site)"] = "Canal remoto [%s] (aún no es conocido en este sitio)"; App::$strings["Rating (this information is public)"] = "Valoración (esta información es pública)"; App::$strings["Optionally explain your rating (this information is public)"] = "Opcionalmente puede explicar su valoración (esta información es pública)"; -App::$strings["Profile Photos"] = "Fotos del perfil"; App::$strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Recargue la página o limpie el caché del navegador si la nueva foto no se muestra inmediatamente."; App::$strings["Use Photo for Profile"] = "Usar la fotografía para el perfil"; App::$strings["Upload Profile Photo"] = "Subir foto de perfil"; @@ -1040,73 +1114,43 @@ App::$strings["No entries (some entries may be hidden)."] = "Sin entradas (algun App::$strings["vcard"] = "vcard"; App::$strings["Unable to find your hub."] = "No se puede encontrar su servidor."; App::$strings["Post successful."] = "Enviado con éxito."; -App::$strings["Page owner information could not be retrieved."] = "La información del propietario de la página no pudo ser recuperada."; -App::$strings["Album not found."] = "Álbum no encontrado."; -App::$strings["Delete Album"] = "Borrar álbum"; -App::$strings["Multiple storage folders exist with this album name, but within different directories. Please remove the desired folder or folders using the Files manager"] = "Hay varias carpetas con este nombre de álbum, pero dentro de diferentes directorios. Por favor, elimine la carpeta o carpetas que desee utilizando el administrador de ficheros"; -App::$strings["Delete Photo"] = "Borrar foto"; -App::$strings["No photos selected"] = "No hay fotos seleccionadas"; -App::$strings["Access to this item is restricted."] = "El acceso a este elemento está restringido."; -App::$strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado."; -App::$strings["%1$.2f MB photo storage used."] = "%1$.2f MB de almacenamiento de fotos utilizado."; -App::$strings["Upload Photos"] = "Subir fotos"; -App::$strings["Enter an album name"] = "Introducir un nombre de álbum"; -App::$strings["or select an existing album (doubleclick)"] = "o seleccionar uno existente (doble click)"; -App::$strings["Create a status post for this upload"] = "Crear un mensaje de estado para esta subida"; -App::$strings["Caption (optional):"] = "Título (opcional):"; -App::$strings["Description (optional):"] = "Descripción (opcional):"; -App::$strings["Album name could not be decoded"] = "El nombre del álbum no ha podido ser descifrado"; -App::$strings["Contact Photos"] = "Fotos de contacto"; -App::$strings["Show Newest First"] = "Mostrar lo más reciente primero"; -App::$strings["Show Oldest First"] = "Mostrar lo más antiguo primero"; -App::$strings["View Photo"] = "Ver foto"; -App::$strings["Edit Album"] = "Editar álbum"; -App::$strings["Permission denied. Access to this item may be restricted."] = "Permiso denegado. El acceso a este elemento puede estar restringido."; -App::$strings["Photo not available"] = "Foto no disponible"; -App::$strings["Use as profile photo"] = "Usar como foto del perfil"; -App::$strings["Use as cover photo"] = "Usar como imagen de portada del perfil"; -App::$strings["Private Photo"] = "Foto privada"; -App::$strings["View Full Size"] = "Ver tamaño completo"; -App::$strings["Edit photo"] = "Editar foto"; -App::$strings["Rotate CW (right)"] = "Girar CW (a la derecha)"; -App::$strings["Rotate CCW (left)"] = "Girar CCW (a la izquierda)"; -App::$strings["Move photo to album"] = "Mover la foto a un álbum"; -App::$strings["Enter a new album name"] = "Introducir un nuevo nombre de álbum"; -App::$strings["or select an existing one (doubleclick)"] = "o seleccionar uno (doble click) existente"; -App::$strings["Caption"] = "Título"; -App::$strings["Add a Tag"] = "Añadir una etiqueta"; -App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com"; -App::$strings["Flag as adult in album view"] = "Marcar como \"solo para adultos\" en el álbum"; -App::$strings["I like this (toggle)"] = "Me gusta (cambiar)"; -App::$strings["I don't like this (toggle)"] = "No me gusta esto (cambiar)"; -App::$strings["Please wait"] = "Espere por favor"; -App::$strings["This is you"] = "Este es usted"; -App::$strings["Comment"] = "Comentar"; -App::$strings["__ctx:title__ Likes"] = "Me gusta"; -App::$strings["__ctx:title__ Dislikes"] = "No me gusta"; -App::$strings["__ctx:title__ Agree"] = "De acuerdo"; -App::$strings["__ctx:title__ Disagree"] = "En desacuerdo"; -App::$strings["__ctx:title__ Abstain"] = "Abstención"; -App::$strings["__ctx:title__ Attending"] = "Participaré"; -App::$strings["__ctx:title__ Not attending"] = "No participaré"; -App::$strings["__ctx:title__ Might attend"] = "Quizá participe"; -App::$strings["View all"] = "Ver todo"; -App::$strings["__ctx:noun__ Like"] = array( - 0 => "Me gusta", - 1 => "Me gusta", -); -App::$strings["__ctx:noun__ Dislike"] = array( - 0 => "No me gusta", - 1 => "No me gusta", -); -App::$strings["Photo Tools"] = "Gestión de las fotos"; -App::$strings["In This Photo:"] = "En esta foto:"; -App::$strings["Map"] = "Mapa"; -App::$strings["__ctx:noun__ Likes"] = "Me gusta"; -App::$strings["__ctx:noun__ Dislikes"] = "No me gusta"; -App::$strings["Close"] = "Cerrar"; -App::$strings["View Album"] = "Ver álbum"; -App::$strings["Recent Photos"] = "Fotos recientes"; +App::$strings["Source of Item"] = "Origen del elemento"; +App::$strings["No service class restrictions found."] = "No se han encontrado restricciones sobre esta clase de servicio."; +App::$strings["network"] = "red"; +App::$strings["RSS"] = "RSS"; +App::$strings["Channel removals are not allowed within 48 hours of changing the account password."] = "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña."; +App::$strings["Remove This Channel"] = "Eliminar este canal"; +App::$strings["This channel will be completely removed from the network. "] = "Este canal va a ser completamente eliminado de la red. "; +App::$strings["Remove this channel and all its clones from the network"] = "Eliminar este canal y todos sus clones de la red"; +App::$strings["By default only the instance of the channel located on this hub will be removed from the network"] = "Por defecto, solo la instancia del canal alojado en este servidor será eliminado de la red"; +App::$strings["Remove Channel"] = "Eliminar el canal"; +App::$strings["Files: shared with me"] = "Ficheros: compartidos conmigo"; +App::$strings["NEW"] = "NUEVO"; +App::$strings["Remove all files"] = "Eliminar todos los ficheros"; +App::$strings["Remove this file"] = "Eliminar este fichero"; +App::$strings["post"] = "la entrada"; +App::$strings["comment"] = "el comentario"; +App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s ha etiquetado %3\$s de %2\$s con %4\$s"; +App::$strings["Failed to create source. No channel selected."] = "No se ha podido crear el origen de los contenidos. No ha sido seleccionado ningún canal."; +App::$strings["Source created."] = "Fuente creada."; +App::$strings["Source updated."] = "Fuente actualizada."; +App::$strings["*"] = "*"; +App::$strings["Channel Sources"] = "Orígenes de los contenidos del canal"; +App::$strings["Manage remote sources of content for your channel."] = "Gestionar contenido de origen remoto para su canal."; +App::$strings["New Source"] = "Nueva fuente"; +App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importar todo el contenido o una selección de los siguientes canales en este canal y distribuirlo de acuerdo con sus ajustes."; +App::$strings["Only import content with these words (one per line)"] = "Importar solo contenido que contenga estas palabras (una por línea)"; +App::$strings["Leave blank to import all public content"] = "Dejar en blanco para importar todo el contenido público"; +App::$strings["Channel Name"] = "Nombre del canal"; +App::$strings["Add the following categories to posts imported from this source (comma separated)"] = "Añadir los temas siguientes a las entradas importadas de esta fuente (separadas por comas)"; +App::$strings["Optional"] = "Opcional"; +App::$strings["Source not found."] = "Fuente no encontrada"; +App::$strings["Edit Source"] = "Editar fuente"; +App::$strings["Delete Source"] = "Eliminar fuente"; +App::$strings["Source removed"] = "Fuente eliminada"; +App::$strings["Unable to remove source."] = "No se puede eliminar la fuente."; +App::$strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "No hay sugerencias disponibles. Si es un sitio nuevo, espere 24 horas y pruebe de nuevo."; +App::$strings["Ignore/Hide"] = "Ignorar/Ocultar"; App::$strings["Profile not found."] = "Perfil no encontrado."; App::$strings["Profile deleted."] = "Perfil eliminado."; App::$strings["Profile-"] = "Perfil-"; @@ -1172,79 +1216,9 @@ App::$strings["Love/Romance"] = "Vida sentimental o amorosa"; App::$strings["School/Education"] = "Estudios"; App::$strings["Contact information and social networks"] = "Información de contacto y redes sociales"; App::$strings["My other channels"] = "Mis otros canales"; +App::$strings["Communications"] = "Comunicaciones"; App::$strings["Profile Image"] = "Imagen del perfil"; App::$strings["Edit Profiles"] = "Editar perfiles"; -App::$strings["No service class restrictions found."] = "No se han encontrado restricciones sobre esta clase de servicio."; -App::$strings["network"] = "red"; -App::$strings["RSS"] = "RSS"; -App::$strings["Channel removals are not allowed within 48 hours of changing the account password."] = "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña."; -App::$strings["Remove This Channel"] = "Eliminar este canal"; -App::$strings["This channel will be completely removed from the network. "] = "Este canal va a ser completamente eliminado de la red. "; -App::$strings["Remove this channel and all its clones from the network"] = "Eliminar este canal y todos sus clones de la red"; -App::$strings["By default only the instance of the channel located on this hub will be removed from the network"] = "Por defecto, solo la instancia del canal alojado en este servidor será eliminado de la red"; -App::$strings["Remove Channel"] = "Eliminar el canal"; -App::$strings["Files: shared with me"] = "Ficheros: compartidos conmigo"; -App::$strings["NEW"] = "NUEVO"; -App::$strings["Remove all files"] = "Eliminar todos los ficheros"; -App::$strings["Remove this file"] = "Eliminar este fichero"; -App::$strings["post"] = "la entrada"; -App::$strings["comment"] = "el comentario"; -App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s ha etiquetado %3\$s de %2\$s con %4\$s"; -App::$strings["Failed to create source. No channel selected."] = "No se ha podido crear el origen de los contenidos. No ha sido seleccionado ningún canal."; -App::$strings["Source created."] = "Fuente creada."; -App::$strings["Source updated."] = "Fuente actualizada."; -App::$strings["*"] = "*"; -App::$strings["Channel Sources"] = "Orígenes de los contenidos del canal"; -App::$strings["Manage remote sources of content for your channel."] = "Gestionar contenido de origen remoto para su canal."; -App::$strings["New Source"] = "Nueva fuente"; -App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importar todo el contenido o una selección de los siguientes canales en este canal y distribuirlo de acuerdo con sus ajustes."; -App::$strings["Only import content with these words (one per line)"] = "Importar solo contenido que contenga estas palabras (una por línea)"; -App::$strings["Leave blank to import all public content"] = "Dejar en blanco para importar todo el contenido público"; -App::$strings["Channel Name"] = "Nombre del canal"; -App::$strings["Add the following categories to posts imported from this source (comma separated)"] = "Añadir los temas siguientes a las entradas importadas de esta fuente (separadas por comas)"; -App::$strings["Optional"] = "Opcional"; -App::$strings["Source not found."] = "Fuente no encontrada"; -App::$strings["Edit Source"] = "Editar fuente"; -App::$strings["Delete Source"] = "Eliminar fuente"; -App::$strings["Source removed"] = "Fuente eliminada"; -App::$strings["Unable to remove source."] = "No se puede eliminar la fuente."; -App::$strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "No hay sugerencias disponibles. Si es un sitio nuevo, espere 24 horas y pruebe de nuevo."; -App::$strings["Ignore/Hide"] = "Ignorar/Ocultar"; -App::$strings["Profile Unavailable."] = "Perfil no disponible"; -App::$strings["Not found"] = "No encontrado"; -App::$strings["Invalid channel"] = "Canal no válido"; -App::$strings["Wikis"] = "Wikis"; -App::$strings["Download"] = "Descargar"; -App::$strings["Wiki name"] = "Nombre del wiki"; -App::$strings["Content type"] = "Tipo de contenido"; -App::$strings["Create a status post for this wiki"] = "Crear un mensaje de estado para este wiki"; -App::$strings["Wiki not found"] = "Wiki no encontrado"; -App::$strings["Rename page"] = "Renombrar la página"; -App::$strings["Error retrieving page content"] = "Error al recuperar el contenido de la página"; -App::$strings["Revision Comparison"] = "Comparación de revisiones"; -App::$strings["Revert"] = "Revertir"; -App::$strings["Short description of your changes (optional)"] = "Breve descripción de sus cambios (opcional)"; -App::$strings["Source"] = "Fuente"; -App::$strings["New page name"] = "Nombre de la nueva página"; -App::$strings["Embed image from photo albums"] = "Incluir una imagen de los álbumes de fotos"; -App::$strings["Embed an image from your albums"] = "Incluir una imagen de sus álbumes"; -App::$strings["OK"] = "OK"; -App::$strings["Choose images to embed"] = "Elegir imágenes para incluir"; -App::$strings["Choose an album"] = "Elegir un álbum"; -App::$strings["Choose a different album"] = "Elegir un álbum diferente..."; -App::$strings["Error getting album list"] = "Error al obtener la lista de álbumes"; -App::$strings["Error getting photo link"] = "Error al obtener el enlace de la foto"; -App::$strings["Error getting album"] = "Error al obtener el álbum"; -App::$strings["Error creating wiki. Invalid name."] = "Error al crear el wiki: el nombre no es válido."; -App::$strings["Wiki created, but error creating Home page."] = "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio."; -App::$strings["Error creating wiki"] = "Error al crear el wiki"; -App::$strings["Wiki delete permission denied."] = "Se ha denegado el permiso para eliminar el wiki."; -App::$strings["Error deleting wiki"] = "Se ha producido un error al eliminar el wiki"; -App::$strings["New page created"] = "Se ha creado la nueva página"; -App::$strings["Cannot delete Home"] = "No se puede eliminar la página principal"; -App::$strings["Current Revision"] = "Revisión actual"; -App::$strings["Selected Revision"] = "Revisión seleccionada"; -App::$strings["You must be authenticated."] = "Debe estar autenticado."; App::$strings["Additional Features"] = "Funcionalidades"; App::$strings["Name is required"] = "El nombre es obligatorio"; App::$strings["Key and Secret are required"] = "\"Key\" y \"Secret\" son obligatorios"; @@ -1368,6 +1342,25 @@ App::$strings["Personal menu to display in your channel pages"] = "Menú persona App::$strings["Remove this channel."] = "Eliminar este canal."; App::$strings["Firefox Share \$Projectname provider"] = "Servicio de compartición de Firefox: proveedor \$Projectname"; App::$strings["Start calendar week on monday"] = "Comenzar el calendario semanal por el lunes"; +App::$strings["Affinity Slider settings updated."] = "Se han actualizado los ajustes del controlador de afinidad."; +App::$strings["No feature settings configured"] = "No se ha establecido la configuración de los complementos"; +App::$strings["Default maximum affinity level"] = "Nivel máximo de afinidad por defecto"; +App::$strings["Default minimum affinity level"] = "Nivel mínimo de afinidad por defecto"; +App::$strings["Affinity Slider Settings"] = "Ajustes del controlador de afinidad"; +App::$strings["Feature/Addon Settings"] = "Ajustes de los complementos"; +App::$strings["Permission category saved."] = "Se ha guardado la categoría del permiso."; +App::$strings["Use this form to create permission rules for various classes of people or connections."] = "Utilice este formulario para crear reglas de permiso para varias clases de personas o conexiones."; +App::$strings["Permission Categories"] = "Categorías de autorización"; +App::$strings["Permission Name"] = "Nombre de la autorización"; +App::$strings["This channel is limited to %d tokens"] = "Este canal tiene un límite de %d tokens"; +App::$strings["Name and Password are required."] = "Se requiere el nombre y la contraseña."; +App::$strings["Token saved."] = "Token salvado."; +App::$strings["Use this form to create temporary access identifiers to share things with non-members. These identities may be used in Access Control Lists and visitors may login using these credentials to access private content."] = "Utilice este formulario para crear identificadores de acceso temporal para compartir cosas con los no miembros de Hubzilla. Estas identidades se pueden usar en las Listas de control de acceso (ACL) y así los visitantes pueden iniciar sesión, utilizando estas credenciales, para acceder a su contenido privado."; +App::$strings["You may also provide <em>dropbox</em> style access links to friends and associates by adding the Login Password to any specific site URL as shown. Examples:"] = "También puede proporcionar, con el estilo <em>dropbox</em>, enlaces de acceso a sus amigos y asociados añadiendo la contraseña de inicio de sesión a cualquier dirección URL, como se muestra. Ejemplos: "; +App::$strings["Guest Access Tokens"] = "Tokens de acceso para invitados"; +App::$strings["Login Name"] = "Nombre de inicio de sesión"; +App::$strings["Login Password"] = "Contraseña de inicio de sesión"; +App::$strings["Expires (yyyy-mm-dd)"] = "Expira (aaaa-mm-dd)"; App::$strings["No special theme for mobile devices"] = "Sin tema especial para dispositivos móviles"; App::$strings["%s - (Experimental)"] = "%s - (Experimental)"; App::$strings["Display Settings"] = "Ajustes de visualización"; @@ -1395,25 +1388,6 @@ App::$strings["Use blog/list mode on grid page"] = "Mostrar mi red en modo blog" App::$strings["Channel page max height of content (in pixels)"] = "Altura máxima del contenido de la página del canal (en píxeles)"; App::$strings["click to expand content exceeding this height"] = "Pulsar para expandir el contenido que exceda de esta altura"; App::$strings["Grid page max height of content (in pixels)"] = "Altura máxima del contenido de mi red (en píxeles)"; -App::$strings["Affinity Slider settings updated."] = "Se han actualizado los ajustes del controlador de afinidad."; -App::$strings["No feature settings configured"] = "No se ha establecido la configuración de los complementos"; -App::$strings["Default maximum affinity level"] = "Nivel máximo de afinidad por defecto"; -App::$strings["Default minimum affinity level"] = "Nivel mínimo de afinidad por defecto"; -App::$strings["Affinity Slider Settings"] = "Ajustes del controlador de afinidad"; -App::$strings["Feature/Addon Settings"] = "Ajustes de los complementos"; -App::$strings["Permission category saved."] = "Se ha guardado la categoría del permiso."; -App::$strings["Use this form to create permission rules for various classes of people or connections."] = "Utilice este formulario para crear reglas de permiso para varias clases de personas o conexiones."; -App::$strings["Permission Categories"] = "Categorías de autorización"; -App::$strings["Permission Name"] = "Nombre de la autorización"; -App::$strings["This channel is limited to %d tokens"] = "Este canal tiene un límite de %d tokens"; -App::$strings["Name and Password are required."] = "Se requiere el nombre y la contraseña."; -App::$strings["Token saved."] = "Token salvado."; -App::$strings["Use this form to create temporary access identifiers to share things with non-members. These identities may be used in Access Control Lists and visitors may login using these credentials to access private content."] = "Utilice este formulario para crear identificadores de acceso temporal para compartir cosas con los no miembros de Hubzilla. Estas identidades se pueden usar en las Listas de control de acceso (ACL) y así los visitantes pueden iniciar sesión, utilizando estas credenciales, para acceder a su contenido privado."; -App::$strings["You may also provide <em>dropbox</em> style access links to friends and associates by adding the Login Password to any specific site URL as shown. Examples:"] = "También puede proporcionar, con el estilo <em>dropbox</em>, enlaces de acceso a sus amigos y asociados añadiendo la contraseña de inicio de sesión a cualquier dirección URL, como se muestra. Ejemplos: "; -App::$strings["Guest Access Tokens"] = "Tokens de acceso para invitados"; -App::$strings["Login Name"] = "Nombre de inicio de sesión"; -App::$strings["Login Password"] = "Contraseña de inicio de sesión"; -App::$strings["Expires (yyyy-mm-dd)"] = "Expira (aaaa-mm-dd)"; App::$strings["Tag removed"] = "Etiqueta eliminada."; App::$strings["Remove Item Tag"] = "Eliminar etiqueta del elemento."; App::$strings["Select a tag to remove: "] = "Seleccionar una etiqueta para eliminar:"; @@ -1522,7 +1496,41 @@ App::$strings["IMPORTANT: You will need to [manually] setup a scheduled task for App::$strings["No connections."] = "Sin conexiones."; App::$strings["Visit %s's profile [%s]"] = "Visitar el perfil de %s [%s]"; App::$strings["View Connections"] = "Ver conexiones"; -App::$strings["Source of Item"] = "Origen del elemento"; +App::$strings["Profile Unavailable."] = "Perfil no disponible"; +App::$strings["Not found"] = "No encontrado"; +App::$strings["Invalid channel"] = "Canal no válido"; +App::$strings["Wikis"] = "Wikis"; +App::$strings["Download"] = "Descargar"; +App::$strings["Wiki name"] = "Nombre del wiki"; +App::$strings["Content type"] = "Tipo de contenido"; +App::$strings["Create a status post for this wiki"] = "Crear un mensaje de estado para este wiki"; +App::$strings["Wiki not found"] = "Wiki no encontrado"; +App::$strings["Rename page"] = "Renombrar la página"; +App::$strings["Error retrieving page content"] = "Error al recuperar el contenido de la página"; +App::$strings["Revision Comparison"] = "Comparación de revisiones"; +App::$strings["Revert"] = "Revertir"; +App::$strings["Short description of your changes (optional)"] = "Breve descripción de sus cambios (opcional)"; +App::$strings["Source"] = "Fuente"; +App::$strings["New page name"] = "Nombre de la nueva página"; +App::$strings["Embed image from photo albums"] = "Incluir una imagen de los álbumes de fotos"; +App::$strings["Embed an image from your albums"] = "Incluir una imagen de sus álbumes"; +App::$strings["OK"] = "OK"; +App::$strings["Choose images to embed"] = "Elegir imágenes para incluir"; +App::$strings["Choose an album"] = "Elegir un álbum"; +App::$strings["Choose a different album"] = "Elegir un álbum diferente..."; +App::$strings["Error getting album list"] = "Error al obtener la lista de álbumes"; +App::$strings["Error getting photo link"] = "Error al obtener el enlace de la foto"; +App::$strings["Error getting album"] = "Error al obtener el álbum"; +App::$strings["Error creating wiki. Invalid name."] = "Error al crear el wiki: el nombre no es válido."; +App::$strings["Wiki created, but error creating Home page."] = "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio."; +App::$strings["Error creating wiki"] = "Error al crear el wiki"; +App::$strings["Wiki delete permission denied."] = "Se ha denegado el permiso para eliminar el wiki."; +App::$strings["Error deleting wiki"] = "Se ha producido un error al eliminar el wiki"; +App::$strings["New page created"] = "Se ha creado la nueva página"; +App::$strings["Cannot delete Home"] = "No se puede eliminar la página principal"; +App::$strings["Current Revision"] = "Revisión actual"; +App::$strings["Selected Revision"] = "Revisión seleccionada"; +App::$strings["You must be authenticated."] = "Debe estar autenticado."; App::$strings["Room not found"] = "Sala no encontrada"; App::$strings["Leave Room"] = "Abandonar la sala"; App::$strings["Delete Room"] = "Eliminar esta sala"; @@ -2074,7 +2082,6 @@ App::$strings["Maximum count to import"] = "Límite máximo de importación"; App::$strings["0 or blank to import all available"] = "0 o en blanco para importar todos los disponibles"; App::$strings["Post to Red"] = "Enviar a Red"; App::$strings["Channel is required."] = "Se requiere un canal."; -App::$strings["Invalid channel."] = "El canal no es válido."; App::$strings["redred Settings saved."] = "Se han salvado los ajustes de redred."; App::$strings["Allow posting to another Hubzilla Channel"] = "Permitir la publicación en otro canal de Hubzilla"; App::$strings["Send public postings to Hubzilla channel by default"] = "Enviar entradas públicas al canal Hubzilla por defecto"; @@ -2380,16 +2387,63 @@ App::$strings["Registration revoked for %s"] = "Registro revocado para %s"; App::$strings["Click here to upgrade."] = "Pulse aquí para actualizar"; App::$strings["This action exceeds the limits set by your subscription plan."] = "Esta acción supera los límites establecidos por su plan de suscripción "; App::$strings["This action is not available under your subscription plan."] = "Esta acción no está disponible en su plan de suscripción."; -App::$strings["l F d, Y \\@ g:i A"] = "l d de F, Y \\@ G:i"; -App::$strings["Starts:"] = "Comienza:"; -App::$strings["Finishes:"] = "Finaliza:"; -App::$strings["This event has been added to your calendar."] = "Este evento ha sido añadido a su calendario."; -App::$strings["Not specified"] = "Sin especificar"; -App::$strings["Needs Action"] = "Necesita de una intervención"; -App::$strings["Completed"] = "Completado/a"; -App::$strings["In Process"] = "En proceso"; -App::$strings["Cancelled"] = "Cancelado/a"; App::$strings["Categories"] = "Temas"; +App::$strings["Suggestions"] = "Sugerencias"; +App::$strings["See more..."] = "Ver más..."; +App::$strings["You have %1$.0f of %2$.0f allowed connections."] = "Tiene %1$.0f de %2$.0f conexiones permitidas."; +App::$strings["Add New Connection"] = "Añadir nueva conexión"; +App::$strings["Enter channel address"] = "Dirección del canal"; +App::$strings["Examples: bob@example.com, https://example.com/barbara"] = "Ejemplos: manuel@ejemplo.com, https://ejemplo.com/carmen"; +App::$strings["Notes"] = "Notas"; +App::$strings["Remove term"] = "Eliminar término"; +App::$strings["Saved Searches"] = "Búsquedas guardadas"; +App::$strings["add"] = "añadir"; +App::$strings["Saved Folders"] = "Carpetas guardadas"; +App::$strings["Everything"] = "Todo"; +App::$strings["Archives"] = "Hemeroteca"; +App::$strings["Refresh"] = "Recargar"; +App::$strings["Account settings"] = "Configuración de la cuenta"; +App::$strings["Channel settings"] = "Configuración del canal"; +App::$strings["Additional features"] = "Funcionalidades"; +App::$strings["Feature/Addon settings"] = "Complementos"; +App::$strings["Display settings"] = "Ajustes de visualización"; +App::$strings["Manage locations"] = "Gestión de ubicaciones (clones) del canal"; +App::$strings["Export channel"] = "Exportar canal"; +App::$strings["Connected apps"] = "Aplicaciones (apps) conectadas"; +App::$strings["Permission Groups"] = "Grupos de permisos"; +App::$strings["Premium Channel Settings"] = "Configuración del canal premium"; +App::$strings["Private Mail Menu"] = "Menú de correo privado"; +App::$strings["Combined View"] = "Vista combinada"; +App::$strings["Inbox"] = "Bandeja de entrada"; +App::$strings["Outbox"] = "Bandeja de salida"; +App::$strings["New Message"] = "Nuevo mensaje"; +App::$strings["Conversations"] = "Conversaciones"; +App::$strings["Received Messages"] = "Mensajes recibidos"; +App::$strings["Sent Messages"] = "Enviar mensajes"; +App::$strings["No messages."] = "Sin mensajes."; +App::$strings["Delete conversation"] = "Eliminar conversación"; +App::$strings["Events Tools"] = "Gestión de eventos"; +App::$strings["Export Calendar"] = "Exportar el calendario"; +App::$strings["Import Calendar"] = "Importar un calendario"; +App::$strings["Chatrooms"] = "Salas de chat"; +App::$strings["Overview"] = "Resumen"; +App::$strings["Chat Members"] = "Miembros del chat"; +App::$strings["__ctx:wiki_history__ Message"] = "Mensaje"; +App::$strings["Bookmarked Chatrooms"] = "Salas de chat preferidas"; +App::$strings["Suggested Chatrooms"] = "Salas de chat sugeridas"; +App::$strings["photo/image"] = "foto/imagen"; +App::$strings["Click to show more"] = "Hacer clic para ver más"; +App::$strings["Rating Tools"] = "Valoraciones"; +App::$strings["Rate Me"] = "Valorar este canal"; +App::$strings["View Ratings"] = "Mostrar las valoraciones"; +App::$strings["Forums"] = "Foros"; +App::$strings["__ctx:widget__ Activity"] = "Actividad"; +App::$strings["Tasks"] = "Tareas"; +App::$strings["Member registrations waiting for confirmation"] = "Inscripciones de nuevos miembros pendientes de aprobación"; +App::$strings["Inspect queue"] = "Examinar la cola"; +App::$strings["DB updates"] = "Actualizaciones de la base de datos"; +App::$strings["Admin"] = "Administrador"; +App::$strings["Plugin Features"] = "Extensiones"; App::$strings["Tags"] = "Etiquetas"; App::$strings["Keywords"] = "Palabras clave"; App::$strings["have"] = "tener"; @@ -2398,6 +2452,15 @@ App::$strings["want"] = "quiero"; App::$strings["wants"] = "quiere"; App::$strings["likes"] = "gusta de"; App::$strings["dislikes"] = "no gusta de"; +App::$strings["l F d, Y \\@ g:i A"] = "l d de F, Y \\@ G:i"; +App::$strings["Starts:"] = "Comienza:"; +App::$strings["Finishes:"] = "Finaliza:"; +App::$strings["This event has been added to your calendar."] = "Este evento ha sido añadido a su calendario."; +App::$strings["Not specified"] = "Sin especificar"; +App::$strings["Needs Action"] = "Necesita de una intervención"; +App::$strings["Completed"] = "Completado/a"; +App::$strings["In Process"] = "En proceso"; +App::$strings["Cancelled"] = "Cancelado/a"; App::$strings["Birthday"] = "Cumpleaños"; App::$strings["Age: "] = "Edad:"; App::$strings["YYYY-MM-DD or MM-DD"] = "AAAA-MM-DD o MM-DD"; @@ -2509,183 +2572,10 @@ App::$strings["Click to open/close"] = "Pulsar para abrir/cerrar"; App::$strings["spoiler"] = "spoiler"; App::$strings["$1 wrote:"] = "$1 escribió:"; App::$strings["%1\$s's bookmarks"] = "Marcadores de %1\$s"; -App::$strings["prev"] = "anterior"; -App::$strings["first"] = "primera"; -App::$strings["last"] = "última"; -App::$strings["next"] = "próxima"; -App::$strings["older"] = "más antiguas"; -App::$strings["newer"] = "más recientes"; -App::$strings["No connections"] = "Sin conexiones"; -App::$strings["View all %s connections"] = "Ver todas las %s conexiones"; -App::$strings["poke"] = "un toque"; -App::$strings["poked"] = "ha dado un toque a"; -App::$strings["ping"] = "un \"ping\""; -App::$strings["pinged"] = "ha enviado un \"ping\" a"; -App::$strings["prod"] = "una incitación "; -App::$strings["prodded"] = "ha incitado a "; -App::$strings["slap"] = "una bofetada "; -App::$strings["slapped"] = "ha abofeteado a "; -App::$strings["finger"] = "un \"finger\" "; -App::$strings["fingered"] = "envió un \"finger\" a"; -App::$strings["rebuff"] = "un reproche"; -App::$strings["rebuffed"] = "ha hecho un reproche a "; -App::$strings["happy"] = "feliz "; -App::$strings["sad"] = "triste "; -App::$strings["mellow"] = "tranquilo/a"; -App::$strings["tired"] = "cansado/a "; -App::$strings["perky"] = "vivaz"; -App::$strings["angry"] = "enfadado/a"; -App::$strings["stupefied"] = "asombrado/a"; -App::$strings["puzzled"] = "perplejo/a"; -App::$strings["interested"] = "interesado/a"; -App::$strings["bitter"] = "amargado/a"; -App::$strings["cheerful"] = "alegre"; -App::$strings["alive"] = "animado/a"; -App::$strings["annoyed"] = "molesto/a"; -App::$strings["anxious"] = "ansioso/a"; -App::$strings["cranky"] = "de mal humor"; -App::$strings["disturbed"] = "perturbado/a"; -App::$strings["frustrated"] = "frustrado/a"; -App::$strings["depressed"] = "deprimido/a"; -App::$strings["motivated"] = "motivado/a"; -App::$strings["relaxed"] = "relajado/a"; -App::$strings["surprised"] = "sorprendido/a"; -App::$strings["Monday"] = "lunes"; -App::$strings["Tuesday"] = "martes"; -App::$strings["Wednesday"] = "miércoles"; -App::$strings["Thursday"] = "jueves"; -App::$strings["Friday"] = "viernes"; -App::$strings["Saturday"] = "sábado"; -App::$strings["Sunday"] = "domingo"; -App::$strings["January"] = "enero"; -App::$strings["February"] = "febrero"; -App::$strings["March"] = "marzo"; -App::$strings["April"] = "abril"; -App::$strings["May"] = "mayo"; -App::$strings["June"] = "junio"; -App::$strings["July"] = "julio"; -App::$strings["August"] = "agosto"; -App::$strings["September"] = "septiembre"; -App::$strings["October"] = "octubre"; -App::$strings["November"] = "noviembre"; -App::$strings["December"] = "diciembre"; -App::$strings["Unknown Attachment"] = "Adjunto no reconocido"; -App::$strings["unknown"] = "desconocido"; -App::$strings["remove category"] = "eliminar el tema"; -App::$strings["remove from file"] = "eliminar del fichero"; -App::$strings["Page layout"] = "Plantilla de la página"; -App::$strings["You can create your own with the layouts tool"] = "Puede crear su propia disposición gráfica con la herramienta de plantillas"; -App::$strings["Page content type"] = "Tipo de contenido de la página"; -App::$strings["activity"] = "la actividad"; -App::$strings["Design Tools"] = "Herramientas de diseño web"; -App::$strings["Pages"] = "Páginas"; -App::$strings["Import website..."] = "Importar un sitio web..."; -App::$strings["Select folder to import"] = "Seleccionar la carpeta que se va a importar"; -App::$strings["Import from a zipped folder:"] = "Importar desde una carpeta comprimida: "; -App::$strings["Import from cloud files:"] = "Importar desde los ficheros en la nube: "; -App::$strings["/cloud/channel/path/to/folder"] = "/cloud/canal/ruta/a la/carpeta"; -App::$strings["Enter path to website files"] = "Ruta a los ficheros del sitio web"; -App::$strings["Select folder"] = "Seleccionar la carpeta"; -App::$strings["Export website..."] = "Exportar un sitio web..."; -App::$strings["Export to a zip file"] = "Exportar a un fichero comprimido .zip"; -App::$strings["website.zip"] = "sitio_web.zip"; -App::$strings["Enter a name for the zip file."] = "Escriba un nombre para el fichero zip."; -App::$strings["Export to cloud files"] = "Exportar a la nube de ficheros"; -App::$strings["/path/to/export/folder"] = "/ruta/para/exportar/carpeta"; -App::$strings["Enter a path to a cloud files destination."] = "Escriba una ruta de destino a la nube de ficheros."; -App::$strings["Specify folder"] = "Especificar una carpeta"; -App::$strings["Suggestions"] = "Sugerencias"; -App::$strings["See more..."] = "Ver más..."; -App::$strings["You have %1$.0f of %2$.0f allowed connections."] = "Tiene %1$.0f de %2$.0f conexiones permitidas."; -App::$strings["Add New Connection"] = "Añadir nueva conexión"; -App::$strings["Enter channel address"] = "Dirección del canal"; -App::$strings["Examples: bob@example.com, https://example.com/barbara"] = "Ejemplos: manuel@ejemplo.com, https://ejemplo.com/carmen"; -App::$strings["Notes"] = "Notas"; -App::$strings["Remove term"] = "Eliminar término"; -App::$strings["Saved Searches"] = "Búsquedas guardadas"; -App::$strings["add"] = "añadir"; -App::$strings["Saved Folders"] = "Carpetas guardadas"; -App::$strings["Everything"] = "Todo"; -App::$strings["Archives"] = "Hemeroteca"; -App::$strings["Refresh"] = "Recargar"; -App::$strings["Account settings"] = "Configuración de la cuenta"; -App::$strings["Channel settings"] = "Configuración del canal"; -App::$strings["Additional features"] = "Funcionalidades"; -App::$strings["Feature/Addon settings"] = "Complementos"; -App::$strings["Display settings"] = "Ajustes de visualización"; -App::$strings["Manage locations"] = "Gestión de ubicaciones (clones) del canal"; -App::$strings["Export channel"] = "Exportar canal"; -App::$strings["Connected apps"] = "Aplicaciones (apps) conectadas"; -App::$strings["Permission Groups"] = "Grupos de permisos"; -App::$strings["Premium Channel Settings"] = "Configuración del canal premium"; -App::$strings["Private Mail Menu"] = "Menú de correo privado"; -App::$strings["Combined View"] = "Vista combinada"; -App::$strings["Inbox"] = "Bandeja de entrada"; -App::$strings["Outbox"] = "Bandeja de salida"; -App::$strings["New Message"] = "Nuevo mensaje"; -App::$strings["Conversations"] = "Conversaciones"; -App::$strings["Received Messages"] = "Mensajes recibidos"; -App::$strings["Sent Messages"] = "Enviar mensajes"; -App::$strings["No messages."] = "Sin mensajes."; -App::$strings["Delete conversation"] = "Eliminar conversación"; -App::$strings["Events Tools"] = "Gestión de eventos"; -App::$strings["Export Calendar"] = "Exportar el calendario"; -App::$strings["Import Calendar"] = "Importar un calendario"; -App::$strings["Chatrooms"] = "Salas de chat"; -App::$strings["Overview"] = "Resumen"; -App::$strings["Chat Members"] = "Miembros del chat"; -App::$strings["__ctx:wiki_history__ Message"] = "Mensaje"; -App::$strings["Bookmarked Chatrooms"] = "Salas de chat preferidas"; -App::$strings["Suggested Chatrooms"] = "Salas de chat sugeridas"; -App::$strings["photo/image"] = "foto/imagen"; -App::$strings["Click to show more"] = "Hacer clic para ver más"; -App::$strings["Rating Tools"] = "Valoraciones"; -App::$strings["Rate Me"] = "Valorar este canal"; -App::$strings["View Ratings"] = "Mostrar las valoraciones"; -App::$strings["Forums"] = "Foros"; -App::$strings["Tasks"] = "Tareas"; -App::$strings["Member registrations waiting for confirmation"] = "Inscripciones de nuevos miembros pendientes de aprobación"; -App::$strings["Inspect queue"] = "Examinar la cola"; -App::$strings["DB updates"] = "Actualizaciones de la base de datos"; -App::$strings["Admin"] = "Administrador"; -App::$strings["Plugin Features"] = "Extensiones"; -App::$strings["Unable to obtain identity information from database"] = "No ha sido posible obtener información sobre la identidad desde la base de datos"; -App::$strings["Empty name"] = "Nombre vacío"; -App::$strings["Name too long"] = "Nombre demasiado largo"; -App::$strings["No account identifier"] = "Ningún identificador de la cuenta"; -App::$strings["Nickname is required."] = "Se requiere un sobrenombre (alias)."; -App::$strings["Reserved nickname. Please choose another."] = "Sobrenombre en uso. Por favor, elija otro."; -App::$strings["Nickname has unsupported characters or is already being used on this site."] = "El alias contiene caracteres no admitidos o está ya en uso por otros miembros de este sitio."; -App::$strings["Unable to retrieve created identity"] = "No ha sido posible recuperar la identidad creada"; -App::$strings["Default Profile"] = "Perfil principal"; -App::$strings["Create New Profile"] = "Crear un nuevo perfil"; -App::$strings["Visible to everybody"] = "Visible para todos"; -App::$strings["Gender:"] = "Género:"; -App::$strings["Homepage:"] = "Página personal:"; -App::$strings["Online Now"] = "Ahora en línea"; -App::$strings["Like this channel"] = "Me gusta este canal"; -App::$strings["j F, Y"] = "j F Y"; -App::$strings["j F"] = "j F"; -App::$strings["Birthday:"] = "Cumpleaños:"; -App::$strings["for %1\$d %2\$s"] = "por %1\$d %2\$s"; -App::$strings["Sexual Preference:"] = "Orientación sexual:"; -App::$strings["Tags:"] = "Etiquetas:"; -App::$strings["Political Views:"] = "Posición política:"; -App::$strings["Religion:"] = "Religión:"; -App::$strings["Hobbies/Interests:"] = "Aficciones o intereses:"; -App::$strings["Likes:"] = "Me gusta:"; -App::$strings["Dislikes:"] = "No me gusta:"; -App::$strings["Contact information and Social Networks:"] = "Información de contacto y redes sociales:"; -App::$strings["My other channels:"] = "Mis otros canales:"; -App::$strings["Musical interests:"] = "Preferencias musicales:"; -App::$strings["Books, literature:"] = "Libros, literatura:"; -App::$strings["Television:"] = "Televisión:"; -App::$strings["Film/dance/culture/entertainment:"] = "Cine, danza, cultura, entretenimiento:"; -App::$strings["Love/Romance:"] = "Vida sentimental o amorosa:"; -App::$strings["Work/employment:"] = "Trabajo:"; -App::$strings["School/education:"] = "Estudios:"; -App::$strings["Like this thing"] = "Me gusta esto"; -App::$strings["User '%s' deleted"] = "El usuario '%s' ha sido eliminado"; +App::$strings["New window"] = "Nueva ventana"; +App::$strings["Open the selected location in a different window or browser tab"] = "Abrir la dirección seleccionada en una ventana o pestaña aparte"; +App::$strings["Help:"] = "Ayuda:"; +App::$strings["Not Found"] = "No encontrado"; App::$strings["New Page"] = "Nueva página"; App::$strings["%d invitation available"] = array( 0 => "%d invitación pendiente", @@ -2736,7 +2626,18 @@ App::$strings["about a year"] = "alrededor de un año"; App::$strings["%d years"] = "%d años"; App::$strings[" "] = " "; App::$strings["timeago.numbers"] = "timeago.numbers"; +App::$strings["January"] = "enero"; +App::$strings["February"] = "febrero"; +App::$strings["March"] = "marzo"; +App::$strings["April"] = "abril"; App::$strings["__ctx:long__ May"] = "mayo"; +App::$strings["June"] = "junio"; +App::$strings["July"] = "julio"; +App::$strings["August"] = "agosto"; +App::$strings["September"] = "septiembre"; +App::$strings["October"] = "octubre"; +App::$strings["November"] = "noviembre"; +App::$strings["December"] = "diciembre"; App::$strings["Jan"] = "ene"; App::$strings["Feb"] = "feb"; App::$strings["Mar"] = "mar"; @@ -2749,6 +2650,13 @@ App::$strings["Sep"] = "sep"; App::$strings["Oct"] = "oct"; App::$strings["Nov"] = "nov"; App::$strings["Dec"] = "dic"; +App::$strings["Sunday"] = "domingo"; +App::$strings["Monday"] = "lunes"; +App::$strings["Tuesday"] = "martes"; +App::$strings["Wednesday"] = "miércoles"; +App::$strings["Thursday"] = "jueves"; +App::$strings["Friday"] = "viernes"; +App::$strings["Saturday"] = "sábado"; App::$strings["Sun"] = "dom"; App::$strings["Mon"] = "lun"; App::$strings["Tue"] = "mar"; @@ -2765,8 +2673,6 @@ App::$strings["Directory Options"] = "Opciones del directorio"; App::$strings["Safe Mode"] = "Modo seguro"; App::$strings["Public Forums Only"] = "Solo foros públicos"; App::$strings["This Website Only"] = "Solo este sitio web"; -App::$strings["Attachments:"] = "Ficheros adjuntos:"; -App::$strings["\$Projectname event notification:"] = "Notificación de eventos de \$Projectname:"; App::$strings["view full size"] = "Ver en el tamaño original"; App::$strings["No Subject"] = "Sin asunto"; App::$strings["OStatus"] = "OStatus"; @@ -2779,6 +2685,7 @@ App::$strings["XMPP/IM"] = "XMPP/IM"; App::$strings["MySpace"] = "MySpace"; App::$strings["%1\$s is now connected with %2\$s"] = "%1\$s ahora está conectado/a con %2\$s"; App::$strings["%1\$s poked %2\$s"] = "%1\$s ha dado un toque a %2\$s"; +App::$strings["poked"] = "ha dado un toque a"; App::$strings["View %s's profile @ %s"] = "Ver el perfil @ %s de %s"; App::$strings["Categories:"] = "Temas:"; App::$strings["Filed under:"] = "Archivado bajo:"; @@ -2874,8 +2781,6 @@ App::$strings["Privacy Groups"] = "Grupos de canales"; App::$strings["Edit group"] = "Editar grupo"; App::$strings["Add privacy group"] = "Añadir un grupo de canales"; App::$strings["Channels not in any privacy group"] = "Sin canales en ningún grupo"; -App::$strings["Help:"] = "Ayuda:"; -App::$strings["Not Found"] = "No encontrado"; App::$strings["(Unknown)"] = "(Desconocido)"; App::$strings["Visible to anybody on the internet."] = "Visible para cualquiera en internet."; App::$strings["Visible to you only."] = "Visible sólo para usted."; @@ -2892,12 +2797,10 @@ App::$strings["profile photo"] = "foto del perfil"; App::$strings["[Edited %s]"] = "[se ha editado %s]"; App::$strings["__ctx:edit_activity__ Post"] = "Publicar"; App::$strings["__ctx:edit_activity__ Comment"] = "Comentar"; +App::$strings["Attachments:"] = "Ficheros adjuntos:"; +App::$strings["\$Projectname event notification:"] = "Notificación de eventos de \$Projectname:"; App::$strings["guest:"] = "invitado: "; App::$strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "El \"token\" de seguridad del formulario no es correcto. Esto ha ocurrido probablemente porque el formulario ha estado abierto demasiado tiempo (>3 horas) antes de ser enviado"; -App::$strings["Invalid data packet"] = "Paquete de datos no válido"; -App::$strings["Unable to verify channel signature"] = "No ha sido posible de verificar la firma del canal"; -App::$strings["Unable to verify site signature for %s"] = "No ha sido posible de verificar la firma del sitio para %s"; -App::$strings["invalid target signature"] = "La firma recibida no es válida"; App::$strings["Remote authentication"] = "Acceder desde su servidor"; App::$strings["Click to authenticate to your home hub"] = "Pulsar para identificarse en su servidor de inicio"; App::$strings["Logout"] = "Finalizar sesión"; @@ -2949,6 +2852,72 @@ App::$strings["Path not found."] = "Ruta no encontrada"; App::$strings["mkdir failed."] = "mkdir ha fallado."; App::$strings["database storage failed."] = "el almacenamiento en la base de datos ha fallado."; App::$strings["Empty path"] = "Ruta vacía"; +App::$strings["prev"] = "anterior"; +App::$strings["first"] = "primera"; +App::$strings["last"] = "última"; +App::$strings["next"] = "próxima"; +App::$strings["older"] = "más antiguas"; +App::$strings["newer"] = "más recientes"; +App::$strings["No connections"] = "Sin conexiones"; +App::$strings["View all %s connections"] = "Ver todas las %s conexiones"; +App::$strings["poke"] = "un toque"; +App::$strings["ping"] = "un \"ping\""; +App::$strings["pinged"] = "ha enviado un \"ping\" a"; +App::$strings["prod"] = "una incitación "; +App::$strings["prodded"] = "ha incitado a "; +App::$strings["slap"] = "una bofetada "; +App::$strings["slapped"] = "ha abofeteado a "; +App::$strings["finger"] = "un \"finger\" "; +App::$strings["fingered"] = "envió un \"finger\" a"; +App::$strings["rebuff"] = "un reproche"; +App::$strings["rebuffed"] = "ha hecho un reproche a "; +App::$strings["happy"] = "feliz "; +App::$strings["sad"] = "triste "; +App::$strings["mellow"] = "tranquilo/a"; +App::$strings["tired"] = "cansado/a "; +App::$strings["perky"] = "vivaz"; +App::$strings["angry"] = "enfadado/a"; +App::$strings["stupefied"] = "asombrado/a"; +App::$strings["puzzled"] = "perplejo/a"; +App::$strings["interested"] = "interesado/a"; +App::$strings["bitter"] = "amargado/a"; +App::$strings["cheerful"] = "alegre"; +App::$strings["alive"] = "animado/a"; +App::$strings["annoyed"] = "molesto/a"; +App::$strings["anxious"] = "ansioso/a"; +App::$strings["cranky"] = "de mal humor"; +App::$strings["disturbed"] = "perturbado/a"; +App::$strings["frustrated"] = "frustrado/a"; +App::$strings["depressed"] = "deprimido/a"; +App::$strings["motivated"] = "motivado/a"; +App::$strings["relaxed"] = "relajado/a"; +App::$strings["surprised"] = "sorprendido/a"; +App::$strings["May"] = "mayo"; +App::$strings["Unknown Attachment"] = "Adjunto no reconocido"; +App::$strings["unknown"] = "desconocido"; +App::$strings["remove category"] = "eliminar el tema"; +App::$strings["remove from file"] = "eliminar del fichero"; +App::$strings["Page layout"] = "Plantilla de la página"; +App::$strings["You can create your own with the layouts tool"] = "Puede crear su propia disposición gráfica con la herramienta de plantillas"; +App::$strings["Page content type"] = "Tipo de contenido de la página"; +App::$strings["activity"] = "la actividad"; +App::$strings["Design Tools"] = "Herramientas de diseño web"; +App::$strings["Pages"] = "Páginas"; +App::$strings["Import website..."] = "Importar un sitio web..."; +App::$strings["Select folder to import"] = "Seleccionar la carpeta que se va a importar"; +App::$strings["Import from a zipped folder:"] = "Importar desde una carpeta comprimida: "; +App::$strings["Import from cloud files:"] = "Importar desde los ficheros en la nube: "; +App::$strings["/cloud/channel/path/to/folder"] = "/cloud/canal/ruta/a la/carpeta"; +App::$strings["Enter path to website files"] = "Ruta a los ficheros del sitio web"; +App::$strings["Select folder"] = "Seleccionar la carpeta"; +App::$strings["Export website..."] = "Exportar un sitio web..."; +App::$strings["Export to a zip file"] = "Exportar a un fichero comprimido .zip"; +App::$strings["website.zip"] = "sitio_web.zip"; +App::$strings["Enter a name for the zip file."] = "Escriba un nombre para el fichero zip."; +App::$strings["Export to cloud files"] = "Exportar a la nube de ficheros"; +App::$strings["/path/to/export/folder"] = "/ruta/para/exportar/carpeta"; +App::$strings["Enter a path to a cloud files destination."] = "Escriba una ruta de destino a la nube de ficheros."; +App::$strings["Specify folder"] = "Especificar una carpeta"; App::$strings["Logged out."] = "Desconectado/a."; App::$strings["Failed authentication"] = "Autenticación fallida."; App::$strings["Channel is blocked on this site."] = "El canal está bloqueado en este sitio."; @@ -2970,6 +2939,10 @@ App::$strings[" by "] = "por"; App::$strings[" on "] = "en"; App::$strings["Embedded content"] = "Contenido incorporado"; App::$strings["Embedding disabled"] = "Incrustación deshabilitada"; +App::$strings["Invalid data packet"] = "Paquete de datos no válido"; +App::$strings["Unable to verify channel signature"] = "No ha sido posible de verificar la firma del canal"; +App::$strings["Unable to verify site signature for %s"] = "No ha sido posible de verificar la firma del sitio para %s"; +App::$strings["invalid target signature"] = "La firma recibida no es válida"; App::$strings["Can view my normal stream and posts"] = "Pueden verse mi actividad y publicaciones normales"; App::$strings["Can view my webpages"] = "Pueden verse mis páginas web"; App::$strings["Can post on my channel page (\"wall\")"] = "Pueden crearse entradas en mi página de inicio del canal (“muro”)"; @@ -2988,8 +2961,6 @@ App::$strings["public profile"] = "el perfil público"; App::$strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$s ha cambiado %2\$s a “%3\$s”"; App::$strings["Visit %1\$s's %2\$s"] = "Visitar %2\$s de %1\$s"; App::$strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s ha actualizado %2\$s, cambiando %3\$s."; -App::$strings["New window"] = "Nueva ventana"; -App::$strings["Open the selected location in a different window or browser tab"] = "Abrir la dirección seleccionada en una ventana o pestaña aparte"; App::$strings["General Features"] = "Funcionalidades básicas"; App::$strings["Multiple Profiles"] = "Múltiples perfiles"; App::$strings["Ability to create multiple profiles"] = "Capacidad de crear múltiples perfiles"; @@ -3069,6 +3040,43 @@ App::$strings["Photo storage failed."] = "La foto no ha podido ser guardada."; App::$strings["a new photo"] = "una nueva foto"; App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s ha publicado %2\$s en %3\$s"; App::$strings["Upload New Photos"] = "Subir nuevas fotos"; +App::$strings["Unable to obtain identity information from database"] = "No ha sido posible obtener información sobre la identidad desde la base de datos"; +App::$strings["Empty name"] = "Nombre vacío"; +App::$strings["Name too long"] = "Nombre demasiado largo"; +App::$strings["No account identifier"] = "Ningún identificador de la cuenta"; +App::$strings["Nickname is required."] = "Se requiere un sobrenombre (alias)."; +App::$strings["Reserved nickname. Please choose another."] = "Sobrenombre en uso. Por favor, elija otro."; +App::$strings["Nickname has unsupported characters or is already being used on this site."] = "El alias contiene caracteres no admitidos o está ya en uso por otros miembros de este sitio."; +App::$strings["Unable to retrieve created identity"] = "No ha sido posible recuperar la identidad creada"; +App::$strings["Default Profile"] = "Perfil principal"; +App::$strings["Create New Profile"] = "Crear un nuevo perfil"; +App::$strings["Visible to everybody"] = "Visible para todos"; +App::$strings["Gender:"] = "Género:"; +App::$strings["Homepage:"] = "Página personal:"; +App::$strings["Online Now"] = "Ahora en línea"; +App::$strings["Like this channel"] = "Me gusta este canal"; +App::$strings["j F, Y"] = "j F Y"; +App::$strings["j F"] = "j F"; +App::$strings["Birthday:"] = "Cumpleaños:"; +App::$strings["for %1\$d %2\$s"] = "por %1\$d %2\$s"; +App::$strings["Sexual Preference:"] = "Orientación sexual:"; +App::$strings["Tags:"] = "Etiquetas:"; +App::$strings["Political Views:"] = "Posición política:"; +App::$strings["Religion:"] = "Religión:"; +App::$strings["Hobbies/Interests:"] = "Aficciones o intereses:"; +App::$strings["Likes:"] = "Me gusta:"; +App::$strings["Dislikes:"] = "No me gusta:"; +App::$strings["Contact information and Social Networks:"] = "Información de contacto y redes sociales:"; +App::$strings["My other channels:"] = "Mis otros canales:"; +App::$strings["Musical interests:"] = "Preferencias musicales:"; +App::$strings["Books, literature:"] = "Libros, literatura:"; +App::$strings["Television:"] = "Televisión:"; +App::$strings["Film/dance/culture/entertainment:"] = "Cine, danza, cultura, entretenimiento:"; +App::$strings["Love/Romance:"] = "Vida sentimental o amorosa:"; +App::$strings["Work/employment:"] = "Trabajo:"; +App::$strings["School/education:"] = "Estudios:"; +App::$strings["Like this thing"] = "Me gusta esto"; +App::$strings["User '%s' deleted"] = "El usuario '%s' ha sido eliminado"; App::$strings["Source channel not found."] = "No se ha encontrado el canal de origen."; App::$strings["Focus (Hubzilla default)"] = "Focus (predefinido)"; App::$strings["Theme settings"] = "Ajustes del tema"; |