diff options
218 files changed, 24290 insertions, 42794 deletions
diff --git a/.gitignore b/.gitignore index d98c0efc3..b4853806c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/messages.mo *~ *.DS_Store #* diff --git a/.htaccess b/.htaccess new file mode 100644 index 000000000..22b33f000 --- /dev/null +++ b/.htaccess @@ -0,0 +1,3 @@ +AddType image/svg+xml svg +AddType image/svg+xml svgz + diff --git a/api/index.php b/api/index.php index 53b78b010..facdf82c5 100644 --- a/api/index.php +++ b/api/index.php @@ -13,6 +13,7 @@ define('TTRSS_SESSION_NAME', 'ttrss_api_sid'); define('NO_SESSION_AUTOSTART', true); + require_once "autoload.php"; require_once "db.php"; require_once "db-prefs.php"; require_once "functions.php"; @@ -30,8 +31,6 @@ ob_start(); } - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - $input = file_get_contents("php://input"); if (defined('_API_DEBUG_HTTP_ENABLED') && _API_DEBUG_HTTP_ENABLED) { @@ -54,11 +53,11 @@ @session_start(); } - if (!init_connection($link)) return; + if (!init_plugins()) return; $method = strtolower($_REQUEST["op"]); - $handler = new API($link, $_REQUEST); + $handler = new API($_REQUEST); if ($handler->before($method)) { if ($method && method_exists($handler, $method)) { @@ -69,8 +68,6 @@ $handler->after(); } - db_close($link); - header("Api-Content-Length: " . ob_get_length()); ob_end_flush(); diff --git a/backend.php b/backend.php index 9eb3989e4..84abc9730 100644 --- a/backend.php +++ b/backend.php @@ -37,6 +37,7 @@ @$csrf_token = $_REQUEST['csrf_token']; + require_once "autoload.php"; require_once "sessions.php"; require_once "functions.php"; require_once "config.php"; @@ -47,9 +48,7 @@ $script_started = microtime(true); - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!init_connection($link)) return; + if (!init_plugins()) return; header("Content-Type: text/json; charset=utf-8"); @@ -58,11 +57,16 @@ } if (SINGLE_USER_MODE) { - authenticate_user($link, "admin", null); + authenticate_user( "admin", null); } if ($_SESSION["uid"]) { - load_user_plugins($link, $_SESSION["uid"]); + if (!validate_session()) { + header("Content-Type: text/json"); + print json_encode(array("error" => array("code" => 6))); + return; + } + load_user_plugins( $_SESSION["uid"]); } $purge_intervals = array( @@ -100,7 +104,7 @@ 5 => __("Power User"), 10 => __("Administrator")); - #$error = sanity_check($link); + #$error = sanity_check(); #if ($error['code'] != 0 && $op != "logout") { # print json_encode(array("error" => $error)); @@ -109,15 +113,14 @@ $op = str_replace("-", "_", $op); - global $pluginhost; - $override = $pluginhost->lookup_handler($op, $method); + $override = PluginHost::getInstance()->lookup_handler($op, $method); if (class_exists($op) || $override) { if ($override) { $handler = $override; } else { - $handler = new $op($link, $_REQUEST); + $handler = new $op($_REQUEST); } if ($handler && implements_interface($handler, 'IHandler')) { @@ -148,6 +151,4 @@ header("Content-Type: text/json"); print json_encode(array("error" => array("code" => 7))); - // We close the connection to database. - db_close($link); ?> diff --git a/plugins/example_article/init.js b/cache/upload/.empty index e69de29bb..e69de29bb 100644 --- a/plugins/example_article/init.js +++ b/cache/upload/.empty @@ -60,6 +60,7 @@ div.cdmContentInner { div.cdmContentInner img { border-width : 0px; max-width : 98%; + height : auto; } div.cdmFooter { diff --git a/classes/.htaccess b/classes/.htaccess new file mode 100644 index 000000000..93169e4eb --- /dev/null +++ b/classes/.htaccess @@ -0,0 +1,2 @@ +Order deny,allow +Deny from all diff --git a/classes/api.php b/classes/api.php index 4427834eb..f5e4a0c5c 100644 --- a/classes/api.php +++ b/classes/api.php @@ -2,7 +2,7 @@ class API extends Handler { - const API_LEVEL = 5; + const API_LEVEL = 6; const STATUS_OK = 0; const STATUS_ERR = 1; @@ -14,12 +14,12 @@ class API extends Handler { header("Content-Type: text/json"); if (!$_SESSION["uid"] && $method != "login" && $method != "isloggedin") { - print $this->wrap(self::STATUS_ERR, array("error" => 'NOT_LOGGED_IN')); + $this->wrap(self::STATUS_ERR, array("error" => 'NOT_LOGGED_IN')); return false; } - if ($_SESSION["uid"] && $method != "logout" && !get_pref($this->link, 'ENABLE_API_ACCESS')) { - print $this->wrap(self::STATUS_ERR, array("error" => 'API_DISABLED')); + if ($_SESSION["uid"] && $method != "logout" && !get_pref('ENABLE_API_ACCESS')) { + $this->wrap(self::STATUS_ERR, array("error" => 'API_DISABLED')); return false; } @@ -38,88 +38,88 @@ class API extends Handler { function getVersion() { $rv = array("version" => VERSION); - print $this->wrap(self::STATUS_OK, $rv); + $this->wrap(self::STATUS_OK, $rv); } function getApiLevel() { $rv = array("level" => self::API_LEVEL); - print $this->wrap(self::STATUS_OK, $rv); + $this->wrap(self::STATUS_OK, $rv); } function login() { @session_destroy(); @session_start(); - $login = db_escape_string($this->link, $_REQUEST["user"]); + $login = $this->dbh->escape_string($_REQUEST["user"]); $password = $_REQUEST["password"]; $password_base64 = base64_decode($_REQUEST["password"]); if (SINGLE_USER_MODE) $login = "admin"; - $result = db_query($this->link, "SELECT id FROM ttrss_users WHERE login = '$login'"); + $result = $this->dbh->query("SELECT id FROM ttrss_users WHERE login = '$login'"); - if (db_num_rows($result) != 0) { - $uid = db_fetch_result($result, 0, "id"); + if ($this->dbh->num_rows($result) != 0) { + $uid = $this->dbh->fetch_result($result, 0, "id"); } else { $uid = 0; } if (!$uid) { - print $this->wrap(self::STATUS_ERR, array("error" => "LOGIN_ERROR")); + $this->wrap(self::STATUS_ERR, array("error" => "LOGIN_ERROR")); return; } - if (get_pref($this->link, "ENABLE_API_ACCESS", $uid)) { - if (authenticate_user($this->link, $login, $password)) { // try login with normal password - print $this->wrap(self::STATUS_OK, array("session_id" => session_id(), + if (get_pref("ENABLE_API_ACCESS", $uid)) { + if (authenticate_user($login, $password)) { // try login with normal password + $this->wrap(self::STATUS_OK, array("session_id" => session_id(), "api_level" => self::API_LEVEL)); - } else if (authenticate_user($this->link, $login, $password_base64)) { // else try with base64_decoded password - print $this->wrap(self::STATUS_OK, array("session_id" => session_id(), + } else if (authenticate_user($login, $password_base64)) { // else try with base64_decoded password + $this->wrap(self::STATUS_OK, array("session_id" => session_id(), "api_level" => self::API_LEVEL)); } else { // else we are not logged in - print $this->wrap(self::STATUS_ERR, array("error" => "LOGIN_ERROR")); + $this->wrap(self::STATUS_ERR, array("error" => "LOGIN_ERROR")); } } else { - print $this->wrap(self::STATUS_ERR, array("error" => "API_DISABLED")); + $this->wrap(self::STATUS_ERR, array("error" => "API_DISABLED")); } } function logout() { logout_user(); - print $this->wrap(self::STATUS_OK, array("status" => "OK")); + $this->wrap(self::STATUS_OK, array("status" => "OK")); } function isLoggedIn() { - print $this->wrap(self::STATUS_OK, array("status" => $_SESSION["uid"] != '')); + $this->wrap(self::STATUS_OK, array("status" => $_SESSION["uid"] != '')); } function getUnread() { - $feed_id = db_escape_string($this->link, $_REQUEST["feed_id"]); - $is_cat = db_escape_string($this->link, $_REQUEST["is_cat"]); + $feed_id = $this->dbh->escape_string($_REQUEST["feed_id"]); + $is_cat = $this->dbh->escape_string($_REQUEST["is_cat"]); if ($feed_id) { - print $this->wrap(self::STATUS_OK, array("unread" => getFeedUnread($this->link, $feed_id, $is_cat))); + $this->wrap(self::STATUS_OK, array("unread" => getFeedUnread($feed_id, $is_cat))); } else { - print $this->wrap(self::STATUS_OK, array("unread" => getGlobalUnread($this->link))); + $this->wrap(self::STATUS_OK, array("unread" => getGlobalUnread())); } } /* Method added for ttrss-reader for Android */ function getCounters() { - print $this->wrap(self::STATUS_OK, getAllCounters($this->link)); + $this->wrap(self::STATUS_OK, getAllCounters()); } function getFeeds() { - $cat_id = db_escape_string($this->link, $_REQUEST["cat_id"]); + $cat_id = $this->dbh->escape_string($_REQUEST["cat_id"]); $unread_only = sql_bool_to_bool($_REQUEST["unread_only"]); - $limit = (int) db_escape_string($this->link, $_REQUEST["limit"]); - $offset = (int) db_escape_string($this->link, $_REQUEST["offset"]); + $limit = (int) $this->dbh->escape_string($_REQUEST["limit"]); + $offset = (int) $this->dbh->escape_string($_REQUEST["offset"]); $include_nested = sql_bool_to_bool($_REQUEST["include_nested"]); - $feeds = $this->api_get_feeds($this->link, $cat_id, $unread_only, $limit, $offset, $include_nested); + $feeds = $this->api_get_feeds($cat_id, $unread_only, $limit, $offset, $include_nested); - print $this->wrap(self::STATUS_OK, $feeds); + $this->wrap(self::STATUS_OK, $feeds); } function getCategories() { @@ -134,7 +134,7 @@ class API extends Handler { else $nested_qpart = "true"; - $result = db_query($this->link, "SELECT + $result = $this->dbh->query("SELECT id, title, order_id, (SELECT COUNT(id) FROM ttrss_feeds WHERE ttrss_feed_categories.id IS NOT NULL AND cat_id = ttrss_feed_categories.id) AS num_feeds, @@ -147,12 +147,12 @@ class API extends Handler { $cats = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { if ($include_empty || $line["num_feeds"] > 0 || $line["num_cats"] > 0) { - $unread = getFeedUnread($this->link, $line["id"], true); + $unread = getFeedUnread($line["id"], true); if ($enable_nested) - $unread += getCategoryChildrenUnread($this->link, $line["id"]); + $unread += getCategoryChildrenUnread($line["id"]); if ($unread || !$unread_only) { array_push($cats, array("id" => $line["id"], @@ -166,36 +166,36 @@ class API extends Handler { foreach (array(-2,-1,0) as $cat_id) { if ($include_empty || !$this->isCategoryEmpty($cat_id)) { - $unread = getFeedUnread($this->link, $cat_id, true); + $unread = getFeedUnread($cat_id, true); if ($unread || !$unread_only) { array_push($cats, array("id" => $cat_id, - "title" => getCategoryTitle($this->link, $cat_id), + "title" => getCategoryTitle($cat_id), "unread" => $unread)); } } } - print $this->wrap(self::STATUS_OK, $cats); + $this->wrap(self::STATUS_OK, $cats); } function getHeadlines() { - $feed_id = db_escape_string($this->link, $_REQUEST["feed_id"]); + $feed_id = $this->dbh->escape_string($_REQUEST["feed_id"]); if ($feed_id != "") { - $limit = (int)db_escape_string($this->link, $_REQUEST["limit"]); + $limit = (int)$this->dbh->escape_string($_REQUEST["limit"]); - if (!$limit || $limit >= 60) $limit = 60; + if (!$limit || $limit >= 200) $limit = 200; - $offset = (int)db_escape_string($this->link, $_REQUEST["skip"]); - $filter = db_escape_string($this->link, $_REQUEST["filter"]); + $offset = (int)$this->dbh->escape_string($_REQUEST["skip"]); + $filter = $this->dbh->escape_string($_REQUEST["filter"]); $is_cat = sql_bool_to_bool($_REQUEST["is_cat"]); $show_excerpt = sql_bool_to_bool($_REQUEST["show_excerpt"]); $show_content = sql_bool_to_bool($_REQUEST["show_content"]); /* all_articles, unread, adaptive, marked, updated */ - $view_mode = db_escape_string($this->link, $_REQUEST["view_mode"]); + $view_mode = $this->dbh->escape_string($_REQUEST["view_mode"]); $include_attachments = sql_bool_to_bool($_REQUEST["include_attachments"]); - $since_id = (int)db_escape_string($this->link, $_REQUEST["since_id"]); + $since_id = (int)$this->dbh->escape_string($_REQUEST["since_id"]); $include_nested = sql_bool_to_bool($_REQUEST["include_nested"]); $sanitize_content = true; @@ -211,25 +211,25 @@ class API extends Handler { /* do not rely on params below */ - $search = db_escape_string($this->link, $_REQUEST["search"]); - $search_mode = db_escape_string($this->link, $_REQUEST["search_mode"]); + $search = $this->dbh->escape_string($_REQUEST["search"]); + $search_mode = $this->dbh->escape_string($_REQUEST["search_mode"]); - $headlines = $this->api_get_headlines($this->link, $feed_id, $limit, $offset, + $headlines = $this->api_get_headlines($feed_id, $limit, $offset, $filter, $is_cat, $show_excerpt, $show_content, $view_mode, $override_order, $include_attachments, $since_id, $search, $search_mode, $include_nested, $sanitize_content); - print $this->wrap(self::STATUS_OK, $headlines); + $this->wrap(self::STATUS_OK, $headlines); } else { - print $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE')); + $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE')); } } function updateArticle() { - $article_ids = array_filter(explode(",", db_escape_string($this->link, $_REQUEST["article_ids"])), is_numeric); - $mode = (int) db_escape_string($this->link, $_REQUEST["mode"]); - $data = db_escape_string($this->link, $_REQUEST["data"]); - $field_raw = (int)db_escape_string($this->link, $_REQUEST["field"]); + $article_ids = array_filter(explode(",", $this->dbh->escape_string($_REQUEST["article_ids"])), is_numeric); + $mode = (int) $this->dbh->escape_string($_REQUEST["mode"]); + $data = $this->dbh->escape_string($_REQUEST["data"]); + $field_raw = (int)$this->dbh->escape_string($_REQUEST["field"]); $field = ""; $set_to = ""; @@ -269,16 +269,16 @@ class API extends Handler { $article_ids = join(", ", $article_ids); - $result = db_query($this->link, "UPDATE ttrss_user_entries SET $field = $set_to $additional_fields WHERE ref_id IN ($article_ids) AND owner_uid = " . $_SESSION["uid"]); + $result = $this->dbh->query("UPDATE ttrss_user_entries SET $field = $set_to $additional_fields WHERE ref_id IN ($article_ids) AND owner_uid = " . $_SESSION["uid"]); - $num_updated = db_affected_rows($this->link, $result); + $num_updated = $this->dbh->affected_rows($result); if ($num_updated > 0 && $field == "unread") { - $result = db_query($this->link, "SELECT DISTINCT feed_id FROM ttrss_user_entries + $result = $this->dbh->query("SELECT DISTINCT feed_id FROM ttrss_user_entries WHERE ref_id IN ($article_ids)"); - while ($line = db_fetch_assoc($result)) { - ccache_update($this->link, $line["feed_id"], $_SESSION["uid"]); + while ($line = $this->dbh->fetch_assoc($result)) { + ccache_update($line["feed_id"], $_SESSION["uid"]); } } @@ -286,49 +286,49 @@ class API extends Handler { if (PUBSUBHUBBUB_HUB) { $rss_link = get_self_url_prefix() . "/public.php?op=rss&id=-2&key=" . - get_feed_access_key($this->link, -2, false); + get_feed_access_key(-2, false); $p = new Publisher(PUBSUBHUBBUB_HUB); $pubsub_result = $p->publish_update($rss_link); } } - print $this->wrap(self::STATUS_OK, array("status" => "OK", + $this->wrap(self::STATUS_OK, array("status" => "OK", "updated" => $num_updated)); } else { - print $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE')); + $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE')); } } function getArticle() { - $article_id = join(",", array_filter(explode(",", db_escape_string($this->link, $_REQUEST["article_id"])), is_numeric)); + $article_id = join(",", array_filter(explode(",", $this->dbh->escape_string($_REQUEST["article_id"])), is_numeric)); $query = "SELECT id,title,link,content,cached_content,feed_id,comments,int_id, - marked,unread,published, + marked,unread,published,score, ".SUBSTRING_FOR_DATE."(updated,1,16) as updated, - author + author,(SELECT title FROM ttrss_feeds WHERE id = feed_id) AS feed_title FROM ttrss_entries,ttrss_user_entries WHERE id IN ($article_id) AND ref_id = id AND owner_uid = " . $_SESSION["uid"] ; - $result = db_query($this->link, $query); + $result = $this->dbh->query($query); $articles = array(); - if (db_num_rows($result) != 0) { + if ($this->dbh->num_rows($result) != 0) { - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { - $attachments = get_article_enclosures($this->link, $line['id']); + $attachments = get_article_enclosures($line['id']); $article = array( "id" => $line["id"], "title" => $line["title"], "link" => $line["link"], - "labels" => get_article_labels($this->link, $line['id']), + "labels" => get_article_labels($line['id']), "unread" => sql_bool_to_bool($line["unread"]), "marked" => sql_bool_to_bool($line["marked"]), "published" => sql_bool_to_bool($line["published"]), @@ -337,11 +337,12 @@ class API extends Handler { "updated" => (int) strtotime($line["updated"]), "content" => $line["cached_content"] != "" ? $line["cached_content"] : $line["content"], "feed_id" => $line["feed_id"], - "attachments" => $attachments + "attachments" => $attachments, + "score" => (int)$line["score"], + "feed_title" => $line["feed_title"] ); - global $pluginhost; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE_API) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_API) as $p) { $article = $p->hook_render_article_api(array("article" => $article)); } @@ -351,7 +352,7 @@ class API extends Handler { } } - print $this->wrap(self::STATUS_OK, $articles); + $this->wrap(self::STATUS_OK, $articles); } @@ -362,58 +363,58 @@ class API extends Handler { $config["daemon_is_running"] = file_is_locked("update_daemon.lock"); - $result = db_query($this->link, "SELECT COUNT(*) AS cf FROM + $result = $this->dbh->query("SELECT COUNT(*) AS cf FROM ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]); - $num_feeds = db_fetch_result($result, 0, "cf"); + $num_feeds = $this->dbh->fetch_result($result, 0, "cf"); $config["num_feeds"] = (int)$num_feeds; - print $this->wrap(self::STATUS_OK, $config); + $this->wrap(self::STATUS_OK, $config); } function updateFeed() { require_once "include/rssfuncs.php"; - $feed_id = (int) db_escape_string($this->link, $_REQUEST["feed_id"]); + $feed_id = (int) $this->dbh->escape_string($_REQUEST["feed_id"]); - update_rss_feed($this->link, $feed_id, true); + update_rss_feed($feed_id, true); - print $this->wrap(self::STATUS_OK, array("status" => "OK")); + $this->wrap(self::STATUS_OK, array("status" => "OK")); } function catchupFeed() { - $feed_id = db_escape_string($this->link, $_REQUEST["feed_id"]); - $is_cat = db_escape_string($this->link, $_REQUEST["is_cat"]); + $feed_id = $this->dbh->escape_string($_REQUEST["feed_id"]); + $is_cat = $this->dbh->escape_string($_REQUEST["is_cat"]); - catchup_feed($this->link, $feed_id, $is_cat); + catchup_feed($feed_id, $is_cat); - print $this->wrap(self::STATUS_OK, array("status" => "OK")); + $this->wrap(self::STATUS_OK, array("status" => "OK")); } function getPref() { - $pref_name = db_escape_string($this->link, $_REQUEST["pref_name"]); + $pref_name = $this->dbh->escape_string($_REQUEST["pref_name"]); - print $this->wrap(self::STATUS_OK, array("value" => get_pref($this->link, $pref_name))); + $this->wrap(self::STATUS_OK, array("value" => get_pref($pref_name))); } function getLabels() { - //$article_ids = array_filter(explode(",", db_escape_string($this->link, $_REQUEST["article_ids"])), is_numeric); + //$article_ids = array_filter(explode(",", $this->dbh->escape_string($_REQUEST["article_ids"])), is_numeric); $article_id = (int)$_REQUEST['article_id']; $rv = array(); - $result = db_query($this->link, "SELECT id, caption, fg_color, bg_color + $result = $this->dbh->query("SELECT id, caption, fg_color, bg_color FROM ttrss_labels2 WHERE owner_uid = '".$_SESSION['uid']."' ORDER BY caption"); if ($article_id) - $article_labels = get_article_labels($this->link, $article_id); + $article_labels = get_article_labels($article_id); else $article_labels = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $checked = false; foreach ($article_labels as $al) { @@ -431,16 +432,16 @@ class API extends Handler { "checked" => $checked)); } - print $this->wrap(self::STATUS_OK, $rv); + $this->wrap(self::STATUS_OK, $rv); } function setArticleLabel() { - $article_ids = array_filter(explode(",", db_escape_string($this->link, $_REQUEST["article_ids"])), is_numeric); - $label_id = (int) db_escape_string($this->link, $_REQUEST['label_id']); - $assign = (bool) db_escape_string($this->link, $_REQUEST['assign']) == "true"; + $article_ids = array_filter(explode(",", $this->dbh->escape_string($_REQUEST["article_ids"])), is_numeric); + $label_id = (int) $this->dbh->escape_string($_REQUEST['label_id']); + $assign = (bool) $this->dbh->escape_string($_REQUEST['assign']) == "true"; - $label = db_escape_string($this->link, label_find_caption($this->link, + $label = $this->dbh->escape_string(label_find_caption( $label_id, $_SESSION["uid"])); $num_updated = 0; @@ -450,44 +451,53 @@ class API extends Handler { foreach ($article_ids as $id) { if ($assign) - label_add_article($this->link, $id, $label, $_SESSION["uid"]); + label_add_article($id, $label, $_SESSION["uid"]); else - label_remove_article($this->link, $id, $label, $_SESSION["uid"]); + label_remove_article($id, $label, $_SESSION["uid"]); ++$num_updated; } } - print $this->wrap(self::STATUS_OK, array("status" => "OK", + $this->wrap(self::STATUS_OK, array("status" => "OK", "updated" => $num_updated)); } - function index() { - print $this->wrap(self::STATUS_ERR, array("error" => 'UNKNOWN_METHOD')); + function index($method) { + $plugin = PluginHost::getInstance()->get_api_method(strtolower($method)); + + if ($plugin && method_exists($plugin, $method)) { + $reply = $plugin->$method(); + + $this->wrap($reply[0], $reply[1]); + + } else { + $this->wrap(self::STATUS_ERR, array("error" => 'UNKNOWN_METHOD', "method" => $method)); + } } function shareToPublished() { - $title = db_escape_string($this->link, strip_tags($_REQUEST["title"])); - $url = db_escape_string($this->link, strip_tags($_REQUEST["url"])); - $content = db_escape_string($this->link, strip_tags($_REQUEST["content"])); + $title = $this->dbh->escape_string(strip_tags($_REQUEST["title"])); + $url = $this->dbh->escape_string(strip_tags($_REQUEST["url"])); + $content = $this->dbh->escape_string(strip_tags($_REQUEST["content"])); - if (Article::create_published_article($this->link, $title, $url, $content, "", $_SESSION["uid"])) { - print $this->wrap(self::STATUS_OK, array("status" => 'OK')); + if (Article::create_published_article($title, $url, $content, "", $_SESSION["uid"])) { + $this->wrap(self::STATUS_OK, array("status" => 'OK')); } else { - print $this->wrap(self::STATUS_ERR, array("error" => 'Publishing failed')); + $this->wrap(self::STATUS_ERR, array("error" => 'Publishing failed')); } } - static function api_get_feeds($link, $cat_id, $unread_only, $limit, $offset, $include_nested = false) { + static function api_get_feeds($cat_id, $unread_only, $limit, $offset, $include_nested = false) { $feeds = array(); /* Labels */ if ($cat_id == -4 || $cat_id == -2) { - $counters = getLabelCounters($link, true); + $counters = getLabelCounters(true); foreach (array_values($counters) as $cv) { @@ -511,10 +521,10 @@ class API extends Handler { if ($cat_id == -4 || $cat_id == -1) { foreach (array(-1, -2, -3, -4, -6, 0) as $i) { - $unread = getFeedUnread($link, $i); + $unread = getFeedUnread($i); if ($unread || !$unread_only) { - $title = getFeedTitle($link, $i); + $title = getFeedTitle($i); $row = array( "id" => $i, @@ -531,14 +541,14 @@ class API extends Handler { /* Child cats */ if ($include_nested && $cat_id) { - $result = db_query($link, "SELECT + $result = db_query("SELECT id, title FROM ttrss_feed_categories WHERE parent_cat = '$cat_id' AND owner_uid = " . $_SESSION["uid"] . " ORDER BY id, title"); while ($line = db_fetch_assoc($result)) { - $unread = getFeedUnread($link, $line["id"], true) + - getCategoryChildrenUnread($link, $line["id"]); + $unread = getFeedUnread($line["id"], true) + + getCategoryChildrenUnread($line["id"]); if ($unread || !$unread_only) { $row = array( @@ -561,7 +571,7 @@ class API extends Handler { } if ($cat_id == -4 || $cat_id == -3) { - $result = db_query($link, "SELECT + $result = db_query("SELECT id, feed_url, cat_id, title, order_id, ". SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated FROM ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"] . @@ -573,7 +583,7 @@ class API extends Handler { else $cat_qpart = "cat_id IS NULL"; - $result = db_query($link, "SELECT + $result = db_query("SELECT id, feed_url, cat_id, title, order_id, ". SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated FROM ttrss_feeds WHERE @@ -583,7 +593,7 @@ class API extends Handler { while ($line = db_fetch_assoc($result)) { - $unread = getFeedUnread($link, $line["id"]); + $unread = getFeedUnread($line["id"]); $has_icon = feed_has_icon($line['id']); @@ -607,13 +617,13 @@ class API extends Handler { return $feeds; } - static function api_get_headlines($link, $feed_id, $limit, $offset, + static function api_get_headlines($feed_id, $limit, $offset, $filter, $is_cat, $show_excerpt, $show_content, $view_mode, $order, $include_attachments, $since_id, $search = "", $search_mode = "", $include_nested = false, $sanitize_content = true) { - $qfh_ret = queryFeedHeadlines($link, $feed_id, $limit, + $qfh_ret = queryFeedHeadlines($feed_id, $limit, $view_mode, $is_cat, $search, $search_mode, $order, $offset, 0, false, $since_id, $include_nested); @@ -629,8 +639,8 @@ class API extends Handler { $tags = explode(",", $line["tag_cache"]); $labels = json_decode($line["label_cache"], true); - //if (!$tags) $tags = get_article_tags($link, $line["id"]); - //if (!$labels) $labels = get_article_labels($link, $line["id"]); + //if (!$tags) $tags = get_article_tags($line["id"]); + //if (!$labels) $labels = get_article_labels($line["id"]); $headline_row = array( "id" => (int)$line["id"], @@ -646,7 +656,7 @@ class API extends Handler { ); if ($include_attachments) - $headline_row['attachments'] = get_article_enclosures($link, + $headline_row['attachments'] = get_article_enclosures( $line['id']); if ($show_excerpt) { @@ -661,7 +671,7 @@ class API extends Handler { } if ($sanitize_content) { - $headline_row["content"] = sanitize($link, + $headline_row["content"] = sanitize( $line["content_preview"], sql_bool_to_bool($line['hide_images']), false, $line["site_url"]); @@ -675,7 +685,8 @@ class API extends Handler { $headline_row["labels"] = $labels; - $headline_row["feed_title"] = $line["feed_title"]; + $headline_row["feed_title"] = $line["feed_title"] ? $line["feed_title"] : + $feed_title; $headline_row["comments_count"] = (int)$line["num_comments"]; $headline_row["comments_link"] = $line["comments"]; @@ -683,9 +694,9 @@ class API extends Handler { $headline_row["always_display_attachments"] = sql_bool_to_bool($line["always_display_enclosures"]); $headline_row["author"] = $line["author"]; + $headline_row["score"] = (int)$line["score"]; - global $pluginhost; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE_API) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_API) as $p) { $headline_row = $p->hook_render_article_api(array("headline" => $headline_row)); } @@ -696,48 +707,47 @@ class API extends Handler { } function unsubscribeFeed() { - $feed_id = (int) db_escape_string($this->link, $_REQUEST["feed_id"]); + $feed_id = (int) $this->dbh->escape_string($_REQUEST["feed_id"]); - $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE id = '$feed_id' AND owner_uid = ".$_SESSION["uid"]); - if (db_num_rows($result) != 0) { - Pref_Feeds::remove_feed($this->link, $feed_id, $_SESSION["uid"]); - print $this->wrap(self::STATUS_OK, array("status" => "OK")); + if ($this->dbh->num_rows($result) != 0) { + Pref_Feeds::remove_feed($feed_id, $_SESSION["uid"]); + $this->wrap(self::STATUS_OK, array("status" => "OK")); } else { - print $this->wrap(self::STATUS_ERR, array("error" => "FEED_NOT_FOUND")); + $this->wrap(self::STATUS_ERR, array("error" => "FEED_NOT_FOUND")); } } function subscribeToFeed() { - $feed_url = db_escape_string($this->link, $_REQUEST["feed_url"]); - $category_id = (int) db_escape_string($this->link, $_REQUEST["category_id"]); - $login = db_escape_string($this->link, $_REQUEST["login"]); - $password = db_escape_string($this->link, $_REQUEST["password"]); + $feed_url = $this->dbh->escape_string($_REQUEST["feed_url"]); + $category_id = (int) $this->dbh->escape_string($_REQUEST["category_id"]); + $login = $this->dbh->escape_string($_REQUEST["login"]); + $password = $this->dbh->escape_string($_REQUEST["password"]); if ($feed_url) { - $rc = subscribe_to_feed($this->link, $feed_url, $category_id, - $login, $password, false); + $rc = subscribe_to_feed($feed_url, $category_id, $login, $password); - print $this->wrap(self::STATUS_OK, array("status" => $rc)); + $this->wrap(self::STATUS_OK, array("status" => $rc)); } else { - print $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE')); + $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE')); } } function getFeedTree() { $include_empty = sql_bool_to_bool($_REQUEST['include_empty']); - $pf = new Pref_Feeds($this->link, $_REQUEST); + $pf = new Pref_Feeds($_REQUEST); $_REQUEST['mode'] = 2; $_REQUEST['force_show_empty'] = $include_empty; if ($pf){ $data = $pf->makefeedtree(); - print $this->wrap(self::STATUS_OK, array("categories" => $data)); + $this->wrap(self::STATUS_OK, array("categories" => $data)); } else { - print $this->wrap(self::STATUS_ERR, array("error" => + $this->wrap(self::STATUS_ERR, array("error" => 'UNABLE_TO_INSTANTIATE_OBJECT')); } @@ -747,16 +757,16 @@ class API extends Handler { private function isCategoryEmpty($id) { if ($id == -2) { - $result = db_query($this->link, "SELECT COUNT(*) AS count FROM ttrss_labels2 + $result = $this->dbh->query("SELECT COUNT(*) AS count FROM ttrss_labels2 WHERE owner_uid = " . $_SESSION["uid"]); - return db_fetch_result($result, 0, "count") == 0; + return $this->dbh->fetch_result($result, 0, "count") == 0; } else if ($id == 0) { - $result = db_query($this->link, "SELECT COUNT(*) AS count FROM ttrss_feeds + $result = $this->dbh->query("SELECT COUNT(*) AS count FROM ttrss_feeds WHERE cat_id IS NULL AND owner_uid = " . $_SESSION["uid"]); - return db_fetch_result($result, 0, "count") == 0; + return $this->dbh->fetch_result($result, 0, "count") == 0; } diff --git a/classes/article.php b/classes/article.php index 9a0970140..e9f86f298 100644 --- a/classes/article.php +++ b/classes/article.php @@ -8,14 +8,14 @@ class Article extends Handler_Protected { } function redirect() { - $id = db_escape_string($this->link, $_REQUEST['id']); + $id = $this->dbh->escape_string($_REQUEST['id']); - $result = db_query($this->link, "SELECT link FROM ttrss_entries, ttrss_user_entries + $result = $this->dbh->query("SELECT link FROM ttrss_entries, ttrss_user_entries WHERE id = '$id' AND id = ref_id AND owner_uid = '".$_SESSION['uid']."' LIMIT 1"); - if (db_num_rows($result) == 1) { - $article_url = db_fetch_result($result, 0, 'link'); + if ($this->dbh->num_rows($result) == 1) { + $article_url = $this->dbh->fetch_result($result, 0, 'link'); $article_url = str_replace("\n", "", $article_url); header("Location: $article_url"); @@ -27,10 +27,10 @@ class Article extends Handler_Protected { } function view() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $cids = explode(",", db_escape_string($this->link, $_REQUEST["cids"])); - $mode = db_escape_string($this->link, $_REQUEST["mode"]); - $omode = db_escape_string($this->link, $_REQUEST["omode"]); + $id = $this->dbh->escape_string($_REQUEST["id"]); + $cids = explode(",", $this->dbh->escape_string($_REQUEST["cids"])); + $mode = $this->dbh->escape_string($_REQUEST["mode"]); + $omode = $this->dbh->escape_string($_REQUEST["omode"]); // in prefetch mode we only output requested cids, main article // just gets marked as read (it already exists in client cache) @@ -38,26 +38,26 @@ class Article extends Handler_Protected { $articles = array(); if ($mode == "") { - array_push($articles, format_article($this->link, $id, false)); + array_push($articles, format_article($id, false)); } else if ($mode == "zoom") { - array_push($articles, format_article($this->link, $id, true, true)); + array_push($articles, format_article($id, true, true)); } else if ($mode == "raw") { if ($_REQUEST['html']) { header("Content-Type: text/html"); print '<link rel="stylesheet" type="text/css" href="tt-rss.css"/>'; } - $article = format_article($this->link, $id, false); + $article = format_article($id, false); print $article['content']; return; } - $this->catchupArticleById($this->link, $id, 0); + $this->catchupArticleById($id, 0); if (!$_SESSION["bw_limit"]) { foreach ($cids as $cid) { if ($cid) { - array_push($articles, format_article($this->link, $cid, false, false)); + array_push($articles, format_article($cid, false, false)); } } } @@ -65,30 +65,30 @@ class Article extends Handler_Protected { print json_encode($articles); } - private function catchupArticleById($link, $id, $cmode) { + private function catchupArticleById($id, $cmode) { if ($cmode == 0) { - db_query($link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET unread = false,last_read = NOW() WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); } else if ($cmode == 1) { - db_query($link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET unread = true WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); } else { - db_query($link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET unread = NOT unread,last_read = NOW() WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); } - $feed_id = getArticleFeed($link, $id); - ccache_update($link, $feed_id, $_SESSION["uid"]); + $feed_id = getArticleFeed($id); + ccache_update($feed_id, $_SESSION["uid"]); } - static function create_published_article($link, $title, $url, $content, $labels_str, + static function create_published_article($title, $url, $content, $labels_str, $owner_uid) { - $guid = sha1($url . $owner_uid); // include owner_uid to prevent global GUID clash + $guid = 'SHA1:' . sha1("ttshared:" . $url . $owner_uid); // include owner_uid to prevent global GUID clash $content_hash = sha1($content); if ($labels_str != "") { @@ -104,30 +104,30 @@ class Article extends Handler_Protected { if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) return false; - db_query($link, "BEGIN"); + db_query("BEGIN"); // only check for our user data here, others might have shared this with different content etc - $result = db_query($link, "SELECT id FROM ttrss_entries, ttrss_user_entries WHERE + $result = db_query("SELECT id FROM ttrss_entries, ttrss_user_entries WHERE link = '$url' AND ref_id = id AND owner_uid = '$owner_uid' LIMIT 1"); if (db_num_rows($result) != 0) { $ref_id = db_fetch_result($result, 0, "id"); - $result = db_query($link, "SELECT int_id FROM ttrss_user_entries WHERE + $result = db_query("SELECT int_id FROM ttrss_user_entries WHERE ref_id = '$ref_id' AND owner_uid = '$owner_uid' LIMIT 1"); if (db_num_rows($result) != 0) { $int_id = db_fetch_result($result, 0, "int_id"); - db_query($link, "UPDATE ttrss_entries SET + db_query("UPDATE ttrss_entries SET content = '$content', content_hash = '$content_hash' WHERE id = '$ref_id'"); - db_query($link, "UPDATE ttrss_user_entries SET published = true, + db_query("UPDATE ttrss_user_entries SET published = true, last_published = NOW() WHERE int_id = '$int_id' AND owner_uid = '$owner_uid'"); } else { - db_query($link, "INSERT INTO ttrss_user_entries + db_query("INSERT INTO ttrss_user_entries (ref_id, uuid, feed_id, orig_feed_id, owner_uid, published, tag_cache, label_cache, last_read, note, unread, last_published) VALUES @@ -136,24 +136,24 @@ class Article extends Handler_Protected { if (count($labels) != 0) { foreach ($labels as $label) { - label_add_article($link, $ref_id, trim($label), $owner_uid); + label_add_article($ref_id, trim($label), $owner_uid); } } $rc = true; } else { - $result = db_query($link, "INSERT INTO ttrss_entries + $result = db_query("INSERT INTO ttrss_entries (title, guid, link, updated, content, content_hash, date_entered, date_updated) VALUES ('$title', '$guid', '$url', NOW(), '$content', '$content_hash', NOW(), NOW())"); - $result = db_query($link, "SELECT id FROM ttrss_entries WHERE guid = '$guid'"); + $result = db_query("SELECT id FROM ttrss_entries WHERE guid = '$guid'"); if (db_num_rows($result) != 0) { $ref_id = db_fetch_result($result, 0, "id"); - db_query($link, "INSERT INTO ttrss_user_entries + db_query("INSERT INTO ttrss_user_entries (ref_id, uuid, feed_id, orig_feed_id, owner_uid, published, tag_cache, label_cache, last_read, note, unread, last_published) VALUES @@ -161,7 +161,7 @@ class Article extends Handler_Protected { if (count($labels) != 0) { foreach ($labels as $label) { - label_add_article($link, $ref_id, trim($label), $owner_uid); + label_add_article($ref_id, trim($label), $owner_uid); } } @@ -169,7 +169,7 @@ class Article extends Handler_Protected { } } - db_query($link, "COMMIT"); + db_query("COMMIT"); return $rc; } @@ -178,9 +178,9 @@ class Article extends Handler_Protected { print __("Tags for this article (separated by commas):")."<br>"; - $param = db_escape_string($this->link, $_REQUEST['param']); + $param = $this->dbh->escape_string($_REQUEST['param']); - $tags = get_article_tags($this->link, db_escape_string($this->link, $param)); + $tags = get_article_tags($this->dbh->escape_string($param)); $tags_str = join(", ", $tags); @@ -209,36 +209,36 @@ class Article extends Handler_Protected { } function setScore() { - $ids = db_escape_string($this->link, $_REQUEST['id']); - $score = (int)db_escape_string($this->link, $_REQUEST['score']); + $ids = $this->dbh->escape_string($_REQUEST['id']); + $score = (int)$this->dbh->escape_string($_REQUEST['score']); - db_query($this->link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET score = '$score' WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); - print json_encode(array("id" => $id, + print json_encode(array("id" => $ids, "score_pic" => get_score_pic($score))); } function setArticleTags() { - $id = db_escape_string($this->link, $_REQUEST["id"]); + $id = $this->dbh->escape_string($_REQUEST["id"]); - $tags_str = db_escape_string($this->link, $_REQUEST["tags_str"]); + $tags_str = $this->dbh->escape_string($_REQUEST["tags_str"]); $tags = array_unique(trim_array(explode(",", $tags_str))); - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); - $result = db_query($this->link, "SELECT int_id FROM ttrss_user_entries WHERE + $result = $this->dbh->query("SELECT int_id FROM ttrss_user_entries WHERE ref_id = '$id' AND owner_uid = '".$_SESSION["uid"]."' LIMIT 1"); - if (db_num_rows($result) == 1) { + if ($this->dbh->num_rows($result) == 1) { $tags_to_cache = array(); - $int_id = db_fetch_result($result, 0, "int_id"); + $int_id = $this->dbh->fetch_result($result, 0, "int_id"); - db_query($this->link, "DELETE FROM ttrss_tags WHERE + $this->dbh->query("DELETE FROM ttrss_tags WHERE post_int_id = $int_id AND owner_uid = '".$_SESSION["uid"]."'"); foreach ($tags as $tag) { @@ -255,7 +255,7 @@ class Article extends Handler_Protected { // print "<!-- $id : $int_id : $tag -->"; if ($tag != '') { - db_query($this->link, "INSERT INTO ttrss_tags + $this->dbh->query("INSERT INTO ttrss_tags (post_int_id, owner_uid, tag_name) VALUES ('$int_id', '".$_SESSION["uid"]."', '$tag')"); } @@ -267,14 +267,14 @@ class Article extends Handler_Protected { sort($tags_to_cache); $tags_str = join(",", $tags_to_cache); - db_query($this->link, "UPDATE ttrss_user_entries + $this->dbh->query("UPDATE ttrss_user_entries SET tag_cache = '$tags_str' WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); - $tags = get_article_tags($this->link, $id); + $tags = get_article_tags($id); $tags_str = format_tags_string($tags, $id); $tags_str_full = join(", ", $tags); @@ -286,15 +286,15 @@ class Article extends Handler_Protected { function completeTags() { - $search = db_escape_string($this->link, $_REQUEST["search"]); + $search = $this->dbh->escape_string($_REQUEST["search"]); - $result = db_query($this->link, "SELECT DISTINCT tag_name FROM ttrss_tags + $result = $this->dbh->query("SELECT DISTINCT tag_name FROM ttrss_tags WHERE owner_uid = '".$_SESSION["uid"]."' AND tag_name LIKE '$search%' ORDER BY tag_name LIMIT 10"); print "<ul>"; - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { print "<li>" . $line["tag_name"] . "</li>"; } print "</ul>"; @@ -311,10 +311,10 @@ class Article extends Handler_Protected { private function labelops($assign) { $reply = array(); - $ids = explode(",", db_escape_string($this->link, $_REQUEST["ids"])); - $label_id = db_escape_string($this->link, $_REQUEST["lid"]); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); + $label_id = $this->dbh->escape_string($_REQUEST["lid"]); - $label = db_escape_string($this->link, label_find_caption($this->link, $label_id, + $label = $this->dbh->escape_string(label_find_caption($label_id, $_SESSION["uid"])); $reply["info-for-headlines"] = array(); @@ -324,11 +324,11 @@ class Article extends Handler_Protected { foreach ($ids as $id) { if ($assign) - label_add_article($this->link, $id, $label, $_SESSION["uid"]); + label_add_article($id, $label, $_SESSION["uid"]); else - label_remove_article($this->link, $id, $label, $_SESSION["uid"]); + label_remove_article($id, $label, $_SESSION["uid"]); - $labels = get_article_labels($this->link, $id, $_SESSION["uid"]); + $labels = get_article_labels($id, $_SESSION["uid"]); array_push($reply["info-for-headlines"], array("id" => $id, "labels" => format_article_labels($labels, $id))); diff --git a/classes/auth/base.php b/classes/auth/base.php index ad7ff3646..69acd0985 100644 --- a/classes/auth/base.php +++ b/classes/auth/base.php @@ -1,9 +1,9 @@ <?php class Auth_Base { - protected $link; + private $dbh; - function __construct($link) { - $this->link = $link; + function __construct() { + $this->dbh = Db::get(); } function check_password($owner_uid, $password) { @@ -16,12 +16,14 @@ class Auth_Base { // Auto-creates specified user if allowed by system configuration // Can be used instead of find_user_by_login() by external auth modules - function auto_create_user($login) { + function auto_create_user($login, $password = false) { if ($login && defined('AUTH_AUTO_CREATE') && AUTH_AUTO_CREATE) { $user_id = $this->find_user_by_login($login); + if (!$password) $password = make_password(); + if (!$user_id) { - $login = db_escape_string($this->link, $login); + $login = $this->dbh->escape_string($login); $salt = substr(bin2hex(get_random_bytes(125)), 0, 250); $pwd_hash = encrypt_password($password, $salt, true); @@ -29,7 +31,7 @@ class Auth_Base { (login,access_level,last_login,created,pwd_hash,salt) VALUES ('$login', 0, null, NOW(), '$pwd_hash','$salt')"; - db_query($this->link, $query); + $this->dbh->query($query); return $this->find_user_by_login($login); @@ -42,13 +44,13 @@ class Auth_Base { } function find_user_by_login($login) { - $login = db_escape_string($this->link, $login); + $login = $this->dbh->escape_string($login); - $result = db_query($this->link, "SELECT id FROM ttrss_users WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_users WHERE login = '$login'"); - if (db_num_rows($result) > 0) { - return db_fetch_result($result, 0, "id"); + if ($this->dbh->num_rows($result) > 0) { + return $this->dbh->fetch_result($result, 0, "id"); } else { return false; } diff --git a/classes/backend.php b/classes/backend.php index c03d583db..7737df0f6 100644 --- a/classes/backend.php +++ b/classes/backend.php @@ -11,7 +11,7 @@ class Backend extends Handler { require_once "digest.php"; - $rv = prepare_headlines_digest($this->link, $_SESSION['uid'], 1, 1000); + $rv = prepare_headlines_digest($_SESSION['uid'], 1, 1000); $rv[3] = "<pre>" . $rv[3] . "</pre>"; @@ -19,8 +19,8 @@ class Backend extends Handler { } private function display_main_help() { - $info = get_hotkeys_info($this->link); - $imap = get_hotkeys_map($this->link); + $info = get_hotkeys_info(); + $imap = get_hotkeys_map(); $omap = array(); foreach ($imap[1] as $sequence => $action) { diff --git a/classes/db.php b/classes/db.php new file mode 100644 index 000000000..695ca6ea2 --- /dev/null +++ b/classes/db.php @@ -0,0 +1,98 @@ +<?php +class Db implements IDb { + private static $instance; + private $adapter; + private $link; + + private function __construct() { + + $er = error_reporting(E_ALL); + + if (defined('_ENABLE_PDO') && _ENABLE_PDO && class_exists("PDO")) { + $this->adapter = new Db_PDO(); + } else { + switch (DB_TYPE) { + case "mysql": + if (function_exists("mysqli_connect")) { + $this->adapter = new Db_Mysqli(); + } else { + $this->adapter = new Db_Mysql(); + } + break; + case "pgsql": + $this->adapter = new Db_Pgsql(); + break; + default: + die("Unknown DB_TYPE: " . DB_TYPE); + } + } + + if (!$this->adapter) die("Error initializing database adapter for " . DB_TYPE); + + $this->link = $this->adapter->connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, defined('DB_PORT') ? DB_PORT : ""); + + if (!$this->link) { + die("Error connecting through adapter: " . $this->adapter->last_error()); + } + + error_reporting($er); + } + + private function __clone() { + // + } + + public static function get() { + if (self::$instance == null) + self::$instance = new self(); + + return self::$instance; + } + + static function quote($str){ + return("'$str'"); + } + + function reconnect() { + $this->link = $this->adapter->connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, defined('DB_PORT') ? DB_PORT : ""); + } + + function connect($host, $user, $pass, $db, $port) { + //return $this->adapter->connect($host, $user, $pass, $db, $port); + return ; + } + + function escape_string($s, $strip_tags = true) { + return $this->adapter->escape_string($s, $strip_tags); + } + + function query($query, $die_on_error = true) { + return $this->adapter->query($query, $die_on_error); + } + + function fetch_assoc($result) { + return $this->adapter->fetch_assoc($result); + } + + function num_rows($result) { + return $this->adapter->num_rows($result); + } + + function fetch_result($result, $row, $param) { + return $this->adapter->fetch_result($result, $row, $param); + } + + function close() { + return $this->adapter->close(); + } + + function affected_rows($result) { + return $this->adapter->affected_rows($result); + } + + function last_error() { + return $this->adapter->last_error(); + } + +} +?> diff --git a/classes/db/mysql.php b/classes/db/mysql.php new file mode 100644 index 000000000..aab05aca2 --- /dev/null +++ b/classes/db/mysql.php @@ -0,0 +1,73 @@ +<?php +class Db_Mysql implements IDb { + private $link; + + function connect($host, $user, $pass, $db, $port) { + $this->link = mysql_connect($host, $user, $pass); + + if ($this->link) { + $result = mysql_select_db($db, $this->link); + if (!$result) { + die("Can't select DB: " . mysql_error($this->link)); + } + + $this->init(); + + return $this->link; + } else { + die("Unable to connect to database (as $user to $host, database $db): " . mysql_error()); + } + } + + function escape_string($s, $strip_tags = true) { + if ($strip_tags) $s = strip_tags($s); + + return mysql_real_escape_string($s, $this->link); + } + + function query($query, $die_on_error = true) { + $result = mysql_query($query, $this->link); + if (!$result) { + user_error("Query $query failed: " . ($this->link ? mysql_error($this->link) : "No connection"), + $die_on_error ? E_USER_ERROR : E_USER_WARNING); + } + return $result; + } + + function fetch_assoc($result) { + return mysql_fetch_assoc($result); + } + + + function num_rows($result) { + return mysql_num_rows($result); + } + + function fetch_result($result, $row, $param) { + return mysql_result($result, $row, $param); + } + + function close() { + return mysql_close($this->link); + } + + function affected_rows($result) { + return mysql_affected_rows($this->link); + } + + function last_error() { + return mysql_error(); + } + + function init() { + $this->query("SET time_zone = '+0:0'"); + + if (defined('MYSQL_CHARSET') && MYSQL_CHARSET) { + $this->query("SET NAMES " . MYSQL_CHARSET); + } + + return true; + } + +} +?> diff --git a/classes/db/mysqli.php b/classes/db/mysqli.php new file mode 100644 index 000000000..550df6f15 --- /dev/null +++ b/classes/db/mysqli.php @@ -0,0 +1,77 @@ +<?php +class Db_Mysqli implements IDb { + private $link; + + function connect($host, $user, $pass, $db, $port) { + if ($port) + $this->link = mysqli_connect($host, $user, $pass, $db, $port); + else + $this->link = mysqli_connect($host, $user, $pass, $db); + + if ($this->link) { + $this->init(); + + return $this->link; + } else { + die("Unable to connect to database (as $user to $host, database $db): " . mysqli_error()); + } + } + + function escape_string($s, $strip_tags = true) { + if ($strip_tags) $s = strip_tags($s); + + return mysqli_real_escape_string($this->link, $s); + } + + function query($query, $die_on_error = true) { + $result = mysqli_query($this->link, $query); + if (!$result) { + user_error("Query $query failed: " . ($this->link ? mysqli_error($this->link) : "No connection"), + $die_on_error ? E_USER_ERROR : E_USER_WARNING); + } + + return $result; + } + + function fetch_assoc($result) { + return mysqli_fetch_assoc($result); + } + + + function num_rows($result) { + return mysqli_num_rows($result); + } + + function fetch_result($result, $row, $param) { + if (mysqli_data_seek($result, $row)) { + $line = mysqli_fetch_assoc($result); + return $line[$param]; + } else { + return false; + } + } + + function close() { + return mysqli_close($this->link); + } + + function affected_rows($result) { + return mysqli_affected_rows($this->link); + } + + function last_error() { + return mysqli_error(); + } + + function init() { + $this->query("SET time_zone = '+0:0'"); + + if (defined('MYSQL_CHARSET') && MYSQL_CHARSET) { + $this->query("SET NAMES " . MYSQL_CHARSET); + } + + return true; + } + +} +?> diff --git a/classes/db/pdo.php b/classes/db/pdo.php new file mode 100644 index 000000000..126f5150a --- /dev/null +++ b/classes/db/pdo.php @@ -0,0 +1,100 @@ +<?php +class Db_PDO implements IDb { + private $pdo; + + function connect($host, $user, $pass, $db, $port) { + $connstr = DB_TYPE . ":host=$host;dbname=$db"; + + if (DB_TYPE == "mysql") $connstr .= ";charset=utf8"; + + try { + $this->pdo = new PDO($connstr, $user, $pass); + $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $this->init(); + } catch (PDOException $e) { + die($e->getMessage()); + } + + return $this->pdo; + } + + function escape_string($s, $strip_tags = true) { + if ($strip_tags) $s = strip_tags($s); + + $qs = $this->pdo->quote($s); + + return mb_substr($qs, 1, mb_strlen($qs)-2); + } + + function query($query, $die_on_error = true) { + try { + return new Db_Stmt($this->pdo->query($query)); + } catch (PDOException $e) { + user_error($e->getMessage(), $die_on_error ? E_USER_ERROR : E_USER_WARNING); + } + } + + function fetch_assoc($result) { + try { + if ($result) { + return $result->fetch(); + } else { + return null; + } + } catch (PDOException $e) { + user_error($e->getMessage(), E_USER_WARNING); + } + } + + function num_rows($result) { + try { + if ($result) { + return $result->rowCount(); + } else { + return false; + } + } catch (PDOException $e) { + user_error($e->getMessage(), E_USER_WARNING); + } + } + + function fetch_result($result, $row, $param) { + return $result->fetch_result($row, $param); + } + + function close() { + $this->pdo = null; + } + + function affected_rows($result) { + try { + if ($result) { + return $result->rowCount(); + } else { + return null; + } + } catch (PDOException $e) { + user_error($e->getMessage(), E_USER_WARNING); + } + } + + function last_error() { + return join(" ", $this->pdo->errorInfo()); + } + + function init() { + switch (DB_TYPE) { + case "pgsql": + $this->query("set client_encoding = 'UTF-8'"); + $this->query("set datestyle = 'ISO, european'"); + $this->query("set TIME ZONE 0"); + case "mysql": + $this->query("SET time_zone = '+0:0'"); + return; + } + + return true; + } + +} +?> diff --git a/classes/db/pgsql.php b/classes/db/pgsql.php new file mode 100644 index 000000000..4d860790b --- /dev/null +++ b/classes/db/pgsql.php @@ -0,0 +1,82 @@ +<?php +class Db_Pgsql implements IDb { + private $link; + + function connect($host, $user, $pass, $db, $port) { + $string = "dbname=$db user=$user"; + + if ($pass) { + $string .= " password=$pass"; + } + + if ($host) { + $string .= " host=$host"; + } + + if (is_numeric($port) && $port > 0) { + $string = "$string port=" . $port; + } + + $this->link = pg_connect($string); + + if (!$this->link) { + die("Unable to connect to database (as $user to $host, database $db):" . pg_last_error()); + } + + $this->init(); + + return $this->link; + } + + function escape_string($s, $strip_tags = true) { + if ($strip_tags) $s = strip_tags($s); + + return pg_escape_string($s); + } + + function query($query, $die_on_error = true) { + $result = pg_query($query); + + if (!$result) { + $query = htmlspecialchars($query); // just in case + user_error("Query $query failed: " . ($this->link ? pg_last_error($this->link) : "No connection"), + $die_on_error ? E_USER_ERROR : E_USER_WARNING); + } + return $result; + } + + function fetch_assoc($result) { + return pg_fetch_assoc($result); + } + + + function num_rows($result) { + return pg_num_rows($result); + } + + function fetch_result($result, $row, $param) { + return pg_fetch_result($result, $row, $param); + } + + function close() { + return pg_close($this->link); + } + + function affected_rows($result) { + return pg_affected_rows($result); + } + + function last_error() { + return pg_last_error($this->link); + } + + function init() { + $this->query("set client_encoding = 'UTF-8'"); + pg_set_client_encoding("UNICODE"); + $this->query("set datestyle = 'ISO, european'"); + $this->query("set TIME ZONE 0"); + + return true; + } +} +?> diff --git a/classes/db/prefs.php b/classes/db/prefs.php new file mode 100644 index 000000000..26fb4666b --- /dev/null +++ b/classes/db/prefs.php @@ -0,0 +1,190 @@ +<?php +class Db_Prefs { + private $dbh; + private static $instance; + private $cache; + + function __construct() { + $this->dbh = Db::get(); + $this->cache = array(); + + if ($_SESSION["uid"]) $this->cache(); + } + + private function __clone() { + // + } + + public static function get() { + if (self::$instance == null) + self::$instance = new self(); + + return self::$instance; + } + + function cache() { + $profile = false; + + $user_id = $_SESSION["uid"]; + @$profile = $_SESSION["profile"]; + + if ($profile) { + $profile_qpart = "profile = '$profile' AND"; + } else { + $profile_qpart = "profile IS NULL AND"; + } + + if (get_schema_version() < 63) $profile_qpart = ""; + + $result = db_query("SELECT + value,ttrss_prefs_types.type_name as type_name,ttrss_prefs.pref_name AS pref_name + FROM + ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types + WHERE + $profile_qpart + ttrss_prefs.pref_name NOT LIKE '_MOBILE%' AND + ttrss_prefs_types.id = type_id AND + owner_uid = '$user_id' AND + ttrss_user_prefs.pref_name = ttrss_prefs.pref_name"); + + while ($line = db_fetch_assoc($result)) { + if ($user_id == $_SESSION["uid"]) { + $pref_name = $line["pref_name"]; + + $this->cache[$pref_name]["type"] = $line["type_name"]; + $this->cache[$pref_name]["value"] = $line["value"]; + } + } + } + + function read($pref_name, $user_id = false, $die_on_error = false) { + + $pref_name = db_escape_string($pref_name); + $profile = false; + + if (!$user_id) { + $user_id = $_SESSION["uid"]; + @$profile = $_SESSION["profile"]; + } else { + $user_id = sprintf("%d", $user_id); + } + + if (isset($this->cache[$pref_name])) { + $tuple = $this->cache[$pref_name]; + return $this->convert($tuple["value"], $tuple["type"]); + } + + if ($profile) { + $profile_qpart = "profile = '$profile' AND"; + } else { + $profile_qpart = "profile IS NULL AND"; + } + + if (get_schema_version() < 63) $profile_qpart = ""; + + $result = db_query("SELECT + value,ttrss_prefs_types.type_name as type_name + FROM + ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types + WHERE + $profile_qpart + ttrss_user_prefs.pref_name = '$pref_name' AND + ttrss_prefs_types.id = type_id AND + owner_uid = '$user_id' AND + ttrss_user_prefs.pref_name = ttrss_prefs.pref_name"); + + if (db_num_rows($result) > 0) { + $value = db_fetch_result($result, 0, "value"); + $type_name = db_fetch_result($result, 0, "type_name"); + + if ($user_id == $_SESSION["uid"]) { + $this->cache[$pref_name]["type"] = $type_name; + $this->cache[$pref_name]["value"] = $value; + } + + return $this->convert($value, $type_name); + + } else { + user_error("Fatal error, unknown preferences key: $pref_name", $die_on_error ? E_USER_ERROR : E_USER_WARNING); + return null; + } + } + + function convert($value, $type_name) { + if ($type_name == "bool") { + return $value == "true"; + } else if ($type_name == "integer") { + return (int)$value; + } else { + return $value; + } + } + + function write($pref_name, $value, $user_id = false, $strip_tags = true) { + $pref_name = db_escape_string($pref_name); + $value = db_escape_string($value, $strip_tags); + + if (!$user_id) { + $user_id = $_SESSION["uid"]; + @$profile = $_SESSION["profile"]; + } else { + $user_id = sprintf("%d", $user_id); + $prefs_cache = false; + } + + if ($profile) { + $profile_qpart = "AND profile = '$profile'"; + } else { + $profile_qpart = "AND profile IS NULL"; + } + + if (get_schema_version() < 63) $profile_qpart = ""; + + $type_name = ""; + $current_value = ""; + + if (isset($this->cache[$pref_name])) { + $type_name = $this->cache[$pref_name]["type"]; + $current_value = $this->cache[$pref_name]["value"]; + } + + if (!$type_name) { + $result = db_query("SELECT type_name + FROM ttrss_prefs,ttrss_prefs_types + WHERE pref_name = '$pref_name' AND type_id = ttrss_prefs_types.id"); + + if (db_num_rows($result) > 0) + $type_name = db_fetch_result($result, 0, "type_name"); + } else if ($current_value == $value) { + return; + } + + if ($type_name) { + if ($type_name == "bool") { + if ($value == "1" || $value == "true") { + $value = "true"; + } else { + $value = "false"; + } + } else if ($type_name == "integer") { + $value = sprintf("%d", $value); + } + + if ($pref_name == 'USER_TIMEZONE' && $value == '') { + $value = 'UTC'; + } + + db_query("UPDATE ttrss_user_prefs SET + value = '$value' WHERE pref_name = '$pref_name' + $profile_qpart + AND owner_uid = " . $_SESSION["uid"]); + + if ($user_id == $_SESSION["uid"]) { + $this->cache[$pref_name]["type"] = $type_name; + $this->cache[$pref_name]["value"] = $value; + } + } + } + +} +?> diff --git a/classes/db/stmt.php b/classes/db/stmt.php new file mode 100644 index 000000000..4d3596ef1 --- /dev/null +++ b/classes/db/stmt.php @@ -0,0 +1,32 @@ +<?php +class Db_Stmt { + private $stmt; + private $cache; + + function __construct($stmt) { + $this->stmt = $stmt; + $this->cache = false; + } + + function fetch_result($row, $param) { + if (!$this->cache) { + $this->cache = $this->stmt->fetchAll(); + } + + if (isset($this->cache[$row])) { + return $this->cache[$row][$param]; + } else { + user_error("Unable to jump to row $row", E_USER_WARNING); + return false; + } + } + + function rowCount() { + return $this->stmt->rowCount(); + } + + function fetch() { + return $this->stmt->fetch(); + } +} +?> diff --git a/classes/dbupdater.php b/classes/dbupdater.php index a9a713273..a319da03d 100644 --- a/classes/dbupdater.php +++ b/classes/dbupdater.php @@ -1,18 +1,18 @@ <?php class DbUpdater { - private $link; + private $dbh; private $db_type; private $need_version; - function __construct($link, $db_type, $need_version) { - $this->link = $link; + function __construct($dbh, $db_type, $need_version) { + $this->dbh = $dbh; $this->db_type = $db_type; $this->need_version = (int) $need_version; } function getSchemaVersion() { - $result = db_query($this->link, "SELECT schema_version FROM ttrss_version"); + $result = db_query("SELECT schema_version FROM ttrss_version"); return (int) db_fetch_result($result, 0, "schema_version"); } @@ -37,21 +37,21 @@ class DbUpdater { if (is_array($lines)) { - db_query($this->link, "BEGIN"); + db_query("BEGIN"); foreach ($lines as $line) { if (strpos($line, "--") !== 0 && $line) { - db_query($this->link, $line); + db_query($line); } } $db_version = $this->getSchemaVersion(); if ($db_version == $version) { - db_query($this->link, "COMMIT"); + db_query("COMMIT"); return true; } else { - db_query($this->link, "ROLLBACK"); + db_query("ROLLBACK"); return false; } } else { diff --git a/classes/dlg.php b/classes/dlg.php index e56560a47..cfa960d9a 100644 --- a/classes/dlg.php +++ b/classes/dlg.php @@ -6,7 +6,7 @@ class Dlg extends Handler_Protected { if (parent::before($method)) { header("Content-Type: text/html"); # required for iframe - $this->param = db_escape_string($this->link, $_REQUEST["param"]); + $this->param = $this->dbh->escape_string($_REQUEST["param"]); return true; } return false; @@ -18,15 +18,15 @@ class Dlg extends Handler_Protected { print "<div class=\"prefFeedOPMLHolder\">"; $owner_uid = $_SESSION["uid"]; - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); print "<ul class='nomarks'>"; - $opml = new Opml($this->link, $_REQUEST); + $opml = new Opml($_REQUEST); $opml->opml_import($_SESSION["uid"]); - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); print "</ul>"; print "</div>"; @@ -43,7 +43,7 @@ class Dlg extends Handler_Protected { } function pubOPMLUrl() { - $url_path = Opml::opml_publish_url($this->link); + $url_path = Opml::opml_publish_url(); print __("Your Public OPML URL is:"); @@ -106,15 +106,15 @@ class Dlg extends Handler_Protected { FROM ttrss_tags WHERE owner_uid = ".$_SESSION["uid"]." GROUP BY tag_name ORDER BY count DESC LIMIT 50"; - $result = db_query($this->link, $query); + $result = $this->dbh->query($query); $tags = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $tags[$line["tag_name"]] = $line["count"]; } - if( count($tags) == 0 ){ return; } + if(count($tags) == 0 ){ return; } ksort($tags); @@ -171,10 +171,10 @@ class Dlg extends Handler_Protected { print "<label for=\"tag_mode_all\">".__("All tags.")."</input>"; print "<select id=\"all_tags\" name=\"all_tags\" title=\"" . __('Which Tags?') . "\" multiple=\"multiple\" size=\"10\" style=\"width : 100%\">"; - $result = db_query($this->link, "SELECT DISTINCT tag_name FROM ttrss_tags WHERE owner_uid = ".$_SESSION['uid']." + $result = $this->dbh->query("SELECT DISTINCT tag_name FROM ttrss_tags WHERE owner_uid = ".$_SESSION['uid']." AND LENGTH(tag_name) <= 30 ORDER BY tag_name ASC"); - while ($row = db_fetch_assoc($result)) { + while ($row = $this->dbh->fetch_assoc($result)) { $tmp = htmlspecialchars($row["tag_name"]); print "<option value=\"" . str_replace(" ", "%20", $tmp) . "\">$tmp</option>"; } @@ -195,10 +195,10 @@ class Dlg extends Handler_Protected { function generatedFeed() { $this->params = explode(":", $this->param, 3); - $feed_id = db_escape_string($this->link, $this->params[0]); + $feed_id = $this->dbh->escape_string($this->params[0]); $is_cat = (bool) $this->params[1]; - $key = get_feed_access_key($this->link, $feed_id, $is_cat); + $key = get_feed_access_key($feed_id, $is_cat); $url_path = htmlspecialchars($this->params[2]) . "&key=" . $key; @@ -223,7 +223,7 @@ class Dlg extends Handler_Protected { function newVersion() { - $version_data = check_for_update($this->link); + $version_data = check_for_update(); $version = $version_data['version']; $id = $version_data['version_id']; diff --git a/classes/feedenclosure.php b/classes/feedenclosure.php new file mode 100644 index 000000000..d610dd7c8 --- /dev/null +++ b/classes/feedenclosure.php @@ -0,0 +1,7 @@ +<?php +class FeedEnclosure { + public $link; + public $type; + public $length; +} +?> diff --git a/classes/feeditem.php b/classes/feeditem.php new file mode 100644 index 000000000..e64a13fdc --- /dev/null +++ b/classes/feeditem.php @@ -0,0 +1,15 @@ +<?php +abstract class FeedItem { + abstract function get_id(); + abstract function get_date(); + abstract function get_link(); + abstract function get_title(); + abstract function get_description(); + abstract function get_content(); + abstract function get_comments_url(); + abstract function get_comments_count(); + abstract function get_categories(); + abstract function get_enclosures(); + abstract function get_author(); +} +?> diff --git a/classes/feeditem/atom.php b/classes/feeditem/atom.php new file mode 100644 index 000000000..b981dc319 --- /dev/null +++ b/classes/feeditem/atom.php @@ -0,0 +1,109 @@ +<?php +class FeedItem_Atom extends FeedItem_Common { + function get_id() { + $id = $this->elem->getElementsByTagName("id")->item(0); + + if ($id) { + return $id->nodeValue; + } else { + return $this->get_link(); + } + } + + function get_date() { + $updated = $this->elem->getElementsByTagName("updated")->item(0); + + if ($updated) { + return strtotime($updated->nodeValue); + } + } + + function get_link() { + $links = $this->elem->getElementsByTagName("link"); + + foreach ($links as $link) { + if ($link && $link->hasAttribute("href") && (!$link->hasAttribute("rel") + || $link->getAttribute("rel") == "alternate")) { + return $link->getAttribute("href"); + } + } + } + + function get_title() { + $title = $this->elem->getElementsByTagName("title")->item(0); + + if ($title) { + return $title->nodeValue; + } + } + + function get_content() { + $content = $this->elem->getElementsByTagName("content")->item(0); + + if ($content) { + return $content->nodeValue; + } + } + + function get_description() { + $summary = $this->elem->getElementsByTagName("summary")->item(0); + + if ($summary) { + return $summary->nodeValue; + } + } + + function get_categories() { + $categories = $this->elem->getElementsByTagName("category"); + $cats = array(); + + foreach ($categories as $cat) { + if ($cat->hasAttribute("term")) + array_push($cats, $cat->getAttribute("term")); + } + + $categories = $this->xpath->query("dc:subject", $this->elem); + + foreach ($categories as $cat) { + array_push($cats, $cat->nodeValue); + } + + return $cats; + } + + function get_enclosures() { + $links = $this->elem->getElementsByTagName("link"); + + $encs = array(); + + foreach ($links as $link) { + if ($link && $link->hasAttribute("href") && $link->hasAttribute("rel")) { + if ($link->getAttribute("rel") == "enclosure") { + $enc = new FeedEnclosure(); + + $enc->type = $link->getAttribute("type"); + $enc->link = $link->getAttribute("href"); + $enc->length = $link->getAttribute("length"); + + array_push($encs, $enc); + } + } + } + + $enclosures = $this->xpath->query("media:content", $this->elem); + + foreach ($enclosures as $enclosure) { + $enc = new FeedEnclosure(); + + $enc->type = $enclosure->getAttribute("type"); + $enc->link = $enclosure->getAttribute("url"); + $enc->length = $enclosure->getAttribute("length"); + + array_push($encs, $enc); + } + + return $encs; + } + +} +?> diff --git a/classes/feeditem/common.php b/classes/feeditem/common.php new file mode 100644 index 000000000..0787a42cb --- /dev/null +++ b/classes/feeditem/common.php @@ -0,0 +1,51 @@ +<?php +abstract class FeedItem_Common extends FeedItem { + protected $elem; + protected $xpath; + protected $doc; + + function __construct($elem, $doc, $xpath) { + $this->elem = $elem; + $this->xpath = $xpath; + $this->doc = $doc; + } + + function get_author() { + $author = $this->elem->getElementsByTagName("author")->item(0); + + if ($author) { + $name = $author->getElementsByTagName("name")->item(0); + + if ($name) return $name->nodeValue; + + $email = $author->getElementsByTagName("email")->item(0); + + if ($email) return $email->nodeValue; + + if ($author->nodeValue) + return $author->nodeValue; + } + + $author = $this->xpath->query("dc:creator", $this->elem)->item(0); + + if ($author) { + return $author->nodeValue; + } + } + + // todo + function get_comments_url() { + + } + + function get_comments_count() { + $comments = $this->xpath->query("slash:comments", $this->elem)->item(0); + + if ($comments) { + return $comments->nodeValue; + } + } + + +} +?> diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php new file mode 100644 index 000000000..2f363b4f6 --- /dev/null +++ b/classes/feeditem/rss.php @@ -0,0 +1,107 @@ +<?php +class FeedItem_RSS extends FeedItem_Common { + function get_id() { + $id = $this->elem->getElementsByTagName("guid")->item(0); + + if ($id) { + return $id->nodeValue; + } else { + return $this->get_link(); + } + } + + function get_date() { + $pubDate = $this->elem->getElementsByTagName("pubDate")->item(0); + + if ($pubDate) { + return strtotime($pubDate->nodeValue); + } + } + + function get_link() { + $link = $this->elem->getElementsByTagName("link")->item(0); + + if ($link) { + return $link->nodeValue; + } + } + + function get_title() { + $title = $this->elem->getElementsByTagName("title")->item(0); + + if ($title) { + return $title->nodeValue; + } + } + + function get_content() { + $content = $this->xpath->query("content:encoded", $this->elem)->item(0); + + if ($content) { + return $content->nodeValue; + } + + $content = $this->elem->getElementsByTagName("description")->item(0); + + if ($content) { + return $content->nodeValue; + } + } + + function get_description() { + $summary = $this->elem->getElementsByTagName("description")->item(0); + + if ($summary) { + return $summary->nodeValue; + } + } + + function get_categories() { + $categories = $this->elem->getElementsByTagName("category"); + $cats = array(); + + foreach ($categories as $cat) { + array_push($cats, $cat->nodeValue); + } + + $categories = $this->xpath->query("dc:subject", $this->elem); + + foreach ($categories as $cat) { + array_push($cats, $cat->nodeValue); + } + + return $cats; + } + + function get_enclosures() { + $enclosures = $this->elem->getElementsByTagName("enclosure"); + + $encs = array(); + + foreach ($enclosures as $enclosure) { + $enc = new FeedEnclosure(); + + $enc->type = $enclosure->getAttribute("type"); + $enc->link = $enclosure->getAttribute("url"); + $enc->length = $enclosure->getAttribute("length"); + + array_push($encs, $enc); + } + + $enclosures = $this->xpath->query("media:content", $this->elem); + + foreach ($enclosures as $enclosure) { + $enc = new FeedEnclosure(); + + $enc->type = $enclosure->getAttribute("type"); + $enc->link = $enclosure->getAttribute("url"); + $enc->length = $enclosure->getAttribute("length"); + + array_push($encs, $enc); + } + + return $encs; + } + +} +?> diff --git a/classes/feedparser.php b/classes/feedparser.php new file mode 100644 index 000000000..d60db8a28 --- /dev/null +++ b/classes/feedparser.php @@ -0,0 +1,180 @@ +<?php +class FeedParser { + private $doc; + private $error; + private $items; + private $link; + private $title; + private $type; + private $xpath; + + const FEED_RDF = 0; + const FEED_RSS = 1; + const FEED_ATOM = 2; + + function __construct($data) { + libxml_use_internal_errors(true); + libxml_clear_errors(); + $this->doc = new DOMDocument(); + $this->doc->loadXML($data); + $this->error = $this->format_error(libxml_get_last_error()); + libxml_clear_errors(); + + $this->items = array(); + } + + function init() { + $root = $this->doc->firstChild; + $xpath = new DOMXPath($this->doc); + $xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom'); + $xpath->registerNamespace('media', 'http://search.yahoo.com/mrss/'); + $xpath->registerNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); + $xpath->registerNamespace('slash', 'http://purl.org/rss/1.0/modules/slash/'); + $xpath->registerNamespace('dc', 'http://purl.org/dc/elements/1.1/'); + $xpath->registerNamespace('content', 'http://purl.org/rss/1.0/modules/content/'); + + $this->xpath = $xpath; + + $root = $xpath->query("(//atom:feed|//channel|//rdf:rdf|//rdf:RDF)")->item(0); + + if ($root) { + switch (mb_strtolower($root->tagName)) { + case "rdf:rdf": + $this->type = $this::FEED_RDF; + break; + case "channel": + $this->type = $this::FEED_RSS; + break; + case "feed": + $this->type = $this::FEED_ATOM; + break; + default: + $this->error = "Unknown/unsupported feed type"; + return; + } + + switch ($this->type) { + case $this::FEED_ATOM: + + $title = $xpath->query("//atom:feed/atom:title")->item(0); + + if ($title) { + $this->title = $title->nodeValue; + } + + $link = $xpath->query("//atom:feed/atom:link[not(@rel)]")->item(0); + + if ($link && $link->hasAttributes()) { + $this->link = $link->getAttribute("href"); + } + + $articles = $xpath->query("//atom:entry"); + + foreach ($articles as $article) { + array_push($this->items, new FeedItem_Atom($article, $this->doc, $this->xpath)); + } + + break; + case $this::FEED_RSS: + + $title = $xpath->query("//channel/title")->item(0); + + if ($title) { + $this->title = $title->nodeValue; + } + + $link = $xpath->query("//channel/link")->item(0); + + if ($link && $link->hasAttributes()) { + $this->link = $link->getAttribute("href"); + } + + $articles = $xpath->query("//channel/item"); + + foreach ($articles as $article) { + array_push($this->items, new FeedItem_RSS($article, $this->doc, $this->xpath)); + } + + break; + case $this::FEED_RDF: + $xpath->registerNamespace('rssfake', 'http://purl.org/rss/1.0/'); + + $title = $xpath->query("//rssfake:channel/rssfake:title")->item(0); + + if ($title) { + $this->title = $title->nodeValue; + } + + $link = $xpath->query("//rssfake:channel/rssfake:link")->item(0); + + if ($link) { + $this->link = $link->nodeValue; + } + + $articles = $xpath->query("//rssfake:item"); + + foreach ($articles as $article) { + array_push($this->items, new FeedItem_RSS($article, $this->doc, $this->xpath)); + } + + break; + + } + } else { + $this->error = "Unknown/unsupported feed type"; + return; + } + } + + function format_error($error) { + if ($error) { + return sprintf("LibXML error %s at line %d (column %d): %s", + $error->code, $error->line, $error->column, + $error->message); + } else { + return ""; + } + } + + function error() { + return $this->error; + } + + function get_link() { + return $this->link; + } + + function get_title() { + return $this->title; + } + + function get_items() { + return $this->items; + } + + function get_links($rel) { + $rv = array(); + + switch ($this->type) { + case $this::FEED_ATOM: + $links = $this->xpath->query("//atom:feed/atom:link"); + + foreach ($links as $link) { + if (!$rel || $link->hasAttribute('rel') && $link->getAttribute('rel') == $rel) { + array_push($rv, $link->getAttribute('href')); + } + } + break; + case $this::FEED_RSS: + $links = $this->xpath->query("//channel/link"); + foreach ($links as $link) { + if (!$rel || $link->hasAttribute('rel') && $link->getAttribute('rel') == $rel) { + array_push($rv, $link->getAttribute('href')); + } + } + break; + } + + return $rv; + } +} ?> diff --git a/classes/feeds.php b/classes/feeds.php index 6427559e1..f499fe9a6 100644 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -9,21 +9,9 @@ class Feeds extends Handler_Protected { return array_search($method, $csrf_ignored) !== false; } - private function make_gradient($end, $class) { - $start = $class == "even" ? "#f0f0f0" : "#ffffff"; - - return "style='background: linear-gradient(left , $start 6%, $end 100%); - background: -o-linear-gradient(left , $start 6%, $end 100%); - background: -moz-linear-gradient(left , $start 6%, $end 100%); - background: -webkit-linear-gradient(left , $start 6%, $end 100%); - background: -ms-linear-gradient(left , $start 6%, $end 100%); - background: -webkit-gradient(linear, left top, right top, - color-stop(0.06, $start), color-stop(1, $end));'"; - } - private function format_headline_subtoolbar($feed_site_url, $feed_title, $feed_id, $is_cat, $search, - $search_mode, $view_mode, $error) { + $search_mode, $view_mode, $error, $feed_last_updated) { $page_prev_link = "viewFeedGoPage(-1)"; $page_next_link = "viewFeedGoPage(1)"; @@ -61,11 +49,15 @@ class Feeds extends Handler_Protected { // right part $reply .= "<span class='r'>"; + $reply .= "<span id='selected_prompt'></span>"; $reply .= "<span id='feed_title'>"; if ($feed_site_url) { + $last_updated = T_sprintf("Last updated: %s", + $feed_last_updated); + $target = "target=\"_blank\""; - $reply .= "<a title=\"".__("Visit the website")."\" $target href=\"$feed_site_url\">". + $reply .= "<a title=\"$last_updated\" $target href=\"$feed_site_url\">". truncate_string($feed_title,30)."</a>"; if ($error) { @@ -119,14 +111,12 @@ class Feeds extends Handler_Protected { } - global $pluginhost; - - if ($pluginhost->get_plugin("mail")) { + if (PluginHost::getInstance()->get_plugin("mail")) { $reply .= "<option value=\"emailArticle(false)\">".__('Forward by email'). "</option>"; } - if ($pluginhost->get_plugin("mailto")) { + if (PluginHost::getInstance()->get_plugin("mailto")) { $reply .= "<option value=\"mailtoArticle(false)\">".__('Forward by email'). "</option>"; } @@ -143,7 +133,7 @@ class Feeds extends Handler_Protected { //$reply .= "</h2"; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_HEADLINE_TOOLBAR_BUTTON) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HEADLINE_TOOLBAR_BUTTON) as $p) { echo $p->hook_headline_toolbar_button($feed_id, $is_cat); } @@ -161,6 +151,8 @@ class Feeds extends Handler_Protected { $reply = array(); + $rgba_cache = array(); + $timing_info = microtime(true); $topmost_article_ids = array(); @@ -173,62 +165,60 @@ class Feeds extends Handler_Protected { if ($method == "ForceUpdate" && $feed > 0 && is_numeric($feed)) { // Update the feed if required with some basic flood control - $result = db_query($this->link, + $result = $this->dbh->query( "SELECT cache_images,".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated FROM ttrss_feeds WHERE id = '$feed'"); - if (db_num_rows($result) != 0) { - $last_updated = strtotime(db_fetch_result($result, 0, "last_updated")); - $cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images")); + if ($this->dbh->num_rows($result) != 0) { + $last_updated = strtotime($this->dbh->fetch_result($result, 0, "last_updated")); + $cache_images = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "cache_images")); if (!$cache_images && time() - $last_updated > 120 || isset($_REQUEST['DevForceUpdate'])) { include "rssfuncs.php"; - update_rss_feed($this->link, $feed, true, true); + update_rss_feed($feed, true, true); } else { - db_query($this->link, "UPDATE ttrss_feeds SET last_updated = '1970-01-01', last_update_started = '1970-01-01' + $this->dbh->query("UPDATE ttrss_feeds SET last_updated = '1970-01-01', last_update_started = '1970-01-01' WHERE id = '$feed'"); } } } if ($method_split[0] == "MarkAllReadGR") { - catchup_feed($this->link, $method_split[1], false); + catchup_feed($method_split[1], false); } // FIXME: might break tag display? if (is_numeric($feed) && $feed > 0 && !$cat_view) { - $result = db_query($this->link, + $result = $this->dbh->query( "SELECT id FROM ttrss_feeds WHERE id = '$feed' LIMIT 1"); - if (db_num_rows($result) == 0) { + if ($this->dbh->num_rows($result) == 0) { $reply['content'] = "<div align='center'>".__('Feed not found.')."</div>"; } } - @$search = db_escape_string($this->link, $_REQUEST["query"]); + @$search = $this->dbh->escape_string($_REQUEST["query"]); if ($search) { $disable_cache = true; } - @$search_mode = db_escape_string($this->link, $_REQUEST["search_mode"]); + @$search_mode = $this->dbh->escape_string($_REQUEST["search_mode"]); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("H0", $timing_info); // error_log("format_headlines_list: [" . $feed . "] method [" . $method . "]"); - if( $search_mode == '' && $method != '' ){ + if($search_mode == '' && $method != '' ){ $search_mode = $method; } // error_log("search_mode: " . $search_mode); if (!$cat_view && is_numeric($feed) && $feed < PLUGIN_FEED_BASE_INDEX && $feed > LABEL_BASE_INDEX) { - global $pluginhost; - - $handler = $pluginhost->get_feed_handler( + $handler = PluginHost::getInstance()->get_feed_handler( PluginHost::feed_to_pfeed_id($feed)); - // function queryFeedHeadlines($link, $feed, $limit, $view_mode, $cat_view, $search, $search_mode, $override_order = false, $offset = 0, $owner_uid = 0, $filter = false, $since_id = 0, $include_children = false, $ignore_vfeed_group = false) { + // function queryFeedHeadlines($feed, $limit, $view_mode, $cat_view, $search, $search_mode, $override_order = false, $offset = 0, $owner_uid = 0, $filter = false, $since_id = 0, $include_children = false, $ignore_vfeed_group = false) { if ($handler) { $options = array( @@ -249,7 +239,7 @@ class Feeds extends Handler_Protected { } } else { - $qfh_ret = queryFeedHeadlines($this->link, $feed, $limit, $view_mode, $cat_view, + $qfh_ret = queryFeedHeadlines($feed, $limit, $view_mode, $cat_view, $search, $search_mode, $override_order, $offset, 0, false, 0, $include_children); } @@ -260,51 +250,48 @@ class Feeds extends Handler_Protected { $feed_title = $qfh_ret[1]; $feed_site_url = $qfh_ret[2]; $last_error = $qfh_ret[3]; + $last_updated = strpos($qfh_ret[4], '1970-') === FALSE ? + make_local_datetime($qfh_ret[4], false) : __("Never"); $vgroup_last_feed = $vgr_last_feed; $reply['toolbar'] = $this->format_headline_subtoolbar($feed_site_url, $feed_title, $feed, $cat_view, $search, $search_mode, $view_mode, - $last_error); + $last_error, $last_updated); - $headlines_count = db_num_rows($result); + $headlines_count = $this->dbh->num_rows($result); - /* if (get_pref($this->link, 'COMBINED_DISPLAY_MODE')) { + /* if (get_pref('COMBINED_DISPLAY_MODE')) { $button_plugins = array(); foreach (explode(",", ARTICLE_BUTTON_PLUGINS) as $p) { $pclass = "button_" . trim($p); if (class_exists($pclass)) { - $plugin = new $pclass($link); + $plugin = new $pclass(); array_push($button_plugins, $plugin); } } } */ - global $pluginhost; - - if (db_num_rows($result) > 0) { + if ($this->dbh->num_rows($result) > 0) { $lnum = $offset; $num_unread = 0; $cur_feed_title = ''; - $fresh_intl = get_pref($this->link, "FRESH_ARTICLE_MAX_AGE") * 60 * 60; + $fresh_intl = get_pref("FRESH_ARTICLE_MAX_AGE") * 60 * 60; if ($_REQUEST["debug"]) $timing_info = print_checkpoint("PS", $timing_info); - $expand_cdm = get_pref($this->link, 'CDM_EXPANDED'); - - while ($line = db_fetch_assoc($result)) { - $class = ($lnum % 2) ? "even" : "odd"; + $expand_cdm = get_pref('CDM_EXPANDED'); + while ($line = $this->dbh->fetch_assoc($result)) { $id = $line["id"]; $feed_id = $line["feed_id"]; $label_cache = $line["label_cache"]; $labels = false; - $label_row_style = ""; if ($label_cache) { $label_cache = json_decode($label_cache, true); @@ -317,23 +304,7 @@ class Feeds extends Handler_Protected { } } - if (!is_array($labels)) $labels = get_article_labels($this->link, $id); - - if (count($labels) > 0) { - for ($i = 0; $i < min(4, count($labels)); $i++) { - $bg = rgb2hsl(_color_unpack($labels[$i][3])); - - if ($bg && $bg[1] > 0) { - $bg[1] = 0.1; - $bg[2] = 1; - - $bg = _color_pack(hsl2rgb($bg)); - $label_row_style = $this->make_gradient($bg, $class);; - - break; - } - } - } + if (!is_array($labels)) $labels = get_article_labels($id); $labels_str = "<span id=\"HLLCTR-$id\">"; $labels_str .= format_article_labels($labels, $id); @@ -343,6 +314,8 @@ class Feeds extends Handler_Protected { array_push($topmost_article_ids, $id); } + $class = ""; + if (sql_bool_to_bool($line["unread"])) { $class .= " Unread"; ++$num_unread; @@ -383,13 +356,13 @@ class Feeds extends Handler_Protected { # $content_link = "<a href=\"javascript:viewContentUrl('".$line["link"]."');\">" . # $line["title"] . "</a>"; - $updated_fmt = make_local_datetime($this->link, $line["updated"], false); + $updated_fmt = make_local_datetime($line["updated"], false); $date_entered_fmt = T_sprintf("Imported at %s", - make_local_datetime($this->link, $line["date_entered"], false)); + make_local_datetime($line["date_entered"], false)); - if (get_pref($this->link, 'SHOW_CONTENT_PREVIEW')) { + if (get_pref('SHOW_CONTENT_PREVIEW')) { $content_preview = truncate_string(strip_tags($line["content_preview"]), - 100); + 250); } $score = $line["score"]; @@ -414,7 +387,7 @@ class Feeds extends Handler_Protected { $entry_author = $line["author"]; if ($entry_author) { - $entry_author = " - $entry_author"; + $entry_author = " — $entry_author"; } $has_feed_icon = feed_has_icon($feed_id); @@ -427,9 +400,37 @@ class Feeds extends Handler_Protected { $entry_site_url = $line["site_url"]; - if (!get_pref($this->link, 'COMBINED_DISPLAY_MODE')) { + //setting feed headline background color, needs to change text color based on dark/light + $fav_color = $line['favicon_avg_color']; + + require_once "colors.php"; + + if ($fav_color && $fav_color != 'fail') { + if (!isset($rgba_cache[$feed_id])) { + $rgba_cache[$feed_id] = join(",", _color_unpack($fav_color)); + } + + $rgba = $rgba_cache[$feed_id]; + + if (sql_bool_to_bool($line["unread"])) + $endalpha = '0.3'; + else + $endalpha = '0.1'; + + // W3C definition seems to work in FF and Chrome + $row_background = "background-image : linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba($rgba, $endalpha) 100%);"; - if (get_pref($this->link, 'VFEED_GROUP_BY_FEED')) { + /* $row_background = "background-image : -moz-linear-gradient(left, rgba(255, 255, 255, 0) 50%, rgba($rgba, 0.2) 100%);". + "background-image : linear-gradient(to right, rgba(255, 255, 255, 0) 50%, rgba($rgba, 0.2) 100%);"; + "background-image : -webkit-gradient(linear, left top, right top, color-stop(50%, rgba(255,255,255,0)), + color-stop(100%, rgba($rgba, 0.2)));"; */ + } else { + $row_background = ""; + } + + if (!get_pref('COMBINED_DISPLAY_MODE')) { + + if (get_pref('VFEED_GROUP_BY_FEED')) { if ($feed_id != $vgroup_last_feed && $line["feed_title"]) { $cur_feed_title = $line["feed_title"]; @@ -450,7 +451,7 @@ class Feeds extends Handler_Protected { $mouseover_attrs = "onmouseover='postMouseIn(event, $id)' onmouseout='postMouseOut($id)'"; - $reply['content'] .= "<div class='hl $class' id='RROW-$id' $label_row_style $mouseover_attrs>"; + $reply['content'] .= "<div class='hl $class' id='RROW-$id' $mouseover_attrs style='$row_background'>"; $reply['content'] .= "<div class='hlLeft'>"; @@ -470,7 +471,7 @@ class Feeds extends Handler_Protected { onclick=\"\">" . truncate_string($line["title"], 200); - if (get_pref($this->link, 'SHOW_CONTENT_PREVIEW')) { + if (get_pref('SHOW_CONTENT_PREVIEW')) { if ($content_preview) { $reply['content'] .= "<span class=\"contentPreview\"> - $content_preview</span>"; } @@ -484,7 +485,7 @@ class Feeds extends Handler_Protected { $reply['content'] .= "<span class=\"hlUpdated\">"; - if (!get_pref($this->link, 'VFEED_GROUP_BY_FEED')) { + if (!get_pref('VFEED_GROUP_BY_FEED')) { if (@$line["feed_title"]) { $reply['content'] .= "<div class=\"hlFeed\"> <a href=\"#\" onclick=\"viewfeed($feed_id)\">". @@ -500,7 +501,7 @@ class Feeds extends Handler_Protected { $reply['content'] .= $score_pic; - if ($line["feed_title"] && !get_pref($this->link, 'VFEED_GROUP_BY_FEED')) { + if ($line["feed_title"] && !get_pref('VFEED_GROUP_BY_FEED')) { $reply['content'] .= "<span onclick=\"viewfeed($feed_id)\" style=\"cursor : pointer\" @@ -513,17 +514,19 @@ class Feeds extends Handler_Protected { } else { - $line["tags"] = get_article_tags($this->link, $id, $_SESSION["uid"], $line["tag_cache"]); - unset($line["tag_cache"]); + if ($line["tag_cache"]) + $tags = explode(",", $line["tag_cache"]); + else + $tags = false; - $line["content"] = sanitize($this->link, $line["content_preview"], + $line["content"] = sanitize($line["content_preview"], sql_bool_to_bool($line['hide_images']), false, $entry_site_url); - foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE_CDM) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_CDM) as $p) { $line = $p->hook_render_article_cdm($line); } - if (get_pref($this->link, 'VFEED_GROUP_BY_FEED') && $line["feed_title"]) { + if (get_pref('VFEED_GROUP_BY_FEED') && $line["feed_title"]) { if ($feed_id != $vgroup_last_feed) { $cur_feed_title = $line["feed_title"]; @@ -554,10 +557,9 @@ class Feeds extends Handler_Protected { $expanded_class = $expand_cdm ? "expanded" : "expandable"; $reply['content'] .= "<div class=\"cdm $expanded_class $class\" - id=\"RROW-$id\" $mouseover_attrs'>"; - - $reply['content'] .= "<div class=\"cdmHeader\">"; + id=\"RROW-$id\" $mouseover_attrs>"; + $reply['content'] .= "<div class=\"cdmHeader\" style=\"$row_background\">"; $reply['content'] .= "<div style=\"vertical-align : middle\">"; $reply['content'] .= "<input dojoType=\"dijit.form.CheckBox\" @@ -593,7 +595,7 @@ class Feeds extends Handler_Protected { id=\"CEXC-$id\" class=\"cdmExcerpt\"> - $content_preview</span>"; $reply['content'] .= "</span>"; - if (!get_pref($this->link, 'VFEED_GROUP_BY_FEED')) { + if (!get_pref('VFEED_GROUP_BY_FEED')) { if (@$line["feed_title"]) { $reply['content'] .= "<div class=\"hlFeed\"> <a href=\"#\" onclick=\"viewfeed($feed_id)\">". @@ -608,7 +610,7 @@ class Feeds extends Handler_Protected { $reply['content'] .= "<div style=\"vertical-align : middle\">"; $reply['content'] .= "$score_pic"; - if (!get_pref($this->link, "VFEED_GROUP_BY_FEED") && $line["feed_title"]) { + if (!get_pref("VFEED_GROUP_BY_FEED") && $line["feed_title"]) { $reply['content'] .= "<span style=\"cursor : pointer\" title=\"".htmlspecialchars($line["feed_title"])."\" onclick=\"viewfeed($feed_id)\">$feed_icon_img</span>"; @@ -627,22 +629,21 @@ class Feeds extends Handler_Protected { } $reply['content'] .= "</div>"; - $reply['content'] .= "<div class=\"cdmContentInner\">"; if ($line["orig_feed_id"]) { - $tmp_result = db_query($this->link, "SELECT * FROM ttrss_archived_feeds + $tmp_result = $this->dbh->query("SELECT * FROM ttrss_archived_feeds WHERE id = ".$line["orig_feed_id"]); - if (db_num_rows($tmp_result) != 0) { + if ($this->dbh->num_rows($tmp_result) != 0) { $reply['content'] .= "<div clear='both'>"; $reply['content'] .= __("Originally from:"); $reply['content'] .= " "; - $tmp_line = db_fetch_assoc($tmp_result); + $tmp_line = $this->dbh->fetch_assoc($tmp_result); $reply['content'] .= "<a target='_blank' href=' " . htmlspecialchars($tmp_line['site_url']) . "'>" . @@ -672,22 +673,22 @@ class Feeds extends Handler_Protected { $always_display_enclosures = sql_bool_to_bool($line["always_display_enclosures"]); - $reply['content'] .= format_article_enclosures($this->link, $id, $always_display_enclosures, $line["content"], sql_bool_to_bool($line["hide_images"])); + $reply['content'] .= format_article_enclosures($id, $always_display_enclosures, $line["content"], sql_bool_to_bool($line["hide_images"])); $reply['content'] .= "</div>"; $reply['content'] .= "<div class=\"cdmFooter\">"; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_LEFT_BUTTON) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) { $reply['content'] .= $p->hook_article_left_button($line); } - $tags_str = format_tags_string($line["tags"], $id); + $tags_str = format_tags_string($tags, $id); $reply['content'] .= "<img src='images/tag.png' alt='Tags' title='Tags'> <span id=\"ATSTR-$id\">$tags_str</span> <a title=\"".__('Edit tags for this article')."\" - href=\"#\" onclick=\"editArticleTags($id, $feed_id, true)\">(+)</a>"; + href=\"#\" onclick=\"editArticleTags($id)\">(+)</a>"; $num_comments = $line["num_comments"]; $entry_comments = ""; @@ -712,7 +713,7 @@ class Feeds extends Handler_Protected { // $reply['content'] .= "$marked_pic"; // $reply['content'] .= "$published_pic"; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_BUTTON) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) { $reply['content'] .= $p->hook_article_button($line); } @@ -756,18 +757,18 @@ class Feeds extends Handler_Protected { $reply['content'] .= "<p><span class=\"insensitive\">"; - $result = db_query($this->link, "SELECT ".SUBSTRING_FOR_DATE."(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds + $result = $this->dbh->query("SELECT ".SUBSTRING_FOR_DATE."(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds WHERE owner_uid = " . $_SESSION['uid']); - $last_updated = db_fetch_result($result, 0, "last_updated"); - $last_updated = make_local_datetime($this->link, $last_updated, false); + $last_updated = $this->dbh->fetch_result($result, 0, "last_updated"); + $last_updated = make_local_datetime($last_updated, false); $reply['content'] .= sprintf(__("Feeds last updated at %s"), $last_updated); - $result = db_query($this->link, "SELECT COUNT(id) AS num_errors + $result = $this->dbh->query("SELECT COUNT(id) AS num_errors FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]); - $num_errors = db_fetch_result($result, 0, "num_errors"); + $num_errors = $this->dbh->fetch_result($result, 0, "num_errors"); if ($num_errors > 0) { $reply['content'] .= "<br/>"; @@ -785,9 +786,9 @@ class Feeds extends Handler_Protected { } function catchupAll() { - db_query($this->link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET last_read = NOW(), unread = false WHERE unread = true AND owner_uid = " . $_SESSION["uid"]); - ccache_zero_all($this->link, $_SESSION["uid"]); + ccache_zero_all($_SESSION["uid"]); } function view() { @@ -797,17 +798,17 @@ class Feeds extends Handler_Protected { if ($_REQUEST["debug"]) $timing_info = print_checkpoint("0", $timing_info); - $omode = db_escape_string($this->link, $_REQUEST["omode"]); + $omode = $this->dbh->escape_string($_REQUEST["omode"]); - $feed = db_escape_string($this->link, $_REQUEST["feed"]); - $method = db_escape_string($this->link, $_REQUEST["m"]); - $view_mode = db_escape_string($this->link, $_REQUEST["view_mode"]); + $feed = $this->dbh->escape_string($_REQUEST["feed"]); + $method = $this->dbh->escape_string($_REQUEST["m"]); + $view_mode = $this->dbh->escape_string($_REQUEST["view_mode"]); $limit = 30; @$cat_view = $_REQUEST["cat"] == "true"; - @$next_unread_feed = db_escape_string($this->link, $_REQUEST["nuf"]); - @$offset = db_escape_string($this->link, $_REQUEST["skip"]); - @$vgroup_last_feed = db_escape_string($this->link, $_REQUEST["vgrlf"]); - $order_by = db_escape_string($this->link, $_REQUEST["order_by"]); + @$next_unread_feed = $this->dbh->escape_string($_REQUEST["nuf"]); + @$offset = $this->dbh->escape_string($_REQUEST["skip"]); + @$vgroup_last_feed = $this->dbh->escape_string($_REQUEST["vgrlf"]); + $order_by = $this->dbh->escape_string($_REQUEST["order_by"]); if (is_numeric($feed)) $feed = (int) $feed; @@ -815,7 +816,7 @@ class Feeds extends Handler_Protected { * when there's nothing to load - e.g. no stuff in fresh feed */ if ($feed == -5) { - print json_encode($this->generate_dashboard_feed($this->link)); + print json_encode($this->generate_dashboard_feed()); return; } @@ -823,18 +824,18 @@ class Feeds extends Handler_Protected { if ($feed < LABEL_BASE_INDEX) { $label_feed = feed_to_label_id($feed); - $result = db_query($this->link, "SELECT id FROM ttrss_labels2 WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_labels2 WHERE id = '$label_feed' AND owner_uid = " . $_SESSION['uid']); } else if (!$cat_view && is_numeric($feed) && $feed > 0) { - $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE id = '$feed' AND owner_uid = " . $_SESSION['uid']); } else if ($cat_view && is_numeric($feed) && $feed > 0) { - $result = db_query($this->link, "SELECT id FROM ttrss_feed_categories WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feed_categories WHERE id = '$feed' AND owner_uid = " . $_SESSION['uid']); } - if ($result && db_num_rows($result) == 0) { - print json_encode($this->generate_error_feed($this->link, __("Feed not found."))); + if ($result && $this->dbh->num_rows($result) == 0) { + print json_encode($this->generate_error_feed(__("Feed not found."))); return; } @@ -842,21 +843,21 @@ class Feeds extends Handler_Protected { * so for performance reasons we don't do that here */ if ($feed >= 0) { - ccache_update($this->link, $feed, $_SESSION["uid"], $cat_view); + ccache_update($feed, $_SESSION["uid"], $cat_view); } - set_pref($this->link, "_DEFAULT_VIEW_MODE", $view_mode); - set_pref($this->link, "_DEFAULT_VIEW_ORDER_BY", $order_by); + set_pref("_DEFAULT_VIEW_MODE", $view_mode); + set_pref("_DEFAULT_VIEW_ORDER_BY", $order_by); /* bump login timestamp if needed */ if (time() - $_SESSION["last_login_update"] > 3600) { - db_query($this->link, "UPDATE ttrss_users SET last_login = NOW() WHERE id = " . + $this->dbh->query("UPDATE ttrss_users SET last_login = NOW() WHERE id = " . $_SESSION["uid"]); $_SESSION["last_login_update"] = time(); } if (!$cat_view && is_numeric($feed) && $feed > 0) { - db_query($this->link, "UPDATE ttrss_feeds SET last_viewed = NOW() + $this->dbh->query("UPDATE ttrss_feeds SET last_viewed = NOW() WHERE id = '$feed' AND owner_uid = ".$_SESSION["uid"]); } @@ -906,13 +907,13 @@ class Feeds extends Handler_Protected { if ($_REQUEST["debug"]) $timing_info = print_checkpoint("30", $timing_info); - $reply['runtime-info'] = make_runtime_info($this->link); + $reply['runtime-info'] = make_runtime_info(); print json_encode($reply); } - private function generate_dashboard_feed($link) { + private function generate_dashboard_feed() { $reply = array(); $reply['headlines']['id'] = -5; @@ -923,18 +924,18 @@ class Feeds extends Handler_Protected { $reply['headlines']['content'] .= "<p><span class=\"insensitive\">"; - $result = db_query($link, "SELECT ".SUBSTRING_FOR_DATE."(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds + $result = $this->dbh->query("SELECT ".SUBSTRING_FOR_DATE."(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds WHERE owner_uid = " . $_SESSION['uid']); - $last_updated = db_fetch_result($result, 0, "last_updated"); - $last_updated = make_local_datetime($link, $last_updated, false); + $last_updated = $this->dbh->fetch_result($result, 0, "last_updated"); + $last_updated = make_local_datetime($last_updated, false); $reply['headlines']['content'] .= sprintf(__("Feeds last updated at %s"), $last_updated); - $result = db_query($link, "SELECT COUNT(id) AS num_errors + $result = $this->dbh->query("SELECT COUNT(id) AS num_errors FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]); - $num_errors = db_fetch_result($result, 0, "num_errors"); + $num_errors = $this->dbh->fetch_result($result, 0, "num_errors"); if ($num_errors > 0) { $reply['headlines']['content'] .= "<br/>"; @@ -951,7 +952,7 @@ class Feeds extends Handler_Protected { return $reply; } - private function generate_error_feed($link, $error) { + private function generate_error_feed($error) { $reply = array(); $reply['headlines']['id'] = -6; @@ -985,9 +986,9 @@ class Feeds extends Handler_Protected { print "<hr/>"; - if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + if (get_pref('ENABLE_FEED_CATS')) { print __('Place in category:') . " "; - print_feed_cat_select($this->link, "cat", false, 'dojoType="dijit.form.Select"'); + print_feed_cat_select("cat", false, 'dojoType="dijit.form.Select"'); } print "</div>"; @@ -1043,7 +1044,7 @@ class Feeds extends Handler_Protected { function feedBrowser() { if (defined('_DISABLE_FEED_BROWSER') && _DISABLE_FEED_BROWSER) return; - $browser_search = db_escape_string($this->link, $_REQUEST["search"]); + $browser_search = $this->dbh->escape_string($_REQUEST["search"]); print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"updateFeedBrowser\">"; @@ -1080,7 +1081,7 @@ class Feeds extends Handler_Protected { require_once "feedbrowser.php"; print "<ul class='browseFeedList' id='browseFeedList'>"; - print make_feed_browser($this->link, $search, 25); + print make_feed_browser($search, 25); print "</ul>"; print "<div align='center'> @@ -1091,7 +1092,7 @@ class Feeds extends Handler_Protected { } function search() { - $this->params = explode(":", db_escape_string($this->link, $_REQUEST["param"]), 2); + $this->params = explode(":", $this->dbh->escape_string($_REQUEST["param"]), 2); $active_feed_id = sprintf("%d", $this->params[0]); $is_cat = $this->params[1] != "false"; @@ -1109,12 +1110,12 @@ class Feeds extends Handler_Protected { print "<select name=\"search_mode\" dojoType=\"dijit.form.Select\"> <option value=\"all_feeds\">".__('All feeds')."</option>"; - $feed_title = getFeedTitle($this->link, $active_feed_id); + $feed_title = getFeedTitle($active_feed_id); if (!$is_cat) { - $feed_cat_title = getFeedCatTitle($this->link, $active_feed_id); + $feed_cat_title = getFeedCatTitle($active_feed_id); } else { - $feed_cat_title = getCategoryTitle($this->link, $active_feed_id); + $feed_cat_title = getCategoryTitle($active_feed_id); } if ($active_feed_id && !$is_cat) { @@ -1127,7 +1128,7 @@ class Feeds extends Handler_Protected { $cat_preselected = "selected=\"1\""; } - if (get_pref($this->link, 'ENABLE_FEED_CATS') && ($active_feed_id > 0 || $is_cat)) { + if (get_pref('ENABLE_FEED_CATS') && ($active_feed_id > 0 || $is_cat)) { print "<option $cat_preselected value=\"this_cat\">$feed_cat_title</option>"; } else { //print "<option disabled>".__('This category')."</option>"; diff --git a/classes/handler.php b/classes/handler.php index 68b16eac1..b20932045 100644 --- a/classes/handler.php +++ b/classes/handler.php @@ -1,10 +1,10 @@ <?php class Handler implements IHandler { - protected $link; + protected $dbh; protected $args; - function __construct($link, $args) { - $this->link = $link; + function __construct($args) { + $this->dbh = Db::get(); $this->args = $args; } diff --git a/classes/handler/public.php b/classes/handler/public.php index e95f118bb..7fa744107 100644 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -21,15 +21,15 @@ class Handler_Public extends Handler { else if ($feed == -1) $date_sort_field = "last_marked DESC"; - $qfh_ret = queryFeedHeadlines($this->link, $feed, + $qfh_ret = queryFeedHeadlines($feed, 1, $view_mode, $is_cat, $search, $search_mode, $date_sort_field, $offset, $owner_uid, false, 0, false, true); $result = $qfh_ret[0]; - if (db_num_rows($result) != 0) { - $ts = strtotime(db_fetch_result($result, 0, "date_entered")); + if ($this->dbh->num_rows($result) != 0) { + $ts = strtotime($this->dbh->fetch_result($result, 0, "date_entered")); if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $ts) { @@ -41,7 +41,7 @@ class Handler_Public extends Handler { header("Last-Modified: $last_modified", true); } - $qfh_ret = queryFeedHeadlines($this->link, $feed, + $qfh_ret = queryFeedHeadlines($feed, $limit, $view_mode, $is_cat, $search, $search_mode, $date_sort_field, $offset, $owner_uid, false, 0, false, true); @@ -54,7 +54,7 @@ class Handler_Public extends Handler { $feed_self_url = get_self_url_prefix() . "/public.php?op=rss&id=-2&key=" . - get_feed_access_key($this->link, -2, false, $owner_uid); + get_feed_access_key(-2, false, $owner_uid); if (!$feed_site_url) $feed_site_url = get_self_url_prefix(); @@ -74,7 +74,7 @@ class Handler_Public extends Handler { $tpl->setVariable('SELF_URL', htmlspecialchars(get_self_url_prefix()), true); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $tpl->setVariable('ARTICLE_ID', htmlspecialchars($line['link']), true); $tpl->setVariable('ARTICLE_LINK', htmlspecialchars($line['link']), true); @@ -82,7 +82,7 @@ class Handler_Public extends Handler { $tpl->setVariable('ARTICLE_EXCERPT', truncate_string(strip_tags($line["content_preview"]), 100, '...'), true); - $content = sanitize($this->link, $line["content_preview"], false, $owner_uid); + $content = sanitize($line["content_preview"], false, $owner_uid); if ($line['note']) { $content = "<div style=\"$note_style\">Article note: " . $line['note'] . "</div>" . @@ -99,14 +99,14 @@ class Handler_Public extends Handler { $tpl->setVariable('ARTICLE_AUTHOR', htmlspecialchars($line['author']), true); - $tags = get_article_tags($this->link, $line["id"], $owner_uid); + $tags = get_article_tags($line["id"], $owner_uid); foreach ($tags as $tag) { $tpl->setVariable('ARTICLE_CATEGORY', htmlspecialchars($tag), true); $tpl->addBlock('category'); } - $enclosures = get_article_enclosures($this->link, $line["id"]); + $enclosures = get_article_enclosures($line["id"]); foreach ($enclosures as $e) { $type = htmlspecialchars($e['content_type']); @@ -151,20 +151,20 @@ class Handler_Public extends Handler { $feed['articles'] = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $article = array(); $article['id'] = $line['link']; $article['link'] = $line['link']; $article['title'] = $line['title']; $article['excerpt'] = truncate_string(strip_tags($line["content_preview"]), 100, '...'); - $article['content'] = sanitize($this->link, $line["content_preview"], false, $owner_uid); + $article['content'] = sanitize($line["content_preview"], false, $owner_uid); $article['updated'] = date('c', strtotime($line["updated"])); if ($line['note']) $article['note'] = $line['note']; if ($article['author']) $article['author'] = $line['author']; - $tags = get_article_tags($this->link, $line["id"], $owner_uid); + $tags = get_article_tags($line["id"], $owner_uid); if (count($tags) > 0) { $article['tags'] = array(); @@ -174,7 +174,7 @@ class Handler_Public extends Handler { } } - $enclosures = get_article_enclosures($this->link, $line["id"]); + $enclosures = get_article_enclosures($line["id"]); if (count($enclosures) > 0) { $article['enclosures'] = array(); @@ -201,19 +201,19 @@ class Handler_Public extends Handler { } function getUnread() { - $login = db_escape_string($this->link, $_REQUEST["login"]); + $login = $this->dbh->escape_string($_REQUEST["login"]); $fresh = $_REQUEST["fresh"] == "1"; - $result = db_query($this->link, "SELECT id FROM ttrss_users WHERE login = '$login'"); + $result = $this->dbh->query("SELECT id FROM ttrss_users WHERE login = '$login'"); - if (db_num_rows($result) == 1) { - $uid = db_fetch_result($result, 0, "id"); + if ($this->dbh->num_rows($result) == 1) { + $uid = $this->dbh->fetch_result($result, 0, "id"); - print getGlobalUnread($this->link, $uid); + print getGlobalUnread($uid); if ($fresh) { print ";"; - print getFeedArticles($this->link, -3, false, true, $uid); + print getFeedArticles(-3, false, true, $uid); } } else { @@ -223,16 +223,16 @@ class Handler_Public extends Handler { } function getProfiles() { - $login = db_escape_string($this->link, $_REQUEST["login"]); + $login = $this->dbh->escape_string($_REQUEST["login"]); - $result = db_query($this->link, "SELECT * FROM ttrss_settings_profiles,ttrss_users + $result = $this->dbh->query("SELECT * FROM ttrss_settings_profiles,ttrss_users WHERE ttrss_users.id = ttrss_settings_profiles.owner_uid AND login = '$login' ORDER BY title"); print "<select dojoType='dijit.form.Select' style='width : 220px; margin : 0px' name='profile'>"; print "<option value='0'>" . __("Default profile") . "</option>"; - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $id = $line["id"]; $title = $line["title"]; @@ -243,9 +243,9 @@ class Handler_Public extends Handler { } function pubsub() { - $mode = db_escape_string($this->link, $_REQUEST['hub_mode']); - $feed_id = (int) db_escape_string($this->link, $_REQUEST['id']); - $feed_url = db_escape_string($this->link, $_REQUEST['hub_topic']); + $mode = $this->dbh->escape_string($_REQUEST['hub_mode']); + $feed_id = (int) $this->dbh->escape_string($_REQUEST['id']); + $feed_url = $this->dbh->escape_string($_REQUEST['hub_topic']); if (!PUBSUBHUBBUB_ENABLED) { header('HTTP/1.0 404 Not Found'); @@ -255,17 +255,17 @@ class Handler_Public extends Handler { // TODO: implement hub_verifytoken checking - $result = db_query($this->link, "SELECT feed_url FROM ttrss_feeds + $result = $this->dbh->query("SELECT feed_url FROM ttrss_feeds WHERE id = '$feed_id'"); - if (db_num_rows($result) != 0) { + if ($this->dbh->num_rows($result) != 0) { - $check_feed_url = db_fetch_result($result, 0, "feed_url"); + $check_feed_url = $this->dbh->fetch_result($result, 0, "feed_url"); if ($check_feed_url && ($check_feed_url == $feed_url || !$feed_url)) { if ($mode == "subscribe") { - db_query($this->link, "UPDATE ttrss_feeds SET pubsub_state = 2 + $this->dbh->query("UPDATE ttrss_feeds SET pubsub_state = 2 WHERE id = '$feed_id'"); print $_REQUEST['hub_challenge']; @@ -273,7 +273,7 @@ class Handler_Public extends Handler { } else if ($mode == "unsubscribe") { - db_query($this->link, "UPDATE ttrss_feeds SET pubsub_state = 0 + $this->dbh->query("UPDATE ttrss_feeds SET pubsub_state = 0 WHERE id = '$feed_id'"); print $_REQUEST['hub_challenge']; @@ -282,9 +282,9 @@ class Handler_Public extends Handler { } else if (!$mode) { // Received update ping, schedule feed update. - //update_rss_feed($this->link, $feed_id, true, true); + //update_rss_feed($feed_id, true, true); - db_query($this->link, "UPDATE ttrss_feeds SET + $this->dbh->query("UPDATE ttrss_feeds SET last_update_started = '1970-01-01', last_updated = '1970-01-01' WHERE id = '$feed_id'"); @@ -306,18 +306,18 @@ class Handler_Public extends Handler { } function share() { - $uuid = db_escape_string($this->link, $_REQUEST["key"]); + $uuid = $this->dbh->escape_string($_REQUEST["key"]); - $result = db_query($this->link, "SELECT ref_id, owner_uid FROM ttrss_user_entries WHERE + $result = $this->dbh->query("SELECT ref_id, owner_uid FROM ttrss_user_entries WHERE uuid = '$uuid'"); - if (db_num_rows($result) != 0) { + if ($this->dbh->num_rows($result) != 0) { header("Content-Type: text/html"); - $id = db_fetch_result($result, 0, "ref_id"); - $owner_uid = db_fetch_result($result, 0, "owner_uid"); + $id = $this->dbh->fetch_result($result, 0, "ref_id"); + $owner_uid = $this->dbh->fetch_result($result, 0, "owner_uid"); - $article = format_article($this->link, $id, false, true, $owner_uid); + $article = format_article($id, false, true, $owner_uid); print_r($article['content']); @@ -328,32 +328,32 @@ class Handler_Public extends Handler { } function rss() { - $feed = db_escape_string($this->link, $_REQUEST["id"]); - $key = db_escape_string($this->link, $_REQUEST["key"]); + $feed = $this->dbh->escape_string($_REQUEST["id"]); + $key = $this->dbh->escape_string($_REQUEST["key"]); $is_cat = $_REQUEST["is_cat"] != false; - $limit = (int)db_escape_string($this->link, $_REQUEST["limit"]); - $offset = (int)db_escape_string($this->link, $_REQUEST["offset"]); + $limit = (int)$this->dbh->escape_string($_REQUEST["limit"]); + $offset = (int)$this->dbh->escape_string($_REQUEST["offset"]); - $search = db_escape_string($this->link, $_REQUEST["q"]); - $search_mode = db_escape_string($this->link, $_REQUEST["smode"]); - $view_mode = db_escape_string($this->link, $_REQUEST["view-mode"]); + $search = $this->dbh->escape_string($_REQUEST["q"]); + $search_mode = $this->dbh->escape_string($_REQUEST["smode"]); + $view_mode = $this->dbh->escape_string($_REQUEST["view-mode"]); - $format = db_escape_string($this->link, $_REQUEST['format']); + $format = $this->dbh->escape_string($_REQUEST['format']); if (!$format) $format = 'atom'; if (SINGLE_USER_MODE) { - authenticate_user($this->link, "admin", null); + authenticate_user("admin", null); } $owner_id = false; if ($key) { - $result = db_query($this->link, "SELECT owner_uid FROM + $result = $this->dbh->query("SELECT owner_uid FROM ttrss_access_keys WHERE access_key = '$key' AND feed_id = '$feed'"); - if (db_num_rows($result) == 1) - $owner_id = db_fetch_result($result, 0, "owner_uid"); + if ($this->dbh->num_rows($result) == 1) + $owner_id = $this->dbh->fetch_result($result, 0, "owner_uid"); } if ($owner_id) { @@ -367,32 +367,24 @@ class Handler_Public extends Handler { function globalUpdateFeeds() { include "rssfuncs.php"; // Update all feeds needing a update. - update_daemon_common($this->link, 0, true, false); + update_daemon_common(0, true, false); + housekeeping_common(false); - // Update feedbrowser - update_feedbrowser_cache($this->link); - - // Purge orphans and cleanup tags - purge_orphans($this->link); - - cleanup_tags($this->link, 14, 50000); - - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op); + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $op); } function sharepopup() { if (SINGLE_USER_MODE) { - login_sequence($this->link); + login_sequence(); } header('Content-Type: text/html; charset=utf-8'); print "<html><head><title>Tiny Tiny RSS</title>"; - print stylesheet_tag("utility.css"); - print javascript_tag("lib/prototype.js"); - print javascript_tag("lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls"); + stylesheet_tag("utility.css"); + javascript_tag("lib/prototype.js"); + javascript_tag("lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls"); print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/> </head><body id='sharepopup'>"; @@ -402,12 +394,12 @@ class Handler_Public extends Handler { if ($action == 'share') { - $title = db_escape_string($this->link, strip_tags($_REQUEST["title"])); - $url = db_escape_string($this->link, strip_tags($_REQUEST["url"])); - $content = db_escape_string($this->link, strip_tags($_REQUEST["content"])); - $labels = db_escape_string($this->link, strip_tags($_REQUEST["labels"])); + $title = $this->dbh->escape_string(strip_tags($_REQUEST["title"])); + $url = $this->dbh->escape_string(strip_tags($_REQUEST["url"])); + $content = $this->dbh->escape_string(strip_tags($_REQUEST["content"])); + $labels = $this->dbh->escape_string(strip_tags($_REQUEST["labels"])); - Article::create_published_article($this->link, $title, $url, $content, $labels, + Article::create_published_article($title, $url, $content, $labels, $_SESSION["uid"]); print "<script type='text/javascript'>"; @@ -486,14 +478,6 @@ class Handler_Public extends Handler { <tr><td align="right"><?php echo __("Password:") ?></td> <td align="right"><input type="password" name="password" value="<?php echo $_SESSION["fake_password"] ?>"></td></tr> - <tr><td align="right"><?php echo __("Language:") ?></td> - <td align="right"> - <?php - print_select_hash("language", $_COOKIE["ttrss_lang"], get_translations(), - "style='width : 100%''"); - - ?> - </td></tr> <tr><td colspan='2'> <button type="submit"> <?php echo __('Log in') ?></button> @@ -509,11 +493,9 @@ class Handler_Public extends Handler { } function login() { - $_SESSION["prefs_cache"] = array(); - if (!SINGLE_USER_MODE) { - $login = db_escape_string($this->link, $_POST["login"]); + $login = $this->dbh->escape_string($_POST["login"]); $password = $_POST["password"]; $remember_me = $_POST["remember_me"]; @@ -525,23 +507,25 @@ class Handler_Public extends Handler { @session_start(); - if (authenticate_user($this->link, $login, $password)) { + if (authenticate_user($login, $password)) { $_POST["password"] = ""; - $_SESSION["language"] = $_POST["language"]; - $_SESSION["ref_schema_version"] = get_schema_version($this->link, true); + if (get_schema_version() >= 120) { + $_SESSION["language"] = get_pref("USER_LANGUAGE", $_SESSION["uid"]); + } + + $_SESSION["ref_schema_version"] = get_schema_version(true); $_SESSION["bw_limit"] = !!$_POST["bw_limit"]; if ($_POST["profile"]) { - $profile = db_escape_string($this->link, $_POST["profile"]); + $profile = $this->dbh->escape_string($_POST["profile"]); - $result = db_query($this->link, "SELECT id FROM ttrss_settings_profiles + $result = $this->dbh->query("SELECT id FROM ttrss_settings_profiles WHERE id = '$profile' AND owner_uid = " . $_SESSION["uid"]); - if (db_num_rows($result) != 0) { + if ($this->dbh->num_rows($result) != 0) { $_SESSION["profile"] = $profile; - $_SESSION["prefs_cache"] = array(); } } } else { @@ -558,12 +542,12 @@ class Handler_Public extends Handler { function subscribe() { if (SINGLE_USER_MODE) { - login_sequence($this->link); + login_sequence(); } if ($_SESSION["uid"]) { - $feed_url = db_escape_string($this->link, trim($_REQUEST["feed_url"])); + $feed_url = $this->dbh->escape_string(trim($_REQUEST["feed_url"])); header('Content-Type: text/html; charset=utf-8'); print "<html> @@ -577,7 +561,7 @@ class Handler_Public extends Handler { alt=\"Tiny Tiny RSS\"/> <h1>".__("Subscribe to feed...")."</h1><div class='content'>"; - $rc = subscribe_to_feed($this->link, $feed_url); + $rc = subscribe_to_feed($feed_url); switch ($rc['code']) { case 0: @@ -625,10 +609,10 @@ class Handler_Public extends Handler { $tt_uri = get_self_url_prefix(); if ($rc['code'] <= 2){ - $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]); - $feed_id = db_fetch_result($result, 0, "id"); + $feed_id = $this->dbh->fetch_result($result, 0, "id"); } else { $feed_id = 0; } @@ -651,21 +635,22 @@ class Handler_Public extends Handler { print "</div></body></html>"; } else { - render_login_form($this->link); + render_login_form(); } } function subscribe2() { - $feed_url = db_escape_string($this->link, trim($_REQUEST["feed_url"])); - $cat_id = db_escape_string($this->link, $_REQUEST["cat_id"]); - $from = db_escape_string($this->link, $_REQUEST["from"]); + $feed_url = $this->dbh->escape_string(trim($_REQUEST["feed_url"])); + $cat_id = $this->dbh->escape_string($_REQUEST["cat_id"]); + $from = $this->dbh->escape_string($_REQUEST["from"]); + $feed_urls = array(); /* only read authentication information from POST */ - $auth_login = db_escape_string($this->link, trim($_POST["auth_login"])); - $auth_pass = db_escape_string($this->link, trim($_POST["auth_pass"])); + $auth_login = $this->dbh->escape_string(trim($_POST["auth_login"])); + $auth_pass = $this->dbh->escape_string(trim($_POST["auth_pass"])); - $rc = subscribe_to_feed($this->link, $feed_url, $cat_id, $auth_login, $auth_pass); + $rc = subscribe_to_feed($feed_url, $cat_id, $auth_login, $auth_pass); switch ($rc) { case 1: @@ -682,8 +667,10 @@ class Handler_Public extends Handler { break; case 4: print_notice(__("Multiple feed URLs found.")); - - $feed_urls = get_feeds_from_html($feed_url); + $contents = @fetch_file_contents($url, false, $auth_login, $auth_pass); + if (is_html($contents)) { + $feed_urls = get_feeds_from_html($url, $contents); + } break; case 5: print_error(T_sprintf("Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL.", $feed_url)); @@ -712,10 +699,10 @@ class Handler_Public extends Handler { $tt_uri = get_self_url_prefix(); if ($rc <= 2){ - $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]); - $feed_id = db_fetch_result($result, 0, "id"); + $feed_id = $this->dbh->fetch_result($result, 0, "id"); } else { $feed_id = 0; } @@ -748,8 +735,8 @@ class Handler_Public extends Handler { header('Content-Type: text/html; charset=utf-8'); print "<html><head><title>Tiny Tiny RSS</title>"; - print stylesheet_tag("utility.css"); - print javascript_tag("lib/prototype.js"); + stylesheet_tag("utility.css"); + javascript_tag("lib/prototype.js"); print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/> </head><body id='forgotpass'>"; @@ -788,9 +775,9 @@ class Handler_Public extends Handler { print "</form>"; } else if ($method == 'do') { - $login = db_escape_string($this->link, $_POST["login"]); - $email = db_escape_string($this->link, $_POST["email"]); - $test = db_escape_string($this->link, $_POST["test"]); + $login = $this->dbh->escape_string($_POST["login"]); + $email = $this->dbh->escape_string($_POST["email"]); + $test = $this->dbh->escape_string($_POST["test"]); if (($test != 4 && $test != 'four') || !$email || !$login) { print_error(__('Some of the required form parameters are missing or incorrect.')); @@ -802,13 +789,13 @@ class Handler_Public extends Handler { } else { - $result = db_query($this->link, "SELECT id FROM ttrss_users + $result = $this->dbh->query("SELECT id FROM ttrss_users WHERE login = '$login' AND email = '$email'"); - if (db_num_rows($result) != 0) { - $id = db_fetch_result($result, 0, "id"); + if ($this->dbh->num_rows($result) != 0) { + $id = $this->dbh->fetch_result($result, 0, "id"); - Pref_Users::resetUserPassword($this->link, $id, false); + Pref_Users::resetUserPassword($id, false); print "<p>"; @@ -840,7 +827,7 @@ class Handler_Public extends Handler { function dbupdate() { if (!SINGLE_USER_MODE && $_SESSION["access_level"] < 10) { $_SESSION["login_error_msg"] = __("Your access level is insufficient to run this script."); - render_login_form($link); + render_login_form(); exit; } @@ -869,7 +856,7 @@ class Handler_Public extends Handler { <?php @$op = $_REQUEST["subop"]; - $updater = new DbUpdater($this->link, DB_TYPE, SCHEMA_VERSION); + $updater = new DbUpdater(Db::get(), DB_TYPE, SCHEMA_VERSION); if ($op == "performupdate") { if ($updater->isUpdateRequired()) { @@ -933,7 +920,7 @@ class Handler_Public extends Handler { } else { - print "<h2>" . "Tiny Tiny RSS database is up to date." . "</h2>"; + print_notice("Tiny Tiny RSS database is up to date."); print "<p><form method=\"GET\" action=\"index.php\"> <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\"> diff --git a/classes/idb.php b/classes/idb.php new file mode 100644 index 000000000..16f760bf6 --- /dev/null +++ b/classes/idb.php @@ -0,0 +1,13 @@ +<?php +interface IDb { + function connect($host, $user, $pass, $db, $port); + function escape_string($s, $strip_tags = true); + function query($query, $die_on_error = true); + function fetch_assoc($result); + function num_rows($result); + function fetch_result($result, $row, $param); + function close(); + function affected_rows($result); + function last_error(); +} +?> diff --git a/classes/logger.php b/classes/logger.php new file mode 100644 index 000000000..4a9c1df82 --- /dev/null +++ b/classes/logger.php @@ -0,0 +1,65 @@ +<?php +class Logger { + private static $instance; + private $adapter; + + public static $errornames = array( + 1 => 'E_ERROR', + 2 => 'E_WARNING', + 4 => 'E_PARSE', + 8 => 'E_NOTICE', + 16 => 'E_CORE_ERROR', + 32 => 'E_CORE_WARNING', + 64 => 'E_COMPILE_ERROR', + 128 => 'E_COMPILE_WARNING', + 256 => 'E_USER_ERROR', + 512 => 'E_USER_WARNING', + 1024 => 'E_USER_NOTICE', + 2048 => 'E_STRICT', + 4096 => 'E_RECOVERABLE_ERROR', + 8192 => 'E_DEPRECATED', + 16384 => 'E_USER_DEPRECATED', + 32767 => 'E_ALL'); + + function log_error($errno, $errstr, $file, $line, $context) { + if ($errno == E_NOTICE) return false; + + if ($this->adapter) + return $this->adapter->log_error($errno, $errstr, $file, $line, $context); + else + return false; + } + + function log($string) { + if ($this->adapter) + return $this->adapter->log($string); + else + return false; + } + + private function __clone() { + // + } + + function __construct() { + switch (LOG_DESTINATION) { + case "sql": + $this->adapter = new Logger_SQL(); + break; + case "syslog": + $this->adapter = new Logger_Syslog(); + break; + default: + $this->adapter = false; + } + } + + public static function get() { + if (self::$instance == null) + self::$instance = new self(); + + return self::$instance; + } + +} +?> diff --git a/classes/logger/sql.php b/classes/logger/sql.php new file mode 100644 index 000000000..c0f8b4598 --- /dev/null +++ b/classes/logger/sql.php @@ -0,0 +1,28 @@ +<?php +class Logger_SQL { + + function log_error($errno, $errstr, $file, $line, $context) { + if (Db::get() && get_schema_version() > 117) { + + $errno = Db::get()->escape_string($errno); + $errstr = Db::get()->escape_string($errstr); + $file = Db::get()->escape_string($file); + $line = Db::get()->escape_string($line); + $context = ''; // backtrace is a lot of data which is not really critical to store + //$context = $this->dbh->escape_string(serialize($context)); + + $owner_uid = $_SESSION["uid"] ? $_SESSION["uid"] : "NULL"; + + $result = Db::get()->query( + "INSERT INTO ttrss_error_log + (errno, errstr, filename, lineno, context, owner_uid, created_at) VALUES + ($errno, '$errstr', '$file', '$line', '$context', $owner_uid, NOW())"); + + return Db::get()->affected_rows($result) != 0; + } + + return false; + } + +} +?> diff --git a/classes/logger/syslog.php b/classes/logger/syslog.php new file mode 100644 index 000000000..b8b5260a0 --- /dev/null +++ b/classes/logger/syslog.php @@ -0,0 +1,31 @@ +<?php +class Logger_Syslog { + + function log_error($errno, $errstr, $file, $line, $context) { + + switch ($errno) { + case E_ERROR: + case E_PARSE: + case E_CORE_ERROR: + case E_COMPILE_ERROR: + case E_USER_ERROR: + $priority = LOG_ERR; + break; + case E_WARNING: + case E_CORE_WARNING: + case E_COMPILE_WARNING: + case E_USER_WARNING: + $priority = LOG_WARNING; + break; + default: + $priority = LOG_INFO; + } + + $errname = Logger::$errornames[$errno] . " ($errno)"; + + syslog($priority, "[tt-rss] $errname ($file:$line) $errstr"); + + } + +} +?> diff --git a/classes/opml.php b/classes/opml.php index 7a49f757c..3f4030dea 100644 --- a/classes/opml.php +++ b/classes/opml.php @@ -32,7 +32,7 @@ class Opml extends Handler_Protected { <div class=\"floatingLogo\"><img src=\"images/logo_small.png\"></div> <h1>".__('OPML Utility')."</h1><div class='content'>"; - add_feed_category($this->link, "Imported feeds"); + add_feed_category("Imported feeds"); $this->opml_notice(__("Importing OPML...")); $this->opml_import($owner_uid); @@ -66,27 +66,27 @@ class Opml extends Handler_Protected { $out = ""; if ($cat_id) { - $result = db_query($this->link, "SELECT title FROM ttrss_feed_categories WHERE id = '$cat_id' + $result = $this->dbh->query("SELECT title FROM ttrss_feed_categories WHERE id = '$cat_id' AND owner_uid = '$owner_uid'"); - $cat_title = htmlspecialchars(db_fetch_result($result, 0, "title")); + $cat_title = htmlspecialchars($this->dbh->fetch_result($result, 0, "title")); } if ($cat_title) $out .= "<outline text=\"$cat_title\">\n"; - $result = db_query($this->link, "SELECT id,title + $result = $this->dbh->query("SELECT id,title FROM ttrss_feed_categories WHERE $cat_qpart AND owner_uid = '$owner_uid' ORDER BY order_id, title"); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $title = htmlspecialchars($line["title"]); $out .= $this->opml_export_category($owner_uid, $line["id"], $hide_private_feeds); } - $feeds_result = db_query($this->link, "select title, feed_url, site_url + $feeds_result = $this->dbh->query("select title, feed_url, site_url from ttrss_feeds where $feed_cat_qpart AND owner_uid = '$owner_uid' AND $hide_qpart order by order_id, title"); - while ($fline = db_fetch_assoc($feeds_result)) { + while ($fline = $this->dbh->fetch_assoc($feeds_result)) { $title = htmlspecialchars($fline["title"]); $url = htmlspecialchars($fline["feed_url"]); $site_url = htmlspecialchars($fline["site_url"]); @@ -131,10 +131,10 @@ class Opml extends Handler_Protected { if ($include_settings) { $out .= "<outline text=\"tt-rss-prefs\" schema-version=\"".SCHEMA_VERSION."\">"; - $result = db_query($this->link, "SELECT pref_name, value FROM ttrss_user_prefs WHERE + $result = $this->dbh->query("SELECT pref_name, value FROM ttrss_user_prefs WHERE profile IS NULL AND owner_uid = " . $_SESSION["uid"] . " ORDER BY pref_name"); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $name = $line["pref_name"]; $value = htmlspecialchars($line["value"]); @@ -145,10 +145,10 @@ class Opml extends Handler_Protected { $out .= "<outline text=\"tt-rss-labels\" schema-version=\"".SCHEMA_VERSION."\">"; - $result = db_query($this->link, "SELECT * FROM ttrss_labels2 WHERE + $result = $this->dbh->query("SELECT * FROM ttrss_labels2 WHERE owner_uid = " . $_SESSION['uid']); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $name = htmlspecialchars($line['caption']); $fg_color = htmlspecialchars($line['fg_color']); $bg_color = htmlspecialchars($line['bg_color']); @@ -161,10 +161,10 @@ class Opml extends Handler_Protected { $out .= "<outline text=\"tt-rss-filters\" schema-version=\"".SCHEMA_VERSION."\">"; - $result = db_query($this->link, "SELECT * FROM ttrss_filters2 + $result = $this->dbh->query("SELECT * FROM ttrss_filters2 WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY id"); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { foreach (array('enabled', 'match_any_rule') as $b) { $line[$b] = sql_bool_to_bool($line[$b]); } @@ -172,17 +172,17 @@ class Opml extends Handler_Protected { $line["rules"] = array(); $line["actions"] = array(); - $tmp_result = db_query($this->link, "SELECT * FROM ttrss_filters2_rules + $tmp_result = $this->dbh->query("SELECT * FROM ttrss_filters2_rules WHERE filter_id = ".$line["id"]); - while ($tmp_line = db_fetch_assoc($tmp_result)) { + while ($tmp_line = $this->dbh->fetch_assoc($tmp_result)) { unset($tmp_line["id"]); unset($tmp_line["filter_id"]); $cat_filter = sql_bool_to_bool($tmp_line["cat_filter"]); if ($cat_filter && $tmp_line["cat_id"] || $tmp_line["feed_id"]) { - $tmp_line["feed"] = getFeedTitle($this->link, + $tmp_line["feed"] = getFeedTitle( $cat_filter ? $tmp_line["cat_id"] : $tmp_line["feed_id"], $cat_filter); } else { @@ -197,10 +197,10 @@ class Opml extends Handler_Protected { array_push($line["rules"], $tmp_line); } - $tmp_result = db_query($this->link, "SELECT * FROM ttrss_filters2_actions + $tmp_result = $this->dbh->query("SELECT * FROM ttrss_filters2_actions WHERE filter_id = ".$line["id"]); - while ($tmp_line = db_fetch_assoc($tmp_result)) { + while ($tmp_line = $this->dbh->fetch_assoc($tmp_result)) { unset($tmp_line["id"]); unset($tmp_line["filter_id"]); @@ -253,19 +253,19 @@ class Opml extends Handler_Protected { private function opml_import_feed($doc, $node, $cat_id, $owner_uid) { $attrs = $node->attributes; - $feed_title = db_escape_string($this->link, mb_substr($attrs->getNamedItem('text')->nodeValue, 0, 250)); - if (!$feed_title) $feed_title = db_escape_string($this->link, mb_substr($attrs->getNamedItem('title')->nodeValue, 0, 250)); + $feed_title = $this->dbh->escape_string(mb_substr($attrs->getNamedItem('text')->nodeValue, 0, 250)); + if (!$feed_title) $feed_title = $this->dbh->escape_string(mb_substr($attrs->getNamedItem('title')->nodeValue, 0, 250)); - $feed_url = db_escape_string($this->link, mb_substr($attrs->getNamedItem('xmlUrl')->nodeValue, 0, 250)); - if (!$feed_url) $feed_url = db_escape_string($this->link, mb_substr($attrs->getNamedItem('xmlURL')->nodeValue, 0, 250)); + $feed_url = $this->dbh->escape_string(mb_substr($attrs->getNamedItem('xmlUrl')->nodeValue, 0, 250)); + if (!$feed_url) $feed_url = $this->dbh->escape_string(mb_substr($attrs->getNamedItem('xmlURL')->nodeValue, 0, 250)); - $site_url = db_escape_string($this->link, mb_substr($attrs->getNamedItem('htmlUrl')->nodeValue, 0, 250)); + $site_url = $this->dbh->escape_string(mb_substr($attrs->getNamedItem('htmlUrl')->nodeValue, 0, 250)); if ($feed_url && $feed_title) { - $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = '$owner_uid'"); - if (db_num_rows($result) == 0) { + if ($this->dbh->num_rows($result) == 0) { #$this->opml_notice("[FEED] [$feed_title/$feed_url] dst_CAT=$cat_id"); $this->opml_notice(T_sprintf("Adding feed: %s", $feed_title)); @@ -275,7 +275,7 @@ class Opml extends Handler_Protected { (title, feed_url, owner_uid, cat_id, site_url, order_id) VALUES ('$feed_title', '$feed_url', '$owner_uid', $cat_id, '$site_url', 0)"; - db_query($this->link, $query); + $this->dbh->query($query); } else { $this->opml_notice(T_sprintf("Duplicate feed: %s", $feed_title)); @@ -285,15 +285,15 @@ class Opml extends Handler_Protected { private function opml_import_label($doc, $node, $owner_uid) { $attrs = $node->attributes; - $label_name = db_escape_string($this->link, $attrs->getNamedItem('label-name')->nodeValue); + $label_name = $this->dbh->escape_string($attrs->getNamedItem('label-name')->nodeValue); if ($label_name) { - $fg_color = db_escape_string($this->link, $attrs->getNamedItem('label-fg-color')->nodeValue); - $bg_color = db_escape_string($this->link, $attrs->getNamedItem('label-bg-color')->nodeValue); + $fg_color = $this->dbh->escape_string($attrs->getNamedItem('label-fg-color')->nodeValue); + $bg_color = $this->dbh->escape_string($attrs->getNamedItem('label-bg-color')->nodeValue); - if (!label_find_id($this->link, $label_name, $_SESSION['uid'])) { + if (!label_find_id($label_name, $_SESSION['uid'])) { $this->opml_notice(T_sprintf("Adding label %s", htmlspecialchars($label_name))); - label_create($this->link, $label_name, $fg_color, $bg_color, $owner_uid); + label_create($label_name, $fg_color, $bg_color, $owner_uid); } else { $this->opml_notice(T_sprintf("Duplicate label: %s", htmlspecialchars($label_name))); } @@ -302,22 +302,22 @@ class Opml extends Handler_Protected { private function opml_import_preference($doc, $node, $owner_uid) { $attrs = $node->attributes; - $pref_name = db_escape_string($this->link, $attrs->getNamedItem('pref-name')->nodeValue); + $pref_name = $this->dbh->escape_string($attrs->getNamedItem('pref-name')->nodeValue); if ($pref_name) { - $pref_value = db_escape_string($this->link, $attrs->getNamedItem('value')->nodeValue); + $pref_value = $this->dbh->escape_string($attrs->getNamedItem('value')->nodeValue); $this->opml_notice(T_sprintf("Setting preference key %s to %s", $pref_name, $pref_value)); - set_pref($this->link, $pref_name, $pref_value); + set_pref($pref_name, $pref_value); } } private function opml_import_filter($doc, $node, $owner_uid) { $attrs = $node->attributes; - $filter_type = db_escape_string($this->link, $attrs->getNamedItem('filter-type')->nodeValue); + $filter_type = $this->dbh->escape_string($attrs->getNamedItem('filter-type')->nodeValue); if ($filter_type == '2') { $filter = json_decode($node->nodeValue, true); @@ -326,14 +326,14 @@ class Opml extends Handler_Protected { $match_any_rule = bool_to_sql_bool($filter["match_any_rule"]); $enabled = bool_to_sql_bool($filter["enabled"]); - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); - db_query($this->link, "INSERT INTO ttrss_filters2 (match_any_rule,enabled,owner_uid) + $this->dbh->query("INSERT INTO ttrss_filters2 (match_any_rule,enabled,owner_uid) VALUES ($match_any_rule, $enabled,".$_SESSION["uid"].")"); - $result = db_query($this->link, "SELECT MAX(id) AS id FROM ttrss_filters2 WHERE + $result = $this->dbh->query("SELECT MAX(id) AS id FROM ttrss_filters2 WHERE owner_uid = ".$_SESSION["uid"]); - $filter_id = db_fetch_result($result, 0, "id"); + $filter_id = $this->dbh->fetch_result($result, 0, "id"); if ($filter_id) { $this->opml_notice(T_sprintf("Adding filter...")); @@ -343,39 +343,39 @@ class Opml extends Handler_Protected { $cat_id = "NULL"; if (!$rule["cat_filter"]) { - $tmp_result = db_query($this->link, "SELECT id FROM ttrss_feeds - WHERE title = '".db_escape_string($this->link, $rule["feed"])."' AND owner_uid = ".$_SESSION["uid"]); - if (db_num_rows($tmp_result) > 0) { - $feed_id = db_fetch_result($tmp_result, 0, "id"); + $tmp_result = $this->dbh->query("SELECT id FROM ttrss_feeds + WHERE title = '".$this->dbh->escape_string($rule["feed"])."' AND owner_uid = ".$_SESSION["uid"]); + if ($this->dbh->num_rows($tmp_result) > 0) { + $feed_id = $this->dbh->fetch_result($tmp_result, 0, "id"); } } else { - $tmp_result = db_query($this->link, "SELECT id FROM ttrss_feed_categories - WHERE title = '".db_escape_string($this->link, $rule["feed"])."' AND owner_uid = ".$_SESSION["uid"]); + $tmp_result = $this->dbh->query("SELECT id FROM ttrss_feed_categories + WHERE title = '".$this->dbh->escape_string($rule["feed"])."' AND owner_uid = ".$_SESSION["uid"]); - if (db_num_rows($tmp_result) > 0) { - $cat_id = db_fetch_result($tmp_result, 0, "id"); + if ($this->dbh->num_rows($tmp_result) > 0) { + $cat_id = $this->dbh->fetch_result($tmp_result, 0, "id"); } } $cat_filter = bool_to_sql_bool($rule["cat_filter"]); - $reg_exp = db_escape_string($this->link, $rule["reg_exp"]); + $reg_exp = $this->dbh->escape_string($rule["reg_exp"]); $filter_type = (int)$rule["filter_type"]; - db_query($this->link, "INSERT INTO ttrss_filters2_rules (feed_id,cat_id,filter_id,filter_type,reg_exp,cat_filter) + $this->dbh->query("INSERT INTO ttrss_filters2_rules (feed_id,cat_id,filter_id,filter_type,reg_exp,cat_filter) VALUES ($feed_id, $cat_id, $filter_id, $filter_type, '$reg_exp', $cat_filter)"); } foreach ($filter["actions"] as $action) { $action_id = (int)$action["action_id"]; - $action_param = db_escape_string($this->link, $action["action_param"]); + $action_param = $this->dbh->escape_string($action["action_param"]); - db_query($this->link, "INSERT INTO ttrss_filters2_actions (filter_id,action_id,action_param) + $this->dbh->query("INSERT INTO ttrss_filters2_actions (filter_id,action_id,action_param) VALUES ($filter_id, $action_id, '$action_param')"); } } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } } } @@ -383,22 +383,22 @@ class Opml extends Handler_Protected { private function opml_import_category($doc, $root_node, $owner_uid, $parent_id) { $body = $doc->getElementsByTagName('body'); - $default_cat_id = (int) get_feed_category($this->link, 'Imported feeds', false); + $default_cat_id = (int) get_feed_category('Imported feeds', false); if ($root_node) { - $cat_title = db_escape_string($this->link, mb_substr($root_node->attributes->getNamedItem('text')->nodeValue, 0, 250)); + $cat_title = $this->dbh->escape_string(mb_substr($root_node->attributes->getNamedItem('text')->nodeValue, 0, 250)); if (!$cat_title) - $cat_title = db_escape_string($this->link, mb_substr($root_node->attributes->getNamedItem('title')->nodeValue, 0, 250)); + $cat_title = $this->dbh->escape_string(mb_substr($root_node->attributes->getNamedItem('title')->nodeValue, 0, 250)); if (!in_array($cat_title, array("tt-rss-filters", "tt-rss-labels", "tt-rss-prefs"))) { - $cat_id = get_feed_category($this->link, $cat_title, $parent_id); - db_query($this->link, "BEGIN"); + $cat_id = get_feed_category($cat_title, $parent_id); + $this->dbh->query("BEGIN"); if ($cat_id === false) { - add_feed_category($this->link, $cat_title, $parent_id); - $cat_id = get_feed_category($this->link, $cat_title, $parent_id); + add_feed_category($cat_title, $parent_id); + $cat_id = get_feed_category($cat_title, $parent_id); } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } else { $cat_id = 0; } @@ -418,12 +418,12 @@ class Opml extends Handler_Protected { foreach ($outlines as $node) { if ($node->hasAttributes() && strtolower($node->tagName) == "outline") { $attrs = $node->attributes; - $node_cat_title = db_escape_string($this->link, $attrs->getNamedItem('text')->nodeValue); + $node_cat_title = $this->dbh->escape_string($attrs->getNamedItem('text')->nodeValue); if (!$node_cat_title) - $node_cat_title = db_escape_string($this->link, $attrs->getNamedItem('title')->nodeValue); + $node_cat_title = $this->dbh->escape_string($attrs->getNamedItem('title')->nodeValue); - $node_feed_url = db_escape_string($this->link, $attrs->getNamedItem('xmlUrl')->nodeValue); + $node_feed_url = $this->dbh->escape_string($attrs->getNamedItem('xmlUrl')->nodeValue); if ($node_cat_title && !$node_feed_url) { $this->opml_import_category($doc, $node, $owner_uid, $cat_id); @@ -461,11 +461,35 @@ class Opml extends Handler_Protected { # if ($debug) $doc = DOMDocument::load("/tmp/test.opml"); - if (is_file($_FILES['opml_file']['tmp_name'])) { + if ($_FILES['opml_file']['error'] != 0) { + print_error(T_sprintf("Upload failed with error code %d", + $_FILES['opml_file']['error'])); + return; + } + + $tmp_file = false; + + if (is_uploaded_file($_FILES['opml_file']['tmp_name'])) { + $tmp_file = tempnam(CACHE_DIR . '/upload', 'opml'); + + $result = move_uploaded_file($_FILES['opml_file']['tmp_name'], + $tmp_file); + + if (!$result) { + print_error(__("Unable to move uploaded file.")); + return; + } + } else { + print_error(__('Error: please upload OPML file.')); + return; + } + + if (is_file($tmp_file)) { $doc = new DOMDocument(); - $doc->load($_FILES['opml_file']['tmp_name']); + $doc->load($tmp_file); + unlink($tmp_file); } else if (!$doc) { - print_error(__('Error: please upload OPML file.')); + print_error(__('Error: unable to find moved OPML file.')); return; } @@ -480,11 +504,11 @@ class Opml extends Handler_Protected { print "$msg<br/>"; } - static function opml_publish_url($link){ + static function opml_publish_url(){ $url_path = get_self_url_prefix(); $url_path .= "/opml.php?op=publish&key=" . - get_feed_access_key($link, 'OPML:Publish', false, $_SESSION["uid"]); + get_feed_access_key('OPML:Publish', false, $_SESSION["uid"]); return $url_path; } diff --git a/classes/plugin.php b/classes/plugin.php index e655a2062..8fbacf363 100644 --- a/classes/plugin.php +++ b/classes/plugin.php @@ -1,10 +1,12 @@ <?php class Plugin { - private $link; + private $dbh; private $host; + const API_VERSION_COMPAT = 1; + function init($host) { - $this->link = $host->get_link(); + $this->dbh = $host->get_dbh(); $this->host = $host; } @@ -20,5 +22,9 @@ class Plugin { function get_prefs_js() { return ""; } + + function api_version() { + return Plugin::API_VERSION_COMPAT; + } } ?> diff --git a/classes/pluginhandler.php b/classes/pluginhandler.php index eb859ab32..690305165 100644 --- a/classes/pluginhandler.php +++ b/classes/pluginhandler.php @@ -5,9 +5,7 @@ class PluginHandler extends Handler_Protected { } function catchall($method) { - global $pluginhost; - - $plugin = $pluginhost->get_plugin($_REQUEST["plugin"]); + $plugin = PluginHost::getInstance()->get_plugin($_REQUEST["plugin"]); if ($plugin) { if (method_exists($plugin, $method)) { diff --git a/classes/pluginhost.php b/classes/pluginhost.php index 9ae7b809e..bc5dc96be 100644 --- a/classes/pluginhost.php +++ b/classes/pluginhost.php @@ -1,14 +1,19 @@ <?php class PluginHost { - private $link; + private $dbh; private $hooks = array(); private $plugins = array(); private $handlers = array(); private $commands = array(); private $storage = array(); private $feeds = array(); + private $api_methods = array(); private $owner_uid; private $debug; + private $last_registered; + private static $instance; + + const API_VERSION = 2; const HOOK_ARTICLE_BUTTON = 1; const HOOK_ARTICLE_FILTER = 2; @@ -29,17 +34,28 @@ class PluginHost { const HOOK_HEADLINE_TOOLBAR_BUTTON = 17; const HOOK_HOTKEY_INFO = 18; const HOOK_ARTICLE_LEFT_BUTTON = 19; + const HOOK_PREFS_EDIT_FEED = 20; + const HOOK_PREFS_SAVE_FEED = 21; const KIND_ALL = 1; const KIND_SYSTEM = 2; const KIND_USER = 3; - function __construct($link) { - $this->link = $link; + function __construct() { + $this->dbh = Db::get(); + + $this->storage = array(); + } + + private function __clone() { + // + } - $this->storage = $_SESSION["plugin_storage"]; + public static function getInstance() { + if (self::$instance == null) + self::$instance = new self(); - if (!$this->storage) $this->storage = array(); + return self::$instance; } private function register_plugin($name, $plugin) { @@ -47,8 +63,13 @@ class PluginHost { $this->plugins[$name] = $plugin; } + // needed for compatibility with API 1 function get_link() { - return $this->link; + return false; + } + + function get_dbh() { + return $this->dbh; } function get_plugins() { @@ -102,6 +123,9 @@ class PluginHost { foreach ($plugins as $class) { $class = trim($class); $class_file = strtolower(basename($class)); + + if (!is_dir(dirname(__FILE__)."/../plugins/$class_file")) continue; + $file = dirname(__FILE__)."/../plugins/$class_file/init.php"; if (!isset($this->plugins[$class])) { @@ -110,6 +134,15 @@ class PluginHost { if (class_exists($class) && is_subclass_of($class, "Plugin")) { $plugin = new $class($this); + $plugin_api = $plugin->api_version(); + + if ($plugin_api < PluginHost::API_VERSION) { + user_error("Plugin $class is not compatible with current API version (need: " . PluginHost::API_VERSION . ", got: $plugin_api)", E_USER_WARNING); + continue; + } + + $this->last_registered = $class; + switch ($kind) { case $this::KIND_SYSTEM: if ($this->is_system($plugin)) { @@ -153,7 +186,7 @@ class PluginHost { } } - function del_handler($handler, $method) { + function del_handler($handler, $method, $sender) { $handler = str_replace("-", "_", strtolower($handler)); $method = strtolower($method); @@ -218,45 +251,41 @@ class PluginHost { } function load_data($force = false) { - if ($this->owner_uid && (!$_SESSION["plugin_storage"] || $force)) { - $plugin = db_escape_string($this->link, $plugin); - - $result = db_query($this->link, "SELECT name, content FROM ttrss_plugin_storage + if ($this->owner_uid) { + $result = $this->dbh->query("SELECT name, content FROM ttrss_plugin_storage WHERE owner_uid = '".$this->owner_uid."'"); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $this->storage[$line["name"]] = unserialize($line["content"]); } - - $_SESSION["plugin_storage"] = $this->storage; } } private function save_data($plugin) { if ($this->owner_uid) { - $plugin = db_escape_string($this->link, $plugin); + $plugin = $this->dbh->escape_string($plugin); - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); - $result = db_query($this->link,"SELECT id FROM ttrss_plugin_storage WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_plugin_storage WHERE owner_uid= '".$this->owner_uid."' AND name = '$plugin'"); if (!isset($this->storage[$plugin])) $this->storage[$plugin] = array(); - $content = db_escape_string($this->link, serialize($this->storage[$plugin])); + $content = $this->dbh->escape_string(serialize($this->storage[$plugin])); - if (db_num_rows($result) != 0) { - db_query($this->link, "UPDATE ttrss_plugin_storage SET content = '$content' + if ($this->dbh->num_rows($result) != 0) { + $this->dbh->query("UPDATE ttrss_plugin_storage SET content = '$content' WHERE owner_uid= '".$this->owner_uid."' AND name = '$plugin'"); } else { - db_query($this->link, "INSERT INTO ttrss_plugin_storage + $this->dbh->query("INSERT INTO ttrss_plugin_storage (name,owner_uid,content) VALUES ('$plugin','".$this->owner_uid."','$content')"); } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } } @@ -268,8 +297,6 @@ class PluginHost { $this->storage[$idx][$name] = $value; - $_SESSION["plugin_storage"] = $this->storage; - if ($sync) $this->save_data(get_class($sender)); } @@ -295,10 +322,8 @@ class PluginHost { unset($this->storage[$idx]); - db_query($this->link, "DELETE FROM ttrss_plugin_storage WHERE name = '$idx' + $this->dbh->query("DELETE FROM ttrss_plugin_storage WHERE name = '$idx' AND owner_uid = " . $this->owner_uid); - - $_SESSION["plugin_storage"] = $this->storage; } } @@ -347,5 +372,14 @@ class PluginHost { return PLUGIN_FEED_BASE_INDEX - 1 + abs($feed); } + function add_api_method($name, $sender) { + if ($this->is_system($sender)) { + $this->api_methods[strtolower($name)] = $sender; + } + } + + function get_api_method($name) { + return $this->api_methods[$name]; + } } ?> diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index 469ca1111..7d050f135 100644 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -15,11 +15,11 @@ class Pref_Feeds extends Handler_Protected { } function renamecat() { - $title = db_escape_string($this->link, $_REQUEST['title']); - $id = db_escape_string($this->link, $_REQUEST['id']); + $title = $this->dbh->escape_string($_REQUEST['title']); + $id = $this->dbh->escape_string($_REQUEST['id']); if ($title) { - db_query($this->link, "UPDATE ttrss_feed_categories SET + $this->dbh->query("UPDATE ttrss_feed_categories SET title = '$title' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); } return; @@ -36,15 +36,14 @@ class Pref_Feeds extends Handler_Protected { // first one is set by API $show_empty_cats = $_REQUEST['force_show_empty'] || - ($_REQUEST['mode'] != 2 && !$search && - get_pref($this->link, '_PREFS_SHOW_EMPTY_CATS')); + ($_REQUEST['mode'] != 2 && !$search); $items = array(); - $result = db_query($this->link, "SELECT id, title FROM ttrss_feed_categories + $result = $this->dbh->query("SELECT id, title FROM ttrss_feed_categories WHERE owner_uid = " . $_SESSION["uid"] . " AND parent_cat = '$cat_id' ORDER BY order_id, title"); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $cat = array(); $cat['id'] = 'CAT:' . $line['id']; @@ -65,13 +64,13 @@ class Pref_Feeds extends Handler_Protected { } - $feed_result = db_query($this->link, "SELECT id, title, last_error, + $feed_result = $this->dbh->query("SELECT id, title, last_error, ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated FROM ttrss_feeds WHERE cat_id = '$cat_id' AND owner_uid = ".$_SESSION["uid"]. "$search_qpart ORDER BY order_id, title"); - while ($feed_line = db_fetch_assoc($feed_result)) { + while ($feed_line = $this->dbh->fetch_assoc($feed_result)) { $feed = array(); $feed['id'] = 'FEED:' . $feed_line['id']; $feed['bare_id'] = (int)$feed_line['id']; @@ -80,7 +79,7 @@ class Pref_Feeds extends Handler_Protected { $feed['unread'] = 0; $feed['error'] = $feed_line['last_error']; $feed['icon'] = getFeedIcon($feed_line['id']); - $feed['param'] = make_local_datetime($this->link, + $feed['param'] = make_local_datetime( $feed_line['last_updated'], true); array_push($items, $feed); @@ -108,7 +107,7 @@ class Pref_Feeds extends Handler_Protected { $root['items'] = array(); $root['type'] = 'category'; - $enable_cats = get_pref($this->link, 'ENABLE_FEED_CATS'); + $enable_cats = get_pref('ENABLE_FEED_CATS'); if ($_REQUEST['mode'] == 2) { @@ -124,9 +123,7 @@ class Pref_Feeds extends Handler_Protected { /* Plugin feeds for -1 */ - global $pluginhost; - - $feeds = $pluginhost->get_feeds(-1); + $feeds = PluginHost::getInstance()->get_feeds(-1); if ($feeds) { foreach ($feeds as $feed) { @@ -154,18 +151,18 @@ class Pref_Feeds extends Handler_Protected { $root['items'] = array_merge($root['items'], $cat['items']); } - $result = db_query($this->link, "SELECT * FROM + $result = $this->dbh->query("SELECT * FROM ttrss_labels2 WHERE owner_uid = ".$_SESSION['uid']." ORDER by caption"); - if (db_num_rows($result) > 0) { + if ($this->dbh->num_rows($result) > 0) { - if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + if (get_pref('ENABLE_FEED_CATS')) { $cat = $this->feedlist_init_cat(-2); } else { $cat['items'] = array(); } - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $label_id = label_to_feed_id($line['id']); @@ -187,13 +184,12 @@ class Pref_Feeds extends Handler_Protected { if ($enable_cats) { $show_empty_cats = $_REQUEST['force_show_empty'] || - ($_REQUEST['mode'] != 2 && !$search && - get_pref($this->link, '_PREFS_SHOW_EMPTY_CATS')); + ($_REQUEST['mode'] != 2 && !$search); - $result = db_query($this->link, "SELECT id, title FROM ttrss_feed_categories + $result = $this->dbh->query("SELECT id, title FROM ttrss_feed_categories WHERE owner_uid = " . $_SESSION["uid"] . " AND parent_cat IS NULL ORDER BY order_id, title"); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $cat = array(); $cat['id'] = 'CAT:' . $line['id']; $cat['bare_id'] = (int)$line['id']; @@ -226,13 +222,13 @@ class Pref_Feeds extends Handler_Protected { $cat['unread'] = 0; $cat['child_unread'] = 0; - $feed_result = db_query($this->link, "SELECT id, title,last_error, + $feed_result = $this->dbh->query("SELECT id, title,last_error, ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated FROM ttrss_feeds WHERE cat_id IS NULL AND owner_uid = ".$_SESSION["uid"]. "$search_qpart ORDER BY order_id, title"); - while ($feed_line = db_fetch_assoc($feed_result)) { + while ($feed_line = $this->dbh->fetch_assoc($feed_result)) { $feed = array(); $feed['id'] = 'FEED:' . $feed_line['id']; $feed['bare_id'] = (int)$feed_line['id']; @@ -240,7 +236,7 @@ class Pref_Feeds extends Handler_Protected { $feed['checkbox'] = false; $feed['error'] = $feed_line['last_error']; $feed['icon'] = getFeedIcon($feed_line['id']); - $feed['param'] = make_local_datetime($this->link, + $feed['param'] = make_local_datetime( $feed_line['last_updated'], true); $feed['unread'] = 0; $feed['type'] = 'feed'; @@ -257,13 +253,13 @@ class Pref_Feeds extends Handler_Protected { $root['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', count($cat['items'])), count($cat['items'])); } else { - $feed_result = db_query($this->link, "SELECT id, title, last_error, + $feed_result = $this->dbh->query("SELECT id, title, last_error, ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated FROM ttrss_feeds WHERE owner_uid = ".$_SESSION["uid"]. "$search_qpart ORDER BY order_id, title"); - while ($feed_line = db_fetch_assoc($feed_result)) { + while ($feed_line = $this->dbh->fetch_assoc($feed_result)) { $feed = array(); $feed['id'] = 'FEED:' . $feed_line['id']; $feed['bare_id'] = (int)$feed_line['id']; @@ -271,7 +267,7 @@ class Pref_Feeds extends Handler_Protected { $feed['checkbox'] = false; $feed['error'] = $feed_line['last_error']; $feed['icon'] = getFeedIcon($feed_line['id']); - $feed['param'] = make_local_datetime($this->link, + $feed['param'] = make_local_datetime( $feed_line['last_updated'], true); $feed['unread'] = 0; $feed['type'] = 'feed'; @@ -296,22 +292,17 @@ class Pref_Feeds extends Handler_Protected { } function catsortreset() { - db_query($this->link, "UPDATE ttrss_feed_categories + $this->dbh->query("UPDATE ttrss_feed_categories SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); return; } function feedsortreset() { - db_query($this->link, "UPDATE ttrss_feeds + $this->dbh->query("UPDATE ttrss_feeds SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); return; } - function togglehiddenfeedcats() { - set_pref($this->link, '_PREFS_SHOW_EMPTY_CATS', - (get_pref($this->link, '_PREFS_SHOW_EMPTY_CATS') ? 'false' : 'true')); - } - private function process_category_order(&$data_map, $item_id, $parent_id = false, $nest_level = 0) { $debug = isset($_REQUEST["debug"]); @@ -326,12 +317,12 @@ class Pref_Feeds extends Handler_Protected { if ($item_id != 'root') { if ($parent_id && $parent_id != 'root') { $parent_bare_id = substr($parent_id, strpos($parent_id, ':')+1); - $parent_qpart = db_escape_string($this->link, $parent_bare_id); + $parent_qpart = $this->dbh->escape_string($parent_bare_id); } else { $parent_qpart = 'NULL'; } - db_query($this->link, "UPDATE ttrss_feed_categories + $this->dbh->query("UPDATE ttrss_feed_categories SET parent_cat = $parent_qpart WHERE id = '$bare_item_id' AND owner_uid = " . $_SESSION["uid"]); } @@ -352,12 +343,12 @@ class Pref_Feeds extends Handler_Protected { if (strpos($id, "FEED") === 0) { $cat_id = ($item_id != "root") ? - db_escape_string($this->link, $bare_item_id) : "NULL"; + $this->dbh->escape_string($bare_item_id) : "NULL"; $cat_qpart = ($cat_id != 0) ? "cat_id = '$cat_id'" : "cat_id = NULL"; - db_query($this->link, "UPDATE ttrss_feeds + $this->dbh->query("UPDATE ttrss_feeds SET order_id = $order_id, $cat_qpart WHERE id = '$bare_id' AND owner_uid = " . $_SESSION["uid"]); @@ -367,12 +358,12 @@ class Pref_Feeds extends Handler_Protected { $nest_level+1); if ($item_id != 'root') { - $parent_qpart = db_escape_string($this->link, $bare_id); + $parent_qpart = $this->dbh->escape_string($bare_id); } else { $parent_qpart = 'NULL'; } - db_query($this->link, "UPDATE ttrss_feed_categories + $this->dbh->query("UPDATE ttrss_feed_categories SET order_id = '$order_id' WHERE id = '$bare_id' AND owner_uid = " . $_SESSION["uid"]); } @@ -424,7 +415,7 @@ class Pref_Feeds extends Handler_Protected { ++$cat_order_id; if ($bare_id > 0) { - db_query($this->link, "UPDATE ttrss_feed_categories + $this->dbh->query("UPDATE ttrss_feed_categories SET order_id = '$cat_order_id' WHERE id = '$bare_id' AND owner_uid = " . $_SESSION["uid"]); } @@ -441,7 +432,7 @@ class Pref_Feeds extends Handler_Protected { else $cat_query = "cat_id = NULL"; - db_query($this->link, "UPDATE ttrss_feeds + $this->dbh->query("UPDATE ttrss_feeds SET order_id = '$feed_order_id', $cat_query WHERE id = '$feed_id' AND @@ -457,13 +448,16 @@ class Pref_Feeds extends Handler_Protected { } function removeicon() { - $feed_id = db_escape_string($this->link, $_REQUEST["feed_id"]); + $feed_id = $this->dbh->escape_string($_REQUEST["feed_id"]); - $result = db_query($this->link, "SELECT id FROM ttrss_feeds + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE id = '$feed_id' AND owner_uid = ". $_SESSION["uid"]); - if (db_num_rows($result) != 0) { - unlink(ICONS_DIR . "/$feed_id.ico"); + if ($this->dbh->num_rows($result) != 0) { + @unlink(ICONS_DIR . "/$feed_id.ico"); + + $this->dbh->query("UPDATE ttrss_feeds SET favicon_avg_color = NULL + where id = '$feed_id'"); } return; @@ -472,19 +466,39 @@ class Pref_Feeds extends Handler_Protected { function uploadicon() { header("Content-type: text/html"); - $icon_file = $_FILES['icon_file']['tmp_name']; - $feed_id = db_escape_string($this->link, $_REQUEST["feed_id"]); + $tmp_file = false; + + if (is_uploaded_file($_FILES['icon_file']['tmp_name'])) { + $tmp_file = tempnam(CACHE_DIR . '/upload', 'icon'); + + $result = move_uploaded_file($_FILES['icon_file']['tmp_name'], + $tmp_file); + + if (!$result) { + return; + } + } else { + return; + } + + $icon_file = $tmp_file; + $feed_id = $this->dbh->escape_string($_REQUEST["feed_id"]); if (is_file($icon_file) && $feed_id) { if (filesize($icon_file) < 20000) { - $result = db_query($this->link, "SELECT id FROM ttrss_feeds + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE id = '$feed_id' AND owner_uid = ". $_SESSION["uid"]); - if (db_num_rows($result) != 0) { - unlink(ICONS_DIR . "/$feed_id.ico"); - move_uploaded_file($icon_file, ICONS_DIR . "/$feed_id.ico"); - $rc = 0; + if ($this->dbh->num_rows($result) != 0) { + @unlink(ICONS_DIR . "/$feed_id.ico"); + if (rename($icon_file, ICONS_DIR . "/$feed_id.ico")) { + $this->dbh->query("UPDATE ttrss_feeds SET + favicon_avg_color = '' + WHERE id = '$feed_id'"); + + $rc = 0; + } } else { $rc = 2; } @@ -495,6 +509,8 @@ class Pref_Feeds extends Handler_Protected { $rc = 2; } + @unlink($icon_file); + print "<script type=\"text/javascript\">"; print "parent.uploadIconHandler($rc);"; print "</script>"; @@ -505,13 +521,16 @@ class Pref_Feeds extends Handler_Protected { global $purge_intervals; global $update_intervals; - $feed_id = db_escape_string($this->link, $_REQUEST["id"]); + $feed_id = $this->dbh->escape_string($_REQUEST["id"]); - $result = db_query($this->link, + $result = $this->dbh->query( "SELECT * FROM ttrss_feeds WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]); - $title = htmlspecialchars(db_fetch_result($result, + $auth_pass_encrypted = sql_bool_to_bool($this->dbh->fetch_result($result, 0, + "auth_pass_encrypted")); + + $title = htmlspecialchars($this->dbh->fetch_result($result, 0, "title")); print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"$feed_id\">"; @@ -529,8 +548,8 @@ class Pref_Feeds extends Handler_Protected { /* Feed URL */ - $feed_url = db_fetch_result($result, 0, "feed_url"); - $feed_url = htmlspecialchars(db_fetch_result($result, + $feed_url = $this->dbh->fetch_result($result, 0, "feed_url"); + $feed_url = htmlspecialchars($this->dbh->fetch_result($result, 0, "feed_url")); print "<hr/>"; @@ -541,7 +560,7 @@ class Pref_Feeds extends Handler_Protected { regExp='^(http|https)://.*' style=\"width : 20em\" name=\"feed_url\" value=\"$feed_url\">"; - $last_error = db_fetch_result($result, 0, "last_error"); + $last_error = $this->dbh->fetch_result($result, 0, "last_error"); if ($last_error) { print " <span title=\"".htmlspecialchars($last_error)."\" @@ -551,15 +570,15 @@ class Pref_Feeds extends Handler_Protected { /* Category */ - if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + if (get_pref('ENABLE_FEED_CATS')) { - $cat_id = db_fetch_result($result, 0, "cat_id"); + $cat_id = $this->dbh->fetch_result($result, 0, "cat_id"); print "<hr/>"; print __('Place in category:') . " "; - print_feed_cat_select($this->link, "cat_id", $cat_id, + print_feed_cat_select("cat_id", $cat_id, 'dojoType="dijit.form.Select"'); } @@ -570,14 +589,14 @@ class Pref_Feeds extends Handler_Protected { /* Update Interval */ - $update_interval = db_fetch_result($result, 0, "update_interval"); + $update_interval = $this->dbh->fetch_result($result, 0, "update_interval"); print_select_hash("update_interval", $update_interval, $update_intervals, 'dojoType="dijit.form.Select"'); /* Purge intl */ - $purge_interval = db_fetch_result($result, 0, "purge_interval"); + $purge_interval = $this->dbh->fetch_result($result, 0, "purge_interval"); print "<hr/>"; print __('Article purging:') . " "; @@ -590,13 +609,20 @@ class Pref_Feeds extends Handler_Protected { print "<div class=\"dlgSec\">".__("Authentication")."</div>"; print "<div class=\"dlgSecCont\">"; - $auth_login = htmlspecialchars(db_fetch_result($result, 0, "auth_login")); + $auth_login = htmlspecialchars($this->dbh->fetch_result($result, 0, "auth_login")); print "<input dojoType=\"dijit.form.TextBox\" id=\"feedEditDlg_login\" placeHolder=\"".__("Login")."\" name=\"auth_login\" value=\"$auth_login\"><hr/>"; - $auth_pass = htmlspecialchars(db_fetch_result($result, 0, "auth_pass")); + $auth_pass = $this->dbh->fetch_result($result, 0, "auth_pass"); + + if ($auth_pass_encrypted) { + require_once "crypt.php"; + $auth_pass = decrypt_string($auth_pass); + } + + $auth_pass = htmlspecialchars($auth_pass); print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\" placeHolder=\"".__("Password")."\" @@ -610,7 +636,7 @@ class Pref_Feeds extends Handler_Protected { print "<div class=\"dlgSec\">".__("Options")."</div>"; print "<div class=\"dlgSecCont\">"; - $private = sql_bool_to_bool(db_fetch_result($result, 0, "private")); + $private = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "private")); if ($private) { $checked = "checked=\"1\""; @@ -621,7 +647,7 @@ class Pref_Feeds extends Handler_Protected { print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"private\" id=\"private\" $checked> <label for=\"private\">".__('Hide from Popular feeds')."</label>"; - $include_in_digest = sql_bool_to_bool(db_fetch_result($result, 0, "include_in_digest")); + $include_in_digest = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "include_in_digest")); if ($include_in_digest) { $checked = "checked=\"1\""; @@ -634,7 +660,7 @@ class Pref_Feeds extends Handler_Protected { $checked> <label for=\"include_in_digest\">".__('Include in e-mail digest')."</label>"; - $always_display_enclosures = sql_bool_to_bool(db_fetch_result($result, 0, "always_display_enclosures")); + $always_display_enclosures = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "always_display_enclosures")); if ($always_display_enclosures) { $checked = "checked"; @@ -646,7 +672,7 @@ class Pref_Feeds extends Handler_Protected { name=\"always_display_enclosures\" $checked> <label for=\"always_display_enclosures\">".__('Always display image attachments')."</label>"; - $hide_images = sql_bool_to_bool(db_fetch_result($result, 0, "hide_images")); + $hide_images = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "hide_images")); if ($hide_images) { $checked = "checked=\"1\""; @@ -659,7 +685,7 @@ class Pref_Feeds extends Handler_Protected { $checked> <label for=\"hide_images\">". __('Do not embed images')."</label>"; - $cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images")); + $cache_images = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "cache_images")); if ($cache_images) { $checked = "checked=\"1\""; @@ -672,7 +698,7 @@ class Pref_Feeds extends Handler_Protected { $checked> <label for=\"cache_images\">". __('Cache images locally')."</label>"; - $mark_unread_on_update = sql_bool_to_bool(db_fetch_result($result, 0, "mark_unread_on_update")); + $mark_unread_on_update = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "mark_unread_on_update")); if ($mark_unread_on_update) { $checked = "checked"; @@ -709,6 +735,9 @@ class Pref_Feeds extends Handler_Protected { print "</div>"; + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_EDIT_FEED, + "hook_prefs_edit_feed", $feed_id); + $title = htmlspecialchars($title, ENT_QUOTES); print "<div class='dlgButtons'> @@ -717,7 +746,7 @@ class Pref_Feeds extends Handler_Protected { __('Unsubscribe')."</button>"; if (PUBSUBHUBBUB_ENABLED) { - $pubsub_state = db_fetch_result($result, 0, "pubsub_state"); + $pubsub_state = $this->dbh->fetch_result($result, 0, "pubsub_state"); $pubsub_btn_disabled = ($pubsub_state == 2) ? "" : "disabled=\"1\""; print "<button dojoType=\"dijit.form.Button\" id=\"pubsubReset_Btn\" $pubsub_btn_disabled @@ -741,7 +770,7 @@ class Pref_Feeds extends Handler_Protected { global $purge_intervals; global $update_intervals; - $feed_ids = db_escape_string($this->link, $_REQUEST["ids"]); + $feed_ids = $this->dbh->escape_string($_REQUEST["ids"]); print_notice("Enable the options you wish to apply using checkboxes on the right:"); @@ -758,7 +787,7 @@ class Pref_Feeds extends Handler_Protected { print "<input dojoType=\"dijit.form.ValidationTextBox\" disabled=\"1\" style=\"font-size : 16px; width : 20em;\" required=\"1\" - name=\"title\" value=\"$title\">"; + name=\"title\" value=\"\">"; $this->batch_edit_cbox("title"); @@ -769,19 +798,19 @@ class Pref_Feeds extends Handler_Protected { print __('URL:') . " "; print "<input dojoType=\"dijit.form.ValidationTextBox\" disabled=\"1\" required=\"1\" regExp='^(http|https)://.*' style=\"width : 20em\" - name=\"feed_url\" value=\"$feed_url\">"; + name=\"feed_url\" value=\"\">"; $this->batch_edit_cbox("feed_url"); /* Category */ - if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + if (get_pref('ENABLE_FEED_CATS')) { print "<br/>"; print __('Place in category:') . " "; - print_feed_cat_select($this->link, "cat_id", $cat_id, + print_feed_cat_select("cat_id", false, 'disabled="1" dojoType="dijit.form.Select"'); $this->batch_edit_cbox("cat_id"); @@ -795,7 +824,7 @@ class Pref_Feeds extends Handler_Protected { /* Update Interval */ - print_select_hash("update_interval", $update_interval, $update_intervals, + print_select_hash("update_interval", "", $update_intervals, 'disabled="1" dojoType="dijit.form.Select"'); $this->batch_edit_cbox("update_interval"); @@ -808,7 +837,7 @@ class Pref_Feeds extends Handler_Protected { print __('Article purging:') . " "; - print_select_hash("purge_interval", $purge_interval, $purge_intervals, + print_select_hash("purge_interval", "", $purge_intervals, 'disabled="1" dojoType="dijit.form.Select"'); $this->batch_edit_cbox("purge_interval"); @@ -820,13 +849,13 @@ class Pref_Feeds extends Handler_Protected { print "<input dojoType=\"dijit.form.TextBox\" placeHolder=\"".__("Login")."\" disabled=\"1\" - name=\"auth_login\" value=\"$auth_login\">"; + name=\"auth_login\" value=\"\">"; $this->batch_edit_cbox("auth_login"); print "<br/><input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\" placeHolder=\"".__("Password")."\" disabled=\"1\" - value=\"$auth_pass\">"; + value=\"\">"; $this->batch_edit_cbox("auth_pass"); @@ -897,29 +926,39 @@ class Pref_Feeds extends Handler_Protected { function editsaveops($batch) { - $feed_title = db_escape_string($this->link, trim($_POST["title"])); - $feed_link = db_escape_string($this->link, trim($_POST["feed_url"])); - $upd_intl = (int) db_escape_string($this->link, $_POST["update_interval"]); - $purge_intl = (int) db_escape_string($this->link, $_POST["purge_interval"]); - $feed_id = (int) db_escape_string($this->link, $_POST["id"]); /* editSave */ - $feed_ids = db_escape_string($this->link, $_POST["ids"]); /* batchEditSave */ - $cat_id = (int) db_escape_string($this->link, $_POST["cat_id"]); - $auth_login = db_escape_string($this->link, trim($_POST["auth_login"])); - $auth_pass = db_escape_string($this->link, trim($_POST["auth_pass"])); - $private = checkbox_to_sql_bool(db_escape_string($this->link, $_POST["private"])); + $feed_title = $this->dbh->escape_string(trim($_POST["title"])); + $feed_link = $this->dbh->escape_string(trim($_POST["feed_url"])); + $upd_intl = (int) $this->dbh->escape_string($_POST["update_interval"]); + $purge_intl = (int) $this->dbh->escape_string($_POST["purge_interval"]); + $feed_id = (int) $this->dbh->escape_string($_POST["id"]); /* editSave */ + $feed_ids = $this->dbh->escape_string($_POST["ids"]); /* batchEditSave */ + $cat_id = (int) $this->dbh->escape_string($_POST["cat_id"]); + $auth_login = $this->dbh->escape_string(trim($_POST["auth_login"])); + $auth_pass = trim($_POST["auth_pass"]); + $private = checkbox_to_sql_bool($this->dbh->escape_string($_POST["private"])); $include_in_digest = checkbox_to_sql_bool( - db_escape_string($this->link, $_POST["include_in_digest"])); + $this->dbh->escape_string($_POST["include_in_digest"])); $cache_images = checkbox_to_sql_bool( - db_escape_string($this->link, $_POST["cache_images"])); + $this->dbh->escape_string($_POST["cache_images"])); $hide_images = checkbox_to_sql_bool( - db_escape_string($this->link, $_POST["hide_images"])); + $this->dbh->escape_string($_POST["hide_images"])); $always_display_enclosures = checkbox_to_sql_bool( - db_escape_string($this->link, $_POST["always_display_enclosures"])); + $this->dbh->escape_string($_POST["always_display_enclosures"])); $mark_unread_on_update = checkbox_to_sql_bool( - db_escape_string($this->link, $_POST["mark_unread_on_update"])); + $this->dbh->escape_string($_POST["mark_unread_on_update"])); + + if (strlen(FEED_CRYPT_KEY) > 0) { + require_once "crypt.php"; + $auth_pass = substr(encrypt_string($auth_pass), 0, 250); + $auth_pass_encrypted = 'true'; + } else { + $auth_pass_encrypted = 'false'; + } - if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + $auth_pass = $this->dbh->escape_string($auth_pass); + + if (get_pref('ENABLE_FEED_CATS')) { if ($cat_id && $cat_id != 0) { $category_qpart = "cat_id = '$cat_id',"; $category_qpart_nocomma = "cat_id = '$cat_id'"; @@ -934,13 +973,14 @@ class Pref_Feeds extends Handler_Protected { if (!$batch) { - $result = db_query($this->link, "UPDATE ttrss_feeds SET + $result = $this->dbh->query("UPDATE ttrss_feeds SET $category_qpart title = '$feed_title', feed_url = '$feed_link', update_interval = '$upd_intl', purge_interval = '$purge_intl', auth_login = '$auth_login', auth_pass = '$auth_pass', + auth_pass_encrypted = $auth_pass_encrypted, private = $private, cache_images = $cache_images, hide_images = $hide_images, @@ -949,6 +989,9 @@ class Pref_Feeds extends Handler_Protected { mark_unread_on_update = $mark_unread_on_update WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]); + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_SAVE_FEED, + "hook_prefs_save_feed", $feed_id); + } else { $feed_data = array(); @@ -958,7 +1001,7 @@ class Pref_Feeds extends Handler_Protected { } } - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); foreach (array_keys($feed_data) as $k) { @@ -986,7 +1029,8 @@ class Pref_Feeds extends Handler_Protected { break; case "auth_pass": - $qpart = "auth_pass = '$auth_pass'"; + $qpart = "auth_pass = '$auth_pass' AND + auth_pass_encrypted = $auth_pass_encrypted"; break; case "private": @@ -1020,23 +1064,23 @@ class Pref_Feeds extends Handler_Protected { } if ($qpart) { - db_query($this->link, + $this->dbh->query( "UPDATE ttrss_feeds SET $qpart WHERE id IN ($feed_ids) AND owner_uid = " . $_SESSION["uid"]); print "<br/>"; } } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } return; } function resetPubSub() { - $ids = db_escape_string($this->link, $_REQUEST["ids"]); + $ids = $this->dbh->escape_string($_REQUEST["ids"]); - db_query($this->link, "UPDATE ttrss_feeds SET pubsub_state = 0 WHERE id IN ($ids) + $this->dbh->query("UPDATE ttrss_feeds SET pubsub_state = 0 WHERE id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); return; @@ -1044,30 +1088,30 @@ class Pref_Feeds extends Handler_Protected { function remove() { - $ids = split(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { - Pref_Feeds::remove_feed($this->link, $id, $_SESSION["uid"]); + Pref_Feeds::remove_feed($id, $_SESSION["uid"]); } return; } function clear() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $this->clear_feed_articles($this->link, $id); + $id = $this->dbh->escape_string($_REQUEST["id"]); + $this->clear_feed_articles($id); } function rescore() { require_once "rssfuncs.php"; - $ids = split(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { - $filters = load_filters($this->link, $id, $_SESSION["uid"], 6); + $filters = load_filters($id, $_SESSION["uid"], 6); - $result = db_query($this->link, "SELECT + $result = $this->dbh->query("SELECT title, content, link, ref_id, author,". SUBSTRING_FOR_DATE."(updated, 1, 19) AS updated FROM @@ -1078,9 +1122,9 @@ class Pref_Feeds extends Handler_Protected { $scores = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { - $tags = get_article_tags($this->link, $line["ref_id"]); + $tags = get_article_tags($line["ref_id"]); $article_filters = get_article_filters($filters, $line['title'], $line['content'], $line['link'], strtotime($line['updated']), @@ -1095,15 +1139,15 @@ class Pref_Feeds extends Handler_Protected { foreach (array_keys($scores) as $s) { if ($s > 1000) { - db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s', + $this->dbh->query("UPDATE ttrss_user_entries SET score = '$s', marked = true WHERE ref_id IN (" . join(',', $scores[$s]) . ")"); } else if ($s < -500) { - db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s', + $this->dbh->query("UPDATE ttrss_user_entries SET score = '$s', unread = false WHERE ref_id IN (" . join(',', $scores[$s]) . ")"); } else { - db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s' WHERE + $this->dbh->query("UPDATE ttrss_user_entries SET score = '$s' WHERE ref_id IN (" . join(',', $scores[$s]) . ")"); } } @@ -1115,16 +1159,16 @@ class Pref_Feeds extends Handler_Protected { function rescoreAll() { - $result = db_query($this->link, + $result = $this->dbh->query( "SELECT id FROM ttrss_feeds WHERE owner_uid = " . $_SESSION['uid']); - while ($feed_line = db_fetch_assoc($result)) { + while ($feed_line = $this->dbh->fetch_assoc($result)) { $id = $feed_line["id"]; - $filters = load_filters($this->link, $id, $_SESSION["uid"], 6); + $filters = load_filters($id, $_SESSION["uid"], 6); - $tmp_result = db_query($this->link, "SELECT + $tmp_result = $this->dbh->query("SELECT title, content, link, ref_id, author,". SUBSTRING_FOR_DATE."(updated, 1, 19) AS updated FROM @@ -1135,9 +1179,9 @@ class Pref_Feeds extends Handler_Protected { $scores = array(); - while ($line = db_fetch_assoc($tmp_result)) { + while ($line = $this->dbh->fetch_assoc($tmp_result)) { - $tags = get_article_tags($this->link, $line["ref_id"]); + $tags = get_article_tags($line["ref_id"]); $article_filters = get_article_filters($filters, $line['title'], $line['content'], $line['link'], strtotime($line['updated']), @@ -1152,11 +1196,11 @@ class Pref_Feeds extends Handler_Protected { foreach (array_keys($scores) as $s) { if ($s > 1000) { - db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s', + $this->dbh->query("UPDATE ttrss_user_entries SET score = '$s', marked = true WHERE ref_id IN (" . join(',', $scores[$s]) . ")"); } else { - db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s' WHERE + $this->dbh->query("UPDATE ttrss_user_entries SET score = '$s' WHERE ref_id IN (" . join(',', $scores[$s]) . ")"); } } @@ -1167,9 +1211,9 @@ class Pref_Feeds extends Handler_Protected { } function categorize() { - $ids = split(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); - $cat_id = db_escape_string($this->link, $_REQUEST["cat_id"]); + $cat_id = $this->dbh->escape_string($_REQUEST["cat_id"]); if ($cat_id == 0) { $cat_id_qpart = 'NULL'; @@ -1177,30 +1221,30 @@ class Pref_Feeds extends Handler_Protected { $cat_id_qpart = "'$cat_id'"; } - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); foreach ($ids as $id) { - db_query($this->link, "UPDATE ttrss_feeds SET cat_id = $cat_id_qpart + $this->dbh->query("UPDATE ttrss_feeds SET cat_id = $cat_id_qpart WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } function removeCat() { - $ids = split(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { - $this->remove_feed_category($this->link, $id, $_SESSION["uid"]); + $this->remove_feed_category($id, $_SESSION["uid"]); } } function addCat() { - $feed_cat = db_escape_string($this->link, trim($_REQUEST["cat"])); + $feed_cat = $this->dbh->escape_string(trim($_REQUEST["cat"])); - add_feed_category($this->link, $feed_cat); + add_feed_category($feed_cat); } function index() { @@ -1208,10 +1252,10 @@ class Pref_Feeds extends Handler_Protected { print "<div dojoType=\"dijit.layout.AccordionContainer\" region=\"center\">"; print "<div id=\"pref-feeds-feeds\" dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Feeds')."\">"; - $result = db_query($this->link, "SELECT COUNT(id) AS num_errors + $result = $this->dbh->query("SELECT COUNT(id) AS num_errors FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]); - $num_errors = db_fetch_result($result, 0, "num_errors"); + $num_errors = $this->dbh->fetch_result($result, 0, "num_errors"); if ($num_errors > 0) { @@ -1226,13 +1270,13 @@ class Pref_Feeds extends Handler_Protected { $interval_qpart = "DATE_SUB(NOW(), INTERVAL 3 MONTH)"; } - $result = db_query($this->link, "SELECT COUNT(*) AS num_inactive FROM ttrss_feeds WHERE + $result = $this->dbh->query("SELECT COUNT(*) AS num_inactive FROM ttrss_feeds WHERE (SELECT MAX(updated) FROM ttrss_entries, ttrss_user_entries WHERE ttrss_entries.id = ref_id AND ttrss_user_entries.feed_id = ttrss_feeds.id) < $interval_qpart AND ttrss_feeds.owner_uid = ".$_SESSION["uid"]); - $num_inactive = db_fetch_result($result, 0, "num_inactive"); + $num_inactive = $this->dbh->fetch_result($result, 0, "num_inactive"); if ($num_inactive > 0) { $inactive_button = "<button dojoType=\"dijit.form.Button\" @@ -1240,7 +1284,7 @@ class Pref_Feeds extends Handler_Protected { __("Inactive feeds") . "</button>"; } - $feed_search = db_escape_string($this->link, $_REQUEST["search"]); + $feed_search = $this->dbh->escape_string($_REQUEST["search"]); if (array_key_exists("search", $_REQUEST)) { $_SESSION["prefs_feed_search"] = $feed_search; @@ -1283,7 +1327,7 @@ class Pref_Feeds extends Handler_Protected { .__('Unsubscribe')."</div> "; print "</div></div>"; - if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + if (get_pref('ENABLE_FEED_CATS')) { print "<div dojoType=\"dijit.form.DropDownButton\">". "<span>" . __('Categories')."</span>"; print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">"; @@ -1300,9 +1344,6 @@ class Pref_Feeds extends Handler_Protected { print $error_button; print $inactive_button; - print "<button onclick=\"toggleHiddenFeedCats()\" - dojoType=\"dijit.form.Button\">".__('(Un)hide empty categories')."</button>"; - if (defined('_ENABLE_FEED_DEBUGGING')) { print "<select id=\"feedActionChooser\" onchange=\"feedActionChange()\"> @@ -1403,8 +1444,7 @@ class Pref_Feeds extends Handler_Protected { print "<button dojoType=\"dijit.form.Button\" onclick=\"return displayDlg('".__("Public OPML URL")."','pubOPMLUrl')\">". __('Display published OPML URL')."</button> "; - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION, "hook_prefs_tab_section", "prefFeedsOPML"); print "</div>"; # pane @@ -1450,15 +1490,12 @@ class Pref_Feeds extends Handler_Protected { print "<button dojoType=\"dijit.form.Button\" onclick=\"return clearArticleAccessKeys()\">". __('Unshare all articles')."</button> "; - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION, "hook_prefs_tab_section", "prefFeedsPublishedGenerated"); print "</div>"; #pane - global $pluginhost; - - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB, "hook_prefs_tab", "prefFeeds"); print "</div>"; #container @@ -1469,14 +1506,14 @@ class Pref_Feeds extends Handler_Protected { $cat_id = (int) $cat_id; if ($cat_id > 0) { - $cat_unread = ccache_find($this->link, $cat_id, $_SESSION["uid"], true); + $cat_unread = ccache_find($cat_id, $_SESSION["uid"], true); } else if ($cat_id == 0 || $cat_id == -2) { - $cat_unread = getCategoryUnread($this->link, $cat_id); + $cat_unread = getCategoryUnread($cat_id); } $obj['id'] = 'CAT:' . $cat_id; $obj['items'] = array(); - $obj['name'] = getCategoryTitle($this->link, $cat_id); + $obj['name'] = getCategoryTitle($cat_id); $obj['type'] = 'category'; $obj['unread'] = (int) $cat_unread; $obj['bare_id'] = $cat_id; @@ -1489,10 +1526,10 @@ class Pref_Feeds extends Handler_Protected { $feed_id = (int) $feed_id; if (!$title) - $title = getFeedTitle($this->link, $feed_id, false); + $title = getFeedTitle($feed_id, false); if ($unread === false) - $unread = getFeedUnread($this->link, $feed_id, false); + $unread = getFeedUnread($feed_id, false); $obj['id'] = 'FEED:' . $feed_id; $obj['name'] = $title; @@ -1514,7 +1551,7 @@ class Pref_Feeds extends Handler_Protected { $interval_qpart = "DATE_SUB(NOW(), INTERVAL 3 MONTH)"; } - $result = db_query($this->link, "SELECT ttrss_feeds.title, ttrss_feeds.site_url, + $result = $this->dbh->query("SELECT ttrss_feeds.title, ttrss_feeds.site_url, ttrss_feeds.feed_url, ttrss_feeds.id, MAX(updated) AS last_article FROM ttrss_feeds, ttrss_entries, ttrss_user_entries WHERE (SELECT MAX(updated) FROM ttrss_entries, ttrss_user_entries WHERE @@ -1545,9 +1582,8 @@ class Pref_Feeds extends Handler_Protected { $lnum = 1; - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { - $class = ($lnum % 2) ? "even" : "odd"; $feed_id = $line["id"]; $this_row_id = "id=\"FUPDD-$feed_id\""; @@ -1568,7 +1604,7 @@ class Pref_Feeds extends Handler_Protected { htmlspecialchars($line["title"])."</a>"; print "</td><td class=\"insensitive\" align='right'>"; - print make_local_datetime($this->link, $line['last_article'], false); + print make_local_datetime($line['last_article'], false); print "</td>"; print "</tr>"; @@ -1595,7 +1631,7 @@ class Pref_Feeds extends Handler_Protected { print "<h2>" . __("These feeds have not been updated because of errors:") . "</h2>"; - $result = db_query($this->link, "SELECT id,title,feed_url,last_error,site_url + $result = $this->dbh->query("SELECT id,title,feed_url,last_error,site_url FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]); print "<div dojoType=\"dijit.Toolbar\">"; @@ -1615,9 +1651,8 @@ class Pref_Feeds extends Handler_Protected { $lnum = 1; - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { - $class = ($lnum % 2) ? "even" : "odd"; $feed_id = $line["id"]; $this_row_id = "id=\"FERDD-$feed_id\""; @@ -1669,53 +1704,53 @@ class Pref_Feeds extends Handler_Protected { * @param integer $id The id of the feed to purge. * @return void */ - private function clear_feed_articles($link, $id) { + private function clear_feed_articles($id) { if ($id != 0) { - $result = db_query($link, "DELETE FROM ttrss_user_entries + $result = $this->dbh->query("DELETE FROM ttrss_user_entries WHERE feed_id = '$id' AND marked = false AND owner_uid = " . $_SESSION["uid"]); } else { - $result = db_query($link, "DELETE FROM ttrss_user_entries + $result = $this->dbh->query("DELETE FROM ttrss_user_entries WHERE feed_id IS NULL AND marked = false AND owner_uid = " . $_SESSION["uid"]); } - $result = db_query($link, "DELETE FROM ttrss_entries WHERE + $result = $this->dbh->query("DELETE FROM ttrss_entries WHERE (SELECT COUNT(int_id) FROM ttrss_user_entries WHERE ref_id = id) = 0"); - ccache_update($link, $id, $_SESSION['uid']); + ccache_update($id, $_SESSION['uid']); } // function clear_feed_articles - private function remove_feed_category($link, $id, $owner_uid) { + private function remove_feed_category($id, $owner_uid) { - db_query($link, "DELETE FROM ttrss_feed_categories + $this->dbh->query("DELETE FROM ttrss_feed_categories WHERE id = '$id' AND owner_uid = $owner_uid"); - ccache_remove($link, $id, $owner_uid, true); + ccache_remove($id, $owner_uid, true); } - static function remove_feed($link, $id, $owner_uid) { + static function remove_feed($id, $owner_uid) { if ($id > 0) { /* save starred articles in Archived feed */ - db_query($link, "BEGIN"); + db_query("BEGIN"); /* prepare feed if necessary */ - $result = db_query($link, "SELECT feed_url FROM ttrss_feeds WHERE id = $id + $result = db_query("SELECT feed_url FROM ttrss_feeds WHERE id = $id AND owner_uid = $owner_uid"); - $feed_url = db_escape_string($link, db_fetch_result($result, 0, "feed_url")); + $feed_url = db_escape_string(db_fetch_result($result, 0, "feed_url")); - $result = db_query($link, "SELECT id FROM ttrss_archived_feeds + $result = db_query("SELECT id FROM ttrss_archived_feeds WHERE feed_url = '$feed_url' AND owner_uid = $owner_uid"); if (db_num_rows($result) == 0) { - $result = db_query($link, "SELECT MAX(id) AS id FROM ttrss_archived_feeds"); + $result = db_query("SELECT MAX(id) AS id FROM ttrss_archived_feeds"); $new_feed_id = (int)db_fetch_result($result, 0, "id") + 1; - db_query($link, "INSERT INTO ttrss_archived_feeds + db_query("INSERT INTO ttrss_archived_feeds (id, owner_uid, title, feed_url, site_url) SELECT $new_feed_id, owner_uid, title, feed_url, site_url from ttrss_feeds WHERE id = '$id'"); @@ -1725,31 +1760,31 @@ class Pref_Feeds extends Handler_Protected { $archive_id = db_fetch_result($result, 0, "id"); } - db_query($link, "UPDATE ttrss_user_entries SET feed_id = NULL, + db_query("UPDATE ttrss_user_entries SET feed_id = NULL, orig_feed_id = '$archive_id' WHERE feed_id = '$id' AND marked = true AND owner_uid = $owner_uid"); /* Remove access key for the feed */ - db_query($link, "DELETE FROM ttrss_access_keys WHERE + db_query("DELETE FROM ttrss_access_keys WHERE feed_id = '$id' AND owner_uid = $owner_uid"); /* remove the feed */ - db_query($link, "DELETE FROM ttrss_feeds + db_query("DELETE FROM ttrss_feeds WHERE id = '$id' AND owner_uid = $owner_uid"); - db_query($link, "COMMIT"); + db_query("COMMIT"); if (file_exists(ICONS_DIR . "/$id.ico")) { unlink(ICONS_DIR . "/$id.ico"); } - ccache_remove($link, $id, $owner_uid); + ccache_remove($id, $owner_uid); } else { - label_remove($link, feed_to_label_id($id), $owner_uid); - //ccache_remove($link, $id, $owner_uid); don't think labels are cached + label_remove(feed_to_label_id($id), $owner_uid); + //ccache_remove($id, $owner_uid); don't think labels are cached } } @@ -1760,9 +1795,9 @@ class Pref_Feeds extends Handler_Protected { print "<table width='100%'><tr><td> ".__("Add one valid RSS feed per line (no feed detection is done)")." </td><td align='right'>"; - if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + if (get_pref('ENABLE_FEED_CATS')) { print __('Place in category:') . " "; - print_feed_cat_select($this->link, "cat", false, 'dojoType="dijit.form.Select"'); + print_feed_cat_select("cat", false, 'dojoType="dijit.form.Select"'); } print "</td></tr><tr><td colspan='2'>"; print "<textarea @@ -1802,17 +1837,17 @@ class Pref_Feeds extends Handler_Protected { } function batchAddFeeds() { - $cat_id = db_escape_string($this->link, $_REQUEST['cat']); + $cat_id = $this->dbh->escape_string($_REQUEST['cat']); $feeds = explode("\n", $_REQUEST['feeds']); - $login = db_escape_string($this->link, $_REQUEST['login']); - $pass = db_escape_string($this->link, $_REQUEST['pass']); + $login = $this->dbh->escape_string($_REQUEST['login']); + $pass = trim($_REQUEST['pass']); foreach ($feeds as $feed) { - $feed = db_escape_string($this->link, trim($feed)); + $feed = $this->dbh->escape_string(trim($feed)); if (validate_feed_url($feed)) { - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); if ($cat_id == "0" || !$cat_id) { $cat_qpart = "NULL"; @@ -1820,68 +1855,78 @@ class Pref_Feeds extends Handler_Protected { $cat_qpart = "'$cat_id'"; } - $result = db_query($this->link, + $result = $this->dbh->query( "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed' AND owner_uid = ".$_SESSION["uid"]); - if (db_num_rows($result) == 0) { - $result = db_query($this->link, + if (strlen(FEED_CRYPT_KEY) > 0) { + require_once "crypt.php"; + $pass = substr(encrypt_string($pass), 0, 250); + $auth_pass_encrypted = 'true'; + } else { + $auth_pass_encrypted = 'false'; + } + + $pass = $this->dbh->escape_string($pass); + + if ($this->dbh->num_rows($result) == 0) { + $result = $this->dbh->query( "INSERT INTO ttrss_feeds - (owner_uid,feed_url,title,cat_id,auth_login,auth_pass,update_method) + (owner_uid,feed_url,title,cat_id,auth_login,auth_pass,update_method,auth_pass_encrypted) VALUES ('".$_SESSION["uid"]."', '$feed', - '[Unknown]', $cat_qpart, '$login', '$pass', 0)"); + '[Unknown]', $cat_qpart, '$login', '$pass', 0, $auth_pass_encrypted)"); } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } } } function regenOPMLKey() { - $this->update_feed_access_key($this->link, 'OPML:Publish', + $this->update_feed_access_key('OPML:Publish', false, $_SESSION["uid"]); - $new_link = Opml::opml_publish_url($this->link); + $new_link = Opml::opml_publish_url(); print json_encode(array("link" => $new_link)); } function regenFeedKey() { - $feed_id = db_escape_string($this->link, $_REQUEST['id']); - $is_cat = db_escape_string($this->link, $_REQUEST['is_cat']) == "true"; + $feed_id = $this->dbh->escape_string($_REQUEST['id']); + $is_cat = $this->dbh->escape_string($_REQUEST['is_cat']) == "true"; - $new_key = $this->update_feed_access_key($this->link, $feed_id, $is_cat); + $new_key = $this->update_feed_access_key($feed_id, $is_cat); print json_encode(array("link" => $new_key)); } - private function update_feed_access_key($link, $feed_id, $is_cat, $owner_uid = false) { + private function update_feed_access_key($feed_id, $is_cat, $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; $sql_is_cat = bool_to_sql_bool($is_cat); - $result = db_query($link, "SELECT access_key FROM ttrss_access_keys + $result = $this->dbh->query("SELECT access_key FROM ttrss_access_keys WHERE feed_id = '$feed_id' AND is_cat = $sql_is_cat AND owner_uid = " . $owner_uid); - if (db_num_rows($result) == 1) { - $key = db_escape_string($this->link, sha1(uniqid(rand(), true))); + if ($this->dbh->num_rows($result) == 1) { + $key = $this->dbh->escape_string(sha1(uniqid(rand(), true))); - db_query($link, "UPDATE ttrss_access_keys SET access_key = '$key' + $this->dbh->query("UPDATE ttrss_access_keys SET access_key = '$key' WHERE feed_id = '$feed_id' AND is_cat = $sql_is_cat AND owner_uid = " . $owner_uid); return $key; } else { - return get_feed_access_key($link, $feed_id, $is_cat, $owner_uid); + return get_feed_access_key($feed_id, $is_cat, $owner_uid); } } // Silent function clearKeys() { - db_query($this->link, "DELETE FROM ttrss_access_keys WHERE + $this->dbh->query("DELETE FROM ttrss_access_keys WHERE owner_uid = " . $_SESSION["uid"]); } diff --git a/classes/pref/filters.php b/classes/pref/filters.php index 4be1cdae5..bcc7b5aec 100644 --- a/classes/pref/filters.php +++ b/classes/pref/filters.php @@ -9,7 +9,7 @@ class Pref_Filters extends Handler_Protected { } function filtersortreset() { - db_query($this->link, "UPDATE ttrss_filters2 + $this->dbh->query("UPDATE ttrss_filters2 SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); return; } @@ -31,7 +31,7 @@ class Pref_Filters extends Handler_Protected { if ($filter_id > 0) { - db_query($this->link, "UPDATE ttrss_filters2 SET + $this->dbh->query("UPDATE ttrss_filters2 SET order_id = $index WHERE id = '$filter_id' AND owner_uid = " .$_SESSION["uid"]); @@ -49,16 +49,16 @@ class Pref_Filters extends Handler_Protected { $filter["enabled"] = true; $filter["match_any_rule"] = sql_bool_to_bool( - checkbox_to_sql_bool(db_escape_string($this->link, $_REQUEST["match_any_rule"]))); + checkbox_to_sql_bool($this->dbh->escape_string($_REQUEST["match_any_rule"]))); $filter["inverse"] = sql_bool_to_bool( - checkbox_to_sql_bool(db_escape_string($this->link, $_REQUEST["inverse"]))); + checkbox_to_sql_bool($this->dbh->escape_string($_REQUEST["inverse"]))); $filter["rules"] = array(); - $result = db_query($this->link, "SELECT id,name FROM ttrss_filter_types"); + $result = $this->dbh->query("SELECT id,name FROM ttrss_filter_types"); $filter_types = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $filter_types[$line["id"]] = $line["name"]; } @@ -83,9 +83,7 @@ class Pref_Filters extends Handler_Protected { } } - $feed_title = getFeedTitle($this->link, $feed); - - $qfh_ret = queryFeedHeadlines($this->link, -4, 30, "", false, false, false, + $qfh_ret = queryFeedHeadlines(-4, 30, "", false, false, false, "date_entered DESC", 0, $_SESSION["uid"], $filter); $result = $qfh_ret[0]; @@ -98,10 +96,10 @@ class Pref_Filters extends Handler_Protected { print "<div class=\"filterTestHolder\">"; print "<table width=\"100%\" cellspacing=\"0\" id=\"prefErrorFeedList\">"; - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $entry_timestamp = strtotime($line["updated"]); - $entry_tags = get_article_tags($this->link, $line["id"], $_SESSION["uid"]); + $entry_tags = get_article_tags($line["id"], $_SESSION["uid"]); $content_preview = truncate_string( strip_tags($line["content_preview"]), 100, '...'); @@ -158,7 +156,7 @@ class Pref_Filters extends Handler_Protected { $filter_search = $_SESSION["prefs_filter_search"]; - $result = db_query($this->link, "SELECT *, + $result = $this->dbh->query("SELECT *, (SELECT action_param FROM ttrss_filters2_actions WHERE filter_id = ttrss_filters2.id ORDER BY id LIMIT 1) AS action_param, (SELECT action_id FROM ttrss_filters2_actions @@ -176,7 +174,7 @@ class Pref_Filters extends Handler_Protected { $folder = array(); $folder['items'] = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { /* if ($action_id != $line["action_id"]) { if (count($folder['items']) > 0) { @@ -194,10 +192,10 @@ class Pref_Filters extends Handler_Protected { $match_ok = false; if ($filter_search) { - $rules_result = db_query($this->link, + $rules_result = $this->dbh->query( "SELECT reg_exp FROM ttrss_filters2_rules WHERE filter_id = ".$line["id"]); - while ($rule_line = db_fetch_assoc($rules_result)) { + while ($rule_line = $this->dbh->fetch_assoc($rules_result)) { if (mb_strpos($rule_line['reg_exp'], $filter_search) !== false) { $match_ok = true; break; @@ -206,13 +204,13 @@ class Pref_Filters extends Handler_Protected { } if ($line['action_id'] == 7) { - $label_result = db_query($this->link, "SELECT fg_color, bg_color - FROM ttrss_labels2 WHERE caption = '".db_escape_string($this->link, $line['action_param'])."' AND + $label_result = $this->dbh->query("SELECT fg_color, bg_color + FROM ttrss_labels2 WHERE caption = '".$this->dbh->escape_string($line['action_param'])."' AND owner_uid = " . $_SESSION["uid"]); - if (db_num_rows($label_result) > 0) { - $fg_color = db_fetch_result($label_result, 0, "fg_color"); - $bg_color = db_fetch_result($label_result, 0, "bg_color"); + if ($this->dbh->num_rows($label_result) > 0) { + $fg_color = $this->dbh->fetch_result($label_result, 0, "fg_color"); + $bg_color = $this->dbh->fetch_result($label_result, 0, "bg_color"); $name[1] = "<span class=\"labelColorIndicator\" id=\"label-editor-indicator\" style='color : $fg_color; background-color : $bg_color; margin-right : 4px'>α</span>" . $name[1]; } @@ -248,15 +246,15 @@ class Pref_Filters extends Handler_Protected { function edit() { - $filter_id = db_escape_string($this->link, $_REQUEST["id"]); + $filter_id = $this->dbh->escape_string($_REQUEST["id"]); - $result = db_query($this->link, + $result = $this->dbh->query( "SELECT * FROM ttrss_filters2 WHERE id = '$filter_id' AND owner_uid = " . $_SESSION["uid"]); - $enabled = sql_bool_to_bool(db_fetch_result($result, 0, "enabled")); - $match_any_rule = sql_bool_to_bool(db_fetch_result($result, 0, "match_any_rule")); - $inverse = sql_bool_to_bool(db_fetch_result($result, 0, "inverse")); - $title = htmlspecialchars(db_fetch_result($result, 0, "title")); + $enabled = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "enabled")); + $match_any_rule = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "match_any_rule")); + $inverse = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "inverse")); + $title = htmlspecialchars($this->dbh->fetch_result($result, 0, "title")); print "<form id=\"filter_edit_form\" onsubmit='return false'>"; @@ -294,10 +292,10 @@ class Pref_Filters extends Handler_Protected { print "<ul id='filterDlg_Matches'>"; - $rules_result = db_query($this->link, "SELECT * FROM ttrss_filters2_rules + $rules_result = $this->dbh->query("SELECT * FROM ttrss_filters2_rules WHERE filter_id = '$filter_id' ORDER BY reg_exp, id"); - while ($line = db_fetch_assoc($rules_result)) { + while ($line = $this->dbh->fetch_assoc($rules_result)) { if (sql_bool_to_bool($line["cat_filter"])) { $line["feed_id"] = "CAT:" . (int)$line["cat_id"]; } @@ -342,10 +340,10 @@ class Pref_Filters extends Handler_Protected { print "<ul id='filterDlg_Actions'>"; - $actions_result = db_query($this->link, "SELECT * FROM ttrss_filters2_actions + $actions_result = $this->dbh->query("SELECT * FROM ttrss_filters2_actions WHERE filter_id = '$filter_id' ORDER BY id"); - while ($line = db_fetch_assoc($actions_result)) { + while ($line = $this->dbh->fetch_assoc($actions_result)) { $line["action_param_label"] = $line["action_param"]; unset($line["filter_id"]); @@ -417,19 +415,19 @@ class Pref_Filters extends Handler_Protected { if (strpos($feed_id, "CAT:") === 0) { $feed_id = (int) substr($feed_id, 4); - $feed = getCategoryTitle($this->link, $feed_id); + $feed = getCategoryTitle($feed_id); } else { $feed_id = (int) $feed_id; if ($rule["feed_id"]) - $feed = getFeedTitle($this->link, (int)$rule["feed_id"]); + $feed = getFeedTitle((int)$rule["feed_id"]); else $feed = __("All feeds"); } - $result = db_query($this->link, "SELECT description FROM ttrss_filter_types + $result = $this->dbh->query("SELECT description FROM ttrss_filter_types WHERE id = ".(int)$rule["filter_type"]); - $filter_type = db_fetch_result($result, 0, "description"); + $filter_type = $this->dbh->fetch_result($result, 0, "description"); return T_sprintf("%s on %s in %s %s", strip_tags($rule["reg_exp"]), $filter_type, $feed, isset($rule["inverse"]) ? __("(inverse)") : ""); @@ -440,10 +438,10 @@ class Pref_Filters extends Handler_Protected { } private function getActionName($action) { - $result = db_query($this->link, "SELECT description FROM + $result = $this->dbh->query("SELECT description FROM ttrss_filter_actions WHERE id = " .(int)$action["action_id"]); - $title = __(db_fetch_result($result, 0, "description")); + $title = __($this->dbh->fetch_result($result, 0, "description")); if ($action["action_id"] == 4 || $action["action_id"] == 6 || $action["action_id"] == 7) @@ -463,13 +461,13 @@ class Pref_Filters extends Handler_Protected { # print_r($_REQUEST); - $filter_id = db_escape_string($this->link, $_REQUEST["id"]); - $enabled = checkbox_to_sql_bool(db_escape_string($this->link, $_REQUEST["enabled"])); - $match_any_rule = checkbox_to_sql_bool(db_escape_string($this->link, $_REQUEST["match_any_rule"])); - $inverse = checkbox_to_sql_bool(db_escape_string($this->link, $_REQUEST["inverse"])); - $title = db_escape_string($this->link, $_REQUEST["title"]); + $filter_id = $this->dbh->escape_string($_REQUEST["id"]); + $enabled = checkbox_to_sql_bool($this->dbh->escape_string($_REQUEST["enabled"])); + $match_any_rule = checkbox_to_sql_bool($this->dbh->escape_string($_REQUEST["match_any_rule"])); + $inverse = checkbox_to_sql_bool($this->dbh->escape_string($_REQUEST["inverse"])); + $title = $this->dbh->escape_string($_REQUEST["title"]); - $result = db_query($this->link, "UPDATE ttrss_filters2 SET enabled = $enabled, + $result = $this->dbh->query("UPDATE ttrss_filters2 SET enabled = $enabled, match_any_rule = $match_any_rule, inverse = $inverse, title = '$title' @@ -482,17 +480,17 @@ class Pref_Filters extends Handler_Protected { function remove() { - $ids = split(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { - db_query($this->link, "DELETE FROM ttrss_filters2 WHERE id = '$id' AND owner_uid = ". $_SESSION["uid"]); + $this->dbh->query("DELETE FROM ttrss_filters2 WHERE id = '$id' AND owner_uid = ". $_SESSION["uid"]); } } private function saveRulesAndActions($filter_id) { - db_query($this->link, "DELETE FROM ttrss_filters2_rules WHERE filter_id = '$filter_id'"); - db_query($this->link, "DELETE FROM ttrss_filters2_actions WHERE filter_id = '$filter_id'"); + $this->dbh->query("DELETE FROM ttrss_filters2_rules WHERE filter_id = '$filter_id'"); + $this->dbh->query("DELETE FROM ttrss_filters2_actions WHERE filter_id = '$filter_id'"); if ($filter_id) { /* create rules */ @@ -521,11 +519,11 @@ class Pref_Filters extends Handler_Protected { foreach ($rules as $rule) { if ($rule) { - $reg_exp = strip_tags(db_escape_string($this->link, trim($rule["reg_exp"]))); + $reg_exp = strip_tags($this->dbh->escape_string(trim($rule["reg_exp"]))); $inverse = isset($rule["inverse"]) ? "true" : "false"; - $filter_type = (int) db_escape_string($this->link, trim($rule["filter_type"])); - $feed_id = db_escape_string($this->link, trim($rule["feed_id"])); + $filter_type = (int) $this->dbh->escape_string(trim($rule["filter_type"])); + $feed_id = $this->dbh->escape_string(trim($rule["feed_id"])); if (strpos($feed_id, "CAT:") === 0) { @@ -546,16 +544,16 @@ class Pref_Filters extends Handler_Protected { (filter_id, reg_exp,filter_type,feed_id,cat_id,cat_filter,inverse) VALUES ('$filter_id', '$reg_exp', '$filter_type', $feed_id, $cat_id, $cat_filter, $inverse)"; - db_query($this->link, $query); + $this->dbh->query($query); } } foreach ($actions as $action) { if ($action) { - $action_id = (int) db_escape_string($this->link, $action["action_id"]); - $action_param = db_escape_string($this->link, $action["action_param"]); - $action_param_label = db_escape_string($this->link, $action["action_param_label"]); + $action_id = (int) $this->dbh->escape_string($action["action_id"]); + $action_param = $this->dbh->escape_string($action["action_param"]); + $action_param_label = $this->dbh->escape_string($action["action_param_label"]); if ($action_id == 7) { $action_param = $action_param_label; @@ -569,7 +567,7 @@ class Pref_Filters extends Handler_Protected { (filter_id, action_id, action_param) VALUES ('$filter_id', '$action_id', '$action_param')"; - db_query($this->link, $query); + $this->dbh->query($query); } } } @@ -586,35 +584,35 @@ class Pref_Filters extends Handler_Protected { $enabled = checkbox_to_sql_bool($_REQUEST["enabled"]); $match_any_rule = checkbox_to_sql_bool($_REQUEST["match_any_rule"]); - $title = db_escape_string($this->link, $_REQUEST["title"]); + $title = $this->dbh->escape_string($_REQUEST["title"]); - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); /* create base filter */ - $result = db_query($this->link, "INSERT INTO ttrss_filters2 + $result = $this->dbh->query("INSERT INTO ttrss_filters2 (owner_uid, match_any_rule, enabled, title) VALUES (".$_SESSION["uid"].",$match_any_rule,$enabled, '$title')"); - $result = db_query($this->link, "SELECT MAX(id) AS id FROM ttrss_filters2 + $result = $this->dbh->query("SELECT MAX(id) AS id FROM ttrss_filters2 WHERE owner_uid = ".$_SESSION["uid"]); - $filter_id = db_fetch_result($result, 0, "id"); + $filter_id = $this->dbh->fetch_result($result, 0, "id"); $this->saveRulesAndActions($filter_id); - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } function index() { - $sort = db_escape_string($this->link, $_REQUEST["sort"]); + $sort = $this->dbh->escape_string($_REQUEST["sort"]); if (!$sort || $sort == "undefined") { $sort = "reg_exp"; } - $filter_search = db_escape_string($this->link, $_REQUEST["search"]); + $filter_search = $this->dbh->escape_string($_REQUEST["search"]); if (array_key_exists("search", $_REQUEST)) { $_SESSION["prefs_filter_search"] = $filter_search; @@ -626,7 +624,7 @@ class Pref_Filters extends Handler_Protected { print "<div id=\"pref-filter-header\" dojoType=\"dijit.layout.ContentPane\" region=\"top\">"; print "<div id=\"pref-filter-toolbar\" dojoType=\"dijit.Toolbar\">"; - $filter_search = db_escape_string($this->link, $_REQUEST["search"]); + $filter_search = $this->dbh->escape_string($_REQUEST["search"]); if (array_key_exists("search", $_REQUEST)) { $_SESSION["prefs_filter_search"] = $filter_search; @@ -706,8 +704,7 @@ class Pref_Filters extends Handler_Protected { print "</div>"; #pane - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB, "hook_prefs_tab", "prefFilters"); print "</div>"; #container @@ -832,12 +829,12 @@ class Pref_Filters extends Handler_Protected { print "<form name='filter_new_rule_form' id='filter_new_rule_form'>"; - $result = db_query($this->link, "SELECT id,description + $result = $this->dbh->query("SELECT id,description FROM ttrss_filter_types WHERE id != 5 ORDER BY description"); $filter_types = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $filter_types[$line["id"]] = __($line["description"]); } @@ -864,7 +861,7 @@ class Pref_Filters extends Handler_Protected { print __("in") . " "; print "<span id='filterDlg_feeds'>"; - print_feed_select($this->link, "feed_id", + print_feed_select("feed_id", $cat_filter ? "CAT:$feed_id" : $feed_id, 'dojoType="dijit.form.FilteringSelect"'); print "</span>"; @@ -888,7 +885,7 @@ class Pref_Filters extends Handler_Protected { $action = json_decode($_REQUEST["action"], true); if ($action) { - $action_param = db_escape_string($this->link, $action["action_param"]); + $action_param = $this->dbh->escape_string($action["action_param"]); $action_id = (int)$action["action_id"]; } else { $action_param = ""; @@ -904,10 +901,10 @@ class Pref_Filters extends Handler_Protected { print "<select name=\"action_id\" dojoType=\"dijit.form.Select\" onchange=\"filterDlgCheckAction(this)\">"; - $result = db_query($this->link, "SELECT id,description FROM ttrss_filter_actions + $result = $this->dbh->query("SELECT id,description FROM ttrss_filter_actions ORDER BY name"); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $is_selected = ($line["id"] == $action_id) ? "selected='1'" : ""; printf("<option $is_selected value='%d'>%s</option>", $line["id"], __($line["description"])); } @@ -928,7 +925,7 @@ class Pref_Filters extends Handler_Protected { id=\"filterDlg_actionParam\" style=\"$param_hidden\" name=\"action_param\" value=\"$action_param\">"; - print_label_select($this->link, "action_param_label", $action_param, + print_label_select("action_param_label", $action_param, "id=\"filterDlg_actionParamLabel\" style=\"$label_param_hidden\" dojoType=\"dijit.form.Select\""); @@ -953,28 +950,28 @@ class Pref_Filters extends Handler_Protected { private function getFilterName($id) { - $result = db_query($this->link, + $result = $this->dbh->query( "SELECT title,COUNT(DISTINCT r.id) AS num_rules,COUNT(DISTINCT a.id) AS num_actions FROM ttrss_filters2 AS f LEFT JOIN ttrss_filters2_rules AS r ON (r.filter_id = f.id) LEFT JOIN ttrss_filters2_actions AS a ON (a.filter_id = f.id) WHERE f.id = '$id' GROUP BY f.title"); - $title = db_fetch_result($result, 0, "title"); - $num_rules = db_fetch_result($result, 0, "num_rules"); - $num_actions = db_fetch_result($result, 0, "num_actions"); + $title = $this->dbh->fetch_result($result, 0, "title"); + $num_rules = $this->dbh->fetch_result($result, 0, "num_rules"); + $num_actions = $this->dbh->fetch_result($result, 0, "num_actions"); if (!$title) $title = __("[No caption]"); $title = sprintf(_ngettext("%s (%d rule)", "%s (%d rules)", $num_rules), $title, $num_rules); - $result = db_query($this->link, + $result = $this->dbh->query( "SELECT * FROM ttrss_filters2_actions WHERE filter_id = '$id' ORDER BY id LIMIT 1"); $actions = ""; - if (db_num_rows($result) > 0) { - $line = db_fetch_assoc($result); + if ($this->dbh->num_rows($result) > 0) { + $line = $this->dbh->fetch_assoc($result); $actions = $this->getActionName($line); $num_actions -= 1; @@ -987,22 +984,22 @@ class Pref_Filters extends Handler_Protected { } function join() { - $ids = explode(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); if (count($ids) > 1) { $base_id = array_shift($ids); $ids_str = join(",", $ids); - db_query($this->link, "BEGIN"); - db_query($this->link, "UPDATE ttrss_filters2_rules + $this->dbh->query("BEGIN"); + $this->dbh->query("UPDATE ttrss_filters2_rules SET filter_id = '$base_id' WHERE filter_id IN ($ids_str)"); - db_query($this->link, "UPDATE ttrss_filters2_actions + $this->dbh->query("UPDATE ttrss_filters2_actions SET filter_id = '$base_id' WHERE filter_id IN ($ids_str)"); - db_query($this->link, "DELETE FROM ttrss_filters2 WHERE id IN ($ids_str)"); - db_query($this->link, "UPDATE ttrss_filters2 SET match_any_rule = true WHERE id = '$base_id'"); + $this->dbh->query("DELETE FROM ttrss_filters2 WHERE id IN ($ids_str)"); + $this->dbh->query("UPDATE ttrss_filters2 SET match_any_rule = true WHERE id = '$base_id'"); - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); $this->optimizeFilter($base_id); @@ -1010,14 +1007,14 @@ class Pref_Filters extends Handler_Protected { } private function optimizeFilter($id) { - db_query($this->link, "BEGIN"); - $result = db_query($this->link, "SELECT * FROM ttrss_filters2_actions + $this->dbh->query("BEGIN"); + $result = $this->dbh->query("SELECT * FROM ttrss_filters2_actions WHERE filter_id = '$id'"); $tmp = array(); $dupe_ids = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $id = $line["id"]; unset($line["id"]); @@ -1030,17 +1027,17 @@ class Pref_Filters extends Handler_Protected { if (count($dupe_ids) > 0) { $ids_str = join(",", $dupe_ids); - db_query($this->link, "DELETE FROM ttrss_filters2_actions + $this->dbh->query("DELETE FROM ttrss_filters2_actions WHERE id IN ($ids_str)"); } - $result = db_query($this->link, "SELECT * FROM ttrss_filters2_rules + $result = $this->dbh->query("SELECT * FROM ttrss_filters2_rules WHERE filter_id = '$id'"); $tmp = array(); $dupe_ids = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $id = $line["id"]; unset($line["id"]); @@ -1053,11 +1050,11 @@ class Pref_Filters extends Handler_Protected { if (count($dupe_ids) > 0) { $ids_str = join(",", $dupe_ids); - db_query($this->link, "DELETE FROM ttrss_filters2_rules + $this->dbh->query("DELETE FROM ttrss_filters2_rules WHERE id IN ($ids_str)"); } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } } ?> diff --git a/classes/pref/labels.php b/classes/pref/labels.php index b45354c94..2ad152c2d 100644 --- a/classes/pref/labels.php +++ b/classes/pref/labels.php @@ -8,12 +8,12 @@ class Pref_Labels extends Handler_Protected { } function edit() { - $label_id = db_escape_string($this->link, $_REQUEST['id']); + $label_id = $this->dbh->escape_string($_REQUEST['id']); - $result = db_query($this->link, "SELECT * FROM ttrss_labels2 WHERE + $result = $this->dbh->query("SELECT * FROM ttrss_labels2 WHERE id = '$label_id' AND owner_uid = " . $_SESSION["uid"]); - $line = db_fetch_assoc($result); + $line = $this->dbh->fetch_assoc($result); print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"$label_id\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-labels\">"; @@ -90,12 +90,12 @@ class Pref_Labels extends Handler_Protected { $root['name'] = __('Labels'); $root['items'] = array(); - $result = db_query($this->link, "SELECT * + $result = $this->dbh->query("SELECT * FROM ttrss_labels2 WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY caption"); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $label = array(); $label['id'] = 'LABEL:' . $line['id']; $label['bare_id'] = $line['id']; @@ -118,29 +118,29 @@ class Pref_Labels extends Handler_Protected { } function colorset() { - $kind = db_escape_string($this->link, $_REQUEST["kind"]); - $ids = split(',', db_escape_string($this->link, $_REQUEST["ids"])); - $color = db_escape_string($this->link, $_REQUEST["color"]); - $fg = db_escape_string($this->link, $_REQUEST["fg"]); - $bg = db_escape_string($this->link, $_REQUEST["bg"]); + $kind = $this->dbh->escape_string($_REQUEST["kind"]); + $ids = explode(',', $this->dbh->escape_string($_REQUEST["ids"])); + $color = $this->dbh->escape_string($_REQUEST["color"]); + $fg = $this->dbh->escape_string($_REQUEST["fg"]); + $bg = $this->dbh->escape_string($_REQUEST["bg"]); foreach ($ids as $id) { if ($kind == "fg" || $kind == "bg") { - db_query($this->link, "UPDATE ttrss_labels2 SET + $this->dbh->query("UPDATE ttrss_labels2 SET ${kind}_color = '$color' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); } else { - db_query($this->link, "UPDATE ttrss_labels2 SET + $this->dbh->query("UPDATE ttrss_labels2 SET fg_color = '$fg', bg_color = '$bg' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); } - $caption = db_escape_string($this->link, label_find_caption($this->link, $id, $_SESSION["uid"])); + $caption = $this->dbh->escape_string(label_find_caption($id, $_SESSION["uid"])); /* Remove cached data */ - db_query($this->link, "UPDATE ttrss_user_entries SET label_cache = '' + $this->dbh->query("UPDATE ttrss_user_entries SET label_cache = '' WHERE label_cache LIKE '%$caption%' AND owner_uid = " . $_SESSION["uid"]); } @@ -149,18 +149,18 @@ class Pref_Labels extends Handler_Protected { } function colorreset() { - $ids = split(',', db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(',', $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { - db_query($this->link, "UPDATE ttrss_labels2 SET + $this->dbh->query("UPDATE ttrss_labels2 SET fg_color = '', bg_color = '' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); - $caption = db_escape_string($this->link, label_find_caption($this->link, $id, $_SESSION["uid"])); + $caption = $this->dbh->escape_string(label_find_caption($id, $_SESSION["uid"])); /* Remove cached data */ - db_query($this->link, "UPDATE ttrss_user_entries SET label_cache = '' + $this->dbh->query("UPDATE ttrss_user_entries SET label_cache = '' WHERE label_cache LIKE '%$caption%' AND owner_uid = " . $_SESSION["uid"]); } @@ -168,31 +168,31 @@ class Pref_Labels extends Handler_Protected { function save() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $caption = db_escape_string($this->link, trim($_REQUEST["caption"])); + $id = $this->dbh->escape_string($_REQUEST["id"]); + $caption = $this->dbh->escape_string(trim($_REQUEST["caption"])); - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); - $result = db_query($this->link, "SELECT caption FROM ttrss_labels2 + $result = $this->dbh->query("SELECT caption FROM ttrss_labels2 WHERE id = '$id' AND owner_uid = ". $_SESSION["uid"]); - if (db_num_rows($result) != 0) { - $old_caption = db_fetch_result($result, 0, "caption"); + if ($this->dbh->num_rows($result) != 0) { + $old_caption = $this->dbh->fetch_result($result, 0, "caption"); - $result = db_query($this->link, "SELECT id FROM ttrss_labels2 + $result = $this->dbh->query("SELECT id FROM ttrss_labels2 WHERE caption = '$caption' AND owner_uid = ". $_SESSION["uid"]); - if (db_num_rows($result) == 0) { + if ($this->dbh->num_rows($result) == 0) { if ($caption) { - $result = db_query($this->link, "UPDATE ttrss_labels2 SET + $result = $this->dbh->query("UPDATE ttrss_labels2 SET caption = '$caption' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); /* Update filters that reference label being renamed */ - $old_caption = db_escape_string($this->link, $old_caption); + $old_caption = $this->dbh->escape_string($old_caption); - db_query($this->link, "UPDATE ttrss_filters2_actions SET + $this->dbh->query("UPDATE ttrss_filters2_actions SET action_param = '$caption' WHERE action_param = '$old_caption' AND action_id = 7 AND filter_id IN (SELECT id FROM ttrss_filters2 WHERE owner_uid = ".$_SESSION["uid"].")"); @@ -206,28 +206,28 @@ class Pref_Labels extends Handler_Protected { } } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); return; } function remove() { - $ids = split(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { - label_remove($this->link, $id, $_SESSION["uid"]); + label_remove($id, $_SESSION["uid"]); } } function add() { - $caption = db_escape_string($this->link, $_REQUEST["caption"]); - $output = db_escape_string($this->link, $_REQUEST["output"]); + $caption = $this->dbh->escape_string($_REQUEST["caption"]); + $output = $this->dbh->escape_string($_REQUEST["output"]); if ($caption) { - if (label_create($this->link, $caption)) { + if (label_create($caption)) { if (!$output) { print T_sprintf("Created label <b>%s</b>", htmlspecialchars($caption)); } @@ -238,7 +238,7 @@ class Pref_Labels extends Handler_Protected { print "<rpc-reply><payload>"; - print_label_select($this->link, "select_label", + print_label_select("select_label", $caption, ""); print "</payload></rpc-reply>"; @@ -250,13 +250,13 @@ class Pref_Labels extends Handler_Protected { function index() { - $sort = db_escape_string($this->link, $_REQUEST["sort"]); + $sort = $this->dbh->escape_string($_REQUEST["sort"]); if (!$sort || $sort == "undefined") { $sort = "caption"; } - $label_search = db_escape_string($this->link, $_REQUEST["search"]); + $label_search = $this->dbh->escape_string($_REQUEST["search"]); if (array_key_exists("search", $_REQUEST)) { $_SESSION["prefs_label_search"] = $label_search; @@ -319,8 +319,7 @@ class Pref_Labels extends Handler_Protected { print "</div>"; #pane - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB, "hook_prefs_tab", "prefLabels"); print "</div>"; #container diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php index 29541e04d..fb6795957 100644 --- a/classes/pref/prefs.php +++ b/classes/pref/prefs.php @@ -11,8 +11,8 @@ class Pref_Prefs extends Handler_Protected { return array_search($method, $csrf_ignored) !== false; } - function __construct($link, $args) { - parent::__construct($link, $args); + function __construct($args) { + parent::__construct($args); $this->pref_sections = array( 1 => __('General'), @@ -52,9 +52,10 @@ class Pref_Prefs extends Handler_Protected { "STRIP_IMAGES" => array(__("Do not embed images in articles"), ""), "STRIP_UNSAFE_TAGS" => array(__("Strip unsafe tags from articles"), __("Strip all but most common HTML tags when reading articles.")), "USER_STYLESHEET" => array(__("Customize stylesheet"), __("Customize CSS stylesheet to your liking")), - "USER_TIMEZONE" => array(__("User timezone"), ""), + "USER_TIMEZONE" => array(__("Time zone"), ""), "VFEED_GROUP_BY_FEED" => array(__("Group headlines in virtual feeds"), __("Special feeds, labels, and categories are grouped by originating feeds")), - "USER_CSS_THEME" => array(__("Select theme"), __("Select one of the available CSS themes")) + "USER_LANGUAGE" => array(__("Language")), + "USER_CSS_THEME" => array(__("Theme"), __("Select one of the available CSS themes")) ); } @@ -79,8 +80,7 @@ class Pref_Prefs extends Handler_Protected { return; } - global $pluginhost; - $authenticator = $pluginhost->get_plugin($_SESSION["auth_module"]); + $authenticator = PluginHost::getInstance()->get_plugin($_SESSION["auth_module"]); if (method_exists($authenticator, "change_password")) { print $authenticator->change_password($_SESSION["uid"], $old_pw, $new_pw); @@ -90,9 +90,6 @@ class Pref_Prefs extends Handler_Protected { } function saveconfig() { - - $_SESSION["prefs_cache"] = false; - $boolean_prefs = explode(",", $_POST["boolean_prefs"]); foreach ($boolean_prefs as $pref) { @@ -103,30 +100,25 @@ class Pref_Prefs extends Handler_Protected { foreach (array_keys($_POST) as $pref_name) { - $pref_name = db_escape_string($this->link, $pref_name); - $value = db_escape_string($this->link, $_POST[$pref_name]); + $pref_name = $this->dbh->escape_string($pref_name); + $value = $this->dbh->escape_string($_POST[$pref_name]); if ($pref_name == 'DIGEST_PREFERRED_TIME') { - if (get_pref($this->link, 'DIGEST_PREFERRED_TIME') != $value) { + if (get_pref('DIGEST_PREFERRED_TIME') != $value) { - db_query($this->link, "UPDATE ttrss_users SET + $this->dbh->query("UPDATE ttrss_users SET last_digest_sent = NULL WHERE id = " . $_SESSION['uid']); } } - if ($pref_name == "language") { + if ($pref_name == "USER_LANGUAGE") { if ($_SESSION["language"] != $value) { - setcookie("ttrss_lang", $value, - time() + SESSION_COOKIE_LIFETIME); - $_SESSION["language"] = $value; - $need_reload = true; } - } else { - set_pref($this->link, $pref_name, $value); } + set_pref($pref_name, $value); } if ($need_reload) { @@ -138,13 +130,13 @@ class Pref_Prefs extends Handler_Protected { function getHelp() { - $pref_name = db_escape_string($this->link, $_REQUEST["pn"]); + $pref_name = $this->dbh->escape_string($_REQUEST["pn"]); - $result = db_query($this->link, "SELECT help_text FROM ttrss_prefs + $result = $this->dbh->query("SELECT help_text FROM ttrss_prefs WHERE pref_name = '$pref_name'"); - if (db_num_rows($result) > 0) { - $help_text = db_fetch_result($result, 0, "help_text"); + if ($this->dbh->num_rows($result) > 0) { + $help_text = $this->dbh->fetch_result($result, 0, "help_text"); print $help_text; } else { printf(__("Unknown option: %s"), $pref_name); @@ -153,12 +145,12 @@ class Pref_Prefs extends Handler_Protected { function changeemail() { - $email = db_escape_string($this->link, $_POST["email"]); - $full_name = db_escape_string($this->link, $_POST["full_name"]); + $email = $this->dbh->escape_string($_POST["email"]); + $full_name = $this->dbh->escape_string($_POST["full_name"]); $active_uid = $_SESSION["uid"]; - db_query($this->link, "UPDATE ttrss_users SET email = '$email', + $this->dbh->query("UPDATE ttrss_users SET email = '$email', full_name = '$full_name' WHERE id = '$active_uid'"); print __("Your personal data has been saved."); @@ -176,10 +168,10 @@ class Pref_Prefs extends Handler_Protected { $profile_qpart = "profile IS NULL"; } - db_query($this->link, "DELETE FROM ttrss_user_prefs + $this->dbh->query("DELETE FROM ttrss_user_prefs WHERE $profile_qpart AND owner_uid = ".$_SESSION["uid"]); - initialize_user_prefs($this->link, $_SESSION["uid"], $_SESSION["profile"]); + initialize_user_prefs($_SESSION["uid"], $_SESSION["profile"]); echo __("Your preferences are now set to default values."); } @@ -225,13 +217,13 @@ class Pref_Prefs extends Handler_Protected { print "<h2>" . __("Personal data") . "</h2>"; - $result = db_query($this->link, "SELECT email,full_name,otp_enabled, + $result = $this->dbh->query("SELECT email,full_name,otp_enabled, access_level FROM ttrss_users WHERE id = ".$_SESSION["uid"]); - $email = htmlspecialchars(db_fetch_result($result, 0, "email")); - $full_name = htmlspecialchars(db_fetch_result($result, 0, "full_name")); - $otp_enabled = sql_bool_to_bool(db_fetch_result($result, 0, "otp_enabled")); + $email = htmlspecialchars($this->dbh->fetch_result($result, 0, "email")); + $full_name = htmlspecialchars($this->dbh->fetch_result($result, 0, "full_name")); + $otp_enabled = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "otp_enabled")); print "<tr><td width=\"40%\">".__('Full name')."</td>"; print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" name=\"full_name\" required=\"1\" @@ -242,7 +234,7 @@ class Pref_Prefs extends Handler_Protected { if (!SINGLE_USER_MODE && !$_SESSION["hide_hello"]) { - $access_level = db_fetch_result($result, 0, "access_level"); + $access_level = $this->dbh->fetch_result($result, 0, "access_level"); print "<tr><td width=\"40%\">".__('Access level')."</td>"; print "<td>" . $access_level_names[$access_level] . "</td></tr>"; } @@ -258,10 +250,7 @@ class Pref_Prefs extends Handler_Protected { print "</form>"; if ($_SESSION["auth_module"]) { - global $pluginhost; - - $authenticator = $pluginhost->get_plugin($_SESSION["auth_module"]); - + $authenticator = PluginHost::getInstance()->get_plugin($_SESSION["auth_module"]); } else { $authenticator = false; } @@ -270,11 +259,11 @@ class Pref_Prefs extends Handler_Protected { print "<h2>" . __("Password") . "</h2>"; - $result = db_query($this->link, "SELECT id FROM ttrss_users + $result = $this->dbh->query("SELECT id FROM ttrss_users WHERE id = ".$_SESSION["uid"]." AND pwd_hash = 'SHA1:5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8'"); - if (db_num_rows($result) != 0) { + if ($this->dbh->num_rows($result) != 0) { print format_warning(__("Your password is at default value, please change it."), "default_pass_warning"); } @@ -375,7 +364,7 @@ class Pref_Prefs extends Handler_Protected { print "</form>"; - } else { + } else if (function_exists("imagecreatefromstring")) { print "<p>".__("You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP.") . "</p>"; @@ -399,8 +388,8 @@ class Pref_Prefs extends Handler_Protected { parameters: dojo.objectToQuery(this.getValues()), onComplete: function(transport) { notify(''); - if (transport.responseText.indexOf('ERROR: ') == 0) { - notify_error(transport.responseText.replace('ERROR: ', '')); + if (transport.responseText.indexOf('ERROR:') == 0) { + notify_error(transport.responseText.replace('ERROR:', '')); } else { window.location.reload(); } @@ -416,11 +405,13 @@ class Pref_Prefs extends Handler_Protected { print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" type=\"password\" required=\"1\" name=\"password\"></td></tr>"; - print "<tr><td colspan=\"2\">"; + print "<tr><td width=\"40%\">".__("Enter the generated one time password")."</td>"; - print "<input dojoType=\"dijit.form.CheckBox\" required=\"1\" - type=\"checkbox\" id=\"enable_otp\" name=\"enable_otp\"/> "; - print "<label for=\"enable_otp\">".__("I have scanned the code and would like to enable OTP")."</label>"; + print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" autocomplete=\"off\" + required=\"1\" + name=\"otp\"></td></tr>"; + + print "<tr><td colspan=\"2\">"; print "</td></tr><tr><td colspan=\"2\">"; @@ -432,13 +423,16 @@ class Pref_Prefs extends Handler_Protected { print "</form>"; + } else { + + print_notice(__("PHP GD functions are required for OTP support.")); + } } } - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION, "hook_prefs_tab_section", "prefPrefsAuth"); print "</div>"; #pane @@ -478,10 +472,10 @@ class Pref_Prefs extends Handler_Protected { } if ($_SESSION["profile"]) { - initialize_user_prefs($this->link, $_SESSION["uid"], $_SESSION["profile"]); + initialize_user_prefs($_SESSION["uid"], $_SESSION["profile"]); $profile_qpart = "profile = '" . $_SESSION["profile"] . "'"; } else { - initialize_user_prefs($this->link, $_SESSION["uid"]); + initialize_user_prefs($_SESSION["uid"]); $profile_qpart = "profile IS NULL"; } @@ -492,7 +486,7 @@ class Pref_Prefs extends Handler_Protected { $access_query = 'true'; - $result = db_query($this->link, "SELECT DISTINCT + $result = $this->dbh->query("SELECT DISTINCT ttrss_user_prefs.pref_name,value,type_name, ttrss_prefs_sections.order_id, def_value,section_id @@ -511,7 +505,7 @@ class Pref_Prefs extends Handler_Protected { $listed_boolean_prefs = array(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { if (in_array($line["pref_name"], $prefs_blacklist)) { continue; @@ -545,22 +539,6 @@ class Pref_Prefs extends Handler_Protected { print "<tr><td colspan=\"3\"><h3>".$section_name."</h3></td></tr>"; $lnum = 0; - - if ($active_section == 2) { - print "<tr>"; - - print "<td width=\"40%\" class=\"prefName\">"; - print "<label>"; - print __("Language:"); - print "</label>"; - - print "<td>"; - print_select_hash("language", $_COOKIE["ttrss_lang"], get_translations(), - "style='width : 220px; margin : 0px' dojoType='dijit.form.Select'"); - print "</td>"; - print "</tr>"; - } - } print "<tr>"; @@ -576,7 +554,11 @@ class Pref_Prefs extends Handler_Protected { print "<td class=\"prefValue\">"; - if ($pref_name == "USER_TIMEZONE") { + if ($pref_name == "USER_LANGUAGE") { + print_select_hash($pref_name, $value, get_translations(), + "style='width : 220px; margin : 0px' dojoType='dijit.form.Select'"); + + } else if ($pref_name == "USER_TIMEZONE") { $timezones = explode("\n", file_get_contents("lib/timezones.txt")); @@ -676,8 +658,7 @@ class Pref_Prefs extends Handler_Protected { print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"boolean_prefs\" value=\"$listed_boolean_prefs\">"; - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION, "hook_prefs_tab_section", "prefPrefsPrefsInside"); print '</div>'; # inside pane @@ -713,8 +694,7 @@ class Pref_Prefs extends Handler_Protected { <label for='prefs_show_advanced'>" . __("Show additional preferences") . "</label>"; */ - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION, "hook_prefs_tab_section", "prefPrefsPrefsOutside"); print "</form>"; @@ -765,9 +745,9 @@ class Pref_Prefs extends Handler_Protected { <td width='10%'>".__('Author')."</td></tr>"; $system_enabled = array_map("trim", explode(",", PLUGINS)); - $user_enabled = array_map("trim", explode(",", get_pref($this->link, "_ENABLED_PLUGINS"))); + $user_enabled = array_map("trim", explode(",", get_pref("_ENABLED_PLUGINS"))); - $tmppluginhost = new PluginHost($this->link); + $tmppluginhost = new PluginHost(); $tmppluginhost->load_all($tmppluginhost::KIND_ALL, $_SESSION["uid"]); $tmppluginhost->load_data(true); @@ -878,8 +858,7 @@ class Pref_Prefs extends Handler_Protected { print "</div>"; #pane - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB, "hook_prefs_tab", "prefPrefs"); print "</div>"; #container @@ -895,52 +874,67 @@ class Pref_Prefs extends Handler_Protected { require_once "lib/otphp/lib/totp.php"; require_once "lib/phpqrcode/phpqrcode.php"; - $result = db_query($this->link, "SELECT login,salt,otp_enabled + $result = $this->dbh->query("SELECT login,salt,otp_enabled FROM ttrss_users WHERE id = ".$_SESSION["uid"]); $base32 = new Base32(); - $login = db_fetch_result($result, 0, "login"); - $otp_enabled = sql_bool_to_bool(db_fetch_result($result, 0, "otp_enabled")); + $login = $this->dbh->fetch_result($result, 0, "login"); + $otp_enabled = sql_bool_to_bool($this->dbh->fetch_result($result, 0, "otp_enabled")); if (!$otp_enabled) { - $secret = $base32->encode(sha1(db_fetch_result($result, 0, "salt"))); + $secret = $base32->encode(sha1($this->dbh->fetch_result($result, 0, "salt"))); $topt = new \OTPHP\TOTP($secret); print QRcode::png($topt->provisioning_uri($login)); } } function otpenable() { - $password = db_escape_string($this->link, $_REQUEST["password"]); - $enable_otp = $_REQUEST["enable_otp"] == "on"; + require_once "lib/otphp/vendor/base32.php"; + require_once "lib/otphp/lib/otp.php"; + require_once "lib/otphp/lib/totp.php"; - global $pluginhost; - $authenticator = $pluginhost->get_plugin($_SESSION["auth_module"]); + $password = $_REQUEST["password"]; + $otp = $_REQUEST["otp"]; + + $authenticator = PluginHost::getInstance()->get_plugin($_SESSION["auth_module"]); if ($authenticator->check_password($_SESSION["uid"], $password)) { - if ($enable_otp) { - db_query($this->link, "UPDATE ttrss_users SET otp_enabled = true WHERE + $result = $this->dbh->query("SELECT salt + FROM ttrss_users + WHERE id = ".$_SESSION["uid"]); + + $base32 = new Base32(); + + $secret = $base32->encode(sha1($this->dbh->fetch_result($result, 0, "salt"))); + $topt = new \OTPHP\TOTP($secret); + + $otp_check = $topt->now(); + + if ($otp == $otp_check) { + $this->dbh->query("UPDATE ttrss_users SET otp_enabled = true WHERE id = " . $_SESSION["uid"]); print "OK"; + } else { + print "ERROR:".__("Incorrect one time password"); } } else { - print "ERROR: ".__("Incorrect password"); + print "ERROR:".__("Incorrect password"); } } function otpdisable() { - $password = db_escape_string($this->link, $_REQUEST["password"]); + $password = $this->dbh->escape_string($_REQUEST["password"]); - global $pluginhost; - $authenticator = $pluginhost->get_plugin($_SESSION["auth_module"]); + $authenticator = PluginHost::getInstance()->get_plugin($_SESSION["auth_module"]); if ($authenticator->check_password($_SESSION["uid"], $password)) { - db_query($this->link, "UPDATE ttrss_users SET otp_enabled = false WHERE + $this->dbh->query("UPDATE ttrss_users SET otp_enabled = false WHERE id = " . $_SESSION["uid"]); print "OK"; @@ -956,18 +950,17 @@ class Pref_Prefs extends Handler_Protected { else $plugins = ""; - set_pref($this->link, "_ENABLED_PLUGINS", $plugins); + set_pref("_ENABLED_PLUGINS", $plugins); } function clearplugindata() { - $name = db_escape_string($this->link, $_REQUEST["name"]); + $name = $this->dbh->escape_string($_REQUEST["name"]); - global $pluginhost; - $pluginhost->clear_data($pluginhost->get_plugin($name)); + PluginHost::getInstance()->clear_data(PluginHost::getInstance()->get_plugin($name)); } function customizeCSS() { - $value = get_pref($this->link, "USER_STYLESHEET"); + $value = get_pref("USER_STYLESHEET"); $value = str_replace("<br/>", "\n", $value); @@ -1015,7 +1008,7 @@ class Pref_Prefs extends Handler_Protected { print "</div>"; - $result = db_query($this->link, "SELECT title,id FROM ttrss_settings_profiles + $result = $this->dbh->query("SELECT title,id FROM ttrss_settings_profiles WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY title"); print "<div class=\"prefProfileHolder\">"; @@ -1046,9 +1039,7 @@ class Pref_Prefs extends Handler_Protected { $lnum = 1; - while ($line = db_fetch_assoc($result)) { - - $class = ($lnum % 2) ? "even" : "odd"; + while ($line = $this->dbh->fetch_assoc($result)) { $profile_id = $line["id"]; $this_row_id = "id=\"FCATR-$profile_id\""; diff --git a/classes/pref/system.php b/classes/pref/system.php new file mode 100644 index 000000000..7accb1f91 --- /dev/null +++ b/classes/pref/system.php @@ -0,0 +1,90 @@ +<?php + +class Pref_System extends Handler_Protected { + + function before($method) { + if (parent::before($method)) { + if ($_SESSION["access_level"] < 10) { + print __("Your access level is insufficient to open this tab."); + return false; + } + return true; + } + return false; + } + + function csrf_ignore($method) { + $csrf_ignored = array("index"); + + return array_search($method, $csrf_ignored) !== false; + } + + function clearLog() { + $this->dbh->query("DELETE FROM ttrss_error_log"); + } + + function index() { + + print "<div dojoType=\"dijit.layout.AccordionContainer\" region=\"center\">"; + print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Error Log')."\">"; + + if (LOG_DESTINATION == "sql") { + + $result = $this->dbh->query("SELECT errno, errstr, filename, lineno, + created_at, login FROM ttrss_error_log + LEFT JOIN ttrss_users ON (owner_uid = ttrss_users.id) + ORDER BY ttrss_error_log.id DESC + LIMIT 100"); + + print "<button dojoType=\"dijit.form.Button\" + onclick=\"updateSystemList()\">".__('Refresh')."</button> "; + + print " <button dojoType=\"dijit.form.Button\" + onclick=\"clearSqlLog()\">".__('Clear log')."</button> "; + + print "<p><table width=\"100%\" cellspacing=\"10\" class=\"prefErrorLog\">"; + + print "<tr class=\"title\"> + <td width='5%'>".__("Error")."</td> + <td>".__("Filename")."</td> + <td>".__("Message")."</td> + <td width='5%'>".__("User")."</td> + <td width='5%'>".__("Date")."</td> + </tr>"; + + while ($line = $this->dbh->fetch_assoc($result)) { + print "<tr class=\"errrow\">"; + + foreach ($line as $k => $v) { + $line[$k] = htmlspecialchars($v); + } + + print "<td class='errno'>" . Logger::$errornames[$line["errno"]] . " (" . $line["errno"] . ")</td>"; + print "<td class='filename'>" . $line["filename"] . ":" . $line["lineno"] . "</td>"; + print "<td class='errstr'>" . $line["errstr"] . "</td>"; + print "<td class='login'>" . $line["login"] . "</td>"; + + print "<td class='timestamp'>" . + make_local_datetime( + $line["created_at"], false) . "</td>"; + + print "</tr>"; + } + + print "</table>"; + } else { + + print_notice("Please set LOG_DESTINATION to 'sql' in config.php to enable database logging."); + + } + + print "</div>"; + + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB, + "hook_prefs_tab", "prefSystem"); + + print "</div>"; #container + } + +} +?> diff --git a/classes/pref/users.php b/classes/pref/users.php index 891a69a52..60059dc8d 100644 --- a/classes/pref/users.php +++ b/classes/pref/users.php @@ -21,7 +21,7 @@ class Pref_Users extends Handler_Protected { $uid = sprintf("%d", $_REQUEST["id"]); - $result = db_query($this->link, "SELECT login, + $result = $this->dbh->query("SELECT login, ".SUBSTRING_FOR_DATE."(last_login,1,16) AS last_login, access_level, (SELECT COUNT(int_id) FROM ttrss_user_entries @@ -30,33 +30,33 @@ class Pref_Users extends Handler_Protected { FROM ttrss_users WHERE id = '$uid'"); - if (db_num_rows($result) == 0) { + if ($this->dbh->num_rows($result) == 0) { print "<h1>".__('User not found')."</h1>"; return; } // print "<h1>User Details</h1>"; - $login = db_fetch_result($result, 0, "login"); + $login = $this->dbh->fetch_result($result, 0, "login"); print "<table width='100%'>"; - $last_login = make_local_datetime($this->link, - db_fetch_result($result, 0, "last_login"), true); + $last_login = make_local_datetime( + $this->dbh->fetch_result($result, 0, "last_login"), true); - $created = make_local_datetime($this->link, - db_fetch_result($result, 0, "created"), true); + $created = make_local_datetime( + $this->dbh->fetch_result($result, 0, "created"), true); - $access_level = db_fetch_result($result, 0, "access_level"); - $stored_articles = db_fetch_result($result, 0, "stored_articles"); + $access_level = $this->dbh->fetch_result($result, 0, "access_level"); + $stored_articles = $this->dbh->fetch_result($result, 0, "stored_articles"); print "<tr><td>".__('Registered')."</td><td>$created</td></tr>"; print "<tr><td>".__('Last logged in')."</td><td>$last_login</td></tr>"; - $result = db_query($this->link, "SELECT COUNT(id) as num_feeds FROM ttrss_feeds + $result = $this->dbh->query("SELECT COUNT(id) as num_feeds FROM ttrss_feeds WHERE owner_uid = '$uid'"); - $num_feeds = db_fetch_result($result, 0, "num_feeds"); + $num_feeds = $this->dbh->fetch_result($result, 0, "num_feeds"); print "<tr><td>".__('Subscribed feeds count')."</td><td>$num_feeds</td></tr>"; @@ -64,14 +64,12 @@ class Pref_Users extends Handler_Protected { print "<h1>".__('Subscribed feeds')."</h1>"; - $result = db_query($this->link, "SELECT id,title,site_url FROM ttrss_feeds + $result = $this->dbh->query("SELECT id,title,site_url FROM ttrss_feeds WHERE owner_uid = '$uid' ORDER BY title"); print "<ul class=\"userFeedList\">"; - $row_class = "odd"; - - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $icon_file = ICONS_URL."/".$line["id"].".ico"; @@ -81,13 +79,11 @@ class Pref_Users extends Handler_Protected { $feed_icon = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\">"; } - print "<li class=\"$row_class\">$feed_icon <a href=\"".$line["site_url"]."\">".$line["title"]."</a></li>"; - - $row_class = $row_class == "even" ? "odd" : "even"; + print "<li>$feed_icon <a href=\"".$line["site_url"]."\">".$line["title"]."</a></li>"; } - if (db_num_rows($result) < $num_feeds) { + if ($this->dbh->num_rows($result) < $num_feeds) { // FIXME - add link to show ALL subscribed feeds here somewhere print "<li><img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\"> ...</li>"; @@ -105,18 +101,18 @@ class Pref_Users extends Handler_Protected { function edit() { global $access_level_names; - $id = db_escape_string($this->link, $_REQUEST["id"]); + $id = $this->dbh->escape_string($_REQUEST["id"]); print "<form id=\"user_edit_form\" onsubmit='return false'>"; print "<input type=\"hidden\" name=\"id\" value=\"$id\">"; print "<input type=\"hidden\" name=\"op\" value=\"pref-users\">"; print "<input type=\"hidden\" name=\"method\" value=\"editSave\">"; - $result = db_query($this->link, "SELECT * FROM ttrss_users WHERE id = '$id'"); + $result = $this->dbh->query("SELECT * FROM ttrss_users WHERE id = '$id'"); - $login = db_fetch_result($result, 0, "login"); - $access_level = db_fetch_result($result, 0, "access_level"); - $email = db_fetch_result($result, 0, "email"); + $login = $this->dbh->fetch_result($result, 0, "login"); + $access_level = $this->dbh->fetch_result($result, 0, "access_level"); + $email = $this->dbh->fetch_result($result, 0, "email"); $sel_disabled = ($id == $_SESSION["uid"]) ? "disabled" : ""; @@ -181,10 +177,10 @@ class Pref_Users extends Handler_Protected { } function editSave() { - $login = db_escape_string($this->link, trim($_REQUEST["login"])); - $uid = db_escape_string($this->link, $_REQUEST["id"]); + $login = $this->dbh->escape_string(trim($_REQUEST["login"])); + $uid = $this->dbh->escape_string($_REQUEST["id"]); $access_level = (int) $_REQUEST["access_level"]; - $email = db_escape_string($this->link, trim($_REQUEST["email"])); + $email = $this->dbh->escape_string(trim($_REQUEST["email"])); $password = $_REQUEST["password"]; if ($password) { @@ -195,52 +191,52 @@ class Pref_Users extends Handler_Protected { $pass_query_part = ""; } - db_query($this->link, "UPDATE ttrss_users SET $pass_query_part login = '$login', + $this->dbh->query("UPDATE ttrss_users SET $pass_query_part login = '$login', access_level = '$access_level', email = '$email', otp_enabled = false WHERE id = '$uid'"); } function remove() { - $ids = split(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { if ($id != $_SESSION["uid"] && $id != 1) { - db_query($this->link, "DELETE FROM ttrss_tags WHERE owner_uid = '$id'"); - db_query($this->link, "DELETE FROM ttrss_feeds WHERE owner_uid = '$id'"); - db_query($this->link, "DELETE FROM ttrss_users WHERE id = '$id'"); + $this->dbh->query("DELETE FROM ttrss_tags WHERE owner_uid = '$id'"); + $this->dbh->query("DELETE FROM ttrss_feeds WHERE owner_uid = '$id'"); + $this->dbh->query("DELETE FROM ttrss_users WHERE id = '$id'"); } } } function add() { - $login = db_escape_string($this->link, trim($_REQUEST["login"])); + $login = $this->dbh->escape_string(trim($_REQUEST["login"])); $tmp_user_pwd = make_password(8); $salt = substr(bin2hex(get_random_bytes(125)), 0, 250); $pwd_hash = encrypt_password($tmp_user_pwd, $salt, true); - $result = db_query($this->link, "SELECT id FROM ttrss_users WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_users WHERE login = '$login'"); - if (db_num_rows($result) == 0) { + if ($this->dbh->num_rows($result) == 0) { - db_query($this->link, "INSERT INTO ttrss_users + $this->dbh->query("INSERT INTO ttrss_users (login,pwd_hash,access_level,last_login,created, salt) VALUES ('$login', '$pwd_hash', 0, null, NOW(), '$salt')"); - $result = db_query($this->link, "SELECT id FROM ttrss_users WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_users WHERE login = '$login' AND pwd_hash = '$pwd_hash'"); - if (db_num_rows($result) == 1) { + if ($this->dbh->num_rows($result) == 1) { - $new_uid = db_fetch_result($result, 0, "id"); + $new_uid = $this->dbh->fetch_result($result, 0, "id"); print format_notice(T_sprintf("Added user <b>%s</b> with password <b>%s</b>", $login, $tmp_user_pwd)); - initialize_user($this->link, $new_uid); + initialize_user($new_uid); } else { @@ -252,9 +248,9 @@ class Pref_Users extends Handler_Protected { } } - static function resetUserPassword($link, $uid, $show_password) { + static function resetUserPassword($uid, $show_password) { - $result = db_query($link, "SELECT login,email + $result = db_query("SELECT login,email FROM ttrss_users WHERE id = '$uid'"); $login = db_fetch_result($result, 0, "login"); @@ -266,7 +262,7 @@ class Pref_Users extends Handler_Protected { $pwd_hash = encrypt_password($tmp_user_pwd, $new_salt, true); - db_query($link, "UPDATE ttrss_users SET pwd_hash = '$pwd_hash', salt = '$new_salt' + db_query("UPDATE ttrss_users SET pwd_hash = '$pwd_hash', salt = '$new_salt' WHERE id = '$uid'"); if ($show_password) { @@ -304,8 +300,8 @@ class Pref_Users extends Handler_Protected { } function resetPass() { - $uid = db_escape_string($this->link, $_REQUEST["id"]); - Pref_Users::resetUserPassword($this->link, $uid, true); + $uid = $this->dbh->escape_string($_REQUEST["id"]); + Pref_Users::resetUserPassword($uid, true); } function index() { @@ -317,7 +313,7 @@ class Pref_Users extends Handler_Protected { print "<div id=\"pref-user-toolbar\" dojoType=\"dijit.Toolbar\">"; - $user_search = db_escape_string($this->link, $_REQUEST["search"]); + $user_search = $this->dbh->escape_string($_REQUEST["search"]); if (array_key_exists("search", $_REQUEST)) { $_SESSION["prefs_user_search"] = $user_search; @@ -332,7 +328,7 @@ class Pref_Users extends Handler_Protected { __('Search')."</button> </div>"; - $sort = db_escape_string($this->link, $_REQUEST["sort"]); + $sort = $this->dbh->escape_string($_REQUEST["sort"]); if (!$sort || $sort == "undefined") { $sort = "login"; @@ -367,7 +363,7 @@ class Pref_Users extends Handler_Protected { if ($user_search) { - $user_search = split(" ", $user_search); + $user_search = explode(" ", $user_search); $tokens = array(); foreach ($user_search as $token) { @@ -381,7 +377,7 @@ class Pref_Users extends Handler_Protected { $user_search_query = ""; } - $result = db_query($this->link, "SELECT + $result = $this->dbh->query("SELECT id,login,access_level,email, ".SUBSTRING_FOR_DATE."(last_login,1,16) as last_login, ".SUBSTRING_FOR_DATE."(created,1,16) as created @@ -392,7 +388,7 @@ class Pref_Users extends Handler_Protected { id > 0 ORDER BY $sort"); - if (db_num_rows($result) > 0) { + if ($this->dbh->num_rows($result) > 0) { print "<p><table width=\"100%\" cellspacing=\"0\" class=\"prefUserList\" id=\"prefUserList\">"; @@ -406,9 +402,7 @@ class Pref_Users extends Handler_Protected { $lnum = 0; - while ($line = db_fetch_assoc($result)) { - - $class = ($lnum % 2) ? "even" : "odd"; + while ($line = $this->dbh->fetch_assoc($result)) { $uid = $line["id"]; @@ -416,8 +410,8 @@ class Pref_Users extends Handler_Protected { $line["login"] = htmlspecialchars($line["login"]); - $line["created"] = make_local_datetime($this->link, $line["created"], false); - $line["last_login"] = make_local_datetime($this->link, $line["last_login"], false); + $line["created"] = make_local_datetime($line["created"], false); + $line["last_login"] = make_local_datetime($line["last_login"], false); print "<td align='center'><input onclick='toggleSelectRow2(this);' dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" @@ -453,8 +447,7 @@ class Pref_Users extends Handler_Protected { print "</div>"; #pane - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB, "hook_prefs_tab", "prefUsers"); print "</div>"; #container diff --git a/classes/rpc.php b/classes/rpc.php index 508dd8d41..46583feb5 100644 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -8,18 +8,17 @@ class RPC extends Handler_Protected { } function setprofile() { - $id = db_escape_string($this->link, $_REQUEST["id"]); + $id = $this->dbh->escape_string($_REQUEST["id"]); $_SESSION["profile"] = $id; - $_SESSION["prefs_cache"] = array(); } function remprofiles() { - $ids = explode(",", db_escape_string($this->link, trim($_REQUEST["ids"]))); + $ids = explode(",", $this->dbh->escape_string(trim($_REQUEST["ids"]))); foreach ($ids as $id) { if ($_SESSION["profile"] != $id) { - db_query($this->link, "DELETE FROM ttrss_settings_profiles WHERE id = '$id' AND + $this->dbh->query("DELETE FROM ttrss_settings_profiles WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); } } @@ -27,38 +26,38 @@ class RPC extends Handler_Protected { // Silent function addprofile() { - $title = db_escape_string($this->link, trim($_REQUEST["title"])); + $title = $this->dbh->escape_string(trim($_REQUEST["title"])); if ($title) { - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); - $result = db_query($this->link, "SELECT id FROM ttrss_settings_profiles + $result = $this->dbh->query("SELECT id FROM ttrss_settings_profiles WHERE title = '$title' AND owner_uid = " . $_SESSION["uid"]); - if (db_num_rows($result) == 0) { + if ($this->dbh->num_rows($result) == 0) { - db_query($this->link, "INSERT INTO ttrss_settings_profiles (title, owner_uid) + $this->dbh->query("INSERT INTO ttrss_settings_profiles (title, owner_uid) VALUES ('$title', ".$_SESSION["uid"] .")"); - $result = db_query($this->link, "SELECT id FROM ttrss_settings_profiles WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_settings_profiles WHERE title = '$title'"); - if (db_num_rows($result) != 0) { - $profile_id = db_fetch_result($result, 0, "id"); + if ($this->dbh->num_rows($result) != 0) { + $profile_id = $this->dbh->fetch_result($result, 0, "id"); if ($profile_id) { - initialize_user_prefs($this->link, $_SESSION["uid"], $profile_id); + initialize_user_prefs($_SESSION["uid"], $profile_id); } } } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } } // Silent function saveprofile() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $title = db_escape_string($this->link, trim($_REQUEST["value"])); + $id = $this->dbh->escape_string($_REQUEST["id"]); + $title = $this->dbh->escape_string(trim($_REQUEST["value"])); if ($id == 0) { print __("Default profile"); @@ -66,55 +65,55 @@ class RPC extends Handler_Protected { } if ($title) { - db_query($this->link, "BEGIN"); + $this->dbh->query("BEGIN"); - $result = db_query($this->link, "SELECT id FROM ttrss_settings_profiles + $result = $this->dbh->query("SELECT id FROM ttrss_settings_profiles WHERE title = '$title' AND owner_uid =" . $_SESSION["uid"]); - if (db_num_rows($result) == 0) { - db_query($this->link, "UPDATE ttrss_settings_profiles + if ($this->dbh->num_rows($result) == 0) { + $this->dbh->query("UPDATE ttrss_settings_profiles SET title = '$title' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); print $title; } else { - $result = db_query($this->link, "SELECT title FROM ttrss_settings_profiles + $result = $this->dbh->query("SELECT title FROM ttrss_settings_profiles WHERE id = '$id' AND owner_uid =" . $_SESSION["uid"]); - print db_fetch_result($result, 0, "title"); + print $this->dbh->fetch_result($result, 0, "title"); } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } } // Silent function remarchive() { - $ids = explode(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { - $result = db_query($this->link, "DELETE FROM ttrss_archived_feeds WHERE + $result = $this->dbh->query("DELETE FROM ttrss_archived_feeds WHERE (SELECT COUNT(*) FROM ttrss_user_entries WHERE orig_feed_id = '$id') = 0 AND id = '$id' AND owner_uid = ".$_SESSION["uid"]); - $rc = db_affected_rows($this->link, $result); + $rc = $this->dbh->affected_rows($result); } } function addfeed() { - $feed = db_escape_string($this->link, $_REQUEST['feed']); - $cat = db_escape_string($this->link, $_REQUEST['cat']); - $login = db_escape_string($this->link, $_REQUEST['login']); - $pass = db_escape_string($this->link, $_REQUEST['pass']); + $feed = $this->dbh->escape_string($_REQUEST['feed']); + $cat = $this->dbh->escape_string($_REQUEST['cat']); + $login = $this->dbh->escape_string($_REQUEST['login']); + $pass = trim($_REQUEST['pass']); // escaped later - $rc = subscribe_to_feed($this->link, $feed, $cat, $login, $pass); + $rc = subscribe_to_feed($feed, $cat, $login, $pass); print json_encode(array("result" => $rc)); } function togglepref() { - $key = db_escape_string($this->link, $_REQUEST["key"]); - set_pref($this->link, $key, !get_pref($this->link, $key)); - $value = get_pref($this->link, $key); + $key = $this->dbh->escape_string($_REQUEST["key"]); + set_pref($key, !get_pref($key)); + $value = get_pref($key); print json_encode(array("param" =>$key, "value" => $value)); } @@ -124,14 +123,14 @@ class RPC extends Handler_Protected { $key = $_REQUEST['key']; $value = str_replace("\n", "<br/>", $_REQUEST['value']); - set_pref($this->link, $key, $value, $_SESSION['uid'], $key != 'USER_STYLESHEET'); + set_pref($key, $value, $_SESSION['uid'], $key != 'USER_STYLESHEET'); print json_encode(array("param" =>$key, "value" => $value)); } function mark() { $mark = $_REQUEST["mark"]; - $id = db_escape_string($this->link, $_REQUEST["id"]); + $id = $this->dbh->escape_string($_REQUEST["id"]); if ($mark == "1") { $mark = "true"; @@ -139,7 +138,7 @@ class RPC extends Handler_Protected { $mark = "false"; } - $result = db_query($this->link, "UPDATE ttrss_user_entries SET marked = $mark, + $result = $this->dbh->query("UPDATE ttrss_user_entries SET marked = $mark, last_marked = NOW() WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); @@ -147,12 +146,12 @@ class RPC extends Handler_Protected { } function delete() { - $ids = db_escape_string($this->link, $_REQUEST["ids"]); + $ids = $this->dbh->escape_string($_REQUEST["ids"]); - $result = db_query($this->link, "DELETE FROM ttrss_user_entries + $result = $this->dbh->query("DELETE FROM ttrss_user_entries WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); - purge_orphans($this->link); + purge_orphans(); print json_encode(array("message" => "UPDATE_COUNTERS")); } @@ -161,26 +160,26 @@ class RPC extends Handler_Protected { $ids = explode(",", $_REQUEST["ids"]); foreach ($ids as $id) { - $id = db_escape_string($this->link, trim($id)); - db_query($this->link, "BEGIN"); + $id = $this->dbh->escape_string(trim($id)); + $this->dbh->query("BEGIN"); - $result = db_query($this->link, "SELECT feed_url,site_url,title FROM ttrss_archived_feeds + $result = $this->dbh->query("SELECT feed_url,site_url,title FROM ttrss_archived_feeds WHERE id = (SELECT orig_feed_id FROM ttrss_user_entries WHERE ref_id = $id AND owner_uid = ".$_SESSION["uid"].")"); - if (db_num_rows($result) != 0) { - $feed_url = db_escape_string($this->link, db_fetch_result($result, 0, "feed_url")); - $site_url = db_escape_string($this->link, db_fetch_result($result, 0, "site_url")); - $title = db_escape_string($this->link, db_fetch_result($result, 0, "title")); + if ($this->dbh->num_rows($result) != 0) { + $feed_url = $this->dbh->escape_string(db_fetch_result($result, 0, "feed_url")); + $site_url = $this->dbh->escape_string(db_fetch_result($result, 0, "site_url")); + $title = $this->dbh->escape_string(db_fetch_result($result, 0, "title")); - $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = " .$_SESSION["uid"]); - if (db_num_rows($result) == 0) { + if ($this->dbh->num_rows($result) == 0) { if (!$title) $title = '[Unknown]'; - $result = db_query($this->link, + $result = $this->dbh->query( "INSERT INTO ttrss_feeds (owner_uid,feed_url,site_url,title,cat_id,auth_login,auth_pass,update_method) VALUES (".$_SESSION["uid"].", @@ -189,77 +188,77 @@ class RPC extends Handler_Protected { '$title', NULL, '', '', 0)"); - $result = db_query($this->link, + $result = $this->dbh->query( "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = ".$_SESSION["uid"]); - if (db_num_rows($result) != 0) { - $feed_id = db_fetch_result($result, 0, "id"); + if ($this->dbh->num_rows($result) != 0) { + $feed_id = $this->dbh->fetch_result($result, 0, "id"); } } else { - $feed_id = db_fetch_result($result, 0, "id"); + $feed_id = $this->dbh->fetch_result($result, 0, "id"); } if ($feed_id) { - $result = db_query($this->link, "UPDATE ttrss_user_entries + $result = $this->dbh->query("UPDATE ttrss_user_entries SET feed_id = '$feed_id', orig_feed_id = NULL WHERE ref_id = $id AND owner_uid = " . $_SESSION["uid"]); } } - db_query($this->link, "COMMIT"); + $this->dbh->query("COMMIT"); } print json_encode(array("message" => "UPDATE_COUNTERS")); } function archive() { - $ids = explode(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { - $this->archive_article($this->link, $id, $_SESSION["uid"]); + $this->archive_article($id, $_SESSION["uid"]); } print json_encode(array("message" => "UPDATE_COUNTERS")); } - private function archive_article($link, $id, $owner_uid) { - db_query($link, "BEGIN"); + private function archive_article($id, $owner_uid) { + $this->dbh->query("BEGIN"); - $result = db_query($link, "SELECT feed_id FROM ttrss_user_entries + $result = $this->dbh->query("SELECT feed_id FROM ttrss_user_entries WHERE ref_id = '$id' AND owner_uid = $owner_uid"); - if (db_num_rows($result) != 0) { + if ($this->dbh->num_rows($result) != 0) { /* prepare the archived table */ - $feed_id = (int) db_fetch_result($result, 0, "feed_id"); + $feed_id = (int) $this->dbh->fetch_result($result, 0, "feed_id"); if ($feed_id) { - $result = db_query($link, "SELECT id FROM ttrss_archived_feeds + $result = $this->dbh->query("SELECT id FROM ttrss_archived_feeds WHERE id = '$feed_id'"); - if (db_num_rows($result) == 0) { - db_query($link, "INSERT INTO ttrss_archived_feeds + if ($this->dbh->num_rows($result) == 0) { + $this->dbh->query("INSERT INTO ttrss_archived_feeds (id, owner_uid, title, feed_url, site_url) SELECT id, owner_uid, title, feed_url, site_url from ttrss_feeds WHERE id = '$feed_id'"); } - db_query($link, "UPDATE ttrss_user_entries + $this->dbh->query("UPDATE ttrss_user_entries SET orig_feed_id = feed_id, feed_id = NULL WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); } } - db_query($link, "COMMIT"); + $this->dbh->query("COMMIT"); } function publ() { $pub = $_REQUEST["pub"]; - $id = db_escape_string($this->link, $_REQUEST["id"]); - $note = trim(strip_tags(db_escape_string($this->link, $_REQUEST["note"]))); + $id = $this->dbh->escape_string($_REQUEST["id"]); + $note = trim(strip_tags($this->dbh->escape_string($_REQUEST["note"]))); if ($pub == "1") { $pub = "true"; @@ -267,7 +266,7 @@ class RPC extends Handler_Protected { $pub = "false"; } - $result = db_query($this->link, "UPDATE ttrss_user_entries SET + $result = $this->dbh->query("UPDATE ttrss_user_entries SET published = $pub, last_published = NOW() WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); @@ -276,7 +275,7 @@ class RPC extends Handler_Protected { if (PUBSUBHUBBUB_HUB) { $rss_link = get_self_url_prefix() . "/public.php?op=rss&id=-2&key=" . - get_feed_access_key($this->link, -2, false); + get_feed_access_key(-2, false); $p = new Publisher(PUBSUBHUBBUB_HUB); @@ -292,41 +291,41 @@ class RPC extends Handler_Protected { $reply = array(); - if ($seq) $reply['seq'] = $seq; + if (!empty($_REQUEST['seq'])) $reply['seq'] = (int) $_REQUEST['seq']; - if ($last_article_id != getLastArticleId($this->link)) { - $reply['counters'] = getAllCounters($this->link); + if ($last_article_id != getLastArticleId()) { + $reply['counters'] = getAllCounters(); } - $reply['runtime-info'] = make_runtime_info($this->link); + $reply['runtime-info'] = make_runtime_info(); print json_encode($reply); } /* GET["cmode"] = 0 - mark as read, 1 - as unread, 2 - toggle */ function catchupSelected() { - $ids = explode(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); $cmode = sprintf("%d", $_REQUEST["cmode"]); - catchupArticlesById($this->link, $ids, $cmode); + catchupArticlesById($ids, $cmode); print json_encode(array("message" => "UPDATE_COUNTERS", "ids" => $ids)); } function markSelected() { - $ids = explode(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); $cmode = sprintf("%d", $_REQUEST["cmode"]); - $this->markArticlesById($this->link, $ids, $cmode); + $this->markArticlesById($ids, $cmode); print json_encode(array("message" => "UPDATE_COUNTERS")); } function publishSelected() { - $ids = explode(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); $cmode = sprintf("%d", $_REQUEST["cmode"]); - $this->publishArticlesById($this->link, $ids, $cmode); + $this->publishArticlesById($ids, $cmode); print json_encode(array("message" => "UPDATE_COUNTERS")); } @@ -334,59 +333,61 @@ class RPC extends Handler_Protected { function sanityCheck() { $_SESSION["hasAudio"] = $_REQUEST["hasAudio"] === "true"; $_SESSION["hasSandbox"] = $_REQUEST["hasSandbox"] === "true"; + $_SESSION["hasMp3"] = $_REQUEST["hasMp3"] === "true"; + $_SESSION["clientTzOffset"] = $_REQUEST["clientTzOffset"]; $reply = array(); - $reply['error'] = sanity_check($this->link); + $reply['error'] = sanity_check(); if ($reply['error']['code'] == 0) { - $reply['init-params'] = make_init_params($this->link); - $reply['runtime-info'] = make_runtime_info($this->link); + $reply['init-params'] = make_init_params(); + $reply['runtime-info'] = make_runtime_info(); } print json_encode($reply); } function completeLabels() { - $search = db_escape_string($this->link, $_REQUEST["search"]); + $search = $this->dbh->escape_string($_REQUEST["search"]); - $result = db_query($this->link, "SELECT DISTINCT caption FROM + $result = $this->dbh->query("SELECT DISTINCT caption FROM ttrss_labels2 WHERE owner_uid = '".$_SESSION["uid"]."' AND LOWER(caption) LIKE LOWER('$search%') ORDER BY caption LIMIT 5"); print "<ul>"; - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { print "<li>" . $line["caption"] . "</li>"; } print "</ul>"; } function purge() { - $ids = explode(",", db_escape_string($this->link, $_REQUEST["ids"])); + $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); $days = sprintf("%d", $_REQUEST["days"]); foreach ($ids as $id) { - $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE id = '$id' AND owner_uid = ".$_SESSION["uid"]); - if (db_num_rows($result) == 1) { - purge_feed($this->link, $id, $days); + if ($this->dbh->num_rows($result) == 1) { + purge_feed($id, $days); } } } function updateFeedBrowser() { - $search = db_escape_string($this->link, $_REQUEST["search"]); - $limit = db_escape_string($this->link, $_REQUEST["limit"]); - $mode = (int) db_escape_string($this->link, $_REQUEST["mode"]); + $search = $this->dbh->escape_string($_REQUEST["search"]); + $limit = $this->dbh->escape_string($_REQUEST["limit"]); + $mode = (int) $this->dbh->escape_string($_REQUEST["mode"]); require_once "feedbrowser.php"; print json_encode(array("content" => - make_feed_browser($this->link, $search, $limit, $mode), + make_feed_browser($search, $limit, $mode), "mode" => $mode)); } @@ -401,14 +402,14 @@ class RPC extends Handler_Protected { if ($mode == 1) { foreach ($payload as $feed) { - $title = db_escape_string($this->link, $feed[0]); - $feed_url = db_escape_string($this->link, $feed[1]); + $title = $this->dbh->escape_string($feed[0]); + $feed_url = $this->dbh->escape_string($feed[1]); - $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]); - if (db_num_rows($result) == 0) { - $result = db_query($this->link, "INSERT INTO ttrss_feeds + if ($this->dbh->num_rows($result) == 0) { + $result = $this->dbh->query("INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id,site_url) VALUES ('".$_SESSION["uid"]."', '$feed_url', '$title', NULL, '')"); @@ -417,19 +418,19 @@ class RPC extends Handler_Protected { } else if ($mode == 2) { // feed archive foreach ($payload as $id) { - $result = db_query($this->link, "SELECT * FROM ttrss_archived_feeds + $result = $this->dbh->query("SELECT * FROM ttrss_archived_feeds WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); - if (db_num_rows($result) != 0) { - $site_url = db_escape_string($this->link, db_fetch_result($result, 0, "site_url")); - $feed_url = db_escape_string($this->link, db_fetch_result($result, 0, "feed_url")); - $title = db_escape_string($this->link, db_fetch_result($result, 0, "title")); + if ($this->dbh->num_rows($result) != 0) { + $site_url = $this->dbh->escape_string(db_fetch_result($result, 0, "site_url")); + $feed_url = $this->dbh->escape_string(db_fetch_result($result, 0, "feed_url")); + $title = $this->dbh->escape_string(db_fetch_result($result, 0, "title")); - $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]); - if (db_num_rows($result) == 0) { - $result = db_query($this->link, "INSERT INTO ttrss_feeds + if ($this->dbh->num_rows($result) == 0) { + $result = $this->dbh->query("INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id,site_url) VALUES ('$id','".$_SESSION["uid"]."', '$feed_url', '$title', NULL, '$site_url')"); @@ -440,35 +441,35 @@ class RPC extends Handler_Protected { } function catchupFeed() { - $feed_id = db_escape_string($this->link, $_REQUEST['feed_id']); - $is_cat = db_escape_string($this->link, $_REQUEST['is_cat']) == "true"; - $mode = db_escape_string($this->link, $_REQUEST['mode']); + $feed_id = $this->dbh->escape_string($_REQUEST['feed_id']); + $is_cat = $this->dbh->escape_string($_REQUEST['is_cat']) == "true"; + $mode = $this->dbh->escape_string($_REQUEST['mode']); - catchup_feed($this->link, $feed_id, $is_cat, false, false, $mode); + catchup_feed($feed_id, $is_cat, false, false, $mode); print json_encode(array("message" => "UPDATE_COUNTERS")); } function quickAddCat() { - $cat = db_escape_string($this->link, $_REQUEST["cat"]); + $cat = $this->dbh->escape_string($_REQUEST["cat"]); - add_feed_category($this->link, $cat); + add_feed_category($cat); - $result = db_query($this->link, "SELECT id FROM ttrss_feed_categories WHERE + $result = $this->dbh->query("SELECT id FROM ttrss_feed_categories WHERE title = '$cat' AND owner_uid = " . $_SESSION["uid"]); - if (db_num_rows($result) == 1) { - $id = db_fetch_result($result, 0, "id"); + if ($this->dbh->num_rows($result) == 1) { + $id = $this->dbh->fetch_result($result, 0, "id"); } else { $id = 0; } - print_feed_cat_select($this->link, "cat_id", $id); + print_feed_cat_select("cat_id", $id, ''); } // Silent function clearArticleKeys() { - db_query($this->link, "UPDATE ttrss_user_entries SET uuid = '' WHERE + $this->dbh->query("UPDATE ttrss_user_entries SET uuid = '' WHERE owner_uid = " . $_SESSION["uid"]); return; @@ -478,7 +479,7 @@ class RPC extends Handler_Protected { $wide = (int) $_REQUEST["wide"]; setcookie("ttrss_widescreen", $wide, - time() + SESSION_COOKIE_LIFETIME); + time() + COOKIE_LIFETIME_LONG); print json_encode(array("wide" => $wide)); } @@ -515,7 +516,7 @@ class RPC extends Handler_Protected { $random_qpart = sql_random_function(); // We search for feed needing update. - $result = db_query($this->link, "SELECT ttrss_feeds.feed_url,ttrss_feeds.id + $result = $this->dbh->query("SELECT ttrss_feeds.feed_url,ttrss_feeds.id FROM ttrss_feeds, ttrss_users, ttrss_user_prefs WHERE @@ -534,11 +535,11 @@ class RPC extends Handler_Protected { $tstart = time(); - while ($line = db_fetch_assoc($result)) { + while ($line = $this->dbh->fetch_assoc($result)) { $feed_id = $line["id"]; if (time() - $tstart < ini_get("max_execution_time") * 0.7) { - update_rss_feed($this->link, $feed_id, true); + update_rss_feed($feed_id, true); ++$num_updated; } else { break; @@ -546,8 +547,8 @@ class RPC extends Handler_Protected { } // Purge orphans and cleanup tags - purge_orphans($this->link); - cleanup_tags($this->link, 14, 50000); + purge_orphans(); + cleanup_tags(14, 50000); if ($num_updated > 0) { print json_encode(array("message" => "UPDATE_COUNTERS", @@ -558,7 +559,7 @@ class RPC extends Handler_Protected { } - private function markArticlesById($link, $ids, $cmode) { + private function markArticlesById($ids, $cmode) { $tmp_ids = array(); @@ -569,21 +570,21 @@ class RPC extends Handler_Protected { $ids_qpart = join(" OR ", $tmp_ids); if ($cmode == 0) { - db_query($link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET marked = false, last_marked = NOW() WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]); } else if ($cmode == 1) { - db_query($link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET marked = true, last_marked = NOW() WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]); } else { - db_query($link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET marked = NOT marked,last_marked = NOW() WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]); } } - private function publishArticlesById($link, $ids, $cmode) { + private function publishArticlesById($ids, $cmode) { $tmp_ids = array(); @@ -594,15 +595,15 @@ class RPC extends Handler_Protected { $ids_qpart = join(" OR ", $tmp_ids); if ($cmode == 0) { - db_query($link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET published = false,last_published = NOW() WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]); } else if ($cmode == 1) { - db_query($link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET published = true,last_published = NOW() WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]); } else { - db_query($link, "UPDATE ttrss_user_entries SET + $this->dbh->query("UPDATE ttrss_user_entries SET published = NOT published,last_published = NOW() WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]); } @@ -610,7 +611,7 @@ class RPC extends Handler_Protected { if (PUBSUBHUBBUB_HUB) { $rss_link = get_self_url_prefix() . "/public.php?op=rss&id=-2&key=" . - get_feed_access_key($link, -2, false); + get_feed_access_key(-2, false); $p = new Publisher(PUBSUBHUBBUB_HUB); @@ -619,14 +620,14 @@ class RPC extends Handler_Protected { } function getlinktitlebyid() { - $id = db_escape_string($this->link, $_REQUEST['id']); + $id = $this->dbh->escape_string($_REQUEST['id']); - $result = db_query($this->link, "SELECT link, title FROM ttrss_entries, ttrss_user_entries + $result = $this->dbh->query("SELECT link, title FROM ttrss_entries, ttrss_user_entries WHERE ref_id = '$id' AND ref_id = id AND owner_uid = ". $_SESSION["uid"]); - if (db_num_rows($result) != 0) { - $link = db_fetch_result($result, 0, "link"); - $title = db_fetch_result($result, 0, "title"); + if ($this->dbh->num_rows($result) != 0) { + $link = $this->dbh->fetch_result($result, 0, "link"); + $title = $this->dbh->fetch_result($result, 0, "title"); echo json_encode(array("link" => $link, "title" => $title)); } else { @@ -634,5 +635,16 @@ class RPC extends Handler_Protected { } } + function log() { + $logmsg = $this->dbh->escape_string($_REQUEST['logmsg']); + + if ($logmsg) { + Logger::get()->log_error(E_USER_WARNING, + $logmsg, '[client-js]', 0, false); + } + + echo json_encode(array("message" => "HOST_ERROR_LOGGED")); + + } } ?> diff --git a/classes/sanitizedummy.php b/classes/sanitizedummy.php deleted file mode 100644 index 7182fb7f5..000000000 --- a/classes/sanitizedummy.php +++ /dev/null @@ -1,7 +0,0 @@ -<?php -class SanitizeDummy extends SimplePie_Sanitize { - function sanitize($data, $type, $base = '') { - return $data; - } -} -?> diff --git a/classes/ttrssmailer.php b/classes/ttrssmailer.php index 1eb9f1d3a..1e8d07723 100644 --- a/classes/ttrssmailer.php +++ b/classes/ttrssmailer.php @@ -17,31 +17,29 @@ class ttrssMailer extends PHPMailer { public $CharSet = "UTF-8";
public $PluginDir = "lib/phpmailer/";
public $ContentType = "text/html"; //default email type is HTML
- public $Host;
- public $Port;
- public $SMTPAuth=False;
- public $Username;
- public $Password;
function __construct() {
$this->SetLanguage("en", "lib/phpmailer/language/");
- //if SMTP_HOST is specified, use SMTP to send mail directly
- if (SMTP_HOST) {
- $Host = SMTP_HOST;
- $Mailer = "smtp";
- }
- //if SMTP_PORT is specified, assign it. Otherwise default to port 25
- if(SMTP_PORT){
- $Port = SMTP_PORT;
- }else{
- $Port = "25";
+
+ if (SMTP_SERVER) {
+ $pair = explode(":", SMTP_SERVER, 2);
+ $this->Mailer = "smtp";
+
+ $this->Host = $pair[0];
+ $this->Port = $pair[1];
+
+ if (!$this->Port) $this->Port = 25;
+ } else {
+ $this->Host = '';
+ $this->Port = '';
}
+
//if SMTP_LOGIN is specified, set credentials and enable auth
if(SMTP_LOGIN){
- $SMTPAuth = true;
- $Username = SMTP_LOGIN;
- $Password = SMTP_PASSWORD;
+ $this->SMTPAuth = true;
+ $this->Username = SMTP_LOGIN;
+ $this->Password = SMTP_PASSWORD;
}
}
/* @brief a simple mail function to send email using the defaults
diff --git a/config.php-dist b/config.php-dist index eb3339742..58218bab1 100644 --- a/config.php-dist +++ b/config.php-dist @@ -8,7 +8,7 @@ define('DB_USER', "fox"); define('DB_NAME', "fox"); define('DB_PASS', "XXXXXX"); - //define('DB_PORT', '5432'); // when neeeded, PG-only + define('DB_PORT', ''); // usually 5432 for PostgreSQL, 3306 for MySQL define('MYSQL_CHARSET', 'UTF8'); // Connection charset for MySQL. If you have a legacy database and/or experience @@ -24,6 +24,13 @@ // You need to set this option correctly otherwise several features // including PUSH, bookmarklets and browser integration will not work properly. + define('FEED_CRYPT_KEY', ''); + // Key used for encryption of passwords for password-protected feeds + // in the database. A string of 24 random characters. If left blank, encryption + // is not used. Requires mcrypt functions. + // Warning: changing this key will make your stored feed passwords impossible + // to decrypt. + define('SINGLE_USER_MODE', false); // Operate in single user mode, disables all functionality related to // multiple users and authentication. Enabling this assumes you have @@ -101,6 +108,9 @@ // Enable fulltext search using Sphinx (http://www.sphinxsearch.com) // Please see http://tt-rss.org/wiki/SphinxSearch for more information. + define('SPHINX_SERVER', 'localhost:9312'); + // Hostname:port combination for the Sphinx server. + define('SPHINX_INDEX', 'ttrss'); // Index name in Sphinx configuration. You can specify multiple indexes // as a comma-separated string. @@ -129,10 +139,6 @@ define('SESSION_COOKIE_LIFETIME', 86400); // Default lifetime of a session (e.g. login) cookie. In seconds, // 0 means cookie will be deleted when browser closes. - // Setting this to zero will affect several user preferences - // like widescreen mode not saving and disable "remember me". - // Note that if remember me is not checked, session cookie - // will always expire with browser session. define('SESSION_CHECK_ADDRESS', 1); // Check client IP address when validating session: @@ -153,16 +159,14 @@ define('DIGEST_SUBJECT', '[tt-rss] New headlines for last 24 hours'); // Subject line for email digests - define('SMTP_HOST', ''); - // SMTP Host to send outgoing mail. Blank - use system MTA. + define('SMTP_SERVER', ''); + // Hostname:port combination to send outgoing mail (i.e. localhost:25). + // Blank - use system MTA. - define('SMTP_PORT',''); - // SMTP port to sent outgoing mail. Default is 25. - define('SMTP_LOGIN', ''); define('SMTP_PASSWORD', ''); // These two options enable SMTP authentication when sending - // outgoing mail. Only used with SMTP_HOST + // outgoing mail. Only used with SMTP_SERVER. // *************************************** // *** Other settings (less important) *** @@ -184,6 +188,14 @@ // authentication plugin here (auth_*). // Users may enable other user plugins from Preferences/Plugins but may not // disable plugins specified in this list. + // Disabling auth_internal in this list would automatically disable + // reset password link on the login form. + + define('LOG_DESTINATION', 'sql'); + // Log destination to use. Possible values: sql (uses internal logging + // you can read in Preferences -> System), syslog - logs to system log. + // Setting this to blank uses PHP logging (usually to http server + // error.log). define('CONFIG_VERSION', 26); // Expected config version. Please update this option in config.php diff --git a/feed-icons/index.html b/feed-icons/index.html new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/feed-icons/index.html diff --git a/images/close_notify.svg b/images/close_notify.svg new file mode 100644 index 000000000..b3a17e02e --- /dev/null +++ b/images/close_notify.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16px" + height="16px" + id="svg2985" + version="1.1" + inkscape:version="0.48.2 r9819" + sodipodi:docname="close_notify.svg"> + <defs + id="defs2987" /> + <sodipodi:namedview + id="base" + pagecolor="#88b0f0" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:zoom="22.197802" + inkscape:cx="0.97227717" + inkscape:cy="8" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="1920" + inkscape:window-height="1138" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" /> + <metadata + id="metadata2990"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + sodipodi:type="arc" + style="opacity:1;fill:none;fill-opacity:1;stroke:#454545;stroke-width:0.73948608000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path2997" + sodipodi:cx="6.6673269" + sodipodi:cy="7.1702971" + sodipodi:rx="5.270792" + sodipodi:ry="5.270792" + d="m 11.938119,7.1702971 a 5.270792,5.270792 0 1 1 -10.5415841,0 5.270792,5.270792 0 1 1 10.5415841,0 z" + transform="matrix(1.3522905,0,0,1.3522905,-1.0161629,-1.6963247)" /> + <path + style="fill:none;stroke:#454545;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;opacity:1" + d="M 4.4322613,4.4322611 11.567739,11.567739" + id="path3771" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#454545;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;opacity:1" + d="M 11.567739,4.432261 4.432261,11.567739" + id="path3771-1" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/include/autoload.php b/include/autoload.php new file mode 100644 index 000000000..505b44477 --- /dev/null +++ b/include/autoload.php @@ -0,0 +1,14 @@ +<?php + require_once "functions.php"; + + function __autoload($class) { + $class_file = str_replace("_", "/", strtolower(basename($class))); + + $file = dirname(__FILE__)."/../classes/$class_file.php"; + + if (file_exists($file)) { + require $file; + } + + } +?> diff --git a/include/ccache.php b/include/ccache.php index c53b1a08c..d89b9efe0 100644 --- a/include/ccache.php +++ b/include/ccache.php @@ -1,19 +1,19 @@ <?php - /* function ccache_zero($link, $feed_id, $owner_uid) { - db_query($link, "UPDATE ttrss_counters_cache SET + /* function ccache_zero($feed_id, $owner_uid) { + db_query("UPDATE ttrss_counters_cache SET value = 0, updated = NOW() WHERE feed_id = '$feed_id' AND owner_uid = '$owner_uid'"); } */ - function ccache_zero_all($link, $owner_uid) { - db_query($link, "UPDATE ttrss_counters_cache SET + function ccache_zero_all($owner_uid) { + db_query("UPDATE ttrss_counters_cache SET value = 0 WHERE owner_uid = '$owner_uid'"); - db_query($link, "UPDATE ttrss_cat_counters_cache SET + db_query("UPDATE ttrss_cat_counters_cache SET value = 0 WHERE owner_uid = '$owner_uid'"); } - function ccache_remove($link, $feed_id, $owner_uid, $is_cat = false) { + function ccache_remove($feed_id, $owner_uid, $is_cat = false) { if (!$is_cat) { $table = "ttrss_counters_cache"; @@ -21,39 +21,39 @@ $table = "ttrss_cat_counters_cache"; } - db_query($link, "DELETE FROM $table WHERE + db_query("DELETE FROM $table WHERE feed_id = '$feed_id' AND owner_uid = '$owner_uid'"); } - function ccache_update_all($link, $owner_uid) { + function ccache_update_all($owner_uid) { - if (get_pref($link, 'ENABLE_FEED_CATS', $owner_uid)) { + if (get_pref('ENABLE_FEED_CATS', $owner_uid)) { - $result = db_query($link, "SELECT feed_id FROM ttrss_cat_counters_cache + $result = db_query("SELECT feed_id FROM ttrss_cat_counters_cache WHERE feed_id > 0 AND owner_uid = '$owner_uid'"); while ($line = db_fetch_assoc($result)) { - ccache_update($link, $line["feed_id"], $owner_uid, true); + ccache_update($line["feed_id"], $owner_uid, true); } /* We have to manually include category 0 */ - ccache_update($link, 0, $owner_uid, true); + ccache_update(0, $owner_uid, true); } else { - $result = db_query($link, "SELECT feed_id FROM ttrss_counters_cache + $result = db_query("SELECT feed_id FROM ttrss_counters_cache WHERE feed_id > 0 AND owner_uid = '$owner_uid'"); while ($line = db_fetch_assoc($result)) { - print ccache_update($link, $line["feed_id"], $owner_uid); + print ccache_update($line["feed_id"], $owner_uid); } } } - function ccache_find($link, $feed_id, $owner_uid, $is_cat = false, + function ccache_find($feed_id, $owner_uid, $is_cat = false, $no_update = false) { if (!is_numeric($feed_id)) return; @@ -61,7 +61,7 @@ if (!$is_cat) { $table = "ttrss_counters_cache"; /* if ($feed_id > 0) { - $tmp_result = db_query($link, "SELECT owner_uid FROM ttrss_feeds + $tmp_result = db_query("SELECT owner_uid FROM ttrss_feeds WHERE id = '$feed_id'"); $owner_uid = db_fetch_result($tmp_result, 0, "owner_uid"); } */ @@ -75,7 +75,7 @@ $date_qpart = "updated > DATE_SUB(NOW(), INTERVAL 15 MINUTE)"; } - $result = db_query($link, "SELECT value FROM $table + $result = db_query("SELECT value FROM $table WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id' LIMIT 1"); @@ -85,30 +85,30 @@ if ($no_update) { return -1; } else { - return ccache_update($link, $feed_id, $owner_uid, $is_cat); + return ccache_update($feed_id, $owner_uid, $is_cat); } } } - function ccache_update($link, $feed_id, $owner_uid, $is_cat = false, + function ccache_update($feed_id, $owner_uid, $is_cat = false, $update_pcat = true) { if (!is_numeric($feed_id)) return; /* if (!$is_cat && $feed_id > 0) { - $tmp_result = db_query($link, "SELECT owner_uid FROM ttrss_feeds + $tmp_result = db_query("SELECT owner_uid FROM ttrss_feeds WHERE id = '$feed_id'"); $owner_uid = db_fetch_result($tmp_result, 0, "owner_uid"); } */ - $prev_unread = ccache_find($link, $feed_id, $owner_uid, $is_cat, true); + $prev_unread = ccache_find($feed_id, $owner_uid, $is_cat, true); /* When updating a label, all we need to do is recalculate feed counters * because labels are not cached */ if ($feed_id < 0) { - ccache_update_all($link, $owner_uid); + ccache_update_all($owner_uid); return; } @@ -127,14 +127,14 @@ /* Recalculate counters for child feeds */ - $result = db_query($link, "SELECT id FROM ttrss_feeds + $result = db_query("SELECT id FROM ttrss_feeds WHERE owner_uid = '$owner_uid' AND $cat_qpart"); while ($line = db_fetch_assoc($result)) { - ccache_update($link, $line["id"], $owner_uid, false, false); + ccache_update($line["id"], $owner_uid, false, false); } - $result = db_query($link, "SELECT SUM(value) AS sv + $result = db_query("SELECT SUM(value) AS sv FROM ttrss_counters_cache, ttrss_feeds WHERE id = feed_id AND $cat_qpart AND ttrss_feeds.owner_uid = '$owner_uid'"); @@ -142,27 +142,27 @@ $unread = (int) db_fetch_result($result, 0, "sv"); } else { - $unread = (int) getFeedArticles($link, $feed_id, $is_cat, true, $owner_uid); + $unread = (int) getFeedArticles($feed_id, $is_cat, true, $owner_uid); } - db_query($link, "BEGIN"); + db_query("BEGIN"); - $result = db_query($link, "SELECT feed_id FROM $table + $result = db_query("SELECT feed_id FROM $table WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id' LIMIT 1"); if (db_num_rows($result) == 1) { - db_query($link, "UPDATE $table SET + db_query("UPDATE $table SET value = '$unread', updated = NOW() WHERE feed_id = '$feed_id' AND owner_uid = '$owner_uid'"); } else { - db_query($link, "INSERT INTO $table + db_query("INSERT INTO $table (feed_id, value, owner_uid, updated) VALUES ($feed_id, $unread, $owner_uid, NOW())"); } - db_query($link, "COMMIT"); + db_query("COMMIT"); if ($feed_id > 0 && $prev_unread != $unread) { @@ -172,36 +172,36 @@ if ($update_pcat) { - $result = db_query($link, "SELECT cat_id FROM ttrss_feeds + $result = db_query("SELECT cat_id FROM ttrss_feeds WHERE owner_uid = '$owner_uid' AND id = '$feed_id'"); $cat_id = (int) db_fetch_result($result, 0, "cat_id"); - ccache_update($link, $cat_id, $owner_uid, true); + ccache_update($cat_id, $owner_uid, true); } } } else if ($feed_id < 0) { - ccache_update_all($link, $owner_uid); + ccache_update_all($owner_uid); } return $unread; } - /* function ccache_cleanup($link, $owner_uid) { + /* function ccache_cleanup($owner_uid) { if (DB_TYPE == "pgsql") { - db_query($link, "DELETE FROM ttrss_counters_cache AS c1 WHERE + db_query("DELETE FROM ttrss_counters_cache AS c1 WHERE (SELECT count(*) FROM ttrss_counters_cache AS c2 WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1 AND owner_uid = '$owner_uid'"); - db_query($link, "DELETE FROM ttrss_cat_counters_cache AS c1 WHERE + db_query("DELETE FROM ttrss_cat_counters_cache AS c1 WHERE (SELECT count(*) FROM ttrss_cat_counters_cache AS c2 WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1 AND owner_uid = '$owner_uid'"); } else { - db_query($link, "DELETE c1 FROM + db_query("DELETE c1 FROM ttrss_counters_cache AS c1, ttrss_counters_cache AS c2 WHERE @@ -209,7 +209,7 @@ c1.owner_uid = c2.owner_uid AND c1.feed_id = c2.feed_id"); - db_query($link, "DELETE c1 FROM + db_query("DELETE c1 FROM ttrss_cat_counters_cache AS c1, ttrss_cat_counters_cache AS c2 WHERE diff --git a/include/colors.php b/include/colors.php index d1e970728..41bf7b819 100644 --- a/include/colors.php +++ b/include/colors.php @@ -1,5 +1,7 @@ <?php +require_once "lib/floIcon.php"; + function _resolve_htmlcolor($color) { $htmlcolors = array ("aliceblue" => "#f0f8ff", "antiquewhite" => "#faebd7", @@ -235,16 +237,16 @@ function rgb2hsl($arr) { } else { $s = $del_Max / $var_Max; - $del_R = ( ( ( $max - $var_R ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; - $del_G = ( ( ( $max - $var_G ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; - $del_B = ( ( ( $max - $var_B ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; + $del_R = ((($var_Max - $var_R ) / 6 ) + ($del_Max / 2 ) ) / $del_Max; + $del_G = ((($var_Max - $var_G ) / 6 ) + ($del_Max / 2 ) ) / $del_Max; + $del_B = ((($var_Max - $var_B ) / 6 ) + ($del_Max / 2 ) ) / $del_Max; if ($var_R == $var_Max) $h = $del_B - $del_G; - else if ($var_G == $var_Max) $h = ( 1 / 3 ) + $del_R - $del_B; - else if ($var_B == $var_Max) $h = ( 2 / 3 ) + $del_G - $del_R; + else if ($var_G == $var_Max) $h = (1 / 3 ) + $del_R - $del_B; + else if ($var_B == $var_Max) $h = (2 / 3 ) + $del_G - $del_R; - if ($H < 0) $h++; - if ($H > 1) $h--; + if ($h < 0) $h++; + if ($h > 1) $h--; } return array($h, $s, $v); @@ -259,10 +261,10 @@ function hsl2rgb($arr) { $r = $g = $B = $v * 255; } else { $var_H = $h * 6; - $var_i = floor( $var_H ); - $var_1 = $v * ( 1 - $s ); - $var_2 = $v * ( 1 - $s * ( $var_H - $var_i ) ); - $var_3 = $v * ( 1 - $s * (1 - ( $var_H - $var_i ) ) ); + $var_i = floor($var_H ); + $var_1 = $v * (1 - $s ); + $var_2 = $v * (1 - $s * ($var_H - $var_i ) ); + $var_3 = $v * (1 - $s * (1 - ($var_H - $var_i ) ) ); if ($var_i == 0) { $var_R = $v ; $var_G = $var_3 ; $var_B = $var_1 ; } else if ($var_i == 1) { $var_R = $var_2 ; $var_G = $v ; $var_B = $var_1 ; } @@ -278,4 +280,62 @@ function hsl2rgb($arr) { return array($r, $g, $B); } + function colorPalette($imageFile, $numColors, $granularity = 5) { + $granularity = max(1, abs((int)$granularity)); + $colors = array(); + + $size = @getimagesize($imageFile); + + if (!defined('_DISABLE_FLOICON') && strtolower($size['mime']) == 'image/vnd.microsoft.icon') { + $ico = new floIcon(); + @$ico->readICO($imageFile); + + if(count($ico->images)==0) + return null; + else + $img = @$ico->images[count($ico->images)-1]->getImageResource(); + + } else { + $img = @imagecreatefromstring(file_get_contents($imageFile)); + } + + if (!$img) return false; + + for($x = 0; $x < $size[0]; $x += $granularity) { + for($y = 0; $y < $size[1]; $y += $granularity) { + $thisColor = imagecolorat($img, $x, $y); + $rgb = imagecolorsforindex($img, $thisColor); + $red = round(round(($rgb['red'] / 0x33)) * 0x33); + $green = round(round(($rgb['green'] / 0x33)) * 0x33); + $blue = round(round(($rgb['blue'] / 0x33)) * 0x33); + $thisRGB = sprintf('%02X%02X%02X', $red, $green, $blue); + if(array_key_exists($thisRGB, $colors)) { + $colors[$thisRGB]++; + } else{ + $colors[$thisRGB] = 1; + } + } + } + + arsort($colors); + return array_slice(array_keys($colors), 0, $numColors); + } + + function calculate_avg_color($iconFile) { + $palette = colorPalette($iconFile, 4, 4); + + if (is_array($palette)) { + foreach ($palette as $p) { + $hsl = rgb2hsl(_color_unpack("#$p")); + + if ($hsl[1] > 0.25 && $hsl[2] > 0.25 && + !($hsl[0] >= 0 && $hsl[0] < 0.01 && $hsl[1] < 0.01) && + !($hsl[0] >= 0 && $hsl[0] < 0.01 && $hsl[2] > 0.99)) { + + return _color_pack(hsl2rgb($hsl)); + } + } + } + return ''; + } ?> diff --git a/include/crypt.php b/include/crypt.php new file mode 100644 index 000000000..f06483ef1 --- /dev/null +++ b/include/crypt.php @@ -0,0 +1,36 @@ +<?php + function decrypt_string($str) { + $pair = explode(":", $str); + + if (count($pair) == 2) { + @$iv = base64_decode($pair[0]); + @$encstr = base64_decode($pair[1]); + + if ($iv && $encstr) { + $key = hash('SHA256', FEED_CRYPT_KEY, true); + + $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encstr, + MCRYPT_MODE_CBC, $iv); + + if ($str) return rtrim($str); + } + } + + return false; + } + + function encrypt_string($str) { + $key = hash('SHA256', FEED_CRYPT_KEY, true); + + $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, + MCRYPT_MODE_CBC), MCRYPT_RAND); + + $encstr = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, + MCRYPT_MODE_CBC, $iv); + + $iv_base64 = base64_encode($iv); + $encstr_base64 = base64_encode($encstr); + + return "$iv_base64:$encstr_base64"; + } +?> diff --git a/include/db-prefs.php b/include/db-prefs.php index 1ee3d609a..d122f3baf 100644 --- a/include/db-prefs.php +++ b/include/db-prefs.php @@ -1,186 +1,11 @@ <?php - require_once "config.php"; require_once "db.php"; - if (!defined('DISABLE_SESSIONS') && !defined('PREFS_NO_CACHE')) { - if (!$_SESSION["prefs_cache"]) - $_SESSION["prefs_cache"] = array(); + function get_pref($pref_name, $user_id = false, $die_on_error = false) { + return Db_Prefs::get()->read($pref_name, $user_id, $die_on_error); } - function cache_prefs($link) { - $profile = false; - - $user_id = $_SESSION["uid"]; - @$profile = $_SESSION["profile"]; - - if ($profile) { - $profile_qpart = "profile = '$profile' AND"; - } else { - $profile_qpart = "profile IS NULL AND"; - } - - if (get_schema_version($link) < 63) $profile_qpart = ""; - - $result = db_query($link, "SELECT - value,ttrss_prefs_types.type_name as type_name,ttrss_prefs.pref_name AS pref_name - FROM - ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types - WHERE - $profile_qpart - ttrss_prefs.pref_name NOT LIKE '_MOBILE%' AND - ttrss_prefs_types.id = type_id AND - owner_uid = '$user_id' AND - ttrss_user_prefs.pref_name = ttrss_prefs.pref_name"); - - while ($line = db_fetch_assoc($result)) { - if ($user_id == $_SESSION["uid"]) { - $pref_name = $line["pref_name"]; - - $_SESSION["prefs_cache"][$pref_name]["type"] = $line["type_name"]; - $_SESSION["prefs_cache"][$pref_name]["value"] = $line["value"]; - } - } - } - - function get_pref($link, $pref_name, $user_id = false, $die_on_error = false) { - - $pref_name = db_escape_string($link, $pref_name); - $prefs_cache = true; - $profile = false; - - if (!$user_id) { - $user_id = $_SESSION["uid"]; - @$profile = $_SESSION["profile"]; - } else { - $user_id = sprintf("%d", $user_id); - //$prefs_cache = false; - } - - if ($prefs_cache && !defined('DISABLE_SESSIONS') && !defined('PREFS_NO_CACHE')) { - if ($_SESSION["prefs_cache"] && @$_SESSION["prefs_cache"][$pref_name]) { - $tuple = $_SESSION["prefs_cache"][$pref_name]; - return convert_pref_type($tuple["value"], $tuple["type"]); - } - } - - if ($profile) { - $profile_qpart = "profile = '$profile' AND"; - } else { - $profile_qpart = "profile IS NULL AND"; - } - - if (get_schema_version($link) < 63) $profile_qpart = ""; - - $result = db_query($link, "SELECT - value,ttrss_prefs_types.type_name as type_name - FROM - ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types - WHERE - $profile_qpart - ttrss_user_prefs.pref_name = '$pref_name' AND - ttrss_prefs_types.id = type_id AND - owner_uid = '$user_id' AND - ttrss_user_prefs.pref_name = ttrss_prefs.pref_name"); - - if (db_num_rows($result) > 0) { - $value = db_fetch_result($result, 0, "value"); - $type_name = db_fetch_result($result, 0, "type_name"); - - if (!defined('DISABLE_SESSIONS')) { - if ($user_id == $_SESSION["uid"]) { - $_SESSION["prefs_cache"][$pref_name]["type"] = $type_name; - $_SESSION["prefs_cache"][$pref_name]["value"] = $value; - } - } - - return convert_pref_type($value, $type_name); - - } else { - if ($die_on_error) { - die("Fatal error, unknown preferences key: $pref_name"); - } else { - return null; - } - } - } - - function convert_pref_type($value, $type_name) { - if ($type_name == "bool") { - return $value == "true"; - } else if ($type_name == "integer") { - return sprintf("%d", $value); - } else { - return $value; - } - } - - function set_pref($link, $pref_name, $value, $user_id = false, $strip_tags = true) { - $pref_name = db_escape_string($link, $pref_name); - $value = db_escape_string($link, $value, $strip_tags); - - if (!$user_id) { - $user_id = $_SESSION["uid"]; - @$profile = $_SESSION["profile"]; - } else { - $user_id = sprintf("%d", $user_id); - $prefs_cache = false; - } - - if ($profile) { - $profile_qpart = "AND profile = '$profile'"; - } else { - $profile_qpart = "AND profile IS NULL"; - } - - if (get_schema_version($link) < 63) $profile_qpart = ""; - - $type_name = ""; - $current_value = ""; - - if (!defined('DISABLE_SESSIONS') && !defined('PREFS_NO_CACHE')) { - if ($_SESSION["prefs_cache"] && @$_SESSION["prefs_cache"][$pref_name]) { - $type_name = $_SESSION["prefs_cache"][$pref_name]["type"]; - $current_value = $_SESSION["prefs_cache"][$pref_name]["value"]; - } - } - - if (!$type_name) { - $result = db_query($link, "SELECT type_name - FROM ttrss_prefs,ttrss_prefs_types - WHERE pref_name = '$pref_name' AND type_id = ttrss_prefs_types.id"); - - if (db_num_rows($result) > 0) - $type_name = db_fetch_result($result, 0, "type_name"); - } else if ($current_value == $value) { - return; - } - - if ($type_name) { - if ($type_name == "bool") { - if ($value == "1" || $value == "true") { - $value = "true"; - } else { - $value = "false"; - } - } else if ($type_name == "integer") { - $value = sprintf("%d", $value); - } - - if ($pref_name == 'USER_TIMEZONE' && $value == '') { - $value = 'UTC'; - } - - db_query($link, "UPDATE ttrss_user_prefs SET - value = '$value' WHERE pref_name = '$pref_name' - $profile_qpart - AND owner_uid = " . $_SESSION["uid"]); - - if (!defined('DISABLE_SESSIONS')) { - if ($user_id == $_SESSION["uid"]) { - $_SESSION["prefs_cache"][$pref_name]["type"] = $type_name; - $_SESSION["prefs_cache"][$pref_name]["value"] = $value; - } - } - } + function set_pref($pref_name, $value, $user_id = false, $strip_tags = true) { + return Db_Prefs::get()->write($pref_name, $value, $user_id, $strip_tags); } ?> diff --git a/include/db.php b/include/db.php index a70a1d878..55d1d654e 100644 --- a/include/db.php +++ b/include/db.php @@ -1,138 +1,36 @@ <?php -require_once "config.php"; - -function db_connect($host, $user, $pass, $db) { - if (DB_TYPE == "pgsql") { - - $string = "dbname=$db user=$user"; - - if ($pass) { - $string .= " password=$pass"; - } - - if ($host) { - $string .= " host=$host"; - } - - if (defined('DB_PORT') && DB_PORT) { - $string = "$string port=" . DB_PORT; - } - - $link = pg_connect($string); - - if (!$link) { - die("Unable to connect to database (as $user to $host, database $db):" . pg_last_error()); - } - - return $link; - - } else if (DB_TYPE == "mysql") { - $link = mysql_connect($host, $user, $pass); - if ($link) { - $result = mysql_select_db($db, $link); - if (!$result) { - die("Can't select DB: " . mysql_error($link)); - } - return $link; - } else { - die("Unable to connect to database (as $user to $host, database $db): " . mysql_error()); - } - } +function db_escape_string($s, $strip_tags = true) { + return Db::get()->escape_string($s, $strip_tags); } -function db_escape_string($link, $s, $strip_tags = true) { - if ($strip_tags) $s = strip_tags($s); - - if (DB_TYPE == "pgsql") { - return pg_escape_string($link, $s); - } else { - return mysql_real_escape_string($s, $link); - } -} - -function db_query($link, $query, $die_on_error = true) { - if (DB_TYPE == "pgsql") { - $result = pg_query($link, $query); - if (!$result) { - $query = htmlspecialchars($query); // just in case - if ($die_on_error) { - die("Query <i>$query</i> failed [$result]: " . ($link ? pg_last_error($link) : "No connection")); - } - } - return $result; - } else if (DB_TYPE == "mysql") { - $result = mysql_query($query, $link); - if (!$result) { - $query = htmlspecialchars($query); - if ($die_on_error) { - die("Query <i>$query</i> failed: " . ($link ? mysql_error($link) : "No connection")); - } - } - return $result; - } +function db_query($query, $die_on_error = true) { + return Db::get()->query($query, $die_on_error); } function db_fetch_assoc($result) { - if (DB_TYPE == "pgsql") { - return pg_fetch_assoc($result); - } else if (DB_TYPE == "mysql") { - return mysql_fetch_assoc($result); - } + return Db::get()->fetch_assoc($result); } function db_num_rows($result) { - if (DB_TYPE == "pgsql") { - return pg_num_rows($result); - } else if (DB_TYPE == "mysql") { - return mysql_num_rows($result); - } + return Db::get()->num_rows($result); } function db_fetch_result($result, $row, $param) { - if (DB_TYPE == "pgsql") { - return pg_fetch_result($result, $row, $param); - } else if (DB_TYPE == "mysql") { - // I hate incoherent naming of PHP functions - return mysql_result($result, $row, $param); - } -} - -function db_unescape_string($str) { - $tmp = str_replace("\\\"", "\"", $str); - $tmp = str_replace("\\'", "'", $tmp); - return $tmp; -} - -function db_close($link) { - if (DB_TYPE == "pgsql") { - - return pg_close($link); - - } else if (DB_TYPE == "mysql") { - return mysql_close($link); - } + return Db::get()->fetch_result($result, $row, $param); } -function db_affected_rows($link, $result) { - if (DB_TYPE == "pgsql") { - return pg_affected_rows($result); - } else if (DB_TYPE == "mysql") { - return mysql_affected_rows($link); - } +function db_affected_rows($result) { + return Db::get()->affected_rows($result); } -function db_last_error($link) { - if (DB_TYPE == "pgsql") { - return pg_last_error($link); - } else if (DB_TYPE == "mysql") { - return mysql_error($link); - } +function db_last_error() { + return Db::get()->last_error(); } function db_quote($str){ - return("'$str'"); + return Db::get()->quote($str); } ?> diff --git a/include/digest.php b/include/digest.php index ab29d9432..965fd1a79 100644 --- a/include/digest.php +++ b/include/digest.php @@ -6,7 +6,7 @@ * @param integer $limit The maximum number of articles by digest. * @return boolean Return false if digests are not enabled. */ - function send_headlines_digests($link, $debug = false) { + function send_headlines_digests($debug = false) { require_once 'classes/ttrssmailer.php'; @@ -21,28 +21,28 @@ $interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL 1 DAY)"; } - $result = db_query($link, "SELECT id,email FROM ttrss_users + $result = db_query("SELECT id,email FROM ttrss_users WHERE email != '' AND (last_digest_sent IS NULL OR $interval_query)"); while ($line = db_fetch_assoc($result)) { - if (get_pref($link, 'DIGEST_ENABLE', $line['id'], false)) { - $preferred_ts = strtotime(get_pref($link, 'DIGEST_PREFERRED_TIME', $line['id'], '00:00')); + if (get_pref('DIGEST_ENABLE', $line['id'], false)) { + $preferred_ts = strtotime(get_pref('DIGEST_PREFERRED_TIME', $line['id'], '00:00')); // try to send digests within 2 hours of preferred time if ($preferred_ts && time() >= $preferred_ts && time() - $preferred_ts <= 7200) { - if ($debug) print "Sending digest for UID:" . $line['id'] . " - " . $line["email"] . " ... "; + if ($debug) _debug("Sending digest for UID:" . $line['id'] . " - " . $line["email"]); - $do_catchup = get_pref($link, 'DIGEST_CATCHUP', $line['id'], false); + $do_catchup = get_pref('DIGEST_CATCHUP', $line['id'], false); global $tz_offset; // reset tz_offset global to prevent tz cache clash between users $tz_offset = -1; - $tuple = prepare_headlines_digest($link, $line["id"], 1, $limit); + $tuple = prepare_headlines_digest($line["id"], 1, $limit); $digest = $tuple[0]; $headlines_count = $tuple[1]; $affected_ids = $tuple[2]; @@ -54,19 +54,19 @@ $rc = $mail->quickMail($line["email"], $line["login"] , DIGEST_SUBJECT, $digest, $digest_text); - if (!$rc && $debug) print "ERROR: " . $mail->ErrorInfo; + if (!$rc && $debug) _debug("ERROR: " . $mail->ErrorInfo); - if ($debug) print "RC=$rc\n"; + if ($debug) _debug("RC=$rc"); if ($rc && $do_catchup) { - if ($debug) print "Marking affected articles as read...\n"; - catchupArticlesById($link, $affected_ids, 0, $line["id"]); + if ($debug) _debug("Marking affected articles as read..."); + catchupArticlesById($affected_ids, 0, $line["id"]); } } else { - if ($debug) print "No headlines\n"; + if ($debug) _debug("No headlines"); } - db_query($link, "UPDATE ttrss_users SET last_digest_sent = NOW() + db_query("UPDATE ttrss_users SET last_digest_sent = NOW() WHERE id = " . $line["id"]); } @@ -77,7 +77,7 @@ } - function prepare_headlines_digest($link, $user_id, $days = 1, $limit = 1000) { + function prepare_headlines_digest($user_id, $days = 1, $limit = 1000) { require_once "lib/MiniTemplator.class.php"; @@ -87,7 +87,7 @@ $tpl->readTemplateFromFile("templates/digest_template_html.txt"); $tpl_t->readTemplateFromFile("templates/digest_template.txt"); - $user_tz_string = get_pref($link, 'USER_TIMEZONE', $user_id); + $user_tz_string = get_pref('USER_TIMEZONE', $user_id); $local_ts = convert_timestamp(time(), 'UTC', $user_tz_string); $tpl->setVariable('CUR_DATE', date('Y/m/d', $local_ts)); @@ -104,7 +104,7 @@ $interval_query = "ttrss_entries.date_updated > DATE_SUB(NOW(), INTERVAL $days DAY)"; } - $result = db_query($link, "SELECT ttrss_entries.title, + $result = db_query("SELECT ttrss_entries.title, ttrss_feeds.title AS feed_title, COALESCE(ttrss_feed_categories.title, '".__('Uncategorized')."') AS cat_title, date_updated, @@ -143,7 +143,7 @@ array_push($affected_ids, $line["ref_id"]); - $updated = make_local_datetime($link, $line['last_updated'], false, + $updated = make_local_datetime($line['last_updated'], false, $user_id); /* if ($line["score"] != 0) { @@ -152,7 +152,7 @@ $line["title"] .= " (".$line['score'].")"; } */ - if (get_pref($link, 'ENABLE_FEED_CATS', $user_id)) { + if (get_pref('ENABLE_FEED_CATS', $user_id)) { $line['feed_title'] = $line['cat_title'] . " / " . $line['feed_title']; } diff --git a/include/errorhandler.php b/include/errorhandler.php new file mode 100644 index 000000000..9acef2357 --- /dev/null +++ b/include/errorhandler.php @@ -0,0 +1,37 @@ +<?php +function ttrss_error_handler($errno, $errstr, $file, $line, $context) { + global $logger; + + if (error_reporting() == 0 || !$errno) return false; + + $file = substr(str_replace(dirname(dirname(__FILE__)), "", $file), 1); + + return Logger::get()->log_error($errno, $errstr, $file, $line, $context); +} + +function ttrss_fatal_handler() { + global $logger; + + $error = error_get_last(); + + if ($error !== NULL) { + $errno = $error["type"]; + $file = $error["file"]; + $line = $error["line"]; + $errstr = $error["message"]; + + if (!$errno) return false; + + $context = debug_backtrace(); + + $file = substr(str_replace(dirname(dirname(__FILE__)), "", $file), 1); + + return Logger::get()->log_error($errno, $errstr, $file, $line, $context); + } + + return false; +} + +register_shutdown_function('ttrss_fatal_handler'); +set_error_handler('ttrss_error_handler'); +?> diff --git a/include/feedbrowser.php b/include/feedbrowser.php index e5ee4a70d..6c245121f 100644 --- a/include/feedbrowser.php +++ b/include/feedbrowser.php @@ -1,5 +1,5 @@ <?php - function make_feed_browser($link, $search, $limit, $mode = 1) { + function make_feed_browser($search, $limit, $mode = 1) { $owner_uid = $_SESSION["uid"]; $rv = ''; @@ -12,13 +12,13 @@ } if ($mode == 1) { - /* $result = db_query($link, "SELECT feed_url, subscribers FROM + /* $result = db_query("SELECT feed_url, subscribers FROM ttrss_feedbrowser_cache WHERE (SELECT COUNT(id) = 0 FROM ttrss_feeds AS tf WHERE tf.feed_url = ttrss_feedbrowser_cache.feed_url AND owner_uid = '$owner_uid') $search_qpart ORDER BY subscribers DESC LIMIT $limit"); */ - $result = db_query($link, "SELECT feed_url, site_url, title, SUM(subscribers) AS subscribers FROM + $result = db_query("SELECT feed_url, site_url, title, SUM(subscribers) AS subscribers FROM (SELECT feed_url, site_url, title, subscribers FROM ttrss_feedbrowser_cache UNION ALL SELECT feed_url, site_url, title, subscribers FROM ttrss_linked_feeds) AS qqq WHERE @@ -28,7 +28,7 @@ GROUP BY feed_url, site_url, title ORDER BY subscribers DESC LIMIT $limit"); } else if ($mode == 2) { - $result = db_query($link, "SELECT *, + $result = db_query("SELECT *, (SELECT COUNT(*) FROM ttrss_user_entries WHERE orig_feed_id = ttrss_archived_feeds.id) AS articles_archived FROM diff --git a/include/functions.php b/include/functions.php index 4ac4e0968..e3e113786 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1,25 +1,16 @@ <?php define('EXPECTED_CONFIG_VERSION', 26); - define('SCHEMA_VERSION', 116); + define('SCHEMA_VERSION', 120); define('LABEL_BASE_INDEX', -1024); define('PLUGIN_FEED_BASE_INDEX', -128); + define('COOKIE_LIFETIME_LONG', 86400*365); + $fetch_last_error = false; $fetch_last_error_code = false; $fetch_last_content_type = false; - $pluginhost = false; - - function __autoload($class) { - $class_file = str_replace("_", "/", strtolower(basename($class))); - - $file = dirname(__FILE__)."/../classes/$class_file.php"; - - if (file_exists($file)) { - require $file; - } - - } + $fetch_curl_used = false; mb_internal_encoding("UTF-8"); date_default_timezone_set('UTC'); @@ -106,8 +97,12 @@ $lang = _TRANSLATION_OVERRIDE_DEFAULT; } - if ($_SESSION["language"] && $_SESSION["language"] != "auto") { - $lang = $_SESSION["language"]; + if ($_SESSION["uid"] && get_schema_version() >= 120) { + $pref_lang = get_pref("USER_LANGUAGE", $_SESSION["uid"]); + + if ($pref_lang) { + $lang = $pref_lang; + } } if ($lang) { @@ -124,8 +119,6 @@ } } - startup_gettext(); - require_once 'db-prefs.php'; require_once 'version.php'; require_once 'ccache.php'; @@ -136,8 +129,6 @@ require_once 'lib/pubsubhubbub/publisher.php'; - $tz_offset = -1; - $utc_tz = new DateTimeZone('UTC'); $schema_version = false; /** @@ -146,13 +137,14 @@ * @param string $msg The debug message. * @return void */ - function _debug($msg) { + function _debug($msg, $show = true) { + $ts = strftime("%H:%M:%S", time()); if (function_exists('posix_getpid')) { $ts = "$ts/" . posix_getpid(); } - if (!(defined('QUIET') && QUIET)) { + if ($show && !(defined('QUIET') && QUIET)) { print "[$ts] $msg\n"; } @@ -177,13 +169,13 @@ * @access public * @return void */ - function purge_feed($link, $feed_id, $purge_interval, $debug = false) { + function purge_feed($feed_id, $purge_interval, $debug = false) { - if (!$purge_interval) $purge_interval = feed_purge_interval($link, $feed_id); + if (!$purge_interval) $purge_interval = feed_purge_interval($feed_id); $rows = -1; - $result = db_query($link, + $result = db_query( "SELECT owner_uid FROM ttrss_feeds WHERE id = '$feed_id'"); $owner_uid = false; @@ -194,7 +186,7 @@ if ($purge_interval == -1 || !$purge_interval) { if ($owner_uid) { - ccache_update($link, $feed_id, $owner_uid); + ccache_update($feed_id, $owner_uid); } return; } @@ -202,7 +194,7 @@ if (!$owner_uid) return; if (FORCE_ARTICLE_PURGE == 0) { - $purge_unread = get_pref($link, "PURGE_UNREAD_ARTICLES", + $purge_unread = get_pref("PURGE_UNREAD_ARTICLES", $owner_uid, false); } else { $purge_unread = true; @@ -212,11 +204,11 @@ if (!$purge_unread) $query_limit = " unread = false AND "; if (DB_TYPE == "pgsql") { - $pg_version = get_pgsql_version($link); + $pg_version = get_pgsql_version(); if (preg_match("/^7\./", $pg_version) || preg_match("/^8\.0/", $pg_version)) { - $result = db_query($link, "DELETE FROM ttrss_user_entries WHERE + $result = db_query("DELETE FROM ttrss_user_entries WHERE ttrss_entries.id = ref_id AND marked = false AND feed_id = '$feed_id' AND @@ -225,7 +217,7 @@ } else { - $result = db_query($link, "DELETE FROM ttrss_user_entries + $result = db_query("DELETE FROM ttrss_user_entries USING ttrss_entries WHERE ttrss_entries.id = ref_id AND marked = false AND @@ -234,28 +226,25 @@ ttrss_entries.date_updated < NOW() - INTERVAL '$purge_interval days'"); } - $rows = pg_affected_rows($result); - } else { -/* $result = db_query($link, "DELETE FROM ttrss_user_entries WHERE +/* $result = db_query("DELETE FROM ttrss_user_entries WHERE marked = false AND feed_id = '$feed_id' AND (SELECT date_updated FROM ttrss_entries WHERE id = ref_id) < DATE_SUB(NOW(), INTERVAL $purge_interval DAY)"); */ - $result = db_query($link, "DELETE FROM ttrss_user_entries + $result = db_query("DELETE FROM ttrss_user_entries USING ttrss_user_entries, ttrss_entries WHERE ttrss_entries.id = ref_id AND marked = false AND feed_id = '$feed_id' AND $query_limit ttrss_entries.date_updated < DATE_SUB(NOW(), INTERVAL $purge_interval DAY)"); - - $rows = mysql_affected_rows($link); - } - ccache_update($link, $feed_id, $owner_uid); + $rows = db_affected_rows($result); + + ccache_update($feed_id, $owner_uid); if ($debug) { _debug("Purged feed $feed_id ($purge_interval): deleted $rows articles"); @@ -264,16 +253,16 @@ return $rows; } // function purge_feed - function feed_purge_interval($link, $feed_id) { + function feed_purge_interval($feed_id) { - $result = db_query($link, "SELECT purge_interval, owner_uid FROM ttrss_feeds + $result = db_query("SELECT purge_interval, owner_uid FROM ttrss_feeds WHERE id = '$feed_id'"); if (db_num_rows($result) == 1) { $purge_interval = db_fetch_result($result, 0, "purge_interval"); $owner_uid = db_fetch_result($result, 0, "owner_uid"); - if ($purge_interval == 0) $purge_interval = get_pref($link, + if ($purge_interval == 0) $purge_interval = get_pref( 'PURGE_OLD_DAYS', $owner_uid); return $purge_interval; @@ -283,20 +272,20 @@ } } - function purge_orphans($link, $do_output = false) { + function purge_orphans($do_output = false) { // purge orphaned posts in main content table - $result = db_query($link, "DELETE FROM ttrss_entries WHERE + $result = db_query("DELETE FROM ttrss_entries WHERE (SELECT COUNT(int_id) FROM ttrss_user_entries WHERE ref_id = id) = 0"); if ($do_output) { - $rows = db_affected_rows($link, $result); + $rows = db_affected_rows($result); _debug("Purged $rows orphaned posts."); } } - function get_feed_update_interval($link, $feed_id) { - $result = db_query($link, "SELECT owner_uid, update_interval FROM + function get_feed_update_interval($feed_id) { + $result = db_query("SELECT owner_uid, update_interval FROM ttrss_feeds WHERE id = '$feed_id'"); if (db_num_rows($result) == 1) { @@ -306,7 +295,7 @@ if ($update_interval != 0) { return $update_interval; } else { - return get_pref($link, 'DEFAULT_UPDATE_INTERVAL', $owner_uid, false); + return get_pref('DEFAULT_UPDATE_INTERVAL', $owner_uid, false); } } else { @@ -319,32 +308,35 @@ global $fetch_last_error; global $fetch_last_error_code; global $fetch_last_content_type; + global $fetch_curl_used; $url = str_replace(' ', '%20', $url); - if (!defined('NO_CURL') && function_exists('curl_init') && !ini_get("open_basedir")) { + if (!defined('NO_CURL') && function_exists('curl_init')) { - if (ini_get("safe_mode")) { + $fetch_curl_used = true; + + if (ini_get("safe_mode") || ini_get("open_basedir")) { $ch = curl_init(geturl($url)); } else { $ch = curl_init($url); } - if ($timestamp) { + if ($timestamp && !$post_query) { curl_setopt($ch, CURLOPT_HTTPHEADER, array("If-Modified-Since: ".gmdate('D, d M Y H:i:s \G\M\T', $timestamp))); } curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout ? $timeout : FILE_FETCH_CONNECT_TIMEOUT); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout ? $timeout : FILE_FETCH_TIMEOUT); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("safe_mode")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("safe_mode") && !ini_get("open_basedir")); curl_setopt($ch, CURLOPT_MAXREDIRS, 20); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERAGENT, SELF_USER_AGENT); - curl_setopt($ch, CURLOPT_ENCODING , "gzip"); + curl_setopt($ch, CURLOPT_ENCODING, ""); curl_setopt($ch, CURLOPT_REFERER, $url); if ($post_query) { @@ -387,6 +379,9 @@ return $contents; } else { + + $fetch_curl_used = false; + if ($login && $pass){ $url_parts = array(); @@ -399,20 +394,43 @@ } } - $data = @file_get_contents($url); + if (!$post_query && $timestamp) { + $context = stream_context_create(array( + 'http' => array( + 'method' => 'GET', + 'header' => "If-Modified-Since: ".gmdate("D, d M Y H:i:s \\G\\M\\T\r\n", $timestamp) + ))); + } else { + $context = NULL; + } + + $old_error = error_get_last(); + + $data = @file_get_contents($url, false, $context); $fetch_last_content_type = false; // reset if no type was sent from server - foreach ($http_response_header as $h) { - if (substr(strtolower($h), 0, 13) == 'content-type:') { - $fetch_last_content_type = substr($h, 14); - // don't abort here b/c there might be more than one - // e.g. if we were being redirected -- last one is the right one + if (isset($http_response_header) && is_array($http_response_header)) { + foreach ($http_response_header as $h) { + if (substr(strtolower($h), 0, 13) == 'content-type:') { + $fetch_last_content_type = substr($h, 14); + // don't abort here b/c there might be more than one + // e.g. if we were being redirected -- last one is the right one + } + + if (substr(strtolower($h), 0, 7) == 'http/1.') { + $fetch_last_error_code = (int) substr($h, 9, 3); + } } } - if (!$data && function_exists('error_get_last')) { + if (!$data) { $error = error_get_last(); - $fetch_last_error = $error["message"]; + + if ($error['message'] != $old_error['message']) { + $fetch_last_error = $error["message"]; + } else { + $fetch_last_error = "HTTP Code: $fetch_last_error_code"; + } } return $data; } @@ -461,7 +479,7 @@ return $favicon_url; } // function get_favicon_url - function check_feed_favicon($site_url, $feed, $link) { + function check_feed_favicon($site_url, $feed) { # print "FAVICON [$site_url]: $favicon_url\n"; $icon_file = ICONS_DIR . "/$feed.ico"; @@ -508,6 +526,7 @@ } } } + return $icon_file; } } @@ -562,9 +581,9 @@ } } - function initialize_user_prefs($link, $uid, $profile = false) { + function initialize_user_prefs($uid, $profile = false) { - $uid = db_escape_string($link, $uid); + $uid = db_escape_string($uid); if (!$profile) { $profile = "NULL"; @@ -573,13 +592,13 @@ $profile_qpart = "AND profile = '$profile'"; } - if (get_schema_version($link) < 63) $profile_qpart = ""; + if (get_schema_version() < 63) $profile_qpart = ""; - db_query($link, "BEGIN"); + db_query("BEGIN"); - $result = db_query($link, "SELECT pref_name,def_value FROM ttrss_prefs"); + $result = db_query("SELECT pref_name,def_value FROM ttrss_prefs"); - $u_result = db_query($link, "SELECT pref_name + $u_result = db_query("SELECT pref_name FROM ttrss_user_prefs WHERE owner_uid = '$uid' $profile_qpart"); $active_prefs = array(); @@ -592,16 +611,16 @@ if (array_search($line["pref_name"], $active_prefs) === FALSE) { // print "adding " . $line["pref_name"] . "<br>"; - $line["def_value"] = db_escape_string($link, $line["def_value"]); - $line["pref_name"] = db_escape_string($link, $line["pref_name"]); + $line["def_value"] = db_escape_string($line["def_value"]); + $line["pref_name"] = db_escape_string($line["pref_name"]); - if (get_schema_version($link) < 63) { - db_query($link, "INSERT INTO ttrss_user_prefs + if (get_schema_version() < 63) { + db_query("INSERT INTO ttrss_user_prefs (owner_uid,pref_name,value) VALUES ('$uid', '".$line["pref_name"]."','".$line["def_value"]."')"); } else { - db_query($link, "INSERT INTO ttrss_user_prefs + db_query("INSERT INTO ttrss_user_prefs (owner_uid,pref_name,value, profile) VALUES ('$uid', '".$line["pref_name"]."','".$line["def_value"]."', $profile)"); } @@ -609,7 +628,7 @@ } } - db_query($link, "COMMIT"); + db_query("COMMIT"); } @@ -623,13 +642,12 @@ return ""; } - function authenticate_user($link, $login, $password, $check_only = false) { + function authenticate_user($login, $password, $check_only = false) { if (!SINGLE_USER_MODE) { $user_id = false; - global $pluginhost; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_AUTH_USER) as $plugin) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_AUTH_USER) as $plugin) { $user_id = (int) $plugin->authenticate($login, $password); @@ -643,16 +661,16 @@ @session_start(); $_SESSION["uid"] = $user_id; - $_SESSION["version"] = VERSION; + $_SESSION["version"] = VERSION_STATIC; - $result = db_query($link, "SELECT login,access_level,pwd_hash FROM ttrss_users + $result = db_query("SELECT login,access_level,pwd_hash FROM ttrss_users WHERE id = '$user_id'"); $_SESSION["name"] = db_fetch_result($result, 0, "login"); $_SESSION["access_level"] = db_fetch_result($result, 0, "access_level"); $_SESSION["csrf_token"] = sha1(uniqid(rand(), true)); - db_query($link, "UPDATE ttrss_users SET last_login = NOW() WHERE id = " . + db_query("UPDATE ttrss_users SET last_login = NOW() WHERE id = " . $_SESSION["uid"]); $_SESSION["ip_address"] = $_SERVER["REMOTE_ADDR"]; @@ -661,7 +679,7 @@ $_SESSION["last_version_check"] = time(); - initialize_user_prefs($link, $_SESSION["uid"]); + initialize_user_prefs($_SESSION["uid"]); return true; } @@ -685,7 +703,7 @@ $_SESSION["ip_address"] = $_SERVER["REMOTE_ADDR"]; - initialize_user_prefs($link, $_SESSION["uid"]); + initialize_user_prefs($_SESSION["uid"]); return true; } @@ -714,13 +732,13 @@ // user preferences are checked on every login, not here - function initialize_user($link, $uid) { + function initialize_user($uid) { - db_query($link, "insert into ttrss_feeds (owner_uid,title,feed_url) + db_query("insert into ttrss_feeds (owner_uid,title,feed_url) values ('$uid', 'Tiny Tiny RSS: New Releases', 'http://tt-rss.org/releases.rss')"); - db_query($link, "insert into ttrss_feeds (owner_uid,title,feed_url) + db_query("insert into ttrss_feeds (owner_uid,title,feed_url) values ('$uid', 'Tiny Tiny RSS: Forum', 'http://tt-rss.org/forum/rss.php')"); } @@ -736,70 +754,61 @@ return $csrf_token == $_SESSION['csrf_token']; } - function load_user_plugins($link, $owner_uid) { + function load_user_plugins($owner_uid) { if ($owner_uid) { - $plugins = get_pref($link, "_ENABLED_PLUGINS", $owner_uid); + $plugins = get_pref("_ENABLED_PLUGINS", $owner_uid); - global $pluginhost; - $pluginhost->load($plugins, $pluginhost::KIND_USER, $owner_uid); + PluginHost::getInstance()->load($plugins, PluginHost::KIND_USER, $owner_uid); - if (get_schema_version($link) > 100) { - $pluginhost->load_data(); + if (get_schema_version() > 100) { + PluginHost::getInstance()->load_data(); } } } - function login_sequence($link) { - $_SESSION["prefs_cache"] = false; - + function login_sequence() { if (SINGLE_USER_MODE) { @session_start(); - authenticate_user($link, "admin", null); - cache_prefs($link); - load_user_plugins($link, $_SESSION["uid"]); + authenticate_user("admin", null); + load_user_plugins($_SESSION["uid"]); } else { - if (!validate_session($link)) $_SESSION["uid"] = false; + if (!validate_session()) $_SESSION["uid"] = false; if (!$_SESSION["uid"]) { - if (AUTH_AUTO_LOGIN && authenticate_user($link, null, null)) { - $_SESSION["ref_schema_version"] = get_schema_version($link, true); + if (AUTH_AUTO_LOGIN && authenticate_user(null, null)) { + $_SESSION["ref_schema_version"] = get_schema_version(true); } else { - authenticate_user($link, null, null, true); + authenticate_user(null, null, true); } if (!$_SESSION["uid"]) { @session_destroy(); setcookie(session_name(), '', time()-42000, '/'); - render_login_form($link); + render_login_form(); exit; } } else { /* bump login timestamp */ - db_query($link, "UPDATE ttrss_users SET last_login = NOW() WHERE id = " . + db_query("UPDATE ttrss_users SET last_login = NOW() WHERE id = " . $_SESSION["uid"]); $_SESSION["last_login_update"] = time(); } - if ($_SESSION["uid"] && $_SESSION["language"] && SESSION_COOKIE_LIFETIME > 0) { - setcookie("ttrss_lang", $_SESSION["language"], - time() + SESSION_COOKIE_LIFETIME); - } - if ($_SESSION["uid"]) { - cache_prefs($link); - load_user_plugins($link, $_SESSION["uid"]); + startup_gettext(); + load_user_plugins($_SESSION["uid"]); /* cleanup ccache */ - db_query($link, "DELETE FROM ttrss_counters_cache WHERE owner_uid = ". + db_query("DELETE FROM ttrss_counters_cache WHERE owner_uid = ". $_SESSION["uid"] . " AND (SELECT COUNT(id) FROM ttrss_feeds WHERE ttrss_feeds.id = feed_id) = 0"); - db_query($link, "DELETE FROM ttrss_cat_counters_cache WHERE owner_uid = ". + db_query("DELETE FROM ttrss_cat_counters_cache WHERE owner_uid = ". $_SESSION["uid"] . " AND (SELECT COUNT(id) FROM ttrss_feed_categories WHERE ttrss_feed_categories.id = feed_id) = 0"); @@ -835,56 +844,62 @@ return $dt->format('U') + $dest_tz->getOffset($dt); } - function make_local_datetime($link, $timestamp, $long, $owner_uid = false, + function make_local_datetime($timestamp, $long, $owner_uid = false, $no_smart_dt = false) { if (!$owner_uid) $owner_uid = $_SESSION['uid']; if (!$timestamp) $timestamp = '1970-01-01 0:00'; global $utc_tz; - global $tz_offset; + global $user_tz; + + if (!$utc_tz) $utc_tz = new DateTimeZone('UTC'); + + $timestamp = substr($timestamp, 0, 19); # We store date in UTC internally $dt = new DateTime($timestamp, $utc_tz); - if ($tz_offset == -1) { + $user_tz_string = get_pref('USER_TIMEZONE', $owner_uid); - $user_tz_string = get_pref($link, 'USER_TIMEZONE', $owner_uid); + if ($user_tz_string != 'Automatic') { try { - $user_tz = new DateTimeZone($user_tz_string); + if (!$user_tz) $user_tz = new DateTimeZone($user_tz_string); } catch (Exception $e) { $user_tz = $utc_tz; } $tz_offset = $user_tz->getOffset($dt); + } else { + $tz_offset = (int) -$_SESSION["clientTzOffset"]; } $user_timestamp = $dt->format('U') + $tz_offset; if (!$no_smart_dt) { - return smart_date_time($link, $user_timestamp, + return smart_date_time($user_timestamp, $tz_offset, $owner_uid); } else { if ($long) - $format = get_pref($link, 'LONG_DATE_FORMAT', $owner_uid); + $format = get_pref('LONG_DATE_FORMAT', $owner_uid); else - $format = get_pref($link, 'SHORT_DATE_FORMAT', $owner_uid); + $format = get_pref('SHORT_DATE_FORMAT', $owner_uid); return date($format, $user_timestamp); } } - function smart_date_time($link, $timestamp, $tz_offset = 0, $owner_uid = false) { + function smart_date_time($timestamp, $tz_offset = 0, $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION['uid']; if (date("Y.m.d", $timestamp) == date("Y.m.d", time() + $tz_offset)) { return date("G:i", $timestamp); } else if (date("Y", $timestamp) == date("Y", time() + $tz_offset)) { - $format = get_pref($link, 'SHORT_DATE_FORMAT', $owner_uid); + $format = get_pref('SHORT_DATE_FORMAT', $owner_uid); return date($format, $timestamp); } else { - $format = get_pref($link, 'LONG_DATE_FORMAT', $owner_uid); + $format = get_pref('LONG_DATE_FORMAT', $owner_uid); return date($format, $timestamp); } } @@ -908,11 +923,11 @@ // Session caching removed due to causing wrong redirects to upgrade // script when get_schema_version() is called on an obsolete session // created on a previous schema version. - function get_schema_version($link, $nocache = false) { + function get_schema_version($nocache = false) { global $schema_version; - if (!$schema_version) { - $result = db_query($link, "SELECT schema_version FROM ttrss_version"); + if (!$schema_version && !$nocache) { + $result = db_query("SELECT schema_version FROM ttrss_version"); $version = db_fetch_result($result, 0, "schema_version"); $schema_version = $version; return $version; @@ -921,24 +936,24 @@ } } - function sanity_check($link) { + function sanity_check() { require_once 'errors.php'; $error_code = 0; - $schema_version = get_schema_version($link, true); + $schema_version = get_schema_version(true); if ($schema_version != SCHEMA_VERSION) { $error_code = 5; } if (DB_TYPE == "mysql") { - $result = db_query($link, "SELECT true", false); + $result = db_query("SELECT true", false); if (db_num_rows($result) != 1) { $error_code = 10; } } - if (db_escape_string($link, "testTEST") != "testTEST") { + if (db_escape_string("testTEST") != "testTEST") { $error_code = 12; } @@ -997,7 +1012,7 @@ } } - function catchup_feed($link, $feed, $cat_view, $owner_uid = false, $max_id = false, $mode = 'all') { + function catchup_feed($feed, $cat_view, $owner_uid = false, $max_id = false, $mode = 'all') { if (!$owner_uid) $owner_uid = $_SESSION['uid']; @@ -1039,7 +1054,7 @@ if ($feed >= 0) { if ($feed > 0) { - $children = getChildCategories($link, $feed, $owner_uid); + $children = getChildCategories($feed, $owner_uid); array_push($children, $feed); $children = join(",", $children); @@ -1049,7 +1064,7 @@ $cat_qpart = "cat_id IS NULL"; } - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET unread = false, last_read = NOW() WHERE ref_id IN (SELECT id FROM (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id @@ -1058,7 +1073,7 @@ } else if ($feed == -2) { - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET unread = false,last_read = NOW() WHERE (SELECT COUNT(*) FROM ttrss_user_labels2 WHERE article_id = ref_id) > 0 AND unread = true AND $date_qpart AND owner_uid = $owner_uid"); @@ -1066,7 +1081,7 @@ } else if ($feed > 0) { - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET unread = false, last_read = NOW() WHERE ref_id IN (SELECT id FROM (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id @@ -1075,7 +1090,7 @@ } else if ($feed < 0 && $feed > LABEL_BASE_INDEX) { // special, like starred if ($feed == -1) { - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET unread = false, last_read = NOW() WHERE ref_id IN (SELECT id FROM (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id @@ -1083,7 +1098,7 @@ } if ($feed == -2) { - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET unread = false, last_read = NOW() WHERE ref_id IN (SELECT id FROM (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id @@ -1092,7 +1107,7 @@ if ($feed == -3) { - $intl = get_pref($link, "FRESH_ARTICLE_MAX_AGE"); + $intl = get_pref("FRESH_ARTICLE_MAX_AGE"); if (DB_TYPE == "pgsql") { $match_part = "date_entered > NOW() - INTERVAL '$intl hour' "; @@ -1101,7 +1116,7 @@ INTERVAL $intl HOUR) "; } - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET unread = false, last_read = NOW() WHERE ref_id IN (SELECT id FROM (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id @@ -1109,7 +1124,7 @@ } if ($feed == -4) { - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET unread = false, last_read = NOW() WHERE ref_id IN (SELECT id FROM (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id @@ -1120,7 +1135,7 @@ $label_id = feed_to_label_id($feed); - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET unread = false, last_read = NOW() WHERE ref_id IN (SELECT id FROM (SELECT ttrss_entries.id FROM ttrss_entries, ttrss_user_entries, ttrss_user_labels2 WHERE ref_id = id @@ -1129,10 +1144,10 @@ } - ccache_update($link, $feed, $owner_uid, $cat_view); + ccache_update($feed, $owner_uid, $cat_view); } else { // tag - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET unread = false, last_read = NOW() WHERE ref_id IN (SELECT id FROM (SELECT ttrss_entries.id FROM ttrss_entries, ttrss_user_entries, ttrss_tags WHERE ref_id = ttrss_entries.id @@ -1142,18 +1157,18 @@ } } - function getAllCounters($link) { - $data = getGlobalCounters($link); + function getAllCounters() { + $data = getGlobalCounters(); - $data = array_merge($data, getVirtCounters($link)); - $data = array_merge($data, getLabelCounters($link)); - $data = array_merge($data, getFeedCounters($link, $active_feed)); - $data = array_merge($data, getCategoryCounters($link)); + $data = array_merge($data, getVirtCounters()); + $data = array_merge($data, getLabelCounters()); + $data = array_merge($data, getFeedCounters()); + $data = array_merge($data, getCategoryCounters()); return $data; } - function getCategoryTitle($link, $cat_id) { + function getCategoryTitle($cat_id) { if ($cat_id == -1) { return __("Special"); @@ -1161,7 +1176,7 @@ return __("Labels"); } else { - $result = db_query($link, "SELECT title FROM ttrss_feed_categories WHERE + $result = db_query("SELECT title FROM ttrss_feed_categories WHERE id = '$cat_id'"); if (db_num_rows($result) == 1) { @@ -1173,17 +1188,17 @@ } - function getCategoryCounters($link) { + function getCategoryCounters() { $ret_arr = array(); /* Labels category */ $cv = array("id" => -2, "kind" => "cat", - "counter" => getCategoryUnread($link, -2)); + "counter" => getCategoryUnread(-2)); array_push($ret_arr, $cv); - $result = db_query($link, "SELECT id AS cat_id, value AS unread, + $result = db_query("SELECT id AS cat_id, value AS unread, (SELECT COUNT(id) FROM ttrss_feed_categories AS c2 WHERE c2.parent_cat = ttrss_feed_categories.id) AS num_children FROM ttrss_feed_categories, ttrss_cat_counters_cache @@ -1195,7 +1210,7 @@ $line["cat_id"] = (int) $line["cat_id"]; if ($line["num_children"] > 0) { - $child_counter = getCategoryChildrenUnread($link, $line["cat_id"], $_SESSION["uid"]); + $child_counter = getCategoryChildrenUnread($line["cat_id"], $_SESSION["uid"]); } else { $child_counter = 0; } @@ -1209,7 +1224,7 @@ /* Special case: NULL category doesn't actually exist in the DB */ $cv = array("id" => 0, "kind" => "cat", - "counter" => (int) ccache_find($link, 0, $_SESSION["uid"], true)); + "counter" => (int) ccache_find(0, $_SESSION["uid"], true)); array_push($ret_arr, $cv); @@ -1217,23 +1232,23 @@ } // only accepts real cats (>= 0) - function getCategoryChildrenUnread($link, $cat, $owner_uid = false) { + function getCategoryChildrenUnread($cat, $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; - $result = db_query($link, "SELECT id FROM ttrss_feed_categories WHERE parent_cat = '$cat' + $result = db_query("SELECT id FROM ttrss_feed_categories WHERE parent_cat = '$cat' AND owner_uid = $owner_uid"); $unread = 0; while ($line = db_fetch_assoc($result)) { - $unread += getCategoryUnread($link, $line["id"], $owner_uid); - $unread += getCategoryChildrenUnread($link, $line["id"], $owner_uid); + $unread += getCategoryUnread($line["id"], $owner_uid); + $unread += getCategoryChildrenUnread($line["id"], $owner_uid); } return $unread; } - function getCategoryUnread($link, $cat, $owner_uid = false) { + function getCategoryUnread($cat, $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; @@ -1245,7 +1260,7 @@ $cat_query = "cat_id IS NULL"; } - $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE $cat_query + $result = db_query("SELECT id FROM ttrss_feeds WHERE $cat_query AND owner_uid = " . $owner_uid); $cat_feeds = array(); @@ -1257,7 +1272,7 @@ $match_part = implode(" OR ", $cat_feeds); - $result = db_query($link, "SELECT COUNT(int_id) AS unread + $result = db_query("SELECT COUNT(int_id) AS unread FROM ttrss_user_entries WHERE unread = true AND ($match_part) AND owner_uid = " . $owner_uid); @@ -1271,10 +1286,10 @@ return $unread; } else if ($cat == -1) { - return getFeedUnread($link, -1) + getFeedUnread($link, -2) + getFeedUnread($link, -3) + getFeedUnread($link, 0); + return getFeedUnread(-1) + getFeedUnread(-2) + getFeedUnread(-3) + getFeedUnread(0); } else if ($cat == -2) { - $result = db_query($link, " + $result = db_query(" SELECT COUNT(unread) AS unread FROM ttrss_user_entries, ttrss_user_labels2 WHERE article_id = ref_id AND unread = true @@ -1287,14 +1302,14 @@ } } - function getFeedUnread($link, $feed, $is_cat = false) { - return getFeedArticles($link, $feed, $is_cat, true, $_SESSION["uid"]); + function getFeedUnread($feed, $is_cat = false) { + return getFeedArticles($feed, $is_cat, true, $_SESSION["uid"]); } - function getLabelUnread($link, $label_id, $owner_uid = false) { + function getLabelUnread($label_id, $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; - $result = db_query($link, "SELECT COUNT(ref_id) AS unread FROM ttrss_user_entries, ttrss_user_labels2 + $result = db_query("SELECT COUNT(ref_id) AS unread FROM ttrss_user_entries, ttrss_user_labels2 WHERE owner_uid = '$owner_uid' AND unread = true AND label_id = '$label_id' AND article_id = ref_id"); if (db_num_rows($result) != 0) { @@ -1304,7 +1319,7 @@ } } - function getFeedArticles($link, $feed, $is_cat = false, $unread_only = false, + function getFeedArticles($feed, $is_cat = false, $unread_only = false, $owner_uid = false) { $n_feed = (int) $feed; @@ -1319,14 +1334,14 @@ } if ($is_cat) { - return getCategoryUnread($link, $n_feed, $owner_uid); + return getCategoryUnread($n_feed, $owner_uid); } else if ($n_feed == -6) { return 0; } else if ($feed != "0" && $n_feed == 0) { - $feed = db_escape_string($link, $feed); + $feed = db_escape_string($feed); - $result = db_query($link, "SELECT SUM((SELECT COUNT(int_id) + $result = db_query("SELECT SUM((SELECT COUNT(int_id) FROM ttrss_user_entries,ttrss_entries WHERE int_id = post_int_id AND ref_id = id AND $unread_qpart)) AS count FROM ttrss_tags WHERE owner_uid = $owner_uid AND tag_name = '$feed'"); @@ -1339,7 +1354,7 @@ } else if ($n_feed == -3) { $match_part = "unread = true AND score >= 0"; - $intl = get_pref($link, "FRESH_ARTICLE_MAX_AGE", $owner_uid); + $intl = get_pref("FRESH_ARTICLE_MAX_AGE", $owner_uid); if (DB_TYPE == "pgsql") { $match_part .= " AND updated > NOW() - INTERVAL '$intl hour' "; @@ -1363,7 +1378,7 @@ $label_id = feed_to_label_id($feed); - return getLabelUnread($link, $label_id, $owner_uid); + return getLabelUnread($label_id, $owner_uid); } @@ -1382,11 +1397,11 @@ //echo "[$feed/$query]\n"; - $result = db_query($link, $query); + $result = db_query($query); } else { - $result = db_query($link, "SELECT COUNT(post_int_id) AS unread + $result = db_query("SELECT COUNT(post_int_id) AS unread FROM ttrss_tags,ttrss_user_entries,ttrss_entries WHERE tag_name = '$feed' AND post_int_id = int_id AND ref_id = ttrss_entries.id AND $unread_qpart AND ttrss_tags.owner_uid = " . $owner_uid); @@ -1397,13 +1412,13 @@ return $unread; } - function getGlobalUnread($link, $user_id = false) { + function getGlobalUnread($user_id = false) { if (!$user_id) { $user_id = $_SESSION["uid"]; } - $result = db_query($link, "SELECT SUM(value) AS c_id FROM ttrss_counters_cache + $result = db_query("SELECT SUM(value) AS c_id FROM ttrss_counters_cache WHERE owner_uid = '$user_id' AND feed_id > 0"); $c_id = db_fetch_result($result, 0, "c_id"); @@ -1411,11 +1426,11 @@ return $c_id; } - function getGlobalCounters($link, $global_unread = -1) { + function getGlobalCounters($global_unread = -1) { $ret_arr = array(); if ($global_unread == -1) { - $global_unread = getGlobalUnread($link); + $global_unread = getGlobalUnread(); } $cv = array("id" => "global-unread", @@ -1423,7 +1438,7 @@ array_push($ret_arr, $cv); - $result = db_query($link, "SELECT COUNT(id) AS fn FROM + $result = db_query("SELECT COUNT(id) AS fn FROM ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]); $subscribed_feeds = db_fetch_result($result, 0, "fn"); @@ -1436,48 +1451,43 @@ return $ret_arr; } - function getVirtCounters($link) { + function getVirtCounters() { $ret_arr = array(); for ($i = 0; $i >= -4; $i--) { - $count = getFeedUnread($link, $i); + $count = getFeedUnread($i); $cv = array("id" => $i, "counter" => (int) $count); -// if (get_pref($link, 'EXTENDED_FEEDLIST')) -// $cv["xmsg"] = getFeedArticles($link, $i)." ".__("total"); +// if (get_pref('EXTENDED_FEEDLIST')) +// $cv["xmsg"] = getFeedArticles($i)." ".__("total"); array_push($ret_arr, $cv); } - global $pluginhost; - - if ($pluginhost) { - $feeds = $pluginhost->get_feeds(-1); - - if (is_array($feeds)) { - foreach ($feeds as $feed) { - $cv = array("id" => PluginHost::pfeed_to_feed_id($feed['id']), - "counter" => $feed['sender']->get_unread($feed['id'])); + $feeds = PluginHost::getInstance()->get_feeds(-1); + if (is_array($feeds)) { + foreach ($feeds as $feed) { + $cv = array("id" => PluginHost::pfeed_to_feed_id($feed['id']), + "counter" => $feed['sender']->get_unread($feed['id'])); array_push($ret_arr, $cv); - } } } return $ret_arr; } - function getLabelCounters($link, $descriptions = false) { + function getLabelCounters($descriptions = false) { $ret_arr = array(); $owner_uid = $_SESSION["uid"]; - $result = db_query($link, "SELECT id,caption,COUNT(unread) AS unread + $result = db_query("SELECT id,caption,COUNT(unread) AS unread FROM ttrss_labels2 LEFT JOIN ttrss_user_labels2 ON (ttrss_labels2.id = label_id) LEFT JOIN ttrss_user_entries ON (ref_id = article_id AND unread = true @@ -1498,8 +1508,8 @@ if ($descriptions) $cv["description"] = $label_name; -// if (get_pref($link, 'EXTENDED_FEEDLIST')) -// $cv["xmsg"] = getFeedArticles($link, $id)." ".__("total"); +// if (get_pref('EXTENDED_FEEDLIST')) +// $cv["xmsg"] = getFeedArticles($id)." ".__("total"); array_push($ret_arr, $cv); } @@ -1507,7 +1517,7 @@ return $ret_arr; } - function getFeedCounters($link, $active_feed = false) { + function getFeedCounters($active_feed = false) { $ret_arr = array(); @@ -1520,7 +1530,7 @@ AND ttrss_counters_cache.owner_uid = ttrss_feeds.owner_uid AND ttrss_counters_cache.feed_id = id"; - $result = db_query($link, $query); + $result = db_query($query); $fctrs_modified = false; while ($line = db_fetch_assoc($result)) { @@ -1529,7 +1539,7 @@ $count = $line["count"]; $last_error = htmlspecialchars($line["last_error"]); - $last_updated = make_local_datetime($link, $line['last_updated'], false); + $last_updated = make_local_datetime($line['last_updated'], false); $has_img = feed_has_icon($id); @@ -1544,8 +1554,8 @@ if ($last_error) $cv["error"] = $last_error; -// if (get_pref($link, 'EXTENDED_FEEDLIST')) -// $cv["xmsg"] = getFeedArticles($link, $id)." ".__("total"); +// if (get_pref('EXTENDED_FEEDLIST')) +// $cv["xmsg"] = getFeedArticles($id)." ".__("total"); if ($active_feed && $id == $active_feed) $cv["title"] = truncate_string($line["title"], 30); @@ -1557,8 +1567,8 @@ return $ret_arr; } - function get_pgsql_version($link) { - $result = db_query($link, "SELECT version() AS version"); + function get_pgsql_version() { + $result = db_query("SELECT version() AS version"); $version = explode(" ", db_fetch_result($result, 0, "version")); return $version[1]; } @@ -1574,8 +1584,9 @@ * Here you should call extractfeedurls in rpc-backend * to get all possible feeds. * 5 - Couldn't download the URL content. + * 6 - Content is an invalid XML. */ - function subscribe_to_feed($link, $url, $cat_id = 0, + function subscribe_to_feed($url, $cat_id = 0, $auth_login = '', $auth_pass = '') { global $fetch_last_error; @@ -1604,31 +1615,53 @@ $url = key($feedUrls); } + /* libxml_use_internal_errors(true); + $doc = new DOMDocument(); + $doc->loadXML($contents); + $error = libxml_get_last_error(); + libxml_clear_errors(); + + if ($error) { + $error_message = format_libxml_error($error); + + return array("code" => 6, "message" => $error_message); + } */ + if ($cat_id == "0" || !$cat_id) { $cat_qpart = "NULL"; } else { $cat_qpart = "'$cat_id'"; } - $result = db_query($link, + $result = db_query( "SELECT id FROM ttrss_feeds WHERE feed_url = '$url' AND owner_uid = ".$_SESSION["uid"]); + if (strlen(FEED_CRYPT_KEY) > 0) { + require_once "crypt.php"; + $auth_pass = substr(encrypt_string($auth_pass), 0, 250); + $auth_pass_encrypted = 'true'; + } else { + $auth_pass_encrypted = 'false'; + } + + $auth_pass = db_escape_string($auth_pass); + if (db_num_rows($result) == 0) { - $result = db_query($link, + $result = db_query( "INSERT INTO ttrss_feeds - (owner_uid,feed_url,title,cat_id, auth_login,auth_pass,update_method) + (owner_uid,feed_url,title,cat_id, auth_login,auth_pass,update_method,auth_pass_encrypted) VALUES ('".$_SESSION["uid"]."', '$url', - '[Unknown]', $cat_qpart, '$auth_login', '$auth_pass', 0)"); + '[Unknown]', $cat_qpart, '$auth_login', '$auth_pass', 0, $auth_pass_encrypted)"); - $result = db_query($link, + $result = db_query( "SELECT id FROM ttrss_feeds WHERE feed_url = '$url' AND owner_uid = " . $_SESSION["uid"]); $feed_id = db_fetch_result($result, 0, "id"); if ($feed_id) { - update_rss_feed($link, $feed_id, true); + update_rss_feed($feed_id, false, false, false, $contents); } return array("code" => 1); @@ -1637,7 +1670,7 @@ } } - function print_feed_select($link, $id, $default_id = "", + function print_feed_select($id, $default_id = "", $attributes = "", $include_all_feeds = true, $root_id = false, $nest_level = 0) { @@ -1649,14 +1682,14 @@ } } - if (get_pref($link, 'ENABLE_FEED_CATS')) { + if (get_pref('ENABLE_FEED_CATS')) { if ($root_id) $parent_qpart = "parent_cat = '$root_id'"; else $parent_qpart = "parent_cat IS NULL"; - $result = db_query($link, "SELECT id,title, + $result = db_query("SELECT id,title, (SELECT COUNT(id) FROM ttrss_feed_categories AS c2 WHERE c2.parent_cat = ttrss_feed_categories.id) AS num_children FROM ttrss_feed_categories @@ -1673,10 +1706,10 @@ $line["id"], htmlspecialchars($line["title"])); if ($line["num_children"] > 0) - print_feed_select($link, $id, $default_id, $attributes, + print_feed_select($id, $default_id, $attributes, $include_all_feeds, $line["id"], $nest_level+1); - $feed_result = db_query($link, "SELECT id,title FROM ttrss_feeds + $feed_result = db_query("SELECT id,title FROM ttrss_feeds WHERE cat_id = '".$line["id"]."' AND owner_uid = ".$_SESSION["uid"] . " ORDER BY title"); while ($fline = db_fetch_assoc($feed_result)) { @@ -1693,12 +1726,13 @@ } if (!$root_id) { - $is_selected = ($default_id == "CAT:0") ? "selected=\"1\"" : ""; + $default_is_cat = ($default_id == "CAT:0"); + $is_selected = $default_is_cat ? "selected=\"1\"" : ""; printf("<option $is_selected value='CAT:0'>%s</option>", __("Uncategorized")); - $feed_result = db_query($link, "SELECT id,title FROM ttrss_feeds + $feed_result = db_query("SELECT id,title FROM ttrss_feeds WHERE cat_id IS NULL AND owner_uid = ".$_SESSION["uid"] . " ORDER BY title"); while ($fline = db_fetch_assoc($feed_result)) { @@ -1715,7 +1749,7 @@ } } else { - $result = db_query($link, "SELECT id,title FROM ttrss_feeds + $result = db_query("SELECT id,title FROM ttrss_feeds WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY title"); while ($line = db_fetch_assoc($result)) { @@ -1732,7 +1766,7 @@ } } - function print_feed_cat_select($link, $id, $default_id, + function print_feed_cat_select($id, $default_id, $attributes, $include_all_cats = true, $root_id = false, $nest_level = 0) { if (!$root_id) { @@ -1744,7 +1778,7 @@ else $parent_qpart = "parent_cat IS NULL"; - $result = db_query($link, "SELECT id,title, + $result = db_query("SELECT id,title, (SELECT COUNT(id) FROM ttrss_feed_categories AS c2 WHERE c2.parent_cat = ttrss_feed_categories.id) AS num_children FROM ttrss_feed_categories @@ -1765,7 +1799,7 @@ $line["id"], htmlspecialchars($line["title"])); if ($line["num_children"] > 0) - print_feed_cat_select($link, $id, $default_id, $attributes, + print_feed_cat_select($id, $default_id, $attributes, $include_all_cats, $line["id"], $nest_level+1); } @@ -1791,13 +1825,13 @@ return ($val == "on") ? "true" : "false"; } - function getFeedCatTitle($link, $id) { + function getFeedCatTitle($id) { if ($id == -1) { return __("Special"); } else if ($id < LABEL_BASE_INDEX) { return __("Labels"); } else if ($id > 0) { - $result = db_query($link, "SELECT ttrss_feed_categories.title + $result = db_query("SELECT ttrss_feed_categories.title FROM ttrss_feeds, ttrss_feed_categories WHERE ttrss_feeds.id = '$id' AND cat_id = ttrss_feed_categories.id"); if (db_num_rows($result) == 1) { @@ -1840,11 +1874,13 @@ } break; } + + return false; } - function getFeedTitle($link, $id, $cat = false) { + function getFeedTitle($id, $cat = false) { if ($cat) { - return getCategoryTitle($link, $id); + return getCategoryTitle($id); } else if ($id == -1) { return __("Starred articles"); } else if ($id == -2) { @@ -1859,7 +1895,7 @@ return __("Recently read"); } else if ($id < LABEL_BASE_INDEX) { $label_id = feed_to_label_id($id); - $result = db_query($link, "SELECT caption FROM ttrss_labels2 WHERE id = '$label_id'"); + $result = db_query("SELECT caption FROM ttrss_labels2 WHERE id = '$label_id'"); if (db_num_rows($result) == 1) { return db_fetch_result($result, 0, "caption"); } else { @@ -1867,7 +1903,7 @@ } } else if (is_numeric($id) && $id > 0) { - $result = db_query($link, "SELECT title FROM ttrss_feeds WHERE id = '$id'"); + $result = db_query("SELECT title FROM ttrss_feeds WHERE id = '$id'"); if (db_num_rows($result) == 1) { return db_fetch_result($result, 0, "title"); } else { @@ -1878,7 +1914,7 @@ } } - function make_init_params($link) { + function make_init_params() { $params = array(); foreach (array("ON_CATCHUP_SHOW_NEXT_FEED", "HIDE_READ_FEEDS", @@ -1886,18 +1922,18 @@ "CDM_AUTO_CATCHUP", "FRESH_ARTICLE_MAX_AGE", "HIDE_READ_SHOWS_SPECIAL", "COMBINED_DISPLAY_MODE") as $param) { - $params[strtolower($param)] = (int) get_pref($link, $param); + $params[strtolower($param)] = (int) get_pref($param); } $params["icons_url"] = ICONS_URL; $params["cookie_lifetime"] = SESSION_COOKIE_LIFETIME; - $params["default_view_mode"] = get_pref($link, "_DEFAULT_VIEW_MODE"); - $params["default_view_limit"] = (int) get_pref($link, "_DEFAULT_VIEW_LIMIT"); - $params["default_view_order_by"] = get_pref($link, "_DEFAULT_VIEW_ORDER_BY"); + $params["default_view_mode"] = get_pref("_DEFAULT_VIEW_MODE"); + $params["default_view_limit"] = (int) get_pref("_DEFAULT_VIEW_LIMIT"); + $params["default_view_order_by"] = get_pref("_DEFAULT_VIEW_ORDER_BY"); $params["bw_limit"] = (int) $_SESSION["bw_limit"]; $params["label_base_index"] = (int) LABEL_BASE_INDEX; - $result = db_query($link, "SELECT MAX(id) AS mid, COUNT(*) AS nf FROM + $result = db_query("SELECT MAX(id) AS mid, COUNT(*) AS nf FROM ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]); $max_feed_id = db_fetch_result($result, 0, "mid"); @@ -1906,8 +1942,8 @@ $params["max_feed_id"] = (int) $max_feed_id; $params["num_feeds"] = (int) $num_feeds; - $params["collapsed_feedlist"] = (int) get_pref($link, "_COLLAPSED_FEEDLIST"); - $params["hotkeys"] = get_hotkeys_map($link); + $params["collapsed_feedlist"] = (int) get_pref("_COLLAPSED_FEEDLIST"); + $params["hotkeys"] = get_hotkeys_map(); $params["csrf_token"] = $_SESSION["csrf_token"]; $params["widescreen"] = (int) $_COOKIE["ttrss_widescreen"]; @@ -1917,7 +1953,7 @@ return $params; } - function get_hotkeys_info($link) { + function get_hotkeys_info() { $hotkeys = array( __("Navigation") => array( "next_feed" => __("Open next feed"), @@ -1980,15 +2016,14 @@ "help_dialog" => __("Show help dialog")) ); - global $pluginhost; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_HOTKEY_INFO) as $plugin) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HOTKEY_INFO) as $plugin) { $hotkeys = $plugin->hook_hotkey_info($hotkeys); } return $hotkeys; } - function get_hotkeys_map($link) { + function get_hotkeys_map() { $hotkeys = array( // "navigation" => array( "k" => "next_feed", @@ -2052,13 +2087,12 @@ "^(191)|Ctrl+/" => "help_dialog", ); - if (get_pref($link, 'COMBINED_DISPLAY_MODE')) { + if (get_pref('COMBINED_DISPLAY_MODE')) { $hotkeys["^(38)|Ctrl-up"] = "prev_article_noscroll"; $hotkeys["^(40)|Ctrl-down"] = "next_article_noscroll"; } - global $pluginhost; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_HOTKEY_MAP) as $plugin) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HOTKEY_MAP) as $plugin) { $hotkeys = $plugin->hook_hotkey_map($hotkeys); } @@ -2075,10 +2109,10 @@ return array($prefixes, $hotkeys); } - function make_runtime_info($link) { + function make_runtime_info() { $data = array(); - $result = db_query($link, "SELECT MAX(id) AS mid, COUNT(*) AS nf FROM + $result = db_query("SELECT MAX(id) AS mid, COUNT(*) AS nf FROM ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]); $max_feed_id = db_fetch_result($result, 0, "mid"); @@ -2087,8 +2121,8 @@ $data["max_feed_id"] = (int) $max_feed_id; $data["num_feeds"] = (int) $num_feeds; - $data['last_article_id'] = getLastArticleId($link); - $data['cdm_expanded'] = get_pref($link, 'CDM_EXPANDED'); + $data['last_article_id'] = getLastArticleId(); + $data['cdm_expanded'] = get_pref('CDM_EXPANDED'); $data['dep_ts'] = calculate_dep_timestamp(); $data['reload_on_ts_change'] = !defined('_NO_RELOAD_ON_TS_CHANGE'); @@ -2121,7 +2155,7 @@ } if ($_SESSION["last_version_check"] + 86400 + rand(-1000, 1000) < time()) { - $new_version_details = @check_for_update($link); + $new_version_details = @check_for_update(); $data['new_version_available'] = (int) ($new_version_details != false); @@ -2132,7 +2166,7 @@ return $data; } - function search_to_sql($link, $search) { + function search_to_sql($search) { $search_query_part = ""; @@ -2153,7 +2187,7 @@ case "title": if ($commandpair[1]) { array_push($query_keywords, "($not (LOWER(ttrss_entries.title) LIKE '%". - db_escape_string($link, mb_strtolower($commandpair[1]))."%'))"); + db_escape_string(mb_strtolower($commandpair[1]))."%'))"); } else { array_push($query_keywords, "(UPPER(ttrss_entries.title) $not LIKE UPPER('%$k%') OR UPPER(ttrss_entries.content) $not LIKE UPPER('%$k%'))"); @@ -2162,7 +2196,7 @@ case "author": if ($commandpair[1]) { array_push($query_keywords, "($not (LOWER(author) LIKE '%". - db_escape_string($link, mb_strtolower($commandpair[1]))."%'))"); + db_escape_string(mb_strtolower($commandpair[1]))."%'))"); } else { array_push($query_keywords, "(UPPER(ttrss_entries.title) $not LIKE UPPER('%$k%') OR UPPER(ttrss_entries.content) $not LIKE UPPER('%$k%'))"); @@ -2176,7 +2210,7 @@ array_push($query_keywords, "($not (note IS NULL OR note = ''))"); else array_push($query_keywords, "($not (LOWER(note) LIKE '%". - db_escape_string($link, mb_strtolower($commandpair[1]))."%'))"); + db_escape_string(mb_strtolower($commandpair[1]))."%'))"); } else { array_push($query_keywords, "(UPPER(ttrss_entries.title) $not LIKE UPPER('%$k%') OR UPPER(ttrss_entries.content) $not LIKE UPPER('%$k%'))"); @@ -2209,7 +2243,7 @@ default: if (strpos($k, "@") === 0) { - $user_tz_string = get_pref($link, 'USER_TIMEZONE', $_SESSION['uid']); + $user_tz_string = get_pref('USER_TIMEZONE', $_SESSION['uid']); $orig_ts = strtotime(substr($k, 1)); $k = date("Y-m-d", convert_timestamp($orig_ts, $user_tz_string, 'UTC')); @@ -2228,35 +2262,35 @@ return $search_query_part; } - function getParentCategories($link, $cat, $owner_uid) { + function getParentCategories($cat, $owner_uid) { $rv = array(); - $result = db_query($link, "SELECT parent_cat FROM ttrss_feed_categories + $result = db_query("SELECT parent_cat FROM ttrss_feed_categories WHERE id = '$cat' AND parent_cat IS NOT NULL AND owner_uid = $owner_uid"); while ($line = db_fetch_assoc($result)) { array_push($rv, $line["parent_cat"]); - $rv = array_merge($rv, getParentCategories($link, $line["parent_cat"], $owner_uid)); + $rv = array_merge($rv, getParentCategories($line["parent_cat"], $owner_uid)); } return $rv; } - function getChildCategories($link, $cat, $owner_uid) { + function getChildCategories($cat, $owner_uid) { $rv = array(); - $result = db_query($link, "SELECT id FROM ttrss_feed_categories + $result = db_query("SELECT id FROM ttrss_feed_categories WHERE parent_cat = '$cat' AND owner_uid = $owner_uid"); while ($line = db_fetch_assoc($result)) { array_push($rv, $line["id"]); - $rv = array_merge($rv, getChildCategories($link, $line["id"], $owner_uid)); + $rv = array_merge($rv, getChildCategories($line["id"], $owner_uid)); } return $rv; } - function queryFeedHeadlines($link, $feed, $limit, $view_mode, $cat_view, $search, $search_mode, $override_order = false, $offset = 0, $owner_uid = 0, $filter = false, $since_id = 0, $include_children = false, $ignore_vfeed_group = false) { + function queryFeedHeadlines($feed, $limit, $view_mode, $cat_view, $search, $search_mode, $override_order = false, $offset = 0, $owner_uid = 0, $filter = false, $since_id = 0, $include_children = false, $ignore_vfeed_group = false) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; @@ -2273,7 +2307,7 @@ $search_query_part = "ref_id = -1 AND "; } else { - $search_query_part = search_to_sql($link, $search); + $search_query_part = search_to_sql($search); $search_query_part .= " AND "; } @@ -2291,10 +2325,10 @@ $override_order = "updated DESC"; - $filter_query_part = filter_to_sql($link, $filter, $owner_uid); + $filter_query_part = filter_to_sql($filter, $owner_uid); // Try to check if SQL regexp implementation chokes on a valid regexp - $result = db_query($link, "SELECT true AS true_val FROM ttrss_entries, + $result = db_query("SELECT true AS true_val FROM ttrss_entries, ttrss_user_entries, ttrss_feeds, ttrss_feed_categories WHERE $filter_query_part LIMIT 1", false); @@ -2327,10 +2361,10 @@ $view_query_part = " "; } else if ($feed != -1) { - $unread = getFeedUnread($link, $feed, $cat_view); + $unread = getFeedUnread($feed, $cat_view); if ($cat_view && $feed > 0 && $include_children) - $unread += getCategoryChildrenUnread($link, $feed); + $unread += getCategoryChildrenUnread($feed); if ($unread > 0) $view_query_part = " unread = true AND "; @@ -2376,7 +2410,7 @@ if ($feed > 0) { if ($include_children) { - $subcats = getChildCategories($link, $feed, $owner_uid); + $subcats = getChildCategories($feed, $owner_uid); array_push($subcats, $feed); $cats_qpart = join(",", $subcats); } else { @@ -2396,7 +2430,7 @@ if ($feed > 0) { if ($include_children) { # sub-cats - $subcats = getChildCategories($link, $feed, $owner_uid); + $subcats = getChildCategories($feed, $owner_uid); array_push($subcats, $feed); $query_strategy_part = "cat_id IN (". @@ -2459,7 +2493,7 @@ } else if ($feed == -3) { // fresh virtual feed $query_strategy_part = "unread = true AND score >= 0"; - $intl = get_pref($link, "FRESH_ARTICLE_MAX_AGE", $owner_uid); + $intl = get_pref("FRESH_ARTICLE_MAX_AGE", $owner_uid); if (DB_TYPE == "pgsql") { $query_strategy_part .= " AND date_entered > NOW() - INTERVAL '$intl hour' "; @@ -2503,17 +2537,18 @@ $feed_title = T_sprintf("Search results: %s", $search); } else { if ($cat_view) { - $feed_title = getCategoryTitle($link, $feed); + $feed_title = getCategoryTitle($feed); } else { if (is_numeric($feed) && $feed > 0) { - $result = db_query($link, "SELECT title,site_url,last_error + $result = db_query("SELECT title,site_url,last_error,last_updated FROM ttrss_feeds WHERE id = '$feed' AND owner_uid = $owner_uid"); $feed_title = db_fetch_result($result, 0, "title"); $feed_site_url = db_fetch_result($result, 0, "site_url"); $last_error = db_fetch_result($result, 0, "last_error"); + $last_updated = db_fetch_result($result, 0, "last_updated"); } else { - $feed_title = getFeedTitle($link, $feed); + $feed_title = getFeedTitle($feed); } } } @@ -2533,7 +2568,7 @@ } // proper override_order applied above - if ($vfeed_query_part && !$ignore_vfeed_group && get_pref($link, 'VFEED_GROUP_BY_FEED', $owner_uid)) { + if ($vfeed_query_part && !$ignore_vfeed_group && get_pref('VFEED_GROUP_BY_FEED', $owner_uid)) { if (!$override_order) { $order_by = "ttrss_feeds.title, $order_by"; } else { @@ -2550,6 +2585,9 @@ LEFT JOIN ttrss_feeds ON (feed_id = ttrss_feeds.id)"; } + if ($vfeed_query_part) + $vfeed_query_part .= "favicon_avg_color,"; + $query = "SELECT DISTINCT date_entered, guid, @@ -2584,7 +2622,7 @@ if ($_REQUEST["debug"]) print $query; - $result = db_query($link, $query); + $result = db_query($query); } else { // browsing by tag @@ -2653,14 +2691,14 @@ // $tag_sql = "tag_name = '$feed'"; DEFAULT way // error_log("[". $select_qpart . "][" . $from_qpart . "][" .$where_qpart . "]"); - $result = db_query($link, $select_qpart . $from_qpart . $where_qpart); + $result = db_query($select_qpart . $from_qpart . $where_qpart); } - return array($result, $feed_title, $feed_site_url, $last_error); + return array($result, $feed_title, $feed_site_url, $last_error, $last_updated); } - function sanitize($link, $str, $force_remove_images = false, $owner = false, $site_url = false) { + function sanitize($str, $force_remove_images = false, $owner = false, $site_url = false) { if (!$owner) $owner = $_SESSION["uid"]; $res = trim($str); if (!$res) return ''; @@ -2703,7 +2741,7 @@ } if ($entry->nodeName == 'img') { - if (($owner && get_pref($link, "STRIP_IMAGES", $owner)) || + if (($owner && get_pref("STRIP_IMAGES", $owner)) || $force_remove_images || $_SESSION["bw_limit"]) { $p = $doc->createElement('p'); @@ -2748,18 +2786,14 @@ $disallowed_attributes = array('id', 'style', 'class'); - global $pluginhost; - - if (isset($pluginhost)) { - foreach ($pluginhost->get_hooks($pluginhost::HOOK_SANITIZE) as $plugin) { - $retval = $plugin->hook_sanitize($doc, $site_url, $allowed_elements, $disallowed_attributes); - if (is_array($retval)) { - $doc = $retval[0]; - $allowed_elements = $retval[1]; - $disallowed_attributes = $retval[2]; - } else { - $doc = $retval; - } + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SANITIZE) as $plugin) { + $retval = $plugin->hook_sanitize($doc, $site_url, $allowed_elements, $disallowed_attributes); + if (is_array($retval)) { + $doc = $retval[0]; + $allowed_elements = $retval[1]; + $disallowed_attributes = $retval[2]; + } else { + $doc = $retval; } } @@ -2770,7 +2804,8 @@ } function strip_harmful_tags($doc, $allowed_elements, $disallowed_attributes) { - $entries = $doc->getElementsByTagName("*"); + $xpath = new DOMXPath($doc); + $entries = $xpath->query('//*'); foreach ($entries as $entry) { if (!in_array($entry->nodeName, $allowed_elements)) { @@ -2800,7 +2835,7 @@ return $doc; } - function check_for_update($link) { + function check_for_update() { if (CHECK_FOR_NEW_VERSION && $_SESSION['access_level'] >= 10) { $version_url = "http://tt-rss.org/version.php?ver=" . VERSION . "&iid=" . sha1(SELF_URL_PATH); @@ -2820,7 +2855,7 @@ return false; } - function catchupArticlesById($link, $ids, $cmode, $owner_uid = false) { + function catchupArticlesById($ids, $cmode, $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; if (count($ids) == 0) return; @@ -2834,32 +2869,32 @@ $ids_qpart = join(" OR ", $tmp_ids); if ($cmode == 0) { - db_query($link, "UPDATE ttrss_user_entries SET + db_query("UPDATE ttrss_user_entries SET unread = false,last_read = NOW() WHERE ($ids_qpart) AND owner_uid = $owner_uid"); } else if ($cmode == 1) { - db_query($link, "UPDATE ttrss_user_entries SET + db_query("UPDATE ttrss_user_entries SET unread = true WHERE ($ids_qpart) AND owner_uid = $owner_uid"); } else { - db_query($link, "UPDATE ttrss_user_entries SET + db_query("UPDATE ttrss_user_entries SET unread = NOT unread,last_read = NOW() WHERE ($ids_qpart) AND owner_uid = $owner_uid"); } /* update ccache */ - $result = db_query($link, "SELECT DISTINCT feed_id FROM ttrss_user_entries + $result = db_query("SELECT DISTINCT feed_id FROM ttrss_user_entries WHERE ($ids_qpart) AND owner_uid = $owner_uid"); while ($line = db_fetch_assoc($result)) { - ccache_update($link, $line["feed_id"], $owner_uid); + ccache_update($line["feed_id"], $owner_uid); } } - function get_article_tags($link, $id, $owner_uid = 0, $tag_cache = false) { + function get_article_tags($id, $owner_uid = 0, $tag_cache = false) { - $a_id = db_escape_string($link, $id); + $a_id = db_escape_string($id); if (!$owner_uid) $owner_uid = $_SESSION["uid"]; @@ -2868,13 +2903,12 @@ ttrss_tags WHERE post_int_id = (SELECT int_id FROM ttrss_user_entries WHERE ref_id = '$a_id' AND owner_uid = '$owner_uid' LIMIT 1) ORDER BY tag_name"; - $obj_id = md5("TAGS:$owner_uid:$id"); $tags = array(); /* check cache first */ if ($tag_cache === false) { - $result = db_query($link, "SELECT tag_cache FROM ttrss_user_entries + $result = db_query("SELECT tag_cache FROM ttrss_user_entries WHERE ref_id = '$id' AND owner_uid = $owner_uid"); $tag_cache = db_fetch_result($result, 0, "tag_cache"); @@ -2886,7 +2920,7 @@ /* do it the hard way */ - $tmp_result = db_query($link, $query); + $tmp_result = db_query($query); while ($tmp_line = db_fetch_assoc($tmp_result)) { array_push($tags, $tmp_line["tag_name"]); @@ -2894,9 +2928,9 @@ /* update the cache */ - $tags_str = db_escape_string($link, join(",", $tags)); + $tags_str = db_escape_string(join(",", $tags)); - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET tag_cache = '$tags_str' WHERE ref_id = '$id' AND owner_uid = $owner_uid"); } @@ -2924,36 +2958,29 @@ return true; } - function render_login_form($link) { + function render_login_form() { + header('Cache-Control: public'); + require_once "login_form.php"; exit; } - // from http://developer.apple.com/internet/safari/faq.html - function no_cache_incantation() { - header("Expires: Mon, 22 Dec 1980 00:00:00 GMT"); // Happy birthday to me :) - header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified - header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); // HTTP/1.1 - header("Cache-Control: post-check=0, pre-check=0", false); - header("Pragma: no-cache"); // HTTP/1.0 - } - function format_warning($msg, $id = "") { global $link; return "<div class=\"warning\" id=\"$id\"> - <img src=\"images/sign_excl.svg\"><div class='inner'>$msg</div></div>"; + <span><img src=\"images/sign_excl.svg\"></span><span>$msg</span></div>"; } function format_notice($msg, $id = "") { global $link; return "<div class=\"notice\" id=\"$id\"> - <img src=\"images/sign_info.svg\"><div class='inner'>$msg</div></div>"; + <span><img src=\"images/sign_info.svg\"></span><span>$msg</span></div>"; } function format_error($msg, $id = "") { global $link; return "<div class=\"error\" id=\"$id\"> - <img src=\"images/sign_excl.svg\"><div class='inner'>$msg</div></div>"; + <span><img src=\"images/sign_excl.svg\"></span><span>$msg</span></div>"; } function print_notice($msg) { @@ -2974,7 +3001,7 @@ return vsprintf(__(array_shift($args)), $args); } - function format_inline_player($link, $url, $ctype) { + function format_inline_player($url, $ctype) { $entry = ""; @@ -2983,19 +3010,12 @@ if (strpos($ctype, "audio/") === 0) { if ($_SESSION["hasAudio"] && (strpos($ctype, "ogg") !== false || - strpos($_SERVER['HTTP_USER_AGENT'], "Chrome") !== false || - strpos($_SERVER['HTTP_USER_AGENT'], "Safari") !== false )) { - - $id = 'AUDIO-' . uniqid(); + $_SESSION["hasMp3"])) { - $entry .= "<audio id=\"$id\"\" controls style='display : none'> + $entry .= "<audio controls> <source type=\"$ctype\" src=\"$url\"></source> </audio>"; - $entry .= "<span onclick=\"player(this)\" - title=\"".__("Click to play")."\" status=\"0\" - class=\"player\" audio-id=\"$id\">".__("Play")."</span>"; - } else { $entry .= "<object type=\"application/x-shockwave-flash\" @@ -3022,7 +3042,7 @@ } - function format_article($link, $id, $mark_as_read = true, $zoom_mode = false, $owner_uid = false) { + function format_article($id, $mark_as_read = true, $zoom_mode = false, $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; $rv = array(); @@ -3030,9 +3050,9 @@ $rv['id'] = $id; /* we can figure out feed_id from article id anyway, why do we - * pass feed_id here? let's ignore the argument :( */ + * pass feed_id here? let's ignore the argument :(*/ - $result = db_query($link, "SELECT feed_id FROM ttrss_user_entries + $result = db_query("SELECT feed_id FROM ttrss_user_entries WHERE ref_id = '$id'"); $feed_id = (int) db_fetch_result($result, 0, "feed_id"); @@ -3042,14 +3062,14 @@ //if (!$zoom_mode) { print "<article id='$id'><![CDATA["; }; if ($mark_as_read) { - $result = db_query($link, "UPDATE ttrss_user_entries + $result = db_query("UPDATE ttrss_user_entries SET unread = false,last_read = NOW() WHERE ref_id = '$id' AND owner_uid = $owner_uid"); - ccache_update($link, $feed_id, $owner_uid); + ccache_update($feed_id, $owner_uid); } - $result = db_query($link, "SELECT id,title,link,content,feed_id,comments,int_id, + $result = db_query("SELECT id,title,link,content,feed_id,comments,int_id, ".SUBSTRING_FOR_DATE."(updated,1,16) as updated, (SELECT site_url FROM ttrss_feeds WHERE id = feed_id) as site_url, (SELECT hide_images FROM ttrss_feeds WHERE id = feed_id) as hide_images, @@ -3069,14 +3089,12 @@ $tag_cache = $line["tag_cache"]; - $line["tags"] = get_article_tags($link, $id, $owner_uid, $line["tag_cache"]); + $line["tags"] = get_article_tags($id, $owner_uid, $line["tag_cache"]); unset($line["tag_cache"]); - $line["content"] = sanitize($link, $line["content"], false, $owner_uid, $line["site_url"]); + $line["content"] = sanitize($line["content"], false, $owner_uid, $line["site_url"]); - global $pluginhost; - - foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE) as $p) { $line = $p->hook_render_article($line); } @@ -3115,7 +3133,7 @@ $entry_author = __(" - ") . $entry_author; } - $parsed_updated = make_local_datetime($link, $line["updated"], true, + $parsed_updated = make_local_datetime($line["updated"], true, $owner_uid, true); $rv['content'] .= "<div class=\"postDate\">$parsed_updated</div>"; @@ -3151,8 +3169,7 @@ id=\"ATSTRTIP-$id\" connectId=\"ATSTR-$id\" position=\"below\">$tags_str_full</div>"; - global $pluginhost; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_BUTTON) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) { $rv['content'] .= $p->hook_article_button($line); } @@ -3163,8 +3180,7 @@ $rv['content'] .= "</div>"; $rv['content'] .= "<div clear='both'>"; - global $pluginhost; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_LEFT_BUTTON) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) { $rv['content'] .= $p->hook_article_left_button($line); } @@ -3172,7 +3188,7 @@ if ($line["orig_feed_id"]) { - $tmp_result = db_query($link, "SELECT * FROM ttrss_archived_feeds + $tmp_result = db_query("SELECT * FROM ttrss_archived_feeds WHERE id = ".$line["orig_feed_id"]); if (db_num_rows($tmp_result) != 0) { @@ -3208,7 +3224,7 @@ $rv['content'] .= "<div class=\"postContent\">"; $rv['content'] .= $line["content"]; - $rv['content'] .= format_article_enclosures($link, $id, + $rv['content'] .= format_article_enclosures($id, sql_bool_to_bool($line["always_display_enclosures"]), $line["content"], sql_bool_to_bool($line["hide_images"])); @@ -3233,7 +3249,7 @@ function print_checkpoint($n, $s) { $ts = microtime(true); - echo sprintf("<!-- CP[$n] %.4f seconds -->", $ts - $s); + echo sprintf("<!-- CP[$n] %.4f seconds -->\n", $ts - $s); return $ts; } @@ -3282,22 +3298,22 @@ } } // function encrypt_password - function load_filters($link, $feed_id, $owner_uid, $action_id = false) { + function load_filters($feed_id, $owner_uid, $action_id = false) { $filters = array(); - $cat_id = (int)getFeedCategory($link, $feed_id); + $cat_id = (int)getFeedCategory($feed_id); - $result = db_query($link, "SELECT * FROM ttrss_filters2 WHERE + $result = db_query("SELECT * FROM ttrss_filters2 WHERE owner_uid = $owner_uid AND enabled = true ORDER BY order_id, title"); $check_cats = join(",", array_merge( - getParentCategories($link, $cat_id, $owner_uid), + getParentCategories($cat_id, $owner_uid), array($cat_id))); while ($line = db_fetch_assoc($result)) { $filter_id = $line["id"]; - $result2 = db_query($link, "SELECT + $result2 = db_query("SELECT r.reg_exp, r.inverse, r.feed_id, r.cat_id, r.cat_filter, t.name AS type_name FROM ttrss_filters2_rules AS r, ttrss_filter_types AS t @@ -3320,7 +3336,7 @@ array_push($rules, $rule); } - $result2 = db_query($link, "SELECT a.action_param,t.name AS type_name + $result2 = db_query("SELECT a.action_param,t.name AS type_name FROM ttrss_filters2_actions AS a, ttrss_filter_actions AS t WHERE @@ -3369,80 +3385,35 @@ return is_file(ICONS_DIR . "/$id.ico") && filesize(ICONS_DIR . "/$id.ico") > 0; } - function init_connection($link) { - if ($link) { - - if (DB_TYPE == "pgsql") { - pg_query($link, "set client_encoding = 'UTF-8'"); - pg_set_client_encoding("UNICODE"); - pg_query($link, "set datestyle = 'ISO, european'"); - pg_query($link, "set TIME ZONE 0"); - } else { - db_query($link, "SET time_zone = '+0:0'"); + function init_plugins() { + PluginHost::getInstance()->load(PLUGINS, PluginHost::KIND_ALL); - if (defined('MYSQL_CHARSET') && MYSQL_CHARSET) { - db_query($link, "SET NAMES " . MYSQL_CHARSET); - } - } - - global $pluginhost; - - $pluginhost = new PluginHost($link); - $pluginhost->load(PLUGINS, $pluginhost::KIND_ALL); - - return true; - } else { - print "Unable to connect to database:" . db_last_error(); - return false; - } + return true; } function format_tags_string($tags, $id) { + if (!is_array($tags) || count($tags) == 0) { + return __("no tags"); + } else { + $maxtags = min(5, count($tags)); - $tags_str = ""; - $tags_nolinks_str = ""; - - $num_tags = 0; - - $tag_limit = 6; - - $formatted_tags = array(); - - foreach ($tags as $tag) { - $num_tags++; - $tag_escaped = str_replace("'", "\\'", $tag); - - if (mb_strlen($tag) > 30) { - $tag = truncate_string($tag, 30); - } - - $tag_str = "<a href=\"javascript:viewfeed('$tag_escaped')\">$tag</a>"; - - array_push($formatted_tags, $tag_str); - - $tmp_tags_str = implode(", ", $formatted_tags); - - if ($num_tags == $tag_limit || mb_strlen($tmp_tags_str) > 150) { - break; + for ($i = 0; $i < $maxtags; $i++) { + $tags_str .= "<a href=\"#\" onclick=\"viewfeed('".$tags[$i]."'\")>" . $tags[$i] . "</a>, "; } - } - $tags_str = implode(", ", $formatted_tags); + $tags_str = mb_substr($tags_str, 0, mb_strlen($tags_str)-2); - if ($num_tags < count($tags)) { - $tags_str .= ", …"; - } + if (count($tags) > $maxtags) + $tags_str .= ", …"; - if ($num_tags == 0) { - $tags_str = __("no tags"); + return $tags_str; } - - return $tags_str; - } function format_article_labels($labels, $id) { + if (!is_array($labels)) return ''; + $labels_str = ""; foreach ($labels as $l) { @@ -3465,7 +3436,7 @@ } - function get_feed_category($link, $feed_cat, $parent_cat_id = false) { + function get_feed_category($feed_cat, $parent_cat_id = false) { if ($parent_cat_id) { $parent_qpart = "parent_cat = '$parent_cat_id'"; $parent_insert = "'$parent_cat_id'"; @@ -3474,7 +3445,7 @@ $parent_insert = "NULL"; } - $result = db_query($link, + $result = db_query( "SELECT id FROM ttrss_feed_categories WHERE $parent_qpart AND title = '$feed_cat' AND owner_uid = ".$_SESSION["uid"]); @@ -3485,11 +3456,11 @@ } } - function add_feed_category($link, $feed_cat, $parent_cat_id = false) { + function add_feed_category($feed_cat, $parent_cat_id = false) { if (!$feed_cat) return false; - db_query($link, "BEGIN"); + db_query("BEGIN"); if ($parent_cat_id) { $parent_qpart = "parent_cat = '$parent_cat_id'"; @@ -3501,17 +3472,17 @@ $feed_cat = mb_substr($feed_cat, 0, 250); - $result = db_query($link, + $result = db_query( "SELECT id FROM ttrss_feed_categories WHERE $parent_qpart AND title = '$feed_cat' AND owner_uid = ".$_SESSION["uid"]); if (db_num_rows($result) == 0) { - $result = db_query($link, + $result = db_query( "INSERT INTO ttrss_feed_categories (owner_uid,title,parent_cat) VALUES ('".$_SESSION["uid"]."', '$feed_cat', $parent_insert)"); - db_query($link, "COMMIT"); + db_query("COMMIT"); return true; } @@ -3519,8 +3490,8 @@ return false; } - function getArticleFeed($link, $id) { - $result = db_query($link, "SELECT feed_id FROM ttrss_user_entries + function getArticleFeed($id) { + $result = db_query("SELECT feed_id FROM ttrss_user_entries WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); if (db_num_rows($result) != 0) { @@ -3565,14 +3536,14 @@ } - function get_article_enclosures($link, $id) { + function get_article_enclosures($id) { $query = "SELECT * FROM ttrss_enclosures WHERE post_id = '$id' AND content_url != ''"; $rv = array(); - $result = db_query($link, $query); + $result = db_query($query); if (db_num_rows($result) > 0) { while ($line = db_fetch_assoc($result)) { @@ -3583,7 +3554,7 @@ return $rv; } - function save_email_address($link, $email) { + function save_email_address($email) { // FIXME: implement persistent storage of emails if (!$_SESSION['stored_emails']) @@ -3594,22 +3565,22 @@ } - function get_feed_access_key($link, $feed_id, $is_cat, $owner_uid = false) { + function get_feed_access_key($feed_id, $is_cat, $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; $sql_is_cat = bool_to_sql_bool($is_cat); - $result = db_query($link, "SELECT access_key FROM ttrss_access_keys + $result = db_query("SELECT access_key FROM ttrss_access_keys WHERE feed_id = '$feed_id' AND is_cat = $sql_is_cat AND owner_uid = " . $owner_uid); if (db_num_rows($result) == 1) { return db_fetch_result($result, 0, "access_key"); } else { - $key = db_escape_string($link, sha1(uniqid(rand(), true))); + $key = db_escape_string(sha1(uniqid(rand(), true))); - $result = db_query($link, "INSERT INTO ttrss_access_keys + $result = db_query("INSERT INTO ttrss_access_keys (access_key, feed_id, is_cat, owner_uid) VALUES ('$key', '$feed_id', $sql_is_cat, '$owner_uid')"); @@ -3653,9 +3624,9 @@ return is_html(fetch_file_contents($url, false, $login, $pass)); } - function print_label_select($link, $name, $value, $attributes = "") { + function print_label_select($name, $value, $attributes = "") { - $result = db_query($link, "SELECT caption FROM ttrss_labels2 + $result = db_query("SELECT caption FROM ttrss_labels2 WHERE owner_uid = '".$_SESSION["uid"]."' ORDER BY caption"); print "<select default=\"$value\" name=\"" . htmlspecialchars($name) . @@ -3677,10 +3648,10 @@ } - function format_article_enclosures($link, $id, $always_display_enclosures, + function format_article_enclosures($id, $always_display_enclosures, $article_content, $hide_images = false) { - $result = get_article_enclosures($link, $id); + $result = get_article_enclosures($id); $rv = ''; if (count($result) > 0) { @@ -3698,7 +3669,7 @@ $filename = substr($url, strrpos($url, "/")+1); - $player = format_inline_player($link, $url, $ctype); + $player = format_inline_player($url, $ctype); if ($player) array_push($entries_inline, $player); @@ -3719,7 +3690,7 @@ array_push($entries, $entry); } - if ($_SESSION['uid'] && !get_pref($link, "STRIP_IMAGES") && !$_SESSION["bw_limit"]) { + if ($_SESSION['uid'] && !get_pref("STRIP_IMAGES") && !$_SESSION["bw_limit"]) { if ($always_display_enclosures || !preg_match("/<img/i", $article_content)) { @@ -3763,8 +3734,8 @@ return $rv; } - function getLastArticleId($link) { - $result = db_query($link, "SELECT MAX(ref_id) AS id FROM ttrss_user_entries + function getLastArticleId() { + $result = db_query("SELECT MAX(ref_id) AS id FROM ttrss_user_entries WHERE owner_uid = " . $_SESSION["uid"]); if (db_num_rows($result) == 1) { @@ -3822,7 +3793,9 @@ $sphinxClient = new SphinxClient(); - $sphinxClient->SetServer('localhost', 9312); + $sphinxpair = explode(":", SPHINX_SERVER, 2); + + $sphinxClient->SetServer($sphinxpair[0], $sphinxpair[1]); $sphinxClient->SetConnectTimeout(1); $sphinxClient->SetFieldWeights(array('title' => 70, 'content' => 30, @@ -3848,7 +3821,7 @@ return $ids; } - function cleanup_tags($link, $days = 14, $limit = 1000) { + function cleanup_tags($days = 14, $limit = 1000) { if (DB_TYPE == "pgsql") { $interval_query = "date_updated < NOW() - INTERVAL '$days days'"; @@ -3866,7 +3839,7 @@ WHERE post_int_id = int_id AND $interval_query AND ref_id = ttrss_entries.id AND tag_cache != '' LIMIT $limit_part"; - $result = db_query($link, $query); + $result = db_query($query); $ids = array(); @@ -3877,8 +3850,8 @@ if (count($ids) > 0) { $ids = join(",", $ids); - $tmp_result = db_query($link, "DELETE FROM ttrss_tags WHERE id IN ($ids)"); - $tags_deleted += db_affected_rows($link, $tmp_result); + $tmp_result = db_query("DELETE FROM ttrss_tags WHERE id IN ($ids)"); + $tags_deleted += db_affected_rows($tmp_result); } else { break; } @@ -3889,8 +3862,8 @@ return $tags_deleted; } - function print_user_stylesheet($link) { - $value = get_pref($link, 'USER_STYLESHEET'); + function print_user_stylesheet() { + $value = get_pref('USER_STYLESHEET'); if ($value) { print "<style type=\"text/css\">"; @@ -3946,7 +3919,7 @@ return $html; } - function filter_to_sql($link, $filter, $owner_uid) { + function filter_to_sql($filter, $owner_uid) { $query = array(); if (DB_TYPE == "pgsql") @@ -3960,7 +3933,7 @@ if ($regexp_valid) { - $rule['reg_exp'] = db_escape_string($link, $rule['reg_exp']); + $rule['reg_exp'] = db_escape_string($rule['reg_exp']); switch ($rule["type"]) { case "title": @@ -3993,13 +3966,13 @@ if (isset($rule['inverse'])) $qpart = "NOT ($qpart)"; if (isset($rule["feed_id"]) && $rule["feed_id"] > 0) { - $qpart .= " AND feed_id = " . db_escape_string($link, $rule["feed_id"]); + $qpart .= " AND feed_id = " . db_escape_string($rule["feed_id"]); } if (isset($rule["cat_id"])) { if ($rule["cat_id"] > 0) { - $children = getChildCategories($link, $rule["cat_id"], $owner_uid); + $children = getChildCategories($rule["cat_id"], $owner_uid); array_push($children, $rule["cat_id"]); $children = join(",", $children); @@ -4073,8 +4046,8 @@ return $tempname; } - function getFeedCategory($link, $feed) { - $result = db_query($link, "SELECT cat_id FROM ttrss_feeds + function getFeedCategory($feed) { + $result = db_query("SELECT cat_id FROM ttrss_feeds WHERE id = '$feed'"); if (db_num_rows($result) > 0) { @@ -4091,7 +4064,8 @@ function geturl($url){ - (function_exists('curl_init')) ? '' : die('cURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini'); + if (!function_exists('curl_init')) + return user_error('CURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini', E_USER_ERROR); $curl = curl_init(); $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; @@ -4126,7 +4100,7 @@ preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches); $url = trim(str_replace($matches[1],"",$matches[0])); $url_parsed = parse_url($url); - return (isset($url_parsed))? geturl($url, $referer):''; + return (isset($url_parsed))? geturl($url):''; } $oline=''; foreach($status as $key=>$eline){$oline.='['.$key.']'.$eline.' ';} @@ -4245,4 +4219,10 @@ return LABEL_BASE_INDEX - 1 + abs($feed); } + function format_libxml_error($error) { + return T_sprintf("LibXML error %s at line %d (column %d): %s", + $error->code, $error->line, $error->column, + $error->message); + } + ?> diff --git a/include/labels.php b/include/labels.php index 655b51555..c2a48a338 100644 --- a/include/labels.php +++ b/include/labels.php @@ -1,6 +1,6 @@ <?php - function label_find_id($link, $label, $owner_uid) { - $result = db_query($link, + function label_find_id($label, $owner_uid) { + $result = db_query( "SELECT id FROM ttrss_labels2 WHERE caption = '$label' AND owner_uid = '$owner_uid' LIMIT 1"); @@ -11,12 +11,12 @@ } } - function get_article_labels($link, $id, $owner_uid = false) { + function get_article_labels($id, $owner_uid = false) { $rv = array(); if (!$owner_uid) $owner_uid = $_SESSION["uid"]; - $result = db_query($link, "SELECT label_cache FROM + $result = db_query("SELECT label_cache FROM ttrss_user_entries WHERE ref_id = '$id' AND owner_uid = " . $owner_uid); @@ -33,7 +33,7 @@ } } - $result = db_query($link, + $result = db_query( "SELECT DISTINCT label_id,caption,fg_color,bg_color FROM ttrss_labels2, ttrss_user_labels2 WHERE id = label_id @@ -48,16 +48,16 @@ } if (count($rv) > 0) - label_update_cache($link, $owner_uid, $id, $rv); + label_update_cache($owner_uid, $id, $rv); else - label_update_cache($link, $owner_uid, $id, array("no-labels" => 1)); + label_update_cache($owner_uid, $id, array("no-labels" => 1)); return $rv; } - function label_find_caption($link, $label, $owner_uid) { - $result = db_query($link, + function label_find_caption($label, $owner_uid) { + $result = db_query( "SELECT caption FROM ttrss_labels2 WHERE id = '$label' AND owner_uid = '$owner_uid' LIMIT 1"); @@ -68,10 +68,10 @@ } } - function get_all_labels($link, $owner_uid) { + function get_all_labels($owner_uid) { $rv = array(); - $result = db_query($link, "SELECT fg_color, bg_color, caption FROM ttrss_labels2 WHERE owner_uid = " . $owner_uid); + $result = db_query("SELECT fg_color, bg_color, caption FROM ttrss_labels2 WHERE owner_uid = " . $owner_uid); while ($line = db_fetch_assoc($result)) { array_push($rv, $line); @@ -80,50 +80,50 @@ return $rv; } - function label_update_cache($link, $owner_uid, $id, $labels = false, $force = false) { + function label_update_cache($owner_uid, $id, $labels = false, $force = false) { if ($force) - label_clear_cache($link, $id); + label_clear_cache($id); if (!$labels) - $labels = get_article_labels($link, $id); + $labels = get_article_labels($id); - $labels = db_escape_string($link, json_encode($labels)); + $labels = db_escape_string(json_encode($labels)); - db_query($link, "UPDATE ttrss_user_entries SET + db_query("UPDATE ttrss_user_entries SET label_cache = '$labels' WHERE ref_id = '$id' AND owner_uid = '$owner_uid'"); } - function label_clear_cache($link, $id) { + function label_clear_cache($id) { - db_query($link, "UPDATE ttrss_user_entries SET + db_query("UPDATE ttrss_user_entries SET label_cache = '' WHERE ref_id = '$id'"); } - function label_remove_article($link, $id, $label, $owner_uid) { + function label_remove_article($id, $label, $owner_uid) { - $label_id = label_find_id($link, $label, $owner_uid); + $label_id = label_find_id($label, $owner_uid); if (!$label_id) return; - $result = db_query($link, + $result = db_query( "DELETE FROM ttrss_user_labels2 WHERE label_id = '$label_id' AND article_id = '$id'"); - label_clear_cache($link, $id); + label_clear_cache($id); } - function label_add_article($link, $id, $label, $owner_uid) { + function label_add_article($id, $label, $owner_uid) { - $label_id = label_find_id($link, $label, $owner_uid); + $label_id = label_find_id($label, $owner_uid); if (!$label_id) return; - $result = db_query($link, + $result = db_query( "SELECT article_id FROM ttrss_labels2, ttrss_user_labels2 WHERE @@ -133,66 +133,66 @@ LIMIT 1"); if (db_num_rows($result) == 0) { - db_query($link, "INSERT INTO ttrss_user_labels2 + db_query("INSERT INTO ttrss_user_labels2 (label_id, article_id) VALUES ('$label_id', '$id')"); } - label_clear_cache($link, $id); + label_clear_cache($id); } - function label_remove($link, $id, $owner_uid) { + function label_remove($id, $owner_uid) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; - db_query($link, "BEGIN"); + db_query("BEGIN"); - $result = db_query($link, "SELECT caption FROM ttrss_labels2 + $result = db_query("SELECT caption FROM ttrss_labels2 WHERE id = '$id'"); $caption = db_fetch_result($result, 0, "caption"); - $result = db_query($link, "DELETE FROM ttrss_labels2 WHERE id = '$id' + $result = db_query("DELETE FROM ttrss_labels2 WHERE id = '$id' AND owner_uid = " . $owner_uid); - if (db_affected_rows($link, $result) != 0 && $caption) { + if (db_affected_rows($result) != 0 && $caption) { /* Remove access key for the label */ $ext_id = LABEL_BASE_INDEX - 1 - $id; - db_query($link, "DELETE FROM ttrss_access_keys WHERE + db_query("DELETE FROM ttrss_access_keys WHERE feed_id = '$ext_id' AND owner_uid = $owner_uid"); /* Remove cached data */ - db_query($link, "UPDATE ttrss_user_entries SET label_cache = '' + db_query("UPDATE ttrss_user_entries SET label_cache = '' WHERE label_cache LIKE '%$caption%' AND owner_uid = " . $owner_uid); } - db_query($link, "COMMIT"); + db_query("COMMIT"); } - function label_create($link, $caption, $fg_color = '', $bg_color = '', $owner_uid = false) { + function label_create($caption, $fg_color = '', $bg_color = '', $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION['uid']; - db_query($link, "BEGIN"); + db_query("BEGIN"); $result = false; - $result = db_query($link, "SELECT id FROM ttrss_labels2 + $result = db_query("SELECT id FROM ttrss_labels2 WHERE caption = '$caption' AND owner_uid = $owner_uid"); if (db_num_rows($result) == 0) { - $result = db_query($link, + $result = db_query( "INSERT INTO ttrss_labels2 (caption,owner_uid,fg_color,bg_color) VALUES ('$caption', '$owner_uid', '$fg_color', '$bg_color')"); - $result = db_affected_rows($link, $result) != 0; + $result = db_affected_rows($result) != 0; } - db_query($link, "COMMIT"); + db_query("COMMIT"); return $result; } diff --git a/include/login_form.php b/include/login_form.php index 7ac7111c8..b7dae1016 100644 --- a/include/login_form.php +++ b/include/login_form.php @@ -188,6 +188,8 @@ function bwLimitChange(elem) { value="<?php echo $_SESSION["fake_login"] ?>" /> </div> + <?php if (strpos(PLUGINS, "auth_internal") !== FALSE) { ?> + <div class="row"> <label><?php echo __("Password:") ?></label> <input type="password" name="password" required="1" @@ -197,13 +199,7 @@ function bwLimitChange(elem) { <a class='forgotpass' href="public.php?op=forgotpass"><?php echo __("I forgot my password") ?></a> </div> - <div class="row"> - <label><?php echo __("Language:") ?></label> - <?php - print_select_hash("language", $_COOKIE["ttrss_lang"], get_translations(), - "style='width : 220px; margin : 0px' dojoType='dijit.form.Select'"); - ?> - </div> + <?php } ?> <div class="row"> <label><?php echo __("Profile:") ?></label> @@ -218,7 +214,11 @@ function bwLimitChange(elem) { <label> </label> <input dojoType="dijit.form.CheckBox" name="bw_limit" id="bw_limit" type="checkbox" onchange="bwLimitChange(this)"> - <label style='display : inline' for="bw_limit"><?php echo __("Use less traffic") ?></label> + <label id="bw_limit_label" style='display : inline' for="bw_limit"><?php echo __("Use less traffic") ?></label> + </div> + + <div dojoType="dijit.Tooltip" connectId="bw_limit_label" position="below"> +<?php echo __("Does not display images in articles, reduces automatic refreshes."); ?> </div> <?php if (SESSION_COOKIE_LIFETIME > 0) { ?> diff --git a/include/rssfuncs.php b/include/rssfuncs.php index 727e42897..d5fc14f79 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -1,34 +1,34 @@ <?php - define('DAEMON_UPDATE_LOGIN_LIMIT', 30); - define('DAEMON_FEED_LIMIT', 100); - define('DAEMON_SLEEP_INTERVAL', 60); + define_default('DAEMON_UPDATE_LOGIN_LIMIT', 30); + define_default('DAEMON_FEED_LIMIT', 500); + define_default('DAEMON_SLEEP_INTERVAL', 120); - function update_feedbrowser_cache($link) { + function update_feedbrowser_cache() { - $result = db_query($link, "SELECT feed_url, site_url, title, COUNT(id) AS subscribers + $result = db_query("SELECT feed_url, site_url, title, COUNT(id) AS subscribers FROM ttrss_feeds WHERE (SELECT COUNT(id) = 0 FROM ttrss_feeds AS tf WHERE tf.feed_url = ttrss_feeds.feed_url AND (private IS true OR auth_login != '' OR auth_pass != '' OR feed_url LIKE '%:%@%/%')) GROUP BY feed_url, site_url, title ORDER BY subscribers DESC LIMIT 1000"); - db_query($link, "BEGIN"); + db_query("BEGIN"); - db_query($link, "DELETE FROM ttrss_feedbrowser_cache"); + db_query("DELETE FROM ttrss_feedbrowser_cache"); $count = 0; while ($line = db_fetch_assoc($result)) { - $subscribers = db_escape_string($link, $line["subscribers"]); - $feed_url = db_escape_string($link, $line["feed_url"]); - $title = db_escape_string($link, $line["title"]); - $site_url = db_escape_string($link, $line["site_url"]); + $subscribers = db_escape_string($line["subscribers"]); + $feed_url = db_escape_string($line["feed_url"]); + $title = db_escape_string($line["title"]); + $site_url = db_escape_string($line["site_url"]); - $tmp_result = db_query($link, "SELECT subscribers FROM + $tmp_result = db_query("SELECT subscribers FROM ttrss_feedbrowser_cache WHERE feed_url = '$feed_url'"); if (db_num_rows($tmp_result) == 0) { - db_query($link, "INSERT INTO ttrss_feedbrowser_cache + db_query("INSERT INTO ttrss_feedbrowser_cache (feed_url, site_url, title, subscribers) VALUES ('$feed_url', '$site_url', '$title', '$subscribers')"); @@ -38,7 +38,7 @@ } - db_query($link, "COMMIT"); + db_query("COMMIT"); return $count; @@ -57,9 +57,15 @@ * @param boolean $debug Set to false to disable debug output. Default to true. * @return void */ - function update_daemon_common($link, $limit = DAEMON_FEED_LIMIT, $from_http = false, $debug = true) { + function update_daemon_common($limit = DAEMON_FEED_LIMIT, $from_http = false, $debug = true) { // Process all other feeds using last_updated and interval parameters + $schema_version = get_schema_version(); + + if ($schema_version != SCHEMA_VERSION) { + die("Schema version is wrong, please upgrade the database.\n"); + } + define('PREFS_NO_CACHE', true); // Test if the user has loggued in recently. If not, it does not update its feeds. @@ -98,19 +104,16 @@ // Test if feed is currently being updated by another process. if (DB_TYPE == "pgsql") { - $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < NOW() - INTERVAL '5 minutes')"; + $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < NOW() - INTERVAL '10 minutes')"; } else { - $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < DATE_SUB(NOW(), INTERVAL 5 MINUTE))"; + $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < DATE_SUB(NOW(), INTERVAL 10 MINUTE))"; } // Test if there is a limit to number of updated feeds $query_limit = ""; if($limit) $query_limit = sprintf("LIMIT %d", $limit); - $random_qpart = sql_random_function(); - - // We search for feed needing update. - $result = db_query($link, "SELECT DISTINCT ttrss_feeds.feed_url,$random_qpart + $query = "SELECT DISTINCT ttrss_feeds.feed_url, ttrss_feeds.last_updated FROM ttrss_feeds, ttrss_users, ttrss_user_prefs WHERE @@ -119,16 +122,17 @@ AND ttrss_user_prefs.pref_name = 'DEFAULT_UPDATE_INTERVAL' $login_thresh_qpart $update_limit_qpart $updstart_thresh_qpart - ORDER BY $random_qpart $query_limit"); + ORDER BY last_updated $query_limit"; - $user_prefs_cache = array(); + // We search for feed needing update. + $result = db_query($query); if($debug) _debug(sprintf("Scheduled %d feeds to update...", db_num_rows($result))); // Here is a little cache magic in order to minimize risk of double feed updates. $feeds_to_update = array(); while ($line = db_fetch_assoc($result)) { - array_push($feeds_to_update, db_escape_string($link, $line['feed_url'])); + array_push($feeds_to_update, db_escape_string($line['feed_url'])); } // We update the feed last update started date before anything else. @@ -139,32 +143,29 @@ $feeds_quoted = array(); foreach ($feeds_to_update as $feed) { - array_push($feeds_quoted, "'" . db_escape_string($link, $feed) . "'"); + array_push($feeds_quoted, "'" . db_escape_string($feed) . "'"); } - db_query($link, sprintf("UPDATE ttrss_feeds SET last_update_started = NOW() + db_query(sprintf("UPDATE ttrss_feeds SET last_update_started = NOW() WHERE feed_url IN (%s)", implode(',', $feeds_quoted))); } - expire_cached_files($debug); - expire_lock_files($debug); - $nf = 0; // For each feed, we call the feed update function. foreach ($feeds_to_update as $feed) { if($debug) _debug("Base feed: $feed"); - //update_rss_feed($link, $line["id"], true); + //update_rss_feed($line["id"], true); // since we have the data cached, we can deal with other feeds with the same url - $tmp_result = db_query($link, "SELECT DISTINCT ttrss_feeds.id,last_updated + $tmp_result = db_query("SELECT DISTINCT ttrss_feeds.id,last_updated,ttrss_feeds.owner_uid FROM ttrss_feeds, ttrss_users, ttrss_user_prefs WHERE ttrss_user_prefs.owner_uid = ttrss_feeds.owner_uid AND ttrss_users.id = ttrss_user_prefs.owner_uid AND ttrss_user_prefs.pref_name = 'DEFAULT_UPDATE_INTERVAL' AND - feed_url = '".db_escape_string($link, $feed)."' AND + feed_url = '".db_escape_string($feed)."' AND (ttrss_feeds.update_interval > 0 OR ttrss_user_prefs.value != '-1') $login_thresh_qpart @@ -172,8 +173,8 @@ if (db_num_rows($tmp_result) > 0) { while ($tline = db_fetch_assoc($tmp_result)) { - if($debug) _debug(" => " . $tline["last_updated"] . ", " . $tline["id"]); - update_rss_feed($link, $tline["id"], true); + if($debug) _debug(" => " . $tline["last_updated"] . ", " . $tline["id"] . " " . $tline["owner_uid"]); + update_rss_feed($tline["id"], true); ++$nf; } } @@ -182,199 +183,200 @@ require_once "digest.php"; // Send feed digests by email if needed. - send_headlines_digests($link, $debug); + send_headlines_digests($debug); return $nf; } // function update_daemon_common // ignore_daemon is not used - function update_rss_feed($link, $feed, $ignore_daemon = false, $no_cache = false, - $override_url = false) { - - require_once "lib/simplepie/simplepie.inc"; + function update_rss_feed($feed, $ignore_daemon = false, $no_cache = false, + $override_url = false, $override_data = false) { $debug_enabled = defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug']; - if ($debug_enabled) { - _debug("update_rss_feed: start"); - } + _debug("start", $debug_enabled); - $result = db_query($link, "SELECT id,update_interval,auth_login, + $result = db_query("SELECT id,update_interval,auth_login, feed_url,auth_pass,cache_images,last_updated, mark_unread_on_update, owner_uid, - pubsub_state + pubsub_state, auth_pass_encrypted, + (SELECT max(date_entered) FROM + ttrss_entries, ttrss_user_entries where ref_id = id AND feed_id = '$feed') AS last_article_timestamp FROM ttrss_feeds WHERE id = '$feed'"); if (db_num_rows($result) == 0) { - if ($debug_enabled) { - _debug("update_rss_feed: feed $feed NOT FOUND/SKIPPED"); - } + _debug("feed $feed NOT FOUND/SKIPPED", $debug_enabled); return false; } $last_updated = db_fetch_result($result, 0, "last_updated"); + $last_article_timestamp = @strtotime(db_fetch_result($result, 0, "last_article_timestamp")); + + if (defined('_DISABLE_HTTP_304')) + $last_article_timestamp = 0; + $owner_uid = db_fetch_result($result, 0, "owner_uid"); $mark_unread_on_update = sql_bool_to_bool(db_fetch_result($result, 0, "mark_unread_on_update")); $pubsub_state = db_fetch_result($result, 0, "pubsub_state"); + $auth_pass_encrypted = sql_bool_to_bool(db_fetch_result($result, + 0, "auth_pass_encrypted")); - db_query($link, "UPDATE ttrss_feeds SET last_update_started = NOW() + db_query("UPDATE ttrss_feeds SET last_update_started = NOW() WHERE id = '$feed'"); $auth_login = db_fetch_result($result, 0, "auth_login"); $auth_pass = db_fetch_result($result, 0, "auth_pass"); + if ($auth_pass_encrypted) { + require_once "crypt.php"; + $auth_pass = decrypt_string($auth_pass); + } + $cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images")); $fetch_url = db_fetch_result($result, 0, "feed_url"); - $feed = db_escape_string($link, $feed); + $feed = db_escape_string($feed); if ($override_url) $fetch_url = $override_url; $date_feed_processed = date('Y-m-d H:i'); - $cache_filename = CACHE_DIR . "/simplepie/" . sha1($fetch_url) . ".feed"; - - // Ignore cache if new feed or manual update. - $cache_age = ($no_cache || is_null($last_updated) || $last_updated == '1970-01-01 00:00:00') ? - 30 : get_feed_update_interval($link, $feed) * 60; - - if ($debug_enabled) { - _debug("update_rss_feed: cache filename: $cache_filename exists: " . file_exists($cache_filename)); - _debug("update_rss_feed: cache age: $cache_age; no cache: $no_cache"); - } - - $cached_feed_data_hash = false; + $cache_filename = CACHE_DIR . "/simplepie/" . sha1($fetch_url) . ".xml"; $rss = false; $rss_hash = false; $cache_timestamp = file_exists($cache_filename) ? filemtime($cache_filename) : 0; - $last_updated_timestamp = strtotime($last_updated); - if (file_exists($cache_filename) && + $force_refetch = isset($_REQUEST["force_refetch"]); + + if ($override_data) { + $feed_data = $override_data; + } + + if (!$feed_data && file_exists($cache_filename) && is_readable($cache_filename) && !$auth_login && !$auth_pass && - filemtime($cache_filename) > time() - $cache_age) { + filemtime($cache_filename) > time() - 30) { - if ($debug_enabled) { - _debug("update_rss_feed: using local cache."); - } + _debug("using local cache.", $debug_enabled); - if ($cache_timestamp > $last_updated_timestamp) { - @$rss_data = file_get_contents($cache_filename); + @$feed_data = file_get_contents($cache_filename); - if ($rss_data) { - $rss_hash = sha1($rss_data); - @$rss = unserialize($rss_data); - } - } else { - if ($debug_enabled) { - _debug("update_rss_feed: local cache valid and older than last_updated, nothing to do."); - } - return; - } + if ($feed_data) { + $rss_hash = sha1($feed_data); + } + + } else { + _debug("local cache will not be used for this feed", $debug_enabled); } - if (!$rss) { + if (!$feed_data) { + _debug("fetching [$fetch_url]...", $debug_enabled); + _debug("If-Modified-Since: ".gmdate('D, d M Y H:i:s \G\M\T', $last_article_timestamp), $debug_enabled); - if (!$feed_data) { - if ($debug_enabled) { - _debug("update_rss_feed: fetching [$fetch_url] (ts: $cache_timestamp/$last_updated_timestamp)"); - } - - $force_refetch = isset($_REQUEST["force_refetch"]); + $feed_data = fetch_file_contents($fetch_url, false, + $auth_login, $auth_pass, false, + $no_cache ? FEED_FETCH_NO_CACHE_TIMEOUT : FEED_FETCH_TIMEOUT, + $force_refetch ? 0 : $last_article_timestamp); - $feed_data = fetch_file_contents($fetch_url, false, - $auth_login, $auth_pass, false, - $no_cache ? FEED_FETCH_NO_CACHE_TIMEOUT : FEED_FETCH_TIMEOUT, - $force_refetch ? 0 : max($last_updated_timestamp, $cache_timestamp)); + global $fetch_curl_used; - if ($debug_enabled) { - _debug("update_rss_feed: fetch done."); - } + if (!$fetch_curl_used) { + $tmp = @gzdecode($feed_data); + if ($tmp) $feed_data = $tmp; } - if (!$feed_data) { - global $fetch_last_error; - global $fetch_last_error_code; + $feed_data = trim($feed_data); - if ($debug_enabled) { - _debug("update_rss_feed: unable to fetch: $fetch_last_error [$fetch_last_error_code]"); - } + _debug("fetch done.", $debug_enabled); - $error_escaped = ''; + if ($feed_data) { + $error = verify_feed_xml($feed_data); - // If-Modified-Since - if ($fetch_last_error_code != 304) { - $error_escaped = db_escape_string($link, $fetch_last_error); - } else { - if ($debug_enabled) { - _debug("update_rss_feed: source claims data not modified, nothing to do."); + if ($error) { + _debug("error verifying XML, code: " . $error->code, $debug_enabled); + + if ($error->code == 26) { + _debug("got error 26, trying to decode entities...", $debug_enabled); + + $feed_data = html_entity_decode($feed_data, ENT_COMPAT, 'UTF-8'); + + $error = verify_feed_xml($feed_data); + + if ($error) $feed_data = ''; } } + } + } - db_query($link, - "UPDATE ttrss_feeds SET last_error = '$error_escaped', - last_updated = NOW() WHERE id = '$feed'"); + if (!$feed_data) { + global $fetch_last_error; + global $fetch_last_error_code; - return; + _debug("unable to fetch: $fetch_last_error [$fetch_last_error_code]", $debug_enabled); + + $error_escaped = ''; + + // If-Modified-Since + if ($fetch_last_error_code != 304) { + $error_escaped = db_escape_string($fetch_last_error); + } else { + _debug("source claims data not modified, nothing to do.", $debug_enabled); } + + db_query( + "UPDATE ttrss_feeds SET last_error = '$error_escaped', + last_updated = NOW() WHERE id = '$feed'"); + + return; } - $pluginhost = new PluginHost($link); + $pluginhost = new PluginHost(); $pluginhost->set_debug($debug_enabled); - $user_plugins = get_pref($link, "_ENABLED_PLUGINS", $owner_uid); + $user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid); - $pluginhost->load(PLUGINS, $pluginhost::KIND_ALL); - $pluginhost->load($user_plugins, $pluginhost::KIND_USER, $owner_uid); + $pluginhost->load(PLUGINS, PluginHost::KIND_ALL); + $pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid); $pluginhost->load_data(); - foreach ($pluginhost->get_hooks($pluginhost::HOOK_FEED_FETCHED) as $plugin) { + foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_FETCHED) as $plugin) { $feed_data = $plugin->hook_feed_fetched($feed_data); } + // set last update to now so if anything *simplepie* crashes later we won't be + // continuously failing on the same feed + //db_query("UPDATE ttrss_feeds SET last_updated = NOW() WHERE id = '$feed'"); + if (!$rss) { - $rss = new SimplePie(); - $rss->set_sanitize_class("SanitizeDummy"); - // simplepie ignores the above and creates default sanitizer anyway, - // so let's override it... - $rss->sanitize = new SanitizeDummy(); - $rss->set_output_encoding('UTF-8'); - $rss->set_raw_data($feed_data); - $rss->enable_cache(false); - - @$rss->init(); + $rss = new FeedParser($feed_data); + $rss->init(); } // print_r($rss); - $feed = db_escape_string($link, $feed); + $feed = db_escape_string($feed); if (!$rss->error()) { // cache data for later if (!$auth_pass && !$auth_login && is_writable(CACHE_DIR . "/simplepie")) { - $rss_data = serialize($rss); $new_rss_hash = sha1($rss_data); - if ($new_rss_hash != $rss_hash) { - if ($debug_enabled) { - _debug("update_rss_feed: saving $cache_filename"); - } - @file_put_contents($cache_filename, serialize($rss)); + if ($new_rss_hash != $rss_hash && count($rss->get_items()) > 0 ) { + _debug("saving $cache_filename", $debug_enabled); + @file_put_contents($cache_filename, $feed_data); } } // We use local pluginhost here because we need to load different per-user feed plugins - $pluginhost->run_hooks($pluginhost::HOOK_FEED_PARSED, "hook_feed_parsed", $rss); + $pluginhost->run_hooks(PluginHost::HOOK_FEED_PARSED, "hook_feed_parsed", $rss); - if ($debug_enabled) { - _debug("update_rss_feed: processing feed data..."); - } + _debug("processing feed data...", $debug_enabled); -// db_query($link, "BEGIN"); +// db_query("BEGIN"); if (DB_TYPE == "pgsql") { $favicon_interval_qpart = "favicon_last_checked < NOW() - INTERVAL '12 hour'"; @@ -382,7 +384,7 @@ $favicon_interval_qpart = "favicon_last_checked < DATE_SUB(NOW(), INTERVAL 12 HOUR)"; } - $result = db_query($link, "SELECT title,site_url,owner_uid, + $result = db_query("SELECT title,site_url,owner_uid,favicon_avg_color, (favicon_last_checked IS NULL OR $favicon_interval_qpart) AS favicon_needs_check FROM ttrss_feeds WHERE id = '$feed'"); @@ -391,59 +393,80 @@ $orig_site_url = db_fetch_result($result, 0, "site_url"); $favicon_needs_check = sql_bool_to_bool(db_fetch_result($result, 0, "favicon_needs_check")); + $favicon_avg_color = db_fetch_result($result, 0, "favicon_avg_color"); $owner_uid = db_fetch_result($result, 0, "owner_uid"); - $site_url = db_escape_string($link, mb_substr(rewrite_relative_url($fetch_url, $rss->get_link()), 0, 245)); + $site_url = db_escape_string(mb_substr(rewrite_relative_url($fetch_url, $rss->get_link()), 0, 245)); - if ($debug_enabled) { - _debug("update_rss_feed: checking favicon..."); - } + _debug("site_url: $site_url", $debug_enabled); + _debug("feed_title: " . $rss->get_title(), $debug_enabled); + + if ($favicon_needs_check || $force_refetch) { + + /* terrible hack: if we crash on floicon shit here, we won't check + * the icon avgcolor again (unless the icon got updated) */ + + $favicon_file = ICONS_DIR . "/$feed.ico"; + $favicon_modified = @filemtime($favicon_file); + + _debug("checking favicon...", $debug_enabled); + + check_feed_favicon($site_url, $feed); + $favicon_modified_new = @filemtime($favicon_file); + + if ($favicon_modified_new > $favicon_modified) + $favicon_avg_color = ''; + + if (file_exists($favicon_file) && function_exists("imagecreatefromstring") && $favicon_avg_color == '') { + require_once "colors.php"; + + db_query("UPDATE ttrss_feeds SET favicon_avg_color = 'fail' WHERE + id = '$feed'"); - if ($favicon_needs_check) { - check_feed_favicon($site_url, $feed, $link); + $favicon_color = db_escape_string( + calculate_avg_color($favicon_file)); - db_query($link, "UPDATE ttrss_feeds SET favicon_last_checked = NOW() + $favicon_colorstring = ",favicon_avg_color = '".$favicon_color."'"; + } else if ($favicon_avg_color == 'fail') { + _debug("floicon failed on this file, not trying to recalculate avg color", $debug_enabled); + } + + db_query("UPDATE ttrss_feeds SET favicon_last_checked = NOW() + $favicon_colorstring WHERE id = '$feed'"); } if (!$registered_title || $registered_title == "[Unknown]") { - $feed_title = db_escape_string($link, $rss->get_title()); + $feed_title = db_escape_string($rss->get_title()); - if ($debug_enabled) { - _debug("update_rss_feed: registering title: $feed_title"); - } + if ($feed_title) { + _debug("registering title: $feed_title", $debug_enabled); - db_query($link, "UPDATE ttrss_feeds SET - title = '$feed_title' WHERE id = '$feed'"); + db_query("UPDATE ttrss_feeds SET + title = '$feed_title' WHERE id = '$feed'"); + } } if ($site_url && $orig_site_url != $site_url) { - db_query($link, "UPDATE ttrss_feeds SET + db_query("UPDATE ttrss_feeds SET site_url = '$site_url' WHERE id = '$feed'"); } - if ($debug_enabled) { - _debug("update_rss_feed: loading filters & labels..."); - } + _debug("loading filters & labels...", $debug_enabled); - $filters = load_filters($link, $feed, $owner_uid); - $labels = get_all_labels($link, $owner_uid); + $filters = load_filters($feed, $owner_uid); + $labels = get_all_labels($owner_uid); - if ($debug_enabled) { - //print_r($filters); - _debug("update_rss_feed: " . count($filters) . " filters loaded."); - } + _debug("" . count($filters) . " filters loaded.", $debug_enabled); $items = $rss->get_items(); if (!is_array($items)) { - if ($debug_enabled) { - _debug("update_rss_feed: no articles found."); - } + _debug("no articles found.", $debug_enabled); - db_query($link, "UPDATE ttrss_feeds + db_query("UPDATE ttrss_feeds SET last_updated = NOW(), last_error = '' WHERE id = '$feed'"); return; // no articles @@ -451,7 +474,7 @@ if ($pubsub_state != 2 && PUBSUBHUBBUB_ENABLED) { - if ($debug_enabled) _debug("update_rss_feed: checking for PUSH hub..."); + _debug("checking for PUSH hub...", $debug_enabled); $feed_hub_url = false; @@ -464,7 +487,7 @@ } } - if ($debug_enabled) _debug("update_rss_feed: feed hub url: $feed_hub_url"); + _debug("feed hub url: $feed_hub_url", $debug_enabled); if ($feed_hub_url && function_exists('curl_init') && !ini_get("open_basedir")) { @@ -478,17 +501,14 @@ $rc = $s->subscribe($fetch_url); - if ($debug_enabled) - _debug("update_rss_feed: feed hub url found, subscribe request sent."); + _debug("feed hub url found, subscribe request sent.", $debug_enabled); - db_query($link, "UPDATE ttrss_feeds SET pubsub_state = 1 + db_query("UPDATE ttrss_feeds SET pubsub_state = 1 WHERE id = '$feed'"); } } - if ($debug_enabled) { - _debug("update_rss_feed: processing articles..."); - } + _debug("processing articles...", $debug_enabled); foreach ($items as $item) { if ($_REQUEST['xdebug'] == 3) { @@ -499,17 +519,21 @@ if (!$entry_guid) $entry_guid = $item->get_link(); if (!$entry_guid) $entry_guid = make_guid_from_title($item->get_title()); - if ($debug_enabled) { - _debug("update_rss_feed: guid $entry_guid"); - } + _debug("f_guid $entry_guid", $debug_enabled); if (!$entry_guid) continue; $entry_guid = "$owner_uid,$entry_guid"; + $entry_guid_hashed = db_escape_string('SHA1:' . sha1($entry_guid)); + + _debug("guid $entry_guid / $entry_guid_hashed", $debug_enabled); + $entry_timestamp = ""; - $entry_timestamp = strtotime($item->get_date()); + $entry_timestamp = $item->get_date(); + + _debug("orig date: " . $item->get_date(), $debug_enabled); if ($entry_timestamp == -1 || !$entry_timestamp || $entry_timestamp > time()) { $entry_timestamp = time(); @@ -520,18 +544,16 @@ $entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp); - if ($debug_enabled) { - _debug("update_rss_feed: date $entry_timestamp [$entry_timestamp_fmt]"); - } + _debug("date $entry_timestamp [$entry_timestamp_fmt]", $debug_enabled); +// $entry_title = html_entity_decode($item->get_title(), ENT_COMPAT, 'UTF-8'); +// $entry_title = decode_numeric_entities($entry_title); $entry_title = $item->get_title(); $entry_link = rewrite_relative_url($site_url, $item->get_link()); - if ($debug_enabled) { - _debug("update_rss_feed: title $entry_title"); - _debug("update_rss_feed: link $entry_link"); - } + _debug("title $entry_title", $debug_enabled); + _debug("link $entry_link", $debug_enabled); if (!$entry_title) $entry_title = date("Y-m-d H:i:s", $entry_timestamp);; @@ -539,38 +561,24 @@ if (!$entry_content) $entry_content = $item->get_description(); if ($_REQUEST["xdebug"] == 2) { - print "update_rss_feed: content: "; + print "content: "; print $entry_content; print "\n"; } - $entry_comments = $item->data["comments"]; + $entry_comments = $item->get_comments_url(); + $entry_author = $item->get_author(); - if ($item->get_author()) { - $entry_author_item = $item->get_author(); - $entry_author = $entry_author_item->get_name(); - if (!$entry_author) $entry_author = $entry_author_item->get_email(); + $entry_guid = db_escape_string(mb_substr($entry_guid, 0, 245)); - $entry_author = db_escape_string($link, $entry_author); - } - - $entry_guid = db_escape_string($link, mb_substr($entry_guid, 0, 245)); - - $entry_comments = db_escape_string($link, mb_substr($entry_comments, 0, 245)); - $entry_author = db_escape_string($link, mb_substr($entry_author, 0, 245)); + $entry_comments = db_escape_string(mb_substr(trim($entry_comments), 0, 245)); + $entry_author = db_escape_string(mb_substr(trim($entry_author), 0, 245)); - $num_comments = $item->get_item_tags('http://purl.org/rss/1.0/modules/slash/', 'comments'); - - if (is_array($num_comments) && is_array($num_comments[0])) { - $num_comments = (int) $num_comments[0]["data"]; - } else { - $num_comments = 0; - } + $num_comments = (int) $item->get_comments_count(); - if ($debug_enabled) { - _debug("update_rss_feed: num_comments: $num_comments"); - _debug("update_rss_feed: looking for tags [1]..."); - } + _debug("author $entry_author", $debug_enabled); + _debug("num_comments: $num_comments", $debug_enabled); + _debug("looking for tags...", $debug_enabled); // parse <category> entries into tags @@ -580,42 +588,26 @@ if (is_array($additional_tags_src)) { foreach ($additional_tags_src as $tobj) { - array_push($additional_tags, $tobj->get_term()); + array_push($additional_tags, $tobj); } } - if ($debug_enabled) { - _debug("update_rss_feed: category tags:"); - print_r($additional_tags); - } - - if ($debug_enabled) { - _debug("update_rss_feed: looking for tags [2]..."); - } - $entry_tags = array_unique($additional_tags); for ($i = 0; $i < count($entry_tags); $i++) $entry_tags[$i] = mb_strtolower($entry_tags[$i], 'utf-8'); - if ($debug_enabled) { - //_debug("update_rss_feed: unfiltered tags found:"); - //print_r($entry_tags); - } + _debug("tags found: " . join(",", $entry_tags), $debug_enabled); - if ($debug_enabled) { - _debug("update_rss_feed: done collecting data."); - } + _debug("done collecting data.", $debug_enabled); // TODO: less memory-hungry implementation - if ($debug_enabled) { - _debug("update_rss_feed: applying plugin filters.."); - } + _debug("applying plugin filters..", $debug_enabled); // FIXME not sure if owner_uid is a good idea here, we may have a base entry without user entry (?) - $result = db_query($link, "SELECT plugin_data,title,content,link,tag_cache,author FROM ttrss_entries, ttrss_user_entries - WHERE ref_id = id AND guid = '".db_escape_string($link, $entry_guid)."' AND owner_uid = $owner_uid"); + $result = db_query("SELECT plugin_data,title,content,link,tag_cache,author FROM ttrss_entries, ttrss_user_entries + WHERE ref_id = id AND (guid = '".db_escape_string($entry_guid)."' OR guid = '$entry_guid_hashed') AND owner_uid = $owner_uid"); if (db_num_rows($result) != 0) { $entry_plugin_data = db_fetch_result($result, 0, "plugin_data"); @@ -639,44 +631,40 @@ "author" => $entry_author, "stored" => $stored_article); - foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_FILTER) as $plugin) { + foreach ($pluginhost->get_hooks(PluginHost::HOOK_ARTICLE_FILTER) as $plugin) { $article = $plugin->hook_article_filter($article); } $entry_tags = $article["tags"]; - $entry_guid = db_escape_string($link, $entry_guid); - $entry_title = db_escape_string($link, $article["title"]); - $entry_author = db_escape_string($link, $article["author"]); - $entry_link = db_escape_string($link, $article["link"]); - $entry_plugin_data = db_escape_string($link, $article["plugin_data"]); + $entry_guid = db_escape_string($entry_guid); + $entry_title = db_escape_string($article["title"]); + $entry_author = db_escape_string($article["author"]); + $entry_link = db_escape_string($article["link"]); + $entry_plugin_data = db_escape_string($article["plugin_data"]); $entry_content = $article["content"]; // escaped below - if ($debug_enabled) { - _debug("update_rss_feed: plugin data: $entry_plugin_data"); - } + _debug("plugin data: $entry_plugin_data", $debug_enabled); if ($cache_images && is_writable(CACHE_DIR . '/images')) cache_images($entry_content, $site_url, $debug_enabled); - $entry_content = db_escape_string($link, $entry_content, false); + $entry_content = db_escape_string($entry_content, false); $content_hash = "SHA1:" . sha1($entry_content); - db_query($link, "BEGIN"); + db_query("BEGIN"); - $result = db_query($link, "SELECT id FROM ttrss_entries - WHERE guid = '$entry_guid'"); + $result = db_query("SELECT id FROM ttrss_entries + WHERE (guid = '$entry_guid' OR guid = '$entry_guid_hashed')"); if (db_num_rows($result) == 0) { - if ($debug_enabled) { - _debug("update_rss_feed: base guid [$entry_guid] not found"); - } + _debug("base guid [$entry_guid] not found", $debug_enabled); // base post entry does not exist, create it - $result = db_query($link, + $result = db_query( "INSERT INTO ttrss_entries (title, guid, @@ -694,7 +682,7 @@ author) VALUES ('$entry_title', - '$entry_guid', + '$entry_guid_hashed', '$entry_link', '$entry_timestamp_fmt', '$entry_content', @@ -718,31 +706,29 @@ $base_entry_id = db_fetch_result($result, 0, "id"); - db_query($link, "UPDATE ttrss_entries SET date_updated = NOW() + db_query("UPDATE ttrss_entries SET date_updated = NOW() WHERE id = '$base_entry_id'"); - $article_labels = get_article_labels($link, $base_entry_id, $owner_uid); + $article_labels = get_article_labels($base_entry_id, $owner_uid); } // now it should exist, if not - bad luck then - $result = db_query($link, "SELECT - id,content_hash,no_orig_date,title,plugin_data, + $result = db_query("SELECT + id,content_hash,no_orig_date,title,plugin_data,guid, ".SUBSTRING_FOR_DATE."(date_updated,1,19) as date_updated, ".SUBSTRING_FOR_DATE."(updated,1,19) as updated, num_comments FROM ttrss_entries - WHERE guid = '$entry_guid'"); + WHERE guid = '$entry_guid' OR guid = '$entry_guid_hashed'"); $entry_ref_id = 0; $entry_int_id = 0; if (db_num_rows($result) == 1) { - if ($debug_enabled) { - _debug("update_rss_feed: base guid [$entry_guid] found, checking for user record"); - } + _debug("base guid found, checking for user record", $debug_enabled); // this will be used below in update handler $orig_content_hash = db_fetch_result($result, 0, "content_hash"); @@ -755,10 +741,18 @@ $ref_id = db_fetch_result($result, 0, "id"); $entry_ref_id = $ref_id; + /* $stored_guid = db_fetch_result($result, 0, "guid"); + if ($stored_guid != $entry_guid_hashed) { + if ($debug_enabled) _debug("upgrading compat guid to hashed one", $debug_enabled); + + db_query("UPDATE ttrss_entries SET guid = '$entry_guid_hashed' WHERE + id = '$ref_id'"); + } */ + // check for user post link to main table // do we allow duplicate posts with same GUID in different feeds? - if (get_pref($link, "ALLOW_DUPLICATE_POSTS", $owner_uid, false)) { + if (get_pref("ALLOW_DUPLICATE_POSTS", $owner_uid, false)) { $dupcheck_qpart = "AND (feed_id = '$feed' OR feed_id IS NULL)"; } else { $dupcheck_qpart = ""; @@ -771,22 +765,20 @@ $entry_tags); if ($debug_enabled) { - _debug("update_rss_feed: article filters: "); + _debug("article filters: ", $debug_enabled); if (count($article_filters) != 0) { print_r($article_filters); } } if (find_article_filter($article_filters, "filter")) { - db_query($link, "COMMIT"); // close transaction in progress + db_query("COMMIT"); // close transaction in progress continue; } $score = calculate_article_score($article_filters); - if ($debug_enabled) { - _debug("update_rss_feed: initial score: $score"); - } + _debug("initial score: $score", $debug_enabled); $query = "SELECT ref_id, int_id FROM ttrss_user_entries WHERE ref_id = '$ref_id' AND owner_uid = '$owner_uid' @@ -794,14 +786,12 @@ // if ($_REQUEST["xdebug"]) print "$query\n"; - $result = db_query($link, $query); + $result = db_query($query); // okay it doesn't exist - create user entry if (db_num_rows($result) == 0) { - if ($debug_enabled) { - _debug("update_rss_feed: user record not found, creating..."); - } + _debug("user record not found, creating...", $debug_enabled); if ($score >= -500 && !find_article_filter($article_filters, 'catchup')) { $unread = 'true'; @@ -827,7 +817,7 @@ if (DB_TYPE == "pgsql" and defined('_NGRAM_TITLE_DUPLICATE_THRESHOLD')) { - $result = db_query($link, "SELECT COUNT(*) AS similar FROM + $result = db_query("SELECT COUNT(*) AS similar FROM ttrss_entries,ttrss_user_entries WHERE ref_id = id AND updated >= NOW() - INTERVAL '7 day' AND similarity(title, '$entry_title') >= "._NGRAM_TITLE_DUPLICATE_THRESHOLD." @@ -835,9 +825,7 @@ $ngram_similar = db_fetch_result($result, 0, "similar"); - if ($debug_enabled) { - _debug("update_rss_feed: N-gram similar results: $ngram_similar"); - } + _debug("N-gram similar results: $ngram_similar", $debug_enabled); if ($ngram_similar > 0) { $unread = 'false'; @@ -847,7 +835,7 @@ $last_marked = ($marked == 'true') ? 'NOW()' : 'NULL'; $last_published = ($published == 'true') ? 'NOW()' : 'NULL'; - $result = db_query($link, + $result = db_query( "INSERT INTO ttrss_user_entries (ref_id, owner_uid, feed_id, unread, last_read, marked, published, score, tag_cache, label_cache, uuid, @@ -859,14 +847,14 @@ if (PUBSUBHUBBUB_HUB && $published == 'true') { $rss_link = get_self_url_prefix() . "/public.php?op=rss&id=-2&key=" . - get_feed_access_key($link, -2, false, $owner_uid); + get_feed_access_key(-2, false, $owner_uid); $p = new Publisher(PUBSUBHUBBUB_HUB); $pubsub_result = $p->publish_update($rss_link); } - $result = db_query($link, + $result = db_query( "SELECT int_id FROM ttrss_user_entries WHERE ref_id = '$ref_id' AND owner_uid = '$owner_uid' AND feed_id = '$feed' LIMIT 1"); @@ -875,17 +863,13 @@ $entry_int_id = db_fetch_result($result, 0, "int_id"); } } else { - if ($debug_enabled) { - _debug("update_rss_feed: user record FOUND"); - } + _debug("user record FOUND", $debug_enabled); $entry_ref_id = db_fetch_result($result, 0, "ref_id"); $entry_int_id = db_fetch_result($result, 0, "int_id"); } - if ($debug_enabled) { - _debug("update_rss_feed: RID: $entry_ref_id, IID: $entry_int_id"); - } + _debug("RID: $entry_ref_id, IID: $entry_int_id", $debug_enabled); $post_needs_update = false; $update_insignificant = false; @@ -905,7 +889,7 @@ $update_insignificant = false; } - if (db_escape_string($link, $orig_title) != $entry_title) { + if (db_escape_string($orig_title) != $entry_title) { $post_needs_update = true; $update_insignificant = false; } @@ -915,12 +899,12 @@ if ($post_needs_update) { if (defined('DAEMON_EXTENDED_DEBUG')) { - _debug("update_rss_feed: post $entry_guid needs update..."); + _debug("post $entry_guid_hashed needs update...", $debug_enabled); } // print "<!-- post $orig_title needs update : $post_needs_update -->"; - db_query($link, "UPDATE ttrss_entries + db_query("UPDATE ttrss_entries SET title = '$entry_title', content = '$entry_content', content_hash = '$content_hash', updated = '$entry_timestamp_fmt', @@ -930,25 +914,21 @@ if (!$update_insignificant) { if ($mark_unread_on_update) { - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET last_read = null, unread = true WHERE ref_id = '$ref_id'"); } } } } - db_query($link, "COMMIT"); + db_query("COMMIT"); - if ($debug_enabled) { - _debug("update_rss_feed: assigning labels..."); - } + _debug("assigning labels...", $debug_enabled); - assign_article_to_label_filters($link, $entry_ref_id, $article_filters, + assign_article_to_label_filters($entry_ref_id, $article_filters, $owner_uid, $article_labels); - if ($debug_enabled) { - _debug("update_rss_feed: looking for enclosures..."); - } + _debug("looking for enclosures...", $debug_enabled); // enclosures @@ -965,28 +945,28 @@ } if ($debug_enabled) { - _debug("update_rss_feed: article enclosures:"); + _debug("article enclosures:", $debug_enabled); print_r($enclosures); } - db_query($link, "BEGIN"); + db_query("BEGIN"); foreach ($enclosures as $enc) { - $enc_url = db_escape_string($link, $enc[0]); - $enc_type = db_escape_string($link, $enc[1]); - $enc_dur = db_escape_string($link, $enc[2]); + $enc_url = db_escape_string($enc[0]); + $enc_type = db_escape_string($enc[1]); + $enc_dur = db_escape_string($enc[2]); - $result = db_query($link, "SELECT id FROM ttrss_enclosures + $result = db_query("SELECT id FROM ttrss_enclosures WHERE content_url = '$enc_url' AND post_id = '$entry_ref_id'"); if (db_num_rows($result) == 0) { - db_query($link, "INSERT INTO ttrss_enclosures + db_query("INSERT INTO ttrss_enclosures (content_url, content_type, title, duration, post_id) VALUES ('$enc_url', '$enc_type', '', '$enc_dur', '$entry_ref_id')"); } } - db_query($link, "COMMIT"); + db_query("COMMIT"); // check for manual tags (we have to do it here since they're loaded from filters) @@ -1005,7 +985,7 @@ // Skip boring tags - $boring_tags = trim_array(explode(",", mb_strtolower(get_pref($link, + $boring_tags = trim_array(explode(",", mb_strtolower(get_pref( 'BLACKLISTED_TAGS', $owner_uid, ''), 'utf-8'))); $filtered_tags = array(); @@ -1022,7 +1002,7 @@ $filtered_tags = array_unique($filtered_tags); if ($debug_enabled) { - _debug("update_rss_feed: filtered article tags:"); + _debug("filtered article tags:", $debug_enabled); print_r($filtered_tags); } @@ -1030,22 +1010,22 @@ if (count($filtered_tags) > 0) { - db_query($link, "BEGIN"); + db_query("BEGIN"); foreach ($filtered_tags as $tag) { $tag = sanitize_tag($tag); - $tag = db_escape_string($link, $tag); + $tag = db_escape_string($tag); if (!tag_is_valid($tag)) continue; - $result = db_query($link, "SELECT id FROM ttrss_tags + $result = db_query("SELECT id FROM ttrss_tags WHERE tag_name = '$tag' AND post_int_id = '$entry_int_id' AND owner_uid = '$owner_uid' LIMIT 1"); if ($result && db_num_rows($result) == 0) { - db_query($link, "INSERT INTO ttrss_tags + db_query("INSERT INTO ttrss_tags (owner_uid,tag_name,post_int_id) VALUES ('$owner_uid','$tag', '$entry_int_id')"); } @@ -1057,73 +1037,60 @@ $tags_to_cache = array_unique($tags_to_cache); - $tags_str = db_escape_string($link, join(",", $tags_to_cache)); + $tags_str = db_escape_string(join(",", $tags_to_cache)); - db_query($link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET tag_cache = '$tags_str' WHERE ref_id = '$entry_ref_id' AND owner_uid = $owner_uid"); - db_query($link, "COMMIT"); + db_query("COMMIT"); } - if (get_pref($link, "AUTO_ASSIGN_LABELS", $owner_uid, false)) { - if ($debug_enabled) { - _debug("update_rss_feed: auto-assigning labels..."); - } + if (get_pref("AUTO_ASSIGN_LABELS", $owner_uid, false)) { + _debug("auto-assigning labels...", $debug_enabled); foreach ($labels as $label) { $caption = preg_quote($label["caption"]); if ($caption && preg_match("/\b$caption\b/i", "$tags_str " . strip_tags($entry_content) . " $entry_title")) { if (!labels_contains_caption($article_labels, $caption)) { - label_add_article($link, $entry_ref_id, $caption, $owner_uid); + label_add_article($entry_ref_id, $caption, $owner_uid); } } } } - if ($debug_enabled) { - _debug("update_rss_feed: article processed"); - } + _debug("article processed", $debug_enabled); } if (!$last_updated) { - if ($debug_enabled) { - _debug("update_rss_feed: new feed, catching it up..."); - } - catchup_feed($link, $feed, false, $owner_uid); + _debug("new feed, catching it up...", $debug_enabled); + catchup_feed($feed, false, $owner_uid); } - if ($debug_enabled) { - _debug("purging feed..."); - } + _debug("purging feed...", $debug_enabled); - purge_feed($link, $feed, 0, $debug_enabled); + purge_feed($feed, 0, $debug_enabled); - db_query($link, "UPDATE ttrss_feeds + db_query("UPDATE ttrss_feeds SET last_updated = NOW(), last_error = '' WHERE id = '$feed'"); -// db_query($link, "COMMIT"); +// db_query("COMMIT"); } else { - $error_msg = db_escape_string($link, mb_substr($rss->error(), 0, 245)); + $error_msg = db_escape_string(mb_substr($rss->error(), 0, 245)); - if ($debug_enabled) { - _debug("update_rss_feed: error fetching feed: $error_msg"); - } + _debug("error fetching feed: $error_msg", $debug_enabled); - db_query($link, + db_query( "UPDATE ttrss_feeds SET last_error = '$error_msg', last_updated = NOW() WHERE id = '$feed'"); } unset($rss); - if ($debug_enabled) { - _debug("update_rss_feed: done"); - } - + _debug("done", $debug_enabled); } function cache_images($html, $site_url, $debug) { @@ -1169,8 +1136,21 @@ return $doc->saveXML($node); } + function expire_error_log($debug) { + if ($debug) _debug("Removing old error log entries..."); + + if (DB_TYPE == "pgsql") { + db_query("DELETE FROM ttrss_error_log + WHERE created_at < NOW() - INTERVAL '7 days'"); + } else { + db_query("DELETE FROM ttrss_error_log + WHERE created_at < DATE_SUB(NOW(), INTERVAL 7 DAY)"); + } + + } + function expire_lock_files($debug) { - if ($debug) _debug("Removing old lock files..."); + //if ($debug) _debug("Removing old lock files..."); $num_deleted = 0; @@ -1179,7 +1159,7 @@ if ($files) { foreach ($files as $file) { - if (!file_is_locked($file) && time() - filemtime($file) > 86400*2) { + if (!file_is_locked(basename($file)) && time() - filemtime($file) > 86400*2) { unlink($file); ++$num_deleted; } @@ -1187,14 +1167,14 @@ } } - if ($debug) _debug("Removed $num_deleted files."); + if ($debug) _debug("Removed $num_deleted old lock files."); } function expire_cached_files($debug) { - foreach (array("simplepie", "images", "export") as $dir) { + foreach (array("simplepie", "images", "export", "upload") as $dir) { $cache_dir = CACHE_DIR . "/$dir"; - if ($debug) _debug("Expiring $cache_dir"); +// if ($debug) _debug("Expiring $cache_dir"); $num_deleted = 0; @@ -1212,7 +1192,7 @@ } } - if ($debug) _debug("Removed $num_deleted files."); + if ($debug) _debug("$cache_dir: removed $num_deleted files."); } } @@ -1246,7 +1226,7 @@ foreach ($filter["rules"] as $rule) { $match = false; - $reg_exp = $rule["reg_exp"]; + $reg_exp = str_replace('/', '\/', $rule["reg_exp"]); $rule_inverse = $rule["inverse"]; if (!$reg_exp) @@ -1275,8 +1255,12 @@ $match = @preg_match("/$reg_exp/i", $author); break; case "tag": - $tag_string = join(",", $tags); - $match = @preg_match("/$reg_exp/i", $tag_string); + foreach ($tags as $tag) { + if (@preg_match("/$reg_exp/i", $tag)) { + $match = true; + break; + } + } break; } @@ -1351,11 +1335,11 @@ return false; } - function assign_article_to_label_filters($link, $id, $filters, $owner_uid, $article_labels) { + function assign_article_to_label_filters($id, $filters, $owner_uid, $article_labels) { foreach ($filters as $f) { if ($f["type"] == "label") { if (!labels_contains_caption($article_labels, $f["param"])) { - label_add_article($link, $id, $f["param"], $owner_uid); + label_add_article($id, $f["param"], $owner_uid); } } } @@ -1366,5 +1350,26 @@ mb_strtolower(strip_tags($title), 'utf-8')); } + function verify_feed_xml($feed_data) { + libxml_use_internal_errors(true); + $doc = new DOMDocument(); + $doc->loadXML($feed_data); + $error = libxml_get_last_error(); + libxml_clear_errors(); + return $error; + } + function housekeeping_common($debug) { + expire_cached_files($debug); + expire_lock_files($debug); + expire_error_log($debug); + + $count = update_feedbrowser_cache(); + _debug("Feedbrowser updated, $count feeds processed."); + + purge_orphans( true); + $rc = cleanup_tags( 14, 50000); + + _debug("Cleaned $rc cached tags."); + } ?> diff --git a/include/sanity_check.php b/include/sanity_check.php index 99d3051f3..b2888b1d7 100644 --- a/include/sanity_check.php +++ b/include/sanity_check.php @@ -21,7 +21,7 @@ return $url_path; } - function initial_sanity_check($link) { + function initial_sanity_check() { $errors = array(); @@ -55,6 +55,10 @@ array_push($errors, "Image cache is not writable (chmod -R 777 ".CACHE_DIR."/images)"); } + if (!is_writable(CACHE_DIR . "/upload")) { + array_push($errors, "Upload cache is not writable (chmod -R 777 ".CACHE_DIR."/upload)"); + } + if (!is_writable(CACHE_DIR . "/export")) { array_push($errors, "Data export cache is not writable (chmod -R 777 ".CACHE_DIR."/export)"); } @@ -63,6 +67,14 @@ array_push($errors, "Javascript cache is not writable (chmod -R 777 ".CACHE_DIR."/js)"); } + if (strlen(FEED_CRYPT_KEY) > 0 && strlen(FEED_CRYPT_KEY) != 24) { + array_push($errors, "FEED_CRYPT_KEY should be exactly 24 characters in length."); + } + + if (strlen(FEED_CRYPT_KEY) > 0 && !function_exists("mcrypt_decrypt")) { + array_push($errors, "FEED_CRYPT_KEY requires mcrypt functions which are not found."); + } + if (GENERATED_CONFIG_CHECK != EXPECTED_CONFIG_VERSION) { array_push($errors, "Configuration option checker sanity_config.php is outdated, please recreate it using ./utils/regen_config_checks.sh"); @@ -76,14 +88,10 @@ } if (SINGLE_USER_MODE) { - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if ($link) { - $result = db_query($link, "SELECT id FROM ttrss_users WHERE id = 1"); + $result = db_query("SELECT id FROM ttrss_users WHERE id = 1"); - if (db_num_rows($result) != 1) { - array_push($errors, "SINGLE_USER_MODE is enabled in config.php but default admin account is not found."); - } + if (db_num_rows($result) != 1) { + array_push($errors, "SINGLE_USER_MODE is enabled in config.php but default admin account is not found."); } } @@ -102,10 +110,6 @@ array_push($errors, "LOCK_DIRECTORY defined in config.php is not writable (chmod -R 777 ".LOCK_DIRECTORY.").\n"); } - if (ini_get("open_basedir")) { - array_push($errors, "PHP configuration option open_basedir is not supported. Please disable this in PHP settings file (php.ini)."); - } - if (!function_exists("curl_init") && !ini_get("allow_url_fopen")) { array_push($errors, "PHP configuration option allow_url_fopen is disabled, and CURL functions are not present. Either enable allow_url_fopen or install PHP extension for CURL."); } @@ -114,7 +118,7 @@ array_push($errors, "PHP support for JSON is required, but was not found."); } - if (DB_TYPE == "mysql" && !function_exists("mysql_connect")) { + if (DB_TYPE == "mysql" && !function_exists("mysql_connect") && !function_exists("mysqli_connect")) { array_push($errors, "PHP support for MySQL is required for configured DB_TYPE in config.php."); } @@ -194,6 +198,6 @@ } } - initial_sanity_check($link); + initial_sanity_check(); ?> diff --git a/include/sanity_config.php b/include/sanity_config.php index cb1c1e8ca..7d8afe102 100644 --- a/include/sanity_config.php +++ b/include/sanity_config.php @@ -1,3 +1,3 @@ -<?php # This file has been generated at: Mon Apr 1 18:30:54 IDT 2013 +<?php # This file has been generated at: Fri Apr 19 09:22:33 MSK 2013 define('GENERATED_CONFIG_CHECK', 26); -$requred_defines = array( 'DB_TYPE', 'DB_HOST', 'DB_USER', 'DB_NAME', 'DB_PASS', 'MYSQL_CHARSET', 'SELF_URL_PATH', 'SINGLE_USER_MODE', 'SIMPLE_UPDATE_MODE', 'PHP_EXECUTABLE', 'LOCK_DIRECTORY', 'CACHE_DIR', 'ICONS_DIR', 'ICONS_URL', 'AUTH_AUTO_CREATE', 'AUTH_AUTO_LOGIN', 'FORCE_ARTICLE_PURGE', 'PUBSUBHUBBUB_HUB', 'PUBSUBHUBBUB_ENABLED', 'SPHINX_ENABLED', 'SPHINX_INDEX', 'ENABLE_REGISTRATION', 'REG_NOTIFY_ADDRESS', 'REG_MAX_USERS', 'SESSION_COOKIE_LIFETIME', 'SESSION_CHECK_ADDRESS', 'SMTP_FROM_NAME', 'SMTP_FROM_ADDRESS', 'DIGEST_SUBJECT', 'SMTP_HOST', 'SMTP_PORT', 'SMTP_LOGIN', 'SMTP_PASSWORD', 'CHECK_FOR_NEW_VERSION', 'ENABLE_GZIP_OUTPUT', 'PLUGINS', 'CONFIG_VERSION'); ?> +$requred_defines = array( 'DB_TYPE', 'DB_HOST', 'DB_USER', 'DB_NAME', 'DB_PASS', 'MYSQL_CHARSET', 'SELF_URL_PATH', 'FEED_CRYPT_KEY', 'SINGLE_USER_MODE', 'SIMPLE_UPDATE_MODE', 'PHP_EXECUTABLE', 'LOCK_DIRECTORY', 'CACHE_DIR', 'ICONS_DIR', 'ICONS_URL', 'AUTH_AUTO_CREATE', 'AUTH_AUTO_LOGIN', 'FORCE_ARTICLE_PURGE', 'PUBSUBHUBBUB_HUB', 'PUBSUBHUBBUB_ENABLED', 'SPHINX_ENABLED', 'SPHINX_SERVER', 'SPHINX_INDEX', 'ENABLE_REGISTRATION', 'REG_NOTIFY_ADDRESS', 'REG_MAX_USERS', 'SESSION_COOKIE_LIFETIME', 'SESSION_CHECK_ADDRESS', 'SMTP_FROM_NAME', 'SMTP_FROM_ADDRESS', 'DIGEST_SUBJECT', 'SMTP_SERVER', 'SMTP_LOGIN', 'SMTP_PASSWORD', 'CHECK_FOR_NEW_VERSION', 'ENABLE_GZIP_OUTPUT', 'PLUGINS', 'LOG_DESTINATION', 'CONFIG_VERSION'); ?> diff --git a/include/sessions.php b/include/sessions.php index 402e8b8de..423ef0eda 100644 --- a/include/sessions.php +++ b/include/sessions.php @@ -2,7 +2,9 @@ // Original from http://www.daniweb.com/code/snippet43.html require_once "config.php"; - require_once "db.php"; + require_once "classes/db.php"; + require_once "autoload.php"; + require_once "errorhandler.php"; require_once "lib/accept-to-gettext.php"; require_once "lib/gettext/gettext.inc"; require_once "version.php"; @@ -21,14 +23,12 @@ ini_set("session.gc_maxlifetime", $session_expire); ini_set("session.cookie_lifetime", min(0, SESSION_COOKIE_LIFETIME)); - global $session_connection; - - function session_get_schema_version($link, $nocache = false) { + function session_get_schema_version($nocache = false) { global $schema_version; if (!$schema_version) { - $result = db_query($link, "SELECT schema_version FROM ttrss_version"); - $version = db_fetch_result($result, 0, "schema_version"); + $result = Db::get()->query("SELECT schema_version FROM ttrss_version"); + $version = Db::get()->fetch_result($result, 0, "schema_version"); $schema_version = $version; return $version; } else { @@ -36,11 +36,10 @@ } } - function validate_session($link) { + function validate_session() { if (SINGLE_USER_MODE) return true; - if (!$link) return false; - if (VERSION != $_SESSION["version"]) return false; + if (VERSION_STATIC != $_SESSION["version"]) return false; $check_ip = $_SESSION['ip_address']; @@ -63,21 +62,21 @@ return false; } - if ($_SESSION["ref_schema_version"] != session_get_schema_version($link, true)) + if ($_SESSION["ref_schema_version"] != session_get_schema_version(true)) return false; if (sha1($_SERVER['HTTP_USER_AGENT']) != $_SESSION["user_agent"]) return false; if ($_SESSION["uid"]) { - $result = db_query($link, + $result = Db::get()->query( "SELECT pwd_hash FROM ttrss_users WHERE id = '".$_SESSION["uid"]."'"); // user not found - if (db_num_rows($result) == 0) { + if (Db::get()->num_rows($result) == 0) { return false; } else { - $pwd_hash = db_fetch_result($result, 0, "pwd_hash"); + $pwd_hash = Db::get()->fetch_result($result, 0, "pwd_hash"); if ($pwd_hash != $_SESSION["pwd_hash"]) { return false; @@ -85,101 +84,63 @@ } } -/* if ($_SESSION["cookie_lifetime"] && $_SESSION["uid"]) { - - //print_r($_SESSION); - - if (time() > $_SESSION["cookie_lifetime"]) { - return false; - } - } */ - return true; } function ttrss_open ($s, $n) { - global $session_connection; - - $session_connection = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - return true; } function ttrss_read ($id){ + global $session_expire; + + $res = Db::get()->query("SELECT data FROM ttrss_sessions WHERE id='$id'"); - global $session_connection,$session_read; + if (Db::get()->num_rows($res) != 1) { - $query = "SELECT data FROM ttrss_sessions WHERE id='$id'"; + $expire = time() + $session_expire; - $res = db_query($session_connection, $query); + Db::get()->query("INSERT INTO ttrss_sessions (id, data, expire) + VALUES ('$id', '', '$expire')"); - if (db_num_rows($res) != 1) { return ""; } else { - $session_read = db_fetch_assoc($res); - $session_read["data"] = base64_decode($session_read["data"]); - return $session_read["data"]; + return base64_decode(Db::get()->fetch_result($res, 0, "data")); } + } function ttrss_write ($id, $data) { + global $session_expire; - if (! $data) { - return false; - } - - global $session_connection, $session_read, $session_expire; - + $data = base64_encode($data); $expire = time() + $session_expire; - $data = db_escape_string($session_connection, base64_encode($data), false); - - if ($session_read) { - $query = "UPDATE ttrss_sessions SET data='$data', - expire='$expire' WHERE id='$id'"; - } else { - $query = "INSERT INTO ttrss_sessions (id, data, expire) - VALUES ('$id', '$data', '$expire')"; - } + Db::get()->query("UPDATE ttrss_sessions SET data='$data', expire='$expire' WHERE id='$id'"); - db_query($session_connection, $query); return true; } function ttrss_close () { - - global $session_connection; - - //db_close($session_connection); - return true; } - function ttrss_destroy ($id) { - - global $session_connection; - - $query = "DELETE FROM ttrss_sessions WHERE id = '$id'"; - - db_query($session_connection, $query); + function ttrss_destroy($id) { + Db::get()->query("DELETE FROM ttrss_sessions WHERE id = '$id'"); return true; } function ttrss_gc ($expire) { - - global $session_connection; - - $query = "DELETE FROM ttrss_sessions WHERE expire < " . time(); - - db_query($session_connection, $query); + Db::get()->query("DELETE FROM ttrss_sessions WHERE expire < " . time()); } if (!SINGLE_USER_MODE /* && DB_TYPE == "pgsql" */) { session_set_save_handler("ttrss_open", "ttrss_close", "ttrss_read", "ttrss_write", "ttrss_destroy", "ttrss_gc"); + register_shutdown_function('session_write_close'); } if (!defined('NO_SESSION_AUTOSTART')) { diff --git a/include/version.php b/include/version.php index 61851dffb..0e583f9ec 100644 --- a/include/version.php +++ b/include/version.php @@ -1,3 +1,19 @@ <?php - define('VERSION', "1.7.8"); + define('VERSION_STATIC', '1.7.8'); + + function get_version() { + date_default_timezone_set('UTC'); + $root_dir = dirname(dirname(__FILE__)); + + if (is_dir("$root_dir/.git") && file_exists("$root_dir/.git/ORIG_HEAD")) { + + $suffix = substr(trim(file_get_contents("$root_dir/.git/ORIG_HEAD")), 0, 7); + + return VERSION_STATIC . ".$suffix"; + } else { + return VERSION_STATIC; + } + } + + define('VERSION', get_version()); ?> @@ -19,6 +19,7 @@ set_include_path(dirname(__FILE__) ."/include" . PATH_SEPARATOR . get_include_path()); + require_once "autoload.php"; require_once "sessions.php"; require_once "functions.php"; require_once "sanity_check.php"; @@ -29,28 +30,22 @@ $mobile = new Mobile_Detect(); - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!init_connection($link)) return; - - global $pluginhost; + if (!init_plugins()) return; if (!$_REQUEST['mobile']) { - if ($mobile->isTablet() && $pluginhost->get_plugin("digest")) { + if ($mobile->isTablet() && PluginHost::getInstance()->get_plugin("digest")) { header('Location: backend.php?op=digest'); exit; - } else if ($mobile->isMobile() && $pluginhost->get_plugin("mobile")) { + } else if ($mobile->isMobile() && PluginHost::getInstance()->get_plugin("mobile")) { header('Location: backend.php?op=mobile'); exit; - } else if ($mobile->isMobile() && $pluginhost->get_plugin("digest")) { + } else if ($mobile->isMobile() && PluginHost::getInstance()->get_plugin("digest")) { header('Location: backend.php?op=digest'); exit; } } - login_sequence($link); - - no_cache_incantation(); + login_sequence(); header('Content-Type: text/html; charset=utf-8'); @@ -61,23 +56,23 @@ <head> <title>Tiny Tiny RSS</title> - <?php echo stylesheet_tag("lib/dijit/themes/claro/claro.css"); ?> - <?php echo stylesheet_tag("tt-rss.css"); ?> - <?php echo stylesheet_tag("cdm.css"); ?> + <?php stylesheet_tag("lib/dijit/themes/claro/claro.css"); ?> + <?php stylesheet_tag("tt-rss.css"); ?> + <?php stylesheet_tag("cdm.css"); ?> <?php if ($_SESSION["uid"]) { - $theme = get_pref($link, "USER_CSS_THEME", $_SESSION["uid"], false); + $theme = get_pref( "USER_CSS_THEME", $_SESSION["uid"], false); if ($theme) { - echo stylesheet_tag("themes/$theme"); + stylesheet_tag("themes/$theme"); } } ?> - <?php print_user_stylesheet($link) ?> + <?php print_user_stylesheet() ?> <style type="text/css"> <?php - foreach ($pluginhost->get_plugins() as $n => $p) { + foreach (PluginHost::getInstance()->get_plugins() as $n => $p) { if (method_exists($p, "get_css")) { echo $p->get_css(); } @@ -96,7 +91,7 @@ "lib/dojo/tt-rss-layer.js", "errors.php?mode=js") as $jsfile) { - echo javascript_tag($jsfile); + javascript_tag($jsfile); } ?> @@ -105,11 +100,9 @@ require 'lib/jshrink/Minifier.php'; print get_minified_js(array("tt-rss", - "functions", "feedlist", "viewfeed", "FeedTree")); + "functions", "feedlist", "viewfeed", "FeedTree", "PluginHost")); - global $pluginhost; - - foreach ($pluginhost->get_plugins() as $n => $p) { + foreach (PluginHost::getInstance()->get_plugins() as $n => $p) { if (method_exists($p, "get_js")) { echo JShrink\Minifier::minify($p->get_js()); } @@ -140,7 +133,7 @@ </div> </div> -<div id="notify" class="notify"><span id="notify_body"> </span></div> +<div id="notify" class="notify" style="display : none"></div> <div id="cmdline" style="display : none"></div> <div id="headlines-tmp" style="display : none"></div> @@ -208,8 +201,7 @@ <div class="actionChooser"> <?php - global $pluginhost; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_TOOLBAR_BUTTON) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_TOOLBAR_BUTTON) as $p) { echo $p->hook_toolbar_button(); } ?> @@ -241,18 +233,14 @@ <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcCatchupAll')"><?php echo __('Mark as read') ?></div> <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcShowOnlyUnread')"><?php echo __('(Un)hide read feeds') ?></div> <div dojoType="dijit.MenuItem" disabled="1"><?php echo __('Other actions:') ?></div> - <!-- <?php if ($pluginhost->get_plugin("digest")) { ?> - <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcDigest')"><?php echo __('Switch to digest...') ?></div> - <?php } ?> --> - <!-- <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcTagCloud')"><?php echo __('Show tag cloud...') ?></div> --> - <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcToggleWidescreen')"><?php echo __('Toggle widescreen mode') ?></div> + <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcToggleWidescreen')"><?php echo __('Toggle widescreen mode') ?></div> <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcTagSelect')"><?php echo __('Select by tags...') ?></div> <!-- <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcAddLabel')"><?php echo __('Create label...') ?></div> <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcAddFilter')"><?php echo __('Create filter...') ?></div> --> <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcHKhelp')"><?php echo __('Keyboard shortcuts help') ?></div> <?php - foreach ($pluginhost->get_hooks($pluginhost::HOOK_ACTION_ITEM) as $p) { + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ACTION_ITEM) as $p) { echo $p->hook_action_item(); } ?> @@ -286,7 +274,5 @@ </div> </div> -<?php db_close($link); ?> - </body> </html> diff --git a/install/index.php b/install/index.php index 026e00d01..6cb2ace4f 100644 --- a/install/index.php +++ b/install/index.php @@ -10,6 +10,25 @@ <body> <?php + function make_password($length = 8) { + + $password = ""; + $possible = "0123456789abcdfghjkmnpqrstvwxyzABCDFGHJKMNPQRSTVWXYZ*%+^"; + + $i = 0; + + while ($i < $length) { + $char = substr($possible, mt_rand(0, strlen($possible)-1), 1); + + if (!strstr($password, $char)) { + $password .= $char; + $i++; + } + } + return $password; + } + + function sanity_check($db_type) { $errors = array(); @@ -17,10 +36,6 @@ array_push($errors, "PHP version 5.3.0 or newer required."); } - if (ini_get("open_basedir")) { - array_push($errors, "PHP configuration option open_basedir is not supported. Please disable this in PHP settings file (php.ini)."); - } - if (!function_exists("curl_init") && !ini_get("allow_url_fopen")) { array_push($errors, "PHP configuration option allow_url_fopen is disabled, and CURL functions are not present. Either enable allow_url_fopen or install PHP extension for CURL."); } @@ -29,7 +44,7 @@ array_push($errors, "PHP support for JSON is required, but was not found."); } - if ($db_type == "mysql" && !function_exists("mysql_connect")) { + if ($db_type == "mysql" && !function_exists("mysql_connect") && !function_exists("mysqli_connect")) { array_push($errors, "PHP support for MySQL is required for configured $db_type in config.php."); } @@ -65,15 +80,16 @@ } function print_error($msg) { - print "<div class='error'><img src='../images/sign_excl.svg'> $msg</div>"; + print "<div class='error'><span><img src='../images/sign_excl.svg'></span> + <span>$msg</span></div>"; } function print_notice($msg) { print "<div class=\"notice\"> - <img src=\"../images/sign_info.svg\">$msg</div>"; + <span><img src=\"../images/sign_info.svg\"></span><span>$msg</span></div>"; } - function db_connect($host, $user, $pass, $db, $type) { + function db_connect($host, $user, $pass, $db, $type, $port = false) { if ($type == "pgsql") { $string = "dbname=$db user=$user"; @@ -86,8 +102,8 @@ $string .= " host=$host"; } - if (defined('DB_PORT')) { - $string = "$string port=" . DB_PORT; + if ($port) { + $string = "$string port=" . $port; } $link = pg_connect($string); @@ -95,10 +111,18 @@ return $link; } else if ($type == "mysql") { - $link = mysql_connect($host, $user, $pass); - if ($link) { - $result = mysql_select_db($db, $link); - if ($result) return $link; + if (function_exists("mysqli_connect")) { + if ($port) + return mysqli_connect($host, $user, $pass, $db, $port); + else + return mysqli_connect($host, $user, $pass, $db); + + } else { + $link = mysql_connect($host, $user, $pass); + if ($link) { + $result = mysql_select_db($db, $link); + if ($result) return $link; + } } } } @@ -112,6 +136,12 @@ $finished = false; + if (function_exists("mcrypt_decrypt")) { + $crypt_key = make_password(24); + } else { + $crypt_key = ""; + } + foreach ($data as $line) { if (preg_match("/define\('DB_TYPE'/", $line)) { $rv .= "\tdefine('DB_TYPE', '$DB_TYPE');\n"; @@ -127,6 +157,8 @@ $rv .= "\tdefine('DB_PORT', '$DB_PORT');\n"; } else if (preg_match("/define\('SELF_URL_PATH'/", $line)) { $rv .= "\tdefine('SELF_URL_PATH', '$SELF_URL_PATH');\n"; + } else if (preg_match("/define\('FEED_CRYPT_KEY'/", $line)) { + $rv .= "\tdefine('FEED_CRYPT_KEY', '$crypt_key');\n"; } else if (!$finished) { $rv .= "$line\n"; } @@ -150,7 +182,12 @@ } return $result; } else if ($type == "mysql") { - $result = mysql_query($query, $link); + + if (function_exists("mysqli_connect")) { + $result = mysqli_query($link, $query); + } else { + $result = mysql_query($query, $link); + } if (!$result) { $query = htmlspecialchars($query); if ($die_on_error) { @@ -231,17 +268,19 @@ <fieldset> <label>Database name</label> - <input name="DB_NAME" size="20" value="<?php echo $DB_NAME ?>"/> + <input required name="DB_NAME" size="20" value="<?php echo $DB_NAME ?>"/> </fieldset> <fieldset> <label>Host name</label> - <input name="DB_HOST" placeholder="if needed" size="20" value="<?php echo $DB_HOST ?>"/> + <input name="DB_HOST" size="20" value="<?php echo $DB_HOST ?>"/> + <span class="hint">If needed</span> </fieldset> <fieldset> <label>Port</label> - <input name="DB_PORT" type="number" placeholder="if needed, PgSQL only" size="20" value="<?php echo $DB_PORT ?>"/> + <input name="DB_PORT" type="number" size="20" value="<?php echo $DB_PORT ?>"/> + <span class="hint">Usually 3306 for MySQL or 5432 for PostgreSQL</span> </fieldset> <h2>Other settings</h2> @@ -304,7 +343,7 @@ <h2>Checking database</h2> <?php - $link = db_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME, $DB_TYPE); + $link = db_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME, $DB_TYPE, $DB_PORT); if (!$link) { print_error("Unable to connect to database using specified parameters."); diff --git a/js/FeedTree.js b/js/FeedTree.js index f874db702..07c3002f2 100644 --- a/js/FeedTree.js +++ b/js/FeedTree.js @@ -100,7 +100,7 @@ dojo.declare("fox.FeedTree", dijit.Tree, { _createTreeNode: function(args) { var tnode = new dijit._TreeNode(args); - if (args.item.icon) + if (args.item.icon && args.item.icon[0]) tnode.iconNode.src = args.item.icon[0]; var id = args.item.id[0]; diff --git a/js/PluginHost.js b/js/PluginHost.js new file mode 100644 index 000000000..668d215f9 --- /dev/null +++ b/js/PluginHost.js @@ -0,0 +1,34 @@ +// based on http://www.velvetcache.org/2010/08/19/a-simple-javascript-hooks-system + +var PluginHost = { + HOOK_ARTICLE_RENDERED: 1, + HOOK_ARTICLE_RENDERED_CDM: 2, + HOOK_ARTICLE_SET_ACTIVE: 3, + HOOK_FEED_SET_ACTIVE: 4, + HOOK_FEED_LOADED: 5, + HOOK_ARTICLE_EXPANDED: 6, + HOOK_ARTICLE_COLLAPSED: 7, + HOOK_PARAMS_LOADED: 8, + HOOK_RUNTIME_INFO_LOADED: 9, + hooks: [], + register: function (name, callback) { + if (typeof(this.hooks[name]) == 'undefined') + this.hooks[name] = []; + + this.hooks[name].push(callback); + }, + run: function (name, args) { + console.warn('PluginHost::run ' + name); + + if (typeof(this.hooks[name]) != 'undefined') + for (i = 0; i < this.hooks[name].length; i++) + if (!this.hooks[name][i](args)) break; + } +}; + +/* PluginHost.register(PluginHost.HOOK_ARTICLE_RENDERED, + function (args) { console.log('ARTICLE_RENDERED: ' + args); return true; }); + +PluginHost.register(PluginHost.HOOK_ARTICLE_RENDERED_CDM, + function (args) { console.log('ARTICLE_RENDERED_CDM: ' + args); return true; }); */ + diff --git a/js/feedlist.js b/js/feedlist.js index f4e07517e..932297be8 100644 --- a/js/feedlist.js +++ b/js/feedlist.js @@ -139,6 +139,7 @@ function viewfeed(feed, method, is_cat, offset, background, infscroll_req) { onComplete: function(transport) { setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif'); headlines_callback2(transport, offset, background, infscroll_req); + PluginHost.run(PluginHost.HOOK_FEED_LOADED, [feed, is_cat]); } }); } catch (e) { @@ -150,6 +151,8 @@ function feedlist_init() { try { console.log("in feedlist init"); + loading_set_progress(50); + document.onkeydown = hotkey_handler; setTimeout("hotkey_prefix_timeout()", 5*1000); diff --git a/js/functions.js b/js/functions.js index 82cfa9054..8691c1ee5 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1,8 +1,8 @@ -var notify_silent = false; var loading_progress = 0; var sanity_check_done = false; var init_params = {}; var _label_base_index = -1024; +var notify_hide_timerid = false; Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap( function (callOriginal, options) { @@ -50,6 +50,21 @@ function exception_error(location, e, ext_info) { } } + try { + new Ajax.Request("backend.php", { + parameters: {op: "rpc", method: "log", logmsg: msg}, + onComplete: function (transport) { + console.log(transport.responseText); + } }); + + } catch (eii) { + console.log("Exception while trying to log the error."); + console.log(eii); + } + + msg += "<p>"+ __("The error will be reported to the configured log destination.") + + "</p>"; + var content = "<div class=\"fatalError\">" + "<pre>" + msg + "</pre>"; @@ -106,7 +121,28 @@ function exception_error(location, e, ext_info) { dialog.show(); - } catch (e) { + } catch (ei) { + console.log("Exception while trying to report an exception. Oh boy."); + console.log(ei); + console.log("Original exception:"); + console.log(e); + + msg += "\n\nAdditional exception caught while trying to show the error dialog.\n\n" + format_exception_error('exception_error', ei); + + try { + new Ajax.Request("backend.php", { + parameters: {op: "rpc", method: "log", logmsg: msg}, + onComplete: function (transport) { + console.log(transport.responseText); + } }); + + } catch (eii) { + console.log("Third exception while trying to log the error! Seriously?"); + console.log(eii); + } + + msg += "\n\nThe error will be reported to the configured log destination."; + alert(msg); } @@ -147,42 +183,28 @@ function param_unescape(arg) { return unescape(arg); } -var notify_hide_timerid = false; function hide_notify() { - var n = $("notify"); - if (n) { - n.style.display = "none"; - } -} - -function notify_silent_next() { - notify_silent = true; + Element.hide('notify'); } function notify_real(msg, no_hide, n_type) { - if (notify_silent) { - notify_silent = false; - return; - } - var n = $("notify"); - var nb = $("notify_body"); - if (!n || !nb) return; + if (!n) return; if (notify_hide_timerid) { window.clearTimeout(notify_hide_timerid); } if (msg == "") { - if (n.style.display == "block") { + if (Element.visible(n)) { notify_hide_timerid = window.setTimeout("hide_notify()", 0); } return; } else { - n.style.display = "block"; + Element.show(n); } /* types: @@ -194,33 +216,31 @@ function notify_real(msg, no_hide, n_type) { */ - msg = __(msg); + msg = "<span class=\"msg\"> " + __(msg) + "</span>"; if (n_type == 1) { n.className = "notify"; } else if (n_type == 2) { n.className = "notify progress"; - msg = "<img src='images/indicator_white.gif'> " + msg; + msg = "<span><img src='images/indicator_white.gif'></span>" + msg; + no_hide = true; } else if (n_type == 3) { n.className = "notify error"; - msg = "<img src='images/sign_excl.svg'> " + msg; + msg = "<span><img src='images/sign_excl.svg'></span>" + msg; } else if (n_type == 4) { n.className = "notify info"; - msg = "<img src='images/sign_info.svg'> " + msg; - } - - if (no_hide) { - msg += " <span>(<a href='#' onclick=\"notify('')\">" + - __("close") + "</a>)</span>"; + msg = "<span><img src='images/sign_info.svg'></span>" + msg; } + msg += " <span><img src=\"images/close_notify.svg\" class=\"close\" title=\"" + + __("Click to close") + "\" onclick=\"notify('')\"></span>"; // msg = "<img src='images/live_com_loading.gif'> " + msg; - nb.innerHTML = msg; + n.innerHTML = msg; if (!no_hide) { - notify_hide_timerid = window.setTimeout("hide_notify()", 3000); + notify_hide_timerid = window.setTimeout("hide_notify()", 5*1000); } } @@ -368,6 +388,9 @@ function toggleSelectRow2(sender, row, is_cdm) { row.addClassName('Selected'); else row.removeClassName('Selected'); + + if (typeof updateSelectedPrompt != undefined) + updateSelectedPrompt(); } @@ -379,6 +402,9 @@ function toggleSelectRow(sender, row) { row.addClassName('Selected'); else row.removeClassName('Selected'); + + if (typeof updateSelectedPrompt != undefined) + updateSelectedPrompt(); } function checkboxToggleElement(elem, id) { @@ -810,7 +836,7 @@ function quickAddFeed() { notify(''); Element.hide("feed_add_spinner"); - console.log("GOT RC: " + rc); + console.log(rc); switch (parseInt(rc['code'])) { case 1: @@ -826,39 +852,6 @@ function quickAddFeed() { alert(__("Specified URL doesn't seem to contain any feeds.")); break; case 4: - /* notify_progress("Searching for feed urls...", true); - - new Ajax.Request("backend.php", { - parameters: 'op=rpc&method=extractfeedurls&url=' + param_escape(feed_url), - onComplete: function(transport, dialog, feed_url) { - - notify(''); - - var reply = JSON.parse(transport.responseText); - - var feeds = reply['urls']; - - console.log(transport.responseText); - - var select = dijit.byId("feedDlg_feedContainerSelect"); - - while (select.getOptions().length > 0) - select.removeOption(0); - - var count = 0; - for (var feedUrl in feeds) { - select.addOption({value: feedUrl, label: feeds[feedUrl]}); - count++; - } - -// if (count > 5) count = 5; -// select.size = count; - - Effect.Appear('feedDlg_feedsContainer', {duration : 0.5}); - } - }); - break; */ - feeds = rc['feeds']; var select = dijit.byId("feedDlg_feedContainerSelect"); @@ -866,6 +859,8 @@ function quickAddFeed() { while (select.getOptions().length > 0) select.removeOption(0); + select.addOption({value: '', label: __("Expand to select feed")}); + var count = 0; for (var feedUrl in feeds) { select.addOption({value: feedUrl, label: feeds[feedUrl]}); @@ -879,6 +874,11 @@ function quickAddFeed() { alert(__("Couldn't download the specified URL: %s"). replace("%s", rc['message'])); break; + case 6: + alert(__("XML validation failed: %s"). + replace("%s", rc['message'])); + break; + break; case 0: alert(__("You are already subscribed to this feed.")); break; @@ -1269,16 +1269,17 @@ function backend_sanity_check_callback(transport) { if (params) { console.log('reading init-params...'); - if (params) { - for (k in params) { - var v = params[k]; - console.log("IP: " + k + " => " + v); + for (k in params) { + var v = params[k]; + console.log("IP: " + k + " => " + v); - if (k == "label_base_index") _label_base_index = parseInt(v); - } + if (k == "label_base_index") _label_base_index = parseInt(v); } init_params = params; + + // PluginHost might not be available on non-index pages + window.PluginHost && PluginHost.run(PluginHost.HOOK_PARAMS_LOADED, init_params); } sanity_check_done = true; diff --git a/js/index.html b/js/index.html new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/index.html diff --git a/js/prefs.js b/js/prefs.js index b1decede5..e226459fc 100644 --- a/js/prefs.js +++ b/js/prefs.js @@ -852,6 +852,15 @@ function updatePrefsList() { } }); } +function updateSystemList() { + new Ajax.Request("backend.php", { + parameters: "?op=pref-system", + onComplete: function(transport) { + dijit.byId('systemConfigTab').attr('content', transport.responseText); + notify(""); + } }); +} + function selectTab(id, noupdate, method) { try { if (!noupdate) { @@ -867,6 +876,8 @@ function selectTab(id, noupdate, method) { updatePrefsList(); } else if (id == "userConfig") { updateUsersList(); + } else if (id == "systemConfig") { + updateSystemList(); } var tab = dijit.byId(id + "Tab"); @@ -951,8 +962,11 @@ function init() { dojo.addOnLoad(function() { loading_set_progress(50); + var clientTzOffset = new Date().getTimezoneOffset() * 60; + new Ajax.Request("backend.php", { - parameters: {op: "rpc", method: "sanityCheck"}, + parameters: {op: "rpc", method: "sanityCheck", + clientTzOffset: clientTzOffset }, onComplete: function(transport) { backend_sanity_check_callback(transport); } }); @@ -1596,21 +1610,6 @@ function resetCatOrder() { } } -function toggleHiddenFeedCats() { - try { - notify_progress("Loading, please wait..."); - - new Ajax.Request("backend.php", { - parameters: "?op=pref-feeds&method=togglehiddenfeedcats", - onComplete: function(transport) { - updateFeedList(); - } }); - - } catch (e) { - exception_error("toggleHiddenFeedCats"); - } -} - function editCat(id, item, event) { try { var new_name = prompt(__('Rename category to:'), item.name); @@ -1819,3 +1818,21 @@ function clearPluginData(name) { exception_error("clearPluginData", e); } } + +function clearSqlLog() { + + if (confirm(__("Clear all messages in the error log?"))) { + + notify_progress("Loading, please wait..."); + var query = "?op=pref-system&method=clearLog"; + + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + updateSystemList(); + } }); + + } +} + + diff --git a/js/tt-rss.js b/js/tt-rss.js index a572e5324..577922948 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -40,6 +40,8 @@ function setActiveFeedId(id, is_cat) { $("headlines-frame").setAttribute("is-cat", is_cat ? 1 : 0); selectFeed(id, is_cat); + + PluginHost.run(PluginHost.HOOK_FEED_SET_ACTIVE, _active_article_id); } catch (e) { exception_error("setActiveFeedId", e); } @@ -134,7 +136,8 @@ function catchupAllFeeds() { new Ajax.Request("backend.php", { parameters: query_str, onComplete: function(transport) { - feedlist_callback2(transport); + request_counters(true); + viewCurrentFeed(); } }); global_unread = 0; @@ -246,13 +249,19 @@ function init() { if (!genericSanityCheck()) return false; - loading_set_progress(20); + loading_set_progress(30); + + var a = document.createElement('audio'); - var hasAudio = !!((myAudioTag = document.createElement('audio')).canPlayType); + var hasAudio = !!a.canPlayType; var hasSandbox = "sandbox" in document.createElement("iframe"); + var hasMp3 = !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')); + var clientTzOffset = new Date().getTimezoneOffset() * 60; new Ajax.Request("backend.php", { parameters: {op: "rpc", method: "sanityCheck", hasAudio: hasAudio, + hasMp3: hasMp3, + clientTzOffset: clientTzOffset, hasSandbox: hasSandbox}, onComplete: function(transport) { backend_sanity_check_callback(transport); @@ -302,7 +311,7 @@ function init() { var id = getActiveArticleId(); var elem = $("CICD-"+id); if(elem.visible()) { - cdmUnexpandArticle(null, id); + cdmCollapseArticle(null, id, false); } else { cdmExpandArticle(id); @@ -323,7 +332,7 @@ function init() { hotkey_actions["edit_tags"] = function() { var id = getActiveArticleId(); if (id) { - editArticleTags(id, getActiveFeedId(), isCdmMode()); + editArticleTags(id); }; } hotkey_actions["dismiss_selected"] = function() { @@ -564,7 +573,7 @@ function init_second_stage() { setActiveFeedId(hash_feed_id, hash_feed_is_cat); } - loading_set_progress(30); + loading_set_progress(50); // can't use cache_clear() here because viewfeed might not have initialized yet if ('sessionStorage' in window && window['sessionStorage'] !== null) @@ -744,6 +753,8 @@ function parse_runtime_info(data) { init_params[k] = v; notify(''); } + + PluginHost.run(PluginHost.HOOK_RUNTIME_INFO_LOADED, data); } function collapse_feedlist() { @@ -983,7 +994,7 @@ function handle_rpc_json(transport, scheduled_call) { if (counters) parse_counters(counters, scheduled_call); - var runtime_info = reply['runtime-info'];; + var runtime_info = reply['runtime-info']; if (runtime_info) parse_runtime_info(runtime_info); @@ -1072,7 +1083,7 @@ function hash_get(key) { kv = window.location.hash.substring(1).toQueryParams(); return kv[key]; } catch (e) { - exception_error("hash_set", e); + exception_error("hash_get", e); } } function hash_set(key, value) { diff --git a/js/viewfeed.js b/js/viewfeed.js index da5ded64f..da3628349 100644 --- a/js/viewfeed.js +++ b/js/viewfeed.js @@ -20,8 +20,6 @@ function headlines_callback2(transport, offset, background, infscroll_req) { try { handle_rpc_json(transport); - loading_set_progress(25); - console.log("headlines_callback2 [offset=" + offset + "] B:" + background + " I:" + infscroll_req); var is_cat = false; @@ -43,9 +41,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) { if (background) { var content = reply['headlines']['content']; - if (getInitParam("cdm_auto_catchup") == 1) { - content = content + "<div id='headlines-spacer'></div>"; - } + content = content + "<div id='headlines-spacer'></div>"; return; } @@ -93,11 +89,9 @@ function headlines_callback2(transport, offset, background, infscroll_req) { } }); - if (getInitParam("cdm_auto_catchup") == 1) { - var hsp = $("headlines-spacer"); - if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"}); - dijit.byId('headlines-frame').domNode.appendChild(hsp); - } + var hsp = $("headlines-spacer"); + if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"}); + dijit.byId('headlines-frame').domNode.appendChild(hsp); initHeadlinesMenu(); @@ -140,8 +134,6 @@ function headlines_callback2(transport, offset, background, infscroll_req) { if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"}); - fixHeadlinesOrder(getLoadedArticleIds()); - if (getInitParam("cdm_auto_catchup") == 1) { c.domNode.appendChild(hsp); } @@ -232,6 +224,8 @@ function render_article(article) { c.domNode.scrollTop = 0; } catch (e) { }; + PluginHost.run(PluginHost.HOOK_ARTICLE_RENDERED, article); + c.attr('content', article); correctHeadlinesOffset(getActiveArticleId()); @@ -639,11 +633,33 @@ function toggleSelected(id, force_on) { if (cb) cb.attr("checked", true); } } + + updateSelectedPrompt(); } catch (e) { exception_error("toggleSelected", e); } } +function updateSelectedPrompt() { + try { + var count = getSelectedArticleIds2().size(); + var elem = $("selected_prompt"); + + if (elem) { + elem.innerHTML = ngettext("%d article selected", + "%d articles selected", count).replace("%d", count); + + if (count > 0) + Element.show(elem); + else + Element.hide(elem); + } + + } catch (e) { + exception_error("updateSelectedPrompt", e); + } +} + function toggleUnread_afh(effect) { try { @@ -960,6 +976,8 @@ function selectArticles(mode) { } }); + updateSelectedPrompt(); + } catch (e) { exception_error("selectArticles", e); } @@ -1169,6 +1187,7 @@ function cdmScrollToArticleId(id, force) { function setActiveArticleId(id) { _active_article_id = id; + PluginHost.run(PluginHost.HOOK_ARTICLE_SET_ACTIVE, _active_article_id); } function getActiveArticleId() { @@ -1195,6 +1214,8 @@ function unpackVisibleHeadlines() { var cencw = $("CENCW-" + child.id.replace("RROW-", "")); if (cencw) { + PluginHost.run(PluginHost.HOOK_ARTICLE_RENDERED_CDM, child); + cencw.innerHTML = htmlspecialchars_decode(cencw.innerHTML); cencw.setAttribute('id', ''); Element.show(cencw); @@ -1370,8 +1391,10 @@ function catchupRelativeToArticle(below, id) { } } -function cdmCollapseArticle(event, id) { +function cdmCollapseArticle(event, id, unmark) { try { + if (unmark == undefined) unmark = true; + var row = $("RROW-" + id); var elem = $("CICD-" + id); @@ -1382,40 +1405,26 @@ function cdmCollapseArticle(event, id) { Element.hide(elem); Element.show("CEXC-" + id); Element.hide(collapse); - row.removeClassName("active"); - - markHeadline(id, false); - - if (id == getActiveArticleId()) { - setActiveArticleId(0); - } - - if (event) Event.stop(event); - } - } catch (e) { - exception_error("cdmCollapseArticle", e); - } -} + if (unmark) { + row.removeClassName("active"); -function cdmUnexpandArticle(event, id) { - try { - var row = $("RROW-" + id); - var elem = $("CICD-" + id); + markHeadline(id, false); - if (elem && row) { - var collapse = $$("div#RROW-" + id + - " span[class='collapseBtn']")[0]; + if (id == getActiveArticleId()) { + setActiveArticleId(0); + } - Element.hide(elem); - Element.show("CEXC-" + id); - Element.hide(collapse); + updateSelectedPrompt(); + } if (event) Event.stop(event); + + PluginHost.run(PluginHost.HOOK_ARTICLE_COLLAPSED, id); } } catch (e) { - exception_error("cdmUnexpandArticle", e); + exception_error("cdmCollapseArticle", e); } } @@ -1478,6 +1487,8 @@ function cdmExpandArticle(id, noexpand) { toggleSelected(id); $("RROW-" + id).addClassName("active"); + PluginHost.run(PluginHost.HOOK_ARTICLE_EXPANDED, id); + } catch (e) { exception_error("cdmExpandArticle", e); } @@ -1485,26 +1496,6 @@ function cdmExpandArticle(id, noexpand) { return false; } -function fixHeadlinesOrder(ids) { - try { - for (var i = 0; i < ids.length; i++) { - var e = $("RROW-" + ids[i]); - - if (e) { - if (i % 2 == 0) { - e.removeClassName("even"); - e.addClassName("odd"); - } else { - e.removeClassName("odd"); - e.addClassName("even"); - } - } - } - } catch (e) { - exception_error("fixHeadlinesOrder", e); - } -} - function getArticleUnderPointer() { return post_under_pointer; } @@ -1585,7 +1576,6 @@ function dismissSelectedArticles() { if (sel.length > 0) selectionToggleUnread(false); - fixHeadlinesOrder(tmp); } catch (e) { exception_error("dismissSelectedArticles", e); @@ -1610,8 +1600,6 @@ function dismissReadArticles() { } } - fixHeadlinesOrder(tmp); - } catch (e) { exception_error("dismissSelectedArticles", e); } @@ -2003,34 +1991,6 @@ function initHeadlinesMenu() { } } - -function player(elem) { - var aid = elem.getAttribute("audio-id"); - var status = elem.getAttribute("status"); - - var audio = $(aid); - - if (audio) { - if (status == 0) { - audio.play(); - status = 1; - elem.innerHTML = __("Playing..."); - elem.title = __("Click to pause"); - elem.addClassName("playing"); - } else { - audio.pause(); - status = 0; - elem.innerHTML = __("Play"); - elem.title = __("Click to play"); - elem.removeClassName("playing"); - } - - elem.setAttribute("status", status); - } else { - alert("Your browser doesn't seem to support HTML5 audio."); - } -} - function cache_set(id, obj) { //console.log("cache_set: " + id); if (has_storage) diff --git a/lib/MiniTemplator.class.php b/lib/MiniTemplator.class.php index 69281cb5e..a139473f9 100644 --- a/lib/MiniTemplator.class.php +++ b/lib/MiniTemplator.class.php @@ -336,7 +336,7 @@ function processBeginBlockCmd ($parms, $cmdTPosBegin, $cmdTPosEnd) { $this->openBlocksTab[$this->currentNestingLevel] = $blockNo;
$this->currentNestingLevel += 1;
if ($this->currentNestingLevel > $this->maxNestingLevel) {
- $trhis->triggerError ("Block nesting overflow in template at offset $cmdTPosBegin.");
+ $this->triggerError ("Block nesting overflow in template at offset $cmdTPosBegin.");
return false; }
return true; }
@@ -844,7 +844,7 @@ function readFileIntoString ($fileName, &$s) { $fh = fopen($fileName,"rb");
if ($fh === false) return false;
$fileSize = filesize($fileName);
- if ($fileSize === false) {close ($fh); return false; }
+ if ($fileSize === false) {fclose ($fh); return false; }
$s = fread($fh,$fileSize);
fclose ($fh);
if (strlen($s) != $fileSize) return false;
diff --git a/lib/floIcon.php b/lib/floIcon.php new file mode 100644 index 000000000..59902b6a4 --- /dev/null +++ b/lib/floIcon.php @@ -0,0 +1,849 @@ +<?php +/*************************************************************************** + * Original floIcon copyright (C) 2007 by Joshua Hatfield. * + * * + * In order to use any part of this floIcon Class, you must comply with * + * the license in 'license.doc'. In particular, you may not remove this * + * copyright notice. * + * * + * Much time and thought has gone into this software and you are * + * benefitting. We hope that you share your changes too. What goes * + * around, comes around. * + *************************************************************************** + +Version 1.1.1: +Date: 2009-03-16 + +Changes: +I was a little hasty on that last update. A couple new bugs from 1.1.0 have +been fixed. + +Version 1.1.0: +Date: 2009-03-16 + +Changes: +Added Vista support. +Fixed a number of minor bugs. Many thanks to Dvir Berebi for pointing + them out. + +Version 1.0.5: +Date: 2009-03-15 + +Changes: +Fixed bug when operating on low bit count images (1 or 4) with odd dimensions. + +Version 1.0.4: +Date: 2007-05-25 + +Changes: +Made function not break quite so bad when reading a PNG file on a Vista icon. + Now, you shouldn't be loading Vista icons anyways, but since I'm trying to + upgrade to Vista compatible and I need a comparison, I've got to. + +Version 1.0.3: +Date: 2007-05-25 + +Changes: +Okay, this one was just stupid. When adding large image support, I messed up + and when reading, it doubled the image size. Now, it's fixed. +I took the opportunity to also add a dummy AND map for 32 images on those + readers who might be looking for it (though it's not supposed to be used.) + +Version 1.0.2: +Date: 2007-05-24 + +Sorry about two versions so quickly back to back, but something needed to be +done with speed...things were getting too slow. I'm sure you'll be okay. + +Changes: +Told palette determination to stop at 257 colors or is 32 bit because the + palette is not used at that point and gets really slow when it starts + getting into the high numbers, for instance, in photographs or gradient + truecolor images with lots of unique colors. +After experimenting, it appears that Windows XP does in fact support 256x256 + images and larger by setting the entry value to 0 in the 1 byte that holds + that value and storing the true dimentions in the image header later. Of + course, it still doesn't use these images in normal operation. XP will + resize these and use them if no other images are available. +Wrapped main documentation (this) to the 80th column for easier reading. + +Version 1.0.1: +Date: 2007-05-23 + +Thank you everyone for actively using the implementation on my site and +illuminating me very quickly to a number of glaring bugs in this class. + +Changes: +Added version history. +Fixed bug with non-standard sizes in AND map reading AND writing. +Fixed bug with palette images using non-black color in backgrounds. +Fixed bug with height/width reversal reading files. + + +Version 1.0.0: +Date: 2007-05-17 +Original release date. + + +Foreword: +If you are simply in the effort of making an ICO file, may I recommend visiting +my site, http://www.flobi.com/ , and clicking on floIcon. I have a fully +functional implementation (on which the sample.php is based) where you can also +see recent icons submitted by other visitors. No registration required, no +intrusive ads. (As of this writing, there aren't actually any ads at all, I +might add google ads at some point.) + +If you are trying to get an idea of how ICO files, work, may I recommend the +page I used, http://www.daubnet.com/formats/ICO.html . It does not fully cover +icon files, but it does a very good job of what it does. Any additional +information, I will try to post at +http://www.flobi.com/test/floIcon/more_on_icons.php for your convenience. + +If you are trying to get an idea of how image resource files work, I recommend +ANY other class that deals with images. This class essentially plots points on +the image, and that's not perticularly advanced. + +For any purpose, I wish you luck and feel free to contact me with any bugs, +comments, questions, etc. - Flobi + +Summary: +This class parses ICO files. It reads directly from the ICO file, headers +first, so that if you are only retrieving 1 image, the entire ICO file need not +be parsed. It supports merging ICO files. It supports adding PHP image +resources as new images to the file. It has an export capability that can +easily be written to a new (or the same) ICO file for saving ICO files. All +sizes from 1x1 to 255x255 pixels and 1, 4, 8, 24 (plus transparency) and 32 bit +images are supported. Image retrieval by size is supported. + +Included is a fully functional sample that allows users to upload ICO, GIF, +JPEG and PNG files into a session icon file as well as remove images from the +file and download the completed file (sample.php). + +Known Limitations: Does not support Vista icons. Does not support inversion +palette method (because of the limitations of the PHP image resource). + +Addendum on Limitations: +Windows Vista has added support for 256x256 size icons and now stores files as +PNG's. This class is for older ICO files. A new class is currently under +development that supports the new Windows Vista format. + +Palette inversion (my name for this technique) is the technique of using a black +pixel (0, 0, 0) with a 1 "AND" pixel. White pixels with a 1 "AND" show +transparent (or "don't" show). Black pixels with a 1 "AND" show inverted +(sometimes). Because this method isn't uniformly supported or documented and +the PHP image resource doesn't support it, I have decided to not as well. This +does not apply to 32 bit images which include alpha transparency and no AND map. + +Though other functions exist, these are the only ones I believe offer usefulness +to be public. +floIcon public functions: + readICO($file, $offset = 0) + Loads the icon from the specified filepath ($file) starting at the + specified file offset ($offset). This function MERGES the loaded icon + images into the floIcon object. + + formatICO($offset = 0) + Returns the current floIcon object formatted as an .ICO file with the + file offset altered by $offset. If there are too many or too large + images, causing any images saved past the 4,294,967,296th byte, this + will return false. (This is well outside PHP's default memory + allocation.) + + addImage($imageResource, $desiredBitCount = 1, $pngIfWidthExceeds = 48) + Adds an icon image to the icon file based on the passed image resource + ($imageResource). It will automatically determine the bit count, but + can be persuaded to increase that to $desiredBitCount if that value is + greater than the determined bit count. + + NOTE: The image resource is saved by REFERRENCE. So, if you edit it + then call getImage, the resource returned will be the same, editions and + all. Destruction of the resource will cause a new resource to be + created in getImage(). + + getImage($offset) + Returns the php image resource either assigned by addImage or created + dynamically at calltime by the data loaded with readICO(). The offset + specified here ($offset) is the array offset starting at 0 and ending + at countImages(). + + getBestImage($height = 32, $width = 32) + Returns the php images resource of the highest quality image closest to + the size specified. This could be useful when you only want to display + the icon in an icon list with a single representative icon. A resized + copy of the highest quality available image will be returned if there is + no 32 or 24 bit icon present at the speficied dimentions. + + sortImagesBySize() + Sorts the $this->images array by order of size, smallest to largest. + This is the optimal sorting for icon files. + + countImages() + Returns a count of how many images are present in the current floIcon + object. + +floIcon public variables: + $images + Contains a numerically indexed array of floIconImage objects. + $updated + True if an image has been added since load or last formatICO, otherwise + false. + +floIconImage public functions: + getHeader() + Returns an associative array containing the information from the ICO + image header. + + getEntry() + Returns an associative array containing the information from the ICO + entry header. + + NOTE: If this icon image was created by php image resource, this may not + have accurate information until saving from floIcon with the formatICO() + function. Specifically, offset information will be inaccurate. + + getImageResource() + Returns a php image resource. Same as floIcon's getImage() function. + + setImageResource($imageResource, $desiredBitCount = 1, $pngIfWidthExceeds = 48) + Changes this icon image based on the passed image resource + ($imageResource). It will automatically determine the bit count, but can + be persuaded to increase that to $desiredBitCount if that value is + greater than the determined bit count. + + NOTE: The image resource is saved by REFERRENCE. So, if you edit it + then call getImageResource, the resource returned will be the same, + editions and all. Destruction of the resource will cause a new resource + to be created in getImageResource(). + + dealocateResource() + This destroys the image resource variable, freeing up memory. The image + will automatically be recreated when getImageResource is executed. +*/ +class floIcon { + /* + * $images is an associative array of offset integer => floIconImage object + */ + var $images; // Array of floIconImage objects. + var $updated = false; + function floIcon() { + $this->images = array(); + } + function countImages() { + return count($this->images); + } + function getBestImage($height = 32, $width = 32) { + $best = false; + $bestEntry = array(); + $secondBest = false; + $secondBestEntry = array(); + foreach ($this->images as $key => $image) { + $entry = $image->getEntry(); + $header = $image->getHeader(); + if (!@$entry["BitCount"]) { + $entry["BitCount"] = $header["BitCount"]; + } + if ($entry["Height"] == $height && $entry["Width"] == $width && $entry["BitCount"] == 32) { + return $image->getImageResource(); + } elseif ($entry["Height"] == $height && $entry["Width"] == $width && $entry["BitCount"] > min(4, @$bestEntry["BitCount"])) { + $best = $image; + $bestEntry = $entry; + } elseif ( + !$secondBest or + $entry["Height"] >= $secondBestEntry["Height"] && + $entry["Width"] >= $secondBestEntry["Width"] && + $secondBestEntry["BitCount"] >= $secondBestEntry["BitCount"] and + ( + $entry["Height"] <= 64 && $entry["Height"] > $secondBestEntry["Height"] and + $entry["Height"] > 64 && $entry["Height"] < $secondBestEntry["Height"] + ) || + ( + $entry["Width"] <= 64 && $entry["Width"] > $secondBestEntry["Width"] and + $entry["Width"] > 64 && $entry["Width"] < $secondBestEntry["Width"] + ) || + $secondBestEntry["BitCount"] > $secondBestEntry["BitCount"] + ) { + $secondBest = $image; + $secondBestEntry = $entry; + } + } + if ($best) { + return $best->getImageResource(); + } elseif ($secondBest) { + if ($secondBestEntry["Width"] != $width || $secondBestEntry["Height"] != $height) { + $imageResource = $secondBest->getImageResource(); + $newImageResource = imagecreatetruecolor($width, $height); + imagesavealpha($newImageResource, true); + imagealphablending($newImageResource, false); + imagecopyresampled($newImageResource, $imageResource, 0, 0, 0, 0, $width, $height, $secondBestEntry["Width"], $secondBestEntry["Height"]); + $this->addImage($newImageResource, 32); + return $newImageResource; + } else { + return $secondBest->getImageResource(); + } + } + } + /* + * readICO merges the icon images from the file to the current list + */ + function readICO($file, $offset = 0) { + if (file_exists($file) && filesize($file) > 0 && $filePointer = fopen($file, "r")) { + fseek($filePointer, $offset); + $header = unpack("SReserved/SType/SCount", fread($filePointer, 6)); + for ($t = 0; $t < $header["Count"]; $t++) { + $newImage = new floIconImage(); + if ($newImage->readImageFromICO($filePointer, 6 + ($t * 16))) { + $this->images[] = $newImage; + } + } + fclose($filePointer); + } + } + function sortImagesBySize() { + usort($this->images, array("floIcon", "_cmpObj")); + } + function formatICO($offset = 0) { + $this->updated = false; + $output = ""; + $output .= pack("SSS", 0, 1, count($this->images)); + $output_images = ""; + foreach ($this->images as $image) { + $newImageOffset = $offset + // Whatever offset we've been given. + 6 // Header. + + (count($this->images) * 16) // Entries. + + strlen($output_images); + if ($newImageOffset > pow(256, 4) /* 4 bytes available for position */ ) { + return false; + } + $output .= $image->formatEntryForIco($newImageOffset); // The images already in there. + $output_images .= $image->formatImageForIco(); + } + return $output.$output_images; + } + function _cmpObj($a, $b) { + $aSize = $a->getSize(); + $bSize = $b->getSize(); + if ($aSize == $bSize) { + return 0; + } + return ($aSize > $bSize)?1:-1; + } + + function addImage($imageResource, $desiredBitCount = 1, $pngIfWidthExceeds = 48) { + $this->updated = true; + $newImage = new floIconImage(); + $newImage->setImageResource($imageResource, $desiredBitCount, $pngIfWidthExceeds); + $this->images[] = $newImage; + } + function getImage($offset) { + if (isset($this->images[$offset])) { + return $this->images[$offset]->getImageResource(); + } else { + return false; + } + } + /* + * getSize computes the + */ + function getSize() { + // Compute headers. + $computedSize = 6; // Always 6 bytes. + // Add image entry headers + $computedSize += count($this->images) * 16; // Entry headers are always 16 bytes. + foreach ($this->images as $image) { + $computedSize += $image->getSize() + $image->getHeaderSize(); // getSize does not include the header. + } + } +} +class floIconImage { + var $_imageResource = null; + var $_entry = ""; + var $_entryIconFormat = ""; + var $_header = ""; + var $_headerIconFormat = ""; + var $_imageIconFormat = ""; // Includes palette and mask. + function formatEntryForIco($offset) { + // Format the entry, this has to be done here because we need the offset to get the full information. + $this->_entry["FileOffset"] = $offset; + $this->_entryIconFormat = pack("CCCCSSLL", + $this->_entry["Width"]>=256?0:$this->_entry["Width"], + $this->_entry["Height"]>=256?0:$this->_entry["Height"], + $this->_entry["ColorCount"], + $this->_entry["Reserved"], + $this->_entry["Planes"], + $this->_entry["BitCount"], + $this->_entry["SizeInBytes"], + $this->_entry["FileOffset"] + ); + return $this->_entryIconFormat; + } + function formatImageForIco() { + // Format the entry, this has to be done here because we need the offset to get the full information. + return ($this->_headerIconFormat.$this->_imageIconFormat); + } + + // Will move $bitCount UP to $desiredBitCount if $bitCount is found to be less than it. + function setImageResource($imageResource, $desiredBitCount = 1, $pngIfWidthExceeds = 48) { + imagesavealpha($imageResource, true); + imagealphablending($imageResource, false); + $height = imagesy($imageResource); + $width = imagesx($imageResource); + + // Parse resource to determine header and icon format + + // Find Palette information + $is_32bit = false; // Start with an assumption and get proven wrong. + $hasTransparency = 0; + $blackColor = false; + $bitCount = 0; + $realPalette = array(); + $realIndexPalette = array(); + for ($x = 0; $x < $width && !$is_32bit; $x++) { + for ($y = 0; $y < $height && !$is_32bit; $y++) { + $colorIndex = imagecolorat($imageResource, $x, $y); + $color = imagecolorsforindex($imageResource, $colorIndex); + if ($color["alpha"] == 0) { + // No point continuing if there's more than 256 colors or it's 32bit. + if (count($realPalette) < 257 && !$is_32bit) { + $inRealPalette = false; + foreach($realPalette as $realPaletteKey => $realPaletteColor) { + if ( + $color["red"] == $realPaletteColor["red"] and + $color["green"] == $realPaletteColor["green"] and + $color["blue"] == $realPaletteColor["blue"] + ) { + $inRealPalette = $realPaletteKey; + break; + } + } + if ($inRealPalette === false) { + $realIndexPalette[$colorIndex] = count($realPalette); + if ( + $blackColor === false and + $color["red"] == 0 and + $color["green"] == 0 and + $color["blue"] == 0 + ) { + $blackColor = count($realPalette); + } + $realPalette[] = $color; + } else { + $realIndexPalette[$colorIndex] = $inRealPalette; + } + } + } else { + $hasTransparency = 1; + } + if ($color["alpha"] != 0 && $color["alpha"] != 127) { + $is_32bit = true; + } + } + } + if ($is_32bit) { + $colorCount = 0; + $bitCount = 32; + } else { + if ($hasTransparency && $blackColor === false) { + // We need a black color to facilitate transparency. Unfortunately, this can + // increase the palette size by 1 if there's no other black color. + $blackColor = count($realPalette); + $color = array( + "red" => 0, + "blue" => 0, + "green" => 0, + "alpha" => 0 + ); + $realPalette[] = $color; + } + $colorCount = count($realPalette); + if ($colorCount > 256 || $colorCount == 0) { + $bitCount = 24; + } elseif ($colorCount > 16) { + $bitCount = 8; + // 8 bit + } elseif ($colorCount > 2) { + $bitCount = 4; + // 4 bit + } else { + $bitCount = 1; + // 1 bit + } + if ($desiredBitCount > $bitCount) { + $bitCount = $desiredBitCount; + } + switch ($bitCount) { + case 24: + $colorCount = 0; + break; + case 8: + $colorCount = 256; + break; + case 4: + $colorCount = 16; + break; + case 1: + $colorCount = 2; + break; + } + } + // Create $this->_imageIconFormat... + $this->_imageIconFormat = ""; + if ($bitCount < 24) { + $iconPalette = array(); + // Save Palette + foreach ($realIndexPalette as $colorIndex => $paletteIndex) { + $color = $realPalette[$paletteIndex]; + $this->_imageIconFormat .= pack("CCCC", $color["blue"], $color["green"], $color["red"], 0); + } + while (strlen($this->_imageIconFormat) < $colorCount * 4) { + $this->_imageIconFormat .= pack("CCCC", 0, 0, 0, 0); + } + // Save Each Pixel as Palette Entry + $byte = 0; // For $bitCount < 8 math + $bitPosition = 0; // For $bitCount < 8 math + for ($y = 0; $y < $height; $y++) { + for ($x = 0; $x < $width; $x++) { + $color = imagecolorat($imageResource, $x, $height-$y-1); + if (isset($realIndexPalette[$color])) { + $color = $realIndexPalette[$color]; + } else { + $color = $blackColor; + } + + if ($bitCount < 8) { + $bitPosition += $bitCount; + $colorAdjusted = $color * pow(2, 8 - $bitPosition); + $byte += $colorAdjusted; + if ($bitPosition == 8) { + $this->_imageIconFormat .= chr($byte); + $bitPosition = 0; + $byte = 0; + } + } else { + $this->_imageIconFormat .= chr($color); + } + } + // Each row ends with dumping the remaining bits and filling up to the 32bit line with 0's. + if ($bitPosition) { + $this->_imageIconFormat .= chr($byte); + $bitPosition = 0; + $byte = 0; + } + if (strlen($this->_imageIconFormat)%4) $this->_imageIconFormat .= str_repeat(chr(0), 4-(strlen($this->_imageIconFormat)%4)); + } + } else { + // Save each pixel. + for ($y = 0; $y < $height; $y++) { + for ($x = 0; $x < $width; $x++) { + $color = imagecolorat($imageResource, $x, $height-$y-1); + $color = imagecolorsforindex($imageResource, $color); + if ($bitCount == 24) { + if ($color["alpha"]) { + $this->_imageIconFormat .= pack("CCC", 0, 0, 0); + } else { + $this->_imageIconFormat .= pack("CCC", $color["blue"], $color["green"], $color["red"]); + } + } else { + $color["alpha"] = round((127-$color["alpha"]) / 127 * 255); + $this->_imageIconFormat .= pack("CCCC", $color["blue"], $color["green"], $color["red"], $color["alpha"]); + } + } + if (strlen($this->_imageIconFormat)%4) $this->_imageIconFormat .= str_repeat(chr(0), 4-(strlen($this->_imageIconFormat)%4)); + } + } + // save AND map (transparency) + $byte = 0; // For $bitCount < 8 math + $bitPosition = 0; // For $bitCount < 8 math + for ($y = 0; $y < $height; $y++) { + for ($x = 0; $x < $width; $x++) { + if ($bitCount < 32) { + $color = imagecolorat($imageResource, $x, $height-$y-1); + $color = imagecolorsforindex($imageResource, $color); + $color = $color["alpha"] == 127?1:0; + } else { + $color = 0; + } + + $bitPosition += 1; + $colorAdjusted = $color * pow(2, 8 - $bitPosition); + $byte += $colorAdjusted; + if ($bitPosition == 8) { + $this->_imageIconFormat .= chr($byte); + $bitPosition = 0; + $byte = 0; + } + } + // Each row ends with dumping the remaining bits and filling up to the 32bit line with 0's. + if ($bitPosition) { + $this->_imageIconFormat .= chr($byte); + $bitPosition = 0; // For $bitCount < 8 math + $byte = 0; + } + while (strlen($this->_imageIconFormat)%4) { + $this->_imageIconFormat .= chr(0); + } + } + if ($colorCount >= 256) { + $colorCount = 0; + } + // Create header information... + $this->_header = array( + "Size" => 40, + "Width" => $width, + "Height" => $height*2, + "Planes" => 1, + "BitCount" => $bitCount, + "Compression" => 0, + "ImageSize" => strlen($this->_imageIconFormat), + "XpixelsPerM" => 0, + "YpixelsPerM" => 0, + "ColorsUsed" => $colorCount, + "ColorsImportant" => 0, + ); + $this->_headerIconFormat = pack("LLLSSLLLLLL", + $this->_header["Size"], + $this->_header["Width"], + $this->_header["Height"], + + $this->_header["Planes"], + $this->_header["BitCount"], + + $this->_header["Compression"], + $this->_header["ImageSize"], + $this->_header["XpixelsPerM"], + $this->_header["YpixelsPerM"], + $this->_header["ColorsUsed"], + $this->_header["ColorsImportant"] + ); + $this->_entry = array( + "Width" => $width, + "Height" => $height, + "ColorCount" => $colorCount, + "Reserved" => 0, + "Planes" => 1, + "BitCount" => $bitCount, + "SizeInBytes" => $this->_header["Size"] + $this->_header["ImageSize"], + "FileOffset" => -1, + ); + $this->_entryIconFormat = ""; // This won't get set until it's needed with the offset. + $this->_imageResource = $imageResource; + + // Make png if width exceeds limit for old ico style + if ($width > $pngIfWidthExceeds) { + // I wish there were a better way to get the info than this. If anyone needs a version that doesn't use OB, I can have one that creates a TMP file. + ob_start(); + imagepng($imageResource); + $imageAsPng = ob_get_contents(); + ob_end_clean(); + $this->_headerIconFormat = ""; + $this->_imageIconFormat = $imageAsPng; + } + + + } + function _createImageResource() { + if ($newImage = @imagecreatefromstring($this->_headerIconFormat.$this->_imageIconFormat)) { + // Vista supports PNG. + $this->_headerIconFormat = ""; + $this->_imageIconFormat = $this->_headerIconFormat.$this->_imageIconFormat; + imagesavealpha($newImage, true); + imagealphablending($newImage, false); + $this->_imageResource = $newImage; + } elseif ($this->_entry["Height"] <= 1024 && $this->_entry["Width"] <= 1024) { + $newImage = imagecreatetruecolor($this->_entry["Width"], $this->_entry["Height"]); + imagesavealpha($newImage, true); + imagealphablending($newImage, false); + $readPosition = 0; + $palette = array(); + if ($this->_header["BitCount"] < 24) { + // Read Palette for low bitcounts + $colorsInPalette = $this->_header["ColorsUsed"]?$this->_header["ColorsUsed"]:$this->_entry["ColorCount"]; + for ($t = 0; $t < pow(2, $this->_header["BitCount"]); $t++) { + $blue = ord($this->_imageIconFormat[$readPosition++]); + $green = ord($this->_imageIconFormat[$readPosition++]); + $red = ord($this->_imageIconFormat[$readPosition++]); + $readPosition++; // Unused "Reserved" value. + $existingPaletteEntry = imagecolorexactalpha($newImage, $red, $green, $blue, 0); + if ($existingPaletteEntry >= 0) { + $palette[] = $existingPaletteEntry; + } else { + $palette[] = imagecolorallocatealpha($newImage, $red, $green, $blue, 0); + } + } + // XOR + for ($y = 0; $y < $this->_entry["Height"]; $y++) { + $colors = array(); + for ($x = 0; $x < $this->_entry["Width"]; $x++) { + if ($this->_header["BitCount"] < 8) { + $color = array_shift($colors); + if (is_null($color)) { + $byte = ord($this->_imageIconFormat[$readPosition++]); + $tmp_color = 0; + for ($t = 7; $t >= 0; $t--) { + $bit_value = pow(2, $t); + $bit = floor($byte / $bit_value); + $byte = $byte - ($bit * $bit_value); + $tmp_color += $bit * pow(2, $t%$this->_header["BitCount"]); + if ($t%$this->_header["BitCount"] == 0) { + array_push($colors, $tmp_color); + $tmp_color = 0; + } + } + $color = array_shift($colors); + } + } else { + $color = ord($this->_imageIconFormat[$readPosition++]); + } + imagesetpixel($newImage, $x, $this->_entry["Height"]-$y-1, $palette[$color]) or die("can't set pixel"); + } + // All rows end on the 32 bit + if ($readPosition%4) $readPosition += 4-($readPosition%4); + } + } else { + // BitCount >= 24, No Palette. + // marking position because some icons mark all pixels transparent when using an AND map. + $markPosition = $readPosition; + $retry = true; + $ignoreAlpha = false; + while ($retry) { + $alphas = array(); + $retry = false; + for ($y = 0; $y < $this->_entry["Height"] and !$retry; $y++) { + for ($x = 0; $x < $this->_entry["Width"] and !$retry; $x++) { + $blue = ord($this->_imageIconFormat[$readPosition++]); + $green = ord($this->_imageIconFormat[$readPosition++]); + $red = ord($this->_imageIconFormat[$readPosition++]); + if ($this->_header["BitCount"] < 32) { + $alpha = 0; + } elseif($ignoreAlpha) { + $alpha = 0; + $readPosition++; + } else { + $alpha = ord($this->_imageIconFormat[$readPosition++]); + $alphas[$alpha] = $alpha; + $alpha = 127-round($alpha/255*127); + } + $paletteEntry = imagecolorexactalpha($newImage, $red, $green, $blue, $alpha); + if ($paletteEntry < 0) { + $paletteEntry = imagecolorallocatealpha($newImage, $red, $green, $blue, $alpha); + } + imagesetpixel($newImage, $x, $this->_entry["Height"]-$y-1, $paletteEntry) or die("can't set pixel"); + } + if ($readPosition%4) $readPosition += 4-($readPosition%4); + } + if ($this->_header["BitCount"] == 32 && isset($alphas[0]) && count($alphas) == 1) { + $retry = true; + $readPosition = $markPosition; + $ignoreAlpha = true; + } + } + + } + // AND map + if ($this->_header["BitCount"] < 32 || $ignoreAlpha) { + // Bitcount == 32, No AND (if using alpha). + $palette[-1] = imagecolorallocatealpha($newImage, 0, 0, 0, 127); + imagecolortransparent($newImage, $palette[-1]); + for ($y = 0; $y < $this->_entry["Height"]; $y++) { + $colors = array(); + for ($x = 0; $x < $this->_entry["Width"]; $x++) { + $color = array_shift($colors); + if (is_null($color)) { + $byte = ord($this->_imageIconFormat[$readPosition++]); + $tmp_color = 0; + for ($t = 7; $t >= 0; $t--) { + $bit_value = pow(2, $t); + $bit = floor($byte / $bit_value); + $byte = $byte - ($bit * $bit_value); + array_push($colors, $bit); + } + $color = array_shift($colors); + } + if ($color) { + imagesetpixel($newImage, $x, $this->_entry["Height"]-$y-1, $palette[-1]) or die("can't set pixel"); + } + } + // All rows end on the 32 bit. + if ($readPosition%4) $readPosition += 4-($readPosition%4); + } + } + if ($this->_header["BitCount"] < 24) { + imagetruecolortopalette($newImage, true, pow(2, $this->_header["BitCount"])); + } + } + $this->_imageResource = $newImage; + } + // this function expects that $_entry, $_header and $_imageIconFormat have already been read, specifically from readImageFromICO. + // Don't call this function except from there. + function readImageFromICO($filePointer, $entryOffset) { + $tmpPosition = ftell($filePointer); // So any other applications won't loose their position. + // Get the entry. + fseek($filePointer, $entryOffset); + $this->_entryIconFormat = fread($filePointer, 16); + $this->_entry = unpack("CWidth/CHeight/CColorCount/CReserved/SPlanes/SBitCount/LSizeInBytes/LFileOffset", $this->_entryIconFormat); + + if ($this->_entry["SizeInBytes"] > 16384) + return false; + + // Position the file pointer. + fseek($filePointer, $this->_entry["FileOffset"]); + + // Get the header. + $this->_headerIconFormat = fread($filePointer, 40); + $this->_header = unpack("LSize/LWidth/LHeight/SPlanes/SBitCount/LCompression/LImageSize/LXpixelsPerM/LYpixelsPerM/LColorsUsed/LColorsImportant", $this->_headerIconFormat); + + // Get the image. + $this->_imageIconFormat = @fread($filePointer, $this->_entry["SizeInBytes"] - strlen($this->_headerIconFormat)); + fseek($filePointer, $tmpPosition); // So any other applications won't loose their position. + + if ($newImage = @imagecreatefromstring($this->_headerIconFormat.$this->_imageIconFormat)) { + // This is a PNG, the supposed header information is useless. + $this->_header = array ( + "Size" => 0, + "Width" => imagesx($newImage), + "Height" => imagesy($newImage) * 2, + "Planes" => 0, + "BitCount" => 32, + "Compression" => 0, + "ImageSize" => strlen($this->_imageIconFormat), + "XpixelsPerM" => 0, + "YpixelsPerM" => 0, + "ColorsUsed" => 0, + "ColorsImportant" => 0, + ); + imagedestroy($newImage); + } + + // Support for larger images requires entry marked as 0. + if ($this->_entry["Width"] == 0) { + $this->_entry["Width"] = $this->_header["Width"]; + } + if ($this->_entry["Height"] == 0) { + $this->_entry["Height"] = $this->_header["Height"]/2; + } + + return true; + } + function getHeader() { + return $this->_header; + } + function getEntry() { + return $this->_entry; + } + function floIconImage() { + } + function getHeaderSize() { + return strlen($this->_headerIconFormat); + } + function getSize() { + return strlen($this->_imageIconFormat); + } + function getImageResource() { + if (!$this->_imageResource) $this->_createImageResource(); + return $this->_imageResource; + } + function dealocateResource() { + @imagedestroy($this->_imageResource); + $this->_imageResource = null; + } +} +?> diff --git a/lib/index.html b/lib/index.html new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/lib/index.html diff --git a/lib/phpqrcode/bindings/tcpdf/qrcode.php b/lib/phpqrcode/bindings/tcpdf/qrcode.php index 7995460b5..9001e3a2e 100644 --- a/lib/phpqrcode/bindings/tcpdf/qrcode.php +++ b/lib/phpqrcode/bindings/tcpdf/qrcode.php @@ -1101,7 +1101,7 @@ if (!class_exists('QRcode', false)) { protected function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false) { $b = 0; $bitMask = array(); - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + $bitMask = $this->generateMaskNo($maskNo, $width, $s); if ($maskGenOnly) { return; } @@ -1399,7 +1399,7 @@ if (!class_exists('QRcode', false)) { $p += 2; } $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr)); - return $run; + return $p; } /** @@ -1470,7 +1470,7 @@ if (!class_exists('QRcode', false)) { break; } case QR_MODE_KJ: { - if ($hint == QR_MODE_KJ) { + if ($this->hint == QR_MODE_KJ) { $length = $this->eatKanji(); } else { $length = $this->eat8(); @@ -1499,7 +1499,7 @@ if (!class_exists('QRcode', false)) { $stringLen = strlen($this->dataStr); $p = 0; while ($p < $stringLen) { - $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint); + $mode = $this->identifyMode(substr($this->dataStr, $p)); if ($mode == QR_MODE_KJ) { $p += 2; } else { diff --git a/lib/phpqrcode/phpqrcode.php b/lib/phpqrcode/phpqrcode.php index 80adb9df2..02b877639 100644 --- a/lib/phpqrcode/phpqrcode.php +++ b/lib/phpqrcode/phpqrcode.php @@ -2195,7 +2195,7 @@ case QR_MODE_NUM: $length = $this->eatNum(); break;
case QR_MODE_AN: $length = $this->eatAn(); break;
case QR_MODE_KANJI:
- if ($hint == QR_MODE_KANJI)
+ if ($this->modeHint == QR_MODE_KANJI)
$length = $this->eatKanji();
else $length = $this->eat8();
break;
@@ -2217,7 +2217,7 @@ $p = 0;
while ($p<$stringLen) {
- $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);
+ $mode = self::identifyMode(substr($this->dataStr, $p));
if($mode == QR_MODE_KANJI) {
$p += 2;
} else {
@@ -2621,13 +2621,13 @@ if (file_exists($fileName)) {
$bitMask = self::unserial(file_get_contents($fileName));
} else {
- $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
+ $bitMask = $this->generateMaskNo($maskNo, $width, $s);
if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo))
mkdir(QR_CACHE_DIR.'mask_'.$maskNo);
file_put_contents($fileName, self::serial($bitMask));
}
} else {
- $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
+ $bitMask = $this->generateMaskNo($maskNo, $width, $s);
}
if ($maskGenOnly)
@@ -2937,7 +2937,7 @@ //----------------------------------------------------------------------
public function getCode()
{
- $ret;
+ $ret = 0;
if($this->count < $this->dataLength) {
$row = $this->count % $this->blocks;
@@ -3059,7 +3059,7 @@ $input = new QRinput($version, $level);
if($input == NULL) return NULL;
- $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string));
+ $ret = $input->append(QR_MODE_8, strlen($string), str_split($string));
if($ret < 0) {
unset($input);
return NULL;
diff --git a/lib/phpqrcode/qrencode.php b/lib/phpqrcode/qrencode.php index 4b77a5bdd..5bdeaec20 100644 --- a/lib/phpqrcode/qrencode.php +++ b/lib/phpqrcode/qrencode.php @@ -129,7 +129,7 @@ //----------------------------------------------------------------------
public function getCode()
{
- $ret;
+ $ret = 0;
if($this->count < $this->dataLength) {
$row = $this->count % $this->blocks;
diff --git a/lib/phpqrcode/qrmask.php b/lib/phpqrcode/qrmask.php index b14d7ae16..43d653ce3 100644 --- a/lib/phpqrcode/qrmask.php +++ b/lib/phpqrcode/qrmask.php @@ -149,13 +149,13 @@ if (file_exists($fileName)) {
$bitMask = self::unserial(file_get_contents($fileName));
} else {
- $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
+ $bitMask = $this->generateMaskNo($maskNo, $width, $s);
if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo))
mkdir(QR_CACHE_DIR.'mask_'.$maskNo);
file_put_contents($fileName, self::serial($bitMask));
}
} else {
- $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
+ $bitMask = $this->generateMaskNo($maskNo, $width, $s);
}
if ($maskGenOnly)
diff --git a/lib/phpqrcode/qrsplit.php b/lib/phpqrcode/qrsplit.php index d75b82737..1f9f65c3b 100644 --- a/lib/phpqrcode/qrsplit.php +++ b/lib/phpqrcode/qrsplit.php @@ -186,7 +186,7 @@ if($ret < 0)
return -1;
- return $run;
+ return $ret;
}
//----------------------------------------------------------------------
@@ -258,7 +258,7 @@ case QR_MODE_NUM: $length = $this->eatNum(); break;
case QR_MODE_AN: $length = $this->eatAn(); break;
case QR_MODE_KANJI:
- if ($hint == QR_MODE_KANJI)
+ if ($this->modeHint == QR_MODE_KANJI)
$length = $this->eatKanji();
else $length = $this->eat8();
break;
@@ -280,7 +280,7 @@ $p = 0;
while ($p<$stringLen) {
- $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);
+ $mode = self::identifyMode(substr($this->dataStr, $p));
if($mode == QR_MODE_KANJI) {
$p += 2;
} else {
@@ -308,4 +308,4 @@ return $split->splitString();
}
- }
\ No newline at end of file + } diff --git a/lib/simplepie/simplepie.inc b/lib/simplepie/simplepie.inc deleted file mode 100644 index 332c2e709..000000000 --- a/lib/simplepie/simplepie.inc +++ /dev/null @@ -1,17772 +0,0 @@ -<?php -/** - * SimplePie - * - * A PHP-Based RSS and Atom Feed Framework. - * Takes the hard work out of managing a complete RSS/Atom solution. - * - * Please note: This file is automatically generated by a build script. The - * full original source is always available from http://simplepie.org/ - * - * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * * Neither the name of the SimplePie Team nor the names of its contributors may be used - * to endorse or promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS - * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * @package SimplePie - * @version 1.3.1 - * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue - * @author Ryan Parman - * @author Geoffrey Sneddon - * @author Ryan McCue - * @link http://simplepie.org/ SimplePie - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - */ - -/** - * SimplePie Name - */ -define('SIMPLEPIE_NAME', 'SimplePie'); - -/** - * SimplePie Version - */ -define('SIMPLEPIE_VERSION', '1.3.1'); - -/** - * SimplePie Build - * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::get_build() only every load of simplepie.inc) - */ -define('SIMPLEPIE_BUILD', '20121030175911'); - -/** - * SimplePie Website URL - */ -define('SIMPLEPIE_URL', 'http://simplepie.org'); - -/** - * SimplePie Useragent - * @see SimplePie::set_useragent() - */ -define('SIMPLEPIE_USERAGENT', SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION . ' (Feed Parser; ' . SIMPLEPIE_URL . '; Allow like Gecko) Build/' . SIMPLEPIE_BUILD); - -/** - * SimplePie Linkback - */ -define('SIMPLEPIE_LINKBACK', '<a href="' . SIMPLEPIE_URL . '" title="' . SIMPLEPIE_NAME . ' ' . SIMPLEPIE_VERSION . '">' . SIMPLEPIE_NAME . '</a>'); - -/** - * No Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_NONE', 0); - -/** - * Feed Link Element Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1); - -/** - * Local Feed Extension Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2); - -/** - * Local Feed Body Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4); - -/** - * Remote Feed Extension Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8); - -/** - * Remote Feed Body Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16); - -/** - * All Feed Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_ALL', 31); - -/** - * No known feed type - */ -define('SIMPLEPIE_TYPE_NONE', 0); - -/** - * RSS 0.90 - */ -define('SIMPLEPIE_TYPE_RSS_090', 1); - -/** - * RSS 0.91 (Netscape) - */ -define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2); - -/** - * RSS 0.91 (Userland) - */ -define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4); - -/** - * RSS 0.91 (both Netscape and Userland) - */ -define('SIMPLEPIE_TYPE_RSS_091', 6); - -/** - * RSS 0.92 - */ -define('SIMPLEPIE_TYPE_RSS_092', 8); - -/** - * RSS 0.93 - */ -define('SIMPLEPIE_TYPE_RSS_093', 16); - -/** - * RSS 0.94 - */ -define('SIMPLEPIE_TYPE_RSS_094', 32); - -/** - * RSS 1.0 - */ -define('SIMPLEPIE_TYPE_RSS_10', 64); - -/** - * RSS 2.0 - */ -define('SIMPLEPIE_TYPE_RSS_20', 128); - -/** - * RDF-based RSS - */ -define('SIMPLEPIE_TYPE_RSS_RDF', 65); - -/** - * Non-RDF-based RSS (truly intended as syndication format) - */ -define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190); - -/** - * All RSS - */ -define('SIMPLEPIE_TYPE_RSS_ALL', 255); - -/** - * Atom 0.3 - */ -define('SIMPLEPIE_TYPE_ATOM_03', 256); - -/** - * Atom 1.0 - */ -define('SIMPLEPIE_TYPE_ATOM_10', 512); - -/** - * All Atom - */ -define('SIMPLEPIE_TYPE_ATOM_ALL', 768); - -/** - * All feed types - */ -define('SIMPLEPIE_TYPE_ALL', 1023); - -/** - * No construct - */ -define('SIMPLEPIE_CONSTRUCT_NONE', 0); - -/** - * Text construct - */ -define('SIMPLEPIE_CONSTRUCT_TEXT', 1); - -/** - * HTML construct - */ -define('SIMPLEPIE_CONSTRUCT_HTML', 2); - -/** - * XHTML construct - */ -define('SIMPLEPIE_CONSTRUCT_XHTML', 4); - -/** - * base64-encoded construct - */ -define('SIMPLEPIE_CONSTRUCT_BASE64', 8); - -/** - * IRI construct - */ -define('SIMPLEPIE_CONSTRUCT_IRI', 16); - -/** - * A construct that might be HTML - */ -define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32); - -/** - * All constructs - */ -define('SIMPLEPIE_CONSTRUCT_ALL', 63); - -/** - * Don't change case - */ -define('SIMPLEPIE_SAME_CASE', 1); - -/** - * Change to lowercase - */ -define('SIMPLEPIE_LOWERCASE', 2); - -/** - * Change to uppercase - */ -define('SIMPLEPIE_UPPERCASE', 4); - -/** - * PCRE for HTML attributes - */ -define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*'); - -/** - * PCRE for XML attributes - */ -define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*'); - -/** - * XML Namespace - */ -define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace'); - -/** - * Atom 1.0 Namespace - */ -define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom'); - -/** - * Atom 0.3 Namespace - */ -define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#'); - -/** - * RDF Namespace - */ -define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); - -/** - * RSS 0.90 Namespace - */ -define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/'); - -/** - * RSS 1.0 Namespace - */ -define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/'); - -/** - * RSS 1.0 Content Module Namespace - */ -define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/'); - -/** - * RSS 2.0 Namespace - * (Stupid, I know, but I'm certain it will confuse people less with support.) - */ -define('SIMPLEPIE_NAMESPACE_RSS_20', ''); - -/** - * DC 1.0 Namespace - */ -define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/'); - -/** - * DC 1.1 Namespace - */ -define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/'); - -/** - * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace - */ -define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#'); - -/** - * GeoRSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss'); - -/** - * Media RSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/'); - -/** - * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec. - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', 'http://search.yahoo.com/mrss'); - -/** - * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5. - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2', 'http://video.search.yahoo.com/mrss'); - -/** - * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace. - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3', 'http://video.search.yahoo.com/mrss/'); - -/** - * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace. - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4', 'http://www.rssboard.org/media-rss'); - -/** - * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL. - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5', 'http://www.rssboard.org/media-rss/'); - -/** - * iTunes RSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - -/** - * XHTML Namespace - */ -define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml'); - -/** - * IANA Link Relations Registry - */ -define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/'); - -/** - * No file source - */ -define('SIMPLEPIE_FILE_SOURCE_NONE', 0); - -/** - * Remote file source - */ -define('SIMPLEPIE_FILE_SOURCE_REMOTE', 1); - -/** - * Local file source - */ -define('SIMPLEPIE_FILE_SOURCE_LOCAL', 2); - -/** - * fsockopen() file source - */ -define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', 4); - -/** - * cURL file source - */ -define('SIMPLEPIE_FILE_SOURCE_CURL', 8); - -/** - * file_get_contents() file source - */ -define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', 16); - -/** - * SimplePie - * - * @package SimplePie - * @subpackage API - */ -class SimplePie -{ - /** - * @var array Raw data - * @access private - */ - public $data = array(); - - /** - * @var mixed Error string - * @access private - */ - public $error; - - /** - * @var object Instance of SimplePie_Sanitize (or other class) - * @see SimplePie::set_sanitize_class() - * @access private - */ - public $sanitize; - - /** - * @var string SimplePie Useragent - * @see SimplePie::set_useragent() - * @access private - */ - public $useragent = SIMPLEPIE_USERAGENT; - - /** - * @var string Feed URL - * @see SimplePie::set_feed_url() - * @access private - */ - public $feed_url; - - /** - * @var object Instance of SimplePie_File to use as a feed - * @see SimplePie::set_file() - * @access private - */ - public $file; - - /** - * @var string Raw feed data - * @see SimplePie::set_raw_data() - * @access private - */ - public $raw_data; - - /** - * @var int Timeout for fetching remote files - * @see SimplePie::set_timeout() - * @access private - */ - public $timeout = 10; - - /** - * @var bool Forces fsockopen() to be used for remote files instead - * of cURL, even if a new enough version is installed - * @see SimplePie::force_fsockopen() - * @access private - */ - public $force_fsockopen = false; - - /** - * @var bool Force the given data/URL to be treated as a feed no matter what - * it appears like - * @see SimplePie::force_feed() - * @access private - */ - public $force_feed = false; - - /** - * @var bool Enable/Disable Caching - * @see SimplePie::enable_cache() - * @access private - */ - public $cache = true; - - /** - * @var int Cache duration (in seconds) - * @see SimplePie::set_cache_duration() - * @access private - */ - public $cache_duration = 3600; - - /** - * @var int Auto-discovery cache duration (in seconds) - * @see SimplePie::set_autodiscovery_cache_duration() - * @access private - */ - public $autodiscovery_cache_duration = 604800; // 7 Days. - - /** - * @var string Cache location (relative to executing script) - * @see SimplePie::set_cache_location() - * @access private - */ - public $cache_location = './cache'; - - /** - * @var string Function that creates the cache filename - * @see SimplePie::set_cache_name_function() - * @access private - */ - public $cache_name_function = 'md5'; - - /** - * @var bool Reorder feed by date descending - * @see SimplePie::enable_order_by_date() - * @access private - */ - public $order_by_date = true; - - /** - * @var mixed Force input encoding to be set to the follow value - * (false, or anything type-cast to false, disables this feature) - * @see SimplePie::set_input_encoding() - * @access private - */ - public $input_encoding = false; - - /** - * @var int Feed Autodiscovery Level - * @see SimplePie::set_autodiscovery_level() - * @access private - */ - public $autodiscovery = SIMPLEPIE_LOCATOR_ALL; - - /** - * Class registry object - * - * @var SimplePie_Registry - */ - public $registry; - - /** - * @var int Maximum number of feeds to check with autodiscovery - * @see SimplePie::set_max_checked_feeds() - * @access private - */ - public $max_checked_feeds = 10; - - /** - * @var array All the feeds found during the autodiscovery process - * @see SimplePie::get_all_discovered_feeds() - * @access private - */ - public $all_discovered_feeds = array(); - - /** - * @var string Web-accessible path to the handler_image.php file. - * @see SimplePie::set_image_handler() - * @access private - */ - public $image_handler = ''; - - /** - * @var array Stores the URLs when multiple feeds are being initialized. - * @see SimplePie::set_feed_url() - * @access private - */ - public $multifeed_url = array(); - - /** - * @var array Stores SimplePie objects when multiple feeds initialized. - * @access private - */ - public $multifeed_objects = array(); - - /** - * @var array Stores the get_object_vars() array for use with multifeeds. - * @see SimplePie::set_feed_url() - * @access private - */ - public $config_settings = null; - - /** - * @var integer Stores the number of items to return per-feed with multifeeds. - * @see SimplePie::set_item_limit() - * @access private - */ - public $item_limit = 0; - - /** - * @var array Stores the default attributes to be stripped by strip_attributes(). - * @see SimplePie::strip_attributes() - * @access private - */ - public $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); - - /** - * @var array Stores the default tags to be stripped by strip_htmltags(). - * @see SimplePie::strip_htmltags() - * @access private - */ - public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); - - /** - * The SimplePie class contains feed level data and options - * - * To use SimplePie, create the SimplePie object with no parameters. You can - * then set configuration options using the provided methods. After setting - * them, you must initialise the feed using $feed->init(). At that point the - * object's methods and properties will be available to you. - * - * Previously, it was possible to pass in the feed URL along with cache - * options directly into the constructor. This has been removed as of 1.3 as - * it caused a lot of confusion. - * - * @since 1.0 Preview Release - */ - public function __construct() - { - if (version_compare(PHP_VERSION, '5.2', '<')) - { - trigger_error('PHP 4.x, 5.0 and 5.1 are no longer supported. Please upgrade to PHP 5.2 or newer.'); - die(); - } - - // Other objects, instances created here so we can set options on them - $this->sanitize = new SimplePie_Sanitize(); - $this->registry = new SimplePie_Registry(); - - if (func_num_args() > 0) - { - $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; - trigger_error('Passing parameters to the constructor is no longer supported. Please use set_feed_url(), set_cache_location(), and set_cache_location() directly.', $level); - - $args = func_get_args(); - switch (count($args)) { - case 3: - $this->set_cache_duration($args[2]); - case 2: - $this->set_cache_location($args[1]); - case 1: - $this->set_feed_url($args[0]); - $this->init(); - } - } - } - - /** - * Used for converting object to a string - */ - public function __toString() - { - return md5(serialize($this->data)); - } - - /** - * Remove items that link back to this before destroying this object - */ - public function __destruct() - { - if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode')) - { - if (!empty($this->data['items'])) - { - foreach ($this->data['items'] as $item) - { - $item->__destruct(); - } - unset($item, $this->data['items']); - } - if (!empty($this->data['ordered_items'])) - { - foreach ($this->data['ordered_items'] as $item) - { - $item->__destruct(); - } - unset($item, $this->data['ordered_items']); - } - } - } - - /** - * Force the given data/URL to be treated as a feed - * - * This tells SimplePie to ignore the content-type provided by the server. - * Be careful when using this option, as it will also disable autodiscovery. - * - * @since 1.1 - * @param bool $enable Force the given data/URL to be treated as a feed - */ - public function force_feed($enable = false) - { - $this->force_feed = (bool) $enable; - } - - /** - * Set the URL of the feed you want to parse - * - * This allows you to enter the URL of the feed you want to parse, or the - * website you want to try to use auto-discovery on. This takes priority - * over any set raw data. - * - * You can set multiple feeds to mash together by passing an array instead - * of a string for the $url. Remember that with each additional feed comes - * additional processing and resources. - * - * @since 1.0 Preview Release - * @see set_raw_data() - * @param string|array $url This is the URL (or array of URLs) that you want to parse. - */ - public function set_feed_url($url) - { - $this->multifeed_url = array(); - if (is_array($url)) - { - foreach ($url as $value) - { - $this->multifeed_url[] = $this->registry->call('Misc', 'fix_protocol', array($value, 1)); - } - } - else - { - $this->feed_url = $this->registry->call('Misc', 'fix_protocol', array($url, 1)); - } - } - - /** - * Set an instance of {@see SimplePie_File} to use as a feed - * - * @param SimplePie_File &$file - * @return bool True on success, false on failure - */ - public function set_file(&$file) - { - if ($file instanceof SimplePie_File) - { - $this->feed_url = $file->url; - $this->file =& $file; - return true; - } - return false; - } - - /** - * Set the raw XML data to parse - * - * Allows you to use a string of RSS/Atom data instead of a remote feed. - * - * If you have a feed available as a string in PHP, you can tell SimplePie - * to parse that data string instead of a remote feed. Any set feed URL - * takes precedence. - * - * @since 1.0 Beta 3 - * @param string $data RSS or Atom data as a string. - * @see set_feed_url() - */ - public function set_raw_data($data) - { - $this->raw_data = $data; - } - - /** - * Set the the default timeout for fetching remote feeds - * - * This allows you to change the maximum time the feed's server to respond - * and send the feed back. - * - * @since 1.0 Beta 3 - * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed. - */ - public function set_timeout($timeout = 10) - { - $this->timeout = (int) $timeout; - } - - /** - * Force SimplePie to use fsockopen() instead of cURL - * - * @since 1.0 Beta 3 - * @param bool $enable Force fsockopen() to be used - */ - public function force_fsockopen($enable = false) - { - $this->force_fsockopen = (bool) $enable; - } - - /** - * Enable/disable caching in SimplePie. - * - * This option allows you to disable caching all-together in SimplePie. - * However, disabling the cache can lead to longer load times. - * - * @since 1.0 Preview Release - * @param bool $enable Enable caching - */ - public function enable_cache($enable = true) - { - $this->cache = (bool) $enable; - } - - /** - * Set the length of time (in seconds) that the contents of a feed will be - * cached - * - * @param int $seconds The feed content cache duration - */ - public function set_cache_duration($seconds = 3600) - { - $this->cache_duration = (int) $seconds; - } - - /** - * Set the length of time (in seconds) that the autodiscovered feed URL will - * be cached - * - * @param int $seconds The autodiscovered feed URL cache duration. - */ - public function set_autodiscovery_cache_duration($seconds = 604800) - { - $this->autodiscovery_cache_duration = (int) $seconds; - } - - /** - * Set the file system location where the cached files should be stored - * - * @param string $location The file system location. - */ - public function set_cache_location($location = './cache') - { - $this->cache_location = (string) $location; - } - - /** - * Set whether feed items should be sorted into reverse chronological order - * - * @param bool $enable Sort as reverse chronological order. - */ - public function enable_order_by_date($enable = true) - { - $this->order_by_date = (bool) $enable; - } - - /** - * Set the character encoding used to parse the feed - * - * This overrides the encoding reported by the feed, however it will fall - * back to the normal encoding detection if the override fails - * - * @param string $encoding Character encoding - */ - public function set_input_encoding($encoding = false) - { - if ($encoding) - { - $this->input_encoding = (string) $encoding; - } - else - { - $this->input_encoding = false; - } - } - - /** - * Set how much feed autodiscovery to do - * - * @see SIMPLEPIE_LOCATOR_NONE - * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY - * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION - * @see SIMPLEPIE_LOCATOR_LOCAL_BODY - * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION - * @see SIMPLEPIE_LOCATOR_REMOTE_BODY - * @see SIMPLEPIE_LOCATOR_ALL - * @param int $level Feed Autodiscovery Level (level can be a combination of the above constants, see bitwise OR operator) - */ - public function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL) - { - $this->autodiscovery = (int) $level; - } - - /** - * Get the class registry - * - * Use this to override SimplePie's default classes - * @see SimplePie_Registry - * @return SimplePie_Registry - */ - public function &get_registry() - { - return $this->registry; - } - - /**#@+ - * Useful when you are overloading or extending SimplePie's default classes. - * - * @deprecated Use {@see get_registry()} instead - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - * @param string $class Name of custom class - * @return boolean True on success, false otherwise - */ - /** - * Set which class SimplePie uses for caching - */ - public function set_cache_class($class = 'SimplePie_Cache') - { - return $this->registry->register('Cache', $class, true); - } - - /** - * Set which class SimplePie uses for auto-discovery - */ - public function set_locator_class($class = 'SimplePie_Locator') - { - return $this->registry->register('Locator', $class, true); - } - - /** - * Set which class SimplePie uses for XML parsing - */ - public function set_parser_class($class = 'SimplePie_Parser') - { - return $this->registry->register('Parser', $class, true); - } - - /** - * Set which class SimplePie uses for remote file fetching - */ - public function set_file_class($class = 'SimplePie_File') - { - return $this->registry->register('File', $class, true); - } - - /** - * Set which class SimplePie uses for data sanitization - */ - public function set_sanitize_class($class = 'SimplePie_Sanitize') - { - return $this->registry->register('Sanitize', $class, true); - } - - /** - * Set which class SimplePie uses for handling feed items - */ - public function set_item_class($class = 'SimplePie_Item') - { - return $this->registry->register('Item', $class, true); - } - - /** - * Set which class SimplePie uses for handling author data - */ - public function set_author_class($class = 'SimplePie_Author') - { - return $this->registry->register('Author', $class, true); - } - - /** - * Set which class SimplePie uses for handling category data - */ - public function set_category_class($class = 'SimplePie_Category') - { - return $this->registry->register('Category', $class, true); - } - - /** - * Set which class SimplePie uses for feed enclosures - */ - public function set_enclosure_class($class = 'SimplePie_Enclosure') - { - return $this->registry->register('Enclosure', $class, true); - } - - /** - * Set which class SimplePie uses for `<media:text>` captions - */ - public function set_caption_class($class = 'SimplePie_Caption') - { - return $this->registry->register('Caption', $class, true); - } - - /** - * Set which class SimplePie uses for `<media:copyright>` - */ - public function set_copyright_class($class = 'SimplePie_Copyright') - { - return $this->registry->register('Copyright', $class, true); - } - - /** - * Set which class SimplePie uses for `<media:credit>` - */ - public function set_credit_class($class = 'SimplePie_Credit') - { - return $this->registry->register('Credit', $class, true); - } - - /** - * Set which class SimplePie uses for `<media:rating>` - */ - public function set_rating_class($class = 'SimplePie_Rating') - { - return $this->registry->register('Rating', $class, true); - } - - /** - * Set which class SimplePie uses for `<media:restriction>` - */ - public function set_restriction_class($class = 'SimplePie_Restriction') - { - return $this->registry->register('Restriction', $class, true); - } - - /** - * Set which class SimplePie uses for content-type sniffing - */ - public function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer') - { - return $this->registry->register('Content_Type_Sniffer', $class, true); - } - - /** - * Set which class SimplePie uses item sources - */ - public function set_source_class($class = 'SimplePie_Source') - { - return $this->registry->register('Source', $class, true); - } - /**#@-*/ - - /** - * Set the user agent string - * - * @param string $ua New user agent string. - */ - public function set_useragent($ua = SIMPLEPIE_USERAGENT) - { - $this->useragent = (string) $ua; - } - - /** - * Set callback function to create cache filename with - * - * @param mixed $function Callback function - */ - public function set_cache_name_function($function = 'md5') - { - if (is_callable($function)) - { - $this->cache_name_function = $function; - } - } - - /** - * Set options to make SP as fast as possible - * - * Forgoes a substantial amount of data sanitization in favor of speed. This - * turns SimplePie into a dumb parser of feeds. - * - * @param bool $set Whether to set them or not - */ - public function set_stupidly_fast($set = false) - { - if ($set) - { - $this->enable_order_by_date(false); - $this->remove_div(false); - $this->strip_comments(false); - $this->strip_htmltags(false); - $this->strip_attributes(false); - $this->set_image_handler(false); - } - } - - /** - * Set maximum number of feeds to check with autodiscovery - * - * @param int $max Maximum number of feeds to check - */ - public function set_max_checked_feeds($max = 10) - { - $this->max_checked_feeds = (int) $max; - } - - public function remove_div($enable = true) - { - $this->sanitize->remove_div($enable); - } - - public function strip_htmltags($tags = '', $encode = null) - { - if ($tags === '') - { - $tags = $this->strip_htmltags; - } - $this->sanitize->strip_htmltags($tags); - if ($encode !== null) - { - $this->sanitize->encode_instead_of_strip($tags); - } - } - - public function encode_instead_of_strip($enable = true) - { - $this->sanitize->encode_instead_of_strip($enable); - } - - public function strip_attributes($attribs = '') - { - if ($attribs === '') - { - $attribs = $this->strip_attributes; - } - $this->sanitize->strip_attributes($attribs); - } - - /** - * Set the output encoding - * - * Allows you to override SimplePie's output to match that of your webpage. - * This is useful for times when your webpages are not being served as - * UTF-8. This setting will be obeyed by {@see handle_content_type()}, and - * is similar to {@see set_input_encoding()}. - * - * It should be noted, however, that not all character encodings can support - * all characters. If your page is being served as ISO-8859-1 and you try - * to display a Japanese feed, you'll likely see garbled characters. - * Because of this, it is highly recommended to ensure that your webpages - * are served as UTF-8. - * - * The number of supported character encodings depends on whether your web - * host supports {@link http://php.net/mbstring mbstring}, - * {@link http://php.net/iconv iconv}, or both. See - * {@link http://simplepie.org/wiki/faq/Supported_Character_Encodings} for - * more information. - * - * @param string $encoding - */ - public function set_output_encoding($encoding = 'UTF-8') - { - $this->sanitize->set_output_encoding($encoding); - } - - public function strip_comments($strip = false) - { - $this->sanitize->strip_comments($strip); - } - - /** - * Set element/attribute key/value pairs of HTML attributes - * containing URLs that need to be resolved relative to the feed - * - * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite, - * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite, - * |q|@cite - * - * @since 1.0 - * @param array|null $element_attribute Element/attribute key/value pairs, null for default - */ - public function set_url_replacements($element_attribute = null) - { - $this->sanitize->set_url_replacements($element_attribute); - } - - /** - * Set the handler to enable the display of cached images. - * - * @param str $page Web-accessible path to the handler_image.php file. - * @param str $qs The query string that the value should be passed to. - */ - public function set_image_handler($page = false, $qs = 'i') - { - if ($page !== false) - { - $this->sanitize->set_image_handler($page . '?' . $qs . '='); - } - else - { - $this->image_handler = ''; - } - } - - /** - * Set the limit for items returned per-feed with multifeeds - * - * @param integer $limit The maximum number of items to return. - */ - public function set_item_limit($limit = 0) - { - $this->item_limit = (int) $limit; - } - - /** - * Initialize the feed object - * - * This is what makes everything happen. Period. This is where all of the - * configuration options get processed, feeds are fetched, cached, and - * parsed, and all of that other good stuff. - * - * @return boolean True if successful, false otherwise - */ - public function init() - { - // Check absolute bare minimum requirements. - if (!extension_loaded('xml') || !extension_loaded('pcre')) - { - return false; - } - // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader. - elseif (!extension_loaded('xmlreader')) - { - static $xml_is_sane = null; - if ($xml_is_sane === null) - { - $parser_check = xml_parser_create(); - xml_parse_into_struct($parser_check, '<foo>&</foo>', $values); - xml_parser_free($parser_check); - $xml_is_sane = isset($values[0]['value']); - } - if (!$xml_is_sane) - { - return false; - } - } - - if (method_exists($this->sanitize, 'set_registry')) - { - $this->sanitize->set_registry($this->registry); - } - - // Pass whatever was set with config options over to the sanitizer. - // Pass the classes in for legacy support; new classes should use the registry instead - $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->registry->get_class('Cache')); - $this->sanitize->pass_file_data($this->registry->get_class('File'), $this->timeout, $this->useragent, $this->force_fsockopen); - - if (!empty($this->multifeed_url)) - { - $i = 0; - $success = 0; - $this->multifeed_objects = array(); - $this->error = array(); - foreach ($this->multifeed_url as $url) - { - $this->multifeed_objects[$i] = clone $this; - $this->multifeed_objects[$i]->set_feed_url($url); - $single_success = $this->multifeed_objects[$i]->init(); - $success |= $single_success; - if (!$single_success) - { - $this->error[$i] = $this->multifeed_objects[$i]->error(); - } - $i++; - } - return (bool) $success; - } - elseif ($this->feed_url === null && $this->raw_data === null) - { - return false; - } - - $this->error = null; - $this->data = array(); - $this->multifeed_objects = array(); - $cache = false; - - if ($this->feed_url !== null) - { - $parsed_feed_url = $this->registry->call('Misc', 'parse_url', array($this->feed_url)); - - // Decide whether to enable caching - if ($this->cache && $parsed_feed_url['scheme'] !== '') - { - $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc')); - } - - // Fetch the data via SimplePie_File into $this->raw_data - if (($fetched = $this->fetch_data($cache)) === true) - { - return true; - } - elseif ($fetched === false) { - return false; - } - - list($headers, $sniffed) = $fetched; - } - - // Set up array of possible encodings - $encodings = array(); - - // First check to see if input has been overridden. - if ($this->input_encoding !== false) - { - $encodings[] = $this->input_encoding; - } - - $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity'); - $text_types = array('text/xml', 'text/xml-external-parsed-entity'); - - // RFC 3023 (only applies to sniffed content) - if (isset($sniffed)) - { - if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml') - { - if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) - { - $encodings[] = strtoupper($charset[1]); - } - $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', array($this->raw_data, &$this->registry))); - $encodings[] = 'UTF-8'; - } - elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml') - { - if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) - { - $encodings[] = $charset[1]; - } - $encodings[] = 'US-ASCII'; - } - // Text MIME-type default - elseif (substr($sniffed, 0, 5) === 'text/') - { - $encodings[] = 'US-ASCII'; - } - } - - // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1 - $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', array($this->raw_data, &$this->registry))); - $encodings[] = 'UTF-8'; - $encodings[] = 'ISO-8859-1'; - - // There's no point in trying an encoding twice - $encodings = array_unique($encodings); - - // Loop through each possible encoding, till we return something, or run out of possibilities - foreach ($encodings as $encoding) - { - // Change the encoding to UTF-8 (as we always use UTF-8 internally) - if ($utf8_data = $this->registry->call('Misc', 'change_encoding', array($this->raw_data, $encoding, 'UTF-8'))) - { - // Create new parser - $parser = $this->registry->create('Parser'); - - // If it's parsed fine - if ($parser->parse($utf8_data, 'UTF-8')) - { - $this->data = $parser->get_data(); - if (!($this->get_type() & ~SIMPLEPIE_TYPE_NONE)) - { - $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed."; - $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__)); - return false; - } - - if (isset($headers)) - { - $this->data['headers'] = $headers; - } - $this->data['build'] = SIMPLEPIE_BUILD; - - // Cache the file if caching is enabled - if ($cache && !$cache->save($this)) - { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - } - return true; - } - } - } - - if (isset($parser)) - { - // We have an error, just set SimplePie_Misc::error to it and quit - $this->error = sprintf('This XML document is invalid, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); - } - else - { - $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.'; - } - - $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__)); - - return false; - } - - /** - * Fetch the data via SimplePie_File - * - * If the data is already cached, attempt to fetch it from there instead - * @param SimplePie_Cache|false $cache Cache handler, or false to not load from the cache - * @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type - */ - protected function fetch_data(&$cache) - { - // If it's enabled, use the cache - if ($cache) - { - // Load the Cache - $this->data = $cache->load(); - if (!empty($this->data)) - { - // If the cache is for an outdated build of SimplePie - if (!isset($this->data['build']) || $this->data['build'] !== SIMPLEPIE_BUILD) - { - $cache->unlink(); - $this->data = array(); - } - // If we've hit a collision just rerun it with caching disabled - elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url) - { - $cache = false; - $this->data = array(); - } - // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL. - elseif (isset($this->data['feed_url'])) - { - // If the autodiscovery cache is still valid use it. - if ($cache->mtime() + $this->autodiscovery_cache_duration > time()) - { - // Do not need to do feed autodiscovery yet. - if ($this->data['feed_url'] !== $this->data['url']) - { - $this->set_feed_url($this->data['feed_url']); - return $this->init(); - } - - $cache->unlink(); - $this->data = array(); - } - } - // Check if the cache has been updated - elseif ($cache->mtime() + $this->cache_duration < time()) - { - // If we have last-modified and/or etag set - if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) - { - $headers = array( - 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', - ); - if (isset($this->data['headers']['last-modified'])) - { - $headers['if-modified-since'] = $this->data['headers']['last-modified']; - } - if (isset($this->data['headers']['etag'])) - { - $headers['if-none-match'] = $this->data['headers']['etag']; - } - - $file = $this->registry->create('File', array($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen)); - - if ($file->success) - { - if ($file->status_code === 304) - { - $cache->touch(); - return true; - } - } - else - { - unset($file); - } - } - } - // If the cache is still valid, just return true - else - { - $this->raw_data = false; - return true; - } - } - // If the cache is empty, delete it - else - { - $cache->unlink(); - $this->data = array(); - } - } - // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it. - if (!isset($file)) - { - if ($this->file instanceof SimplePie_File && $this->file->url === $this->feed_url) - { - $file =& $this->file; - } - else - { - $headers = array( - 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', - ); - $file = $this->registry->create('File', array($this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen)); - } - } - // If the file connection has an error, set SimplePie::error to that and quit - if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) - { - $this->error = $file->error; - return !empty($this->data); - } - - if (!$this->force_feed) - { - // Check if the supplied URL is a feed, if it isn't, look for it. - $locate = $this->registry->create('Locator', array(&$file, $this->timeout, $this->useragent, $this->max_checked_feeds)); - - if (!$locate->is_feed($file)) - { - // We need to unset this so that if SimplePie::set_file() has been called that object is untouched - unset($file); - try - { - if (!($file = $locate->find($this->autodiscovery, $this->all_discovered_feeds))) - { - $this->error = "A feed could not be found at $this->feed_url. A feed with an invalid mime type may fall victim to this error, or " . SIMPLEPIE_NAME . " was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed."; - $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__)); - return false; - } - } - catch (SimplePie_Exception $e) - { - // This is usually because DOMDocument doesn't exist - $this->error = $e->getMessage(); - $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, $e->getFile(), $e->getLine())); - return false; - } - if ($cache) - { - $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD); - if (!$cache->save($this)) - { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - } - $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc')); - } - $this->feed_url = $file->url; - } - $locate = null; - } - - $this->raw_data = $file->body; - - $headers = $file->headers; - $sniffer = $this->registry->create('Content_Type_Sniffer', array(&$file)); - $sniffed = $sniffer->get_type(); - - return array($headers, $sniffed); - } - - /** - * Get the error message for the occured error - * - * @return string|array Error message, or array of messages for multifeeds - */ - public function error() - { - return $this->error; - } - - /** - * Get the raw XML - * - * This is the same as the old `$feed->enable_xml_dump(true)`, but returns - * the data instead of printing it. - * - * @return string|boolean Raw XML data, false if the cache is used - */ - public function get_raw_data() - { - return $this->raw_data; - } - - /** - * Get the character encoding used for output - * - * @since Preview Release - * @return string - */ - public function get_encoding() - { - return $this->sanitize->output_encoding; - } - - /** - * Send the content-type header with correct encoding - * - * This method ensures that the SimplePie-enabled page is being served with - * the correct {@link http://www.iana.org/assignments/media-types/ mime-type} - * and character encoding HTTP headers (character encoding determined by the - * {@see set_output_encoding} config option). - * - * This won't work properly if any content or whitespace has already been - * sent to the browser, because it relies on PHP's - * {@link http://php.net/header header()} function, and these are the - * circumstances under which the function works. - * - * Because it's setting these settings for the entire page (as is the nature - * of HTTP headers), this should only be used once per page (again, at the - * top). - * - * @param string $mime MIME type to serve the page as - */ - public function handle_content_type($mime = 'text/html') - { - if (!headers_sent()) - { - $header = "Content-type: $mime;"; - if ($this->get_encoding()) - { - $header .= ' charset=' . $this->get_encoding(); - } - else - { - $header .= ' charset=UTF-8'; - } - header($header); - } - } - - /** - * Get the type of the feed - * - * This returns a SIMPLEPIE_TYPE_* constant, which can be tested against - * using {@link http://php.net/language.operators.bitwise bitwise operators} - * - * @since 0.8 (usage changed to using constants in 1.0) - * @see SIMPLEPIE_TYPE_NONE Unknown. - * @see SIMPLEPIE_TYPE_RSS_090 RSS 0.90. - * @see SIMPLEPIE_TYPE_RSS_091_NETSCAPE RSS 0.91 (Netscape). - * @see SIMPLEPIE_TYPE_RSS_091_USERLAND RSS 0.91 (Userland). - * @see SIMPLEPIE_TYPE_RSS_091 RSS 0.91. - * @see SIMPLEPIE_TYPE_RSS_092 RSS 0.92. - * @see SIMPLEPIE_TYPE_RSS_093 RSS 0.93. - * @see SIMPLEPIE_TYPE_RSS_094 RSS 0.94. - * @see SIMPLEPIE_TYPE_RSS_10 RSS 1.0. - * @see SIMPLEPIE_TYPE_RSS_20 RSS 2.0.x. - * @see SIMPLEPIE_TYPE_RSS_RDF RDF-based RSS. - * @see SIMPLEPIE_TYPE_RSS_SYNDICATION Non-RDF-based RSS (truly intended as syndication format). - * @see SIMPLEPIE_TYPE_RSS_ALL Any version of RSS. - * @see SIMPLEPIE_TYPE_ATOM_03 Atom 0.3. - * @see SIMPLEPIE_TYPE_ATOM_10 Atom 1.0. - * @see SIMPLEPIE_TYPE_ATOM_ALL Any version of Atom. - * @see SIMPLEPIE_TYPE_ALL Any known/supported feed type. - * @return int SIMPLEPIE_TYPE_* constant - */ - public function get_type() - { - if (!isset($this->data['type'])) - { - $this->data['type'] = SIMPLEPIE_TYPE_ALL; - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10; - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03; - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'])) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10; - } - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090; - } - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL; - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) - { - switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) - { - case '0.91': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091; - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) - { - switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) - { - case '0': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE; - break; - - case '24': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND; - break; - } - } - break; - - case '0.92': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092; - break; - - case '0.93': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093; - break; - - case '0.94': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094; - break; - - case '2.0': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20; - break; - } - } - } - else - { - $this->data['type'] = SIMPLEPIE_TYPE_NONE; - } - } - return $this->data['type']; - } - - /** - * Get the URL for the feed - * - * May or may not be different from the URL passed to {@see set_feed_url()}, - * depending on whether auto-discovery was used. - * - * @since Preview Release (previously called `get_feed_url()` since SimplePie 0.8.) - * @todo If we have a perm redirect we should return the new URL - * @todo When we make the above change, let's support <itunes:new-feed-url> as well - * @todo Also, |atom:link|@rel=self - * @return string|null - */ - public function subscribe_url() - { - if ($this->feed_url !== null) - { - return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - /** - * Get data for an feed-level element - * - * This method allows you to get access to ANY element/attribute that is a - * sub-element of the opening feed tag. - * - * The return value is an indexed array of elements matching the given - * namespace and tag name. Each element has `attribs`, `data` and `child` - * subkeys. For `attribs` and `child`, these contain namespace subkeys. - * `attribs` then has one level of associative name => value data (where - * `value` is a string) after the namespace. `child` has tag-indexed keys - * after the namespace, each member of which is an indexed array matching - * this same format. - * - * For example: - * <pre> - * // This is probably a bad example because we already support - * // <media:content> natively, but it shows you how to parse through - * // the nodes. - * $group = $item->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group'); - * $content = $group[0]['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']; - * $file = $content[0]['attribs']['']['url']; - * echo $file; - * </pre> - * - * @since 1.0 - * @see http://simplepie.org/wiki/faq/supported_xml_namespaces - * @param string $namespace The URL of the XML namespace of the elements you're trying to access - * @param string $tag Tag name - * @return array - */ - public function get_feed_tags($namespace, $tag) - { - $type = $this->get_type(); - if ($type & SIMPLEPIE_TYPE_ATOM_10) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]; - } - } - if ($type & SIMPLEPIE_TYPE_ATOM_03) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]; - } - } - if ($type & SIMPLEPIE_TYPE_RSS_RDF) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]; - } - } - if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag]; - } - } - return null; - } - - /** - * Get data for an channel-level element - * - * This method allows you to get access to ANY element/attribute in the - * channel/header section of the feed. - * - * See {@see SimplePie::get_feed_tags()} for a description of the return value - * - * @since 1.0 - * @see http://simplepie.org/wiki/faq/supported_xml_namespaces - * @param string $namespace The URL of the XML namespace of the elements you're trying to access - * @param string $tag Tag name - * @return array - */ - public function get_channel_tags($namespace, $tag) - { - $type = $this->get_type(); - if ($type & SIMPLEPIE_TYPE_ATOM_ALL) - { - if ($return = $this->get_feed_tags($namespace, $tag)) - { - return $return; - } - } - if ($type & SIMPLEPIE_TYPE_RSS_10) - { - if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel')) - { - if (isset($channel[0]['child'][$namespace][$tag])) - { - return $channel[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_090) - { - if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel')) - { - if (isset($channel[0]['child'][$namespace][$tag])) - { - return $channel[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) - { - if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'channel')) - { - if (isset($channel[0]['child'][$namespace][$tag])) - { - return $channel[0]['child'][$namespace][$tag]; - } - } - } - return null; - } - - /** - * Get data for an channel-level element - * - * This method allows you to get access to ANY element/attribute in the - * image/logo section of the feed. - * - * See {@see SimplePie::get_feed_tags()} for a description of the return value - * - * @since 1.0 - * @see http://simplepie.org/wiki/faq/supported_xml_namespaces - * @param string $namespace The URL of the XML namespace of the elements you're trying to access - * @param string $tag Tag name - * @return array - */ - public function get_image_tags($namespace, $tag) - { - $type = $this->get_type(); - if ($type & SIMPLEPIE_TYPE_RSS_10) - { - if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image')) - { - if (isset($image[0]['child'][$namespace][$tag])) - { - return $image[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_090) - { - if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image')) - { - if (isset($image[0]['child'][$namespace][$tag])) - { - return $image[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) - { - if ($image = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'image')) - { - if (isset($image[0]['child'][$namespace][$tag])) - { - return $image[0]['child'][$namespace][$tag]; - } - } - } - return null; - } - - /** - * Get the base URL value from the feed - * - * Uses `<xml:base>` if available, otherwise uses the first link in the - * feed, or failing that, the URL of the feed itself. - * - * @see get_link - * @see subscribe_url - * - * @param array $element - * @return string - */ - public function get_base($element = array()) - { - if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base'])) - { - return $element['xml_base']; - } - elseif ($this->get_link() !== null) - { - return $this->get_link(); - } - else - { - return $this->subscribe_url(); - } - } - - /** - * Sanitize feed data - * - * @access private - * @see SimplePie_Sanitize::sanitize() - * @param string $data Data to sanitize - * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants - * @param string $base Base URL to resolve URLs against - * @return string Sanitized data - */ - public function sanitize($data, $type, $base = '') - { - return $this->sanitize->sanitize($data, $type, $base); - } - - /** - * Get the title of the feed - * - * Uses `<atom:title>`, `<title>` or `<dc:title>` - * - * @since 1.0 (previously called `get_feed_title` since 0.8) - * @return string|null - */ - public function get_title() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - /** - * Get a category for the feed - * - * @since Unknown - * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1 - * @return SimplePie_Category|null - */ - public function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - /** - * Get all categories for the feed - * - * Uses `<atom:category>`, `<category>` or `<dc:subject>` - * - * @since Unknown - * @return array|null List of {@see SimplePie_Category} objects - */ - public function get_categories() - { - $categories = array(); - - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['attribs']['']['term'])) - { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) - { - // This is really the label, but keep this as the term also for BC. - // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - if (isset($category['attribs']['']['domain'])) - { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = null; - } - $categories[] = $this->registry->create('Category', array($term, $scheme, null)); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) - { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) - { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - - if (!empty($categories)) - { - return array_unique($categories); - } - else - { - return null; - } - } - - /** - * Get an author for the feed - * - * @since 1.1 - * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1 - * @return SimplePie_Author|null - */ - public function get_author($key = 0) - { - $authors = $this->get_authors(); - if (isset($authors[$key])) - { - return $authors[$key]; - } - else - { - return null; - } - } - - /** - * Get all authors for the feed - * - * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>` - * - * @since 1.1 - * @return array|null List of {@see SimplePie_Author} objects - */ - public function get_authors() - { - $authors = array(); - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) - { - $name = null; - $uri = null; - $email = null; - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $authors[] = $this->registry->create('Author', array($name, $uri, $email)); - } - } - if ($author = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) - { - $name = null; - $url = null; - $email = null; - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $authors[] = $this->registry->create('Author', array($name, $url, $email)); - } - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) - { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) - { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) - { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - - if (!empty($authors)) - { - return array_unique($authors); - } - else - { - return null; - } - } - - /** - * Get a contributor for the feed - * - * @since 1.1 - * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1 - * @return SimplePie_Author|null - */ - public function get_contributor($key = 0) - { - $contributors = $this->get_contributors(); - if (isset($contributors[$key])) - { - return $contributors[$key]; - } - else - { - return null; - } - } - - /** - * Get all contributors for the feed - * - * Uses `<atom:contributor>` - * - * @since 1.1 - * @return array|null List of {@see SimplePie_Author} objects - */ - public function get_contributors() - { - $contributors = array(); - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) - { - $name = null; - $uri = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $contributors[] = $this->registry->create('Author', array($name, $uri, $email)); - } - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) - { - $name = null; - $url = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $contributors[] = $this->registry->create('Author', array($name, $url, $email)); - } - } - - if (!empty($contributors)) - { - return array_unique($contributors); - } - else - { - return null; - } - } - - /** - * Get a single link for the feed - * - * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8) - * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1 - * @param string $rel The relationship of the link to return - * @return string|null Link URL - */ - public function get_link($key = 0, $rel = 'alternate') - { - $links = $this->get_links($rel); - if (isset($links[$key])) - { - return $links[$key]; - } - else - { - return null; - } - } - - /** - * Get the permalink for the item - * - * Returns the first link available with a relationship of "alternate". - * Identical to {@see get_link()} with key 0 - * - * @see get_link - * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8) - * @internal Added for parity between the parent-level and the item/entry-level. - * @return string|null Link URL - */ - public function get_permalink() - { - return $this->get_link(0); - } - - /** - * Get all links for the feed - * - * Uses `<atom:link>` or `<link>` - * - * @since Beta 2 - * @param string $rel The relationship of links to return - * @return array|null Links found for the feed (strings) - */ - public function get_links($rel = 'alternate') - { - if (!isset($this->data['links'])) - { - $this->data['links'] = array(); - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - } - } - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - - } - } - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - - $keys = array_keys($this->data['links']); - foreach ($keys as $key) - { - if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key))) - { - if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); - $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; - } - else - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; - } - } - elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) - { - $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; - } - $this->data['links'][$key] = array_unique($this->data['links'][$key]); - } - } - - if (isset($this->data['links'][$rel])) - { - return $this->data['links'][$rel]; - } - else - { - return null; - } - } - - public function get_all_discovered_feeds() - { - return $this->all_discovered_feeds; - } - - /** - * Get the content for the item - * - * Uses `<atom:subtitle>`, `<atom:tagline>`, `<description>`, - * `<dc:description>`, `<itunes:summary>` or `<itunes:subtitle>` - * - * @since 1.0 (previously called `get_feed_description()` since 0.8) - * @return string|null - */ - public function get_description() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - else - { - return null; - } - } - - /** - * Get the copyright info for the feed - * - * Uses `<atom:rights>`, `<atom:copyright>` or `<dc:rights>` - * - * @since 1.0 (previously called `get_feed_copyright()` since 0.8) - * @return string|null - */ - public function get_copyright() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - /** - * Get the language for the feed - * - * Uses `<language>`, `<dc:language>`, or @xml_lang - * - * @since 1.0 (previously called `get_feed_language()` since 0.8) - * @return string|null - */ - public function get_language() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'])) - { - return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'])) - { - return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'])) - { - return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['headers']['content-language'])) - { - return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - /** - * Get the latitude coordinates for the item - * - * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications - * - * Uses `<geo:lat>` or `<georss:point>` - * - * @since 1.0 - * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo - * @link http://www.georss.org/ GeoRSS - * @return string|null - */ - public function get_latitude() - { - - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[1]; - } - else - { - return null; - } - } - - /** - * Get the longitude coordinates for the feed - * - * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications - * - * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>` - * - * @since 1.0 - * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo - * @link http://www.georss.org/ GeoRSS - * @return string|null - */ - public function get_longitude() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) - { - return (float) $return[0]['data']; - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[2]; - } - else - { - return null; - } - } - - /** - * Get the feed logo's title - * - * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" title. - * - * Uses `<image><title>` or `<image><dc:title>` - * - * @return string|null - */ - public function get_image_title() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - /** - * Get the feed logo's URL - * - * RSS 0.9.0, 2.0, Atom 1.0, and feeds with iTunes RSS tags are allowed to - * have a "feed logo" URL. This points directly to the image itself. - * - * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`, - * `<image><title>` or `<image><dc:title>` - * - * @return string|null - */ - public function get_image_url() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) - { - return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - else - { - return null; - } - } - - /** - * Get the feed logo's link - * - * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" link. This - * points to a human-readable page that the image should link to. - * - * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`, - * `<image><title>` or `<image><dc:title>` - * - * @return string|null - */ - public function get_image_link() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - else - { - return null; - } - } - - /** - * Get the feed logo's link - * - * RSS 2.0 feeds are allowed to have a "feed logo" width. - * - * Uses `<image><width>` or defaults to 88.0 if no width is specified and - * the feed is an RSS 2.0 feed. - * - * @return int|float|null - */ - public function get_image_width() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'width')) - { - return round($return[0]['data']); - } - elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) - { - return 88.0; - } - else - { - return null; - } - } - - /** - * Get the feed logo's height - * - * RSS 2.0 feeds are allowed to have a "feed logo" height. - * - * Uses `<image><height>` or defaults to 31.0 if no height is specified and - * the feed is an RSS 2.0 feed. - * - * @return int|float|null - */ - public function get_image_height() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'height')) - { - return round($return[0]['data']); - } - elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) - { - return 31.0; - } - else - { - return null; - } - } - - /** - * Get the number of items in the feed - * - * This is well-suited for {@link http://php.net/for for()} loops with - * {@see get_item()} - * - * @param int $max Maximum value to return. 0 for no limit - * @return int Number of items in the feed - */ - public function get_item_quantity($max = 0) - { - $max = (int) $max; - $qty = count($this->get_items()); - if ($max === 0) - { - return $qty; - } - else - { - return ($qty > $max) ? $max : $qty; - } - } - - /** - * Get a single item from the feed - * - * This is better suited for {@link http://php.net/for for()} loops, whereas - * {@see get_items()} is better suited for - * {@link http://php.net/foreach foreach()} loops. - * - * @see get_item_quantity() - * @since Beta 2 - * @param int $key The item that you want to return. Remember that arrays begin with 0, not 1 - * @return SimplePie_Item|null - */ - public function get_item($key = 0) - { - $items = $this->get_items(); - if (isset($items[$key])) - { - return $items[$key]; - } - else - { - return null; - } - } - - /** - * Get all items from the feed - * - * This is better suited for {@link http://php.net/for for()} loops, whereas - * {@see get_items()} is better suited for - * {@link http://php.net/foreach foreach()} loops. - * - * @see get_item_quantity - * @since Beta 2 - * @param int $start Index to start at - * @param int $end Number of items to return. 0 for all items after `$start` - * @return array|null List of {@see SimplePie_Item} objects - */ - public function get_items($start = 0, $end = 0) - { - if (!isset($this->data['items'])) - { - if (!empty($this->multifeed_objects)) - { - $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit); - } - else - { - $this->data['items'] = array(); - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); - } - } - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); - } - } - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); - } - } - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); - } - } - if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key])); - } - } - } - } - - if (!empty($this->data['items'])) - { - // If we want to order it by date, check if all items have a date, and then sort it - if ($this->order_by_date && empty($this->multifeed_objects)) - { - if (!isset($this->data['ordered_items'])) - { - $do_sort = true; - foreach ($this->data['items'] as $item) - { - if (!$item->get_date('U')) - { - $do_sort = false; - break; - } - } - $item = null; - $this->data['ordered_items'] = $this->data['items']; - if ($do_sort) - { - usort($this->data['ordered_items'], array(get_class($this), 'sort_items')); - } - } - $items = $this->data['ordered_items']; - } - else - { - $items = $this->data['items']; - } - - // Slice the data as desired - if ($end === 0) - { - return array_slice($items, $start); - } - else - { - return array_slice($items, $start, $end); - } - } - else - { - return array(); - } - } - - /** - * Set the favicon handler - * - * @deprecated Use your own favicon handling instead - */ - public function set_favicon_handler($page = false, $qs = 'i') - { - $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; - trigger_error('Favicon handling has been removed, please use your own handling', $level); - return false; - } - - /** - * Get the favicon for the current feed - * - * @deprecated Use your own favicon handling instead - */ - public function get_favicon() - { - $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; - trigger_error('Favicon handling has been removed, please use your own handling', $level); - - if (($url = $this->get_link()) !== null) - { - return 'http://g.etfv.co/' . urlencode($url); - } - - return false; - } - - /** - * Magic method handler - * - * @param string $method Method name - * @param array $args Arguments to the method - * @return mixed - */ - public function __call($method, $args) - { - if (strpos($method, 'subscribe_') === 0) - { - $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; - trigger_error('subscribe_*() has been deprecated, implement the callback yourself', $level); - return ''; - } - if ($method === 'enable_xml_dump') - { - $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING; - trigger_error('enable_xml_dump() has been deprecated, use get_raw_data() instead', $level); - return false; - } - - $class = get_class($this); - $trace = debug_backtrace(); - $file = $trace[0]['file']; - $line = $trace[0]['line']; - trigger_error("Call to undefined method $class::$method() in $file on line $line", E_USER_ERROR); - } - - /** - * Sorting callback for items - * - * @access private - * @param SimplePie $a - * @param SimplePie $b - * @return boolean - */ - public static function sort_items($a, $b) - { - return $a->get_date('U') <= $b->get_date('U'); - } - - /** - * Merge items from several feeds into one - * - * If you're merging multiple feeds together, they need to all have dates - * for the items or else SimplePie will refuse to sort them. - * - * @link http://simplepie.org/wiki/tutorial/sort_multiple_feeds_by_time_and_date#if_feeds_require_separate_per-feed_settings - * @param array $urls List of SimplePie feed objects to merge - * @param int $start Starting item - * @param int $end Number of items to return - * @param int $limit Maximum number of items per feed - * @return array - */ - public static function merge_items($urls, $start = 0, $end = 0, $limit = 0) - { - if (is_array($urls) && sizeof($urls) > 0) - { - $items = array(); - foreach ($urls as $arg) - { - if ($arg instanceof SimplePie) - { - $items = array_merge($items, $arg->get_items(0, $limit)); - } - else - { - trigger_error('Arguments must be SimplePie objects', E_USER_WARNING); - } - } - - $do_sort = true; - foreach ($items as $item) - { - if (!$item->get_date('U')) - { - $do_sort = false; - break; - } - } - $item = null; - if ($do_sort) - { - usort($items, array(get_class($urls[0]), 'sort_items')); - } - - if ($end === 0) - { - return array_slice($items, $start); - } - else - { - return array_slice($items, $start, $end); - } - } - else - { - trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING); - return array(); - } - } -} - -/** - * Manages all author-related data - * - * Used by {@see SimplePie_Item::get_author()} and {@see SimplePie::get_authors()} - * - * This class can be overloaded with {@see SimplePie::set_author_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Author -{ - /** - * Author's name - * - * @var string - * @see get_name() - */ - var $name; - - /** - * Author's link - * - * @var string - * @see get_link() - */ - var $link; - - /** - * Author's email address - * - * @var string - * @see get_email() - */ - var $email; - - /** - * Constructor, used to input the data - * - * @param string $name - * @param string $link - * @param string $email - */ - public function __construct($name = null, $link = null, $email = null) - { - $this->name = $name; - $this->link = $link; - $this->email = $email; - } - - /** - * String-ified version - * - * @return string - */ - public function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - /** - * Author's name - * - * @return string|null - */ - public function get_name() - { - if ($this->name !== null) - { - return $this->name; - } - else - { - return null; - } - } - - /** - * Author's link - * - * @return string|null - */ - public function get_link() - { - if ($this->link !== null) - { - return $this->link; - } - else - { - return null; - } - } - - /** - * Author's email address - * - * @return string|null - */ - public function get_email() - { - if ($this->email !== null) - { - return $this->email; - } - else - { - return null; - } - } -} - -/** - * Base for cache objects - * - * Classes to be used with {@see SimplePie_Cache::register()} are expected - * to implement this interface. - * - * @package SimplePie - * @subpackage Caching - */ -interface SimplePie_Cache_Base -{ - /** - * Feed cache type - * - * @var string - */ - const TYPE_FEED = 'spc'; - - /** - * Image cache type - * - * @var string - */ - const TYPE_IMAGE = 'spi'; - - /** - * Create a new cache object - * - * @param string $location Location string (from SimplePie::$cache_location) - * @param string $name Unique ID for the cache - * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data - */ - public function __construct($location, $name, $type); - - /** - * Save data to the cache - * - * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property - * @return bool Successfulness - */ - public function save($data); - - /** - * Retrieve the data saved to the cache - * - * @return array Data for SimplePie::$data - */ - public function load(); - - /** - * Retrieve the last modified time for the cache - * - * @return int Timestamp - */ - public function mtime(); - - /** - * Set the last modified time to the current time - * - * @return bool Success status - */ - public function touch(); - - /** - * Remove the cache - * - * @return bool Success status - */ - public function unlink(); -} - -/** - * Base class for database-based caches - * - * @package SimplePie - * @subpackage Caching - */ -abstract class SimplePie_Cache_DB implements SimplePie_Cache_Base -{ - /** - * Helper for database conversion - * - * Converts a given {@see SimplePie} object into data to be stored - * - * @param SimplePie $data - * @return array First item is the serialized data for storage, second item is the unique ID for this item - */ - protected static function prepare_simplepie_object_for_cache($data) - { - $items = $data->get_items(); - $items_by_id = array(); - - if (!empty($items)) - { - foreach ($items as $item) - { - $items_by_id[$item->get_id()] = $item; - } - - if (count($items_by_id) !== count($items)) - { - $items_by_id = array(); - foreach ($items as $item) - { - $items_by_id[$item->get_id(true)] = $item; - } - } - - if (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; - } - elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; - } - elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; - } - elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0]; - } - else - { - $channel = null; - } - - if ($channel !== null) - { - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']); - } - } - if (isset($data->data['items'])) - { - unset($data->data['items']); - } - if (isset($data->data['ordered_items'])) - { - unset($data->data['ordered_items']); - } - } - return array(serialize($data->data), $items_by_id); - } -} - -/** - * Caches data to the filesystem - * - * @package SimplePie - * @subpackage Caching - */ -class SimplePie_Cache_File implements SimplePie_Cache_Base -{ - /** - * Location string - * - * @see SimplePie::$cache_location - * @var string - */ - protected $location; - - /** - * Filename - * - * @var string - */ - protected $filename; - - /** - * File extension - * - * @var string - */ - protected $extension; - - /** - * File path - * - * @var string - */ - protected $name; - - /** - * Create a new cache object - * - * @param string $location Location string (from SimplePie::$cache_location) - * @param string $name Unique ID for the cache - * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data - */ - public function __construct($location, $name, $type) - { - $this->location = $location; - $this->filename = $name; - $this->extension = $type; - $this->name = "$this->location/$this->filename.$this->extension"; - } - - /** - * Save data to the cache - * - * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property - * @return bool Successfulness - */ - public function save($data) - { - if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location)) - { - if ($data instanceof SimplePie) - { - $data = $data->data; - } - - $data = serialize($data); - return (bool) file_put_contents($this->name, $data); - } - return false; - } - - /** - * Retrieve the data saved to the cache - * - * @return array Data for SimplePie::$data - */ - public function load() - { - if (file_exists($this->name) && is_readable($this->name)) - { - return unserialize(file_get_contents($this->name)); - } - return false; - } - - /** - * Retrieve the last modified time for the cache - * - * @return int Timestamp - */ - public function mtime() - { - if (file_exists($this->name)) - { - return filemtime($this->name); - } - return false; - } - - /** - * Set the last modified time to the current time - * - * @return bool Success status - */ - public function touch() - { - if (file_exists($this->name)) - { - return touch($this->name); - } - return false; - } - - /** - * Remove the cache - * - * @return bool Success status - */ - public function unlink() - { - if (file_exists($this->name)) - { - return unlink($this->name); - } - return false; - } -} - -/** - * Caches data to memcache - * - * Registered for URLs with the "memcache" protocol - * - * For example, `memcache://localhost:11211/?timeout=3600&prefix=sp_` will - * connect to memcache on `localhost` on port 11211. All tables will be - * prefixed with `sp_` and data will expire after 3600 seconds - * - * @package SimplePie - * @subpackage Caching - * @uses Memcache - */ -class SimplePie_Cache_Memcache implements SimplePie_Cache_Base -{ - /** - * Memcache instance - * - * @var Memcache - */ - protected $cache; - - /** - * Options - * - * @var array - */ - protected $options; - - /** - * Cache name - * - * @var string - */ - protected $name; - - /** - * Create a new cache object - * - * @param string $location Location string (from SimplePie::$cache_location) - * @param string $name Unique ID for the cache - * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data - */ - public function __construct($location, $name, $type) - { - $this->options = array( - 'host' => '127.0.0.1', - 'port' => 11211, - 'extras' => array( - 'timeout' => 3600, // one hour - 'prefix' => 'simplepie_', - ), - ); - $parsed = SimplePie_Cache::parse_URL($location); - $this->options['host'] = empty($parsed['host']) ? $this->options['host'] : $parsed['host']; - $this->options['port'] = empty($parsed['port']) ? $this->options['port'] : $parsed['port']; - $this->options['extras'] = array_merge($this->options['extras'], $parsed['extras']); - $this->name = $this->options['extras']['prefix'] . md5("$name:$type"); - - $this->cache = new Memcache(); - $this->cache->addServer($this->options['host'], (int) $this->options['port']); - } - - /** - * Save data to the cache - * - * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property - * @return bool Successfulness - */ - public function save($data) - { - if ($data instanceof SimplePie) - { - $data = $data->data; - } - return $this->cache->set($this->name, serialize($data), MEMCACHE_COMPRESSED, (int) $this->options['extras']['timeout']); - } - - /** - * Retrieve the data saved to the cache - * - * @return array Data for SimplePie::$data - */ - public function load() - { - $data = $this->cache->get($this->name); - - if ($data !== false) - { - return unserialize($data); - } - return false; - } - - /** - * Retrieve the last modified time for the cache - * - * @return int Timestamp - */ - public function mtime() - { - $data = $this->cache->get($this->name); - - if ($data !== false) - { - // essentially ignore the mtime because Memcache expires on it's own - return time(); - } - - return false; - } - - /** - * Set the last modified time to the current time - * - * @return bool Success status - */ - public function touch() - { - $data = $this->cache->get($this->name); - - if ($data !== false) - { - return $this->cache->set($this->name, $data, MEMCACHE_COMPRESSED, (int) $this->duration); - } - - return false; - } - - /** - * Remove the cache - * - * @return bool Success status - */ - public function unlink() - { - return $this->cache->delete($this->name, 0); - } -} - -/** - * Caches data to a MySQL database - * - * Registered for URLs with the "mysql" protocol - * - * For example, `mysql://root:password@localhost:3306/mydb?prefix=sp_` will - * connect to the `mydb` database on `localhost` on port 3306, with the user - * `root` and the password `password`. All tables will be prefixed with `sp_` - * - * @package SimplePie - * @subpackage Caching - */ -class SimplePie_Cache_MySQL extends SimplePie_Cache_DB -{ - /** - * PDO instance - * - * @var PDO - */ - protected $mysql; - - /** - * Options - * - * @var array - */ - protected $options; - - /** - * Cache ID - * - * @var string - */ - protected $id; - - /** - * Create a new cache object - * - * @param string $location Location string (from SimplePie::$cache_location) - * @param string $name Unique ID for the cache - * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data - */ - public function __construct($location, $name, $type) - { - $this->options = array( - 'user' => null, - 'pass' => null, - 'host' => '127.0.0.1', - 'port' => '3306', - 'path' => '', - 'extras' => array( - 'prefix' => '', - ), - ); - $this->options = array_merge_recursive($this->options, SimplePie_Cache::parse_URL($location)); - - // Path is prefixed with a "/" - $this->options['dbname'] = substr($this->options['path'], 1); - - try - { - $this->mysql = new PDO("mysql:dbname={$this->options['dbname']};host={$this->options['host']};port={$this->options['port']}", $this->options['user'], $this->options['pass'], array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); - } - catch (PDOException $e) - { - $this->mysql = null; - return; - } - - $this->id = $name . $type; - - if (!$query = $this->mysql->query('SHOW TABLES')) - { - $this->mysql = null; - return; - } - - $db = array(); - while ($row = $query->fetchColumn()) - { - $db[] = $row; - } - - if (!in_array($this->options['extras']['prefix'] . 'cache_data', $db)) - { - $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'cache_data` (`id` TEXT CHARACTER SET utf8 NOT NULL, `items` SMALLINT NOT NULL DEFAULT 0, `data` BLOB NOT NULL, `mtime` INT UNSIGNED NOT NULL, UNIQUE (`id`(125)))'); - if ($query === false) - { - $this->mysql = null; - } - } - - if (!in_array($this->options['extras']['prefix'] . 'items', $db)) - { - $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'items` (`feed_id` TEXT CHARACTER SET utf8 NOT NULL, `id` TEXT CHARACTER SET utf8 NOT NULL, `data` TEXT CHARACTER SET utf8 NOT NULL, `posted` INT UNSIGNED NOT NULL, INDEX `feed_id` (`feed_id`(125)))'); - if ($query === false) - { - $this->mysql = null; - } - } - } - - /** - * Save data to the cache - * - * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property - * @return bool Successfulness - */ - public function save($data) - { - if ($this->mysql === null) - { - return false; - } - - if ($data instanceof SimplePie) - { - $data = clone $data; - - $prepared = self::prepare_simplepie_object_for_cache($data); - - $query = $this->mysql->prepare('SELECT COUNT(*) FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed'); - $query->bindValue(':feed', $this->id); - if ($query->execute()) - { - if ($query->fetchColumn() > 0) - { - $items = count($prepared[1]); - if ($items) - { - $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = :items, `data` = :data, `mtime` = :time WHERE `id` = :feed'; - $query = $this->mysql->prepare($sql); - $query->bindValue(':items', $items); - } - else - { - $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `data` = :data, `mtime` = :time WHERE `id` = :feed'; - $query = $this->mysql->prepare($sql); - } - - $query->bindValue(':data', $prepared[0]); - $query->bindValue(':time', time()); - $query->bindValue(':feed', $this->id); - if (!$query->execute()) - { - return false; - } - } - else - { - $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:feed, :count, :data, :time)'); - $query->bindValue(':feed', $this->id); - $query->bindValue(':count', count($prepared[1])); - $query->bindValue(':data', $prepared[0]); - $query->bindValue(':time', time()); - if (!$query->execute()) - { - return false; - } - } - - $ids = array_keys($prepared[1]); - if (!empty($ids)) - { - foreach ($ids as $id) - { - $database_ids[] = $this->mysql->quote($id); - } - - $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `id` = ' . implode(' OR `id` = ', $database_ids) . ' AND `feed_id` = :feed'); - $query->bindValue(':feed', $this->id); - - if ($query->execute()) - { - $existing_ids = array(); - while ($row = $query->fetchColumn()) - { - $existing_ids[] = $row; - } - - $new_ids = array_diff($ids, $existing_ids); - - foreach ($new_ids as $new_id) - { - if (!($date = $prepared[1][$new_id]->get_date('U'))) - { - $date = time(); - } - - $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'items` (`feed_id`, `id`, `data`, `posted`) VALUES(:feed, :id, :data, :date)'); - $query->bindValue(':feed', $this->id); - $query->bindValue(':id', $new_id); - $query->bindValue(':data', serialize($prepared[1][$new_id]->data)); - $query->bindValue(':date', $date); - if (!$query->execute()) - { - return false; - } - } - return true; - } - } - else - { - return true; - } - } - } - else - { - $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed'); - $query->bindValue(':feed', $this->id); - if ($query->execute()) - { - if ($query->rowCount() > 0) - { - $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = 0, `data` = :data, `mtime` = :time WHERE `id` = :feed'); - $query->bindValue(':data', serialize($data)); - $query->bindValue(':time', time()); - $query->bindValue(':feed', $this->id); - if ($this->execute()) - { - return true; - } - } - else - { - $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:id, 0, :data, :time)'); - $query->bindValue(':id', $this->id); - $query->bindValue(':data', serialize($data)); - $query->bindValue(':time', time()); - if ($query->execute()) - { - return true; - } - } - } - } - return false; - } - - /** - * Retrieve the data saved to the cache - * - * @return array Data for SimplePie::$data - */ - public function load() - { - if ($this->mysql === null) - { - return false; - } - - $query = $this->mysql->prepare('SELECT `items`, `data` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id'); - $query->bindValue(':id', $this->id); - if ($query->execute() && ($row = $query->fetch())) - { - $data = unserialize($row[1]); - - if (isset($this->options['items'][0])) - { - $items = (int) $this->options['items'][0]; - } - else - { - $items = (int) $row[0]; - } - - if ($items !== 0) - { - if (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; - } - elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; - } - elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; - } - elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]; - } - else - { - $feed = null; - } - - if ($feed !== null) - { - $sql = 'SELECT `data` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :feed ORDER BY `posted` DESC'; - if ($items > 0) - { - $sql .= ' LIMIT ' . $items; - } - - $query = $this->mysql->prepare($sql); - $query->bindValue(':feed', $this->id); - if ($query->execute()) - { - while ($row = $query->fetchColumn()) - { - $feed['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'][] = unserialize($row); - } - } - else - { - return false; - } - } - } - return $data; - } - return false; - } - - /** - * Retrieve the last modified time for the cache - * - * @return int Timestamp - */ - public function mtime() - { - if ($this->mysql === null) - { - return false; - } - - $query = $this->mysql->prepare('SELECT `mtime` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id'); - $query->bindValue(':id', $this->id); - if ($query->execute() && ($time = $query->fetchColumn())) - { - return $time; - } - else - { - return false; - } - } - - /** - * Set the last modified time to the current time - * - * @return bool Success status - */ - public function touch() - { - if ($this->mysql === null) - { - return false; - } - - $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `mtime` = :time WHERE `id` = :id'); - $query->bindValue(':time', time()); - $query->bindValue(':id', $this->id); - if ($query->execute() && $query->rowCount() > 0) - { - return true; - } - else - { - return false; - } - } - - /** - * Remove the cache - * - * @return bool Success status - */ - public function unlink() - { - if ($this->mysql === null) - { - return false; - } - - $query = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id'); - $query->bindValue(':id', $this->id); - $query2 = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :id'); - $query2->bindValue(':id', $this->id); - if ($query->execute() && $query2->execute()) - { - return true; - } - else - { - return false; - } - } -} - -/** - * Used to create cache objects - * - * This class can be overloaded with {@see SimplePie::set_cache_class()}, - * although the preferred way is to create your own handler - * via {@see register()} - * - * @package SimplePie - * @subpackage Caching - */ -class SimplePie_Cache -{ - /** - * Cache handler classes - * - * These receive 3 parameters to their constructor, as documented in - * {@see register()} - * @var array - */ - protected static $handlers = array( - 'mysql' => 'SimplePie_Cache_MySQL', - 'memcache' => 'SimplePie_Cache_Memcache', - ); - - /** - * Don't call the constructor. Please. - */ - private function __construct() { } - - /** - * Create a new SimplePie_Cache object - * - * @param string $location URL location (scheme is used to determine handler) - * @param string $filename Unique identifier for cache object - * @param string $extension 'spi' or 'spc' - * @return SimplePie_Cache_Base Type of object depends on scheme of `$location` - */ - public static function get_handler($location, $filename, $extension) - { - $type = explode(':', $location, 2); - $type = $type[0]; - if (!empty(self::$handlers[$type])) - { - $class = self::$handlers[$type]; - return new $class($location, $filename, $extension); - } - - return new SimplePie_Cache_File($location, $filename, $extension); - } - - /** - * Create a new SimplePie_Cache object - * - * @deprecated Use {@see get_handler} instead - */ - public function create($location, $filename, $extension) - { - trigger_error('Cache::create() has been replaced with Cache::get_handler(). Switch to the registry system to use this.', E_USER_DEPRECATED); - return self::get_handler($location, $filename, $extension); - } - - /** - * Register a handler - * - * @param string $type DSN type to register for - * @param string $class Name of handler class. Must implement SimplePie_Cache_Base - */ - public static function register($type, $class) - { - self::$handlers[$type] = $class; - } - - /** - * Parse a URL into an array - * - * @param string $url - * @return array - */ - public static function parse_URL($url) - { - $params = parse_url($url); - $params['extras'] = array(); - if (isset($params['query'])) - { - parse_str($params['query'], $params['extras']); - } - return $params; - } -} - -/** - * Handles `<media:text>` captions as defined in Media RSS. - * - * Used by {@see SimplePie_Enclosure::get_caption()} and {@see SimplePie_Enclosure::get_captions()} - * - * This class can be overloaded with {@see SimplePie::set_caption_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Caption -{ - /** - * Content type - * - * @var string - * @see get_type() - */ - var $type; - - /** - * Language - * - * @var string - * @see get_language() - */ - var $lang; - - /** - * Start time - * - * @var string - * @see get_starttime() - */ - var $startTime; - - /** - * End time - * - * @var string - * @see get_endtime() - */ - var $endTime; - - /** - * Caption text - * - * @var string - * @see get_text() - */ - var $text; - - /** - * Constructor, used to input the data - * - * For documentation on all the parameters, see the corresponding - * properties and their accessors - */ - public function __construct($type = null, $lang = null, $startTime = null, $endTime = null, $text = null) - { - $this->type = $type; - $this->lang = $lang; - $this->startTime = $startTime; - $this->endTime = $endTime; - $this->text = $text; - } - - /** - * String-ified version - * - * @return string - */ - public function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - /** - * Get the end time - * - * @return string|null Time in the format 'hh:mm:ss.SSS' - */ - public function get_endtime() - { - if ($this->endTime !== null) - { - return $this->endTime; - } - else - { - return null; - } - } - - /** - * Get the language - * - * @link http://tools.ietf.org/html/rfc3066 - * @return string|null Language code as per RFC 3066 - */ - public function get_language() - { - if ($this->lang !== null) - { - return $this->lang; - } - else - { - return null; - } - } - - /** - * Get the start time - * - * @return string|null Time in the format 'hh:mm:ss.SSS' - */ - public function get_starttime() - { - if ($this->startTime !== null) - { - return $this->startTime; - } - else - { - return null; - } - } - - /** - * Get the text of the caption - * - * @return string|null - */ - public function get_text() - { - if ($this->text !== null) - { - return $this->text; - } - else - { - return null; - } - } - - /** - * Get the content type (not MIME type) - * - * @return string|null Either 'text' or 'html' - */ - public function get_type() - { - if ($this->type !== null) - { - return $this->type; - } - else - { - return null; - } - } -} - -/** - * Manages all category-related data - * - * Used by {@see SimplePie_Item::get_category()} and {@see SimplePie_Item::get_categories()} - * - * This class can be overloaded with {@see SimplePie::set_category_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Category -{ - /** - * Category identifier - * - * @var string - * @see get_term - */ - var $term; - - /** - * Categorization scheme identifier - * - * @var string - * @see get_scheme() - */ - var $scheme; - - /** - * Human readable label - * - * @var string - * @see get_label() - */ - var $label; - - /** - * Constructor, used to input the data - * - * @param string $term - * @param string $scheme - * @param string $label - */ - public function __construct($term = null, $scheme = null, $label = null) - { - $this->term = $term; - $this->scheme = $scheme; - $this->label = $label; - } - - /** - * String-ified version - * - * @return string - */ - public function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - /** - * Get the category identifier - * - * @return string|null - */ - public function get_term() - { - if ($this->term !== null) - { - return $this->term; - } - else - { - return null; - } - } - - /** - * Get the categorization scheme identifier - * - * @return string|null - */ - public function get_scheme() - { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } - } - - /** - * Get the human readable label - * - * @return string|null - */ - public function get_label() - { - if ($this->label !== null) - { - return $this->label; - } - else - { - return $this->get_term(); - } - } -} - -/** - * Content-type sniffing - * - * Based on the rules in http://tools.ietf.org/html/draft-abarth-mime-sniff-06 - * - * This is used since we can't always trust Content-Type headers, and is based - * upon the HTML5 parsing rules. - * - * - * This class can be overloaded with {@see SimplePie::set_content_type_sniffer_class()} - * - * @package SimplePie - * @subpackage HTTP - */ -class SimplePie_Content_Type_Sniffer -{ - /** - * File object - * - * @var SimplePie_File - */ - var $file; - - /** - * Create an instance of the class with the input file - * - * @param SimplePie_Content_Type_Sniffer $file Input file - */ - public function __construct($file) - { - $this->file = $file; - } - - /** - * Get the Content-Type of the specified file - * - * @return string Actual Content-Type - */ - public function get_type() - { - if (isset($this->file->headers['content-type'])) - { - if (!isset($this->file->headers['content-encoding']) - && ($this->file->headers['content-type'] === 'text/plain' - || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1' - || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1' - || $this->file->headers['content-type'] === 'text/plain; charset=UTF-8')) - { - return $this->text_or_binary(); - } - - if (($pos = strpos($this->file->headers['content-type'], ';')) !== false) - { - $official = substr($this->file->headers['content-type'], 0, $pos); - } - else - { - $official = $this->file->headers['content-type']; - } - $official = trim(strtolower($official)); - - if ($official === 'unknown/unknown' - || $official === 'application/unknown') - { - return $this->unknown(); - } - elseif (substr($official, -4) === '+xml' - || $official === 'text/xml' - || $official === 'application/xml') - { - return $official; - } - elseif (substr($official, 0, 6) === 'image/') - { - if ($return = $this->image()) - { - return $return; - } - else - { - return $official; - } - } - elseif ($official === 'text/html') - { - return $this->feed_or_html(); - } - else - { - return $official; - } - } - else - { - return $this->unknown(); - } - } - - /** - * Sniff text or binary - * - * @return string Actual Content-Type - */ - public function text_or_binary() - { - if (substr($this->file->body, 0, 2) === "\xFE\xFF" - || substr($this->file->body, 0, 2) === "\xFF\xFE" - || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF" - || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF") - { - return 'text/plain'; - } - elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body)) - { - return 'application/octect-stream'; - } - else - { - return 'text/plain'; - } - } - - /** - * Sniff unknown - * - * @return string Actual Content-Type - */ - public function unknown() - { - $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20"); - if (strtolower(substr($this->file->body, $ws, 14)) === '<!doctype html' - || strtolower(substr($this->file->body, $ws, 5)) === '<html' - || strtolower(substr($this->file->body, $ws, 7)) === '<script') - { - return 'text/html'; - } - elseif (substr($this->file->body, 0, 5) === '%PDF-') - { - return 'application/pdf'; - } - elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-') - { - return 'application/postscript'; - } - elseif (substr($this->file->body, 0, 6) === 'GIF87a' - || substr($this->file->body, 0, 6) === 'GIF89a') - { - return 'image/gif'; - } - elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") - { - return 'image/png'; - } - elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") - { - return 'image/jpeg'; - } - elseif (substr($this->file->body, 0, 2) === "\x42\x4D") - { - return 'image/bmp'; - } - elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00") - { - return 'image/vnd.microsoft.icon'; - } - else - { - return $this->text_or_binary(); - } - } - - /** - * Sniff images - * - * @return string Actual Content-Type - */ - public function image() - { - if (substr($this->file->body, 0, 6) === 'GIF87a' - || substr($this->file->body, 0, 6) === 'GIF89a') - { - return 'image/gif'; - } - elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") - { - return 'image/png'; - } - elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") - { - return 'image/jpeg'; - } - elseif (substr($this->file->body, 0, 2) === "\x42\x4D") - { - return 'image/bmp'; - } - elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00") - { - return 'image/vnd.microsoft.icon'; - } - else - { - return false; - } - } - - /** - * Sniff HTML - * - * @return string Actual Content-Type - */ - public function feed_or_html() - { - $len = strlen($this->file->body); - $pos = strspn($this->file->body, "\x09\x0A\x0D\x20"); - - while ($pos < $len) - { - switch ($this->file->body[$pos]) - { - case "\x09": - case "\x0A": - case "\x0D": - case "\x20": - $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos); - continue 2; - - case '<': - $pos++; - break; - - default: - return 'text/html'; - } - - if (substr($this->file->body, $pos, 3) === '!--') - { - $pos += 3; - if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false) - { - $pos += 3; - } - else - { - return 'text/html'; - } - } - elseif (substr($this->file->body, $pos, 1) === '!') - { - if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false) - { - $pos++; - } - else - { - return 'text/html'; - } - } - elseif (substr($this->file->body, $pos, 1) === '?') - { - if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false) - { - $pos += 2; - } - else - { - return 'text/html'; - } - } - elseif (substr($this->file->body, $pos, 3) === 'rss' - || substr($this->file->body, $pos, 7) === 'rdf:RDF') - { - return 'application/rss+xml'; - } - elseif (substr($this->file->body, $pos, 4) === 'feed') - { - return 'application/atom+xml'; - } - else - { - return 'text/html'; - } - } - - return 'text/html'; - } -} - -/** - * Manages `<media:copyright>` copyright tags as defined in Media RSS - * - * Used by {@see SimplePie_Enclosure::get_copyright()} - * - * This class can be overloaded with {@see SimplePie::set_copyright_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Copyright -{ - /** - * Copyright URL - * - * @var string - * @see get_url() - */ - var $url; - - /** - * Attribution - * - * @var string - * @see get_attribution() - */ - var $label; - - /** - * Constructor, used to input the data - * - * For documentation on all the parameters, see the corresponding - * properties and their accessors - */ - public function __construct($url = null, $label = null) - { - $this->url = $url; - $this->label = $label; - } - - /** - * String-ified version - * - * @return string - */ - public function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - /** - * Get the copyright URL - * - * @return string|null URL to copyright information - */ - public function get_url() - { - if ($this->url !== null) - { - return $this->url; - } - else - { - return null; - } - } - - /** - * Get the attribution text - * - * @return string|null - */ - public function get_attribution() - { - if ($this->label !== null) - { - return $this->label; - } - else - { - return null; - } - } -} - -/** - * SimplePie class. - * - * Class for backward compatibility. - * - * @deprecated Use {@see SimplePie} directly - * @package SimplePie - * @subpackage API - */ -class SimplePie_Core extends SimplePie -{ - -} - -/** - * Handles `<media:credit>` as defined in Media RSS - * - * Used by {@see SimplePie_Enclosure::get_credit()} and {@see SimplePie_Enclosure::get_credits()} - * - * This class can be overloaded with {@see SimplePie::set_credit_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Credit -{ - /** - * Credited role - * - * @var string - * @see get_role() - */ - var $role; - - /** - * Organizational scheme - * - * @var string - * @see get_scheme() - */ - var $scheme; - - /** - * Credited name - * - * @var string - * @see get_name() - */ - var $name; - - /** - * Constructor, used to input the data - * - * For documentation on all the parameters, see the corresponding - * properties and their accessors - */ - public function __construct($role = null, $scheme = null, $name = null) - { - $this->role = $role; - $this->scheme = $scheme; - $this->name = $name; - } - - /** - * String-ified version - * - * @return string - */ - public function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - /** - * Get the role of the person receiving credit - * - * @return string|null - */ - public function get_role() - { - if ($this->role !== null) - { - return $this->role; - } - else - { - return null; - } - } - - /** - * Get the organizational scheme - * - * @return string|null - */ - public function get_scheme() - { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } - } - - /** - * Get the credited person/entity's name - * - * @return string|null - */ - public function get_name() - { - if ($this->name !== null) - { - return $this->name; - } - else - { - return null; - } - } -} - -/** - * Decode HTML Entities - * - * This implements HTML5 as of revision 967 (2007-06-28) - * - * @deprecated Use DOMDocument instead! - * @package SimplePie - */ -class SimplePie_Decode_HTML_Entities -{ - /** - * Data to be parsed - * - * @access private - * @var string - */ - var $data = ''; - - /** - * Currently consumed bytes - * - * @access private - * @var string - */ - var $consumed = ''; - - /** - * Position of the current byte being parsed - * - * @access private - * @var int - */ - var $position = 0; - - /** - * Create an instance of the class with the input data - * - * @access public - * @param string $data Input data - */ - public function __construct($data) - { - $this->data = $data; - } - - /** - * Parse the input data - * - * @access public - * @return string Output data - */ - public function parse() - { - while (($this->position = strpos($this->data, '&', $this->position)) !== false) - { - $this->consume(); - $this->entity(); - $this->consumed = ''; - } - return $this->data; - } - - /** - * Consume the next byte - * - * @access private - * @return mixed The next byte, or false, if there is no more data - */ - public function consume() - { - if (isset($this->data[$this->position])) - { - $this->consumed .= $this->data[$this->position]; - return $this->data[$this->position++]; - } - else - { - return false; - } - } - - /** - * Consume a range of characters - * - * @access private - * @param string $chars Characters to consume - * @return mixed A series of characters that match the range, or false - */ - public function consume_range($chars) - { - if ($len = strspn($this->data, $chars, $this->position)) - { - $data = substr($this->data, $this->position, $len); - $this->consumed .= $data; - $this->position += $len; - return $data; - } - else - { - return false; - } - } - - /** - * Unconsume one byte - * - * @access private - */ - public function unconsume() - { - $this->consumed = substr($this->consumed, 0, -1); - $this->position--; - } - - /** - * Decode an entity - * - * @access private - */ - public function entity() - { - switch ($this->consume()) - { - case "\x09": - case "\x0A": - case "\x0B": - case "\x0B": - case "\x0C": - case "\x20": - case "\x3C": - case "\x26": - case false: - break; - - case "\x23": - switch ($this->consume()) - { - case "\x78": - case "\x58": - $range = '0123456789ABCDEFabcdef'; - $hex = true; - break; - - default: - $range = '0123456789'; - $hex = false; - $this->unconsume(); - break; - } - - if ($codepoint = $this->consume_range($range)) - { - static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8"); - - if ($hex) - { - $codepoint = hexdec($codepoint); - } - else - { - $codepoint = intval($codepoint); - } - - if (isset($windows_1252_specials[$codepoint])) - { - $replacement = $windows_1252_specials[$codepoint]; - } - else - { - $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint); - } - - if (!in_array($this->consume(), array(';', false), true)) - { - $this->unconsume(); - } - - $consumed_length = strlen($this->consumed); - $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length); - $this->position += strlen($replacement) - $consumed_length; - } - break; - - default: - static $entities = array( - 'Aacute' => "\xC3\x81", - 'aacute' => "\xC3\xA1", - 'Aacute;' => "\xC3\x81", - 'aacute;' => "\xC3\xA1", - 'Acirc' => "\xC3\x82", - 'acirc' => "\xC3\xA2", - 'Acirc;' => "\xC3\x82", - 'acirc;' => "\xC3\xA2", - 'acute' => "\xC2\xB4", - 'acute;' => "\xC2\xB4", - 'AElig' => "\xC3\x86", - 'aelig' => "\xC3\xA6", - 'AElig;' => "\xC3\x86", - 'aelig;' => "\xC3\xA6", - 'Agrave' => "\xC3\x80", - 'agrave' => "\xC3\xA0", - 'Agrave;' => "\xC3\x80", - 'agrave;' => "\xC3\xA0", - 'alefsym;' => "\xE2\x84\xB5", - 'Alpha;' => "\xCE\x91", - 'alpha;' => "\xCE\xB1", - 'AMP' => "\x26", - 'amp' => "\x26", - 'AMP;' => "\x26", - 'amp;' => "\x26", - 'and;' => "\xE2\x88\xA7", - 'ang;' => "\xE2\x88\xA0", - 'apos;' => "\x27", - 'Aring' => "\xC3\x85", - 'aring' => "\xC3\xA5", - 'Aring;' => "\xC3\x85", - 'aring;' => "\xC3\xA5", - 'asymp;' => "\xE2\x89\x88", - 'Atilde' => "\xC3\x83", - 'atilde' => "\xC3\xA3", - 'Atilde;' => "\xC3\x83", - 'atilde;' => "\xC3\xA3", - 'Auml' => "\xC3\x84", - 'auml' => "\xC3\xA4", - 'Auml;' => "\xC3\x84", - 'auml;' => "\xC3\xA4", - 'bdquo;' => "\xE2\x80\x9E", - 'Beta;' => "\xCE\x92", - 'beta;' => "\xCE\xB2", - 'brvbar' => "\xC2\xA6", - 'brvbar;' => "\xC2\xA6", - 'bull;' => "\xE2\x80\xA2", - 'cap;' => "\xE2\x88\xA9", - 'Ccedil' => "\xC3\x87", - 'ccedil' => "\xC3\xA7", - 'Ccedil;' => "\xC3\x87", - 'ccedil;' => "\xC3\xA7", - 'cedil' => "\xC2\xB8", - 'cedil;' => "\xC2\xB8", - 'cent' => "\xC2\xA2", - 'cent;' => "\xC2\xA2", - 'Chi;' => "\xCE\xA7", - 'chi;' => "\xCF\x87", - 'circ;' => "\xCB\x86", - 'clubs;' => "\xE2\x99\xA3", - 'cong;' => "\xE2\x89\x85", - 'COPY' => "\xC2\xA9", - 'copy' => "\xC2\xA9", - 'COPY;' => "\xC2\xA9", - 'copy;' => "\xC2\xA9", - 'crarr;' => "\xE2\x86\xB5", - 'cup;' => "\xE2\x88\xAA", - 'curren' => "\xC2\xA4", - 'curren;' => "\xC2\xA4", - 'Dagger;' => "\xE2\x80\xA1", - 'dagger;' => "\xE2\x80\xA0", - 'dArr;' => "\xE2\x87\x93", - 'darr;' => "\xE2\x86\x93", - 'deg' => "\xC2\xB0", - 'deg;' => "\xC2\xB0", - 'Delta;' => "\xCE\x94", - 'delta;' => "\xCE\xB4", - 'diams;' => "\xE2\x99\xA6", - 'divide' => "\xC3\xB7", - 'divide;' => "\xC3\xB7", - 'Eacute' => "\xC3\x89", - 'eacute' => "\xC3\xA9", - 'Eacute;' => "\xC3\x89", - 'eacute;' => "\xC3\xA9", - 'Ecirc' => "\xC3\x8A", - 'ecirc' => "\xC3\xAA", - 'Ecirc;' => "\xC3\x8A", - 'ecirc;' => "\xC3\xAA", - 'Egrave' => "\xC3\x88", - 'egrave' => "\xC3\xA8", - 'Egrave;' => "\xC3\x88", - 'egrave;' => "\xC3\xA8", - 'empty;' => "\xE2\x88\x85", - 'emsp;' => "\xE2\x80\x83", - 'ensp;' => "\xE2\x80\x82", - 'Epsilon;' => "\xCE\x95", - 'epsilon;' => "\xCE\xB5", - 'equiv;' => "\xE2\x89\xA1", - 'Eta;' => "\xCE\x97", - 'eta;' => "\xCE\xB7", - 'ETH' => "\xC3\x90", - 'eth' => "\xC3\xB0", - 'ETH;' => "\xC3\x90", - 'eth;' => "\xC3\xB0", - 'Euml' => "\xC3\x8B", - 'euml' => "\xC3\xAB", - 'Euml;' => "\xC3\x8B", - 'euml;' => "\xC3\xAB", - 'euro;' => "\xE2\x82\xAC", - 'exist;' => "\xE2\x88\x83", - 'fnof;' => "\xC6\x92", - 'forall;' => "\xE2\x88\x80", - 'frac12' => "\xC2\xBD", - 'frac12;' => "\xC2\xBD", - 'frac14' => "\xC2\xBC", - 'frac14;' => "\xC2\xBC", - 'frac34' => "\xC2\xBE", - 'frac34;' => "\xC2\xBE", - 'frasl;' => "\xE2\x81\x84", - 'Gamma;' => "\xCE\x93", - 'gamma;' => "\xCE\xB3", - 'ge;' => "\xE2\x89\xA5", - 'GT' => "\x3E", - 'gt' => "\x3E", - 'GT;' => "\x3E", - 'gt;' => "\x3E", - 'hArr;' => "\xE2\x87\x94", - 'harr;' => "\xE2\x86\x94", - 'hearts;' => "\xE2\x99\xA5", - 'hellip;' => "\xE2\x80\xA6", - 'Iacute' => "\xC3\x8D", - 'iacute' => "\xC3\xAD", - 'Iacute;' => "\xC3\x8D", - 'iacute;' => "\xC3\xAD", - 'Icirc' => "\xC3\x8E", - 'icirc' => "\xC3\xAE", - 'Icirc;' => "\xC3\x8E", - 'icirc;' => "\xC3\xAE", - 'iexcl' => "\xC2\xA1", - 'iexcl;' => "\xC2\xA1", - 'Igrave' => "\xC3\x8C", - 'igrave' => "\xC3\xAC", - 'Igrave;' => "\xC3\x8C", - 'igrave;' => "\xC3\xAC", - 'image;' => "\xE2\x84\x91", - 'infin;' => "\xE2\x88\x9E", - 'int;' => "\xE2\x88\xAB", - 'Iota;' => "\xCE\x99", - 'iota;' => "\xCE\xB9", - 'iquest' => "\xC2\xBF", - 'iquest;' => "\xC2\xBF", - 'isin;' => "\xE2\x88\x88", - 'Iuml' => "\xC3\x8F", - 'iuml' => "\xC3\xAF", - 'Iuml;' => "\xC3\x8F", - 'iuml;' => "\xC3\xAF", - 'Kappa;' => "\xCE\x9A", - 'kappa;' => "\xCE\xBA", - 'Lambda;' => "\xCE\x9B", - 'lambda;' => "\xCE\xBB", - 'lang;' => "\xE3\x80\x88", - 'laquo' => "\xC2\xAB", - 'laquo;' => "\xC2\xAB", - 'lArr;' => "\xE2\x87\x90", - 'larr;' => "\xE2\x86\x90", - 'lceil;' => "\xE2\x8C\x88", - 'ldquo;' => "\xE2\x80\x9C", - 'le;' => "\xE2\x89\xA4", - 'lfloor;' => "\xE2\x8C\x8A", - 'lowast;' => "\xE2\x88\x97", - 'loz;' => "\xE2\x97\x8A", - 'lrm;' => "\xE2\x80\x8E", - 'lsaquo;' => "\xE2\x80\xB9", - 'lsquo;' => "\xE2\x80\x98", - 'LT' => "\x3C", - 'lt' => "\x3C", - 'LT;' => "\x3C", - 'lt;' => "\x3C", - 'macr' => "\xC2\xAF", - 'macr;' => "\xC2\xAF", - 'mdash;' => "\xE2\x80\x94", - 'micro' => "\xC2\xB5", - 'micro;' => "\xC2\xB5", - 'middot' => "\xC2\xB7", - 'middot;' => "\xC2\xB7", - 'minus;' => "\xE2\x88\x92", - 'Mu;' => "\xCE\x9C", - 'mu;' => "\xCE\xBC", - 'nabla;' => "\xE2\x88\x87", - 'nbsp' => "\xC2\xA0", - 'nbsp;' => "\xC2\xA0", - 'ndash;' => "\xE2\x80\x93", - 'ne;' => "\xE2\x89\xA0", - 'ni;' => "\xE2\x88\x8B", - 'not' => "\xC2\xAC", - 'not;' => "\xC2\xAC", - 'notin;' => "\xE2\x88\x89", - 'nsub;' => "\xE2\x8A\x84", - 'Ntilde' => "\xC3\x91", - 'ntilde' => "\xC3\xB1", - 'Ntilde;' => "\xC3\x91", - 'ntilde;' => "\xC3\xB1", - 'Nu;' => "\xCE\x9D", - 'nu;' => "\xCE\xBD", - 'Oacute' => "\xC3\x93", - 'oacute' => "\xC3\xB3", - 'Oacute;' => "\xC3\x93", - 'oacute;' => "\xC3\xB3", - 'Ocirc' => "\xC3\x94", - 'ocirc' => "\xC3\xB4", - 'Ocirc;' => "\xC3\x94", - 'ocirc;' => "\xC3\xB4", - 'OElig;' => "\xC5\x92", - 'oelig;' => "\xC5\x93", - 'Ograve' => "\xC3\x92", - 'ograve' => "\xC3\xB2", - 'Ograve;' => "\xC3\x92", - 'ograve;' => "\xC3\xB2", - 'oline;' => "\xE2\x80\xBE", - 'Omega;' => "\xCE\xA9", - 'omega;' => "\xCF\x89", - 'Omicron;' => "\xCE\x9F", - 'omicron;' => "\xCE\xBF", - 'oplus;' => "\xE2\x8A\x95", - 'or;' => "\xE2\x88\xA8", - 'ordf' => "\xC2\xAA", - 'ordf;' => "\xC2\xAA", - 'ordm' => "\xC2\xBA", - 'ordm;' => "\xC2\xBA", - 'Oslash' => "\xC3\x98", - 'oslash' => "\xC3\xB8", - 'Oslash;' => "\xC3\x98", - 'oslash;' => "\xC3\xB8", - 'Otilde' => "\xC3\x95", - 'otilde' => "\xC3\xB5", - 'Otilde;' => "\xC3\x95", - 'otilde;' => "\xC3\xB5", - 'otimes;' => "\xE2\x8A\x97", - 'Ouml' => "\xC3\x96", - 'ouml' => "\xC3\xB6", - 'Ouml;' => "\xC3\x96", - 'ouml;' => "\xC3\xB6", - 'para' => "\xC2\xB6", - 'para;' => "\xC2\xB6", - 'part;' => "\xE2\x88\x82", - 'permil;' => "\xE2\x80\xB0", - 'perp;' => "\xE2\x8A\xA5", - 'Phi;' => "\xCE\xA6", - 'phi;' => "\xCF\x86", - 'Pi;' => "\xCE\xA0", - 'pi;' => "\xCF\x80", - 'piv;' => "\xCF\x96", - 'plusmn' => "\xC2\xB1", - 'plusmn;' => "\xC2\xB1", - 'pound' => "\xC2\xA3", - 'pound;' => "\xC2\xA3", - 'Prime;' => "\xE2\x80\xB3", - 'prime;' => "\xE2\x80\xB2", - 'prod;' => "\xE2\x88\x8F", - 'prop;' => "\xE2\x88\x9D", - 'Psi;' => "\xCE\xA8", - 'psi;' => "\xCF\x88", - 'QUOT' => "\x22", - 'quot' => "\x22", - 'QUOT;' => "\x22", - 'quot;' => "\x22", - 'radic;' => "\xE2\x88\x9A", - 'rang;' => "\xE3\x80\x89", - 'raquo' => "\xC2\xBB", - 'raquo;' => "\xC2\xBB", - 'rArr;' => "\xE2\x87\x92", - 'rarr;' => "\xE2\x86\x92", - 'rceil;' => "\xE2\x8C\x89", - 'rdquo;' => "\xE2\x80\x9D", - 'real;' => "\xE2\x84\x9C", - 'REG' => "\xC2\xAE", - 'reg' => "\xC2\xAE", - 'REG;' => "\xC2\xAE", - 'reg;' => "\xC2\xAE", - 'rfloor;' => "\xE2\x8C\x8B", - 'Rho;' => "\xCE\xA1", - 'rho;' => "\xCF\x81", - 'rlm;' => "\xE2\x80\x8F", - 'rsaquo;' => "\xE2\x80\xBA", - 'rsquo;' => "\xE2\x80\x99", - 'sbquo;' => "\xE2\x80\x9A", - 'Scaron;' => "\xC5\xA0", - 'scaron;' => "\xC5\xA1", - 'sdot;' => "\xE2\x8B\x85", - 'sect' => "\xC2\xA7", - 'sect;' => "\xC2\xA7", - 'shy' => "\xC2\xAD", - 'shy;' => "\xC2\xAD", - 'Sigma;' => "\xCE\xA3", - 'sigma;' => "\xCF\x83", - 'sigmaf;' => "\xCF\x82", - 'sim;' => "\xE2\x88\xBC", - 'spades;' => "\xE2\x99\xA0", - 'sub;' => "\xE2\x8A\x82", - 'sube;' => "\xE2\x8A\x86", - 'sum;' => "\xE2\x88\x91", - 'sup;' => "\xE2\x8A\x83", - 'sup1' => "\xC2\xB9", - 'sup1;' => "\xC2\xB9", - 'sup2' => "\xC2\xB2", - 'sup2;' => "\xC2\xB2", - 'sup3' => "\xC2\xB3", - 'sup3;' => "\xC2\xB3", - 'supe;' => "\xE2\x8A\x87", - 'szlig' => "\xC3\x9F", - 'szlig;' => "\xC3\x9F", - 'Tau;' => "\xCE\xA4", - 'tau;' => "\xCF\x84", - 'there4;' => "\xE2\x88\xB4", - 'Theta;' => "\xCE\x98", - 'theta;' => "\xCE\xB8", - 'thetasym;' => "\xCF\x91", - 'thinsp;' => "\xE2\x80\x89", - 'THORN' => "\xC3\x9E", - 'thorn' => "\xC3\xBE", - 'THORN;' => "\xC3\x9E", - 'thorn;' => "\xC3\xBE", - 'tilde;' => "\xCB\x9C", - 'times' => "\xC3\x97", - 'times;' => "\xC3\x97", - 'TRADE;' => "\xE2\x84\xA2", - 'trade;' => "\xE2\x84\xA2", - 'Uacute' => "\xC3\x9A", - 'uacute' => "\xC3\xBA", - 'Uacute;' => "\xC3\x9A", - 'uacute;' => "\xC3\xBA", - 'uArr;' => "\xE2\x87\x91", - 'uarr;' => "\xE2\x86\x91", - 'Ucirc' => "\xC3\x9B", - 'ucirc' => "\xC3\xBB", - 'Ucirc;' => "\xC3\x9B", - 'ucirc;' => "\xC3\xBB", - 'Ugrave' => "\xC3\x99", - 'ugrave' => "\xC3\xB9", - 'Ugrave;' => "\xC3\x99", - 'ugrave;' => "\xC3\xB9", - 'uml' => "\xC2\xA8", - 'uml;' => "\xC2\xA8", - 'upsih;' => "\xCF\x92", - 'Upsilon;' => "\xCE\xA5", - 'upsilon;' => "\xCF\x85", - 'Uuml' => "\xC3\x9C", - 'uuml' => "\xC3\xBC", - 'Uuml;' => "\xC3\x9C", - 'uuml;' => "\xC3\xBC", - 'weierp;' => "\xE2\x84\x98", - 'Xi;' => "\xCE\x9E", - 'xi;' => "\xCE\xBE", - 'Yacute' => "\xC3\x9D", - 'yacute' => "\xC3\xBD", - 'Yacute;' => "\xC3\x9D", - 'yacute;' => "\xC3\xBD", - 'yen' => "\xC2\xA5", - 'yen;' => "\xC2\xA5", - 'yuml' => "\xC3\xBF", - 'Yuml;' => "\xC5\xB8", - 'yuml;' => "\xC3\xBF", - 'Zeta;' => "\xCE\x96", - 'zeta;' => "\xCE\xB6", - 'zwj;' => "\xE2\x80\x8D", - 'zwnj;' => "\xE2\x80\x8C" - ); - - for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++) - { - $consumed = substr($this->consumed, 1); - if (isset($entities[$consumed])) - { - $match = $consumed; - } - } - - if ($match !== null) - { - $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1); - $this->position += strlen($entities[$match]) - strlen($consumed) - 1; - } - break; - } - } -} - -/** - * Handles everything related to enclosures (including Media RSS and iTunes RSS) - * - * Used by {@see SimplePie_Item::get_enclosure()} and {@see SimplePie_Item::get_enclosures()} - * - * This class can be overloaded with {@see SimplePie::set_enclosure_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Enclosure -{ - /** - * @var string - * @see get_bitrate() - */ - var $bitrate; - - /** - * @var array - * @see get_captions() - */ - var $captions; - - /** - * @var array - * @see get_categories() - */ - var $categories; - - /** - * @var int - * @see get_channels() - */ - var $channels; - - /** - * @var SimplePie_Copyright - * @see get_copyright() - */ - var $copyright; - - /** - * @var array - * @see get_credits() - */ - var $credits; - - /** - * @var string - * @see get_description() - */ - var $description; - - /** - * @var int - * @see get_duration() - */ - var $duration; - - /** - * @var string - * @see get_expression() - */ - var $expression; - - /** - * @var string - * @see get_framerate() - */ - var $framerate; - - /** - * @var string - * @see get_handler() - */ - var $handler; - - /** - * @var array - * @see get_hashes() - */ - var $hashes; - - /** - * @var string - * @see get_height() - */ - var $height; - - /** - * @deprecated - * @var null - */ - var $javascript; - - /** - * @var array - * @see get_keywords() - */ - var $keywords; - - /** - * @var string - * @see get_language() - */ - var $lang; - - /** - * @var string - * @see get_length() - */ - var $length; - - /** - * @var string - * @see get_link() - */ - var $link; - - /** - * @var string - * @see get_medium() - */ - var $medium; - - /** - * @var string - * @see get_player() - */ - var $player; - - /** - * @var array - * @see get_ratings() - */ - var $ratings; - - /** - * @var array - * @see get_restrictions() - */ - var $restrictions; - - /** - * @var string - * @see get_sampling_rate() - */ - var $samplingrate; - - /** - * @var array - * @see get_thumbnails() - */ - var $thumbnails; - - /** - * @var string - * @see get_title() - */ - var $title; - - /** - * @var string - * @see get_type() - */ - var $type; - - /** - * @var string - * @see get_width() - */ - var $width; - - /** - * Constructor, used to input the data - * - * For documentation on all the parameters, see the corresponding - * properties and their accessors - * - * @uses idna_convert If available, this will convert an IDN - */ - public function __construct($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null) - { - $this->bitrate = $bitrate; - $this->captions = $captions; - $this->categories = $categories; - $this->channels = $channels; - $this->copyright = $copyright; - $this->credits = $credits; - $this->description = $description; - $this->duration = $duration; - $this->expression = $expression; - $this->framerate = $framerate; - $this->hashes = $hashes; - $this->height = $height; - $this->keywords = $keywords; - $this->lang = $lang; - $this->length = $length; - $this->link = $link; - $this->medium = $medium; - $this->player = $player; - $this->ratings = $ratings; - $this->restrictions = $restrictions; - $this->samplingrate = $samplingrate; - $this->thumbnails = $thumbnails; - $this->title = $title; - $this->type = $type; - $this->width = $width; - - if (class_exists('idna_convert')) - { - $idn = new idna_convert(); - $parsed = SimplePie_Misc::parse_url($link); - $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); - } - $this->handler = $this->get_handler(); // Needs to load last - } - - /** - * String-ified version - * - * @return string - */ - public function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - /** - * Get the bitrate - * - * @return string|null - */ - public function get_bitrate() - { - if ($this->bitrate !== null) - { - return $this->bitrate; - } - else - { - return null; - } - } - - /** - * Get a single caption - * - * @param int $key - * @return SimplePie_Caption|null - */ - public function get_caption($key = 0) - { - $captions = $this->get_captions(); - if (isset($captions[$key])) - { - return $captions[$key]; - } - else - { - return null; - } - } - - /** - * Get all captions - * - * @return array|null Array of {@see SimplePie_Caption} objects - */ - public function get_captions() - { - if ($this->captions !== null) - { - return $this->captions; - } - else - { - return null; - } - } - - /** - * Get a single category - * - * @param int $key - * @return SimplePie_Category|null - */ - public function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - /** - * Get all categories - * - * @return array|null Array of {@see SimplePie_Category} objects - */ - public function get_categories() - { - if ($this->categories !== null) - { - return $this->categories; - } - else - { - return null; - } - } - - /** - * Get the number of audio channels - * - * @return int|null - */ - public function get_channels() - { - if ($this->channels !== null) - { - return $this->channels; - } - else - { - return null; - } - } - - /** - * Get the copyright information - * - * @return SimplePie_Copyright|null - */ - public function get_copyright() - { - if ($this->copyright !== null) - { - return $this->copyright; - } - else - { - return null; - } - } - - /** - * Get a single credit - * - * @param int $key - * @return SimplePie_Credit|null - */ - public function get_credit($key = 0) - { - $credits = $this->get_credits(); - if (isset($credits[$key])) - { - return $credits[$key]; - } - else - { - return null; - } - } - - /** - * Get all credits - * - * @return array|null Array of {@see SimplePie_Credit} objects - */ - public function get_credits() - { - if ($this->credits !== null) - { - return $this->credits; - } - else - { - return null; - } - } - - /** - * Get the description of the enclosure - * - * @return string|null - */ - public function get_description() - { - if ($this->description !== null) - { - return $this->description; - } - else - { - return null; - } - } - - /** - * Get the duration of the enclosure - * - * @param string $convert Convert seconds into hh:mm:ss - * @return string|int|null 'hh:mm:ss' string if `$convert` was specified, otherwise integer (or null if none found) - */ - public function get_duration($convert = false) - { - if ($this->duration !== null) - { - if ($convert) - { - $time = SimplePie_Misc::time_hms($this->duration); - return $time; - } - else - { - return $this->duration; - } - } - else - { - return null; - } - } - - /** - * Get the expression - * - * @return string Probably one of 'sample', 'full', 'nonstop', 'clip'. Defaults to 'full' - */ - public function get_expression() - { - if ($this->expression !== null) - { - return $this->expression; - } - else - { - return 'full'; - } - } - - /** - * Get the file extension - * - * @return string|null - */ - public function get_extension() - { - if ($this->link !== null) - { - $url = SimplePie_Misc::parse_url($this->link); - if ($url['path'] !== '') - { - return pathinfo($url['path'], PATHINFO_EXTENSION); - } - } - return null; - } - - /** - * Get the framerate (in frames-per-second) - * - * @return string|null - */ - public function get_framerate() - { - if ($this->framerate !== null) - { - return $this->framerate; - } - else - { - return null; - } - } - - /** - * Get the preferred handler - * - * @return string|null One of 'flash', 'fmedia', 'quicktime', 'wmedia', 'mp3' - */ - public function get_handler() - { - return $this->get_real_type(true); - } - - /** - * Get a single hash - * - * @link http://www.rssboard.org/media-rss#media-hash - * @param int $key - * @return string|null Hash as per `media:hash`, prefixed with "$algo:" - */ - public function get_hash($key = 0) - { - $hashes = $this->get_hashes(); - if (isset($hashes[$key])) - { - return $hashes[$key]; - } - else - { - return null; - } - } - - /** - * Get all credits - * - * @return array|null Array of strings, see {@see get_hash()} - */ - public function get_hashes() - { - if ($this->hashes !== null) - { - return $this->hashes; - } - else - { - return null; - } - } - - /** - * Get the height - * - * @return string|null - */ - public function get_height() - { - if ($this->height !== null) - { - return $this->height; - } - else - { - return null; - } - } - - /** - * Get the language - * - * @link http://tools.ietf.org/html/rfc3066 - * @return string|null Language code as per RFC 3066 - */ - public function get_language() - { - if ($this->lang !== null) - { - return $this->lang; - } - else - { - return null; - } - } - - /** - * Get a single keyword - * - * @param int $key - * @return string|null - */ - public function get_keyword($key = 0) - { - $keywords = $this->get_keywords(); - if (isset($keywords[$key])) - { - return $keywords[$key]; - } - else - { - return null; - } - } - - /** - * Get all keywords - * - * @return array|null Array of strings - */ - public function get_keywords() - { - if ($this->keywords !== null) - { - return $this->keywords; - } - else - { - return null; - } - } - - /** - * Get length - * - * @return float Length in bytes - */ - public function get_length() - { - if ($this->length !== null) - { - return $this->length; - } - else - { - return null; - } - } - - /** - * Get the URL - * - * @return string|null - */ - public function get_link() - { - if ($this->link !== null) - { - return urldecode($this->link); - } - else - { - return null; - } - } - - /** - * Get the medium - * - * @link http://www.rssboard.org/media-rss#media-content - * @return string|null Should be one of 'image', 'audio', 'video', 'document', 'executable' - */ - public function get_medium() - { - if ($this->medium !== null) - { - return $this->medium; - } - else - { - return null; - } - } - - /** - * Get the player URL - * - * Typically the same as {@see get_permalink()} - * @return string|null Player URL - */ - public function get_player() - { - if ($this->player !== null) - { - return $this->player; - } - else - { - return null; - } - } - - /** - * Get a single rating - * - * @param int $key - * @return SimplePie_Rating|null - */ - public function get_rating($key = 0) - { - $ratings = $this->get_ratings(); - if (isset($ratings[$key])) - { - return $ratings[$key]; - } - else - { - return null; - } - } - - /** - * Get all ratings - * - * @return array|null Array of {@see SimplePie_Rating} objects - */ - public function get_ratings() - { - if ($this->ratings !== null) - { - return $this->ratings; - } - else - { - return null; - } - } - - /** - * Get a single restriction - * - * @param int $key - * @return SimplePie_Restriction|null - */ - public function get_restriction($key = 0) - { - $restrictions = $this->get_restrictions(); - if (isset($restrictions[$key])) - { - return $restrictions[$key]; - } - else - { - return null; - } - } - - /** - * Get all restrictions - * - * @return array|null Array of {@see SimplePie_Restriction} objects - */ - public function get_restrictions() - { - if ($this->restrictions !== null) - { - return $this->restrictions; - } - else - { - return null; - } - } - - /** - * Get the sampling rate (in kHz) - * - * @return string|null - */ - public function get_sampling_rate() - { - if ($this->samplingrate !== null) - { - return $this->samplingrate; - } - else - { - return null; - } - } - - /** - * Get the file size (in MiB) - * - * @return float|null File size in mebibytes (1048 bytes) - */ - public function get_size() - { - $length = $this->get_length(); - if ($length !== null) - { - return round($length/1048576, 2); - } - else - { - return null; - } - } - - /** - * Get a single thumbnail - * - * @param int $key - * @return string|null Thumbnail URL - */ - public function get_thumbnail($key = 0) - { - $thumbnails = $this->get_thumbnails(); - if (isset($thumbnails[$key])) - { - return $thumbnails[$key]; - } - else - { - return null; - } - } - - /** - * Get all thumbnails - * - * @return array|null Array of thumbnail URLs - */ - public function get_thumbnails() - { - if ($this->thumbnails !== null) - { - return $this->thumbnails; - } - else - { - return null; - } - } - - /** - * Get the title - * - * @return string|null - */ - public function get_title() - { - if ($this->title !== null) - { - return $this->title; - } - else - { - return null; - } - } - - /** - * Get mimetype of the enclosure - * - * @see get_real_type() - * @return string|null MIME type - */ - public function get_type() - { - if ($this->type !== null) - { - return $this->type; - } - else - { - return null; - } - } - - /** - * Get the width - * - * @return string|null - */ - public function get_width() - { - if ($this->width !== null) - { - return $this->width; - } - else - { - return null; - } - } - - /** - * Embed the enclosure using `<embed>` - * - * @deprecated Use the second parameter to {@see embed} instead - * - * @param array|string $options See first paramter to {@see embed} - * @return string HTML string to output - */ - public function native_embed($options='') - { - return $this->embed($options, true); - } - - /** - * Embed the enclosure using Javascript - * - * `$options` is an array or comma-separated key:value string, with the - * following properties: - * - * - `alt` (string): Alternate content for when an end-user does not have - * the appropriate handler installed or when a file type is - * unsupported. Can be any text or HTML. Defaults to blank. - * - `altclass` (string): If a file type is unsupported, the end-user will - * see the alt text (above) linked directly to the content. That link - * will have this value as its class name. Defaults to blank. - * - `audio` (string): This is an image that should be used as a - * placeholder for audio files before they're loaded (QuickTime-only). - * Can be any relative or absolute URL. Defaults to blank. - * - `bgcolor` (string): The background color for the media, if not - * already transparent. Defaults to `#ffffff`. - * - `height` (integer): The height of the embedded media. Accepts any - * numeric pixel value (such as `360`) or `auto`. Defaults to `auto`, - * and it is recommended that you use this default. - * - `loop` (boolean): Do you want the media to loop when its done? - * Defaults to `false`. - * - `mediaplayer` (string): The location of the included - * `mediaplayer.swf` file. This allows for the playback of Flash Video - * (`.flv`) files, and is the default handler for non-Odeo MP3's. - * Defaults to blank. - * - `video` (string): This is an image that should be used as a - * placeholder for video files before they're loaded (QuickTime-only). - * Can be any relative or absolute URL. Defaults to blank. - * - `width` (integer): The width of the embedded media. Accepts any - * numeric pixel value (such as `480`) or `auto`. Defaults to `auto`, - * and it is recommended that you use this default. - * - `widescreen` (boolean): Is the enclosure widescreen or standard? - * This applies only to video enclosures, and will automatically resize - * the content appropriately. Defaults to `false`, implying 4:3 mode. - * - * Note: Non-widescreen (4:3) mode with `width` and `height` set to `auto` - * will default to 480x360 video resolution. Widescreen (16:9) mode with - * `width` and `height` set to `auto` will default to 480x270 video resolution. - * - * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'. - * @param array|string $options Comma-separated key:value list, or array - * @param bool $native Use `<embed>` - * @return string HTML string to output - */ - public function embed($options = '', $native = false) - { - // Set up defaults - $audio = ''; - $video = ''; - $alt = ''; - $altclass = ''; - $loop = 'false'; - $width = 'auto'; - $height = 'auto'; - $bgcolor = '#ffffff'; - $mediaplayer = ''; - $widescreen = false; - $handler = $this->get_handler(); - $type = $this->get_real_type(); - - // Process options and reassign values as necessary - if (is_array($options)) - { - extract($options); - } - else - { - $options = explode(',', $options); - foreach($options as $option) - { - $opt = explode(':', $option, 2); - if (isset($opt[0], $opt[1])) - { - $opt[0] = trim($opt[0]); - $opt[1] = trim($opt[1]); - switch ($opt[0]) - { - case 'audio': - $audio = $opt[1]; - break; - - case 'video': - $video = $opt[1]; - break; - - case 'alt': - $alt = $opt[1]; - break; - - case 'altclass': - $altclass = $opt[1]; - break; - - case 'loop': - $loop = $opt[1]; - break; - - case 'width': - $width = $opt[1]; - break; - - case 'height': - $height = $opt[1]; - break; - - case 'bgcolor': - $bgcolor = $opt[1]; - break; - - case 'mediaplayer': - $mediaplayer = $opt[1]; - break; - - case 'widescreen': - $widescreen = $opt[1]; - break; - } - } - } - } - - $mime = explode('/', $type, 2); - $mime = $mime[0]; - - // Process values for 'auto' - if ($width === 'auto') - { - if ($mime === 'video') - { - if ($height === 'auto') - { - $width = 480; - } - elseif ($widescreen) - { - $width = round((intval($height)/9)*16); - } - else - { - $width = round((intval($height)/3)*4); - } - } - else - { - $width = '100%'; - } - } - - if ($height === 'auto') - { - if ($mime === 'audio') - { - $height = 0; - } - elseif ($mime === 'video') - { - if ($width === 'auto') - { - if ($widescreen) - { - $height = 270; - } - else - { - $height = 360; - } - } - elseif ($widescreen) - { - $height = round((intval($width)/16)*9); - } - else - { - $height = round((intval($width)/4)*3); - } - } - else - { - $height = 376; - } - } - elseif ($mime === 'audio') - { - $height = 0; - } - - // Set proper placeholder value - if ($mime === 'audio') - { - $placeholder = $audio; - } - elseif ($mime === 'video') - { - $placeholder = $video; - } - - $embed = ''; - - // Flash - if ($handler === 'flash') - { - if ($native) - { - $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>"; - } - else - { - $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>"; - } - } - - // Flash Media Player file types. - // Preferred handler for MP3 file types. - elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== '')) - { - $height += 20; - if ($native) - { - $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>"; - } - else - { - $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>"; - } - } - - // QuickTime 7 file types. Need to test with QuickTime 6. - // Only handle MP3's if the Flash Media Player is not present. - elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === '')) - { - $height += 16; - if ($native) - { - if ($placeholder !== '') - { - $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>"; - } - else - { - $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>"; - } - } - else - { - $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>"; - } - } - - // Windows Media - elseif ($handler === 'wmedia') - { - $height += 45; - if ($native) - { - $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>"; - } - else - { - $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>"; - } - } - - // Everything else - else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>'; - - return $embed; - } - - /** - * Get the real media type - * - * Often, feeds lie to us, necessitating a bit of deeper inspection. This - * converts types to their canonical representations based on the file - * extension - * - * @see get_type() - * @param bool $find_handler Internal use only, use {@see get_handler()} instead - * @return string MIME type - */ - public function get_real_type($find_handler = false) - { - // Mime-types by handler. - $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash - $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player - $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime - $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media - $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3 - - if ($this->get_type() !== null) - { - $type = strtolower($this->type); - } - else - { - $type = null; - } - - // If we encounter an unsupported mime-type, check the file extension and guess intelligently. - if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3))) - { - switch (strtolower($this->get_extension())) - { - // Audio mime-types - case 'aac': - case 'adts': - $type = 'audio/acc'; - break; - - case 'aif': - case 'aifc': - case 'aiff': - case 'cdda': - $type = 'audio/aiff'; - break; - - case 'bwf': - $type = 'audio/wav'; - break; - - case 'kar': - case 'mid': - case 'midi': - case 'smf': - $type = 'audio/midi'; - break; - - case 'm4a': - $type = 'audio/x-m4a'; - break; - - case 'mp3': - case 'swa': - $type = 'audio/mp3'; - break; - - case 'wav': - $type = 'audio/wav'; - break; - - case 'wax': - $type = 'audio/x-ms-wax'; - break; - - case 'wma': - $type = 'audio/x-ms-wma'; - break; - - // Video mime-types - case '3gp': - case '3gpp': - $type = 'video/3gpp'; - break; - - case '3g2': - case '3gp2': - $type = 'video/3gpp2'; - break; - - case 'asf': - $type = 'video/x-ms-asf'; - break; - - case 'flv': - $type = 'video/x-flv'; - break; - - case 'm1a': - case 'm1s': - case 'm1v': - case 'm15': - case 'm75': - case 'mp2': - case 'mpa': - case 'mpeg': - case 'mpg': - case 'mpm': - case 'mpv': - $type = 'video/mpeg'; - break; - - case 'm4v': - $type = 'video/x-m4v'; - break; - - case 'mov': - case 'qt': - $type = 'video/quicktime'; - break; - - case 'mp4': - case 'mpg4': - $type = 'video/mp4'; - break; - - case 'sdv': - $type = 'video/sd-video'; - break; - - case 'wm': - $type = 'video/x-ms-wm'; - break; - - case 'wmv': - $type = 'video/x-ms-wmv'; - break; - - case 'wvx': - $type = 'video/x-ms-wvx'; - break; - - // Flash mime-types - case 'spl': - $type = 'application/futuresplash'; - break; - - case 'swf': - $type = 'application/x-shockwave-flash'; - break; - } - } - - if ($find_handler) - { - if (in_array($type, $types_flash)) - { - return 'flash'; - } - elseif (in_array($type, $types_fmedia)) - { - return 'fmedia'; - } - elseif (in_array($type, $types_quicktime)) - { - return 'quicktime'; - } - elseif (in_array($type, $types_wmedia)) - { - return 'wmedia'; - } - elseif (in_array($type, $types_mp3)) - { - return 'mp3'; - } - else - { - return null; - } - } - else - { - return $type; - } - } -} - -/** - * General SimplePie exception class - * - * @package SimplePie - */ -class SimplePie_Exception extends Exception -{ -} - -/** - * Used for fetching remote files and reading local files - * - * Supports HTTP 1.0 via cURL or fsockopen, with spotty HTTP 1.1 support - * - * This class can be overloaded with {@see SimplePie::set_file_class()} - * - * @package SimplePie - * @subpackage HTTP - * @todo Move to properly supporting RFC2616 (HTTP/1.1) - */ -class SimplePie_File -{ - var $url; - var $useragent; - var $success = true; - var $headers = array(); - var $body; - var $status_code; - var $redirects = 0; - var $error; - var $method = SIMPLEPIE_FILE_SOURCE_NONE; - - public function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false) - { - if (class_exists('idna_convert')) - { - $idn = new idna_convert(); - $parsed = SimplePie_Misc::parse_url($url); - $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); - } - $this->url = $url; - $this->useragent = $useragent; - if (preg_match('/^http(s)?:\/\//i', $url)) - { - if ($useragent === null) - { - $useragent = ini_get('user_agent'); - $this->useragent = $useragent; - } - if (!is_array($headers)) - { - $headers = array(); - } - if (!$force_fsockopen && function_exists('curl_exec')) - { - $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL; - $fp = curl_init(); - $headers2 = array(); - foreach ($headers as $key => $value) - { - $headers2[] = "$key: $value"; - } - if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>=')) - { - curl_setopt($fp, CURLOPT_ENCODING, ''); - } - curl_setopt($fp, CURLOPT_URL, $url); - curl_setopt($fp, CURLOPT_HEADER, 1); - curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($fp, CURLOPT_TIMEOUT, $timeout); - curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout); - curl_setopt($fp, CURLOPT_REFERER, $url); - curl_setopt($fp, CURLOPT_USERAGENT, $useragent); - curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2); - if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>=')) - { - curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1); - curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects); - } - - /* Enable Digest authentication and SSL -fox */ - curl_setopt($fp, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($fp, CURLOPT_HTTPAUTH, CURLAUTH_ANY); - - $this->headers = curl_exec($fp); - if (curl_errno($fp) === 23 || curl_errno($fp) === 61) - { - curl_setopt($fp, CURLOPT_ENCODING, 'none'); - $this->headers = curl_exec($fp); - } - if (curl_errno($fp)) - { - $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp); - $this->success = false; - } - else - { - $info = curl_getinfo($fp); - curl_close($fp); - $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1); - $this->headers = array_pop($this->headers); - $parser = new SimplePie_HTTP_Parser($this->headers); - if ($parser->parse()) - { - $this->headers = $parser->headers; - $this->body = $parser->body; - $this->status_code = $parser->status_code; - if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) - { - $this->redirects++; - $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); - return $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); - } - } - } - } - else - { - $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN; - $url_parts = parse_url($url); - $socket_host = $url_parts['host']; - if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') - { - $socket_host = "ssl://$url_parts[host]"; - $url_parts['port'] = 443; - } - if (!isset($url_parts['port'])) - { - $url_parts['port'] = 80; - } - $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout); - if (!$fp) - { - $this->error = 'fsockopen error: ' . $errstr; - $this->success = false; - } - else - { - stream_set_timeout($fp, $timeout); - if (isset($url_parts['path'])) - { - if (isset($url_parts['query'])) - { - $get = "$url_parts[path]?$url_parts[query]"; - } - else - { - $get = $url_parts['path']; - } - } - else - { - $get = '/'; - } - $out = "GET $get HTTP/1.1\r\n"; - $out .= "Host: $url_parts[host]\r\n"; - $out .= "User-Agent: $useragent\r\n"; - if (extension_loaded('zlib')) - { - $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n"; - } - - if (isset($url_parts['user']) && isset($url_parts['pass'])) - { - $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n"; - } - foreach ($headers as $key => $value) - { - $out .= "$key: $value\r\n"; - } - $out .= "Connection: Close\r\n\r\n"; - fwrite($fp, $out); - - $info = stream_get_meta_data($fp); - - $this->headers = ''; - while (!$info['eof'] && !$info['timed_out']) - { - $this->headers .= fread($fp, 1160); - $info = stream_get_meta_data($fp); - } - if (!$info['timed_out']) - { - $parser = new SimplePie_HTTP_Parser($this->headers); - if ($parser->parse()) - { - $this->headers = $parser->headers; - $this->body = $parser->body; - $this->status_code = $parser->status_code; - if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) - { - $this->redirects++; - $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); - return $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); - } - if (isset($this->headers['content-encoding'])) - { - // Hey, we act dumb elsewhere, so let's do that here too - switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20"))) - { - case 'gzip': - case 'x-gzip': - $decoder = new SimplePie_gzdecode($this->body); - if (!$decoder->parse()) - { - $this->error = 'Unable to decode HTTP "gzip" stream'; - $this->success = false; - } - else - { - $this->body = $decoder->data; - } - break; - - case 'deflate': - if (($decompressed = gzinflate($this->body)) !== false) - { - $this->body = $decompressed; - } - else if (($decompressed = gzuncompress($this->body)) !== false) - { - $this->body = $decompressed; - } - else if (function_exists('gzdecode') && ($decompressed = gzdecode($this->body)) !== false) - { - $this->body = $decompressed; - } - else - { - $this->error = 'Unable to decode HTTP "deflate" stream'; - $this->success = false; - } - break; - - default: - $this->error = 'Unknown content coding'; - $this->success = false; - } - } - } - } - else - { - $this->error = 'fsocket timed out'; - $this->success = false; - } - fclose($fp); - } - } - } - else - { - $this->method = SIMPLEPIE_FILE_SOURCE_LOCAL | SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS; - if (!$this->body = file_get_contents($url)) - { - $this->error = 'file_get_contents could not read the file'; - $this->success = false; - } - } - } -} - -/** - * Decode 'gzip' encoded HTTP data - * - * @package SimplePie - * @subpackage HTTP - * @link http://www.gzip.org/format.txt - */ -class SimplePie_gzdecode -{ - /** - * Compressed data - * - * @access private - * @var string - * @see gzdecode::$data - */ - var $compressed_data; - - /** - * Size of compressed data - * - * @access private - * @var int - */ - var $compressed_size; - - /** - * Minimum size of a valid gzip string - * - * @access private - * @var int - */ - var $min_compressed_size = 18; - - /** - * Current position of pointer - * - * @access private - * @var int - */ - var $position = 0; - - /** - * Flags (FLG) - * - * @access private - * @var int - */ - var $flags; - - /** - * Uncompressed data - * - * @access public - * @see gzdecode::$compressed_data - * @var string - */ - var $data; - - /** - * Modified time - * - * @access public - * @var int - */ - var $MTIME; - - /** - * Extra Flags - * - * @access public - * @var int - */ - var $XFL; - - /** - * Operating System - * - * @access public - * @var int - */ - var $OS; - - /** - * Subfield ID 1 - * - * @access public - * @see gzdecode::$extra_field - * @see gzdecode::$SI2 - * @var string - */ - var $SI1; - - /** - * Subfield ID 2 - * - * @access public - * @see gzdecode::$extra_field - * @see gzdecode::$SI1 - * @var string - */ - var $SI2; - - /** - * Extra field content - * - * @access public - * @see gzdecode::$SI1 - * @see gzdecode::$SI2 - * @var string - */ - var $extra_field; - - /** - * Original filename - * - * @access public - * @var string - */ - var $filename; - - /** - * Human readable comment - * - * @access public - * @var string - */ - var $comment; - - /** - * Don't allow anything to be set - * - * @param string $name - * @param mixed $value - */ - public function __set($name, $value) - { - trigger_error("Cannot write property $name", E_USER_ERROR); - } - - /** - * Set the compressed string and related properties - * - * @param string $data - */ - public function __construct($data) - { - $this->compressed_data = $data; - $this->compressed_size = strlen($data); - } - - /** - * Decode the GZIP stream - * - * @return bool Successfulness - */ - public function parse() - { - if ($this->compressed_size >= $this->min_compressed_size) - { - // Check ID1, ID2, and CM - if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") - { - return false; - } - - // Get the FLG (FLaGs) - $this->flags = ord($this->compressed_data[3]); - - // FLG bits above (1 << 4) are reserved - if ($this->flags > 0x1F) - { - return false; - } - - // Advance the pointer after the above - $this->position += 4; - - // MTIME - $mtime = substr($this->compressed_data, $this->position, 4); - // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness - if (current(unpack('S', "\x00\x01")) === 1) - { - $mtime = strrev($mtime); - } - $this->MTIME = current(unpack('l', $mtime)); - $this->position += 4; - - // Get the XFL (eXtra FLags) - $this->XFL = ord($this->compressed_data[$this->position++]); - - // Get the OS (Operating System) - $this->OS = ord($this->compressed_data[$this->position++]); - - // Parse the FEXTRA - if ($this->flags & 4) - { - // Read subfield IDs - $this->SI1 = $this->compressed_data[$this->position++]; - $this->SI2 = $this->compressed_data[$this->position++]; - - // SI2 set to zero is reserved for future use - if ($this->SI2 === "\x00") - { - return false; - } - - // Get the length of the extra field - $len = current(unpack('v', substr($this->compressed_data, $this->position, 2))); - $this->position += 2; - - // Check the length of the string is still valid - $this->min_compressed_size += $len + 4; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Set the extra field to the given data - $this->extra_field = substr($this->compressed_data, $this->position, $len); - $this->position += $len; - } - else - { - return false; - } - } - - // Parse the FNAME - if ($this->flags & 8) - { - // Get the length of the filename - $len = strcspn($this->compressed_data, "\x00", $this->position); - - // Check the length of the string is still valid - $this->min_compressed_size += $len + 1; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Set the original filename to the given string - $this->filename = substr($this->compressed_data, $this->position, $len); - $this->position += $len + 1; - } - else - { - return false; - } - } - - // Parse the FCOMMENT - if ($this->flags & 16) - { - // Get the length of the comment - $len = strcspn($this->compressed_data, "\x00", $this->position); - - // Check the length of the string is still valid - $this->min_compressed_size += $len + 1; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Set the original comment to the given string - $this->comment = substr($this->compressed_data, $this->position, $len); - $this->position += $len + 1; - } - else - { - return false; - } - } - - // Parse the FHCRC - if ($this->flags & 2) - { - // Check the length of the string is still valid - $this->min_compressed_size += $len + 2; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Read the CRC - $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2))); - - // Check the CRC matches - if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc) - { - $this->position += 2; - } - else - { - return false; - } - } - else - { - return false; - } - } - - // Decompress the actual data - if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false) - { - return false; - } - else - { - $this->position = $this->compressed_size - 8; - } - - // Check CRC of data - $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4))); - $this->position += 4; - /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc)) - { - return false; - }*/ - - // Check ISIZE of data - $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4))); - $this->position += 4; - if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize)) - { - return false; - } - - // Wow, against all odds, we've actually got a valid gzip string - return true; - } - else - { - return false; - } - } -} - -/** - * HTTP Response Parser - * - * @package SimplePie - * @subpackage HTTP - */ -class SimplePie_HTTP_Parser -{ - /** - * HTTP Version - * - * @var float - */ - public $http_version = 0.0; - - /** - * Status code - * - * @var int - */ - public $status_code = 0; - - /** - * Reason phrase - * - * @var string - */ - public $reason = ''; - - /** - * Key/value pairs of the headers - * - * @var array - */ - public $headers = array(); - - /** - * Body of the response - * - * @var string - */ - public $body = ''; - - /** - * Current state of the state machine - * - * @var string - */ - protected $state = 'http_version'; - - /** - * Input data - * - * @var string - */ - protected $data = ''; - - /** - * Input data length (to avoid calling strlen() everytime this is needed) - * - * @var int - */ - protected $data_length = 0; - - /** - * Current position of the pointer - * - * @var int - */ - protected $position = 0; - - /** - * Name of the hedaer currently being parsed - * - * @var string - */ - protected $name = ''; - - /** - * Value of the hedaer currently being parsed - * - * @var string - */ - protected $value = ''; - - /** - * Create an instance of the class with the input data - * - * @param string $data Input data - */ - public function __construct($data) - { - $this->data = $data; - $this->data_length = strlen($this->data); - } - - /** - * Parse the input data - * - * @return bool true on success, false on failure - */ - public function parse() - { - while ($this->state && $this->state !== 'emit' && $this->has_data()) - { - $state = $this->state; - $this->$state(); - } - $this->data = ''; - if ($this->state === 'emit' || $this->state === 'body') - { - return true; - } - else - { - $this->http_version = ''; - $this->status_code = ''; - $this->reason = ''; - $this->headers = array(); - $this->body = ''; - return false; - } - } - - /** - * Check whether there is data beyond the pointer - * - * @return bool true if there is further data, false if not - */ - protected function has_data() - { - return (bool) ($this->position < $this->data_length); - } - - /** - * See if the next character is LWS - * - * @return bool true if the next character is LWS, false if not - */ - protected function is_linear_whitespace() - { - return (bool) ($this->data[$this->position] === "\x09" - || $this->data[$this->position] === "\x20" - || ($this->data[$this->position] === "\x0A" - && isset($this->data[$this->position + 1]) - && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20"))); - } - - /** - * Parse the HTTP version - */ - protected function http_version() - { - if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/') - { - $len = strspn($this->data, '0123456789.', 5); - $this->http_version = substr($this->data, 5, $len); - $this->position += 5 + $len; - if (substr_count($this->http_version, '.') <= 1) - { - $this->http_version = (float) $this->http_version; - $this->position += strspn($this->data, "\x09\x20", $this->position); - $this->state = 'status'; - } - else - { - $this->state = false; - } - } - else - { - $this->state = false; - } - } - - /** - * Parse the status code - */ - protected function status() - { - if ($len = strspn($this->data, '0123456789', $this->position)) - { - $this->status_code = (int) substr($this->data, $this->position, $len); - $this->position += $len; - $this->state = 'reason'; - } - else - { - $this->state = false; - } - } - - /** - * Parse the reason phrase - */ - protected function reason() - { - $len = strcspn($this->data, "\x0A", $this->position); - $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20"); - $this->position += $len + 1; - $this->state = 'new_line'; - } - - /** - * Deal with a new line, shifting data around as needed - */ - protected function new_line() - { - $this->value = trim($this->value, "\x0D\x20"); - if ($this->name !== '' && $this->value !== '') - { - $this->name = strtolower($this->name); - // We should only use the last Content-Type header. c.f. issue #1 - if (isset($this->headers[$this->name]) && $this->name !== 'content-type') - { - $this->headers[$this->name] .= ', ' . $this->value; - } - else - { - $this->headers[$this->name] = $this->value; - } - } - $this->name = ''; - $this->value = ''; - if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A") - { - $this->position += 2; - $this->state = 'body'; - } - elseif ($this->data[$this->position] === "\x0A") - { - $this->position++; - $this->state = 'body'; - } - else - { - $this->state = 'name'; - } - } - - /** - * Parse a header name - */ - protected function name() - { - $len = strcspn($this->data, "\x0A:", $this->position); - if (isset($this->data[$this->position + $len])) - { - if ($this->data[$this->position + $len] === "\x0A") - { - $this->position += $len; - $this->state = 'new_line'; - } - else - { - $this->name = substr($this->data, $this->position, $len); - $this->position += $len + 1; - $this->state = 'value'; - } - } - else - { - $this->state = false; - } - } - - /** - * Parse LWS, replacing consecutive LWS characters with a single space - */ - protected function linear_whitespace() - { - do - { - if (substr($this->data, $this->position, 2) === "\x0D\x0A") - { - $this->position += 2; - } - elseif ($this->data[$this->position] === "\x0A") - { - $this->position++; - } - $this->position += strspn($this->data, "\x09\x20", $this->position); - } while ($this->has_data() && $this->is_linear_whitespace()); - $this->value .= "\x20"; - } - - /** - * See what state to move to while within non-quoted header values - */ - protected function value() - { - if ($this->is_linear_whitespace()) - { - $this->linear_whitespace(); - } - else - { - switch ($this->data[$this->position]) - { - case '"': - // Workaround for ETags: we have to include the quotes as - // part of the tag. - if (strtolower($this->name) === 'etag') - { - $this->value .= '"'; - $this->position++; - $this->state = 'value_char'; - break; - } - $this->position++; - $this->state = 'quote'; - break; - - case "\x0A": - $this->position++; - $this->state = 'new_line'; - break; - - default: - $this->state = 'value_char'; - break; - } - } - } - - /** - * Parse a header value while outside quotes - */ - protected function value_char() - { - $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position); - $this->value .= substr($this->data, $this->position, $len); - $this->position += $len; - $this->state = 'value'; - } - - /** - * See what state to move to while within quoted header values - */ - protected function quote() - { - if ($this->is_linear_whitespace()) - { - $this->linear_whitespace(); - } - else - { - switch ($this->data[$this->position]) - { - case '"': - $this->position++; - $this->state = 'value'; - break; - - case "\x0A": - $this->position++; - $this->state = 'new_line'; - break; - - case '\\': - $this->position++; - $this->state = 'quote_escaped'; - break; - - default: - $this->state = 'quote_char'; - break; - } - } - } - - /** - * Parse a header value while within quotes - */ - protected function quote_char() - { - $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position); - $this->value .= substr($this->data, $this->position, $len); - $this->position += $len; - $this->state = 'value'; - } - - /** - * Parse an escaped character within quotes - */ - protected function quote_escaped() - { - $this->value .= $this->data[$this->position]; - $this->position++; - $this->state = 'quote'; - } - - /** - * Parse the body - */ - protected function body() - { - $this->body = substr($this->data, $this->position); - if (!empty($this->headers['transfer-encoding'])) - { - unset($this->headers['transfer-encoding']); - $this->state = 'chunked'; - } - else - { - $this->state = 'emit'; - } - } - - /** - * Parsed a "Transfer-Encoding: chunked" body - */ - protected function chunked() - { - if (!preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', trim($this->body))) - { - $this->state = 'emit'; - return; - } - - $decoded = ''; - $encoded = $this->body; - - while (true) - { - $is_chunked = (bool) preg_match( '/^([0-9a-f]+)[^\r\n]*\r\n/i', $encoded, $matches ); - if (!$is_chunked) - { - // Looks like it's not chunked after all - $this->state = 'emit'; - return; - } - - $length = hexdec(trim($matches[1])); - if ($length === 0) - { - // Ignore trailer headers - $this->state = 'emit'; - $this->body = $decoded; - return; - } - - $chunk_length = strlen($matches[0]); - $decoded .= $part = substr($encoded, $chunk_length, $length); - $encoded = substr($encoded, $chunk_length + $length + 2); - - if (trim($encoded) === '0' || empty($encoded)) - { - $this->state = 'emit'; - $this->body = $decoded; - return; - } - } - } -} - -/** - * IRI parser/serialiser/normaliser - * - * @package SimplePie - * @subpackage HTTP - * @author Geoffrey Sneddon - * @author Steve Minutillo - * @author Ryan McCue - * @copyright 2007-2012 Geoffrey Sneddon, Steve Minutillo, Ryan McCue - * @license http://www.opensource.org/licenses/bsd-license.php - */ -class SimplePie_IRI -{ - /** - * Scheme - * - * @var string - */ - protected $scheme = null; - - /** - * User Information - * - * @var string - */ - protected $iuserinfo = null; - - /** - * ihost - * - * @var string - */ - protected $ihost = null; - - /** - * Port - * - * @var string - */ - protected $port = null; - - /** - * ipath - * - * @var string - */ - protected $ipath = ''; - - /** - * iquery - * - * @var string - */ - protected $iquery = null; - - /** - * ifragment - * - * @var string - */ - protected $ifragment = null; - - /** - * Normalization database - * - * Each key is the scheme, each value is an array with each key as the IRI - * part and value as the default value for that part. - */ - protected $normalization = array( - 'acap' => array( - 'port' => 674 - ), - 'dict' => array( - 'port' => 2628 - ), - 'file' => array( - 'ihost' => 'localhost' - ), - 'http' => array( - 'port' => 80, - 'ipath' => '/' - ), - 'https' => array( - 'port' => 443, - 'ipath' => '/' - ), - ); - - /** - * Return the entire IRI when you try and read the object as a string - * - * @return string - */ - public function __toString() - { - return $this->get_iri(); - } - - /** - * Overload __set() to provide access via properties - * - * @param string $name Property name - * @param mixed $value Property value - */ - public function __set($name, $value) - { - if (method_exists($this, 'set_' . $name)) - { - call_user_func(array($this, 'set_' . $name), $value); - } - elseif ( - $name === 'iauthority' - || $name === 'iuserinfo' - || $name === 'ihost' - || $name === 'ipath' - || $name === 'iquery' - || $name === 'ifragment' - ) - { - call_user_func(array($this, 'set_' . substr($name, 1)), $value); - } - } - - /** - * Overload __get() to provide access via properties - * - * @param string $name Property name - * @return mixed - */ - public function __get($name) - { - // isset() returns false for null, we don't want to do that - // Also why we use array_key_exists below instead of isset() - $props = get_object_vars($this); - - if ( - $name === 'iri' || - $name === 'uri' || - $name === 'iauthority' || - $name === 'authority' - ) - { - $return = $this->{"get_$name"}(); - } - elseif (array_key_exists($name, $props)) - { - $return = $this->$name; - } - // host -> ihost - elseif (($prop = 'i' . $name) && array_key_exists($prop, $props)) - { - $name = $prop; - $return = $this->$prop; - } - // ischeme -> scheme - elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props)) - { - $name = $prop; - $return = $this->$prop; - } - else - { - trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE); - $return = null; - } - - if ($return === null && isset($this->normalization[$this->scheme][$name])) - { - return $this->normalization[$this->scheme][$name]; - } - else - { - return $return; - } - } - - /** - * Overload __isset() to provide access via properties - * - * @param string $name Property name - * @return bool - */ - public function __isset($name) - { - if (method_exists($this, 'get_' . $name) || isset($this->$name)) - { - return true; - } - else - { - return false; - } - } - - /** - * Overload __unset() to provide access via properties - * - * @param string $name Property name - */ - public function __unset($name) - { - if (method_exists($this, 'set_' . $name)) - { - call_user_func(array($this, 'set_' . $name), ''); - } - } - - /** - * Create a new IRI object, from a specified string - * - * @param string $iri - */ - public function __construct($iri = null) - { - $this->set_iri($iri); - } - - /** - * Create a new IRI object by resolving a relative IRI - * - * Returns false if $base is not absolute, otherwise an IRI. - * - * @param IRI|string $base (Absolute) Base IRI - * @param IRI|string $relative Relative IRI - * @return IRI|false - */ - public static function absolutize($base, $relative) - { - if (!($relative instanceof SimplePie_IRI)) - { - $relative = new SimplePie_IRI($relative); - } - if (!$relative->is_valid()) - { - return false; - } - elseif ($relative->scheme !== null) - { - return clone $relative; - } - else - { - if (!($base instanceof SimplePie_IRI)) - { - $base = new SimplePie_IRI($base); - } - if ($base->scheme !== null && $base->is_valid()) - { - if ($relative->get_iri() !== '') - { - if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) - { - $target = clone $relative; - $target->scheme = $base->scheme; - } - else - { - $target = new SimplePie_IRI; - $target->scheme = $base->scheme; - $target->iuserinfo = $base->iuserinfo; - $target->ihost = $base->ihost; - $target->port = $base->port; - if ($relative->ipath !== '') - { - if ($relative->ipath[0] === '/') - { - $target->ipath = $relative->ipath; - } - elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') - { - $target->ipath = '/' . $relative->ipath; - } - elseif (($last_segment = strrpos($base->ipath, '/')) !== false) - { - $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath; - } - else - { - $target->ipath = $relative->ipath; - } - $target->ipath = $target->remove_dot_segments($target->ipath); - $target->iquery = $relative->iquery; - } - else - { - $target->ipath = $base->ipath; - if ($relative->iquery !== null) - { - $target->iquery = $relative->iquery; - } - elseif ($base->iquery !== null) - { - $target->iquery = $base->iquery; - } - } - $target->ifragment = $relative->ifragment; - } - } - else - { - $target = clone $base; - $target->ifragment = null; - } - $target->scheme_normalization(); - return $target; - } - else - { - return false; - } - } - } - - /** - * Parse an IRI into scheme/authority/path/query/fragment segments - * - * @param string $iri - * @return array - */ - protected function parse_iri($iri) - { - $iri = trim($iri, "\x20\x09\x0A\x0C\x0D"); - if (preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match)) - { - if ($match[1] === '') - { - $match['scheme'] = null; - } - if (!isset($match[3]) || $match[3] === '') - { - $match['authority'] = null; - } - if (!isset($match[5])) - { - $match['path'] = ''; - } - if (!isset($match[6]) || $match[6] === '') - { - $match['query'] = null; - } - if (!isset($match[8]) || $match[8] === '') - { - $match['fragment'] = null; - } - return $match; - } - else - { - // This can occur when a paragraph is accidentally parsed as a URI - return false; - } - } - - /** - * Remove dot segments from a path - * - * @param string $input - * @return string - */ - protected function remove_dot_segments($input) - { - $output = ''; - while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') - { - // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, - if (strpos($input, '../') === 0) - { - $input = substr($input, 3); - } - elseif (strpos($input, './') === 0) - { - $input = substr($input, 2); - } - // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, - elseif (strpos($input, '/./') === 0) - { - $input = substr($input, 2); - } - elseif ($input === '/.') - { - $input = '/'; - } - // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, - elseif (strpos($input, '/../') === 0) - { - $input = substr($input, 3); - $output = substr_replace($output, '', strrpos($output, '/')); - } - elseif ($input === '/..') - { - $input = '/'; - $output = substr_replace($output, '', strrpos($output, '/')); - } - // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, - elseif ($input === '.' || $input === '..') - { - $input = ''; - } - // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer - elseif (($pos = strpos($input, '/', 1)) !== false) - { - $output .= substr($input, 0, $pos); - $input = substr_replace($input, '', 0, $pos); - } - else - { - $output .= $input; - $input = ''; - } - } - return $output . $input; - } - - /** - * Replace invalid character with percent encoding - * - * @param string $string Input string - * @param string $extra_chars Valid characters not in iunreserved or - * iprivate (this is ASCII-only) - * @param bool $iprivate Allow iprivate - * @return string - */ - protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false) - { - // Normalize as many pct-encoded sections as possible - $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array($this, 'remove_iunreserved_percent_encoded'), $string); - - // Replace invalid percent characters - $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string); - - // Add unreserved and % to $extra_chars (the latter is safe because all - // pct-encoded sections are now valid). - $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%'; - - // Now replace any bytes that aren't allowed with their pct-encoded versions - $position = 0; - $strlen = strlen($string); - while (($position += strspn($string, $extra_chars, $position)) < $strlen) - { - $value = ord($string[$position]); - - // Start position - $start = $position; - - // By default we are valid - $valid = true; - - // No one byte sequences are valid due to the while. - // Two byte sequence: - if (($value & 0xE0) === 0xC0) - { - $character = ($value & 0x1F) << 6; - $length = 2; - $remaining = 1; - } - // Three byte sequence: - elseif (($value & 0xF0) === 0xE0) - { - $character = ($value & 0x0F) << 12; - $length = 3; - $remaining = 2; - } - // Four byte sequence: - elseif (($value & 0xF8) === 0xF0) - { - $character = ($value & 0x07) << 18; - $length = 4; - $remaining = 3; - } - // Invalid byte: - else - { - $valid = false; - $length = 1; - $remaining = 0; - } - - if ($remaining) - { - if ($position + $length <= $strlen) - { - for ($position++; $remaining; $position++) - { - $value = ord($string[$position]); - - // Check that the byte is valid, then add it to the character: - if (($value & 0xC0) === 0x80) - { - $character |= ($value & 0x3F) << (--$remaining * 6); - } - // If it is invalid, count the sequence as invalid and reprocess the current byte: - else - { - $valid = false; - $position--; - break; - } - } - } - else - { - $position = $strlen - 1; - $valid = false; - } - } - - // Percent encode anything invalid or not in ucschar - if ( - // Invalid sequences - !$valid - // Non-shortest form sequences are invalid - || $length > 1 && $character <= 0x7F - || $length > 2 && $character <= 0x7FF - || $length > 3 && $character <= 0xFFFF - // Outside of range of ucschar codepoints - // Noncharacters - || ($character & 0xFFFE) === 0xFFFE - || $character >= 0xFDD0 && $character <= 0xFDEF - || ( - // Everything else not in ucschar - $character > 0xD7FF && $character < 0xF900 - || $character < 0xA0 - || $character > 0xEFFFD - ) - && ( - // Everything not in iprivate, if it applies - !$iprivate - || $character < 0xE000 - || $character > 0x10FFFD - ) - ) - { - // If we were a character, pretend we weren't, but rather an error. - if ($valid) - $position--; - - for ($j = $start; $j <= $position; $j++) - { - $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1); - $j += 2; - $position += 2; - $strlen += 2; - } - } - } - - return $string; - } - - /** - * Callback function for preg_replace_callback. - * - * Removes sequences of percent encoded bytes that represent UTF-8 - * encoded characters in iunreserved - * - * @param array $match PCRE match - * @return string Replacement - */ - protected function remove_iunreserved_percent_encoded($match) - { - // As we just have valid percent encoded sequences we can just explode - // and ignore the first member of the returned array (an empty string). - $bytes = explode('%', $match[0]); - - // Initialize the new string (this is what will be returned) and that - // there are no bytes remaining in the current sequence (unsurprising - // at the first byte!). - $string = ''; - $remaining = 0; - - // Loop over each and every byte, and set $value to its value - for ($i = 1, $len = count($bytes); $i < $len; $i++) - { - $value = hexdec($bytes[$i]); - - // If we're the first byte of sequence: - if (!$remaining) - { - // Start position - $start = $i; - - // By default we are valid - $valid = true; - - // One byte sequence: - if ($value <= 0x7F) - { - $character = $value; - $length = 1; - } - // Two byte sequence: - elseif (($value & 0xE0) === 0xC0) - { - $character = ($value & 0x1F) << 6; - $length = 2; - $remaining = 1; - } - // Three byte sequence: - elseif (($value & 0xF0) === 0xE0) - { - $character = ($value & 0x0F) << 12; - $length = 3; - $remaining = 2; - } - // Four byte sequence: - elseif (($value & 0xF8) === 0xF0) - { - $character = ($value & 0x07) << 18; - $length = 4; - $remaining = 3; - } - // Invalid byte: - else - { - $valid = false; - $remaining = 0; - } - } - // Continuation byte: - else - { - // Check that the byte is valid, then add it to the character: - if (($value & 0xC0) === 0x80) - { - $remaining--; - $character |= ($value & 0x3F) << ($remaining * 6); - } - // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence: - else - { - $valid = false; - $remaining = 0; - $i--; - } - } - - // If we've reached the end of the current byte sequence, append it to Unicode::$data - if (!$remaining) - { - // Percent encode anything invalid or not in iunreserved - if ( - // Invalid sequences - !$valid - // Non-shortest form sequences are invalid - || $length > 1 && $character <= 0x7F - || $length > 2 && $character <= 0x7FF - || $length > 3 && $character <= 0xFFFF - // Outside of range of iunreserved codepoints - || $character < 0x2D - || $character > 0xEFFFD - // Noncharacters - || ($character & 0xFFFE) === 0xFFFE - || $character >= 0xFDD0 && $character <= 0xFDEF - // Everything else not in iunreserved (this is all BMP) - || $character === 0x2F - || $character > 0x39 && $character < 0x41 - || $character > 0x5A && $character < 0x61 - || $character > 0x7A && $character < 0x7E - || $character > 0x7E && $character < 0xA0 - || $character > 0xD7FF && $character < 0xF900 - ) - { - for ($j = $start; $j <= $i; $j++) - { - $string .= '%' . strtoupper($bytes[$j]); - } - } - else - { - for ($j = $start; $j <= $i; $j++) - { - $string .= chr(hexdec($bytes[$j])); - } - } - } - } - - // If we have any bytes left over they are invalid (i.e., we are - // mid-way through a multi-byte sequence) - if ($remaining) - { - for ($j = $start; $j < $len; $j++) - { - $string .= '%' . strtoupper($bytes[$j]); - } - } - - return $string; - } - - protected function scheme_normalization() - { - if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo']) - { - $this->iuserinfo = null; - } - if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost']) - { - $this->ihost = null; - } - if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port']) - { - $this->port = null; - } - if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath']) - { - $this->ipath = ''; - } - if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery']) - { - $this->iquery = null; - } - if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment']) - { - $this->ifragment = null; - } - } - - /** - * Check if the object represents a valid IRI. This needs to be done on each - * call as some things change depending on another part of the IRI. - * - * @return bool - */ - public function is_valid() - { - $isauthority = $this->iuserinfo !== null || $this->ihost !== null || $this->port !== null; - if ($this->ipath !== '' && - ( - $isauthority && ( - $this->ipath[0] !== '/' || - substr($this->ipath, 0, 2) === '//' - ) || - ( - $this->scheme === null && - !$isauthority && - strpos($this->ipath, ':') !== false && - (strpos($this->ipath, '/') === false ? true : strpos($this->ipath, ':') < strpos($this->ipath, '/')) - ) - ) - ) - { - return false; - } - - return true; - } - - /** - * Set the entire IRI. Returns true on success, false on failure (if there - * are any invalid characters). - * - * @param string $iri - * @return bool - */ - public function set_iri($iri) - { - static $cache; - if (!$cache) - { - $cache = array(); - } - - if ($iri === null) - { - return true; - } - elseif (isset($cache[$iri])) - { - list($this->scheme, - $this->iuserinfo, - $this->ihost, - $this->port, - $this->ipath, - $this->iquery, - $this->ifragment, - $return) = $cache[$iri]; - return $return; - } - else - { - $parsed = $this->parse_iri((string) $iri); - if (!$parsed) - { - return false; - } - - $return = $this->set_scheme($parsed['scheme']) - && $this->set_authority($parsed['authority']) - && $this->set_path($parsed['path']) - && $this->set_query($parsed['query']) - && $this->set_fragment($parsed['fragment']); - - $cache[$iri] = array($this->scheme, - $this->iuserinfo, - $this->ihost, - $this->port, - $this->ipath, - $this->iquery, - $this->ifragment, - $return); - return $return; - } - } - - /** - * Set the scheme. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @param string $scheme - * @return bool - */ - public function set_scheme($scheme) - { - if ($scheme === null) - { - $this->scheme = null; - } - elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme)) - { - $this->scheme = null; - return false; - } - else - { - $this->scheme = strtolower($scheme); - } - return true; - } - - /** - * Set the authority. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @param string $authority - * @return bool - */ - public function set_authority($authority) - { - static $cache; - if (!$cache) - $cache = array(); - - if ($authority === null) - { - $this->iuserinfo = null; - $this->ihost = null; - $this->port = null; - return true; - } - elseif (isset($cache[$authority])) - { - list($this->iuserinfo, - $this->ihost, - $this->port, - $return) = $cache[$authority]; - - return $return; - } - else - { - $remaining = $authority; - if (($iuserinfo_end = strrpos($remaining, '@')) !== false) - { - $iuserinfo = substr($remaining, 0, $iuserinfo_end); - $remaining = substr($remaining, $iuserinfo_end + 1); - } - else - { - $iuserinfo = null; - } - if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false) - { - if (($port = substr($remaining, $port_start + 1)) === false) - { - $port = null; - } - $remaining = substr($remaining, 0, $port_start); - } - else - { - $port = null; - } - - $return = $this->set_userinfo($iuserinfo) && - $this->set_host($remaining) && - $this->set_port($port); - - $cache[$authority] = array($this->iuserinfo, - $this->ihost, - $this->port, - $return); - - return $return; - } - } - - /** - * Set the iuserinfo. - * - * @param string $iuserinfo - * @return bool - */ - public function set_userinfo($iuserinfo) - { - if ($iuserinfo === null) - { - $this->iuserinfo = null; - } - else - { - $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:'); - $this->scheme_normalization(); - } - - return true; - } - - /** - * Set the ihost. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @param string $ihost - * @return bool - */ - public function set_host($ihost) - { - if ($ihost === null) - { - $this->ihost = null; - return true; - } - elseif (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']') - { - if (SimplePie_Net_IPv6::check_ipv6(substr($ihost, 1, -1))) - { - $this->ihost = '[' . SimplePie_Net_IPv6::compress(substr($ihost, 1, -1)) . ']'; - } - else - { - $this->ihost = null; - return false; - } - } - else - { - $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;='); - - // Lowercase, but ignore pct-encoded sections (as they should - // remain uppercase). This must be done after the previous step - // as that can add unescaped characters. - $position = 0; - $strlen = strlen($ihost); - while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen) - { - if ($ihost[$position] === '%') - { - $position += 3; - } - else - { - $ihost[$position] = strtolower($ihost[$position]); - $position++; - } - } - - $this->ihost = $ihost; - } - - $this->scheme_normalization(); - - return true; - } - - /** - * Set the port. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @param string $port - * @return bool - */ - public function set_port($port) - { - if ($port === null) - { - $this->port = null; - return true; - } - elseif (strspn($port, '0123456789') === strlen($port)) - { - $this->port = (int) $port; - $this->scheme_normalization(); - return true; - } - else - { - $this->port = null; - return false; - } - } - - /** - * Set the ipath. - * - * @param string $ipath - * @return bool - */ - public function set_path($ipath) - { - static $cache; - if (!$cache) - { - $cache = array(); - } - - $ipath = (string) $ipath; - - if (isset($cache[$ipath])) - { - $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)]; - } - else - { - $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/'); - $removed = $this->remove_dot_segments($valid); - - $cache[$ipath] = array($valid, $removed); - $this->ipath = ($this->scheme !== null) ? $removed : $valid; - } - - $this->scheme_normalization(); - return true; - } - - /** - * Set the iquery. - * - * @param string $iquery - * @return bool - */ - public function set_query($iquery) - { - if ($iquery === null) - { - $this->iquery = null; - } - else - { - $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true); - $this->scheme_normalization(); - } - return true; - } - - /** - * Set the ifragment. - * - * @param string $ifragment - * @return bool - */ - public function set_fragment($ifragment) - { - if ($ifragment === null) - { - $this->ifragment = null; - } - else - { - $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?'); - $this->scheme_normalization(); - } - return true; - } - - /** - * Convert an IRI to a URI (or parts thereof) - * - * @return string - */ - public function to_uri($string) - { - static $non_ascii; - if (!$non_ascii) - { - $non_ascii = implode('', range("\x80", "\xFF")); - } - - $position = 0; - $strlen = strlen($string); - while (($position += strcspn($string, $non_ascii, $position)) < $strlen) - { - $string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1); - $position += 3; - $strlen += 2; - } - - return $string; - } - - /** - * Get the complete IRI - * - * @return string - */ - public function get_iri() - { - if (!$this->is_valid()) - { - return false; - } - - $iri = ''; - if ($this->scheme !== null) - { - $iri .= $this->scheme . ':'; - } - if (($iauthority = $this->get_iauthority()) !== null) - { - $iri .= '//' . $iauthority; - } - if ($this->ipath !== '') - { - $iri .= $this->ipath; - } - elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '') - { - $iri .= $this->normalization[$this->scheme]['ipath']; - } - if ($this->iquery !== null) - { - $iri .= '?' . $this->iquery; - } - if ($this->ifragment !== null) - { - $iri .= '#' . $this->ifragment; - } - - return $iri; - } - - /** - * Get the complete URI - * - * @return string - */ - public function get_uri() - { - return $this->to_uri($this->get_iri()); - } - - /** - * Get the complete iauthority - * - * @return string - */ - protected function get_iauthority() - { - if ($this->iuserinfo !== null || $this->ihost !== null || $this->port !== null) - { - $iauthority = ''; - if ($this->iuserinfo !== null) - { - $iauthority .= $this->iuserinfo . '@'; - } - if ($this->ihost !== null) - { - $iauthority .= $this->ihost; - } - if ($this->port !== null) - { - $iauthority .= ':' . $this->port; - } - return $iauthority; - } - else - { - return null; - } - } - - /** - * Get the complete authority - * - * @return string - */ - protected function get_authority() - { - $iauthority = $this->get_iauthority(); - if (is_string($iauthority)) - return $this->to_uri($iauthority); - else - return $iauthority; - } -} - -/** - * Manages all item-related data - * - * Used by {@see SimplePie::get_item()} and {@see SimplePie::get_items()} - * - * This class can be overloaded with {@see SimplePie::set_item_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Item -{ - /** - * Parent feed - * - * @access private - * @var SimplePie - */ - var $feed; - - /** - * Raw data - * - * @access private - * @var array - */ - var $data = array(); - - /** - * Registry object - * - * @see set_registry - * @var SimplePie_Registry - */ - protected $registry; - - /** - * Create a new item object - * - * This is usually used by {@see SimplePie::get_items} and - * {@see SimplePie::get_item}. Avoid creating this manually. - * - * @param SimplePie $feed Parent feed - * @param array $data Raw data - */ - public function __construct($feed, $data) - { - $this->feed = $feed; - $this->data = $data; - } - - /** - * Set the registry handler - * - * This is usually used by {@see SimplePie_Registry::create} - * - * @since 1.3 - * @param SimplePie_Registry $registry - */ - public function set_registry(SimplePie_Registry $registry) - { - $this->registry = $registry; - } - - /** - * Get a string representation of the item - * - * @return string - */ - public function __toString() - { - return md5(serialize($this->data)); - } - - /** - * Remove items that link back to this before destroying this object - */ - public function __destruct() - { - if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode')) - { - unset($this->feed); - } - } - - /** - * Get data for an item-level element - * - * This method allows you to get access to ANY element/attribute that is a - * sub-element of the item/entry tag. - * - * See {@see SimplePie::get_feed_tags()} for a description of the return value - * - * @since 1.0 - * @see http://simplepie.org/wiki/faq/supported_xml_namespaces - * @param string $namespace The URL of the XML namespace of the elements you're trying to access - * @param string $tag Tag name - * @return array - */ - public function get_item_tags($namespace, $tag) - { - if (isset($this->data['child'][$namespace][$tag])) - { - return $this->data['child'][$namespace][$tag]; - } - else - { - return null; - } - } - - /** - * Get the base URL value from the parent feed - * - * Uses `<xml:base>` - * - * @param array $element - * @return string - */ - public function get_base($element = array()) - { - return $this->feed->get_base($element); - } - - /** - * Sanitize feed data - * - * @access private - * @see SimplePie::sanitize() - * @param string $data Data to sanitize - * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants - * @param string $base Base URL to resolve URLs against - * @return string Sanitized data - */ - public function sanitize($data, $type, $base = '') - { - return $this->feed->sanitize($data, $type, $base); - } - - /** - * Get the parent feed - * - * Note: this may not work as you think for multifeeds! - * - * @link http://simplepie.org/faq/typical_multifeed_gotchas#missing_data_from_feed - * @since 1.0 - * @return SimplePie - */ - public function get_feed() - { - return $this->feed; - } - - /** - * Get the unique identifier for the item - * - * This is usually used when writing code to check for new items in a feed. - * - * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute - * for RDF. If none of these are supplied (or `$hash` is true), creates an - * MD5 hash based on the permalink and title. If either of those are not - * supplied, creates a hash based on the full feed data. - * - * @since Beta 2 - * @param boolean $hash Should we force using a hash instead of the supplied ID? - * @return string - */ - public function get_id($hash = false) - { - if (!$hash) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'])) - { - return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (($return = $this->get_permalink()) !== null) - { - return $return; - } - elseif (($return = $this->get_title()) !== null) - { - return $return; - } - } - if ($this->get_permalink() !== null || $this->get_title() !== null) - { - return md5($this->get_permalink() . $this->get_title()); - } - else - { - return md5(serialize($this->data)); - } - } - - /** - * Get the title of the item - * - * Uses `<atom:title>`, `<title>` or `<dc:title>` - * - * @since Beta 2 (previously called `get_item_title` since 0.8) - * @return string|null - */ - public function get_title() - { - if (!isset($this->data['title'])) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $this->data['title'] = null; - } - } - return $this->data['title']; - } - - /** - * Get the content for the item - * - * Prefers summaries over full content , but will return full content if a - * summary does not exist. - * - * To prefer full content instead, use {@see get_content} - * - * Uses `<atom:summary>`, `<description>`, `<dc:description>` or - * `<itunes:subtitle>` - * - * @since 0.8 - * @param boolean $description_only Should we avoid falling back to the content? - * @return string|null - */ - public function get_description($description_only = false) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML); - } - - elseif (!$description_only) - { - return $this->get_content(true); - } - else - { - return null; - } - } - - /** - * Get the content for the item - * - * Prefers full content over summaries, but will return a summary if full - * content does not exist. - * - * To prefer summaries instead, use {@see get_description} - * - * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module) - * - * @since 1.0 - * @param boolean $content_only Should we avoid falling back to the description? - * @return string|null - */ - public function get_content($content_only = false) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif (!$content_only) - { - return $this->get_description(true); - } - else - { - return null; - } - } - - /** - * Get a category for the item - * - * @since Beta 3 (previously called `get_categories()` since Beta 2) - * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1 - * @return SimplePie_Category|null - */ - public function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - /** - * Get all categories for the item - * - * Uses `<atom:category>`, `<category>` or `<dc:subject>` - * - * @since Beta 3 - * @return array|null List of {@see SimplePie_Category} objects - */ - public function get_categories() - { - $categories = array(); - - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['attribs']['']['term'])) - { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) - { - // This is really the label, but keep this as the term also for BC. - // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - if (isset($category['attribs']['']['domain'])) - { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = null; - } - $categories[] = $this->registry->create('Category', array($term, $scheme, null)); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) - { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) - { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - - if (!empty($categories)) - { - return array_unique($categories); - } - else - { - return null; - } - } - - /** - * Get an author for the item - * - * @since Beta 2 - * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1 - * @return SimplePie_Author|null - */ - public function get_author($key = 0) - { - $authors = $this->get_authors(); - if (isset($authors[$key])) - { - return $authors[$key]; - } - else - { - return null; - } - } - - /** - * Get a contributor for the item - * - * @since 1.1 - * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1 - * @return SimplePie_Author|null - */ - public function get_contributor($key = 0) - { - $contributors = $this->get_contributors(); - if (isset($contributors[$key])) - { - return $contributors[$key]; - } - else - { - return null; - } - } - - /** - * Get all contributors for the item - * - * Uses `<atom:contributor>` - * - * @since 1.1 - * @return array|null List of {@see SimplePie_Author} objects - */ - public function get_contributors() - { - $contributors = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) - { - $name = null; - $uri = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $contributors[] = $this->registry->create('Author', array($name, $uri, $email)); - } - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) - { - $name = null; - $url = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $contributors[] = $this->registry->create('Author', array($name, $url, $email)); - } - } - - if (!empty($contributors)) - { - return array_unique($contributors); - } - else - { - return null; - } - } - - /** - * Get all authors for the item - * - * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>` - * - * @since Beta 2 - * @return array|null List of {@see SimplePie_Author} objects - */ - public function get_authors() - { - $authors = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) - { - $name = null; - $uri = null; - $email = null; - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $authors[] = $this->registry->create('Author', array($name, $uri, $email)); - } - } - if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) - { - $name = null; - $url = null; - $email = null; - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $authors[] = $this->registry->create('Author', array($name, $url, $email)); - } - } - if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author')) - { - $authors[] = $this->registry->create('Author', array(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT))); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) - { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) - { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) - { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - - if (!empty($authors)) - { - return array_unique($authors); - } - elseif (($source = $this->get_source()) && ($authors = $source->get_authors())) - { - return $authors; - } - elseif ($authors = $this->feed->get_authors()) - { - return $authors; - } - else - { - return null; - } - } - - /** - * Get the copyright info for the item - * - * Uses `<atom:rights>` or `<dc:rights>` - * - * @since 1.1 - * @return string - */ - public function get_copyright() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - /** - * Get the posting date/time for the item - * - * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`, - * `<atom:modified>`, `<pubDate>` or `<dc:date>` - * - * Note: obeys PHP's timezone setting. To get a UTC date/time, use - * {@see get_gmdate} - * - * @since Beta 2 (previously called `get_item_date` since 0.8) - * - * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data) - * @return int|string|null - */ - public function get_date($date_format = 'j F Y, g:i a') - { - if (!isset($this->data['date'])) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - - if (!empty($this->data['date']['raw'])) - { - $parser = $this->registry->call('Parse_Date', 'get'); - $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']); - } - else - { - $this->data['date'] = null; - } - } - if ($this->data['date']) - { - $date_format = (string) $date_format; - switch ($date_format) - { - case '': - return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT); - - case 'U': - return $this->data['date']['parsed']; - - default: - return date($date_format, $this->data['date']['parsed']); - } - } - else - { - return null; - } - } - - /** - * Get the update date/time for the item - * - * Uses `<atom:updated>` - * - * Note: obeys PHP's timezone setting. To get a UTC date/time, use - * {@see get_gmdate} - * - * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data) - * @return int|string|null - */ - public function get_updated_date($date_format = 'j F Y, g:i a') - { - if (!isset($this->data['updated'])) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated')) - { - $this->data['updated']['raw'] = $return[0]['data']; - } - - if (!empty($this->data['updated']['raw'])) - { - $parser = $this->registry->call('Parse_Date', 'get'); - $this->data['updated']['parsed'] = $parser->parse($this->data['date']['raw']); - } - else - { - $this->data['updated'] = null; - } - } - if ($this->data['updated']) - { - $date_format = (string) $date_format; - switch ($date_format) - { - case '': - return $this->sanitize($this->data['updated']['raw'], SIMPLEPIE_CONSTRUCT_TEXT); - - case 'U': - return $this->data['updated']['parsed']; - - default: - return date($date_format, $this->data['updated']['parsed']); - } - } - else - { - return null; - } - } - - /** - * Get the localized posting date/time for the item - * - * Returns the date formatted in the localized language. To display in - * languages other than the server's default, you need to change the locale - * with {@link http://php.net/setlocale setlocale()}. The available - * localizations depend on which ones are installed on your web server. - * - * @since 1.0 - * - * @param string $date_format Supports any PHP date format from {@see http://php.net/strftime} (empty for the raw data) - * @return int|string|null - */ - public function get_local_date($date_format = '%c') - { - if (!$date_format) - { - return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (($date = $this->get_date('U')) !== null && $date !== false) - { - return strftime($date_format, $date); - } - else - { - return null; - } - } - - /** - * Get the posting date/time for the item (UTC time) - * - * @see get_date - * @param string $date_format Supports any PHP date format from {@see http://php.net/date} - * @return int|string|null - */ - public function get_gmdate($date_format = 'j F Y, g:i a') - { - $date = $this->get_date('U'); - if ($date === null) - { - return null; - } - - return gmdate($date_format, $date); - } - - /** - * Get the update date/time for the item (UTC time) - * - * @see get_updated_date - * @param string $date_format Supports any PHP date format from {@see http://php.net/date} - * @return int|string|null - */ - public function get_updated_gmdate($date_format = 'j F Y, g:i a') - { - $date = $this->get_updated_date('U'); - if ($date === null) - { - return null; - } - - return gmdate($date_format, $date); - } - - /** - * Get the permalink for the item - * - * Returns the first link available with a relationship of "alternate". - * Identical to {@see get_link()} with key 0 - * - * @see get_link - * @since 0.8 - * @return string|null Permalink URL - */ - public function get_permalink() - { - $link = $this->get_link(); - $enclosure = $this->get_enclosure(0); - if ($link !== null) - { - return $link; - } - elseif ($enclosure !== null) - { - return $enclosure->get_link(); - } - else - { - return null; - } - } - - /** - * Get a single link for the item - * - * @since Beta 3 - * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1 - * @param string $rel The relationship of the link to return - * @return string|null Link URL - */ - public function get_link($key = 0, $rel = 'alternate') - { - $links = $this->get_links($rel); - if ($links[$key] !== null) - { - return $links[$key]; - } - else - { - return null; - } - } - - /** - * Get all links for the item - * - * Uses `<atom:link>`, `<link>` or `<guid>` - * - * @since Beta 2 - * @param string $rel The relationship of links to return - * @return array|null Links found for the item (strings) - */ - public function get_links($rel = 'alternate') - { - if (!isset($this->data['links'])) - { - $this->data['links'] = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - - } - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - } - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) - { - if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true') - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - } - - $keys = array_keys($this->data['links']); - foreach ($keys as $key) - { - if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key))) - { - if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); - $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; - } - else - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; - } - } - elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) - { - $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; - } - $this->data['links'][$key] = array_unique($this->data['links'][$key]); - } - } - if (isset($this->data['links'][$rel])) - { - return $this->data['links'][$rel]; - } - else - { - return null; - } - } - - /** - * Get an enclosure from the item - * - * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS. - * - * @since Beta 2 - * @todo Add ability to prefer one type of content over another (in a media group). - * @param int $key The enclosure that you want to return. Remember that arrays begin with 0, not 1 - * @return SimplePie_Enclosure|null - */ - public function get_enclosure($key = 0, $prefer = null) - { - $enclosures = $this->get_enclosures(); - if (isset($enclosures[$key])) - { - return $enclosures[$key]; - } - else - { - return null; - } - } - - /** - * Get all available enclosures (podcasts, etc.) - * - * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS. - * - * At this point, we're pretty much assuming that all enclosures for an item - * are the same content. Anything else is too complicated to - * properly support. - * - * @since Beta 2 - * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4). - * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists). - * @return array|null List of SimplePie_Enclosure items - */ - public function get_enclosures() - { - if (!isset($this->data['enclosures'])) - { - $this->data['enclosures'] = array(); - - // Elements - $captions_parent = null; - $categories_parent = null; - $copyrights_parent = null; - $credits_parent = null; - $description_parent = null; - $duration_parent = null; - $hashes_parent = null; - $keywords_parent = null; - $player_parent = null; - $ratings_parent = null; - $restrictions_parent = null; - $thumbnails_parent = null; - $title_parent = null; - - // Let's do the channel and item-level ones first, and just re-use them if we need to. - $parent = $this->get_feed(); - - // CAPTIONS - if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) - { - foreach ($captions as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); - } - } - elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) - { - foreach ($captions as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); - } - } - if (is_array($captions_parent)) - { - $captions_parent = array_values(array_unique($captions_parent)); - } - - // CATEGORIES - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label)); - } - foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label)); - } - foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category) - { - $term = null; - $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd'; - $label = null; - if (isset($category['attribs']['']['text'])) - { - $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label)); - - if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'])) - { - foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory) - { - if (isset($subcategory['attribs']['']['text'])) - { - $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label)); - } - } - } - if (is_array($categories_parent)) - { - $categories_parent = array_values(array_unique($categories_parent)); - } - - // COPYRIGHT - if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) - { - $copyright_url = null; - $copyright_label = null; - if (isset($copyright[0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($copyright[0]['data'])) - { - $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); - } - elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) - { - $copyright_url = null; - $copyright_label = null; - if (isset($copyright[0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($copyright[0]['data'])) - { - $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); - } - - // CREDITS - if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) - { - foreach ($credits as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); - } - } - elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) - { - foreach ($credits as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); - } - } - if (is_array($credits_parent)) - { - $credits_parent = array_values(array_unique($credits_parent)); - } - - // DESCRIPTION - if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) - { - if (isset($description_parent[0]['data'])) - { - $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) - { - if (isset($description_parent[0]['data'])) - { - $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - - // DURATION - if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration')) - { - $seconds = null; - $minutes = null; - $hours = null; - if (isset($duration_parent[0]['data'])) - { - $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - if (sizeof($temp) > 0) - { - $seconds = (int) array_pop($temp); - } - if (sizeof($temp) > 0) - { - $minutes = (int) array_pop($temp); - $seconds += $minutes * 60; - } - if (sizeof($temp) > 0) - { - $hours = (int) array_pop($temp); - $seconds += $hours * 3600; - } - unset($temp); - $duration_parent = $seconds; - } - } - - // HASHES - if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) - { - foreach ($hashes_iterator as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes_parent[] = $algo.':'.$value; - } - } - elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) - { - foreach ($hashes_iterator as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes_parent[] = $algo.':'.$value; - } - } - if (is_array($hashes_parent)) - { - $hashes_parent = array_values(array_unique($hashes_parent)); - } - - // KEYWORDS - if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - if (is_array($keywords_parent)) - { - $keywords_parent = array_values(array_unique($keywords_parent)); - } - - // PLAYER - if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) - { - if (isset($player_parent[0]['attribs']['']['url'])) - { - $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) - { - if (isset($player_parent[0]['attribs']['']['url'])) - { - $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - - // RATINGS - if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) - { - foreach ($ratings as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); - } - } - elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) - { - foreach ($ratings as $rating) - { - $rating_scheme = 'urn:itunes'; - $rating_value = null; - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); - } - } - elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) - { - foreach ($ratings as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); - } - } - elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) - { - foreach ($ratings as $rating) - { - $rating_scheme = 'urn:itunes'; - $rating_value = null; - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); - } - } - if (is_array($ratings_parent)) - { - $ratings_parent = array_values(array_unique($ratings_parent)); - } - - // RESTRICTIONS - if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); - } - } - elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = 'allow'; - $restriction_type = null; - $restriction_value = 'itunes'; - if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') - { - $restriction_relationship = 'deny'; - } - $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); - } - } - elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); - } - } - elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = 'allow'; - $restriction_type = null; - $restriction_value = 'itunes'; - if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') - { - $restriction_relationship = 'deny'; - } - $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); - } - } - if (is_array($restrictions_parent)) - { - $restrictions_parent = array_values(array_unique($restrictions_parent)); - } - else - { - $restrictions_parent = array(new SimplePie_Restriction('allow', null, 'default')); - } - - // THUMBNAILS - if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) - { - foreach ($thumbnails as $thumbnail) - { - if (isset($thumbnail['attribs']['']['url'])) - { - $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - } - elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) - { - foreach ($thumbnails as $thumbnail) - { - if (isset($thumbnail['attribs']['']['url'])) - { - $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - } - - // TITLES - if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) - { - if (isset($title_parent[0]['data'])) - { - $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) - { - if (isset($title_parent[0]['data'])) - { - $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - - // Clear the memory - unset($parent); - - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // If we have media:group tags, loop through them. - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group) - { - if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) - { - // If we have media:content tags, loop through them. - foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) - { - if (isset($content['attribs']['']['url'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // Start checking the attributes of media:content - if (isset($content['attribs']['']['bitrate'])) - { - $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['channels'])) - { - $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['duration'])) - { - $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $duration = $duration_parent; - } - if (isset($content['attribs']['']['expression'])) - { - $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['framerate'])) - { - $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['height'])) - { - $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['lang'])) - { - $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['fileSize'])) - { - $length = ceil($content['attribs']['']['fileSize']); - } - if (isset($content['attribs']['']['medium'])) - { - $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['samplingrate'])) - { - $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['type'])) - { - $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['width'])) - { - $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - - // Checking the other optional media: elements. Priority: media:content, media:group, item, channel - - // CAPTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); - } - if (is_array($captions)) - { - $captions = array_values(array_unique($captions)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); - } - if (is_array($captions)) - { - $captions = array_values(array_unique($captions)); - } - } - else - { - $captions = $captions_parent; - } - - // CATEGORIES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); - } - } - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); - } - } - if (is_array($categories) && is_array($categories_parent)) - { - $categories = array_values(array_unique(array_merge($categories, $categories_parent))); - } - elseif (is_array($categories)) - { - $categories = array_values(array_unique($categories)); - } - elseif (is_array($categories_parent)) - { - $categories = array_values(array_unique($categories_parent)); - } - - // COPYRIGHTS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) - { - $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) - { - $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); - } - else - { - $copyrights = $copyrights_parent; - } - - // CREDITS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); - } - if (is_array($credits)) - { - $credits = array_values(array_unique($credits)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); - } - if (is_array($credits)) - { - $credits = array_values(array_unique($credits)); - } - } - else - { - $credits = $credits_parent; - } - - // DESCRIPTION - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $description = $description_parent; - } - - // HASHES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes[] = $algo.':'.$value; - } - if (is_array($hashes)) - { - $hashes = array_values(array_unique($hashes)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes[] = $algo.':'.$value; - } - if (is_array($hashes)) - { - $hashes = array_values(array_unique($hashes)); - } - } - else - { - $hashes = $hashes_parent; - } - - // KEYWORDS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) - { - $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); - } - if (is_array($keywords)) - { - $keywords = array_values(array_unique($keywords)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) - { - $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); - } - if (is_array($keywords)) - { - $keywords = array_values(array_unique($keywords)); - } - } - else - { - $keywords = $keywords_parent; - } - - // PLAYER - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - $player = $player_parent; - } - - // RATINGS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); - } - if (is_array($ratings)) - { - $ratings = array_values(array_unique($ratings)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); - } - if (is_array($ratings)) - { - $ratings = array_values(array_unique($ratings)); - } - } - else - { - $ratings = $ratings_parent; - } - - // RESTRICTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); - } - if (is_array($restrictions)) - { - $restrictions = array_values(array_unique($restrictions)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); - } - if (is_array($restrictions)) - { - $restrictions = array_values(array_unique($restrictions)); - } - } - else - { - $restrictions = $restrictions_parent; - } - - // THUMBNAILS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) - { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(array_unique($thumbnails)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) - { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(array_unique($thumbnails)); - } - } - else - { - $thumbnails = $thumbnails_parent; - } - - // TITLES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $title = $title_parent; - } - - $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width)); - } - } - } - } - - // If we have standalone media:content tags, loop through them. - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) - { - foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) - { - if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // Start checking the attributes of media:content - if (isset($content['attribs']['']['bitrate'])) - { - $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['channels'])) - { - $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['duration'])) - { - $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $duration = $duration_parent; - } - if (isset($content['attribs']['']['expression'])) - { - $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['framerate'])) - { - $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['height'])) - { - $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['lang'])) - { - $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['fileSize'])) - { - $length = ceil($content['attribs']['']['fileSize']); - } - if (isset($content['attribs']['']['medium'])) - { - $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['samplingrate'])) - { - $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['type'])) - { - $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['width'])) - { - $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['url'])) - { - $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - // Checking the other optional media: elements. Priority: media:content, media:group, item, channel - - // CAPTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text)); - } - if (is_array($captions)) - { - $captions = array_values(array_unique($captions)); - } - } - else - { - $captions = $captions_parent; - } - - // CATEGORIES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); - } - } - if (is_array($categories) && is_array($categories_parent)) - { - $categories = array_values(array_unique(array_merge($categories, $categories_parent))); - } - elseif (is_array($categories)) - { - $categories = array_values(array_unique($categories)); - } - elseif (is_array($categories_parent)) - { - $categories = array_values(array_unique($categories_parent)); - } - else - { - $categories = null; - } - - // COPYRIGHTS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) - { - $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label)); - } - else - { - $copyrights = $copyrights_parent; - } - - // CREDITS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name)); - } - if (is_array($credits)) - { - $credits = array_values(array_unique($credits)); - } - } - else - { - $credits = $credits_parent; - } - - // DESCRIPTION - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $description = $description_parent; - } - - // HASHES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes[] = $algo.':'.$value; - } - if (is_array($hashes)) - { - $hashes = array_values(array_unique($hashes)); - } - } - else - { - $hashes = $hashes_parent; - } - - // KEYWORDS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) - { - $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); - } - if (is_array($keywords)) - { - $keywords = array_values(array_unique($keywords)); - } - } - else - { - $keywords = $keywords_parent; - } - - // PLAYER - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - $player = $player_parent; - } - - // RATINGS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value)); - } - if (is_array($ratings)) - { - $ratings = array_values(array_unique($ratings)); - } - } - else - { - $ratings = $ratings_parent; - } - - // RESTRICTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value)); - } - if (is_array($restrictions)) - { - $restrictions = array_values(array_unique($restrictions)); - } - } - else - { - $restrictions = $restrictions_parent; - } - - // THUMBNAILS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) - { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(array_unique($thumbnails)); - } - } - else - { - $thumbnails = $thumbnails_parent; - } - - // TITLES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $title = $title_parent; - } - - $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width)); - } - } - } - - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) - { - if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - if (isset($link['attribs']['']['type'])) - { - $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($link['attribs']['']['length'])) - { - $length = ceil($link['attribs']['']['length']); - } - - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width)); - } - } - - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) - { - if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - if (isset($link['attribs']['']['type'])) - { - $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($link['attribs']['']['length'])) - { - $length = ceil($link['attribs']['']['length']); - } - - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width)); - } - } - - if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure')) - { - if (isset($enclosure[0]['attribs']['']['url'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0])); - if (isset($enclosure[0]['attribs']['']['type'])) - { - $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($enclosure[0]['attribs']['']['length'])) - { - $length = ceil($enclosure[0]['attribs']['']['length']); - } - - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width)); - } - } - - if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) - { - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width)); - } - - $this->data['enclosures'] = array_values(array_unique($this->data['enclosures'])); - } - if (!empty($this->data['enclosures'])) - { - return $this->data['enclosures']; - } - else - { - return null; - } - } - - /** - * Get the latitude coordinates for the item - * - * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications - * - * Uses `<geo:lat>` or `<georss:point>` - * - * @since 1.0 - * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo - * @link http://www.georss.org/ GeoRSS - * @return string|null - */ - public function get_latitude() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[1]; - } - else - { - return null; - } - } - - /** - * Get the longitude coordinates for the item - * - * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications - * - * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>` - * - * @since 1.0 - * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo - * @link http://www.georss.org/ GeoRSS - * @return string|null - */ - public function get_longitude() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) - { - return (float) $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[2]; - } - else - { - return null; - } - } - - /** - * Get the `<atom:source>` for the item - * - * @since 1.1 - * @return SimplePie_Source|null - */ - public function get_source() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source')) - { - return $this->registry->create('Source', array($this, $return[0])); - } - else - { - return null; - } - } -} - -/** - * Used for feed auto-discovery - * - * - * This class can be overloaded with {@see SimplePie::set_locator_class()} - * - * @package SimplePie - */ -class SimplePie_Locator -{ - var $useragent; - var $timeout; - var $file; - var $local = array(); - var $elsewhere = array(); - var $cached_entities = array(); - var $http_base; - var $base; - var $base_location = 0; - var $checked_feeds = 0; - var $max_checked_feeds = 10; - protected $registry; - - public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10) - { - $this->file = $file; - $this->useragent = $useragent; - $this->timeout = $timeout; - $this->max_checked_feeds = $max_checked_feeds; - - if (class_exists('DOMDocument')) - { - $this->dom = new DOMDocument(); - - set_error_handler(array('SimplePie_Misc', 'silence_errors')); - $this->dom->loadHTML($this->file->body); - restore_error_handler(); - } - else - { - $this->dom = null; - } - } - - public function set_registry(SimplePie_Registry $registry) - { - $this->registry = $registry; - } - - public function find($type = SIMPLEPIE_LOCATOR_ALL, &$working) - { - if ($this->is_feed($this->file)) - { - return $this->file; - } - - if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) - { - $sniffer = $this->registry->create('Content_Type_Sniffer', array($this->file)); - if ($sniffer->get_type() !== 'text/html') - { - return null; - } - } - - if ($type & ~SIMPLEPIE_LOCATOR_NONE) - { - $this->get_base(); - } - - if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery()) - { - return $working[0]; - } - - if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links()) - { - if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local)) - { - return $working; - } - - if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local)) - { - return $working; - } - - if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere)) - { - return $working; - } - - if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere)) - { - return $working; - } - } - return null; - } - - public function is_feed($file) - { - if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) - { - $sniffer = $this->registry->create('Content_Type_Sniffer', array($file)); - $sniffed = $sniffer->get_type(); - if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml'))) - { - return true; - } - else - { - return false; - } - } - elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL) - { - return true; - } - else - { - return false; - } - } - - public function get_base() - { - if ($this->dom === null) - { - throw new SimplePie_Exception('DOMDocument not found, unable to use locator'); - } - $this->http_base = $this->file->url; - $this->base = $this->http_base; - $elements = $this->dom->getElementsByTagName('base'); - foreach ($elements as $element) - { - if ($element->hasAttribute('href')) - { - $base = $this->registry->call('Misc', 'absolutize_url', array(trim($element->getAttribute('href')), $this->http_base)); - if ($base === false) - { - continue; - } - $this->base = $base; - $this->base_location = method_exists($element, 'getLineNo') ? $element->getLineNo() : 0; - break; - } - } - } - - public function autodiscovery() - { - $done = array(); - $feeds = array(); - $feeds = array_merge($feeds, $this->search_elements_by_tag('link', $done, $feeds)); - $feeds = array_merge($feeds, $this->search_elements_by_tag('a', $done, $feeds)); - $feeds = array_merge($feeds, $this->search_elements_by_tag('area', $done, $feeds)); - - if (!empty($feeds)) - { - return array_values($feeds); - } - else - { - return null; - } - } - - protected function search_elements_by_tag($name, &$done, $feeds) - { - if ($this->dom === null) - { - throw new SimplePie_Exception('DOMDocument not found, unable to use locator'); - } - - $links = $this->dom->getElementsByTagName($name); - foreach ($links as $link) - { - if ($this->checked_feeds === $this->max_checked_feeds) - { - break; - } - if ($link->hasAttribute('href') && $link->hasAttribute('rel')) - { - $rel = array_unique($this->registry->call('Misc', 'space_seperated_tokens', array(strtolower($link->getAttribute('rel'))))); - $line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1; - - if ($this->base_location < $line) - { - $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->base)); - } - else - { - $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->http_base)); - } - if ($href === false) - { - continue; - } - - if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call('Misc', 'parse_mime', array($link->getAttribute('type')))), array('application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href])) - { - $this->checked_feeds++; - $headers = array( - 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', - ); - $feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent)); - if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) - { - $feeds[$href] = $feed; - } - } - $done[] = $href; - } - } - - return $feeds; - } - - public function get_links() - { - if ($this->dom === null) - { - throw new SimplePie_Exception('DOMDocument not found, unable to use locator'); - } - - $links = $this->dom->getElementsByTagName('a'); - foreach ($links as $link) - { - if ($link->hasAttribute('href')) - { - $href = trim($link->getAttribute('href')); - $parsed = $this->registry->call('Misc', 'parse_url', array($href)); - if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme'])) - { - if ($this->base_location < $link->getLineNo()) - { - $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->base)); - } - else - { - $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->http_base)); - } - if ($href === false) - { - continue; - } - - $current = $this->registry->call('Misc', 'parse_url', array($this->file->url)); - - if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority']) - { - $this->local[] = $href; - } - else - { - $this->elsewhere[] = $href; - } - } - } - } - $this->local = array_unique($this->local); - $this->elsewhere = array_unique($this->elsewhere); - if (!empty($this->local) || !empty($this->elsewhere)) - { - return true; - } - return null; - } - - public function extension(&$array) - { - foreach ($array as $key => $value) - { - if ($this->checked_feeds === $this->max_checked_feeds) - { - break; - } - if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml'))) - { - $this->checked_feeds++; - - $headers = array( - 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', - ); - $feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent)); - if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) - { - return $feed; - } - else - { - unset($array[$key]); - } - } - } - return null; - } - - public function body(&$array) - { - foreach ($array as $key => $value) - { - if ($this->checked_feeds === $this->max_checked_feeds) - { - break; - } - if (preg_match('/(rss|rdf|atom|xml)/i', $value)) - { - $this->checked_feeds++; - $headers = array( - 'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1', - ); - $feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent)); - if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) - { - return $feed; - } - else - { - unset($array[$key]); - } - } - } - return null; - } -} - -/** - * Miscellanous utilities - * - * @package SimplePie - */ -class SimplePie_Misc -{ - public static function time_hms($seconds) - { - $time = ''; - - $hours = floor($seconds / 3600); - $remainder = $seconds % 3600; - if ($hours > 0) - { - $time .= $hours.':'; - } - - $minutes = floor($remainder / 60); - $seconds = $remainder % 60; - if ($minutes < 10 && $hours > 0) - { - $minutes = '0' . $minutes; - } - if ($seconds < 10) - { - $seconds = '0' . $seconds; - } - - $time .= $minutes.':'; - $time .= $seconds; - - return $time; - } - - public static function absolutize_url($relative, $base) - { - $iri = SimplePie_IRI::absolutize(new SimplePie_IRI($base), $relative); - if ($iri === false) - { - return false; - } - return $iri->get_uri(); - } - - /** - * Get a HTML/XML element from a HTML string - * - * @deprecated Use DOMDocument instead (parsing HTML with regex is bad!) - * @param string $realname Element name (including namespace prefix if applicable) - * @param string $string HTML document - * @return array - */ - public static function get_element($realname, $string) - { - $return = array(); - $name = preg_quote($realname, '/'); - if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) - { - for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++) - { - $return[$i]['tag'] = $realname; - $return[$i]['full'] = $matches[$i][0][0]; - $return[$i]['offset'] = $matches[$i][0][1]; - if (strlen($matches[$i][3][0]) <= 2) - { - $return[$i]['self_closing'] = true; - } - else - { - $return[$i]['self_closing'] = false; - $return[$i]['content'] = $matches[$i][4][0]; - } - $return[$i]['attribs'] = array(); - if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER)) - { - for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) - { - if (count($attribs[$j]) === 2) - { - $attribs[$j][2] = $attribs[$j][1]; - } - $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8'); - } - } - } - } - return $return; - } - - public static function element_implode($element) - { - $full = "<$element[tag]"; - foreach ($element['attribs'] as $key => $value) - { - $key = strtolower($key); - $full .= " $key=\"" . htmlspecialchars($value['data']) . '"'; - } - if ($element['self_closing']) - { - $full .= ' />'; - } - else - { - $full .= ">$element[content]</$element[tag]>"; - } - return $full; - } - - public static function error($message, $level, $file, $line) - { - if ((ini_get('error_reporting') & $level) > 0) - { - switch ($level) - { - case E_USER_ERROR: - $note = 'PHP Error'; - break; - case E_USER_WARNING: - $note = 'PHP Warning'; - break; - case E_USER_NOTICE: - $note = 'PHP Notice'; - break; - default: - $note = 'Unknown Error'; - break; - } - - $log_error = true; - if (!function_exists('error_log')) - { - $log_error = false; - } - - $log_file = @ini_get('error_log'); - if (!empty($log_file) && ('syslog' !== $log_file) && !@is_writable($log_file)) - { - $log_error = false; - } - - if ($log_error) - { - @error_log("$note: $message in $file on line $line", 0); - } - } - - return $message; - } - - public static function fix_protocol($url, $http = 1) - { - $url = SimplePie_Misc::normalize_url($url); - $parsed = SimplePie_Misc::parse_url($url); - if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https') - { - return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http); - } - - if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url)) - { - return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http); - } - - if ($http === 2 && $parsed['scheme'] !== '') - { - return "feed:$url"; - } - elseif ($http === 3 && strtolower($parsed['scheme']) === 'http') - { - return substr_replace($url, 'podcast', 0, 4); - } - elseif ($http === 4 && strtolower($parsed['scheme']) === 'http') - { - return substr_replace($url, 'itpc', 0, 4); - } - else - { - return $url; - } - } - - public static function parse_url($url) - { - $iri = new SimplePie_IRI($url); - return array( - 'scheme' => (string) $iri->scheme, - 'authority' => (string) $iri->authority, - 'path' => (string) $iri->path, - 'query' => (string) $iri->query, - 'fragment' => (string) $iri->fragment - ); - } - - public static function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '') - { - $iri = new SimplePie_IRI(''); - $iri->scheme = $scheme; - $iri->authority = $authority; - $iri->path = $path; - $iri->query = $query; - $iri->fragment = $fragment; - return $iri->get_uri(); - } - - public static function normalize_url($url) - { - $iri = new SimplePie_IRI($url); - return $iri->get_uri(); - } - - public static function percent_encoding_normalization($match) - { - $integer = hexdec($match[1]); - if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E) - { - return chr($integer); - } - else - { - return strtoupper($match[0]); - } - } - - /** - * Converts a Windows-1252 encoded string to a UTF-8 encoded string - * - * @static - * @param string $string Windows-1252 encoded string - * @return string UTF-8 encoded string - */ - public static function windows_1252_to_utf8($string) - { - static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF"); - - return strtr($string, $convert_table); - } - - /** - * Change a string from one encoding to another - * - * @param string $data Raw data in $input encoding - * @param string $input Encoding of $data - * @param string $output Encoding you want - * @return string|boolean False if we can't convert it - */ - public static function change_encoding($data, $input, $output) - { - $input = SimplePie_Misc::encoding($input); - $output = SimplePie_Misc::encoding($output); - - // We fail to fail on non US-ASCII bytes - if ($input === 'US-ASCII') - { - static $non_ascii_octects = ''; - if (!$non_ascii_octects) - { - for ($i = 0x80; $i <= 0xFF; $i++) - { - $non_ascii_octects .= chr($i); - } - } - $data = substr($data, 0, strcspn($data, $non_ascii_octects)); - } - - // This is first, as behaviour of this is completely predictable - if ($input === 'windows-1252' && $output === 'UTF-8') - { - return SimplePie_Misc::windows_1252_to_utf8($data); - } - // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported). - elseif (function_exists('mb_convert_encoding') && ($return = SimplePie_Misc::change_encoding_mbstring($data, $input, $output))) - { - return $return; - } - // This is last, as behaviour of this varies with OS userland and PHP version - elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output))) - { - return $return; - } - // If we can't do anything, just fail - else - { - return false; - } - } - - protected static function change_encoding_mbstring($data, $input, $output) - { - if ($input === 'windows-949') - { - $input = 'EUC-KR'; - } - if ($output === 'windows-949') - { - $output = 'EUC-KR'; - } - if ($input === 'Windows-31J') - { - $input = 'SJIS'; - } - if ($output === 'Windows-31J') - { - $output = 'SJIS'; - } - - // Check that the encoding is supported - if (@mb_convert_encoding("\x80", 'UTF-16BE', $input) === "\x00\x80") - { - return false; - } - if (!in_array($input, mb_list_encodings())) - { - return false; - } - - // Let's do some conversion - if ($return = @mb_convert_encoding($data, $output, $input)) - { - return $return; - } - - return false; - } - - protected static function change_encoding_iconv($data, $input, $output) - { - return @iconv($input, $output, $data); - } - - /** - * Normalize an encoding name - * - * This is automatically generated by create.php - * - * To generate it, run `php create.php` on the command line, and copy the - * output to replace this function. - * - * @param string $charset Character set to standardise - * @return string Standardised name - */ - public static function encoding($charset) - { - // Normalization from UTS #22 - switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset))) - { - case 'adobestandardencoding': - case 'csadobestandardencoding': - return 'Adobe-Standard-Encoding'; - - case 'adobesymbolencoding': - case 'cshppsmath': - return 'Adobe-Symbol-Encoding'; - - case 'ami1251': - case 'amiga1251': - return 'Amiga-1251'; - - case 'ansix31101983': - case 'csat5001983': - case 'csiso99naplps': - case 'isoir99': - case 'naplps': - return 'ANSI_X3.110-1983'; - - case 'arabic7': - case 'asmo449': - case 'csiso89asmo449': - case 'iso9036': - case 'isoir89': - return 'ASMO_449'; - - case 'big5': - case 'csbig5': - return 'Big5'; - - case 'big5hkscs': - return 'Big5-HKSCS'; - - case 'bocu1': - case 'csbocu1': - return 'BOCU-1'; - - case 'brf': - case 'csbrf': - return 'BRF'; - - case 'bs4730': - case 'csiso4unitedkingdom': - case 'gb': - case 'iso646gb': - case 'isoir4': - case 'uk': - return 'BS_4730'; - - case 'bsviewdata': - case 'csiso47bsviewdata': - case 'isoir47': - return 'BS_viewdata'; - - case 'cesu8': - case 'cscesu8': - return 'CESU-8'; - - case 'ca': - case 'csa71': - case 'csaz243419851': - case 'csiso121canadian1': - case 'iso646ca': - case 'isoir121': - return 'CSA_Z243.4-1985-1'; - - case 'csa72': - case 'csaz243419852': - case 'csiso122canadian2': - case 'iso646ca2': - case 'isoir122': - return 'CSA_Z243.4-1985-2'; - - case 'csaz24341985gr': - case 'csiso123csaz24341985gr': - case 'isoir123': - return 'CSA_Z243.4-1985-gr'; - - case 'csiso139csn369103': - case 'csn369103': - case 'isoir139': - return 'CSN_369103'; - - case 'csdecmcs': - case 'dec': - case 'decmcs': - return 'DEC-MCS'; - - case 'csiso21german': - case 'de': - case 'din66003': - case 'iso646de': - case 'isoir21': - return 'DIN_66003'; - - case 'csdkus': - case 'dkus': - return 'dk-us'; - - case 'csiso646danish': - case 'dk': - case 'ds2089': - case 'iso646dk': - return 'DS_2089'; - - case 'csibmebcdicatde': - case 'ebcdicatde': - return 'EBCDIC-AT-DE'; - - case 'csebcdicatdea': - case 'ebcdicatdea': - return 'EBCDIC-AT-DE-A'; - - case 'csebcdiccafr': - case 'ebcdiccafr': - return 'EBCDIC-CA-FR'; - - case 'csebcdicdkno': - case 'ebcdicdkno': - return 'EBCDIC-DK-NO'; - - case 'csebcdicdknoa': - case 'ebcdicdknoa': - return 'EBCDIC-DK-NO-A'; - - case 'csebcdices': - case 'ebcdices': - return 'EBCDIC-ES'; - - case 'csebcdicesa': - case 'ebcdicesa': - return 'EBCDIC-ES-A'; - - case 'csebcdicess': - case 'ebcdicess': - return 'EBCDIC-ES-S'; - - case 'csebcdicfise': - case 'ebcdicfise': - return 'EBCDIC-FI-SE'; - - case 'csebcdicfisea': - case 'ebcdicfisea': - return 'EBCDIC-FI-SE-A'; - - case 'csebcdicfr': - case 'ebcdicfr': - return 'EBCDIC-FR'; - - case 'csebcdicit': - case 'ebcdicit': - return 'EBCDIC-IT'; - - case 'csebcdicpt': - case 'ebcdicpt': - return 'EBCDIC-PT'; - - case 'csebcdicuk': - case 'ebcdicuk': - return 'EBCDIC-UK'; - - case 'csebcdicus': - case 'ebcdicus': - return 'EBCDIC-US'; - - case 'csiso111ecmacyrillic': - case 'ecmacyrillic': - case 'isoir111': - case 'koi8e': - return 'ECMA-cyrillic'; - - case 'csiso17spanish': - case 'es': - case 'iso646es': - case 'isoir17': - return 'ES'; - - case 'csiso85spanish2': - case 'es2': - case 'iso646es2': - case 'isoir85': - return 'ES2'; - - case 'cseucpkdfmtjapanese': - case 'eucjp': - case 'extendedunixcodepackedformatforjapanese': - return 'EUC-JP'; - - case 'cseucfixwidjapanese': - case 'extendedunixcodefixedwidthforjapanese': - return 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; - - case 'gb18030': - return 'GB18030'; - - case 'chinese': - case 'cp936': - case 'csgb2312': - case 'csiso58gb231280': - case 'gb2312': - case 'gb231280': - case 'gbk': - case 'isoir58': - case 'ms936': - case 'windows936': - return 'GBK'; - - case 'cn': - case 'csiso57gb1988': - case 'gb198880': - case 'iso646cn': - case 'isoir57': - return 'GB_1988-80'; - - case 'csiso153gost1976874': - case 'gost1976874': - case 'isoir153': - case 'stsev35888': - return 'GOST_19768-74'; - - case 'csiso150': - case 'csiso150greekccitt': - case 'greekccitt': - case 'isoir150': - return 'greek-ccitt'; - - case 'csiso88greek7': - case 'greek7': - case 'isoir88': - return 'greek7'; - - case 'csiso18greek7old': - case 'greek7old': - case 'isoir18': - return 'greek7-old'; - - case 'cshpdesktop': - case 'hpdesktop': - return 'HP-DeskTop'; - - case 'cshplegal': - case 'hplegal': - return 'HP-Legal'; - - case 'cshpmath8': - case 'hpmath8': - return 'HP-Math8'; - - case 'cshppifont': - case 'hppifont': - return 'HP-Pi-font'; - - case 'cshproman8': - case 'hproman8': - case 'r8': - case 'roman8': - return 'hp-roman8'; - - case 'hzgb2312': - return 'HZ-GB-2312'; - - case 'csibmsymbols': - case 'ibmsymbols': - return 'IBM-Symbols'; - - case 'csibmthai': - case 'ibmthai': - return 'IBM-Thai'; - - case 'cp37': - case 'csibm37': - case 'ebcdiccpca': - case 'ebcdiccpnl': - case 'ebcdiccpus': - case 'ebcdiccpwt': - case 'ibm37': - return 'IBM037'; - - case 'cp38': - case 'csibm38': - case 'ebcdicint': - case 'ibm38': - return 'IBM038'; - - case 'cp273': - case 'csibm273': - case 'ibm273': - return 'IBM273'; - - case 'cp274': - case 'csibm274': - case 'ebcdicbe': - case 'ibm274': - return 'IBM274'; - - case 'cp275': - case 'csibm275': - case 'ebcdicbr': - case 'ibm275': - return 'IBM275'; - - case 'csibm277': - case 'ebcdiccpdk': - case 'ebcdiccpno': - case 'ibm277': - return 'IBM277'; - - case 'cp278': - case 'csibm278': - case 'ebcdiccpfi': - case 'ebcdiccpse': - case 'ibm278': - return 'IBM278'; - - case 'cp280': - case 'csibm280': - case 'ebcdiccpit': - case 'ibm280': - return 'IBM280'; - - case 'cp281': - case 'csibm281': - case 'ebcdicjpe': - case 'ibm281': - return 'IBM281'; - - case 'cp284': - case 'csibm284': - case 'ebcdiccpes': - case 'ibm284': - return 'IBM284'; - - case 'cp285': - case 'csibm285': - case 'ebcdiccpgb': - case 'ibm285': - return 'IBM285'; - - case 'cp290': - case 'csibm290': - case 'ebcdicjpkana': - case 'ibm290': - return 'IBM290'; - - case 'cp297': - case 'csibm297': - case 'ebcdiccpfr': - case 'ibm297': - return 'IBM297'; - - case 'cp420': - case 'csibm420': - case 'ebcdiccpar1': - case 'ibm420': - return 'IBM420'; - - case 'cp423': - case 'csibm423': - case 'ebcdiccpgr': - case 'ibm423': - return 'IBM423'; - - case 'cp424': - case 'csibm424': - case 'ebcdiccphe': - case 'ibm424': - return 'IBM424'; - - case '437': - case 'cp437': - case 'cspc8codepage437': - case 'ibm437': - return 'IBM437'; - - case 'cp500': - case 'csibm500': - case 'ebcdiccpbe': - case 'ebcdiccpch': - case 'ibm500': - return 'IBM500'; - - case 'cp775': - case 'cspc775baltic': - case 'ibm775': - return 'IBM775'; - - case '850': - case 'cp850': - case 'cspc850multilingual': - case 'ibm850': - return 'IBM850'; - - case '851': - case 'cp851': - case 'csibm851': - case 'ibm851': - return 'IBM851'; - - case '852': - case 'cp852': - case 'cspcp852': - case 'ibm852': - return 'IBM852'; - - case '855': - case 'cp855': - case 'csibm855': - case 'ibm855': - return 'IBM855'; - - case '857': - case 'cp857': - case 'csibm857': - case 'ibm857': - return 'IBM857'; - - case 'ccsid858': - case 'cp858': - case 'ibm858': - case 'pcmultilingual850euro': - return 'IBM00858'; - - case '860': - case 'cp860': - case 'csibm860': - case 'ibm860': - return 'IBM860'; - - case '861': - case 'cp861': - case 'cpis': - case 'csibm861': - case 'ibm861': - return 'IBM861'; - - case '862': - case 'cp862': - case 'cspc862latinhebrew': - case 'ibm862': - return 'IBM862'; - - case '863': - case 'cp863': - case 'csibm863': - case 'ibm863': - return 'IBM863'; - - case 'cp864': - case 'csibm864': - case 'ibm864': - return 'IBM864'; - - case '865': - case 'cp865': - case 'csibm865': - case 'ibm865': - return 'IBM865'; - - case '866': - case 'cp866': - case 'csibm866': - case 'ibm866': - return 'IBM866'; - - case 'cp868': - case 'cpar': - case 'csibm868': - case 'ibm868': - return 'IBM868'; - - case '869': - case 'cp869': - case 'cpgr': - case 'csibm869': - case 'ibm869': - return 'IBM869'; - - case 'cp870': - case 'csibm870': - case 'ebcdiccproece': - case 'ebcdiccpyu': - case 'ibm870': - return 'IBM870'; - - case 'cp871': - case 'csibm871': - case 'ebcdiccpis': - case 'ibm871': - return 'IBM871'; - - case 'cp880': - case 'csibm880': - case 'ebcdiccyrillic': - case 'ibm880': - return 'IBM880'; - - case 'cp891': - case 'csibm891': - case 'ibm891': - return 'IBM891'; - - case 'cp903': - case 'csibm903': - case 'ibm903': - return 'IBM903'; - - case '904': - case 'cp904': - case 'csibbm904': - case 'ibm904': - return 'IBM904'; - - case 'cp905': - case 'csibm905': - case 'ebcdiccptr': - case 'ibm905': - return 'IBM905'; - - case 'cp918': - case 'csibm918': - case 'ebcdiccpar2': - case 'ibm918': - return 'IBM918'; - - case 'ccsid924': - case 'cp924': - case 'ebcdiclatin9euro': - case 'ibm924': - return 'IBM00924'; - - case 'cp1026': - case 'csibm1026': - case 'ibm1026': - return 'IBM1026'; - - case 'ibm1047': - return 'IBM1047'; - - case 'ccsid1140': - case 'cp1140': - case 'ebcdicus37euro': - case 'ibm1140': - return 'IBM01140'; - - case 'ccsid1141': - case 'cp1141': - case 'ebcdicde273euro': - case 'ibm1141': - return 'IBM01141'; - - case 'ccsid1142': - case 'cp1142': - case 'ebcdicdk277euro': - case 'ebcdicno277euro': - case 'ibm1142': - return 'IBM01142'; - - case 'ccsid1143': - case 'cp1143': - case 'ebcdicfi278euro': - case 'ebcdicse278euro': - case 'ibm1143': - return 'IBM01143'; - - case 'ccsid1144': - case 'cp1144': - case 'ebcdicit280euro': - case 'ibm1144': - return 'IBM01144'; - - case 'ccsid1145': - case 'cp1145': - case 'ebcdices284euro': - case 'ibm1145': - return 'IBM01145'; - - case 'ccsid1146': - case 'cp1146': - case 'ebcdicgb285euro': - case 'ibm1146': - return 'IBM01146'; - - case 'ccsid1147': - case 'cp1147': - case 'ebcdicfr297euro': - case 'ibm1147': - return 'IBM01147'; - - case 'ccsid1148': - case 'cp1148': - case 'ebcdicinternational500euro': - case 'ibm1148': - return 'IBM01148'; - - case 'ccsid1149': - case 'cp1149': - case 'ebcdicis871euro': - case 'ibm1149': - return 'IBM01149'; - - case 'csiso143iecp271': - case 'iecp271': - case 'isoir143': - return 'IEC_P27-1'; - - case 'csiso49inis': - case 'inis': - case 'isoir49': - return 'INIS'; - - case 'csiso50inis8': - case 'inis8': - case 'isoir50': - return 'INIS-8'; - - case 'csiso51iniscyrillic': - case 'iniscyrillic': - case 'isoir51': - return 'INIS-cyrillic'; - - case 'csinvariant': - case 'invariant': - return 'INVARIANT'; - - case 'iso2022cn': - return 'ISO-2022-CN'; - - case 'iso2022cnext': - return 'ISO-2022-CN-EXT'; - - case 'csiso2022jp': - case 'iso2022jp': - return 'ISO-2022-JP'; - - case 'csiso2022jp2': - case 'iso2022jp2': - return 'ISO-2022-JP-2'; - - case 'csiso2022kr': - case 'iso2022kr': - return 'ISO-2022-KR'; - - case 'cswindows30latin1': - case 'iso88591windows30latin1': - return 'ISO-8859-1-Windows-3.0-Latin-1'; - - case 'cswindows31latin1': - case 'iso88591windows31latin1': - return 'ISO-8859-1-Windows-3.1-Latin-1'; - - case 'csisolatin2': - case 'iso88592': - case 'iso885921987': - case 'isoir101': - case 'l2': - case 'latin2': - return 'ISO-8859-2'; - - case 'cswindows31latin2': - case 'iso88592windowslatin2': - return 'ISO-8859-2-Windows-Latin-2'; - - case 'csisolatin3': - case 'iso88593': - case 'iso885931988': - case 'isoir109': - case 'l3': - case 'latin3': - return 'ISO-8859-3'; - - case 'csisolatin4': - case 'iso88594': - case 'iso885941988': - case 'isoir110': - case 'l4': - case 'latin4': - return 'ISO-8859-4'; - - case 'csisolatincyrillic': - case 'cyrillic': - case 'iso88595': - case 'iso885951988': - case 'isoir144': - return 'ISO-8859-5'; - - case 'arabic': - case 'asmo708': - case 'csisolatinarabic': - case 'ecma114': - case 'iso88596': - case 'iso885961987': - case 'isoir127': - return 'ISO-8859-6'; - - case 'csiso88596e': - case 'iso88596e': - return 'ISO-8859-6-E'; - - case 'csiso88596i': - case 'iso88596i': - return 'ISO-8859-6-I'; - - case 'csisolatingreek': - case 'ecma118': - case 'elot928': - case 'greek': - case 'greek8': - case 'iso88597': - case 'iso885971987': - case 'isoir126': - return 'ISO-8859-7'; - - case 'csisolatinhebrew': - case 'hebrew': - case 'iso88598': - case 'iso885981988': - case 'isoir138': - return 'ISO-8859-8'; - - case 'csiso88598e': - case 'iso88598e': - return 'ISO-8859-8-E'; - - case 'csiso88598i': - case 'iso88598i': - return 'ISO-8859-8-I'; - - case 'cswindows31latin5': - case 'iso88599windowslatin5': - return 'ISO-8859-9-Windows-Latin-5'; - - case 'csisolatin6': - case 'iso885910': - case 'iso8859101992': - case 'isoir157': - case 'l6': - case 'latin6': - return 'ISO-8859-10'; - - case 'iso885913': - return 'ISO-8859-13'; - - case 'iso885914': - case 'iso8859141998': - case 'isoceltic': - case 'isoir199': - case 'l8': - case 'latin8': - return 'ISO-8859-14'; - - case 'iso885915': - case 'latin9': - return 'ISO-8859-15'; - - case 'iso885916': - case 'iso8859162001': - case 'isoir226': - case 'l10': - case 'latin10': - return 'ISO-8859-16'; - - case 'iso10646j1': - return 'ISO-10646-J-1'; - - case 'csunicode': - case 'iso10646ucs2': - return 'ISO-10646-UCS-2'; - - case 'csucs4': - case 'iso10646ucs4': - return 'ISO-10646-UCS-4'; - - case 'csunicodeascii': - case 'iso10646ucsbasic': - return 'ISO-10646-UCS-Basic'; - - case 'csunicodelatin1': - case 'iso10646': - case 'iso10646unicodelatin1': - return 'ISO-10646-Unicode-Latin1'; - - case 'csiso10646utf1': - case 'iso10646utf1': - return 'ISO-10646-UTF-1'; - - case 'csiso115481': - case 'iso115481': - case 'isotr115481': - return 'ISO-11548-1'; - - case 'csiso90': - case 'isoir90': - return 'iso-ir-90'; - - case 'csunicodeibm1261': - case 'isounicodeibm1261': - return 'ISO-Unicode-IBM-1261'; - - case 'csunicodeibm1264': - case 'isounicodeibm1264': - return 'ISO-Unicode-IBM-1264'; - - case 'csunicodeibm1265': - case 'isounicodeibm1265': - return 'ISO-Unicode-IBM-1265'; - - case 'csunicodeibm1268': - case 'isounicodeibm1268': - return 'ISO-Unicode-IBM-1268'; - - case 'csunicodeibm1276': - case 'isounicodeibm1276': - return 'ISO-Unicode-IBM-1276'; - - case 'csiso646basic1983': - case 'iso646basic1983': - case 'ref': - return 'ISO_646.basic:1983'; - - case 'csiso2intlrefversion': - case 'irv': - case 'iso646irv1983': - case 'isoir2': - return 'ISO_646.irv:1983'; - - case 'csiso2033': - case 'e13b': - case 'iso20331983': - case 'isoir98': - return 'ISO_2033-1983'; - - case 'csiso5427cyrillic': - case 'iso5427': - case 'isoir37': - return 'ISO_5427'; - - case 'iso5427cyrillic1981': - case 'iso54271981': - case 'isoir54': - return 'ISO_5427:1981'; - - case 'csiso5428greek': - case 'iso54281980': - case 'isoir55': - return 'ISO_5428:1980'; - - case 'csiso6937add': - case 'iso6937225': - case 'isoir152': - return 'ISO_6937-2-25'; - - case 'csisotextcomm': - case 'iso69372add': - case 'isoir142': - return 'ISO_6937-2-add'; - - case 'csiso8859supp': - case 'iso8859supp': - case 'isoir154': - case 'latin125': - return 'ISO_8859-supp'; - - case 'csiso10367box': - case 'iso10367box': - case 'isoir155': - return 'ISO_10367-box'; - - case 'csiso15italian': - case 'iso646it': - case 'isoir15': - case 'it': - return 'IT'; - - case 'csiso13jisc6220jp': - case 'isoir13': - case 'jisc62201969': - case 'jisc62201969jp': - case 'katakana': - case 'x2017': - return 'JIS_C6220-1969-jp'; - - case 'csiso14jisc6220ro': - case 'iso646jp': - case 'isoir14': - case 'jisc62201969ro': - case 'jp': - return 'JIS_C6220-1969-ro'; - - case 'csiso42jisc62261978': - case 'isoir42': - case 'jisc62261978': - return 'JIS_C6226-1978'; - - case 'csiso87jisx208': - case 'isoir87': - case 'jisc62261983': - case 'jisx2081983': - case 'x208': - return 'JIS_C6226-1983'; - - case 'csiso91jisc62291984a': - case 'isoir91': - case 'jisc62291984a': - case 'jpocra': - return 'JIS_C6229-1984-a'; - - case 'csiso92jisc62991984b': - case 'iso646jpocrb': - case 'isoir92': - case 'jisc62291984b': - case 'jpocrb': - return 'JIS_C6229-1984-b'; - - case 'csiso93jis62291984badd': - case 'isoir93': - case 'jisc62291984badd': - case 'jpocrbadd': - return 'JIS_C6229-1984-b-add'; - - case 'csiso94jis62291984hand': - case 'isoir94': - case 'jisc62291984hand': - case 'jpocrhand': - return 'JIS_C6229-1984-hand'; - - case 'csiso95jis62291984handadd': - case 'isoir95': - case 'jisc62291984handadd': - case 'jpocrhandadd': - return 'JIS_C6229-1984-hand-add'; - - case 'csiso96jisc62291984kana': - case 'isoir96': - case 'jisc62291984kana': - return 'JIS_C6229-1984-kana'; - - case 'csjisencoding': - case 'jisencoding': - return 'JIS_Encoding'; - - case 'cshalfwidthkatakana': - case 'jisx201': - case 'x201': - return 'JIS_X0201'; - - case 'csiso159jisx2121990': - case 'isoir159': - case 'jisx2121990': - case 'x212': - return 'JIS_X0212-1990'; - - case 'csiso141jusib1002': - case 'iso646yu': - case 'isoir141': - case 'js': - case 'jusib1002': - case 'yu': - return 'JUS_I.B1.002'; - - case 'csiso147macedonian': - case 'isoir147': - case 'jusib1003mac': - case 'macedonian': - return 'JUS_I.B1.003-mac'; - - case 'csiso146serbian': - case 'isoir146': - case 'jusib1003serb': - case 'serbian': - return 'JUS_I.B1.003-serb'; - - case 'koi7switched': - return 'KOI7-switched'; - - case 'cskoi8r': - case 'koi8r': - return 'KOI8-R'; - - case 'koi8u': - return 'KOI8-U'; - - case 'csksc5636': - case 'iso646kr': - case 'ksc5636': - return 'KSC5636'; - - case 'cskz1048': - case 'kz1048': - case 'rk1048': - case 'strk10482002': - return 'KZ-1048'; - - case 'csiso19latingreek': - case 'isoir19': - case 'latingreek': - return 'latin-greek'; - - case 'csiso27latingreek1': - case 'isoir27': - case 'latingreek1': - return 'Latin-greek-1'; - - case 'csiso158lap': - case 'isoir158': - case 'lap': - case 'latinlap': - return 'latin-lap'; - - case 'csmacintosh': - case 'mac': - case 'macintosh': - return 'macintosh'; - - case 'csmicrosoftpublishing': - case 'microsoftpublishing': - return 'Microsoft-Publishing'; - - case 'csmnem': - case 'mnem': - return 'MNEM'; - - case 'csmnemonic': - case 'mnemonic': - return 'MNEMONIC'; - - case 'csiso86hungarian': - case 'hu': - case 'iso646hu': - case 'isoir86': - case 'msz77953': - return 'MSZ_7795.3'; - - case 'csnatsdano': - case 'isoir91': - case 'natsdano': - return 'NATS-DANO'; - - case 'csnatsdanoadd': - case 'isoir92': - case 'natsdanoadd': - return 'NATS-DANO-ADD'; - - case 'csnatssefi': - case 'isoir81': - case 'natssefi': - return 'NATS-SEFI'; - - case 'csnatssefiadd': - case 'isoir82': - case 'natssefiadd': - return 'NATS-SEFI-ADD'; - - case 'csiso151cuba': - case 'cuba': - case 'iso646cu': - case 'isoir151': - case 'ncnc1081': - return 'NC_NC00-10:81'; - - case 'csiso69french': - case 'fr': - case 'iso646fr': - case 'isoir69': - case 'nfz62010': - return 'NF_Z_62-010'; - - case 'csiso25french': - case 'iso646fr1': - case 'isoir25': - case 'nfz620101973': - return 'NF_Z_62-010_(1973)'; - - case 'csiso60danishnorwegian': - case 'csiso60norwegian1': - case 'iso646no': - case 'isoir60': - case 'no': - case 'ns45511': - return 'NS_4551-1'; - - case 'csiso61norwegian2': - case 'iso646no2': - case 'isoir61': - case 'no2': - case 'ns45512': - return 'NS_4551-2'; - - case 'osdebcdicdf3irv': - return 'OSD_EBCDIC_DF03_IRV'; - - case 'osdebcdicdf41': - return 'OSD_EBCDIC_DF04_1'; - - case 'osdebcdicdf415': - return 'OSD_EBCDIC_DF04_15'; - - case 'cspc8danishnorwegian': - case 'pc8danishnorwegian': - return 'PC8-Danish-Norwegian'; - - case 'cspc8turkish': - case 'pc8turkish': - return 'PC8-Turkish'; - - case 'csiso16portuguese': - case 'iso646pt': - case 'isoir16': - case 'pt': - return 'PT'; - - case 'csiso84portuguese2': - case 'iso646pt2': - case 'isoir84': - case 'pt2': - return 'PT2'; - - case 'cp154': - case 'csptcp154': - case 'cyrillicasian': - case 'pt154': - case 'ptcp154': - return 'PTCP154'; - - case 'scsu': - return 'SCSU'; - - case 'csiso10swedish': - case 'fi': - case 'iso646fi': - case 'iso646se': - case 'isoir10': - case 'se': - case 'sen850200b': - return 'SEN_850200_B'; - - case 'csiso11swedishfornames': - case 'iso646se2': - case 'isoir11': - case 'se2': - case 'sen850200c': - return 'SEN_850200_C'; - - case 'csiso102t617bit': - case 'isoir102': - case 't617bit': - return 'T.61-7bit'; - - case 'csiso103t618bit': - case 'isoir103': - case 't61': - case 't618bit': - return 'T.61-8bit'; - - case 'csiso128t101g2': - case 'isoir128': - case 't101g2': - return 'T.101-G2'; - - case 'cstscii': - case 'tscii': - return 'TSCII'; - - case 'csunicode11': - case 'unicode11': - return 'UNICODE-1-1'; - - case 'csunicode11utf7': - case 'unicode11utf7': - return 'UNICODE-1-1-UTF-7'; - - case 'csunknown8bit': - case 'unknown8bit': - return 'UNKNOWN-8BIT'; - - case 'ansix341968': - case 'ansix341986': - case 'ascii': - case 'cp367': - case 'csascii': - case 'ibm367': - case 'iso646irv1991': - case 'iso646us': - case 'isoir6': - case 'us': - case 'usascii': - return 'US-ASCII'; - - case 'csusdk': - case 'usdk': - return 'us-dk'; - - case 'utf7': - return 'UTF-7'; - - case 'utf8': - return 'UTF-8'; - - case 'utf16': - return 'UTF-16'; - - case 'utf16be': - return 'UTF-16BE'; - - case 'utf16le': - return 'UTF-16LE'; - - case 'utf32': - return 'UTF-32'; - - case 'utf32be': - return 'UTF-32BE'; - - case 'utf32le': - return 'UTF-32LE'; - - case 'csventurainternational': - case 'venturainternational': - return 'Ventura-International'; - - case 'csventuramath': - case 'venturamath': - return 'Ventura-Math'; - - case 'csventuraus': - case 'venturaus': - return 'Ventura-US'; - - case 'csiso70videotexsupp1': - case 'isoir70': - case 'videotexsuppl': - return 'videotex-suppl'; - - case 'csviqr': - case 'viqr': - return 'VIQR'; - - case 'csviscii': - case 'viscii': - return 'VISCII'; - - case 'csshiftjis': - case 'cswindows31j': - case 'mskanji': - case 'shiftjis': - case 'windows31j': - return 'Windows-31J'; - - case 'iso885911': - case 'tis620': - return 'windows-874'; - - case 'cseuckr': - case 'csksc56011987': - case 'euckr': - case 'isoir149': - case 'korean': - case 'ksc5601': - case 'ksc56011987': - case 'ksc56011989': - case 'windows949': - return 'windows-949'; - - case 'windows1250': - return 'windows-1250'; - - case 'windows1251': - return 'windows-1251'; - - case 'cp819': - case 'csisolatin1': - case 'ibm819': - case 'iso88591': - case 'iso885911987': - case 'isoir100': - case 'l1': - case 'latin1': - case 'windows1252': - return 'windows-1252'; - - case 'windows1253': - return 'windows-1253'; - - case 'csisolatin5': - case 'iso88599': - case 'iso885991989': - case 'isoir148': - case 'l5': - case 'latin5': - case 'windows1254': - return 'windows-1254'; - - case 'windows1255': - return 'windows-1255'; - - case 'windows1256': - return 'windows-1256'; - - case 'windows1257': - return 'windows-1257'; - - case 'windows1258': - return 'windows-1258'; - - default: - return $charset; - } - } - - public static function get_curl_version() - { - if (is_array($curl = curl_version())) - { - $curl = $curl['version']; - } - elseif (substr($curl, 0, 5) === 'curl/') - { - $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5)); - } - elseif (substr($curl, 0, 8) === 'libcurl/') - { - $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8)); - } - else - { - $curl = 0; - } - return $curl; - } - - /** - * Strip HTML comments - * - * @param string $data Data to strip comments from - * @return string Comment stripped string - */ - public static function strip_comments($data) - { - $output = ''; - while (($start = strpos($data, '<!--')) !== false) - { - $output .= substr($data, 0, $start); - if (($end = strpos($data, '-->', $start)) !== false) - { - $data = substr_replace($data, '', 0, $end + 3); - } - else - { - $data = ''; - } - } - return $output . $data; - } - - public static function parse_date($dt) - { - $parser = SimplePie_Parse_Date::get(); - return $parser->parse($dt); - } - - /** - * Decode HTML entities - * - * @deprecated Use DOMDocument instead - * @param string $data Input data - * @return string Output data - */ - public static function entities_decode($data) - { - $decoder = new SimplePie_Decode_HTML_Entities($data); - return $decoder->parse(); - } - - /** - * Remove RFC822 comments - * - * @param string $data Data to strip comments from - * @return string Comment stripped string - */ - public static function uncomment_rfc822($string) - { - $string = (string) $string; - $position = 0; - $length = strlen($string); - $depth = 0; - - $output = ''; - - while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) - { - $output .= substr($string, $position, $pos - $position); - $position = $pos + 1; - if ($string[$pos - 1] !== '\\') - { - $depth++; - while ($depth && $position < $length) - { - $position += strcspn($string, '()', $position); - if ($string[$position - 1] === '\\') - { - $position++; - continue; - } - elseif (isset($string[$position])) - { - switch ($string[$position]) - { - case '(': - $depth++; - break; - - case ')': - $depth--; - break; - } - $position++; - } - else - { - break; - } - } - } - else - { - $output .= '('; - } - } - $output .= substr($string, $position); - - return $output; - } - - public static function parse_mime($mime) - { - if (($pos = strpos($mime, ';')) === false) - { - return trim($mime); - } - else - { - return trim(substr($mime, 0, $pos)); - } - } - - public static function atom_03_construct_type($attribs) - { - if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) === 'base64')) - { - $mode = SIMPLEPIE_CONSTRUCT_BASE64; - } - else - { - $mode = SIMPLEPIE_CONSTRUCT_NONE; - } - if (isset($attribs['']['type'])) - { - switch (strtolower(trim($attribs['']['type']))) - { - case 'text': - case 'text/plain': - return SIMPLEPIE_CONSTRUCT_TEXT | $mode; - - case 'html': - case 'text/html': - return SIMPLEPIE_CONSTRUCT_HTML | $mode; - - case 'xhtml': - case 'application/xhtml+xml': - return SIMPLEPIE_CONSTRUCT_XHTML | $mode; - - default: - return SIMPLEPIE_CONSTRUCT_NONE | $mode; - } - } - else - { - return SIMPLEPIE_CONSTRUCT_TEXT | $mode; - } - } - - public static function atom_10_construct_type($attribs) - { - if (isset($attribs['']['type'])) - { - switch (strtolower(trim($attribs['']['type']))) - { - case 'text': - return SIMPLEPIE_CONSTRUCT_TEXT; - - case 'html': - return SIMPLEPIE_CONSTRUCT_HTML; - - case 'xhtml': - return SIMPLEPIE_CONSTRUCT_XHTML; - - default: - return SIMPLEPIE_CONSTRUCT_NONE; - } - } - return SIMPLEPIE_CONSTRUCT_TEXT; - } - - public static function atom_10_content_construct_type($attribs) - { - if (isset($attribs['']['type'])) - { - $type = strtolower(trim($attribs['']['type'])); - switch ($type) - { - case 'text': - return SIMPLEPIE_CONSTRUCT_TEXT; - - case 'html': - return SIMPLEPIE_CONSTRUCT_HTML; - - case 'xhtml': - return SIMPLEPIE_CONSTRUCT_XHTML; - } - if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) === 'text/') - { - return SIMPLEPIE_CONSTRUCT_NONE; - } - else - { - return SIMPLEPIE_CONSTRUCT_BASE64; - } - } - else - { - return SIMPLEPIE_CONSTRUCT_TEXT; - } - } - - public static function is_isegment_nz_nc($string) - { - return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string); - } - - public static function space_seperated_tokens($string) - { - $space_characters = "\x20\x09\x0A\x0B\x0C\x0D"; - $string_length = strlen($string); - - $position = strspn($string, $space_characters); - $tokens = array(); - - while ($position < $string_length) - { - $len = strcspn($string, $space_characters, $position); - $tokens[] = substr($string, $position, $len); - $position += $len; - $position += strspn($string, $space_characters, $position); - } - - return $tokens; - } - - /** - * Converts a unicode codepoint to a UTF-8 character - * - * @static - * @param int $codepoint Unicode codepoint - * @return string UTF-8 character - */ - public static function codepoint_to_utf8($codepoint) - { - $codepoint = (int) $codepoint; - if ($codepoint < 0) - { - return false; - } - else if ($codepoint <= 0x7f) - { - return chr($codepoint); - } - else if ($codepoint <= 0x7ff) - { - return chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f)); - } - else if ($codepoint <= 0xffff) - { - return chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); - } - else if ($codepoint <= 0x10ffff) - { - return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); - } - else - { - // U+FFFD REPLACEMENT CHARACTER - return "\xEF\xBF\xBD"; - } - } - - /** - * Similar to parse_str() - * - * Returns an associative array of name/value pairs, where the value is an - * array of values that have used the same name - * - * @static - * @param string $str The input string. - * @return array - */ - public static function parse_str($str) - { - $return = array(); - $str = explode('&', $str); - - foreach ($str as $section) - { - if (strpos($section, '=') !== false) - { - list($name, $value) = explode('=', $section, 2); - $return[urldecode($name)][] = urldecode($value); - } - else - { - $return[urldecode($section)][] = null; - } - } - - return $return; - } - - /** - * Detect XML encoding, as per XML 1.0 Appendix F.1 - * - * @todo Add support for EBCDIC - * @param string $data XML data - * @param SimplePie_Registry $registry Class registry - * @return array Possible encodings - */ - public static function xml_encoding($data, $registry) - { - // UTF-32 Big Endian BOM - if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") - { - $encoding[] = 'UTF-32BE'; - } - // UTF-32 Little Endian BOM - elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") - { - $encoding[] = 'UTF-32LE'; - } - // UTF-16 Big Endian BOM - elseif (substr($data, 0, 2) === "\xFE\xFF") - { - $encoding[] = 'UTF-16BE'; - } - // UTF-16 Little Endian BOM - elseif (substr($data, 0, 2) === "\xFF\xFE") - { - $encoding[] = 'UTF-16LE'; - } - // UTF-8 BOM - elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") - { - $encoding[] = 'UTF-8'; - } - // UTF-32 Big Endian Without BOM - elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") - { - if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) - { - $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8'))); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-32BE'; - } - // UTF-32 Little Endian Without BOM - elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") - { - if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) - { - $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8'))); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-32LE'; - } - // UTF-16 Big Endian Without BOM - elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") - { - if ($pos = strpos($data, "\x00\x3F\x00\x3E")) - { - $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8'))); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-16BE'; - } - // UTF-16 Little Endian Without BOM - elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") - { - if ($pos = strpos($data, "\x3F\x00\x3E\x00")) - { - $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8'))); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-16LE'; - } - // US-ASCII (or superset) - elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") - { - if ($pos = strpos($data, "\x3F\x3E")) - { - $parser = $registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5))); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-8'; - } - // Fallback to UTF-8 - else - { - $encoding[] = 'UTF-8'; - } - return $encoding; - } - - public static function output_javascript() - { - if (function_exists('ob_gzhandler')) - { - ob_start('ob_gzhandler'); - } - header('Content-type: text/javascript; charset: UTF-8'); - header('Cache-Control: must-revalidate'); - header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days - ?> -function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) { - if (placeholder != '') { - document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); - } - else { - document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); - } -} - -function embed_flash(bgcolor, width, height, link, loop, type) { - document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>'); -} - -function embed_flv(width, height, link, placeholder, loop, player) { - document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>'); -} - -function embed_wmedia(width, height, link) { - document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>'); -} - <?php - } - - /** - * Get the SimplePie build timestamp - * - * Uses the git index if it exists, otherwise uses the modification time - * of the newest file. - */ - public static function get_build() - { - $root = dirname(dirname(__FILE__)); - if (file_exists($root . '/.git/index')) - { - return filemtime($root . '/.git/index'); - } - elseif (file_exists($root . '/SimplePie')) - { - $time = 0; - foreach (glob($root . '/SimplePie/*.php') as $file) - { - if (($mtime = filemtime($file)) > $time) - { - $time = $mtime; - } - } - return $time; - } - elseif (file_exists(dirname(__FILE__) . '/Core.php')) - { - return filemtime(dirname(__FILE__) . '/Core.php'); - } - else - { - return filemtime(__FILE__); - } - } - - /** - * Format debugging information - */ - public static function debug(&$sp) - { - $info = 'SimplePie ' . SIMPLEPIE_VERSION . ' Build ' . SIMPLEPIE_BUILD . "\n"; - $info .= 'PHP ' . PHP_VERSION . "\n"; - if ($sp->error() !== null) - { - $info .= 'Error occurred: ' . $sp->error() . "\n"; - } - else - { - $info .= "No error found.\n"; - } - $info .= "Extensions:\n"; - $extensions = array('pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml'); - foreach ($extensions as $ext) - { - if (extension_loaded($ext)) - { - $info .= " $ext loaded\n"; - switch ($ext) - { - case 'pcre': - $info .= ' Version ' . PCRE_VERSION . "\n"; - break; - case 'curl': - $version = curl_version(); - $info .= ' Version ' . $version['version'] . "\n"; - break; - case 'mbstring': - $info .= ' Overloading: ' . mb_get_info('func_overload') . "\n"; - break; - case 'iconv': - $info .= ' Version ' . ICONV_VERSION . "\n"; - break; - case 'xml': - $info .= ' Version ' . LIBXML_DOTTED_VERSION . "\n"; - break; - } - } - else - { - $info .= " $ext not loaded\n"; - } - } - return $info; - } - - public static function silence_errors($num, $str) - { - // No-op - } -} - -/** - * Class to validate and to work with IPv6 addresses. - * - * @package SimplePie - * @subpackage HTTP - * @copyright 2003-2005 The PHP Group - * @license http://www.opensource.org/licenses/bsd-license.php - * @link http://pear.php.net/package/Net_IPv6 - * @author Alexander Merz <alexander.merz@web.de> - * @author elfrink at introweb dot nl - * @author Josh Peck <jmp at joshpeck dot org> - * @author Geoffrey Sneddon <geoffers@gmail.com> - */ -class SimplePie_Net_IPv6 -{ - /** - * Uncompresses an IPv6 address - * - * RFC 4291 allows you to compress concecutive zero pieces in an address to - * '::'. This method expects a valid IPv6 address and expands the '::' to - * the required number of zero pieces. - * - * Example: FF01::101 -> FF01:0:0:0:0:0:0:101 - * ::1 -> 0:0:0:0:0:0:0:1 - * - * @author Alexander Merz <alexander.merz@web.de> - * @author elfrink at introweb dot nl - * @author Josh Peck <jmp at joshpeck dot org> - * @copyright 2003-2005 The PHP Group - * @license http://www.opensource.org/licenses/bsd-license.php - * @param string $ip An IPv6 address - * @return string The uncompressed IPv6 address - */ - public static function uncompress($ip) - { - $c1 = -1; - $c2 = -1; - if (substr_count($ip, '::') === 1) - { - list($ip1, $ip2) = explode('::', $ip); - if ($ip1 === '') - { - $c1 = -1; - } - else - { - $c1 = substr_count($ip1, ':'); - } - if ($ip2 === '') - { - $c2 = -1; - } - else - { - $c2 = substr_count($ip2, ':'); - } - if (strpos($ip2, '.') !== false) - { - $c2++; - } - // :: - if ($c1 === -1 && $c2 === -1) - { - $ip = '0:0:0:0:0:0:0:0'; - } - // ::xxx - else if ($c1 === -1) - { - $fill = str_repeat('0:', 7 - $c2); - $ip = str_replace('::', $fill, $ip); - } - // xxx:: - else if ($c2 === -1) - { - $fill = str_repeat(':0', 7 - $c1); - $ip = str_replace('::', $fill, $ip); - } - // xxx::xxx - else - { - $fill = ':' . str_repeat('0:', 6 - $c2 - $c1); - $ip = str_replace('::', $fill, $ip); - } - } - return $ip; - } - - /** - * Compresses an IPv6 address - * - * RFC 4291 allows you to compress concecutive zero pieces in an address to - * '::'. This method expects a valid IPv6 address and compresses consecutive - * zero pieces to '::'. - * - * Example: FF01:0:0:0:0:0:0:101 -> FF01::101 - * 0:0:0:0:0:0:0:1 -> ::1 - * - * @see uncompress() - * @param string $ip An IPv6 address - * @return string The compressed IPv6 address - */ - public static function compress($ip) - { - // Prepare the IP to be compressed - $ip = self::uncompress($ip); - $ip_parts = self::split_v6_v4($ip); - - // Replace all leading zeros - $ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]); - - // Find bunches of zeros - if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE)) - { - $max = 0; - $pos = null; - foreach ($matches[0] as $match) - { - if (strlen($match[0]) > $max) - { - $max = strlen($match[0]); - $pos = $match[1]; - } - } - - $ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max); - } - - if ($ip_parts[1] !== '') - { - return implode(':', $ip_parts); - } - else - { - return $ip_parts[0]; - } - } - - /** - * Splits an IPv6 address into the IPv6 and IPv4 representation parts - * - * RFC 4291 allows you to represent the last two parts of an IPv6 address - * using the standard IPv4 representation - * - * Example: 0:0:0:0:0:0:13.1.68.3 - * 0:0:0:0:0:FFFF:129.144.52.38 - * - * @param string $ip An IPv6 address - * @return array [0] contains the IPv6 represented part, and [1] the IPv4 represented part - */ - private static function split_v6_v4($ip) - { - if (strpos($ip, '.') !== false) - { - $pos = strrpos($ip, ':'); - $ipv6_part = substr($ip, 0, $pos); - $ipv4_part = substr($ip, $pos + 1); - return array($ipv6_part, $ipv4_part); - } - else - { - return array($ip, ''); - } - } - - /** - * Checks an IPv6 address - * - * Checks if the given IP is a valid IPv6 address - * - * @param string $ip An IPv6 address - * @return bool true if $ip is a valid IPv6 address - */ - public static function check_ipv6($ip) - { - $ip = self::uncompress($ip); - list($ipv6, $ipv4) = self::split_v6_v4($ip); - $ipv6 = explode(':', $ipv6); - $ipv4 = explode('.', $ipv4); - if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) - { - foreach ($ipv6 as $ipv6_part) - { - // The section can't be empty - if ($ipv6_part === '') - return false; - - // Nor can it be over four characters - if (strlen($ipv6_part) > 4) - return false; - - // Remove leading zeros (this is safe because of the above) - $ipv6_part = ltrim($ipv6_part, '0'); - if ($ipv6_part === '') - $ipv6_part = '0'; - - // Check the value is valid - $value = hexdec($ipv6_part); - if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF) - return false; - } - if (count($ipv4) === 4) - { - foreach ($ipv4 as $ipv4_part) - { - $value = (int) $ipv4_part; - if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF) - return false; - } - } - return true; - } - else - { - return false; - } - } - - /** - * Checks if the given IP is a valid IPv6 address - * - * @codeCoverageIgnore - * @deprecated Use {@see SimplePie_Net_IPv6::check_ipv6()} instead - * @see check_ipv6 - * @param string $ip An IPv6 address - * @return bool true if $ip is a valid IPv6 address - */ - public static function checkIPv6($ip) - { - return self::check_ipv6($ip); - } -} - -/** - * Date Parser - * - * @package SimplePie - * @subpackage Parsing - */ -class SimplePie_Parse_Date -{ - /** - * Input data - * - * @access protected - * @var string - */ - var $date; - - /** - * List of days, calendar day name => ordinal day number in the week - * - * @access protected - * @var array - */ - var $day = array( - // English - 'mon' => 1, - 'monday' => 1, - 'tue' => 2, - 'tuesday' => 2, - 'wed' => 3, - 'wednesday' => 3, - 'thu' => 4, - 'thursday' => 4, - 'fri' => 5, - 'friday' => 5, - 'sat' => 6, - 'saturday' => 6, - 'sun' => 7, - 'sunday' => 7, - // Dutch - 'maandag' => 1, - 'dinsdag' => 2, - 'woensdag' => 3, - 'donderdag' => 4, - 'vrijdag' => 5, - 'zaterdag' => 6, - 'zondag' => 7, - // French - 'lundi' => 1, - 'mardi' => 2, - 'mercredi' => 3, - 'jeudi' => 4, - 'vendredi' => 5, - 'samedi' => 6, - 'dimanche' => 7, - // German - 'montag' => 1, - 'dienstag' => 2, - 'mittwoch' => 3, - 'donnerstag' => 4, - 'freitag' => 5, - 'samstag' => 6, - 'sonnabend' => 6, - 'sonntag' => 7, - // Italian - 'lunedì' => 1, - 'martedì' => 2, - 'mercoledì' => 3, - 'giovedì' => 4, - 'venerdì' => 5, - 'sabato' => 6, - 'domenica' => 7, - // Spanish - 'lunes' => 1, - 'martes' => 2, - 'miércoles' => 3, - 'jueves' => 4, - 'viernes' => 5, - 'sábado' => 6, - 'domingo' => 7, - // Finnish - 'maanantai' => 1, - 'tiistai' => 2, - 'keskiviikko' => 3, - 'torstai' => 4, - 'perjantai' => 5, - 'lauantai' => 6, - 'sunnuntai' => 7, - // Hungarian - 'hétfÅ‘' => 1, - 'kedd' => 2, - 'szerda' => 3, - 'csütörtok' => 4, - 'péntek' => 5, - 'szombat' => 6, - 'vasárnap' => 7, - // Greek - 'Δευ' => 1, - 'ΤÏι' => 2, - 'Τετ' => 3, - 'Πεμ' => 4, - 'ΠαÏ' => 5, - 'Σαβ' => 6, - 'ΚυÏ' => 7, - ); - - /** - * List of months, calendar month name => calendar month number - * - * @access protected - * @var array - */ - var $month = array( - // English - 'jan' => 1, - 'january' => 1, - 'feb' => 2, - 'february' => 2, - 'mar' => 3, - 'march' => 3, - 'apr' => 4, - 'april' => 4, - 'may' => 5, - // No long form of May - 'jun' => 6, - 'june' => 6, - 'jul' => 7, - 'july' => 7, - 'aug' => 8, - 'august' => 8, - 'sep' => 9, - 'september' => 8, - 'oct' => 10, - 'october' => 10, - 'nov' => 11, - 'november' => 11, - 'dec' => 12, - 'december' => 12, - // Dutch - 'januari' => 1, - 'februari' => 2, - 'maart' => 3, - 'april' => 4, - 'mei' => 5, - 'juni' => 6, - 'juli' => 7, - 'augustus' => 8, - 'september' => 9, - 'oktober' => 10, - 'november' => 11, - 'december' => 12, - // French - 'janvier' => 1, - 'février' => 2, - 'mars' => 3, - 'avril' => 4, - 'mai' => 5, - 'juin' => 6, - 'juillet' => 7, - 'août' => 8, - 'septembre' => 9, - 'octobre' => 10, - 'novembre' => 11, - 'décembre' => 12, - // German - 'januar' => 1, - 'februar' => 2, - 'märz' => 3, - 'april' => 4, - 'mai' => 5, - 'juni' => 6, - 'juli' => 7, - 'august' => 8, - 'september' => 9, - 'oktober' => 10, - 'november' => 11, - 'dezember' => 12, - // Italian - 'gennaio' => 1, - 'febbraio' => 2, - 'marzo' => 3, - 'aprile' => 4, - 'maggio' => 5, - 'giugno' => 6, - 'luglio' => 7, - 'agosto' => 8, - 'settembre' => 9, - 'ottobre' => 10, - 'novembre' => 11, - 'dicembre' => 12, - // Spanish - 'enero' => 1, - 'febrero' => 2, - 'marzo' => 3, - 'abril' => 4, - 'mayo' => 5, - 'junio' => 6, - 'julio' => 7, - 'agosto' => 8, - 'septiembre' => 9, - 'setiembre' => 9, - 'octubre' => 10, - 'noviembre' => 11, - 'diciembre' => 12, - // Finnish - 'tammikuu' => 1, - 'helmikuu' => 2, - 'maaliskuu' => 3, - 'huhtikuu' => 4, - 'toukokuu' => 5, - 'kesäkuu' => 6, - 'heinäkuu' => 7, - 'elokuu' => 8, - 'suuskuu' => 9, - 'lokakuu' => 10, - 'marras' => 11, - 'joulukuu' => 12, - // Hungarian - 'január' => 1, - 'február' => 2, - 'március' => 3, - 'április' => 4, - 'május' => 5, - 'június' => 6, - 'július' => 7, - 'augusztus' => 8, - 'szeptember' => 9, - 'október' => 10, - 'november' => 11, - 'december' => 12, - // Greek - 'Ιαν' => 1, - 'Φεβ' => 2, - 'Μάώ' => 3, - 'Μαώ' => 3, - 'ΑπÏ' => 4, - 'Μάι' => 5, - 'Μαϊ' => 5, - 'Μαι' => 5, - 'ΙοÏν' => 6, - 'Ιον' => 6, - 'ΙοÏλ' => 7, - 'Ιολ' => 7, - 'ΑÏγ' => 8, - 'Αυγ' => 8, - 'Σεπ' => 9, - 'Οκτ' => 10, - 'ÎοÎ' => 11, - 'Δεκ' => 12, - ); - - /** - * List of timezones, abbreviation => offset from UTC - * - * @access protected - * @var array - */ - var $timezone = array( - 'ACDT' => 37800, - 'ACIT' => 28800, - 'ACST' => 34200, - 'ACT' => -18000, - 'ACWDT' => 35100, - 'ACWST' => 31500, - 'AEDT' => 39600, - 'AEST' => 36000, - 'AFT' => 16200, - 'AKDT' => -28800, - 'AKST' => -32400, - 'AMDT' => 18000, - 'AMT' => -14400, - 'ANAST' => 46800, - 'ANAT' => 43200, - 'ART' => -10800, - 'AZOST' => -3600, - 'AZST' => 18000, - 'AZT' => 14400, - 'BIOT' => 21600, - 'BIT' => -43200, - 'BOT' => -14400, - 'BRST' => -7200, - 'BRT' => -10800, - 'BST' => 3600, - 'BTT' => 21600, - 'CAST' => 18000, - 'CAT' => 7200, - 'CCT' => 23400, - 'CDT' => -18000, - 'CEDT' => 7200, - 'CET' => 3600, - 'CGST' => -7200, - 'CGT' => -10800, - 'CHADT' => 49500, - 'CHAST' => 45900, - 'CIST' => -28800, - 'CKT' => -36000, - 'CLDT' => -10800, - 'CLST' => -14400, - 'COT' => -18000, - 'CST' => -21600, - 'CVT' => -3600, - 'CXT' => 25200, - 'DAVT' => 25200, - 'DTAT' => 36000, - 'EADT' => -18000, - 'EAST' => -21600, - 'EAT' => 10800, - 'ECT' => -18000, - 'EDT' => -14400, - 'EEST' => 10800, - 'EET' => 7200, - 'EGT' => -3600, - 'EKST' => 21600, - 'EST' => -18000, - 'FJT' => 43200, - 'FKDT' => -10800, - 'FKST' => -14400, - 'FNT' => -7200, - 'GALT' => -21600, - 'GEDT' => 14400, - 'GEST' => 10800, - 'GFT' => -10800, - 'GILT' => 43200, - 'GIT' => -32400, - 'GST' => 14400, - 'GST' => -7200, - 'GYT' => -14400, - 'HAA' => -10800, - 'HAC' => -18000, - 'HADT' => -32400, - 'HAE' => -14400, - 'HAP' => -25200, - 'HAR' => -21600, - 'HAST' => -36000, - 'HAT' => -9000, - 'HAY' => -28800, - 'HKST' => 28800, - 'HMT' => 18000, - 'HNA' => -14400, - 'HNC' => -21600, - 'HNE' => -18000, - 'HNP' => -28800, - 'HNR' => -25200, - 'HNT' => -12600, - 'HNY' => -32400, - 'IRDT' => 16200, - 'IRKST' => 32400, - 'IRKT' => 28800, - 'IRST' => 12600, - 'JFDT' => -10800, - 'JFST' => -14400, - 'JST' => 32400, - 'KGST' => 21600, - 'KGT' => 18000, - 'KOST' => 39600, - 'KOVST' => 28800, - 'KOVT' => 25200, - 'KRAST' => 28800, - 'KRAT' => 25200, - 'KST' => 32400, - 'LHDT' => 39600, - 'LHST' => 37800, - 'LINT' => 50400, - 'LKT' => 21600, - 'MAGST' => 43200, - 'MAGT' => 39600, - 'MAWT' => 21600, - 'MDT' => -21600, - 'MESZ' => 7200, - 'MEZ' => 3600, - 'MHT' => 43200, - 'MIT' => -34200, - 'MNST' => 32400, - 'MSDT' => 14400, - 'MSST' => 10800, - 'MST' => -25200, - 'MUT' => 14400, - 'MVT' => 18000, - 'MYT' => 28800, - 'NCT' => 39600, - 'NDT' => -9000, - 'NFT' => 41400, - 'NMIT' => 36000, - 'NOVST' => 25200, - 'NOVT' => 21600, - 'NPT' => 20700, - 'NRT' => 43200, - 'NST' => -12600, - 'NUT' => -39600, - 'NZDT' => 46800, - 'NZST' => 43200, - 'OMSST' => 25200, - 'OMST' => 21600, - 'PDT' => -25200, - 'PET' => -18000, - 'PETST' => 46800, - 'PETT' => 43200, - 'PGT' => 36000, - 'PHOT' => 46800, - 'PHT' => 28800, - 'PKT' => 18000, - 'PMDT' => -7200, - 'PMST' => -10800, - 'PONT' => 39600, - 'PST' => -28800, - 'PWT' => 32400, - 'PYST' => -10800, - 'PYT' => -14400, - 'RET' => 14400, - 'ROTT' => -10800, - 'SAMST' => 18000, - 'SAMT' => 14400, - 'SAST' => 7200, - 'SBT' => 39600, - 'SCDT' => 46800, - 'SCST' => 43200, - 'SCT' => 14400, - 'SEST' => 3600, - 'SGT' => 28800, - 'SIT' => 28800, - 'SRT' => -10800, - 'SST' => -39600, - 'SYST' => 10800, - 'SYT' => 7200, - 'TFT' => 18000, - 'THAT' => -36000, - 'TJT' => 18000, - 'TKT' => -36000, - 'TMT' => 18000, - 'TOT' => 46800, - 'TPT' => 32400, - 'TRUT' => 36000, - 'TVT' => 43200, - 'TWT' => 28800, - 'UYST' => -7200, - 'UYT' => -10800, - 'UZT' => 18000, - 'VET' => -14400, - 'VLAST' => 39600, - 'VLAT' => 36000, - 'VOST' => 21600, - 'VUT' => 39600, - 'WAST' => 7200, - 'WAT' => 3600, - 'WDT' => 32400, - 'WEST' => 3600, - 'WFT' => 43200, - 'WIB' => 25200, - 'WIT' => 32400, - 'WITA' => 28800, - 'WKST' => 18000, - 'WST' => 28800, - 'YAKST' => 36000, - 'YAKT' => 32400, - 'YAPT' => 36000, - 'YEKST' => 21600, - 'YEKT' => 18000, - ); - - /** - * Cached PCRE for SimplePie_Parse_Date::$day - * - * @access protected - * @var string - */ - var $day_pcre; - - /** - * Cached PCRE for SimplePie_Parse_Date::$month - * - * @access protected - * @var string - */ - var $month_pcre; - - /** - * Array of user-added callback methods - * - * @access private - * @var array - */ - var $built_in = array(); - - /** - * Array of user-added callback methods - * - * @access private - * @var array - */ - var $user = array(); - - /** - * Create new SimplePie_Parse_Date object, and set self::day_pcre, - * self::month_pcre, and self::built_in - * - * @access private - */ - public function __construct() - { - $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')'; - $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')'; - - static $cache; - if (!isset($cache[get_class($this)])) - { - $all_methods = get_class_methods($this); - - foreach ($all_methods as $method) - { - if (strtolower(substr($method, 0, 5)) === 'date_') - { - $cache[get_class($this)][] = $method; - } - } - } - - foreach ($cache[get_class($this)] as $method) - { - $this->built_in[] = $method; - } - } - - /** - * Get the object - * - * @access public - */ - public static function get() - { - static $object; - if (!$object) - { - $object = new SimplePie_Parse_Date; - } - return $object; - } - - /** - * Parse a date - * - * @final - * @access public - * @param string $date Date to parse - * @return int Timestamp corresponding to date string, or false on failure - */ - public function parse($date) - { - foreach ($this->user as $method) - { - if (($returned = call_user_func($method, $date)) !== false) - { - return $returned; - } - } - - foreach ($this->built_in as $method) - { - if (($returned = call_user_func(array($this, $method), $date)) !== false) - { - return $returned; - } - } - - return false; - } - - /** - * Add a callback method to parse a date - * - * @final - * @access public - * @param callback $callback - */ - public function add_callback($callback) - { - if (is_callable($callback)) - { - $this->user[] = $callback; - } - else - { - trigger_error('User-supplied function must be a valid callback', E_USER_WARNING); - } - } - - /** - * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as - * well as allowing any of upper or lower case "T", horizontal tabs, or - * spaces to be used as the time seperator (including more than one)) - * - * @access protected - * @return int Timestamp - */ - public function date_w3cdtf($date) - { - static $pcre; - if (!$pcre) - { - $year = '([0-9]{4})'; - $month = $day = $hour = $minute = $second = '([0-9]{2})'; - $decimal = '([0-9]*)'; - $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))'; - $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/'; - } - if (preg_match($pcre, $date, $match)) - { - /* - Capturing subpatterns: - 1: Year - 2: Month - 3: Day - 4: Hour - 5: Minute - 6: Second - 7: Decimal fraction of a second - 8: Zulu - 9: Timezone ± - 10: Timezone hours - 11: Timezone minutes - */ - - // Fill in empty matches - for ($i = count($match); $i <= 3; $i++) - { - $match[$i] = '1'; - } - - for ($i = count($match); $i <= 7; $i++) - { - $match[$i] = '0'; - } - - // Numeric timezone - if (isset($match[9]) && $match[9] !== '') - { - $timezone = $match[10] * 3600; - $timezone += $match[11] * 60; - if ($match[9] === '-') - { - $timezone = 0 - $timezone; - } - } - else - { - $timezone = 0; - } - - // Convert the number of seconds to an integer, taking decimals into account - $second = round($match[6] + $match[7] / pow(10, strlen($match[7]))); - - return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone; - } - else - { - return false; - } - } - - /** - * Remove RFC822 comments - * - * @access protected - * @param string $data Data to strip comments from - * @return string Comment stripped string - */ - public function remove_rfc2822_comments($string) - { - $string = (string) $string; - $position = 0; - $length = strlen($string); - $depth = 0; - - $output = ''; - - while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) - { - $output .= substr($string, $position, $pos - $position); - $position = $pos + 1; - if ($string[$pos - 1] !== '\\') - { - $depth++; - while ($depth && $position < $length) - { - $position += strcspn($string, '()', $position); - if ($string[$position - 1] === '\\') - { - $position++; - continue; - } - elseif (isset($string[$position])) - { - switch ($string[$position]) - { - case '(': - $depth++; - break; - - case ')': - $depth--; - break; - } - $position++; - } - else - { - break; - } - } - } - else - { - $output .= '('; - } - } - $output .= substr($string, $position); - - return $output; - } - - /** - * Parse RFC2822's date format - * - * @access protected - * @return int Timestamp - */ - public function date_rfc2822($date) - { - static $pcre; - if (!$pcre) - { - $wsp = '[\x09\x20]'; - $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)'; - $optional_fws = $fws . '?'; - $day_name = $this->day_pcre; - $month = $this->month_pcre; - $day = '([0-9]{1,2})'; - $hour = $minute = $second = '([0-9]{2})'; - $year = '([0-9]{2,4})'; - $num_zone = '([+\-])([0-9]{2})([0-9]{2})'; - $character_zone = '([A-Z]{1,5})'; - $zone = '(?:' . $num_zone . '|' . $character_zone . ')'; - $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i'; - } - if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) - { - /* - Capturing subpatterns: - 1: Day name - 2: Day - 3: Month - 4: Year - 5: Hour - 6: Minute - 7: Second - 8: Timezone ± - 9: Timezone hours - 10: Timezone minutes - 11: Alphabetic timezone - */ - - // Find the month number - $month = $this->month[strtolower($match[3])]; - - // Numeric timezone - if ($match[8] !== '') - { - $timezone = $match[9] * 3600; - $timezone += $match[10] * 60; - if ($match[8] === '-') - { - $timezone = 0 - $timezone; - } - } - // Character timezone - elseif (isset($this->timezone[strtoupper($match[11])])) - { - $timezone = $this->timezone[strtoupper($match[11])]; - } - // Assume everything else to be -0000 - else - { - $timezone = 0; - } - - // Deal with 2/3 digit years - if ($match[4] < 50) - { - $match[4] += 2000; - } - elseif ($match[4] < 1000) - { - $match[4] += 1900; - } - - // Second is optional, if it is empty set it to zero - if ($match[7] !== '') - { - $second = $match[7]; - } - else - { - $second = 0; - } - - return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone; - } - else - { - return false; - } - } - - /** - * Parse RFC850's date format - * - * @access protected - * @return int Timestamp - */ - public function date_rfc850($date) - { - static $pcre; - if (!$pcre) - { - $space = '[\x09\x20]+'; - $day_name = $this->day_pcre; - $month = $this->month_pcre; - $day = '([0-9]{1,2})'; - $year = $hour = $minute = $second = '([0-9]{2})'; - $zone = '([A-Z]{1,5})'; - $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i'; - } - if (preg_match($pcre, $date, $match)) - { - /* - Capturing subpatterns: - 1: Day name - 2: Day - 3: Month - 4: Year - 5: Hour - 6: Minute - 7: Second - 8: Timezone - */ - - // Month - $month = $this->month[strtolower($match[3])]; - - // Character timezone - if (isset($this->timezone[strtoupper($match[8])])) - { - $timezone = $this->timezone[strtoupper($match[8])]; - } - // Assume everything else to be -0000 - else - { - $timezone = 0; - } - - // Deal with 2 digit year - if ($match[4] < 50) - { - $match[4] += 2000; - } - else - { - $match[4] += 1900; - } - - return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone; - } - else - { - return false; - } - } - - /** - * Parse C99's asctime()'s date format - * - * @access protected - * @return int Timestamp - */ - public function date_asctime($date) - { - static $pcre; - if (!$pcre) - { - $space = '[\x09\x20]+'; - $wday_name = $this->day_pcre; - $mon_name = $this->month_pcre; - $day = '([0-9]{1,2})'; - $hour = $sec = $min = '([0-9]{2})'; - $year = '([0-9]{4})'; - $terminator = '\x0A?\x00?'; - $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i'; - } - if (preg_match($pcre, $date, $match)) - { - /* - Capturing subpatterns: - 1: Day name - 2: Month - 3: Day - 4: Hour - 5: Minute - 6: Second - 7: Year - */ - - $month = $this->month[strtolower($match[2])]; - return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]); - } - else - { - return false; - } - } - - /** - * Parse dates using strtotime() - * - * @access protected - * @return int Timestamp - */ - public function date_strtotime($date) - { - $strtotime = strtotime($date); - if ($strtotime === -1 || $strtotime === false) - { - return false; - } - else - { - return $strtotime; - } - } -} - -/** - * Parses XML into something sane - * - * - * This class can be overloaded with {@see SimplePie::set_parser_class()} - * - * @package SimplePie - * @subpackage Parsing - */ -class SimplePie_Parser -{ - var $error_code; - var $error_string; - var $current_line; - var $current_column; - var $current_byte; - var $separator = ' '; - var $namespace = array(''); - var $element = array(''); - var $xml_base = array(''); - var $xml_base_explicit = array(false); - var $xml_lang = array(''); - var $data = array(); - var $datas = array(array()); - var $current_xhtml_construct = -1; - var $encoding; - protected $registry; - - public function set_registry(SimplePie_Registry $registry) - { - $this->registry = $registry; - } - - public function parse(&$data, $encoding) - { - // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character - if (strtoupper($encoding) === 'US-ASCII') - { - $this->encoding = 'UTF-8'; - } - else - { - $this->encoding = $encoding; - } - - // Strip BOM: - // UTF-32 Big Endian BOM - if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") - { - $data = substr($data, 4); - } - // UTF-32 Little Endian BOM - elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") - { - $data = substr($data, 4); - } - // UTF-16 Big Endian BOM - elseif (substr($data, 0, 2) === "\xFE\xFF") - { - $data = substr($data, 2); - } - // UTF-16 Little Endian BOM - elseif (substr($data, 0, 2) === "\xFF\xFE") - { - $data = substr($data, 2); - } - // UTF-8 BOM - elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") - { - $data = substr($data, 3); - } - - if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false) - { - $declaration = $this->registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5))); - if ($declaration->parse()) - { - $data = substr($data, $pos + 2); - $data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data; - } - else - { - $this->error_string = 'SimplePie bug! Please report this!'; - return false; - } - } - - $return = true; - - static $xml_is_sane = null; - if ($xml_is_sane === null) - { - $parser_check = xml_parser_create(); - xml_parse_into_struct($parser_check, '<foo>&</foo>', $values); - xml_parser_free($parser_check); - $xml_is_sane = isset($values[0]['value']); - } - - // Create the parser - if ($xml_is_sane) - { - $xml = xml_parser_create_ns($this->encoding, $this->separator); - xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1); - xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0); - xml_set_object($xml, $this); - xml_set_character_data_handler($xml, 'cdata'); - xml_set_element_handler($xml, 'tag_open', 'tag_close'); - - // Parse! - if (!xml_parse($xml, $data, true)) - { - $this->error_code = xml_get_error_code($xml); - $this->error_string = xml_error_string($this->error_code); - $return = false; - } - $this->current_line = xml_get_current_line_number($xml); - $this->current_column = xml_get_current_column_number($xml); - $this->current_byte = xml_get_current_byte_index($xml); - xml_parser_free($xml); - return $return; - } - else - { - libxml_clear_errors(); - $xml = new XMLReader(); - $xml->xml($data); - while (@$xml->read()) - { - switch ($xml->nodeType) - { - - case constant('XMLReader::END_ELEMENT'): - if ($xml->namespaceURI !== '') - { - $tagName = $xml->namespaceURI . $this->separator . $xml->localName; - } - else - { - $tagName = $xml->localName; - } - $this->tag_close(null, $tagName); - break; - case constant('XMLReader::ELEMENT'): - $empty = $xml->isEmptyElement; - if ($xml->namespaceURI !== '') - { - $tagName = $xml->namespaceURI . $this->separator . $xml->localName; - } - else - { - $tagName = $xml->localName; - } - $attributes = array(); - while ($xml->moveToNextAttribute()) - { - if ($xml->namespaceURI !== '') - { - $attrName = $xml->namespaceURI . $this->separator . $xml->localName; - } - else - { - $attrName = $xml->localName; - } - $attributes[$attrName] = $xml->value; - } - $this->tag_open(null, $tagName, $attributes); - if ($empty) - { - $this->tag_close(null, $tagName); - } - break; - case constant('XMLReader::TEXT'): - - case constant('XMLReader::CDATA'): - $this->cdata(null, $xml->value); - break; - } - } - if ($error = libxml_get_last_error()) - { - $this->error_code = $error->code; - $this->error_string = $error->message; - $this->current_line = $error->line; - $this->current_column = $error->column; - return false; - } - else - { - return true; - } - } - } - - public function get_error_code() - { - return $this->error_code; - } - - public function get_error_string() - { - return $this->error_string; - } - - public function get_current_line() - { - return $this->current_line; - } - - public function get_current_column() - { - return $this->current_column; - } - - public function get_current_byte() - { - return $this->current_byte; - } - - public function get_data() - { - return $this->data; - } - - public function tag_open($parser, $tag, $attributes) - { - list($this->namespace[], $this->element[]) = $this->split_ns($tag); - - $attribs = array(); - foreach ($attributes as $name => $value) - { - list($attrib_namespace, $attribute) = $this->split_ns($name); - $attribs[$attrib_namespace][$attribute] = $value; - } - - if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base'])) - { - $base = $this->registry->call('Misc', 'absolutize_url', array($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base))); - if ($base !== false) - { - $this->xml_base[] = $base; - $this->xml_base_explicit[] = true; - } - } - else - { - $this->xml_base[] = end($this->xml_base); - $this->xml_base_explicit[] = end($this->xml_base_explicit); - } - - if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang'])) - { - $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang']; - } - else - { - $this->xml_lang[] = end($this->xml_lang); - } - - if ($this->current_xhtml_construct >= 0) - { - $this->current_xhtml_construct++; - if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML) - { - $this->data['data'] .= '<' . end($this->element); - if (isset($attribs[''])) - { - foreach ($attribs[''] as $name => $value) - { - $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"'; - } - } - $this->data['data'] .= '>'; - } - } - else - { - $this->datas[] =& $this->data; - $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][]; - $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)); - if ((end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml') - || (end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml') - || (end($this->namespace) === SIMPLEPIE_NAMESPACE_RSS_20 && in_array(end($this->element), array('title'))) - || (end($this->namespace) === SIMPLEPIE_NAMESPACE_RSS_090 && in_array(end($this->element), array('title'))) - || (end($this->namespace) === SIMPLEPIE_NAMESPACE_RSS_10 && in_array(end($this->element), array('title')))) - { - $this->current_xhtml_construct = 0; - } - } - } - - public function cdata($parser, $cdata) - { - if ($this->current_xhtml_construct >= 0) - { - $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding); - } - else - { - $this->data['data'] .= $cdata; - } - } - - public function tag_close($parser, $tag) - { - if ($this->current_xhtml_construct >= 0) - { - $this->current_xhtml_construct--; - if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'))) - { - $this->data['data'] .= '</' . end($this->element) . '>'; - } - } - if ($this->current_xhtml_construct === -1) - { - $this->data =& $this->datas[count($this->datas) - 1]; - array_pop($this->datas); - } - - array_pop($this->element); - array_pop($this->namespace); - array_pop($this->xml_base); - array_pop($this->xml_base_explicit); - array_pop($this->xml_lang); - } - - public function split_ns($string) - { - static $cache = array(); - if (!isset($cache[$string])) - { - if ($pos = strpos($string, $this->separator)) - { - static $separator_length; - if (!$separator_length) - { - $separator_length = strlen($this->separator); - } - $namespace = substr($string, 0, $pos); - $local_name = substr($string, $pos + $separator_length); - if (strtolower($namespace) === SIMPLEPIE_NAMESPACE_ITUNES) - { - $namespace = SIMPLEPIE_NAMESPACE_ITUNES; - } - - // Normalize the Media RSS namespaces - if ($namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG || - $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2 || - $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3 || - $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4 || - $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5 ) - { - $namespace = SIMPLEPIE_NAMESPACE_MEDIARSS; - } - $cache[$string] = array($namespace, $local_name); - } - else - { - $cache[$string] = array('', $string); - } - } - return $cache[$string]; - } -} - -/** - * Handles `<media:rating>` or `<itunes:explicit>` tags as defined in Media RSS and iTunes RSS respectively - * - * Used by {@see SimplePie_Enclosure::get_rating()} and {@see SimplePie_Enclosure::get_ratings()} - * - * This class can be overloaded with {@see SimplePie::set_rating_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Rating -{ - /** - * Rating scheme - * - * @var string - * @see get_scheme() - */ - var $scheme; - - /** - * Rating value - * - * @var string - * @see get_value() - */ - var $value; - - /** - * Constructor, used to input the data - * - * For documentation on all the parameters, see the corresponding - * properties and their accessors - */ - public function __construct($scheme = null, $value = null) - { - $this->scheme = $scheme; - $this->value = $value; - } - - /** - * String-ified version - * - * @return string - */ - public function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - /** - * Get the organizational scheme for the rating - * - * @return string|null - */ - public function get_scheme() - { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } - } - - /** - * Get the value of the rating - * - * @return string|null - */ - public function get_value() - { - if ($this->value !== null) - { - return $this->value; - } - else - { - return null; - } - } -} - -/** - * Handles creating objects and calling methods - * - * Access this via {@see SimplePie::get_registry()} - * - * @package SimplePie - */ -class SimplePie_Registry -{ - /** - * Default class mapping - * - * Overriding classes *must* subclass these. - * - * @var array - */ - protected $default = array( - 'Cache' => 'SimplePie_Cache', - 'Locator' => 'SimplePie_Locator', - 'Parser' => 'SimplePie_Parser', - 'File' => 'SimplePie_File', - 'Sanitize' => 'SimplePie_Sanitize', - 'Item' => 'SimplePie_Item', - 'Author' => 'SimplePie_Author', - 'Category' => 'SimplePie_Category', - 'Enclosure' => 'SimplePie_Enclosure', - 'Caption' => 'SimplePie_Caption', - 'Copyright' => 'SimplePie_Copyright', - 'Credit' => 'SimplePie_Credit', - 'Rating' => 'SimplePie_Rating', - 'Restriction' => 'SimplePie_Restriction', - 'Content_Type_Sniffer' => 'SimplePie_Content_Type_Sniffer', - 'Source' => 'SimplePie_Source', - 'Misc' => 'SimplePie_Misc', - 'XML_Declaration_Parser' => 'SimplePie_XML_Declaration_Parser', - 'Parse_Date' => 'SimplePie_Parse_Date', - ); - - /** - * Class mapping - * - * @see register() - * @var array - */ - protected $classes = array(); - - /** - * Legacy classes - * - * @see register() - * @var array - */ - protected $legacy = array(); - - /** - * Constructor - * - * No-op - */ - public function __construct() { } - - /** - * Register a class - * - * @param string $type See {@see $default} for names - * @param string $class Class name, must subclass the corresponding default - * @param bool $legacy Whether to enable legacy support for this class - * @return bool Successfulness - */ - public function register($type, $class, $legacy = false) - { - if (!is_subclass_of($class, $this->default[$type])) - { - return false; - } - - $this->classes[$type] = $class; - - if ($legacy) - { - $this->legacy[] = $class; - } - - return true; - } - - /** - * Get the class registered for a type - * - * Where possible, use {@see create()} or {@see call()} instead - * - * @param string $type - * @return string|null - */ - public function get_class($type) - { - if (!empty($this->classes[$type])) - { - return $this->classes[$type]; - } - if (!empty($this->default[$type])) - { - return $this->default[$type]; - } - - return null; - } - - /** - * Create a new instance of a given type - * - * @param string $type - * @param array $parameters Parameters to pass to the constructor - * @return object Instance of class - */ - public function &create($type, $parameters = array()) - { - $class = $this->get_class($type); - - if (in_array($class, $this->legacy)) - { - switch ($type) - { - case 'locator': - // Legacy: file, timeout, useragent, file_class, max_checked_feeds, content_type_sniffer_class - // Specified: file, timeout, useragent, max_checked_feeds - $replacement = array($this->get_class('file'), $parameters[3], $this->get_class('content_type_sniffer')); - array_splice($parameters, 3, 1, $replacement); - break; - } - } - - if (!method_exists($class, '__construct')) - { - $instance = new $class; - } - else - { - $reflector = new ReflectionClass($class); - $instance = $reflector->newInstanceArgs($parameters); - } - - if (method_exists($instance, 'set_registry')) - { - $instance->set_registry($this); - } - return $instance; - } - - /** - * Call a static method for a type - * - * @param string $type - * @param string $method - * @param array $parameters - * @return mixed - */ - public function &call($type, $method, $parameters = array()) - { - $class = $this->get_class($type); - - if (in_array($class, $this->legacy)) - { - switch ($type) - { - case 'Cache': - // For backwards compatibility with old non-static - // Cache::create() methods - if ($method === 'get_handler') - { - $result = @call_user_func_array(array($class, 'create'), $parameters); - return $result; - } - break; - } - } - - $result = call_user_func_array(array($class, $method), $parameters); - return $result; - } -} - -/** - * Handles `<media:restriction>` as defined in Media RSS - * - * Used by {@see SimplePie_Enclosure::get_restriction()} and {@see SimplePie_Enclosure::get_restrictions()} - * - * This class can be overloaded with {@see SimplePie::set_restriction_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Restriction -{ - /** - * Relationship ('allow'/'deny') - * - * @var string - * @see get_relationship() - */ - var $relationship; - - /** - * Type of restriction - * - * @var string - * @see get_type() - */ - var $type; - - /** - * Restricted values - * - * @var string - * @see get_value() - */ - var $value; - - /** - * Constructor, used to input the data - * - * For documentation on all the parameters, see the corresponding - * properties and their accessors - */ - public function __construct($relationship = null, $type = null, $value = null) - { - $this->relationship = $relationship; - $this->type = $type; - $this->value = $value; - } - - /** - * String-ified version - * - * @return string - */ - public function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - /** - * Get the relationship - * - * @return string|null Either 'allow' or 'deny' - */ - public function get_relationship() - { - if ($this->relationship !== null) - { - return $this->relationship; - } - else - { - return null; - } - } - - /** - * Get the type - * - * @return string|null - */ - public function get_type() - { - if ($this->type !== null) - { - return $this->type; - } - else - { - return null; - } - } - - /** - * Get the list of restricted things - * - * @return string|null - */ - public function get_value() - { - if ($this->value !== null) - { - return $this->value; - } - else - { - return null; - } - } -} - -/** - * Used for data cleanup and post-processing - * - * - * This class can be overloaded with {@see SimplePie::set_sanitize_class()} - * - * @package SimplePie - * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags - */ -class SimplePie_Sanitize -{ - // Private vars - var $base; - - // Options - var $remove_div = true; - var $image_handler = ''; - var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); - var $encode_instead_of_strip = false; - var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); - var $strip_comments = false; - var $output_encoding = 'UTF-8'; - var $enable_cache = true; - var $cache_location = './cache'; - var $cache_name_function = 'md5'; - var $timeout = 10; - var $useragent = ''; - var $force_fsockopen = false; - var $replace_url_attributes = null; - - public function __construct() - { - // Set defaults - $this->set_url_replacements(null); - } - - public function remove_div($enable = true) - { - $this->remove_div = (bool) $enable; - } - - public function set_image_handler($page = false) - { - if ($page) - { - $this->image_handler = (string) $page; - } - else - { - $this->image_handler = false; - } - } - - public function set_registry(SimplePie_Registry $registry) - { - $this->registry = $registry; - } - - public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache') - { - if (isset($enable_cache)) - { - $this->enable_cache = (bool) $enable_cache; - } - - if ($cache_location) - { - $this->cache_location = (string) $cache_location; - } - - if ($cache_name_function) - { - $this->cache_name_function = (string) $cache_name_function; - } - } - - public function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false) - { - if ($timeout) - { - $this->timeout = (string) $timeout; - } - - if ($useragent) - { - $this->useragent = (string) $useragent; - } - - if ($force_fsockopen) - { - $this->force_fsockopen = (string) $force_fsockopen; - } - } - - public function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style')) - { - if ($tags) - { - if (is_array($tags)) - { - $this->strip_htmltags = $tags; - } - else - { - $this->strip_htmltags = explode(',', $tags); - } - } - else - { - $this->strip_htmltags = false; - } - } - - public function encode_instead_of_strip($encode = false) - { - $this->encode_instead_of_strip = (bool) $encode; - } - - public function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc')) - { - if ($attribs) - { - if (is_array($attribs)) - { - $this->strip_attributes = $attribs; - } - else - { - $this->strip_attributes = explode(',', $attribs); - } - } - else - { - $this->strip_attributes = false; - } - } - - public function strip_comments($strip = false) - { - $this->strip_comments = (bool) $strip; - } - - public function set_output_encoding($encoding = 'UTF-8') - { - $this->output_encoding = (string) $encoding; - } - - /** - * Set element/attribute key/value pairs of HTML attributes - * containing URLs that need to be resolved relative to the feed - * - * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite, - * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite, - * |q|@cite - * - * @since 1.0 - * @param array|null $element_attribute Element/attribute key/value pairs, null for default - */ - public function set_url_replacements($element_attribute = null) - { - if ($element_attribute === null) - { - $element_attribute = array( - 'a' => 'href', - 'area' => 'href', - 'blockquote' => 'cite', - 'del' => 'cite', - 'form' => 'action', - 'img' => array( - 'longdesc', - 'src' - ), - 'input' => 'src', - 'ins' => 'cite', - 'q' => 'cite' - ); - } - $this->replace_url_attributes = (array) $element_attribute; - } - - public function sanitize($data, $type, $base = '') - { - $data = trim($data); - if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI) - { - if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML) - { - if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data)) - { - $type |= SIMPLEPIE_CONSTRUCT_HTML; - } - else - { - $type |= SIMPLEPIE_CONSTRUCT_TEXT; - } - } - - if ($type & SIMPLEPIE_CONSTRUCT_BASE64) - { - $data = base64_decode($data); - } - - if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML)) - { - - $document = new DOMDocument(); - $document->encoding = 'UTF-8'; - $data = $this->preprocess($data, $type); - - set_error_handler(array('SimplePie_Misc', 'silence_errors')); - $document->loadHTML($data); - restore_error_handler(); - - // Strip comments - if ($this->strip_comments) - { - $xpath = new DOMXPath($document); - $comments = $xpath->query('//comment()'); - - foreach ($comments as $comment) - { - $comment->parentNode->removeChild($comment); - } - } - - // Strip out HTML tags and attributes that might cause various security problems. - // Based on recommendations by Mark Pilgrim at: - // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely - if ($this->strip_htmltags) - { - foreach ($this->strip_htmltags as $tag) - { - $this->strip_tag($tag, $document, $type); - } - } - - if ($this->strip_attributes) - { - foreach ($this->strip_attributes as $attrib) - { - $this->strip_attr($attrib, $document); - } - } - - // Replace relative URLs - $this->base = $base; - foreach ($this->replace_url_attributes as $element => $attributes) - { - $this->replace_urls($document, $element, $attributes); - } - - // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags. - if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) - { - $images = $document->getElementsByTagName('img'); - foreach ($images as $img) - { - if ($img->hasAttribute('src')) - { - $image_url = call_user_func($this->cache_name_function, $img->getAttribute('src')); - $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, $image_url, 'spi')); - - if ($cache->load()) - { - $img->setAttribute('src', $this->image_handler . $image_url); - } - else - { - $file = $this->registry->create('File', array($img['attribs']['src']['data'], $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen)); - $headers = $file->headers; - - if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) - { - if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) - { - $img->setAttribute('src', $this->image_handler . $image_url); - } - else - { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - } - } - } - } - } - } - - // Remove the DOCTYPE - // Seems to cause segfaulting if we don't do this - if ($document->firstChild instanceof DOMDocumentType) - { - $document->removeChild($document->firstChild); - } - - // Move everything from the body to the root - $real_body = $document->getElementsByTagName('body')->item(0)->childNodes->item(0); - $document->replaceChild($real_body, $document->firstChild); - - // Finally, convert to a HTML string - $data = trim($document->saveHTML()); - - if ($this->remove_div) - { - $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '', $data); - $data = preg_replace('/<\/div>$/', '', $data); - } - else - { - $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '<div>', $data); - } - } - - if ($type & SIMPLEPIE_CONSTRUCT_IRI) - { - $absolute = $this->registry->call('Misc', 'absolutize_url', array($data, $base)); - if ($absolute !== false) - { - $data = $absolute; - } - } - - if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI)) - { - $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8'); - } - - if ($this->output_encoding !== 'UTF-8') - { - $data = $this->registry->call('Misc', 'change_encoding', array($data, 'UTF-8', $this->output_encoding)); - } - } - return $data; - } - - protected function preprocess($html, $type) - { - $ret = ''; - if ($type & ~SIMPLEPIE_CONSTRUCT_XHTML) - { - // Atom XHTML constructs are wrapped with a div by default - // Note: No protection if $html contains a stray </div>! - $html = '<div>' . $html . '</div>'; - $ret .= '<!DOCTYPE html>'; - $content_type = 'text/html'; - } - else - { - $ret .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'; - $content_type = 'application/xhtml+xml'; - } - - $ret .= '<html><head>'; - $ret .= '<meta http-equiv="Content-Type" content="' . $content_type . '; charset=utf-8" />'; - $ret .= '</head><body>' . $html . '</body></html>'; - return $ret; - } - - public function replace_urls($document, $tag, $attributes) - { - if (!is_array($attributes)) - { - $attributes = array($attributes); - } - - if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags)) - { - $elements = $document->getElementsByTagName($tag); - foreach ($elements as $element) - { - foreach ($attributes as $attribute) - { - if ($element->hasAttribute($attribute)) - { - $value = $this->registry->call('Misc', 'absolutize_url', array($element->getAttribute($attribute), $this->base)); - if ($value !== false) - { - $element->setAttribute($attribute, $value); - } - } - } - } - } - } - - public function do_strip_htmltags($match) - { - if ($this->encode_instead_of_strip) - { - if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) - { - $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8'); - $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8'); - return "<$match[1]$match[2]>$match[3]</$match[1]>"; - } - else - { - return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8'); - } - } - elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) - { - return $match[4]; - } - else - { - return ''; - } - } - - protected function strip_tag($tag, $document, $type) - { - $xpath = new DOMXPath($document); - $elements = $xpath->query('body//' . $tag); - if ($this->encode_instead_of_strip) - { - foreach ($elements as $element) - { - $fragment = $document->createDocumentFragment(); - - // For elements which aren't script or style, include the tag itself - if (!in_array($tag, array('script', 'style'))) - { - $text = '<' . $tag; - if ($element->hasAttributes()) - { - $attrs = array(); - foreach ($element->attributes as $name => $attr) - { - $value = $attr->value; - - // In XHTML, empty values should never exist, so we repeat the value - if (empty($value) && ($type & SIMPLEPIE_CONSTRUCT_XHTML)) - { - $value = $name; - } - // For HTML, empty is fine - elseif (empty($value) && ($type & SIMPLEPIE_CONSTRUCT_HTML)) - { - $attrs[] = $name; - continue; - } - - // Standard attribute text - $attrs[] = $name . '="' . $attr->value . '"'; - } - $text .= ' ' . implode(' ', $attrs); - } - $text .= '>'; - $fragment->appendChild(new DOMText($text)); - } - - $number = $element->childNodes->length; - for ($i = $number; $i > 0; $i--) - { - $child = $element->childNodes->item(0); - $fragment->appendChild($child); - } - - if (!in_array($tag, array('script', 'style'))) - { - $fragment->appendChild(new DOMText('</' . $tag . '>')); - } - - $element->parentNode->replaceChild($fragment, $element); - } - - return; - } - elseif (in_array($tag, array('script', 'style'))) - { - foreach ($elements as $element) - { - $element->parentNode->removeChild($element); - } - - return; - } - else - { - foreach ($elements as $element) - { - $fragment = $document->createDocumentFragment(); - $number = $element->childNodes->length; - for ($i = $number; $i > 0; $i--) - { - $child = $element->childNodes->item(0); - $fragment->appendChild($child); - } - - $element->parentNode->replaceChild($fragment, $element); - } - } - } - - protected function strip_attr($attrib, $document) - { - $xpath = new DOMXPath($document); - $elements = $xpath->query('//*[@' . $attrib . ']'); - - foreach ($elements as $element) - { - $element->removeAttribute($attrib); - } - } -} - -/** - * Handles `<atom:source>` - * - * Used by {@see SimplePie_Item::get_source()} - * - * This class can be overloaded with {@see SimplePie::set_source_class()} - * - * @package SimplePie - * @subpackage API - */ -class SimplePie_Source -{ - var $item; - var $data = array(); - protected $registry; - - public function __construct($item, $data) - { - $this->item = $item; - $this->data = $data; - } - - public function set_registry(SimplePie_Registry $registry) - { - $this->registry = $registry; - } - - public function __toString() - { - return md5(serialize($this->data)); - } - - public function get_source_tags($namespace, $tag) - { - if (isset($this->data['child'][$namespace][$tag])) - { - return $this->data['child'][$namespace][$tag]; - } - else - { - return null; - } - } - - public function get_base($element = array()) - { - return $this->item->get_base($element); - } - - public function sanitize($data, $type, $base = '') - { - return $this->item->sanitize($data, $type, $base); - } - - public function get_item() - { - return $this->item; - } - - public function get_title() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - public function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - public function get_categories() - { - $categories = array(); - - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['attribs']['']['term'])) - { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) - { - // This is really the label, but keep this as the term also for BC. - // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - if (isset($category['attribs']['']['domain'])) - { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = null; - } - $categories[] = $this->registry->create('Category', array($term, $scheme, null)); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) - { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) - { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - - if (!empty($categories)) - { - return array_unique($categories); - } - else - { - return null; - } - } - - public function get_author($key = 0) - { - $authors = $this->get_authors(); - if (isset($authors[$key])) - { - return $authors[$key]; - } - else - { - return null; - } - } - - public function get_authors() - { - $authors = array(); - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) - { - $name = null; - $uri = null; - $email = null; - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $authors[] = $this->registry->create('Author', array($name, $uri, $email)); - } - } - if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) - { - $name = null; - $url = null; - $email = null; - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $authors[] = $this->registry->create('Author', array($name, $url, $email)); - } - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) - { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) - { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) - { - $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null)); - } - - if (!empty($authors)) - { - return array_unique($authors); - } - else - { - return null; - } - } - - public function get_contributor($key = 0) - { - $contributors = $this->get_contributors(); - if (isset($contributors[$key])) - { - return $contributors[$key]; - } - else - { - return null; - } - } - - public function get_contributors() - { - $contributors = array(); - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) - { - $name = null; - $uri = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $contributors[] = $this->registry->create('Author', array($name, $uri, $email)); - } - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) - { - $name = null; - $url = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $contributors[] = $this->registry->create('Author', array($name, $url, $email)); - } - } - - if (!empty($contributors)) - { - return array_unique($contributors); - } - else - { - return null; - } - } - - public function get_link($key = 0, $rel = 'alternate') - { - $links = $this->get_links($rel); - if (isset($links[$key])) - { - return $links[$key]; - } - else - { - return null; - } - } - - /** - * Added for parity between the parent-level and the item/entry-level. - */ - public function get_permalink() - { - return $this->get_link(0); - } - - public function get_links($rel = 'alternate') - { - if (!isset($this->data['links'])) - { - $this->data['links'] = array(); - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - } - } - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - - } - } - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - - $keys = array_keys($this->data['links']); - foreach ($keys as $key) - { - if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key))) - { - if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); - $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; - } - else - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; - } - } - elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) - { - $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; - } - $this->data['links'][$key] = array_unique($this->data['links'][$key]); - } - } - - if (isset($this->data['links'][$rel])) - { - return $this->data['links'][$rel]; - } - else - { - return null; - } - } - - public function get_description() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - else - { - return null; - } - } - - public function get_copyright() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) - { - return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - public function get_language() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['xml_lang'])) - { - return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - public function get_latitude() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[1]; - } - else - { - return null; - } - } - - public function get_longitude() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) - { - return (float) $return[0]['data']; - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[2]; - } - else - { - return null; - } - } - - public function get_image_url() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) - { - return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - else - { - return null; - } - } -} - -/** - * Parses the XML Declaration - * - * @package SimplePie - * @subpackage Parsing - */ -class SimplePie_XML_Declaration_Parser -{ - /** - * XML Version - * - * @access public - * @var string - */ - var $version = '1.0'; - - /** - * Encoding - * - * @access public - * @var string - */ - var $encoding = 'UTF-8'; - - /** - * Standalone - * - * @access public - * @var bool - */ - var $standalone = false; - - /** - * Current state of the state machine - * - * @access private - * @var string - */ - var $state = 'before_version_name'; - - /** - * Input data - * - * @access private - * @var string - */ - var $data = ''; - - /** - * Input data length (to avoid calling strlen() everytime this is needed) - * - * @access private - * @var int - */ - var $data_length = 0; - - /** - * Current position of the pointer - * - * @var int - * @access private - */ - var $position = 0; - - /** - * Create an instance of the class with the input data - * - * @access public - * @param string $data Input data - */ - public function __construct($data) - { - $this->data = $data; - $this->data_length = strlen($this->data); - } - - /** - * Parse the input data - * - * @access public - * @return bool true on success, false on failure - */ - public function parse() - { - while ($this->state && $this->state !== 'emit' && $this->has_data()) - { - $state = $this->state; - $this->$state(); - } - $this->data = ''; - if ($this->state === 'emit') - { - return true; - } - else - { - $this->version = ''; - $this->encoding = ''; - $this->standalone = ''; - return false; - } - } - - /** - * Check whether there is data beyond the pointer - * - * @access private - * @return bool true if there is further data, false if not - */ - public function has_data() - { - return (bool) ($this->position < $this->data_length); - } - - /** - * Advance past any whitespace - * - * @return int Number of whitespace characters passed - */ - public function skip_whitespace() - { - $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position); - $this->position += $whitespace; - return $whitespace; - } - - /** - * Read value - */ - public function get_value() - { - $quote = substr($this->data, $this->position, 1); - if ($quote === '"' || $quote === "'") - { - $this->position++; - $len = strcspn($this->data, $quote, $this->position); - if ($this->has_data()) - { - $value = substr($this->data, $this->position, $len); - $this->position += $len + 1; - return $value; - } - } - return false; - } - - public function before_version_name() - { - if ($this->skip_whitespace()) - { - $this->state = 'version_name'; - } - else - { - $this->state = false; - } - } - - public function version_name() - { - if (substr($this->data, $this->position, 7) === 'version') - { - $this->position += 7; - $this->skip_whitespace(); - $this->state = 'version_equals'; - } - else - { - $this->state = false; - } - } - - public function version_equals() - { - if (substr($this->data, $this->position, 1) === '=') - { - $this->position++; - $this->skip_whitespace(); - $this->state = 'version_value'; - } - else - { - $this->state = false; - } - } - - public function version_value() - { - if ($this->version = $this->get_value()) - { - $this->skip_whitespace(); - if ($this->has_data()) - { - $this->state = 'encoding_name'; - } - else - { - $this->state = 'emit'; - } - } - else - { - $this->state = false; - } - } - - public function encoding_name() - { - if (substr($this->data, $this->position, 8) === 'encoding') - { - $this->position += 8; - $this->skip_whitespace(); - $this->state = 'encoding_equals'; - } - else - { - $this->state = 'standalone_name'; - } - } - - public function encoding_equals() - { - if (substr($this->data, $this->position, 1) === '=') - { - $this->position++; - $this->skip_whitespace(); - $this->state = 'encoding_value'; - } - else - { - $this->state = false; - } - } - - public function encoding_value() - { - if ($this->encoding = $this->get_value()) - { - $this->skip_whitespace(); - if ($this->has_data()) - { - $this->state = 'standalone_name'; - } - else - { - $this->state = 'emit'; - } - } - else - { - $this->state = false; - } - } - - public function standalone_name() - { - if (substr($this->data, $this->position, 10) === 'standalone') - { - $this->position += 10; - $this->skip_whitespace(); - $this->state = 'standalone_equals'; - } - else - { - $this->state = false; - } - } - - public function standalone_equals() - { - if (substr($this->data, $this->position, 1) === '=') - { - $this->position++; - $this->skip_whitespace(); - $this->state = 'standalone_value'; - } - else - { - $this->state = false; - } - } - - public function standalone_value() - { - if ($standalone = $this->get_value()) - { - switch ($standalone) - { - case 'yes': - $this->standalone = true; - break; - - case 'no': - $this->standalone = false; - break; - - default: - $this->state = false; - return; - } - - $this->skip_whitespace(); - if ($this->has_data()) - { - $this->state = false; - } - else - { - $this->state = 'emit'; - } - } - else - { - $this->state = false; - } - } -} - diff --git a/lib/timezones.txt b/lib/timezones.txt index 66824ec93..58108f031 100644 --- a/lib/timezones.txt +++ b/lib/timezones.txt @@ -1,3 +1,4 @@ +Automatic Africa/Abidjan Africa/Accra Africa/Addis_Ababa diff --git a/locale/.htaccess b/locale/.htaccess new file mode 100644 index 000000000..93169e4eb --- /dev/null +++ b/locale/.htaccess @@ -0,0 +1,2 @@ +Order deny,allow +Deny from all diff --git a/locale/ca_CA/LC_MESSAGES/messages.mo b/locale/ca_CA/LC_MESSAGES/messages.mo Binary files differindex 396309460..a6410560f 100644 --- a/locale/ca_CA/LC_MESSAGES/messages.mo +++ b/locale/ca_CA/LC_MESSAGES/messages.mo diff --git a/locale/ca_CA/LC_MESSAGES/messages.po b/locale/ca_CA/LC_MESSAGES/messages.po index c6bb68e66..936d368ad 100644 --- a/locale/ca_CA/LC_MESSAGES/messages.po +++ b/locale/ca_CA/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: 2009-11-19 09:40+0100\n" "Last-Translator: Alfred Galitó <bratac@bratac.cat>\n" "Language-Team: Català <bratac@bratac.cat>\n" @@ -17,88 +17,89 @@ msgstr "" "X-Generator: KBabel 1.11.4\n" "X-Poedit-Language: Catalan\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Valors per defecte" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "No ho purguis mai" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "Al cap d'1 setmana" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "Al cap de 2 setmanes" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "Al cap d'1 mes" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "Al cap de 2 mesos" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "Al cap de 3 mesos" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Interval per defecte" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "Deshabilita les actualitzacions" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "Cada 15 minuts" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "cada 30 minuts" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "Cada hora" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "Cada 4 hores" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "Cada 12 hores" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "Dià riament" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "Setmanalment" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "Usuari" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Súper usuari" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Administrador" @@ -155,356 +156,351 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "Ha fallat la sortida de prova de SQL, reviseu la base configuració de la bases de dades i de PHP" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "S'està obrint, preneu paciència..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Redueix la llista de canals" -#: index.php:169 +#: index.php:162 #, fuzzy msgid "Show articles" msgstr "Articles mémorisés" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Adaptatiu" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Tots els articles" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "Marcats" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "Publicats" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "Per llegir" -#: index.php:177 +#: index.php:170 #, fuzzy msgid "Unread First" msgstr "Per llegir" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Ignora la puntuació" -#: index.php:182 +#: index.php:175 #, fuzzy msgid "Sort articles" msgstr "Articles mémorisés" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Per defecte" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "TÃtol" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Marca'l com a llegit" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Hi ha una nova versió de Tiny Tiny RSS!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Accions..." -#: index.php:233 +#: index.php:225 #, fuzzy msgid "Preferences..." msgstr "Preferències" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Cerca..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Accions sobre els canals:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "Subscriviu-vos al canal" -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Edita aquest canal..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Canvia la puntuació del canal" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Dóna't de baixa" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Tots els canals" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Mostra/amaga els canals llegits" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Altres accions:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "" - -#: index.php:247 -#, fuzzy -msgid "Show tag cloud..." -msgstr "Núvol d'etiquetes" - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 #, fuzzy msgid "Toggle widescreen mode" msgstr "Canvia al mode de reordenació de categories" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "" -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Crea una etiqueta" -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Crea un filtre..." -#: index.php:252 +#: index.php:240 #, fuzzy msgid "Keyboard shortcuts help" msgstr "Dreceres de teclat" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Surt" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Preferències" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Dreceres de teclat" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Surt de les preferències" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Canals" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "Filtres" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Etiquetes" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Usuaris" -#: register.php:186 +#: prefs.php:132 +msgid "System" +msgstr "" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "Creeu un compte nou" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "L'administrador ha deshabilitat els registres de nous usuaris." -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Torna a Tiny Tiny RSS" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "La vostra contrasenya temporal s'enviarà a l'adreça electrònica especificada. Els comptes en els quals no s'hagi entrat almenys un cop s'eliminaran passades 24 hores des de l'enviament de la contrasenya." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Usuari desitjat:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "Comprova la disponibilitat" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "Adreça electrònica:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Quant és dos més dos:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Envia el registre" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "La vostra informació de registre és incompleta." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Aquest nom d'usuari ja existeix." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "Ha fallat el regsitre" -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "S'ha creat el compte." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "Actualment no es permet el registre de nous usuaris." -#: update.php:56 +#: update.php:55 #, fuzzy msgid "Tiny Tiny RSS data update script." msgstr "La base de dades de Tiny Tiny RSS està actualitzada." #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Sense categoria" @@ -519,350 +515,339 @@ msgstr[1] "Articles marcats" msgid "No feeds found." msgstr "No s'ha trobat cap canal." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Especial" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Tots els canals" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Articles marcats" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Articles publicats" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Articles nous" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "Tots els articles" -#: include/functions.php:1846 +#: include/functions.php:1892 #, fuzzy msgid "Archived articles" msgstr "Articles mémorisés" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Navegació" -#: include/functions.php:1912 +#: include/functions.php:1958 #, fuzzy msgid "Open next feed" msgstr "Canals generats" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "" -#: include/functions.php:1914 +#: include/functions.php:1960 #, fuzzy msgid "Open next article" msgstr "Mostra el contingut original de l'article" -#: include/functions.php:1915 +#: include/functions.php:1961 #, fuzzy msgid "Open previous article" msgstr "Mostra el contingut original de l'article" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "" -#: include/functions.php:1918 +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" msgstr "" -#: include/functions.php:1919 +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" msgstr "" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Mostra el dià leg de cerca" -#: include/functions.php:1921 +#: include/functions.php:1967 #, fuzzy msgid "Article" msgstr "Tots els articles" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Commuta els marcats" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "Commuta els publicats" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Commuta els no llegits" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Edita les etiquetes" -#: include/functions.php:1926 +#: include/functions.php:1972 #, fuzzy msgid "Dismiss selected" msgstr "Esteu segur que voleu eliminar els articles seleccionats de l'etiqueta?" -#: include/functions.php:1927 +#: include/functions.php:1973 #, fuzzy msgid "Dismiss read" msgstr "Publica l'article" -#: include/functions.php:1928 +#: include/functions.php:1974 #, fuzzy msgid "Open in new window" msgstr "Obre l'article en una finestra nova" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 #, fuzzy msgid "Mark below as read" msgstr "Marca'l com a llegit" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 #, fuzzy msgid "Mark above as read" msgstr "Marca'l com a llegit" -#: include/functions.php:1931 +#: include/functions.php:1977 #, fuzzy msgid "Scroll down" msgstr "Fet!" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "" -#: include/functions.php:1933 +#: include/functions.php:1979 #, fuzzy msgid "Select article under cursor" msgstr "Seleccioneu un article mitjançant el ratolÃ." -#: include/functions.php:1934 +#: include/functions.php:1980 #, fuzzy msgid "Email article" msgstr "Tots els articles" -#: include/functions.php:1935 +#: include/functions.php:1981 #, fuzzy msgid "Close/collapse article" msgstr "Buida els articles" -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" msgstr "Canvia al mode de reordenació de categories" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 #, fuzzy msgid "Toggle embed original" msgstr "Canvia al mode de reordenació de categories" -#: include/functions.php:1939 +#: include/functions.php:1985 #, fuzzy msgid "Article selection" msgstr "Accions actives de l'article" -#: include/functions.php:1940 +#: include/functions.php:1986 #, fuzzy msgid "Select all articles" msgstr "Buida els articles" -#: include/functions.php:1941 +#: include/functions.php:1987 #, fuzzy msgid "Select unread" msgstr "Purga els articles per llegir" -#: include/functions.php:1942 +#: include/functions.php:1988 #, fuzzy msgid "Select starred" msgstr "Marca'l com a destacat" -#: include/functions.php:1943 +#: include/functions.php:1989 #, fuzzy msgid "Select published" msgstr "Purga els articles per llegir" -#: include/functions.php:1944 +#: include/functions.php:1990 #, fuzzy msgid "Invert selection" msgstr "Accions actives de l'article" -#: include/functions.php:1945 +#: include/functions.php:1991 #, fuzzy msgid "Deselect everything" msgstr "Buida els articles" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Canal" -#: include/functions.php:1947 +#: include/functions.php:1993 #, fuzzy msgid "Refresh current feed" msgstr "Actualitza els canals actius" -#: include/functions.php:1948 +#: include/functions.php:1994 #, fuzzy msgid "Un/hide read feeds" msgstr "Mostra/amaga els canals llegits" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "Subscriu-te al canal" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Edita el canal" -#: include/functions.php:1952 +#: include/functions.php:1998 #, fuzzy msgid "Reverse headlines" msgstr "Inverteix l'ordre de les capçaleres (les més antigues les primeres)" -#: include/functions.php:1953 +#: include/functions.php:1999 #, fuzzy msgid "Debug feed update" msgstr "S'ha acabat l'actualització dels canals." -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Marca tots els canals com a llegits" -#: include/functions.php:1955 +#: include/functions.php:2001 #, fuzzy msgid "Un/collapse current category" msgstr "Clica-hi per a reduir la categoria" -#: include/functions.php:1956 +#: include/functions.php:2002 #, fuzzy msgid "Toggle combined mode" msgstr "Canvia al mode de reordenació de categories" -#: include/functions.php:1957 +#: include/functions.php:2003 #, fuzzy msgid "Toggle auto expand in combined mode" msgstr "Canvia al mode de reordenació de categories" -#: include/functions.php:1958 +#: include/functions.php:2004 #, fuzzy msgid "Go to" msgstr "Vés a..." -#: include/functions.php:1960 +#: include/functions.php:2006 #, fuzzy msgid "Fresh" msgstr "Actualitza" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "Núvol d'etiquetes" -#: include/functions.php:1965 +#: include/functions.php:2011 #, fuzzy msgid "Other" msgstr "Altres:" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "Crea una etiqueta" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "Crea un filtre" -#: include/functions.php:1968 +#: include/functions.php:2014 #, fuzzy msgid "Un/collapse sidebar" msgstr "Redueix la barra lateral" -#: include/functions.php:1969 +#: include/functions.php:2015 #, fuzzy msgid "Show help dialog" msgstr "Mostra el dià leg de cerca" -#: include/functions.php:2492 +#: include/functions.php:2536 #, fuzzy, php-format msgid "Search results: %s" msgstr "Resultats de la cerca" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -#, fuzzy -msgid "Click to play" -msgstr "Feu clic per editar" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "sense etiqueta" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Edita les etiquetes d'aquest article" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 #, fuzzy msgid "Originally from:" msgstr "Mostra el contingut original de l'article" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 #, fuzzy msgid "Feed URL" msgstr "Canal" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -874,83 +859,86 @@ msgstr "Canal" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Tanca la finestra" -#: include/functions.php:3451 +#: include/functions.php:3458 #, fuzzy msgid "(edit note)" msgstr "edita la nota" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "tipus desconegut" -#: include/functions.php:3742 +#: include/functions.php:3749 #, fuzzy msgid "Attachments" msgstr "Adjuncions:" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Usuari:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Contrasenya:" -#: include/login_form.php:197 +#: include/login_form.php:199 #, fuzzy msgid "I forgot my password" msgstr "El nom d'usuari o la contrasenya és incorrecte" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Idioma:" - -#: include/login_form.php:209 +#: include/login_form.php:205 #, fuzzy msgid "Profile:" msgstr "Fitxer:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 #, fuzzy msgid "Default profile" msgstr "Nombre maximal d'articles par défaut" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Registreu-vos" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "No s'ha pogut validar la sessió (IP incorrecta)" @@ -967,168 +955,168 @@ msgstr "Etiquetes per aquest article (separades per comes):" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "Desa" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Cancel·la" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 #, fuzzy msgid "Share with Tiny Tiny RSS" msgstr "Torna a Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "Titre :" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 #, fuzzy msgid "Content:" msgstr "Contingut" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 #, fuzzy msgid "Labels:" msgstr "Etiquetes" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "" -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 #, fuzzy msgid "Not logged in" msgstr "Última connexió el" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "El nom d'usuari o la contrasenya és incorrecte" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Ja esteu subscrit a <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Subscrit a <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Ja esteu subscrit a <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, fuzzy, php-format msgid "No feeds found in <b>%s</b>." msgstr "No s'ha trobat cap canal." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 #, fuzzy msgid "Multiple feed URLs found." msgstr "L'adreça URL del canal ha canviat." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Ja esteu subscrit a <b>%s</b>." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 #, fuzzy msgid "Subscribe to selected feed" msgstr "Us voleu donar de baixa dels canals seleccionats?" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Edita les opcions de les subscripcions" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 #, fuzzy msgid "Password recovery" msgstr "Contrasenya:" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "" -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "Reinicia la contrasenya" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "" -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 #, fuzzy msgid "Go back" msgstr "Vés enrere" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "No teniu prou permisos per a executar aquest script." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Eina d'actualització de la base de dades" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Aplica les actualitzacions" @@ -1187,7 +1175,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, fuzzy, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Hi ha una nova versió de Tiny Tiny RSS!" @@ -1197,7 +1185,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1209,123 +1197,128 @@ msgstr "" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -#, fuzzy -msgid "Visit the website" -msgstr "Visiteu el web oficial" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "Dernière mise à jour :" -#: classes/feeds.php:83 +#: classes/feeds.php:75 #, fuzzy msgid "View as RSS feed" msgstr "Visualitza els canals" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 #, fuzzy msgid "View as RSS" msgstr "Visualitza les etiquetes" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Selecciona:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "Tot" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Inverteix" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Cap" -#: classes/feeds.php:101 +#: classes/feeds.php:93 #, fuzzy msgid "More..." msgstr "Ouverture de l'aide..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Commuta la selecció" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Selecció:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 #, fuzzy msgid "Set score" msgstr "Puntuació" -#: classes/feeds.php:115 +#: classes/feeds.php:107 #, fuzzy msgid "Archive" msgstr "Data de l'article" -#: classes/feeds.php:117 +#: classes/feeds.php:109 #, fuzzy msgid "Move back" msgstr "Vés enrere" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 #, fuzzy msgid "Delete" msgstr "Per defecte" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 #, fuzzy msgid "Forward by email" msgstr "Marca l'article" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Flux :" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "No s'ha trobat el canal." -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "No ho purguis mai" + +#: classes/feeds.php:360 #, fuzzy, php-format msgid "Imported at %s" msgstr "Importeu" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "Marca'l com a llegit" @@ -1377,9 +1370,9 @@ msgid "Feed or site URL" msgstr "Canal" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "Posa'l a la categoria:" @@ -1390,24 +1383,24 @@ msgstr "Tots els canals" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "Autenticació" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Entra" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 #, fuzzy msgid "Password" msgstr "Contrasenya:" @@ -1418,7 +1411,7 @@ msgstr "Aquest canal requereix autenticació." #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "Subscriu-t'hi" @@ -1431,8 +1424,8 @@ msgstr "Més canals" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "Cerca" @@ -1456,8 +1449,8 @@ msgstr "LÃmit:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Suprimeix" @@ -1542,17 +1535,39 @@ msgstr "S'està afegint el canal..." msgid "Processing category: %s" msgstr "Posa'l a la categoria:" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "Error: si us plau carregueu el fitxer OPML." + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Error: si us plau carregueu el fitxer OPML." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "Error: si us plau carregueu el fitxer OPML." + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Error mentre s'analitza el document." #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "No teniu permisos per a obrir aquesta pestanya." @@ -1586,8 +1601,8 @@ msgid "Change password to" msgstr "Nova contrasenya" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Opcions" @@ -1633,13 +1648,13 @@ msgstr "[tt-rss] Notificació de canvi de contrasenya" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 #, fuzzy msgid "Select" msgstr "Selecciona:" @@ -1655,7 +1670,7 @@ msgstr "Dià riament" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Edita" @@ -1668,7 +1683,7 @@ msgid "Last login" msgstr "Última connexió" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "Feu clic per editar" @@ -1682,7 +1697,7 @@ msgstr "No s'ha trobat cap usuari que coinicideixi. " #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Descriptif" @@ -1725,43 +1740,43 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "" #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Coincidència" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 #, fuzzy msgid "Apply actions" msgstr "Accions dels canals" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "Activat" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 #, fuzzy msgid "Match any rule" msgstr "Basat en:" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 #, fuzzy msgid "Inverse matching" msgstr "Coincidència inversa" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "Tester" @@ -1780,66 +1795,66 @@ msgid "Combine" msgstr "" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 #, fuzzy msgid "Reset sort order" msgstr "Reinicia la contrasenya" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Canvia la puntuació dels articles" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Crea" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "al camp" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "a" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #, fuzzy msgid "Save rule" msgstr "Desa" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 #, fuzzy msgid "Add rule" msgstr "S'està afegint la categoria..." -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Acció a realitzar:" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "amb els parà metres:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #, fuzzy msgid "Save action" msgstr "Quadre d'accions" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 #, fuzzy msgid "Add action" msgstr "Accions dels canals" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 #, fuzzy msgid "[No caption]" msgstr "Descriptif" @@ -1993,7 +2008,7 @@ msgid "Purge unread articles" msgstr "Purga els articles per llegir" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Inverteix l'ordre de les capçaleres (les més antigues les primeres)" @@ -2036,7 +2051,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "Elimina les etiquetes HTML més freqüents en llegir els articles." #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 #, fuzzy msgid "Customize stylesheet" msgstr "URL de la fulla d'estils personalitzada." @@ -2046,7 +2061,7 @@ msgid "Customize CSS stylesheet to your liking" msgstr "" #: classes/pref/prefs.php:55 -msgid "User timezone" +msgid "Time zone" msgstr "" #: classes/pref/prefs.php:56 @@ -2058,22 +2073,28 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Seleccioneu una interfÃcie" +#, fuzzy +msgid "Language" +msgstr "Idioma:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +#, fuzzy +msgid "Theme" +msgstr "InterfÃcies" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "El camp de contrasenya antiga no pot estar buit." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "El camp de contrasenya nova no pot estar buit." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Les contrasenyes no coincideixen." @@ -2081,240 +2102,250 @@ msgstr "Les contrasenyes no coincideixen." msgid "Function not supported by authentication module." msgstr "" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "S'ha desat la configuració" -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Es desconeix l'opció %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 #, fuzzy msgid "Your personal data has been saved." msgstr "S'ha modificat la contrasenya." -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 #, fuzzy msgid "Personal data / Authentication" msgstr "Autenticació" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Dades personals" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "Adreça electrònica" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Nivell d'accés" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 #, fuzzy msgid "Save data" msgstr "Desa" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 #, fuzzy msgid "Your password is at default value, please change it." msgstr "" "La contrasenya actual és la predeterminada,\n" "\t\t\t\t\t\t penseu en modificar-la." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Contrasenya antiga" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Nova contrasenya" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Confirmeu la contrasenya" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Canvia la contrasenya" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 #, fuzzy msgid "Enter your password" msgstr "El nom d'usuari o la contrasenya és incorrecte" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 #, fuzzy msgid "Disable OTP" msgstr "(Desactivat)" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "" -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "Si us plau, escriviu una nota per aquest article:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 #, fuzzy msgid "Enable OTP" msgstr "Activat" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 #, fuzzy msgid "Customize" msgstr "URL de la fulla d'estils personalitzada." -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 #, fuzzy msgid "Register" msgstr "Registrat" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Desa la configuració" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 #, fuzzy msgid "Save and exit preferences" msgstr "Surt de les preferències" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 #, fuzzy msgid "Manage profiles" msgstr "Crea un filtre" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Torna als parà metres per defecte" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 #, fuzzy msgid "Description" msgstr "description" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 #, fuzzy msgid "Clear data" msgstr "Esborra les dades del canal" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 #, fuzzy msgid "Enable selected plugins" msgstr "Habilita les icones dels canals." -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "El nom d'usuari o la contrasenya és incorrecte" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 #, fuzzy msgid "Incorrect password" msgstr "El nom d'usuari o la contrasenya és incorrecte" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "" -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 #, fuzzy msgid "Create profile" msgstr "Crea un filtre" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 #, fuzzy msgid "(active)" msgstr "Adaptatiu" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 #, fuzzy msgid "Remove selected profiles" msgstr "Esteu segur que voleu suprimir els filtres seleccionats?" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 #, fuzzy msgid "Activate profile" msgstr "Esteu segur que voleu suprimir els filtres seleccionats?" @@ -2323,267 +2354,292 @@ msgstr "Esteu segur que voleu suprimir els filtres seleccionats?" msgid "Check to enable field" msgstr "Seleccioneu-ho per activar els camps" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 #, fuzzy msgid "Feed Title" msgstr "TÃtol" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "Actualitza" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Neteja d'articles:" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "" -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 #, fuzzy msgid "Hide from Popular feeds" msgstr "Amaga-ho de la llista de canals" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "Inclou-lo en el resum diari per correu electrònic" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Mostra les imatges adjuntes" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Emmagatzema les imatges localment" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 #, fuzzy msgid "Mark updated articles as unread" msgstr "Esteu segur que voleu marcar tots els articles com a llegits?" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 #, fuzzy msgid "Icon" msgstr "Action" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 #, fuzzy msgid "Resubscribe to push updates" msgstr "Subscrit als canals:" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "" -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "Fet!" -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 #, fuzzy msgid "Feeds with errors" msgstr "Editor de canals" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 #, fuzzy msgid "Inactive feeds" msgstr "Tots els canals" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 #, fuzzy msgid "Edit selected feeds" msgstr "S'estan purgant els canals seleccionats..." -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 #, fuzzy msgid "Batch subscribe" msgstr "Dóna't de baixa" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 #, fuzzy msgid "Categories" msgstr "Catégorie :" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 #, fuzzy msgid "Add category" msgstr "S'està afegint la categoria..." -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 #, fuzzy msgid "Remove selected" msgstr "Esteu segur que voleu suprimir els filtres seleccionats?" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 #, fuzzy msgid "(Un)hide empty categories" msgstr "Edita les categories" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 #, fuzzy msgid "More actions..." msgstr "Accions..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Purger manuellement" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "Esborra les dades del canal" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "" -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "" -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 #, fuzzy msgid "Import my OPML" msgstr "S'està important OPML (s'està utilitzant l'extensió DOMXML)..." -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 #, fuzzy msgid "Include settings" msgstr "Inclou-lo en el resum diari per correu electrònic" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 #, fuzzy msgid "Export OPML" msgstr "Exporta en format OPML" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 #, fuzzy msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "Els articles publicats s'exporten en un canal RSS públic al qual s'hi pot subscriure qualsevol que en conegui l'adreça URL." -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "" -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 #, fuzzy msgid "Firefox integration" msgstr "Integració al Firefox" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "Podeu utilitzar Tiny Tiny RSS com a lector de canals amb el Firefox fent clic en el següent enllaç." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Feu clic aquà per a desar aquesta pà gina web com un canal." -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 #, fuzzy msgid "Published & shared articles / Generated feeds" msgstr "Esteu segur que voleu canviar la puntuació dels articles en les etiquetes personalitzades?" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 #, fuzzy msgid "Published articles and generated feeds" msgstr "Esteu segur que voleu canviar la puntuació dels articles en les etiquetes personalitzades?" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "Els articles publicats s'exporten en un canal RSS públic al qual s'hi pot subscriure qualsevol que en conegui l'adreça URL." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 #, fuzzy msgid "Display URL" msgstr "afficher les étiquettes" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 #, fuzzy msgid "Articles shared by URL" msgstr "Marca l'article" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "" -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 #, fuzzy msgid "Unshare all articles" msgstr "Articles mémorisés" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 #, fuzzy msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "Aquests canals no s'han actualitzat degut als següents errors:" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 #, fuzzy msgid "Click to edit feed" msgstr "Feu clic per editar" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 #, fuzzy msgid "Unsubscribe from selected feeds" msgstr "Us voleu donar de baixa dels canals seleccionats?" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Aquests canals no s'han actualitzat degut als següents errors:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 #, fuzzy msgid "Feeds require authentication." msgstr "Aquest canal requereix autenticació." -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +#, fuzzy +msgid "Refresh" +msgstr "Actualitza" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +msgid "Filename" +msgstr "" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Data" + +#: plugins/digest/digest_body.php:57 #, fuzzy msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" @@ -2591,33 +2647,33 @@ msgstr "" " /t/t per tal que aquesta aplicació funcioni correctament. Si us plau reviseu els vostres\n" "/t/t parà metres del navegador." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Hola, " -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 #, fuzzy msgid "Close article" msgstr "Buida els articles" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 #, fuzzy msgid "Configuration saved." msgstr "S'ha desat la configuració" @@ -2635,17 +2691,17 @@ msgstr "S'ha modificat la contrasenya." msgid "Old password is incorrect." msgstr "La contrasenya antiga és incorrecta." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "" @@ -2653,447 +2709,457 @@ msgstr "" msgid "Open regular version" msgstr "" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 #, fuzzy msgid "Enable categories" msgstr "Utiliser les catégories de flux" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 #, fuzzy msgid "Browse categories like folders" msgstr "Reinicia l'ordre de les categories" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 #, fuzzy msgid "Show images in posts" msgstr "No mostris imatges en els articles" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 #, fuzzy msgid "Hide read articles and feeds" msgstr "Mostra/amaga els canals llegits" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 #, fuzzy msgid "Sort feeds by unread count" msgstr "Ordena els canals per articles no llegits" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 #, fuzzy msgid "Multiple articles" msgstr "Tots els articles" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 #, fuzzy msgid "Forward selected article(s) by email." msgstr "Marca l'article" -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 #, fuzzy msgid "Close this dialog" msgstr "Tanca la finestra" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, fuzzy, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "Torna a Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 #, fuzzy msgid "Subscribe in Tiny Tiny RSS" msgstr "Torna a Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 #, fuzzy msgid "Article archive" msgstr "Data de l'article" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "" -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 #, fuzzy msgid "Export my data" msgstr "Exporta en format OPML" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importeu" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 #, fuzzy msgid "Could not import: incorrect schema version." msgstr "No s'ha pogut trobar el fitxer d'esquema necessari, es necessita la versió:" -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "" -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, fuzzy, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "Edita les etiquetes" msgstr[1] "Edita les etiquetes" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, fuzzy, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "Ja s'ha importat" msgstr[1] "Ja s'ha importat" -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, fuzzy, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "No heu seleccionat cap canal." msgstr[1] "No heu seleccionat cap canal." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "" -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 #, fuzzy msgid "Prepare data" msgstr "Desa" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +#, fuzzy +msgid "No file uploaded." +msgstr "No hi ha cap fitxer OPML per a carregar." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 #, fuzzy msgid "To:" msgstr "Dalt" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 #, fuzzy msgid "Subject:" msgstr "Selecciona:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 #, fuzzy msgid "Send e-mail" msgstr "Canvieu l'adreça electrònica" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 #, fuzzy msgid "Edit article note" msgstr "Edita les etiquetes" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 #, fuzzy msgid "Set value" msgstr "Marca'l com a destacat" -#: plugins/googlereaderimport/init.php:72 -#, fuzzy -msgid "No file uploaded." -msgstr "No hi ha cap fitxer OPML per a carregar." - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 #, fuzzy msgid "Linked" msgstr "Enllaç" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 #, fuzzy msgid "Access key:" msgstr "Nivell d'accés:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 #, fuzzy msgid "Access key" msgstr "Nivell d'accés" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "" -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 #, fuzzy msgid "Generate new key" msgstr "Canals generats" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 #, fuzzy msgid "Link instance" msgstr "Edita les etiquetes" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 #, fuzzy msgid "Stored feeds" msgstr "Més canals" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 #, fuzzy msgid "Create link" msgstr "Crea" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 #, fuzzy msgid "Share by URL" msgstr "Marca l'article" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 #, fuzzy msgid "Update Tiny Tiny RSS" msgstr "Torna a Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 #, fuzzy msgid "Your Tiny Tiny RSS installation is up to date." msgstr "La base de dades de Tiny Tiny RSS està actualitzada." -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." msgstr "" -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 #, fuzzy msgid "Ready to update." msgstr "Última actualització:" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 #, fuzzy msgid "Start update" msgstr "Última actualització:" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Esteu segur que voleu marcar tots els articles de %s com a llegits?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 #, fuzzy msgid "Mark all articles in %s older than 1 day as read?" msgstr "Esteu segur que voleu marcar tots els articles de %s com a llegits?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 #, fuzzy msgid "Mark all articles in %s older than 1 week as read?" msgstr "Esteu segur que voleu marcar tots els articles de %s com a llegits?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 #, fuzzy msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "Esteu segur que voleu marcar tots els articles de %s com a llegits?" -#: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." msgstr "" -#: js/functions.js:214 -msgid "close" +#: js/functions.js:107 +msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "" -#: js/functions.js:586 +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "Feu clic per editar" + +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 #, fuzzy msgid "Upload complete." msgstr "Articles mémorisés" -#: js/functions.js:692 +#: js/functions.js:718 #, fuzzy msgid "Remove stored feed icon?" msgstr "Elimina les dades emmagatzemades" -#: js/functions.js:697 +#: js/functions.js:723 #, fuzzy msgid "Removing feed icon..." msgstr "S'està eliminant el canal..." -#: js/functions.js:702 +#: js/functions.js:728 #, fuzzy msgid "Feed icon removed." msgstr "No s'ha trobat el canal." -#: js/functions.js:724 +#: js/functions.js:750 #, fuzzy msgid "Please select an image file to upload." msgstr "Si us plau, seleccioneu un canal." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "" -#: js/functions.js:727 +#: js/functions.js:753 #, fuzzy msgid "Uploading, please wait..." msgstr "S'està obrint, preneu paciència..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "Si us plau, escriviu un tÃtol per a l'etiqueta:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "No s'ha pogut crear l'etiqueta: TÃtol desconegut." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "Subscriviu-vos al canal" -#: js/functions.js:818 +#: js/functions.js:844 #, fuzzy msgid "Subscribed to %s" msgstr "Subscrit als canals:" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "" -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "" -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "S'estan purgant els canals seleccionats..." + +#: js/functions.js:874 #, fuzzy msgid "Couldn't download the specified URL: %s" msgstr "No s'ha pogut subscriure: no s'ha especificat la URL del canal." +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 #, fuzzy msgid "You are already subscribed to this feed." @@ -3123,7 +3189,7 @@ msgid "Subscription reset." msgstr "Subscriviu-vos al canal" #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "Us voleu donar de baixa de %s ?" @@ -3131,77 +3197,77 @@ msgstr "Us voleu donar de baixa de %s ?" msgid "Removing feed..." msgstr "S'està eliminant el canal..." -#: js/functions.js:1323 +#: js/functions.js:1324 #, fuzzy msgid "Please enter category title:" msgstr "Si us plau, escriviu una nota per aquest article:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "S'està intentant canviar l'adreça..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "No podeu editar aquest tipus de canal." -#: js/functions.js:1560 +#: js/functions.js:1561 #, fuzzy msgid "Edit Feed" msgstr "Edita el canal" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 #, fuzzy msgid "Saving data..." msgstr "S'està desant el canal..." -#: js/functions.js:1598 +#: js/functions.js:1599 #, fuzzy msgid "More Feeds" msgstr "Més canals" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "No heu seleccionat cap canal." -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "" -#: js/functions.js:1740 +#: js/functions.js:1741 #, fuzzy msgid "Feeds with update errors" msgstr "Erreurs de mise à jour" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 #, fuzzy msgid "Remove selected feeds?" msgstr "Esteu segur que voleu suprimir els filtres seleccionats?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 #, fuzzy msgid "Removing selected feeds..." msgstr "S'estan suprimint els filtres seleccionats..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Ajuda" @@ -3259,7 +3325,7 @@ msgid "Removing selected labels..." msgstr "S'estan seleccionat les etiquetes seleccionades..." #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "No heu seleccionat cap etiqueta." @@ -3387,348 +3453,345 @@ msgstr "Primerament heu de seleccionar un canal." msgid "Importing, please wait..." msgstr "S'està obrint, preneu paciència..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "Esteu segur que voleu establir els valors per defecte?" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "" -#: js/prefs.js:1088 +#: js/prefs.js:1102 #, fuzzy msgid "Removing category..." msgstr "Crea una categoria" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Esteu segur que voleu suprimir les categories seleccionades?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "S'estan seleccionant les categories seleccionades..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "No heu seleccionat cap categoria." -#: js/prefs.js:1133 +#: js/prefs.js:1147 #, fuzzy msgid "Category title:" msgstr "Edita les categories" -#: js/prefs.js:1137 +#: js/prefs.js:1151 #, fuzzy msgid "Creating category..." msgstr "Crea un filtre..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 #, fuzzy msgid "Feeds without recent updates" msgstr "Erreurs de mise à jour" -#: js/prefs.js:1213 +#: js/prefs.js:1227 #, fuzzy msgid "Replace current OPML publishing address with a new one?" msgstr "Voleu canviar l'adreça de publicació per una de nova?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "S'està netejant el canal..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Esteu segur que voleu canviar la puntuació dels articles en les etiquetes personalitzades?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 #, fuzzy msgid "Rescoring selected feeds..." msgstr "S'està netejant el canal seleccionat..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "Esteu segur que voleu recuperar tots els articles? Aquesta operació pot durar molt temps." -#: js/prefs.js:1348 +#: js/prefs.js:1362 #, fuzzy msgid "Rescoring feeds..." msgstr "Suppression d'un flux..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 #, fuzzy msgid "Reset selected labels to default colors?" msgstr "Esteu segur que voleu canviar els colors de les etiquetes pels colors per defecte?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "" -#: js/prefs.js:1414 +#: js/prefs.js:1428 #, fuzzy msgid "Removing selected profiles..." msgstr "S'estan suprimint els filtres seleccionats..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 #, fuzzy msgid "No profiles are selected." msgstr "No hi ha cap article seleccionat." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 #, fuzzy msgid "Activate selected profile?" msgstr "Esteu segur que voleu suprimir els filtres seleccionats?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 #, fuzzy msgid "Please choose a profile to activate." msgstr "Primerament heu de seleccionar un canal." -#: js/prefs.js:1458 +#: js/prefs.js:1472 #, fuzzy msgid "Creating profile..." msgstr "Crea un filtre" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 #, fuzzy msgid "Clearing URLs..." msgstr "S'està netejant el canal..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 #, fuzzy msgid "Generated URLs cleared." msgstr "Canals generats" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Éditeur d'intitulé" -#: js/prefs.js:1771 +#: js/prefs.js:1785 #, fuzzy msgid "Subscribing to feeds..." msgstr "S'està subscrivint a un canal..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Esteu segur que voleu marcar tots els articles com a llegits?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "S'estan marcant tots els canals com a llegits..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 #, fuzzy msgid "Please enable mail plugin first." msgstr "Primerament heu de seleccionar un canal." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 #, fuzzy msgid "Please enable embed_original plugin first." msgstr "Primerament heu de seleccionar un canal." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "No us podeu donar de baixa de la categoria." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Primerament heu de seleccionar un canal." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "No podeu canviar la puntuació d'aquest tipus de canal." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "Esteu segur que voleu canviar la puntuació dels articles a %s?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "S'estan canviant la puntuació dels articles" -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 #, fuzzy msgid "New version available!" msgstr "Hi ha una nova versió de Tiny Tiny RSS!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 #, fuzzy msgid "Cancel search" msgstr "Cancel·la" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Treu la marca de l'article" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Marca l'article" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Deixa de publicar l'article" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Publica l'article" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "No hi ha cap article seleccionat." +msgstr[1] "No hi ha cap article seleccionat." + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "No hi ha cap article seleccionat." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 #, fuzzy msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "Esteu segur que voleu marcar els %d articles seleccionats de %s com a llegits?" msgstr[1] "Esteu segur que voleu marcar els %d articles seleccionats de %s com a llegits?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 #, fuzzy msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "Esteu segur que voleu eliminar els articles seleccionats de l'etiqueta?" msgstr[1] "Esteu segur que voleu eliminar els articles seleccionats de l'etiqueta?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 #, fuzzy msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "Esteu segur que voleu marcar els %d articles seleccionats de %s com a llegits?" msgstr[1] "Esteu segur que voleu marcar els %d articles seleccionats de %s com a llegits?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 #, fuzzy msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "Articles marcats" msgstr[1] "Articles marcats" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 #, fuzzy msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "Esteu segur que voleu marcar els %d articles seleccionats de %s com a llegits?" msgstr[1] "Esteu segur que voleu marcar els %d articles seleccionats de %s com a llegits?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 #, fuzzy msgid "Edit article Tags" msgstr "Edita les etiquetes" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "S'estan desant les etiquetes de l'article" -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "No hi ha cap article seleccionat." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "No s'han trobat articles per a marcar." -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 #, fuzzy msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "Esteu segur que voleu marcar %d article(s) com a llegit(s) ?" msgstr[1] "Esteu segur que voleu marcar %d article(s) com a llegit(s) ?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 #, fuzzy msgid "Open original article" msgstr "Mostra el contingut original de l'article" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 #, fuzzy msgid "Display article URL" msgstr "afficher les étiquettes" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 #, fuzzy msgid "Toggle marked" msgstr "Commuta els marcats" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Assigna-li l'etiqueta" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 #, fuzzy msgid "Remove label" msgstr "Esteu segur que voleu suprimir les etiquetes seleccionades?" -#: js/viewfeed.js:2017 -#, fuzzy -msgid "Playing..." -msgstr "S'està carregant la llista de canals..." - -#: js/viewfeed.js:2018 -#, fuzzy -msgid "Click to pause" -msgstr "Feu clic per editar" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 #, fuzzy msgid "Please enter new score for selected articles:" msgstr "Si us plau, escriviu una nota per aquest article:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 #, fuzzy msgid "Please enter new score for this article:" msgstr "Si us plau, escriviu una nota per aquest article:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 #, fuzzy msgid "Article URL:" msgstr "Tots els articles" @@ -3853,6 +3916,25 @@ msgid "Backup your tt-rss directory before continuing. Please type 'yes' to cont msgstr "" #, fuzzy +#~ msgid "Show tag cloud..." +#~ msgstr "Núvol d'etiquetes" + +#, fuzzy +#~ msgid "Click to play" +#~ msgstr "Feu clic per editar" + +#, fuzzy +#~ msgid "Visit the website" +#~ msgstr "Visiteu el web oficial" + +#~ msgid "Select theme" +#~ msgstr "Seleccioneu una interfÃcie" + +#, fuzzy +#~ msgid "Playing..." +#~ msgstr "S'està carregant la llista de canals..." + +#, fuzzy #~ msgid "Default interval between feed updates" #~ msgstr "Interval per defecte per a les actualitzacions dels canals (en minuts)" @@ -3935,10 +4017,6 @@ msgstr "" #~ msgstr "La contrasenya antiga és incorrecta." #, fuzzy -#~ msgid "Refresh" -#~ msgstr "Actualitza" - -#, fuzzy #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "Edita el canal" @@ -3954,9 +4032,6 @@ msgstr "" #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "Esteu segur que voleu marcar tots els articles visibles de %s com a llegits ?" -#~ msgid "Date" -#~ msgstr "Data" - #~ msgid "Score" #~ msgstr "Puntuació" @@ -4247,10 +4322,6 @@ msgstr "" #~ msgid "Click to expand article" #~ msgstr "Clica-hi per a veure el cos de l'article" -#, fuzzy -#~ msgid "Unable to load article." -#~ msgstr "Error: si us plau carregueu el fitxer OPML." - #~ msgid "Update post on checksum change" #~ msgstr "Actualitza una entrada si canvia la suma de verificació." @@ -4654,9 +4725,6 @@ msgstr "" #~ msgid "The configuration was reset to defaults." #~ msgstr "La configuració s'ha reiniciat als valors per defecte." -#~ msgid "Themes" -#~ msgstr "InterfÃcies" - #~ msgid "Change theme" #~ msgstr "Canvia la interfÃcie" @@ -4858,10 +4926,6 @@ msgstr "" #~ msgid "Site:" #~ msgstr "Titre :" -#, fuzzy -#~ msgid "Last updated:" -#~ msgstr "Dernière mise à jour :" - #~ msgid "Other feeds: Top 25" #~ msgstr "Autres flux : Top 25" diff --git a/locale/cs_CZ/LC_MESSAGES/messages.mo b/locale/cs_CZ/LC_MESSAGES/messages.mo Binary files differindex 23b0c1a52..40447152d 100644 --- a/locale/cs_CZ/LC_MESSAGES/messages.mo +++ b/locale/cs_CZ/LC_MESSAGES/messages.mo diff --git a/locale/cs_CZ/LC_MESSAGES/messages.po b/locale/cs_CZ/LC_MESSAGES/messages.po index 209e3243e..b136b2376 100644 --- a/locale/cs_CZ/LC_MESSAGES/messages.po +++ b/locale/cs_CZ/LC_MESSAGES/messages.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" -"PO-Revision-Date: 2013-04-03 11:03+0200\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" +"PO-Revision-Date: 2013-04-27 12:04+0200\n" "Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n" "Language-Team: Czech <kde-i18n-doc@kde.org>\n" "Language: cs\n" @@ -18,88 +18,89 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Lokalize 1.5\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "PoužÃt výchozÃ" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Nikdy neÄistit" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "staršà než týden" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "staršà než 2 týdny" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "staršà než mÄ›sÃc" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "staršà než 2 mÄ›sÃce" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "staršà než 3 mÄ›sÃce" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Výchozà interval" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "Zakázat aktualizace" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "Každých 15 minut" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "Každých 30 minut" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "Každou hodinu" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "Každé 4 hodiny" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "Každých 12 hodin" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "DennÄ›" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "TýdnÄ›" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "Uživatel" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Uživatel s rozÅ¡ÃÅ™enými pravomocemi" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Administrátor" @@ -151,348 +152,345 @@ msgstr "VaÅ¡e verze MySQL nenà podporována. VÃce informacà najdete na oficià msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "Test ochrany proti podvratným SQL dotazům (SQL Injection) selhal, zkontrolujte nastavenà databáze a PHP" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "NaÄÃtám, Äekejte prosÃm..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Sbalit seznam kanálů" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "Zobrazit Älánky" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "AdaptivnÃ" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "VÅ¡echny Älánky" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "S hvÄ›zdiÄkou" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "Publikováno" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "NepÅ™eÄteno" -#: index.php:177 +#: index.php:170 msgid "Unread First" msgstr "Nejprve nepÅ™eÄtené" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "S poznámkou" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Ignorovat hodnocenÃ" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "SeÅ™adit Älánky" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "VýchozÃ" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "Nejprve nejnovÄ›jÅ¡Ã" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "Nejprve nejstarÅ¡Ã" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "Název" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "OznaÄit jako pÅ™eÄtené" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "Staršà než jeden den" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "Staršà než jeden týden" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "Staršà než dva týdny" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "Chyba pÅ™i komunikaci se serverem." -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Je dostupná nová verze Tiny Tiny RSS." -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "ÄŒinnosti..." -#: index.php:233 +#: index.php:225 msgid "Preferences..." msgstr "NastavenÃ..." -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Hledat..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "ÄŒinnosti kanálů:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "PÅ™ihlásit se k odbÄ›ru..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Upravit kanál..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "PÅ™ehodnotit kanál" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "ZruÅ¡it odbÄ›r" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "VÅ¡echny kanály:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Zobrazit/Skrýt pÅ™eÄtené kanály" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Ostatnà Äinnosti:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "PÅ™epnout na souhrn..." - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "Zobrazit seznam znaÄek..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 msgid "Toggle widescreen mode" msgstr "PÅ™epnout Å¡irokoúhlý režim" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "Vybrat podle znaÄek..." -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "VytvoÅ™it Å¡tÃtek..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "VytvoÅ™it filtr..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "NápovÄ›da ke klávesovým zkratkám" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Odhlásit se" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "NastavenÃ" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Klávesové zkratky" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Opustit nastavenÃ" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Kanály" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "Filtry" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Å tÃtky" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Uživatelé" -#: register.php:186 +#: prefs.php:132 +#, fuzzy +msgid "System" +msgstr "Systémové moduly" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "VytvoÅ™it nový úÄet" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "Registrace nových uživatelů jsou zakázány správcem." -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "ZpÄ›t do Tiny Tiny RSS" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "VaÅ¡e doÄasné heslo bude odesláno na zadaný e-mail. ÚÄet, který se do 24 hodin od odeslánà doÄasného hesla nepÅ™ihlásÃ, bude smazán." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Požadované pÅ™ihlaÅ¡ovacà jméno:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "Ověřit dostupnost" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "E-mail:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Kolik je dva plus dva:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Odeslat registraci" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "VaÅ¡e registraÄnà údaje nejsou úplné." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Lituji, uživatelské jméno se již použÃvá." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "Registrace selhala." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "ÚÄet byl úspěšnÄ› vytvoÅ™en." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "Registrace nových uživatelů nynà nejsou povoleny." -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "Skript aktualizace dat Tiny Tiny RSS." #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Bez zaÅ™azenÃ" @@ -508,315 +506,302 @@ msgstr[2] "%d archivovaných Älánků" msgid "No feeds found." msgstr "Nenalezeny žádné kanály." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "SpeciálnÃ" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "VÅ¡echny kanály" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "ÄŒlánky s hvÄ›zdiÄkou" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Publikované Älánky" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Nové Älánky" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "VÅ¡echny Älánky" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "Archivované Älánky" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "Nedávno pÅ™eÄtené" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Navigace" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "OtevÅ™Ãt následujÃcà kanál" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "OtevÅ™Ãt pÅ™edchozà kanál" -#: include/functions.php:1914 +#: include/functions.php:1960 msgid "Open next article" msgstr "OtevÅ™Ãt následujÃcà Älánek" -#: include/functions.php:1915 +#: include/functions.php:1961 msgid "Open previous article" msgstr "OtevÅ™Ãt pÅ™edchozà Älánek" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "OtevÅ™Ãt následujÃcà Älánek (neposouvat dlouhé Älánky)" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "OtevÅ™Ãt pÅ™edchozà Älánek (neposouvat dlouhé Älánky)" -#: include/functions.php:1918 -#, fuzzy +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" -msgstr "OtevÅ™Ãt následujÃcà Älánek (neposouvat dlouhé Älánky)" +msgstr "PÅ™ejÃt na následujÃcà Älánek (nerozbalovat ani neoznaÄovat jako pÅ™eÄtené)" -#: include/functions.php:1919 -#, fuzzy +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" -msgstr "OtevÅ™Ãt pÅ™edchozà Älánek (neposouvat dlouhé Älánky)" +msgstr "PÅ™ejÃt na pÅ™edchozà Älánek (nerozbalovat ani neoznaÄovat jako pÅ™eÄtené)" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Zobrazit dialog hledánÃ" -#: include/functions.php:1921 +#: include/functions.php:1967 msgid "Article" msgstr "ÄŒlánek" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "PÅ™epnout hvÄ›zdiÄku" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "PÅ™epnout publikováno" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "PÅ™epnout pÅ™eÄteno" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Upravit znaÄky" -#: include/functions.php:1926 +#: include/functions.php:1972 msgid "Dismiss selected" msgstr "" -#: include/functions.php:1927 +#: include/functions.php:1973 msgid "Dismiss read" msgstr "" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" msgstr "OtevÅ™Ãt v novém oknÄ›" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 msgid "Mark below as read" msgstr "OznaÄit nÞe jako pÅ™eÄtené" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 msgid "Mark above as read" msgstr "OznaÄit výše jako pÅ™eÄtené" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "Posunout dolů" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "Posunout nahoru" -#: include/functions.php:1933 +#: include/functions.php:1979 msgid "Select article under cursor" msgstr "Vybrat Älánek pod kurzorem" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "Odeslat Älánek e-mailem" -#: include/functions.php:1935 +#: include/functions.php:1981 msgid "Close/collapse article" msgstr "ZavÅ™Ãt/sbalit Älánek" -#: include/functions.php:1936 -#, fuzzy +#: include/functions.php:1982 msgid "Toggle article expansion (combined mode)" -msgstr "PÅ™epnout automatické rozbalenà kombinovaném režimu" +msgstr "PÅ™epnout automatické rozbalenà Älánku (kombinovaný režim)" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 msgid "Toggle embed original" msgstr "PÅ™epnout vložený originál" -#: include/functions.php:1939 +#: include/functions.php:1985 msgid "Article selection" msgstr "VýbÄ›r Älánků" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "Vybrat vÅ¡echny Älánky" -#: include/functions.php:1941 +#: include/functions.php:1987 msgid "Select unread" msgstr "Vybrat nepÅ™eÄtené" -#: include/functions.php:1942 +#: include/functions.php:1988 msgid "Select starred" msgstr "Vybrat s hvÄ›zdiÄkou" -#: include/functions.php:1943 +#: include/functions.php:1989 msgid "Select published" msgstr "Vybrat publikované" -#: include/functions.php:1944 +#: include/functions.php:1990 msgid "Invert selection" msgstr "Obrátit výbÄ›r" -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "ZruÅ¡it výbÄ›r" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Kanál" -#: include/functions.php:1947 +#: include/functions.php:1993 msgid "Refresh current feed" msgstr "Obnovit souÄasný kanál" -#: include/functions.php:1948 +#: include/functions.php:1994 msgid "Un/hide read feeds" msgstr "Zobrazit/Skrýt pÅ™eÄtené kanály" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "PÅ™ihlásit se k odbÄ›ru" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Upravit kanál" -#: include/functions.php:1952 +#: include/functions.php:1998 msgid "Reverse headlines" msgstr "Obrácené Å™azenà nadpisů " -#: include/functions.php:1953 +#: include/functions.php:1999 msgid "Debug feed update" msgstr "Ladit aktualizaci kanálů" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "OznaÄit vÅ¡echny kanály za pÅ™eÄtené" -#: include/functions.php:1955 +#: include/functions.php:2001 msgid "Un/collapse current category" msgstr "Rozbalit/sbalit aktuálnà kategorii" -#: include/functions.php:1956 +#: include/functions.php:2002 msgid "Toggle combined mode" msgstr "PÅ™epnout kombinovaný režim" -#: include/functions.php:1957 +#: include/functions.php:2003 msgid "Toggle auto expand in combined mode" msgstr "PÅ™epnout automatické rozbalenà kombinovaném režimu" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "PÅ™ejÃt na" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "Nové" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "Seznam znaÄek" -#: include/functions.php:1965 +#: include/functions.php:2011 msgid "Other" msgstr "OstatnÃ" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "VytvoÅ™it Å¡tÃtek" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "VytvoÅ™it filtr" -#: include/functions.php:1968 +#: include/functions.php:2014 msgid "Un/collapse sidebar" msgstr "Rozbalit/sbalit postrannà liÅ¡tu" -#: include/functions.php:1969 +#: include/functions.php:2015 msgid "Show help dialog" msgstr "Zobrazit nápovÄ›du" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "Výsledky hledánÃ: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "KliknÄ›te pro pÅ™ehránÃ" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "PÅ™ehrát" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "žádné znaÄky" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Upravit znaÄky pro Älánek" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 msgid "Originally from:" msgstr "PůvodnÄ› z:" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 msgid "Feed URL" msgstr "URL kanálu" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -828,78 +813,81 @@ msgstr "URL kanálu" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "ZavÅ™Ãt toto okno" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(upravit poznámku)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "neznámý typ" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "PÅ™Ãlohy" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "PÅ™ihlášenÃ:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Heslo:" -#: include/login_form.php:197 +#: include/login_form.php:199 msgid "I forgot my password" msgstr "ZapomnÄ›l jsem heslo" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Jazyk:" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Profil:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 msgid "Default profile" msgstr "Výchozà profil" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Generovat ménÄ› provozu" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "Zapamatovat" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "PÅ™ihlásit" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "NezdaÅ™ilo se ověřit sezenà (neplatné IP)" @@ -915,160 +903,160 @@ msgstr "ZnaÄky Älánku (oddÄ›lené Äárkami):" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "Uložit" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "ZruÅ¡it" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "SdÃlet s Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "Název:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "Obsah:" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "Å tÃtky:" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "SdÃlený Älánek se objevà v kanálu \"Publikováno\"." -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "SdÃlet" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "NepÅ™ihlášený" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Neplatné uživatelské jméno nebo heslo" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Již odebÃráte <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Zahájen odbÄ›r <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Nelze zahájit odbÄ›r <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "Nenalezeny žádné kanály v <b>%s</b>." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 msgid "Multiple feed URLs found." msgstr "Nalezeno vÃce URL kanálů." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Nelze zahájit odbÄ›r <b>%s</b>.<br>Nelze stáhnout URL kanálu." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "Zahájit odbÄ›r vybraných kanálů" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Upravit možnosti odebÃránÃ" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 msgid "Password recovery" msgstr "Obnova hesla" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "MusÃte zadat platný název úÄtu a e-mailovou adresu. Nové heslo bude zasláno na vaÅ¡i e-mailovou adresu." -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "Obnovit heslo" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "NÄ›který z požadovaných parametrů chybà nebo je neplatný." -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 msgid "Go back" msgstr "JÃt zpÄ›t" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "Lituji, kombinace e-mailové adresy a pÅ™ihlaÅ¡ovacÃho jména nenalezena." -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "VaÅ¡e pÅ™Ãstupová práva nejsou dostateÄná pro spuÅ¡tÄ›nà skriptu." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "AktualizaÄnà nástroj databáze" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Provést aktualizace" @@ -1123,7 +1111,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "Můžete zobrazit kanál jako RSS pomocà následujÃcà URL:" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Je dostupná nová verze Tiny Tiny RSS (%s)." @@ -1133,7 +1121,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "Aktualizovat můžete pomocà zabudovaného nástroje v NastavenÃ, nebo pomocà update.php" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "Zobrazit poznámky k vydánÃ" @@ -1145,114 +1133,120 @@ msgstr "Stáhnout" msgid "Error receiving version information or no new version available." msgstr "Chyba pÅ™i zÃskávánà informacà o verzi, nebo nenà dostupná novÄ›jšà verze." -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "NavÅ¡tÃvit webové stránky" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "Poslednà aktualizace:" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Zobrazit jako kanál RSS" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "Zobrazit jako RSS" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Vybrat:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "VÅ¡e" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Invertovat" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Žádný" -#: classes/feeds.php:101 +#: classes/feeds.php:93 msgid "More..." msgstr "VÃce..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "PÅ™epÃnaÄ výbÄ›ru:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "VýbÄ›r:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "Zadat hodnocenÃ" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "Archivovat" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "ZpÄ›t" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "Smazat" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "PÅ™eposlat e-mailem" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Kanál:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "Kanál nenalezen." -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "Nikdy neÄistit" + +#: classes/feeds.php:360 #, php-format msgid "Imported at %s" msgstr "Importováno v %s" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "oznaÄit jako pÅ™eÄtené" @@ -1301,9 +1295,9 @@ msgid "Feed or site URL" msgstr "Kanál nebo URL stránky" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "UmÃstit v kategorii:" @@ -1313,24 +1307,24 @@ msgstr "Dostupné kanály" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "OvěřenÃ" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "PÅ™ihlášenÃ" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Heslo" @@ -1340,7 +1334,7 @@ msgstr "Tento kanál vyžaduje ověřenÃ." #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "OdebÃrat" @@ -1352,8 +1346,8 @@ msgstr "VÃce kanálů" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "Hledat" @@ -1374,8 +1368,8 @@ msgstr "omezenÃ:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Odstranit" @@ -1458,17 +1452,37 @@ msgstr "PÅ™idávám filtr..." msgid "Processing category: %s" msgstr "Zpracovávám kategorii: %s" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "OdesÃlánà selhalo s chybovým kódem %d" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +msgid "Unable to move uploaded file." +msgstr "Nelze pÅ™esunout odeslaný soubor." + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Chyba: nahrajte prosÃm soubor OPML." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +msgid "Error: unable to find moved OPML file." +msgstr "Chyba: nelze nalézt pÅ™esunutý soubor OPML." + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Chyba pÅ™i zpracovánà dokumentu." #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "Nemáte dostateÄná oprávnÄ›nà pro zobrazenà této záložky." @@ -1502,8 +1516,8 @@ msgid "Change password to" msgstr "ZmÄ›nit heslo na" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Možnosti" @@ -1545,13 +1559,13 @@ msgstr "[tt-rss] Oznámenà o zmÄ›nÄ› hesla" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 msgid "Select" msgstr "Vybrat" @@ -1565,7 +1579,7 @@ msgstr "Podrobnosti" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Upravit" @@ -1578,7 +1592,7 @@ msgid "Last login" msgstr "Poslednà pÅ™ihlášenÃ" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "KliknÄ›te pro úpravy" @@ -1592,7 +1606,7 @@ msgstr "Nebyl nalezen žádný odpovÃdajÃcà uživatel." #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Titulek" @@ -1630,40 +1644,40 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "Komplexnà výrazy nemusejà navrátit výsledky pÅ™i testovánà kvůli problémům s implementacà regulárnÃch výrazů databázového serveru." #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "OdpovÃdá" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "PÅ™idat" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 msgid "Apply actions" msgstr "Vykonat Äinnosti" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "Povoleno" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 msgid "Match any rule" msgstr "OdpovÃdá kterémukoliv pravidlu" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 msgid "Inverse matching" msgstr "" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "Test" @@ -1681,61 +1695,61 @@ msgid "Combine" msgstr "Kombinovat" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "ZruÅ¡it poÅ™adà řazenÃ" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "PÅ™ehodnotit Älánky" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "VytvoÅ™it" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "pole" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "v" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" msgstr "Uložit pravidlo" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 msgid "Add rule" msgstr "PÅ™idat pravidlo" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Provést Äinnost" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "s parametry:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" msgstr "Uložit Äinnost" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 msgid "Add action" msgstr "PÅ™idat Äinnost" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 msgid "[No caption]" msgstr "[Bez titulku]" @@ -1800,13 +1814,12 @@ msgid "Amount of articles to display at once" msgstr "PoÄet naráz zobrazovaných Älánků" #: classes/pref/prefs.php:33 -#, fuzzy msgid "Default feed update interval" -msgstr "Výchozà interval" +msgstr "Výchozà interval aktualizace kanálů" #: classes/pref/prefs.php:33 msgid "Shortest interval at which a feed will be checked for updates regardless of update method" -msgstr "" +msgstr "Nejkratšà interval kontroly aktualizacà kanálu bez ohledu na metodu aktualizace" #: classes/pref/prefs.php:34 msgid "Mark articles in e-mail digest as read" @@ -1838,7 +1851,7 @@ msgstr "Povolit externÃm klientům pÅ™istupovat k aplikaci pomocà API" #: classes/pref/prefs.php:38 msgid "Enable feed categories" -msgstr "" +msgstr "Povolit kategorie kanálů" #: classes/pref/prefs.php:39 msgid "Sort feeds by unread articles count" @@ -1877,7 +1890,7 @@ msgid "Purge unread articles" msgstr "ÄŒistit nepÅ™eÄtené Älánky" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Obrácené Å™azenà nadpisů (nejstaršà jako prvnÃ)" @@ -1887,7 +1900,7 @@ msgstr "Krátký formát data" #: classes/pref/prefs.php:49 msgid "Show content preview in headlines list" -msgstr "" +msgstr "Zobrazit náhled obsahu v seznamu s nadpisy" #: classes/pref/prefs.php:50 msgid "Sort headlines by feed date" @@ -1918,7 +1931,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "PÅ™i Ätenà Älánků odstranit vÅ¡echny HTML znaÄky, kromÄ› základnÃch." #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 msgid "Customize stylesheet" msgstr "Upravit soubor motivu" @@ -1927,7 +1940,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "PÅ™izpůsobit soubor vzhledu CSS dle vaÅ¡ich pÅ™edstav" #: classes/pref/prefs.php:55 -msgid "User timezone" +#, fuzzy +msgid "Time zone" msgstr "ÄŒasová zóna uživatele" #: classes/pref/prefs.php:56 @@ -1939,22 +1953,27 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "Speciálnà kanály, popisky a kategorie jsou sdruženy podle původnÃch kanálů" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Zvolit motiv" +#, fuzzy +msgid "Language" +msgstr "Jazyk:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "Vybrat jeden z dostupných motivů CSS" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "Staré heslo nemůže být prázdné." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "Nové heslo nemůže být prázdné." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Zadaná hesla nejsou shodná." @@ -1962,491 +1981,525 @@ msgstr "Zadaná hesla nejsou shodná." msgid "Function not supported by authentication module." msgstr "Funkce nenà podporována modulem ověřenÃ." -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "Nastavenà bylo uloženo." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Neznámá možnost: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "VaÅ¡e osobnà data byla uložena." -#: classes/pref/prefs.php:184 -#, fuzzy +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." -msgstr "NÄ›která nastavenà jsou dostupná pouze ve výchozÃm profilu." +msgstr "VaÅ¡e nastavenà jsou nastavena na výchozà hodnoty." -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "Osobnà data / ověřenÃ" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Osobnà informace" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "Celé jméno" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "E-mail" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Úroveň pÅ™Ãstupu" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "Uložit data" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "VaÅ¡e heslo má výchozà hodnotu, změňte jej prosÃm." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "ZmÄ›nÄ›na hesla zakáže heslo na jedno použitÃ." -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Staré heslo" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Nové heslo" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Potvrdit heslo" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "ZmÄ›nit heslo" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "Heslo na jedno použità / OvěřenÃ" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "Hesla na jedno použità jsou povolena. Zadejte své souÄasné heslo pro zakázánÃ." -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 msgid "Enter your password" msgstr "Zadejte své heslo" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" msgstr "Zakázat OTP" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "Pro použità potÅ™ebujete kompatibilnà nástroj ověřenÃ. ZmÄ›nou hesla automaticky zakážete OTP." -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "NaÄtÄ›te následujÃcà kód ověřujÃcà aplikacÃ:" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "NaÄetl jsem kód do aplikace a chtÄ›l bych povolit OTP" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "Zadejte prosÃm vaÅ¡e heslo na jedno použitÃ:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" msgstr "Povolit OTP" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "NÄ›která nastavenà jsou dostupná pouze ve výchozÃm profilu." -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "PÅ™izpůsobit" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "Registrovat" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "VyÄistit" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "Aktuálnà Äas na serveru: %s (UTC)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Uložit nastavenÃ" -#: classes/pref/prefs.php:694 -#, fuzzy +#: classes/pref/prefs.php:675 msgid "Save and exit preferences" -msgstr "Opustit nastavenÃ" +msgstr "Uložit a opustit nastavenÃ" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "Spravovat profily" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Obnovit výchozà hodnoty" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "Moduly" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "Pro provedenà zmÄ›n v modulech musÃte znovu naÄÃst Tiny Tiny RSS." -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "Stáhnout vÃce modulů na <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">foréch</a>, nebo <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a> tt-rss.org." -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "Systémové moduly" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "Modul" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 msgid "Description" msgstr "Popis" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "Verze" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "Autor" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "vÃce informacÃ" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 msgid "Clear data" msgstr "Smazat data" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "Uživatelské moduly" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 msgid "Enable selected plugins" msgstr "Povolit vybrané moduly" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "Å patné heslo" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "Å patné heslo" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "Můžete zmÄ›nit bary, font a rozvrženà vybraného motivu s vlastnÃm nastavenÃm CSS. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Tento soubor</a> vám posloužà jako základ." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "VytvoÅ™it profil" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 msgid "(active)" msgstr "(aktivnÃ)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "Odstranit vybrané profily" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Aktivovat profil" #: classes/pref/feeds.php:13 msgid "Check to enable field" -msgstr "" +msgstr "ZaÅ¡krtnÄ›te pro povolenà pole" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "Název kanálu" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "Aktualizovat" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "ÄŒiÅ¡tÄ›nà Älánků:" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." -msgstr "" +msgstr "<b>Rada:</b> pokud váš kanál vyžaduje ověřenÃ, musÃte zadat pÅ™ihlaÅ¡ovacà údaje, s výjimkou pro kanály Twitter." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "Skrýt pÅ™ed populárnÃmi kanály" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "ZaÄlenit do e-mailových souhrnů" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Vždy zobrazovat obrázkové pÅ™Ãlohy" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "Nevkládat obrázky" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Uchovávat obrázky na serveru" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "OznaÄit aktualizované Älánky jako nepÅ™eÄtené" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Ikona" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Nahradit" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "" -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "VÅ¡e hotovo." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Kanály s chybami" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "Neaktivnà kanály" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Upravit vybrané kanály" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 msgid "Batch subscribe" msgstr "Dávkové zahájenà odbÄ›ru" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "Kategorie" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "PÅ™idat kategorii" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "Odstranit vybrané" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "Zobrazit/Skrýt prázdné kategorie" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "Dalšà Äinnost..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "RuÄnà ÄiÅ¡tÄ›nÃ" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "VyÄistit data kanálu" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "Pomocà OPML můžete exportovat a importovat své kanály, filtry, Å¡tÃtky a nastavenà Tiny Tiny RSS." -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "Pomocà OPML může být migrován pouze profil hlavnÃho nastavenÃ." -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "Importovat moji OPML" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "Název souboru:" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "Exportovat OPML" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "VaÅ¡e OPML může být publikováno a použito kýmkoliv kdo zná následujÃcà URL." -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "Publikovaná OPML neobsahujà vaÅ¡e nastavenà Tiny Tiny RSS a kanály které vyžadujà ověřenÃ, nebo jsou skryty pÅ™ed OblÃbenými kanály." -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "VeÅ™ejná URL OPML" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "Zobrazit URL publikovaných OPML" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Integrace s Firefoxem" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "Stránka Tiny Tiny RSS může být použita jako ÄŒteÄka kanálů Firefox následujÃcÃm odkazem." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "KliknÄ›te pro registraci této stránky jako ÄteÄky kanálů." -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" msgstr "Publikované a sdÃlené Älánky / Generované kanály" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "Publikované Älánky a generované kanály" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "Publikované Älánky jsou exportované jako veÅ™ejný kanál RSS, který může odebÃrat kdokoliv kdo zná následujÃcà URL." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "Zobrazit URL" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "VyÄistit vÅ¡echny vygenerované URL" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "ÄŒlánky sdÃlené pomocà URL" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "Zde můžete zakázat sdÃlenà Älánků pomocà unikátnÃch URL." -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "ZruÅ¡it sdÃlenà vÅ¡ech Älánků" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "Tyto kanály nebyly aktualizovány s novým obsahem po tÅ™i mÄ›sÃce (nejprve nejstarÅ¡Ã):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "KliknÄ›te pro úpravu kanálu" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "ZruÅ¡it odbÄ›r vybraných kanálů" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Kanály, které nebyly aktualizovány kvůli chybám:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "PÅ™idávejte jeden platný RSS kanál na řádku (neprobÃhá detekce kanálu)" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "Kanály k odebÃránÃ, jeden na řádku" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "Kanály vyžadujà ověřenÃ." -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +#, fuzzy +msgid "Refresh" +msgstr "Nové" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +#, fuzzy +msgid "Filename" +msgstr "Název souboru:" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "" + +#: plugins/digest/digest_body.php:57 msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "Váš prohlÞeÄ nepodporuje Javascript, který je vyžadován pro správnou funkci aplikace. Zkontrolujte prosÃm nastavenà prohlÞeÄe." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Ahoj," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "Normálnà verze" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "ZavÅ™Ãt Älánek" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "Nenà bezpeÄné pro práci (kliknutÃm pÅ™epnout)" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "Modul NSFW" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "ZnaÄky považované za nevhodné k práci (oddÄ›lené Äárkou)" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 msgid "Configuration saved." msgstr "Nastavenà uloženo." @@ -2462,17 +2515,17 @@ msgstr "Heslo bylo zmÄ›nÄ›no." msgid "Old password is incorrect." msgstr "Staré heslo je chybné." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "Domů" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "Nic nenalezeno (kliknÄ›te pro obnovenà kanálu)." @@ -2480,126 +2533,126 @@ msgstr "Nic nenalezeno (kliknÄ›te pro obnovenà kanálu)." msgid "Open regular version" msgstr "OtevÅ™Ãt normálnà verzi" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "Povolit kategorie" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "Zapnuto" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "Vypnuto" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "Procházet kategorie jako složky" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "Zobrazit obrázky v pÅ™ÃspÄ›vcÃch" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "Skrýt pÅ™eÄtené Älánky a kanály" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "Řadit kanály dle poÄtu nepÅ™eÄtených Älánků" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[PÅ™eposláno]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 msgid "Multiple articles" msgstr "VÃce Älánků" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "KliknÄ›te na následujÃcà odkaz pro spuÅ¡tÄ›nà poÅ¡tovnÃho klienta:" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 msgid "Forward selected article(s) by email." msgstr "PÅ™eposlat vybrané Älánky e-mailem." -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "MÄ›li byste být schopni upravit zprávu pÅ™ed odeslánÃm ve vaÅ¡em poÅ¡tovnÃm klientu." -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 msgid "Close this dialog" msgstr "UzavÅ™Ãt tento dialog" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "Záložky" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" -msgstr "" +msgstr "OdebÃrat %s v Tiny Tiny RSS?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" -msgstr "" +msgstr "OdebÃrat v Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "Import a export" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "Archiv Älánků" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "Můžete exportovat a importovat Älánky s hvÄ›zdiÄkou a archivované Älánky pro uloženà pÅ™i migraci mezi instancemi tt-rss." -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "Exportovat má data" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importovat" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "Nelze importovat: neplatná verze schématu." -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "Nelze importovat: nerozpoznaný formát dokumentu." -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "DokonÄeno: " -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " @@ -2607,7 +2660,7 @@ msgstr[0] "zpracován %d Älánek, " msgstr[1] "zpracovány %d Älánky, " msgstr[2] "zpracováno %d Älánků, " -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " @@ -2615,7 +2668,7 @@ msgstr[0] "%d importován, " msgstr[1] "%d importovány, " msgstr[2] "%d importováno, " -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, php-format msgid "%d feed created." msgid_plural "%d feeds created." @@ -2623,266 +2676,275 @@ msgstr[0] "vytvoÅ™en %d kanál." msgstr[1] "vytvoÅ™eny %d kanály." msgstr[2] "vytvoÅ™eno %d kanálů." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "Nelze naÄÃst dokument XML." -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" -msgstr "" +msgstr "PÅ™ipravit data" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "Nelze odeslat soubor. Možná musÃte upravit hodnotu upload_max_filesize v php.ini (souÄasná hodnota: %s)" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." +msgstr "Žádný soubor nebyl odeslán." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "Od:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "Do:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "PÅ™edmÄ›t:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "Odeslat zprávu" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 msgid "Edit article note" msgstr "Upravit poznámky Älánku" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" -msgstr "" +msgstr "Ukázková výplň" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "Ukázková hodnota" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "Nastavit hodnotu" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "Žádný soubor nebyl odeslán." - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "VÅ¡e dokonÄeno. %d z %d Älánků importováno." -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "Dokument nemá platný formát." -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "Importovat sdÃlené a nebo s hvÄ›zdiÄkou z Google Readeru" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." -msgstr "" +msgstr "Vložte do následujÃcÃho formuláře váš soubor starred.json, nebo shared.json." -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "Importovat mé položky s hvÄ›zdiÄkou" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "Instance" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "URL instance" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 msgid "Access key:" msgstr "PÅ™Ãstupový klÃÄ:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "PÅ™Ãstupový klÃÄ" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." -msgstr "" +msgstr "PoužÃt jeden pÅ™Ãstupový klÃÄ pro obÄ› propojené instance." -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 msgid "Generate new key" msgstr "Generovat nový klÃÄ" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" -msgstr "" +msgstr "Propojit instance" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" -msgstr "" +msgstr "Můžete spojit dalšà instance Tiny Tiny RSS pro sdÃlenà oblÃbených kanálů. S touto instancà Tiny Tiny RSS se spojÃte pomocà následujÃcà URL:" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "Naposledy pÅ™ipojen" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "Stav" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "Uložené kanály" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "VytvoÅ™it odkaz" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "SdÃlet pomocà URL" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "Můžete Älánek sdÃlet pomocà následujÃcà unikátnà URL:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "Aktualizovat Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "VaÅ¡e instalace Tiny Tiny RSS je aktuálnÃ." -#: plugins/updater/init.php:351 -#, fuzzy +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." -msgstr "NezavÃrejte tuto stránku dokud nenà aktualizace dokonÄena. PÅ™ed pokraÄovánÃm proveÄte zálohu adresáře tt-rss." +msgstr "NezavÃrejte tento dialog dokud nenà aktualizace dokonÄena." -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." -msgstr "" +msgstr "Je doporuÄeno nejprve zálohovat adresář tt-rss." -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." -msgstr "" +msgstr "VaÅ¡e databáze nebude zmÄ›nÄ›na." -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." msgstr "PÅ™ipraveno k aktualizaci." -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" msgstr "Zahájit aktualizaci" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "OznaÄit vÅ¡echny Älánky v %s jako pÅ™eÄtené?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 msgid "Mark all articles in %s older than 1 day as read?" msgstr "OznaÄit vÅ¡echny Älánky staršà než 1 den v %s jako pÅ™eÄtené?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 msgid "Mark all articles in %s older than 1 week as read?" msgstr "OznaÄit vÅ¡echny Älánky staršà než 1 týden v %s jako pÅ™eÄtené?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "OznaÄit vÅ¡echny Älánky staršà než 2 týdny v %s jako pÅ™eÄtené?" -#: js/functions.js:92 +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "" + +#: js/functions.js:107 msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "Opravdu si pÅ™ejete nahlásit výjimku na tt-rss.org? Hlášenà bude obsahovat informace o vaÅ¡em prohlÞeÄi a vaÅ¡e adresa IP bude uložena v databázi." -#: js/functions.js:214 -msgid "close" -msgstr "zavÅ™Ãt" +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "KliknutÃm pozastavit" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "Odeslánà dokonÄeno." -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "Odstranit ikonu uloženého kanálu?" -#: js/functions.js:697 +#: js/functions.js:723 msgid "Removing feed icon..." msgstr "Odstraňuji ikonu kanálu..." -#: js/functions.js:702 +#: js/functions.js:728 msgid "Feed icon removed." msgstr "Ikona kanálu odstranÄ›na." -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "ProsÃm vyberte obrázek k odeslánÃ." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "Nahrát novou ikonu pro kanál?" -#: js/functions.js:727 +#: js/functions.js:753 msgid "Uploading, please wait..." msgstr "OdesÃlám, Äekejte prosÃm..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "Zadejte, prosÃm, titulek Å¡tÃtku:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "Nelze vytvoÅ™it Å¡tÃtek: chybà titulek." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "PÅ™ihlásit se k odbÄ›ru" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "Zahájen odbÄ›r %s" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "Zadaná URL nevypadá platnÄ›." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "Zadaná URL nevypadá jako by obsahovala jakékoliv kanály." -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "Upravit vybrané kanály" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "Nelze stáhnout zadanou URL: %s" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "Tento kanál již odebÃráte." @@ -2901,14 +2963,14 @@ msgstr "VytvoÅ™it filtr" #: js/functions.js:1191 msgid "Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update." -msgstr "" +msgstr "Obnovit odbÄ›r? Tiny Tiny RSS se pokusà znovu pÅ™ihlásit k odbÄ›ru pÅ™i dalšà aktualizaci kanálu." #: js/functions.js:1202 msgid "Subscription reset." -msgstr "" +msgstr "OdbÄ›r obnoven." #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "ZruÅ¡it odbÄ›r %s?" @@ -2916,70 +2978,70 @@ msgstr "ZruÅ¡it odbÄ›r %s?" msgid "Removing feed..." msgstr "OdebÃrám kanál..." -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "Zadejte prosÃm název kategorie:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "ZkouÅ¡Ãm zmÄ›nit adresu..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "Nemůžete upravit tento typ kanálu." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "Upravit kanál" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 msgid "Saving data..." msgstr "Ukládám data..." -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "VÃce kanálů" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Nejsou vybrány žádné kanály." -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "Odstranit vybrané kanály z archivu? Kanály s uloženými Älánky nebudou odebrány." -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "Kanály s chybami pÅ™i aktualizaci" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "Odstranit vybrané kanály?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 msgid "Removing selected feeds..." msgstr "OdebÃrám vybrané kanály..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "NápovÄ›da" @@ -3032,7 +3094,7 @@ msgid "Removing selected labels..." msgstr "OdebÃrám vybrané Å¡tÃtky..." #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "Nejsou vybrány žádné Å¡tÃtky" @@ -3153,319 +3215,319 @@ msgstr "Vyberte prosÃm nejprve soubor OPML." msgid "Importing, please wait..." msgstr "Importuji, Äekejte prosÃm..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "Obnovit výchozà hodnoty?" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "Odstranit kategorii %s? VÅ¡echny vnoÅ™ené kanály budou umÃstÄ›ny do kategorie NezaÅ™azeno." -#: js/prefs.js:1088 +#: js/prefs.js:1102 msgid "Removing category..." msgstr "OdebÃrám kategorii..." -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Odstranit vybrané kategorie?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "OdebÃrám vybrané kategorie..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Nejsou vybrány žádné kategorie." -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "Název kategorie:" -#: js/prefs.js:1137 +#: js/prefs.js:1151 msgid "Creating category..." msgstr "VytvářÃm kategorii..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "Kanály bez nedávných aktualizacÃ" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "Nahradit souÄasnou publikaÄnà adresu OPML novou?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "ÄŒistÃm kanál..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "PÅ™ehodnotit Älánky ve vybraných kanálech?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 msgid "Rescoring selected feeds..." msgstr "PÅ™ehodnocuji vybrané kanály..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "PÅ™ehodnotit vÅ¡echny Älánky? Tato operace může chvÃli trvat." -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." msgstr "PÅ™ehodnocuji kanály..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "Obnovit výchozà barvy vybraných Å¡tÃtků?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Profily nastavenÃ" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "Odstranit vybrané profily? Aktivnà a výchozà profil nebude odebrán." -#: js/prefs.js:1414 +#: js/prefs.js:1428 msgid "Removing selected profiles..." msgstr "OdebÃrám vybrané profily..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "Nejsou vybrány žádné profily." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 msgid "Activate selected profile?" msgstr "Aktivovat vybraný profil?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "Vyberte prosÃm profil k aktivaci." -#: js/prefs.js:1458 +#: js/prefs.js:1472 msgid "Creating profile..." msgstr "VytvářÃm profil..." -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "Zneplatnà vÅ¡echny pÅ™edchozà generované URL kanálů. PokraÄovat?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 msgid "Clearing URLs..." msgstr "ÄŒistÃm URL..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 msgid "Generated URLs cleared." msgstr "Generované URL vyÄiÅ¡tÄ›ny." -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "Zneplatnà vÅ¡echny pÅ™edchozà generované URL sdÃlených Älánků. PokraÄovat?" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "SdÃlené URL vyÄiÅ¡tÄ›ny." -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Editor Å¡tÃtků" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "PÅ™ihlaÅ¡uji se k odbÄ›ru kanálů..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" -msgstr "" +msgstr "Smazat uložená data modulu?" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "OznaÄit vÅ¡echny Älánky jako pÅ™eÄtené?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "OznaÄuji vÅ¡echny kanály jako pÅ™eÄtené..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." msgstr "Nejprve si prosÃm povolte modul odesÃlánà e-mailů." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 msgid "Please enable embed_original plugin first." msgstr "Nejprve si prosÃm povolte modul embed_original." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "Vybrat položky podle znaÄek" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "Nelze zruÅ¡it odbÄ›r kategorie." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Nejprve si prosÃm vyberte kanál." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "Tento druh kanálu nemůžete pÅ™ehodnotit." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "PÅ™ehodnotit Älánky v %s?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "PÅ™ehodnocuji Älánky..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "Je dostupná nová verze." -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" msgstr "ZruÅ¡it hledánÃ" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Odebrat Älánku hvÄ›zdiÄku" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "PÅ™idat Älánku hvÄ›zdiÄku" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "ZruÅ¡it publikovánà Älánku" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Publikovat Älánek" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "Nenà vybrán žádný Älánek." +msgstr[1] "Nenà vybrán žádný Älánek." +msgstr[2] "Nenà vybrán žádný Älánek." + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Nejsou vybrány žádné Älánky." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "Smazat %d vybraný Älánek v %s?" msgstr[1] "Smazat %d vybrané Älánky v %s?" msgstr[2] "Smazat %d vybraných Älánků v %s?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "Smazat %d vybraný Älánek?" msgstr[1] "Smazat %d vybrané Älánky?" msgstr[2] "Smazat %d vybraných Älánků?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "Archivovat %d vybraný Älánek v %s?" msgstr[1] "Archivovat %d vybrané Älánky v %s?" msgstr[2] "Archivovat %d vybraných Älánků v %s?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "PÅ™esunout zpÄ›t %d archivovaný Älánek?" msgstr[1] "PÅ™esunout zpÄ›t %d archivované Älánky?" msgstr[2] "PÅ™esunout zpÄ›t %d archivovaných Älánků?" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "VezmÄ›te na vÄ›domÃ, že Älánky bez hvÄ›zdiÄky můžou být odstranÄ›ny pÅ™i následujÃcà aktualizaci kanálu." -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "OznaÄit %d Älánek v %s jako pÅ™eÄtený?" msgstr[1] "OznaÄit %d Älánky v %s jako pÅ™eÄtené?" msgstr[2] "OznaÄit %d Älánků v %s jako pÅ™eÄtené?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "Upravit znaÄky Älánku" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "Ukládám znaÄky Älánku..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Nenà vybrán žádný Älánek." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Nenalezeny žádné Älánky k oznaÄenÃ" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "OznaÄit %d Älánek jako pÅ™eÄtený?" msgstr[1] "OznaÄit %d Älánky jako pÅ™eÄtené?" msgstr[2] "OznaÄit %d Älánků jako pÅ™eÄtené?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "OtevÅ™Ãt původnà Älánek" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 msgid "Display article URL" msgstr "Zobrazit URL Älánku" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 msgid "Toggle marked" -msgstr "" +msgstr "PÅ™epnout oznaÄené" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "PÅ™iÅ™adit Å¡tÃtek" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "Odstranit Å¡tÃtek" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "PÅ™ehrává se..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "KliknutÃm pozastavit" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "Zadejte prosÃm nové hodnocenà vybraných Älánků:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "Zadejte prosÃm nové hodnocenà Älánku:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 msgid "Article URL:" msgstr "URL Älánku:" @@ -3541,7 +3603,7 @@ msgstr "ProsÃm, nejdÅ™Ãve vyberte soubor." #: plugins/instances/instances.js:10 msgid "Link Instance" -msgstr "" +msgstr "Propojit instance" #: plugins/instances/instances.js:73 msgid "Edit Instance" @@ -3569,9 +3631,38 @@ msgid "Share article by URL" msgstr "SdÃlet Älánek pomocà URL" #: plugins/updater/updater.js:58 -#, fuzzy msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." -msgstr "Okamžitá aktualizace je považována za experimentálnÃ. PÅ™ed pokraÄovánÃm zálohujte svůj adresář tt-rss. NapiÅ¡te prosÃm 'yes' pro pokraÄovánÃ." +msgstr "PÅ™ed pokraÄovánÃm zálohujte svůj adresář tt-rss. NapiÅ¡te prosÃm 'yes' pro pokraÄovánÃ." + +#~ msgid "Switch to digest..." +#~ msgstr "PÅ™epnout na souhrn..." + +#~ msgid "Show tag cloud..." +#~ msgstr "Zobrazit seznam znaÄek..." + +#~ msgid "Click to play" +#~ msgstr "KliknÄ›te pro pÅ™ehránÃ" + +#~ msgid "Play" +#~ msgstr "PÅ™ehrát" + +#~ msgid "Visit the website" +#~ msgstr "NavÅ¡tÃvit webové stránky" + +#~ msgid "Select theme" +#~ msgstr "Zvolit motiv" + +#~ msgid "I have scanned the code and would like to enable OTP" +#~ msgstr "NaÄetl jsem kód do aplikace a chtÄ›l bych povolit OTP" + +#~ msgid "close" +#~ msgstr "zavÅ™Ãt" + +#~ msgid "Playing..." +#~ msgstr "PÅ™ehrává se..." + +#~ msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#~ msgstr "Nelze odeslat soubor. Možná musÃte upravit hodnotu upload_max_filesize v php.ini (souÄasná hodnota: %s)" #~ msgid "Default interval between feed updates" #~ msgstr "Výchozà interval mezi aktualizacemi kanálů" diff --git a/locale/de_DE/LC_MESSAGES/messages.mo b/locale/de_DE/LC_MESSAGES/messages.mo Binary files differindex e0dfca1eb..c1f0b383e 100755 --- a/locale/de_DE/LC_MESSAGES/messages.mo +++ b/locale/de_DE/LC_MESSAGES/messages.mo diff --git a/locale/de_DE/LC_MESSAGES/messages.po b/locale/de_DE/LC_MESSAGES/messages.po index 7d4597cba..48451cd6e 100755 --- a/locale/de_DE/LC_MESSAGES/messages.po +++ b/locale/de_DE/LC_MESSAGES/messages.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: Tiny Tiny RSS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" -"PO-Revision-Date: 2013-04-05 00:16+0100\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" +"PO-Revision-Date: 2013-04-29 17:28+0100\n" "Last-Translator: Heiko Adams <heiko.adams@gmai.com>\n" "Language-Team: \n" "Language: de\n" @@ -23,98 +23,97 @@ msgstr "" "X-Poedit-Bookmarks: -1,557,558,-1,-1,-1,-1,-1,-1,-1\n" "X-Generator: Poedit 1.5.4\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Standard verwenden" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Niemals löschen" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "Nach 1 Woche" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "Nach 2 Wochen" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "Nach 1 Monat" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "Nach 2 Monaten" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "Nach 3 Monaten" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Standard-Intervall" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 backend.php:93 msgid "Disable updates" msgstr "Nie" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 backend.php:94 msgid "Each 15 minutes" msgstr "Alle 15 Minuten" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 backend.php:95 msgid "Each 30 minutes" msgstr "Alle 30 Minuten" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 backend.php:96 msgid "Hourly" msgstr "Stündlich" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 backend.php:97 msgid "Each 4 hours" msgstr "Alle 4 Stunden" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 backend.php:98 msgid "Each 12 hours" msgstr "Alle 12 Stunden" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 backend.php:99 msgid "Daily" msgstr "Täglich" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 backend.php:100 msgid "Weekly" msgstr "Wöchentlich" -#: backend.php:99 -#: classes/pref/users.php:123 +#: backend.php:103 classes/pref/users.php:123 classes/pref/system.php:44 msgid "User" msgstr "Benutzer" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Erfahrener Benutzer" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Administrator" #: errors.php:9 -msgid "This program requires XmlHttpRequest to function properly. Your browser doesn't seem to support it." -msgstr "Dieses Programm benötigt XmlHttpRequest um ordnungsgemäß zu funktionieren. Ihr Browser scheint dies nicht zu unterstützen." +msgid "" +"This program requires XmlHttpRequest to function properly. Your browser " +"doesn't seem to support it." +msgstr "" +"Dieses Programm benötigt XmlHttpRequest um ordnungsgemäß zu funktionieren. " +"Ihr Browser scheint dies nicht zu unterstützen." #: errors.php:12 -msgid "This program requires cookies to function properly. Your browser doesn't seem to support them." -msgstr "Dieses Programm benötigt Cookies um ordungsgemäß zu funktionieren. Ihr Browser scheint diese nicht zu unterstützen." +msgid "" +"This program requires cookies to function properly. Your browser doesn't " +"seem to support them." +msgstr "" +"Dieses Programm benötigt Cookies um ordungsgemäß zu funktionieren. Ihr " +"Browser scheint diese nicht zu unterstützen." #: errors.php:15 msgid "Backend sanity check failed." @@ -125,8 +124,12 @@ msgid "Frontend sanity check failed." msgstr "Frontend Sicherheitsprüfung fehlgeschlagen." #: errors.php:19 -msgid "Incorrect database schema version. <a href='db-updater.php'>Please update</a>." -msgstr "Falsche Version des Datenbankschemas. <a href='update.php'>Bitte aktualisieren</a>." +msgid "" +"Incorrect database schema version. <a href='db-updater.php'>Please " +"update</a>." +msgstr "" +"Falsche Version des Datenbankschemas. <a href='update.php'>Bitte " +"aktualisieren</a>." #: errors.php:21 msgid "Request not authorized." @@ -137,367 +140,317 @@ msgid "No operation to perform." msgstr "Keine Funktion ausgewählt." #: errors.php:25 -msgid "Could not display feed: query failed. Please check label match syntax or local configuration." -msgstr "Kann Feed nicht angezeigen: Abfrage fehlgeschlagen. Bitte überprüfen Sie die Label Such-Syntax oder die lokale Konfiguration." +msgid "" +"Could not display feed: query failed. Please check label match syntax or " +"local configuration." +msgstr "" +"Kann Feed nicht angezeigen: Abfrage fehlgeschlagen. Bitte überprüfen Sie die " +"Label Such-Syntax oder die lokale Konfiguration." #: errors.php:27 msgid "Denied. Your access level is insufficient to access this page." -msgstr "Zugriff verweigert. Sie haben nicht die benötigten Rechte um auf diese Seite zuzugreifen." +msgstr "" +"Zugriff verweigert. Sie haben nicht die benötigten Rechte um auf diese Seite " +"zuzugreifen." #: errors.php:29 msgid "Configuration check failed" msgstr "Konfigurationsprüfung fehlgeschlagen" #: errors.php:31 -msgid "Your version of MySQL is not currently supported. Please see official site for more information." -msgstr "Ihre Version von MySQL wird zur Zeit nicht unterstüzt. Für weitere Informationen schauen Sie sich die offiziellen Website an." +msgid "" +"Your version of MySQL is not currently supported. Please see official site " +"for more information." +msgstr "" +"Ihre Version von MySQL wird zur Zeit nicht unterstüzt. Für weitere " +"Informationen schauen Sie sich die offiziellen Website an." #: errors.php:35 msgid "SQL escaping test failed, check your database and PHP configuration" -msgstr "SQL Escaping Test fehlgeschlagen, überprüfen Sie Ihre Datenbank und PHP Konfiguration" - -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 -#: classes/backend.php:5 -#: classes/pref/labels.php:296 -#: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 -#: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 -#: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 -#: js/prefs.js:86 -#: js/prefs.js:576 -#: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 -#: plugins/import_export/import_export.js:17 -#: plugins/updater/updater.js:17 +msgstr "" +"SQL Escaping Test fehlgeschlagen, überprüfen Sie Ihre Datenbank und PHP " +"Konfiguration" + +#: index.php:128 index.php:145 index.php:265 prefs.php:98 +#: classes/backend.php:5 classes/pref/labels.php:296 +#: classes/pref/filters.php:680 classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 js/feedlist.js:128 js/feedlist.js:439 +#: js/functions.js:446 js/functions.js:784 js/functions.js:1194 +#: js/functions.js:1330 js/functions.js:1642 js/prefs.js:86 js/prefs.js:576 +#: js/prefs.js:666 js/prefs.js:867 js/prefs.js:1454 js/prefs.js:1507 +#: js/prefs.js:1566 js/prefs.js:1583 js/prefs.js:1599 js/prefs.js:1615 +#: js/prefs.js:1634 js/prefs.js:1807 js/prefs.js:1823 js/tt-rss.js:506 +#: js/tt-rss.js:523 js/viewfeed.js:820 js/viewfeed.js:1249 +#: plugins/import_export/import_export.js:17 plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Ladevorgang, bitte warten..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Feedliste verbergen" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "Artikel anzeigen" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Adaptiv" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Alle Artikel" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 include/functions.php:2007 classes/feeds.php:98 msgid "Starred" msgstr "Markiert" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 include/functions.php:2008 classes/feeds.php:99 msgid "Published" msgstr "Veröffentlicht" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 classes/feeds.php:85 classes/feeds.php:97 msgid "Unread" msgstr "Ungelesen" -#: index.php:177 +#: index.php:170 msgid "Unread First" msgstr "Ungelesene zuerst" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "mit Notiz" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Bewertung ignorieren" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "Artikel sortieren" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Standard" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "neueste zuerst" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "älteste zuerst" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "Titel" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 -#: js/FeedTree.js:128 -#: js/FeedTree.js:156 -#: plugins/digest/digest.js:647 +#: index.php:185 index.php:233 include/functions.php:1997 +#: classes/feeds.php:103 classes/feeds.php:441 js/FeedTree.js:128 +#: js/FeedTree.js:156 plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Als gelesen markieren" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "älter als einen Tag" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "älter als eine Woche" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "älter als 2 Wochen" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "Kommunikationsfehler mit Server" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Neue Version von Tiny Tiny RSS verfügbar!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Aktionen..." -#: index.php:233 +#: index.php:225 msgid "Preferences..." msgstr "Einstellungen..." -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Suchen..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Feed-Aktionen:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "Feed abonnieren..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Feed bearbeiten..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Feed neu bewerten" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 classes/pref/feeds.php:759 classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Feed abbestellen" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Alle Feeds:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Gelesene zeigen/verstecken" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Andere Aktionen:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "Zur Zusammenfassung wechseln..." - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "Tagwolke anzeigen..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 include/functions.php:1983 msgid "Toggle widescreen mode" msgstr "Breitbild-Modus umschalten" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "Artikel nach Tag filtern.." -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Label erstellen..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Filter erstellen..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "Tastaturkürzel..." -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Abmelden" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 prefs.php:116 include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Einstellungen" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Tastaturkürzel" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Einstellungen verlassen" -#: prefs.php:124 -#: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: prefs.php:119 classes/pref/feeds.php:107 classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Feeds" -#: prefs.php:127 -#: classes/pref/filters.php:156 +#: prefs.php:122 classes/pref/filters.php:156 msgid "Filters" msgstr "Filter" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 -#: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: prefs.php:125 include/functions.php:1176 include/functions.php:1831 +#: classes/pref/labels.php:90 plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Label" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Benutzer" -#: register.php:186 -#: include/login_form.php:238 +#: prefs.php:132 +msgid "System" +msgstr "System" + +#: register.php:184 include/login_form.php:238 msgid "Create new account" msgstr "Neues Konto erstellen" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "Die Registrierung für neue Benutzer wurde administrativ deaktiviert." -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 register.php:239 register.php:252 register.php:267 +#: register.php:286 register.php:334 register.php:344 register.php:356 +#: classes/handler/public.php:629 classes/handler/public.php:717 +#: classes/handler/public.php:799 classes/handler/public.php:874 +#: classes/handler/public.php:888 classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Zu Tiny Tiny RSS zurückkehren" -#: register.php:217 -msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." -msgstr "Ihr vorübergehendes Passwort wird an Ihre angegebene E-Mail-Adresse gesendet. Konten, die nicht innerhalb von 24 Stunden aktiviert wurden, werden gelöscht." +#: register.php:215 +msgid "" +"Your temporary password will be sent to the specified email. Accounts, which " +"were not logged in once, are erased automatically 24 hours after temporary " +"password is sent." +msgstr "" +"Ihr vorübergehendes Passwort wird an Ihre angegebene E-Mail-Adresse " +"gesendet. Konten, die nicht innerhalb von 24 Stunden aktiviert wurden, " +"werden gelöscht." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Gewünschter Benutzername:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "Verfügbarkeit prüfen" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 classes/handler/public.php:757 msgid "Email:" msgstr "E-Mail:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Wieviel ist zwei plus zwei:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Registrierung abschicken" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "Ihre Registrierungsinformationen sind unvollständig." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Leider ist dieser Benutzername schon vergeben." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "Registrierung fehlgeschlagen." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Konto erfolgreich erstellt." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "Registrierung für neue Benutzer ist momentan geschlossen." -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "Skript zum Updaten von Tiny Tiny RSS." -#: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 -#: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: include/digest.php:109 include/functions.php:1185 +#: include/functions.php:1732 include/functions.php:1817 +#: include/functions.php:1839 classes/opml.php:416 classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Unkategorisiert" @@ -512,398 +465,352 @@ msgstr[1] "%d archivierte Artikel" msgid "No feeds found." msgstr "Keine Feeds gefunden." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Sonderfeeds" -#: include/functions.php:1637 -#: classes/feeds.php:1110 +#: include/functions.php:1681 classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Alle Feeds" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Markierte Artikel" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Veröffentlichte Artikel" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Neue Artikel" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 include/functions.php:2005 msgid "All articles" msgstr "Alle Artikel" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "Archivierte Artikel" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "Kürzlich gelesen" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Navigation" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "Nächsten Feed öffnen" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "Vorherigen Feed öffnen" -#: include/functions.php:1914 +#: include/functions.php:1960 msgid "Open next article" msgstr "Nächsten Artikel öffnen" -#: include/functions.php:1915 +#: include/functions.php:1961 msgid "Open previous article" msgstr "Vorherigen Artikel öffnen" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "Nächsten Artikel laden (lange Artikel werden nicht gescrollt)" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "Vorherigen Artikel laden (lange Artikel werden nicht gescrollt)" -#: include/functions.php:1918 -#, fuzzy +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" -msgstr "Nächsten Artikel laden (lange Artikel werden nicht gescrollt)" +msgstr "" +"Zum nächsten Artikel springen (nicht als gelesen markieren oder ausklappen)" -#: include/functions.php:1919 -#, fuzzy +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" -msgstr "Vorherigen Artikel laden (lange Artikel werden nicht gescrollt)" +msgstr "" +"Zum vorherigen Artikel springen (nicht als gelesen markieren oder ausklappen)" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Suchdialog anzeigen" -#: include/functions.php:1921 +#: include/functions.php:1967 msgid "Article" msgstr "Artikel" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Markierung ein-/ausschalten" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 js/viewfeed.js:1931 msgid "Toggle published" msgstr "Veröffentlichung ein-/ausschalten" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Gelesen-Status umschalten" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Tags bearbeiten" -#: include/functions.php:1926 +#: include/functions.php:1972 msgid "Dismiss selected" msgstr "Ausgewählte Artikel verwerfen" -#: include/functions.php:1927 +#: include/functions.php:1973 msgid "Dismiss read" msgstr "gelesene Artikel verwerfen" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" msgstr "In neuem Fenster öffnen" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 js/viewfeed.js:1950 msgid "Mark below as read" msgstr "Untere als gelesen markieren" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 js/viewfeed.js:1944 msgid "Mark above as read" msgstr "Obige als gelesen markieren" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "Nach unten scrollen" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "Nach oben scrollen" -#: include/functions.php:1933 +#: include/functions.php:1979 msgid "Select article under cursor" msgstr "Artikel unter Mauszeiger auswählen" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "Artikel per E-Mail versenden" -#: include/functions.php:1935 +#: include/functions.php:1981 msgid "Close/collapse article" msgstr "Artikel schließen/verbergen" -#: include/functions.php:1936 -#, fuzzy +#: include/functions.php:1982 msgid "Toggle article expansion (combined mode)" msgstr "Kombinierte Feed-Anzeige umschalten" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 plugins/embed_original/init.php:31 msgid "Toggle embed original" msgstr "\"Original einbetten\" umschalten" -#: include/functions.php:1939 +#: include/functions.php:1985 msgid "Article selection" msgstr "Artikelauswahl" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "Alle Artikel auswählen" -#: include/functions.php:1941 +#: include/functions.php:1987 msgid "Select unread" msgstr "Ungelesene Artikel auswählen" -#: include/functions.php:1942 +#: include/functions.php:1988 msgid "Select starred" msgstr "Markierte Artikel auswählen" -#: include/functions.php:1943 +#: include/functions.php:1989 msgid "Select published" msgstr "Veröffentlichte Artikel auswählen" -#: include/functions.php:1944 +#: include/functions.php:1990 msgid "Invert selection" msgstr "Auswahl umkehren" -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "Auswahl aufheben" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Feed" -#: include/functions.php:1947 +#: include/functions.php:1993 msgid "Refresh current feed" msgstr "Aktuellen Feed aktualisieren" -#: include/functions.php:1948 +#: include/functions.php:1994 msgid "Un/hide read feeds" msgstr "Gelesene Feeds zeigen/verstecken" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "Feed abonnieren" -#: include/functions.php:1950 -#: js/FeedTree.js:135 -#: js/PrefFeedTree.js:67 +#: include/functions.php:1996 js/FeedTree.js:135 js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Feed bearbeiten" -#: include/functions.php:1952 +#: include/functions.php:1998 msgid "Reverse headlines" msgstr "Schlagzeilensortierung umkehren" -#: include/functions.php:1953 +#: include/functions.php:1999 msgid "Debug feed update" msgstr "Aktualisierung im Diagnose-Modus durchführen" -#: include/functions.php:1954 -#: js/FeedTree.js:178 +#: include/functions.php:2000 js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Alle Feeds als gelesen markieren" -#: include/functions.php:1955 +#: include/functions.php:2001 msgid "Un/collapse current category" msgstr "Aktuelle Kategorie ein-/ausklappen:" -#: include/functions.php:1956 +#: include/functions.php:2002 msgid "Toggle combined mode" msgstr "Kombinierte Feed-Anzeige umschalten" -#: include/functions.php:1957 +#: include/functions.php:2003 msgid "Toggle auto expand in combined mode" msgstr "Kombinierte Feed-Anzeige umschalten" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "Gehe zu" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "Neu" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 js/tt-rss.js:456 js/tt-rss.js:615 msgid "Tag cloud" msgstr "Tagwolke" -#: include/functions.php:1965 +#: include/functions.php:2011 msgid "Other" msgstr "Sonstiges" -#: include/functions.php:1966 -#: classes/pref/labels.php:281 +#: include/functions.php:2012 classes/pref/labels.php:281 msgid "Create label" msgstr "Label erstellen" -#: include/functions.php:1967 -#: classes/pref/filters.php:654 +#: include/functions.php:2013 classes/pref/filters.php:654 msgid "Create filter" msgstr "Filter erstellen" -#: include/functions.php:1968 +#: include/functions.php:2014 msgid "Un/collapse sidebar" msgstr "Seitenleiste ein-/ausklappen" -#: include/functions.php:1969 +#: include/functions.php:2015 msgid "Show help dialog" msgstr "Hilfe anzeigen" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "Suchergebnisse: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "Zum Abspielen klicken" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "Abspielen" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "Keine Tags" -#: include/functions.php:3136 -#: classes/feeds.php:689 +#: include/functions.php:3165 classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Tags für diesen Artikel bearbeiten" -#: include/functions.php:3170 -#: classes/feeds.php:641 +#: include/functions.php:3197 classes/feeds.php:641 msgid "Originally from:" msgstr "Original von:" -#: include/functions.php:3183 -#: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: include/functions.php:3210 classes/feeds.php:654 classes/pref/feeds.php:572 msgid "Feed URL" msgstr "Feed URL" -#: include/functions.php:3215 -#: classes/dlg.php:37 -#: classes/dlg.php:60 -#: classes/dlg.php:93 -#: classes/dlg.php:159 -#: classes/dlg.php:190 -#: classes/dlg.php:217 -#: classes/dlg.php:250 -#: classes/dlg.php:262 -#: classes/backend.php:105 -#: classes/pref/users.php:99 -#: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: include/functions.php:3242 classes/dlg.php:37 classes/dlg.php:60 +#: classes/dlg.php:93 classes/dlg.php:159 classes/dlg.php:190 +#: classes/dlg.php:217 classes/dlg.php:250 classes/dlg.php:262 +#: classes/backend.php:105 classes/pref/users.php:99 +#: classes/pref/filters.php:147 classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Fenster schließen" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(Notiz bearbeiten)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "unbekannter Typ" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "Anhänge" -#: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 -#: plugins/mobile/login_form.php:40 +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "LibXML Fehler %s in Zeile %d (Spalte %d): %s" + +#: include/login_form.php:183 classes/handler/public.php:475 +#: classes/handler/public.php:752 plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Benutzername:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Passwort:" -#: include/login_form.php:197 +#: include/login_form.php:199 msgid "I forgot my password" msgstr "Ich habe mein Passwort vergessen" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Sprache:" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Profil:" -#: include/login_form.php:213 -#: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: include/login_form.php:209 classes/handler/public.php:233 +#: classes/rpc.php:63 classes/pref/prefs.php:1036 msgid "Default profile" msgstr "Standardprofil" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Weniger Datenverkehr nutzen" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" +"Zeigt keine Bilder in Artikeln, reduziert die automatischen Aktualisierungen." + #: include/login_form.php:229 msgid "Remember me" msgstr "Erinnere dich an mich" -#: include/login_form.php:235 -#: classes/handler/public.php:499 +#: include/login_form.php:235 classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Anmelden" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "Sitzung konnte nicht validiert werden (falsche IP)" @@ -915,192 +822,188 @@ msgstr "Artikel nicht gefunden." msgid "Tags for this article (separated by commas):" msgstr "Tags für diesen Artikel (durch Komma getrennt):" -#: classes/article.php:204 -#: classes/pref/users.php:176 -#: classes/pref/labels.php:79 -#: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/article.php:204 classes/pref/users.php:176 +#: classes/pref/labels.php:79 classes/pref/filters.php:405 +#: classes/pref/prefs.php:982 classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 plugins/instances/init.php:245 msgid "Save" msgstr "Speichern" -#: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 -#: classes/feeds.php:1037 -#: classes/feeds.php:1089 -#: classes/feeds.php:1149 -#: classes/pref/users.php:178 -#: classes/pref/labels.php:81 -#: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/article.php:206 classes/handler/public.php:452 +#: classes/handler/public.php:486 classes/feeds.php:1037 +#: classes/feeds.php:1089 classes/feeds.php:1149 classes/pref/users.php:178 +#: classes/pref/labels.php:81 classes/pref/filters.php:408 +#: classes/pref/filters.php:803 classes/pref/filters.php:879 +#: classes/pref/filters.php:946 classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 plugins/mail/init.php:124 +#: plugins/note/init.php:53 plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Abbrechen" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "Teilen mit Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "Titel:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "Inhalt:" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "Label:" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "Geteilte Artikel erscheinen unter 'Veröffentlichte Artikel'." -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "Teilen" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "Nicht angemeldet" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Benutzername oder Passwort falsch" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "<b>%s</b> bereits abonniert." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "<b>%s</b> abonniert." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Konnte <b>%s</b> nicht abonnieren." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "Keine Feeds in <b>%s</b> gefunden." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 classes/handler/public.php:665 msgid "Multiple feed URLs found." msgstr "Mehrere Feed-URLs gefunden." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." -msgstr "Das Abonnieren von <b>%s</b> ist fehlgeschlagen.<br>Der Feed konnte nicht heruntergeladen werden." +msgstr "" +"Das Abonnieren von <b>%s</b> ist fehlgeschlagen.<br>Der Feed konnte nicht " +"heruntergeladen werden." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "Ausgewählte Feeds abonnieren" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Abonnementoptionen bearbeiten" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 msgid "Password recovery" msgstr "Passwort-Wiederherstellung" -#: classes/handler/public.php:764 -msgid "You will need to provide valid account name and email. New password will be sent on your email address." -msgstr "Sie müssen einen gültigen Benutzernamen und EMail angeben. Das neue Passwort wird an Ihre EMail gesendet." +#: classes/handler/public.php:745 +msgid "" +"You will need to provide valid account name and email. New password will be " +"sent on your email address." +msgstr "" +"Sie müssen einen gültigen Benutzernamen und EMail angeben. Das neue Passwort " +"wird an Ihre EMail gesendet." -#: classes/handler/public.php:786 -#: classes/pref/users.php:360 +#: classes/handler/public.php:767 classes/pref/users.php:360 msgid "Reset password" msgstr "Passwort zurücksetzen" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "Einige der benötigten Eingaben fehlen oder sind falsch." -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 msgid "Go back" msgstr "Zurück" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." -msgstr "Entschuldigung, diese Kombination von Benutzername und E-Mail konnte nicht gefunden werden." +msgstr "" +"Entschuldigung, diese Kombination von Benutzername und E-Mail konnte nicht " +"gefunden werden." -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Sie haben nicht die benötigten Rechte, um dieses Skript auszuführen." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Datenbank-Updater" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Aktualisierungen durchführen" #: classes/dlg.php:16 -msgid "If you have imported labels and/or filters, you might need to reload preferences to see your new data." -msgstr "Wenn Label und/oder Filter importiert wurden, müssen die Einstellungen erneut geladen werden, um alle neuen Einstellungen zu sehen." +msgid "" +"If you have imported labels and/or filters, you might need to reload " +"preferences to see your new data." +msgstr "" +"Wenn Label und/oder Filter importiert wurden, müssen die Einstellungen " +"erneut geladen werden, um alle neuen Einstellungen zu sehen." #: classes/dlg.php:48 msgid "Your Public OPML URL is:" msgstr "Ihre öffentliche OPML-URL lautet:" -#: classes/dlg.php:57 -#: classes/dlg.php:214 +#: classes/dlg.php:57 classes/dlg.php:214 msgid "Generate new URL" msgstr "Erzeuge neue URL" #: classes/dlg.php:71 -msgid "Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner." -msgstr "Der Aktualisierungs-Daemon ist in den Einstellungen aktiviert, aber der Daemon Prozess läuft nicht, weshalb keine Feeds aktualisiert werden können. Bitte starten Sie den Prozess des Daemons oder benachrichtigen Sie den Besitzer der Instanz." +msgid "" +"Update daemon is enabled in configuration, but daemon process is not " +"running, which prevents all feeds from updating. Please start the daemon " +"process or contact instance owner." +msgstr "" +"Der Aktualisierungs-Daemon ist in den Einstellungen aktiviert, aber der " +"Daemon Prozess läuft nicht, weshalb keine Feeds aktualisiert werden können. " +"Bitte starten Sie den Prozess des Daemons oder benachrichtigen Sie den " +"Besitzer der Instanz." -#: classes/dlg.php:75 -#: classes/dlg.php:84 +#: classes/dlg.php:75 classes/dlg.php:84 msgid "Last update:" msgstr "Letzte Aktualisierung:" #: classes/dlg.php:80 -msgid "Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner." -msgstr "Der Aktualisierungs Daemon braucht zu lange um eine Aktualisierung durchzuführen. Dies könnte auf ein Problem wie einen Absturz oder eine Blockierung hinweisen. Bitte überprüfen Sie den Prozess des Daemons oder benachrichtigen Sie den Besitzer des Instanz." +msgid "" +"Update daemon is taking too long to perform a feed update. This could " +"indicate a problem like crash or a hang. Please check the daemon process or " +"contact instance owner." +msgstr "" +"Der Aktualisierungs Daemon braucht zu lange um eine Aktualisierung " +"durchzuführen. Dies könnte auf ein Problem wie einen Absturz oder eine " +"Blockierung hinweisen. Bitte überprüfen Sie den Prozess des Daemons oder " +"benachrichtigen Sie den Besitzer des Instanz." #: classes/dlg.php:166 msgid "Match:" @@ -1126,18 +1029,20 @@ msgstr "Einträge anzeigen" msgid "You can view this feed as RSS using the following URL:" msgstr "Sie finden diesen Feed als RSS unter der folgenden URL:" -#: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: classes/dlg.php:233 plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Neue Version von Tiny Tiny RSS verfügbar (%s)." #: classes/dlg.php:241 -msgid "You can update using built-in updater in the Preferences or by using update.php" -msgstr "Um ein Update durchzuführen können Sie den eingebauten Updater in den Einstellungen oder die update.php benutzen" +msgid "" +"You can update using built-in updater in the Preferences or by using update." +"php" +msgstr "" +"Um ein Update durchzuführen können Sie den eingebauten Updater in den " +"Einstellungen oder die update.php benutzen" -#: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: classes/dlg.php:245 plugins/updater/init.php:335 msgid "See the release notes" msgstr "Release notes anzeigen" @@ -1147,116 +1052,102 @@ msgstr "Download" #: classes/dlg.php:255 msgid "Error receiving version information or no new version available." -msgstr "Das Abrufen von Update-Informationen ist fehlgeschlagen oder es ist bereits die neuste Version installiert." +msgstr "" +"Das Abrufen von Update-Informationen ist fehlgeschlagen oder es ist bereits " +"die neuste Version installiert." -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "Offizielle Website besuchen" +#: classes/feeds.php:56 +#, php-format +msgid "Last updated: %s" +msgstr "Letzte Aktualisierung: %s" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Als RSS-Feed anzeigen" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 classes/feeds.php:128 classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "Als RSS anzeigen" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Auswahl:" -#: classes/feeds.php:92 -#: classes/pref/users.php:345 -#: classes/pref/labels.php:275 -#: classes/pref/filters.php:282 -#: classes/pref/filters.php:330 -#: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/feeds.php:84 classes/pref/users.php:345 classes/pref/labels.php:275 +#: classes/pref/filters.php:282 classes/pref/filters.php:330 +#: classes/pref/filters.php:648 classes/pref/filters.php:736 +#: classes/pref/filters.php:763 classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 plugins/instances/init.php:287 msgid "All" msgstr "Alle" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Umkehren" -#: classes/feeds.php:95 -#: classes/pref/users.php:347 -#: classes/pref/labels.php:277 -#: classes/pref/filters.php:284 -#: classes/pref/filters.php:332 -#: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/feeds.php:87 classes/pref/users.php:347 classes/pref/labels.php:277 +#: classes/pref/filters.php:284 classes/pref/filters.php:332 +#: classes/pref/filters.php:650 classes/pref/filters.php:738 +#: classes/pref/filters.php:765 classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 plugins/instances/init.php:289 msgid "None" msgstr "Keine" -#: classes/feeds.php:101 +#: classes/feeds.php:93 msgid "More..." msgstr "Mehr..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Auswahl umschalten:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Auswahl:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "Bewerten" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "Archiv" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "Zurückgehen" -#: classes/feeds.php:118 -#: classes/pref/filters.php:291 -#: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/feeds.php:110 classes/pref/filters.php:291 +#: classes/pref/filters.php:339 classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "Löschen" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 classes/feeds.php:120 plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "Per E-Mail weiterleiten" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Feed:" -#: classes/feeds.php:205 -#: classes/feeds.php:837 +#: classes/feeds.php:197 classes/feeds.php:837 msgid "Feed not found." msgstr "Feed nicht gefunden." -#: classes/feeds.php:387 +#: classes/feeds.php:254 +msgid "Never" +msgstr "Niemals" + +#: classes/feeds.php:360 #, php-format msgid "Imported at %s" msgstr "Importiert nach %s" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "als gelesen markieren" @@ -1277,21 +1168,24 @@ msgid "No starred articles found to display." msgstr "Keine markierten Artikel zum Anzeigen gefunden." #: classes/feeds.php:748 -msgid "No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter." -msgstr "Keine Artikel zum Anzeigen gefunden. Sie können Artikel zu Labeln manuell hinzufügen (siehe obiges Aktionsmenü) oder durch das Benutzen von Filtern." +msgid "" +"No articles found to display. You can assign articles to labels manually " +"from article header context menu (applies to all selected articles) or use a " +"filter." +msgstr "" +"Keine Artikel zum Anzeigen gefunden. Sie können Artikel zu Labeln manuell " +"hinzufügen (siehe obiges Aktionsmenü) oder durch das Benutzen von Filtern." #: classes/feeds.php:750 msgid "No articles found to display." msgstr "Keine Artikel zum Anzeigen gefunden." -#: classes/feeds.php:765 -#: classes/feeds.php:932 +#: classes/feeds.php:765 classes/feeds.php:932 #, php-format msgid "Feeds last updated at %s" msgstr "Feeds zuletzt aktualisiert am %s" -#: classes/feeds.php:775 -#: classes/feeds.php:942 +#: classes/feeds.php:775 classes/feeds.php:942 msgid "Some feeds have update errors (click for details)" msgstr "Einige Feeds haben Aktualisierungsfehler (klicken für Details)" @@ -1299,15 +1193,12 @@ msgstr "Einige Feeds haben Aktualisierungsfehler (klicken für Details)" msgid "No feed selected." msgstr "Keinen Feed ausgewählt." -#: classes/feeds.php:975 -#: classes/feeds.php:983 +#: classes/feeds.php:975 classes/feeds.php:983 msgid "Feed or site URL" msgstr "URL von Feed oder Seite" -#: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/feeds.php:989 classes/pref/feeds.php:592 classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "In Kategorie einordnen:" @@ -1315,26 +1206,20 @@ msgstr "In Kategorie einordnen:" msgid "Available feeds" msgstr "Verfügbare Feeds" -#: classes/feeds.php:1009 -#: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/feeds.php:1009 classes/pref/users.php:139 +#: classes/pref/feeds.php:622 classes/pref/feeds.php:860 msgid "Authentication" msgstr "Authentifizierung" -#: classes/feeds.php:1013 -#: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/feeds.php:1013 classes/pref/users.php:402 +#: classes/pref/feeds.php:628 classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Benutzername" -#: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/feeds.php:1016 classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Passwort" @@ -1342,9 +1227,7 @@ msgstr "Passwort" msgid "This feed requires authentication." msgstr "Dieser Feed erfordert Authentifizierung." -#: classes/feeds.php:1031 -#: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/feeds.php:1031 classes/feeds.php:1087 classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "Abonnieren" @@ -1352,12 +1235,8 @@ msgstr "Abonnieren" msgid "More feeds" msgstr "Weitere Feeds" -#: classes/feeds.php:1057 -#: classes/feeds.php:1148 -#: classes/pref/users.php:332 -#: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/feeds.php:1057 classes/feeds.php:1148 classes/pref/users.php:332 +#: classes/pref/filters.php:641 classes/pref/feeds.php:1316 js/tt-rss.js:173 msgid "Search" msgstr "Suchen" @@ -1373,13 +1252,10 @@ msgstr "Feed-Archiv" msgid "limit:" msgstr "Grenzwert:" -#: classes/feeds.php:1088 -#: classes/pref/users.php:358 -#: classes/pref/labels.php:284 -#: classes/pref/filters.php:398 -#: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/feeds.php:1088 classes/pref/users.php:358 +#: classes/pref/labels.php:284 classes/pref/filters.php:398 +#: classes/pref/filters.php:667 classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Entfernen" @@ -1415,8 +1291,7 @@ msgstr "Strg" msgid "Help topic not found." msgstr "Hilfethema nicht gefunden." -#: classes/opml.php:28 -#: classes/opml.php:33 +#: classes/opml.php:28 classes/opml.php:33 msgid "OPML Utility" msgstr "OPML Werkzeug" @@ -1462,26 +1337,41 @@ msgstr "Füge Filter hinzu..." msgid "Processing category: %s" msgstr "Verarbeite Kategorie: %s" -#: classes/opml.php:468 +#: classes/opml.php:465 plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "Upload schlug fehl. Fehlercode: %d" + +#: classes/opml.php:479 plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +msgid "Unable to move uploaded file." +msgstr "Fehler: konnte die hochgeladene Datei nicht verschieben." + +#: classes/opml.php:483 plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Fehler: bitte eine OPML-Datei hochladen." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +msgid "Error: unable to find moved OPML file." +msgstr "Fehler: konnte die verschobene OPML-Datei nicht finden." + +#: classes/opml.php:499 plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Fehler beim Parsen des Dokuments." -#: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/users.php:6 classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." -msgstr "Sie haben nicht die benötigten Rechte um diese Registerkarte zu öffnen." +msgstr "" +"Sie haben nicht die benötigten Rechte um diese Registerkarte zu öffnen." #: classes/pref/users.php:34 msgid "User not found" msgstr "Benutzer nicht gefunden" -#: classes/pref/users.php:53 -#: classes/pref/users.php:404 +#: classes/pref/users.php:53 classes/pref/users.php:404 msgid "Registered" msgstr "Registriert" @@ -1505,9 +1395,8 @@ msgstr "Zugriffsberechtigung: " msgid "Change password to" msgstr "Passwort ändern in" -#: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/users.php:161 classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Optionen" @@ -1544,18 +1433,12 @@ msgstr "Sende das neue Passwort von Benutzer <b>%s</b> an <b>%s</b>" msgid "[tt-rss] Password change notification" msgstr "[tt-rss] Benachrichtigung: Passwort geändert" -#: classes/pref/users.php:342 -#: classes/pref/labels.php:272 -#: classes/pref/filters.php:279 -#: classes/pref/filters.php:327 -#: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/users.php:342 classes/pref/labels.php:272 +#: classes/pref/filters.php:279 classes/pref/filters.php:327 +#: classes/pref/filters.php:645 classes/pref/filters.php:733 +#: classes/pref/filters.php:760 classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 plugins/instances/init.php:284 msgid "Select" msgstr "Auswahl" @@ -1567,9 +1450,8 @@ msgstr "Benutzer anlegen" msgid "Details" msgstr "Details" -#: classes/pref/users.php:356 -#: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: classes/pref/users.php:356 classes/pref/filters.php:660 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Bearbeiten" @@ -1581,8 +1463,7 @@ msgstr "Zugriffsberechtigung" msgid "Last login" msgstr "Zuletzt angemeldet" -#: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: classes/pref/users.php:426 plugins/instances/init.php:334 msgid "Click to edit" msgstr "Zum Bearbeiten klicken" @@ -1594,9 +1475,8 @@ msgstr "Keine Benutzer definiert." msgid "No matching users found." msgstr "Keine zugehörigen Benutzer gefunden." -#: classes/pref/labels.php:22 -#: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/labels.php:22 classes/pref/filters.php:268 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Titel" @@ -1627,47 +1507,44 @@ msgstr "Artikel, die auf diesen Filter passen: " #: classes/pref/filters.php:133 msgid "No recent articles matching this filter have been found." -msgstr "Keine kürzlich erschienenen Artikel gefunden, die auf diesen Filter passen." +msgstr "" +"Keine kürzlich erschienenen Artikel gefunden, die auf diesen Filter passen." #: classes/pref/filters.php:137 -msgid "Complex expressions might not give results while testing due to issues with database server regexp implementation." -msgstr "Komplexe Filter liefern im Testmodus möglichweise keine Ergebnisse, da es Probleme mit der RegExp-Implementierung des Datenbankservers gibt." +msgid "" +"Complex expressions might not give results while testing due to issues with " +"database server regexp implementation." +msgstr "" +"Komplexe Filter liefern im Testmodus möglichweise keine Ergebnisse, da es " +"Probleme mit der RegExp-Implementierung des Datenbankservers gibt." -#: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:274 classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Kriterien" -#: classes/pref/filters.php:288 -#: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:288 classes/pref/filters.php:336 +#: classes/pref/filters.php:742 classes/pref/filters.php:769 msgid "Add" msgstr "Hinzufügen" -#: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:322 classes/pref/filters.php:755 msgid "Apply actions" msgstr "Aktionen anwenden" -#: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:372 classes/pref/filters.php:784 msgid "Enabled" msgstr "Aktiviert" -#: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:381 classes/pref/filters.php:787 msgid "Match any rule" msgstr "Ein erfülltes Kriterium ist ausreichend" -#: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:390 classes/pref/filters.php:790 msgid "Inverse matching" msgstr "Invertierte Übereinstimmung" -#: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:402 classes/pref/filters.php:797 msgid "Test" msgstr "Test" @@ -1684,62 +1561,57 @@ msgstr "%s innerhalb %s von %s %s" msgid "Combine" msgstr "Zusammenfügen" -#: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/filters.php:663 classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "Sortierreihenfolge zurücksetzen" -#: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/filters.php:671 classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Artikel neu bewerten" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Erstellen" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "Invertiere reguläre Ausdrücke" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "in Feld" -#: classes/pref/filters.php:864 -#: js/PrefFilterTree.js:45 +#: classes/pref/filters.php:863 js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "in" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" msgstr "Regel speichern" -#: classes/pref/filters.php:877 -#: js/functions.js:1013 +#: classes/pref/filters.php:876 js/functions.js:1013 msgid "Add rule" msgstr "Regel hinzufügen" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Aktion ausführen" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "mit Parametern:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" msgstr "Aktion speichern" -#: classes/pref/filters.php:944 -#: js/functions.js:1039 +#: classes/pref/filters.php:943 js/functions.js:1039 msgid "Add action" msgstr "Aktion hinzufügen" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 msgid "[No caption]" msgstr "[kein Titel]" @@ -1772,16 +1644,25 @@ msgid "Blacklisted tags" msgstr "Gesperrte Tags" #: classes/pref/prefs.php:27 -msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)." -msgstr "Bei der automatischen Erkennung von Tags in Artikeln werden die folgenden nicht verwendet (durch Komma getrennte Liste)." +msgid "" +"When auto-detecting tags in articles these tags will not be applied (comma-" +"separated list)." +msgstr "" +"Bei der automatischen Erkennung von Tags in Artikeln werden die folgenden " +"nicht verwendet (durch Komma getrennte Liste)." #: classes/pref/prefs.php:28 msgid "Automatically mark articles as read" msgstr "Artikel automatisch als gelesen markieren" #: classes/pref/prefs.php:28 -msgid "This option enables marking articles as read automatically while you scroll article list." -msgstr "Diese Option aktiviert das automatische \"Als gelesen markieren\" im kombinierten Anzeigemodus (ausgenommen ist der Neue-Artikel-Feed), während Sie durch die Artikelliste scrollen." +msgid "" +"This option enables marking articles as read automatically while you scroll " +"article list." +msgstr "" +"Diese Option aktiviert das automatische \"Als gelesen markieren\" im " +"kombinierten Anzeigemodus (ausgenommen ist der Neue-Artikel-Feed), während " +"Sie durch die Artikelliste scrollen." #: classes/pref/prefs.php:29 msgid "Automatically expand articles in combined mode" @@ -1792,8 +1673,12 @@ msgid "Combined feed display" msgstr "Kombinierte Feed-Anzeige" #: classes/pref/prefs.php:30 -msgid "Display expanded list of feed articles, instead of separate displays for headlines and article content" -msgstr "Erweiterte Anzeigeliste für Artikel, anstelle von einzelnen Fenstern für Schlagzeilen und Artikelinhalt" +msgid "" +"Display expanded list of feed articles, instead of separate displays for " +"headlines and article content" +msgstr "" +"Erweiterte Anzeigeliste für Artikel, anstelle von einzelnen Fenstern für " +"Schlagzeilen und Artikelinhalt" #: classes/pref/prefs.php:31 msgid "Confirm marking feed as read" @@ -1804,13 +1689,16 @@ msgid "Amount of articles to display at once" msgstr "Anzahl der Artikel, die gleichzeitig geladen werden" #: classes/pref/prefs.php:33 -#, fuzzy msgid "Default feed update interval" -msgstr "Standard-Intervall" +msgstr "Standard-Intervall für Feed-Updates" #: classes/pref/prefs.php:33 -msgid "Shortest interval at which a feed will be checked for updates regardless of update method" +msgid "" +"Shortest interval at which a feed will be checked for updates regardless of " +"update method" msgstr "" +"Kürzestes Intervall, in dem ein Feed, unabhängig von der gewählten Update-" +"Methode, auf neue Beiträge überprüft wird" #: classes/pref/prefs.php:34 msgid "Mark articles in e-mail digest as read" @@ -1821,8 +1709,12 @@ msgid "Enable e-mail digest" msgstr "Aktiviere E-Mail-Zusammenfassung" #: classes/pref/prefs.php:35 -msgid "This option enables sending daily digest of new (and unread) headlines on your configured e-mail address" -msgstr "Diese Option aktiviert das Senden einer täglichen Zusammenfassung über neue (und ungelesene) Schlagzeilen an Ihre angegebene E-Mail-Adresse" +msgid "" +"This option enables sending daily digest of new (and unread) headlines on " +"your configured e-mail address" +msgstr "" +"Diese Option aktiviert das Senden einer täglichen Zusammenfassung über neue " +"(und ungelesene) Schlagzeilen an Ihre angegebene E-Mail-Adresse" #: classes/pref/prefs.php:36 msgid "Try to send digests around specified time" @@ -1869,8 +1761,11 @@ msgid "On catchup show next feed" msgstr "Den nächsten Feed anzeigen" #: classes/pref/prefs.php:44 -msgid "Automatically open next feed with unread articles after marking one as read" -msgstr "Automatisch nächsten Feed mit ungelesenen Artikeln laden, nachdem ein Feed als gelesen markiert wurde" +msgid "" +"Automatically open next feed with unread articles after marking one as read" +msgstr "" +"Automatisch nächsten Feed mit ungelesenen Artikeln laden, nachdem ein Feed " +"als gelesen markiert wurde" #: classes/pref/prefs.php:45 msgid "Purge articles after this number of days (0 - disables)" @@ -1880,8 +1775,7 @@ msgstr "Alte Artikel nach dieser Anzahl an Tagen löschen (0 - deaktivert)" msgid "Purge unread articles" msgstr "Ungelesene Artikel löschen" -#: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: classes/pref/prefs.php:47 plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Schlagzeilensortierung umkehren (älteste zuerst)" @@ -1899,7 +1793,9 @@ msgstr "Feeds nach Schlagzeilendatum sortieren" #: classes/pref/prefs.php:50 msgid "Use feed-specified date to sort headlines instead of local import date." -msgstr "Benutze feed-spezifisches Datum statt des lokalen Importdatums um Schlagzeilen zu sortieren." +msgstr "" +"Benutze feed-spezifisches Datum statt des lokalen Importdatums um " +"Schlagzeilen zu sortieren." #: classes/pref/prefs.php:51 msgid "Login with an SSL certificate" @@ -1921,8 +1817,7 @@ msgstr "Unsichere Tags aus Artikeln entfernen" msgid "Strip all but most common HTML tags when reading articles." msgstr "Alle außer den meist verwendeten HTML Tags beim Lesen entfernen." -#: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: classes/pref/prefs.php:54 js/prefs.js:1734 msgid "Customize stylesheet" msgstr "Benutzerdefiniertes Stylesheet" @@ -1931,8 +1826,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "CSS Stylesheet nach Ihren Vorlieben anpassen" #: classes/pref/prefs.php:55 -msgid "User timezone" -msgstr "Zeitzone des Benutzers" +msgid "Time zone" +msgstr "Zeitzone" #: classes/pref/prefs.php:56 msgid "Group headlines in virtual feeds" @@ -1940,25 +1835,31 @@ msgstr "Schlagzeilen in virtuellen Feeds gruppieren" #: classes/pref/prefs.php:56 msgid "Special feeds, labels, and categories are grouped by originating feeds" -msgstr "Spezial-Feeds, Labels und Kategorien sind nach den ursprünglichen Feeds gruppiert" +msgstr "" +"Spezial-Feeds, Labels und Kategorien sind nach den ursprünglichen Feeds " +"gruppiert" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Thema auswählen" +msgid "Language" +msgstr "Sprache" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "Theme" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "Wählen Sie eines der vorhandenen CSS-Themes aus" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "Altes Passwort darf nicht leer sein." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "Neues Passwort darf nicht leer sein." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Die eingegebenen Passwörter stimmen nicht überein." @@ -1966,221 +1867,243 @@ msgstr "Die eingegebenen Passwörter stimmen nicht überein." msgid "Function not supported by authentication module." msgstr "Funktion vom Authentifizierungsmodul nicht unterstützt." -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "Die Einstellungen wurden gespeichert." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Unbekannte Option: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "Ihre persönlichen Daten wurden gespeichert." -#: classes/pref/prefs.php:184 -#, fuzzy +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." -msgstr "Einige Einstellungen sind nur im Standardprofil verfügbar." +msgstr "Ihre Einstellungen sind jetzt auf die Standardwerte gesetzt." -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "Persönliche Daten / Authentifizierung" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Persönliche Daten" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "Vollständiger Name" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "E-Mail" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Zugriffsberechtigung" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "Speichern" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "Sie nutzen das Standard Passwort, bitte ändern Sie es." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "Das Ändern des aktuellen Passworts deaktiviert Einmalpasswörter." -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Altes Passwort" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Neues Passwort" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Passwort bestätigen" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Passwort ändern" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "Einmalpasswörter (OTP) / Authentifikator" -#: classes/pref/prefs.php:338 -msgid "One time passwords are currently enabled. Enter your current password below to disable." -msgstr "Einmalpasswörter sind aktiviert. Gib dein aktuelles Passwort ein, um diese zu deaktivieren." +#: classes/pref/prefs.php:327 +msgid "" +"One time passwords are currently enabled. Enter your current password below " +"to disable." +msgstr "" +"Einmalpasswörter sind aktiviert. Gib dein aktuelles Passwort ein, um diese " +"zu deaktivieren." -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 classes/pref/prefs.php:403 msgid "Enter your password" msgstr "Geben Sie Ihr Passwort ein" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" msgstr "Einmalpasswörter ausschalten" -#: classes/pref/prefs.php:380 -msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." -msgstr "Sie benötigen einen kompatiblen Authentifikator. Sollten Sie Ihr Passwort ändern, wird diese Funktion automatisch ausgeschaltet." +#: classes/pref/prefs.php:369 +msgid "" +"You will need a compatible Authenticator to use this. Changing your password " +"would automatically disable OTP." +msgstr "" +"Sie benötigen einen kompatiblen Authentifikator. Sollten Sie Ihr Passwort " +"ändern, wird diese Funktion automatisch ausgeschaltet." -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "Scannen Sie den folgenden Code mit Ihrem Authentifikator:" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "Ich habe den Code gescannt und möchte die Anmeldung mit Einmalpasswörtern jetzt aktivieren" +#: classes/pref/prefs.php:408 +msgid "Enter the generated one time password" +msgstr "Bitte geben Sie das Einmalpasswort ein:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" msgstr "Einmalpasswörter einschalten" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "PHP GD Funktionen werden für den OTP-Support benötigt." + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "Einige Einstellungen sind nur im Standardprofil verfügbar." -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "Anpassen" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "Registrieren" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "Löschen" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "Aktuelle Serverzeit: %s (UTC)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Einstellungen speichern" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 msgid "Save and exit preferences" msgstr "Speichern und Einstellungen verlassen" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "Profile verwalten" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Auf Standardwerte zurücksetzen" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 classes/pref/prefs.php:708 msgid "Plugins" msgstr "Plugins" -#: classes/pref/prefs.php:730 -msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." -msgstr "Du musst Tiny Tiny RSS neu laden, damit Pluginänderungen angewandt werden." +#: classes/pref/prefs.php:710 +msgid "" +"You will need to reload Tiny Tiny RSS for plugin changes to take effect." +msgstr "" +"Du musst Tiny Tiny RSS neu laden, damit Pluginänderungen angewandt werden." -#: classes/pref/prefs.php:732 -msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." -msgstr "Mehr Plugins im tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">Forum</a> oder im <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">Wiki</a>." +#: classes/pref/prefs.php:712 +msgid "" +"Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank" +"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a " +"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins" +"\">wiki</a>." +msgstr "" +"Mehr Plugins im tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=" +"\"http://tt-rss.org/forum/viewforum.php?f=22\">Forum</a> oder im <a target=" +"\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins" +"\">Wiki</a>." -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "System-Plugins" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 classes/pref/prefs.php:796 msgid "Plugin" msgstr "Plugin" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 classes/pref/prefs.php:797 msgid "Description" msgstr "Beschreibung" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 classes/pref/prefs.php:798 msgid "Version" msgstr "Version" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 classes/pref/prefs.php:799 msgid "Author" msgstr "Autor" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 classes/pref/prefs.php:831 msgid "more info" msgstr "weitere Informationen" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 classes/pref/prefs.php:840 msgid "Clear data" msgstr "Daten löschen" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "Benutzer-Plugins" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 msgid "Enable selected plugins" msgstr "Ausgewählte Plugins aktivieren" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +msgid "Incorrect one time password" +msgstr "Falsches Einmalpasswort" + +#: classes/pref/prefs.php:925 classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "Falsches Passwort" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format -msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." -msgstr "Sie können Farben, Schriftarten und das Layout Ihres aktuell gewählten Themas mit einem eigenen CSS-Stylesheet überschreiben. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Diese Datei</a> kann als Grundlage benutzt werden." +msgid "" +"You can override colors, fonts and layout of your currently selected theme " +"with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink" +"\" href=\"%s\">This file</a> can be used as a baseline." +msgstr "" +"Sie können Farben, Schriftarten und das Layout Ihres aktuell gewählten " +"Themas mit einem eigenen CSS-Stylesheet überschreiben. <a target=\"_blank\" " +"class=\"visibleLink\" href=\"%s\">Diese Datei</a> kann als Grundlage benutzt " +"werden." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Profil erstellen" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 classes/pref/prefs.php:1060 msgid "(active)" msgstr "(aktiv)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "Ausgewählte Profile entfernen" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Profil aktivieren" @@ -2188,268 +2111,314 @@ msgstr "Profil aktivieren" msgid "Check to enable field" msgstr "Ankreuzen um das Feld zu aktivieren" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "Feed-Titel" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 classes/pref/feeds.php:835 msgid "Update" msgstr "Aktualisieren" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Artikel löschen:" -#: classes/pref/feeds.php:606 -msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." -msgstr "<b>Hinweis:</b> Sie müssen Ihre Login-Informationen eingeben, wenn Ihr Feed eine Authentifizierung erfordert (außer Twitter-Feeds)." +#: classes/pref/feeds.php:645 +msgid "" +"<b>Hint:</b> you need to fill in your login information if your feed " +"requires authentication, except for Twitter feeds." +msgstr "" +"<b>Hinweis:</b> Sie müssen Ihre Login-Informationen eingeben, wenn Ihr Feed " +"eine Authentifizierung erfordert (außer Twitter-Feeds)." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "Nicht unter beliebten Feeds aufführen" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "In E-Mail-Zusammenfassung aufnehmen" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Angehängte Bilder immer anzeigen" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "Bilder nicht einbetten" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Bilder lokal zwischenspeichern" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "Aktualisierte Artikel als ungelesen markieren" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Symbol" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Ersetzen" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "Abonnierte Feeds:" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "PubSubHubbub-Abonnementstatus für Push-fähige Feeds zurücksetzen." -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 classes/pref/feeds.php:1222 msgid "All done." msgstr "Fertig." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Feeds mit Fehlern" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "Inaktive Feeds" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Bearbeite ausgewählte Feeds" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 js/prefs.js:1779 msgid "Batch subscribe" msgstr "Mehrere Feeds abonnieren" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "Kategorien" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "Kategorie anlegen" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "Ausgewählte Kategorien löschen" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "Zeige/Verstecke leere Kategorien" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "Mehr Aktionen..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Manuelles Löschen" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "Feed-Daten löschen" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 -msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." -msgstr "Über OPML können Feeds, Filter, Label und Tiny-Tiny-RSS-Einstellungen importiert und exportiert werden." +#: classes/pref/feeds.php:1427 +msgid "" +"Using OPML you can export and import your feeds, filters, labels and Tiny " +"Tiny RSS settings." +msgstr "" +"Über OPML können Feeds, Filter, Label und Tiny-Tiny-RSS-Einstellungen " +"importiert und exportiert werden." -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "Nur das Hauptprofil kann mit OPML gesichert werden." -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "OPML importieren" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "Dateiname:" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "Inklusive Einstellungen" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "OPML exportieren" -#: classes/pref/feeds.php:1399 -msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." -msgstr "Ihre OPML können veröffentlicht werden, so dass jeder, der die URL kennt, diese abonnieren kann." +#: classes/pref/feeds.php:1456 +msgid "" +"Your OPML can be published publicly and can be subscribed by anyone who " +"knows the URL below." +msgstr "" +"Ihre OPML können veröffentlicht werden, so dass jeder, der die URL kennt, " +"diese abonnieren kann." -#: classes/pref/feeds.php:1401 -msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." -msgstr "Eine öffentliche OPML enthält keine Tiny-Tiny-RSS-Einstellungen, passwortgeschützte Feeds oder Feeds, die nicht in den beliebten Feeds auftauchen sollen." +#: classes/pref/feeds.php:1458 +msgid "" +"Published OPML does not include your Tiny Tiny RSS settings, feeds that " +"require authentication or feeds hidden from Popular feeds." +msgstr "" +"Eine öffentliche OPML enthält keine Tiny-Tiny-RSS-Einstellungen, " +"passwortgeschützte Feeds oder Feeds, die nicht in den beliebten Feeds " +"auftauchen sollen." -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "Öffentliche OPML-URL" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "Zeige öffentliche OPML-URL" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Firefox-Integration" -#: classes/pref/feeds.php:1416 -msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." -msgstr "Tiny Tiny RSS kann durch den folgenden Link als Feedreader für Firefox verwendet werden." +#: classes/pref/feeds.php:1472 +msgid "" +"This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the " +"link below." +msgstr "" +"Tiny Tiny RSS kann durch den folgenden Link als Feedreader für Firefox " +"verwendet werden." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Diese Website als Feedreader registrieren." -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" msgstr "Veröffentlichte & geteilte Artikel / erzeugte Feeds" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "Veröffentlichte Artikel und erzeugte Feeds" -#: classes/pref/feeds.php:1435 -msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." -msgstr "Veröffentlichte Artikel werden als öffentlicher RSS-Feed exportiert und können von jedem abonniert werden, der die nachstehende URL kennt." +#: classes/pref/feeds.php:1491 +msgid "" +"Published articles are exported as a public RSS feed and can be subscribed " +"by anyone who knows the URL specified below." +msgstr "" +"Veröffentlichte Artikel werden als öffentlicher RSS-Feed exportiert und " +"können von jedem abonniert werden, der die nachstehende URL kennt." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "Zeige URL an" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "Alle generierten URLs löschen" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "Per URL geteilte Artikel" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "Sie können alle durch URLs geteilten Artikel hier deaktivieren." -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "Alle veröffentlichten Artikel zurückziehen" -#: classes/pref/feeds.php:1529 -msgid "These feeds have not been updated with new content for 3 months (oldest first):" -msgstr "Folgende Feeds konnten seit 3 Monaten nicht aktualisiert werden (älteste zuerst):" +#: classes/pref/feeds.php:1582 +msgid "" +"These feeds have not been updated with new content for 3 months (oldest " +"first):" +msgstr "" +"Folgende Feeds konnten seit 3 Monaten nicht aktualisiert werden (älteste " +"zuerst):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "Zum Bearbeiten klicken" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "Ausgewählte Feeds abbestellen" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Folgende Feeds konnten aufgrund von Fehlern nicht aktualisiert werden:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" -msgstr "Einen gültigen RSS Feed pro Zeile hinzufügen (Es findet keine Feederkennung statt)" +msgstr "" +"Einen gültigen RSS Feed pro Zeile hinzufügen (Es findet keine Feederkennung " +"statt)" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "Zu abonnierende Feeds, Einen pro Zeile" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "Feeds benötigen Authentifizierung." -#: plugins/digest/digest_body.php:59 -msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." -msgstr "Diese Anwendung benötigt Javascript um ordnungsgemäß zu funktionieren. Bitte überprüfen Sie Ihre Browser-Einstellungen." +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "Fehler-Protokoll" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "Neuladen" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "Fehler" + +#: classes/pref/system.php:42 +msgid "Filename" +msgstr "Dateiname" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "Meldung" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Datum" -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:57 +msgid "" +"Your browser doesn't support Javascript, which is required for this " +"application to function properly. Please check your browser settings." +msgstr "" +"Diese Anwendung benötigt Javascript um ordnungsgemäß zu funktionieren. Bitte " +"überprüfen Sie Ihre Browser-Einstellungen." + +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Hallo," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "Reguläre Version" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "Artikel schließen" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "NSFW (Klicken zum Anzeigen)" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "NSFW Plugin" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "Liste von NSFW-Tags (kommagetrennt)" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 msgid "Configuration saved." msgstr "Die Einstellungen wurden gespeichert." @@ -2465,17 +2434,16 @@ msgstr "Passwort wurde geändert." msgid "Old password is incorrect." msgstr "Altes Passwort ist falsch." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 plugins/mobile/prefs.php:25 msgid "Home" msgstr "Startseite" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "Nichts gefunden (klicken um Feed zu aktualisieren)" @@ -2483,406 +2451,428 @@ msgstr "Nichts gefunden (klicken um Feed zu aktualisieren)" msgid "Open regular version" msgstr "Reguläre Version öffnen" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "Feedkategorien aktivieren" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "ON" msgstr "AN" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "OFF" msgstr "AUS" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "Kategorien wie Ordner behandeln" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "Bilder in Artikeln anzeigen" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "Gelesene Artikel und Feeds verstecken" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "Feeds nach Anzahl der ungelesenen Artikel sortieren" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[Weitergeleitet]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 plugins/mail/init.php:64 msgid "Multiple articles" msgstr "Mehrere Artikel" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "Klicken Sie den folgenden Link, um Ihren Mailclienten aufzurufen:" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 msgid "Forward selected article(s) by email." msgstr "Markierte(n) Artikel per E-Mail weiterleiten" -#: plugins/mailto/init.php:81 -msgid "You should be able to edit the message before sending in your mail client." -msgstr "Sie können die Nachricht bearbeiten, bevor Sie diese mit Ihrem Mailclienten abschicken." +#: plugins/mailto/init.php:78 +msgid "" +"You should be able to edit the message before sending in your mail client." +msgstr "" +"Sie können die Nachricht bearbeiten, bevor Sie diese mit Ihrem Mailclienten " +"abschicken." -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 msgid "Close this dialog" msgstr "Diesen Dialog schließen" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "Lesezeichen" -#: plugins/bookmarklets/init.php:24 -msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." -msgstr "Ziehen Sie den folgenden Link in Ihre Browser-Toolbar, öffnen Sie den Feed, an dem Sie interessiert sind, in Ihren Browser und klicken auf den Link, um ihn zu abonnieren." +#: plugins/bookmarklets/init.php:22 +msgid "" +"Drag the link below to your browser toolbar, open the feed you're interested " +"in in your browser and click on the link to subscribe to it." +msgstr "" +"Ziehen Sie den folgenden Link in Ihre Browser-Toolbar, öffnen Sie den Feed, " +"an dem Sie interessiert sind, in Ihren Browser und klicken auf den Link, um " +"ihn zu abonnieren." -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "%s in Tiny Tiny RSS abonnieren?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "Abonnieren in Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" -msgstr "Benutzen Sie dieses Lesezeichen, um beliebige Seiten mit Tiny Tiny RSS zu teilen" +msgstr "" +"Benutzen Sie dieses Lesezeichen, um beliebige Seiten mit Tiny Tiny RSS zu " +"teilen" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "Import und Export" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "Artikelarchiv" -#: plugins/import_export/init.php:65 -msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." -msgstr "Die markierten und archivierten Artikel können zur Aufbewahrung oder Migration zwischen verschiedenen Tiny Tiny RSS Instanzen exportiert werden." +#: plugins/import_export/init.php:62 +msgid "" +"You can export and import your Starred and Archived articles for safekeeping " +"or when migrating between tt-rss instances." +msgstr "" +"Die markierten und archivierten Artikel können zur Aufbewahrung oder " +"Migration zwischen verschiedenen Tiny Tiny RSS Instanzen exportiert werden." -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "Meine Daten exportieren" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importieren" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "Import fehlgeschlagen: Falsche Schemaversion" -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "Import fehlgeschlagen: Unbekanntes Dateiformat" -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "Beendet: " -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "%d Artikel verarbeitet, " msgstr[1] "%d Artikel verarbeitet, " -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "%d importiert, " msgstr[1] "%d importiert, " -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "%d Feed erstellt." msgstr[1] "%d Feeds erstellt." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "Konnte XML-Datei nicht laden." -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "Bereite Daten vor" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "Datei konnte nicht hochgeladen werden. Möglicherweise muss upload_max_filesize in der PHP.ini angepasst werden. (Aktueller Wert = %s)" +#: plugins/import_export/init.php:444 plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." +msgstr "Es wurde keine Datei hochgeladen." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "Absender:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "Empfänger:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Betreff:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "E-Mail versenden" -#: plugins/note/init.php:28 -#: plugins/note/note.js:11 +#: plugins/note/init.php:26 plugins/note/note.js:11 msgid "Edit article note" msgstr "Artikelnotizen bearbeiten" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "Beispiel Pane" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "Beispielwert" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "Wert setzen" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "Es wurde keine Datei hochgeladen." - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "Fertig. %d von %d Artikeln importiert." -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "Das Dokumentenformat ist fehlerhaft" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "Importiere markierte oder geteilte Einträge aus dem Google Reader" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "Wählen Sie ihre starred.json oder shared.json aus." -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "Importiere meine markierten Einträge" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "Verbunden" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 plugins/instances/init.php:395 msgid "Instance" msgstr "Instanz" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "Instanz-URL" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 plugins/instances/init.php:414 msgid "Access key:" msgstr "Zugriffsberechtigung:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "Zugriffsberechtigung" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 plugins/instances/init.php:421 msgid "Use one access key for both linked instances." -msgstr "Benutzen Sie den selben Zugriffschlüssel für beide verbundenen Instanzen." +msgstr "" +"Benutzen Sie den selben Zugriffschlüssel für beide verbundenen Instanzen." -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 plugins/instances/init.php:429 msgid "Generate new key" msgstr "Neuen Zugriffsschlüssel erzeugen" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "Instanz verbinden" -#: plugins/instances/init.php:307 -msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" -msgstr "Sie können andere Instanzen von Tiny Tiny RSS mit dieser verbinden, um beliebte Feeds zu teilen. Verbinden Sie diese Instanz von Tiny Tiny RSS mit folgender URL:" +#: plugins/instances/init.php:304 +msgid "" +"You can connect other instances of Tiny Tiny RSS to this one to share " +"Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" +msgstr "" +"Sie können andere Instanzen von Tiny Tiny RSS mit dieser verbinden, um " +"beliebte Feeds zu teilen. Verbinden Sie diese Instanz von Tiny Tiny RSS mit " +"folgender URL:" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "Zuletzt verbunden" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "Status" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "Gespeicherte Feeds" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Verbindung herstellen" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "Per URL teilen" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "Sie können diesen Artikel über folgende eindeutige URL teilen:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "Tiny Tiny RSS updaten" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Tiny Tiny RSS ist auf dem neuesten Stand." -#: plugins/updater/init.php:351 -#, fuzzy +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." -msgstr "Diesen Dialog nicht Schließen, bis das Update abgeschlossen ist. Sichern Sie ihr tt-rss Verzeichnis, bevor Sie fortfahren." +msgstr "Diesen Dialog nicht Schließen, bis das Update abgeschlossen ist." -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" +"Es wird empfohlen, das tt-rss Verzeichnis zu sichern, bevor Sie fortfahren." -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." -msgstr "" +msgstr "Ihre Datenbank wird nicht verändert" -#: plugins/updater/init.php:362 -msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." +#: plugins/updater/init.php:360 +msgid "" +"Your current tt-rss installation directory will not be modified. It will be " +"renamed and left in the parent directory. You will be able to migrate all " +"your customized files after update finishes." msgstr "" +"Ihre aktuelle tt-rss Installation wird nicht verändert. Sie wird umbenannt " +"und bleibt somit erhalten. Ihre Anpassungen können Sie nach dem Update " +"migrieren." -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." msgstr "Bereit zum Updaten." -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" msgstr "Starte update" -#: js/feedlist.js:394 -#: js/feedlist.js:422 -#: plugins/digest/digest.js:26 +#: js/feedlist.js:395 js/feedlist.js:423 plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Alle Artikel in %s als gelesen markieren?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 msgid "Mark all articles in %s older than 1 day as read?" -msgstr "Alle Artikel in %s, die älter als einen Tag sind, als gelesen markieren?" +msgstr "" +"Alle Artikel in %s, die älter als einen Tag sind, als gelesen markieren?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 msgid "Mark all articles in %s older than 1 week as read?" -msgstr "Alle Artikel in %s, die älter als eine Woche sind, als gelesen markieren?" +msgstr "" +"Alle Artikel in %s, die älter als eine Woche sind, als gelesen markieren?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 msgid "Mark all articles in %s older than 2 weeks as read?" -msgstr "Alle Artikel in %s, die älter als 2 Wochen sind, als gelesen markieren?" +msgstr "" +"Alle Artikel in %s, die älter als 2 Wochen sind, als gelesen markieren?" -#: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." -msgstr "Sind Sie sicher, dass Sie diesen Fehler an tt-rss.org melden wollen? Der Bericht enthält Ihre Browser-Informationen. Ihre IP-Adresse würde in der Datenbank gespeichert werden." +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "Der Fehler wird im Fehlerprotokoll gespeichert" -#: js/functions.js:214 -msgid "close" -msgstr "schließen" +#: js/functions.js:107 +msgid "" +"Are you sure to report this exception to tt-rss.org? The report will include " +"your browser information. Your IP would be saved in the database." +msgstr "" +"Sind Sie sicher, dass Sie diesen Fehler an tt-rss.org melden wollen? Der " +"Bericht enthält Ihre Browser-Informationen. Ihre IP-Adresse würde in der " +"Datenbank gespeichert werden." -#: js/functions.js:586 +#: js/functions.js:236 +msgid "Click to close" +msgstr "Zum Schließen klicken" + +#: js/functions.js:612 msgid "Error explained" msgstr "Fehler erklärt" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "Upload fertig." -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "Gespeichertes Feed-Symbol entfernen?" -#: js/functions.js:697 +#: js/functions.js:723 msgid "Removing feed icon..." msgstr "Feedsymbol wird entfernt." -#: js/functions.js:702 +#: js/functions.js:728 msgid "Feed icon removed." msgstr "Feedsymbol entfernt." -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "Bitte eine Bilddatei zum Hochladen auswählen." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "Neues Symbol für diesen Feed hochladen?" -#: js/functions.js:727 +#: js/functions.js:753 msgid "Uploading, please wait..." msgstr "Lade hoch, bitte warten..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "Bitte einen Label-Titel eingeben:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "Kann das Label nicht hinzufügen: fehlender Titel." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "Feed abonnieren" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "%s abonniert" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "Die angegebene URL scheint ungültig zu sein." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "Die angegebene URL scheint keine Feeds zu enthalten." -#: js/functions.js:879 +#: js/functions.js:862 +msgid "Expand to select feed" +msgstr "Ausklappen um Feed auszuwählen" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "Die angegebene URL konnte nicht heruntergeladen werden: %s" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "XML-Validierung fehlgeschlagen: %s" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "Sie haben diesen Feed bereits abonniert." @@ -2900,15 +2890,18 @@ msgid "Create Filter" msgstr "Filter erstellen" #: js/functions.js:1191 -msgid "Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update." -msgstr "Abonnement zurücksetzen? Tiny Tiny RSS wird versuchen, sich bei der nächsten Feed-Aktualisierung erneut beim Benachrichtigungs-Hub anzumelden." +msgid "" +"Reset subscription? Tiny Tiny RSS will try to subscribe to the notification " +"hub again on next feed update." +msgstr "" +"Abonnement zurücksetzen? Tiny Tiny RSS wird versuchen, sich bei der nächsten " +"Feed-Aktualisierung erneut beim Benachrichtigungs-Hub anzumelden." #: js/functions.js:1202 msgid "Subscription reset." msgstr "Abonnement zurückgesetzt." -#: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/functions.js:1212 js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "%s abbestellen?" @@ -2916,70 +2909,61 @@ msgstr "%s abbestellen?" msgid "Removing feed..." msgstr "Feed wird entfernt..." -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "Bitte geben Sie den Kategorietitel ein:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "Neue Veröffentlichungsadresse für diesen Feed erzeugen?" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 js/prefs.js:1231 msgid "Trying to change address..." msgstr "Versuche, die Adresse zu ändern..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 js/tt-rss.js:421 js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "Sie können diese Art von Feed nicht bearbeiten." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "Feed bearbeiten" -#: js/functions.js:1566 -#: js/prefs.js:194 -#: js/prefs.js:749 +#: js/functions.js:1567 js/prefs.js:194 js/prefs.js:749 msgid "Saving data..." msgstr "Speichere Daten..." -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "Weitere Feeds" -#: js/functions.js:1659 -#: js/functions.js:1769 -#: js/prefs.js:397 -#: js/prefs.js:427 -#: js/prefs.js:459 -#: js/prefs.js:642 -#: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/functions.js:1660 js/functions.js:1770 js/prefs.js:397 js/prefs.js:427 +#: js/prefs.js:459 js/prefs.js:642 js/prefs.js:662 js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Keine Feeds ausgewählt." -#: js/functions.js:1701 -msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." -msgstr "Die ausgewählten Feeds aus dem Archiv löschen? Feeds mit gespeicherten Artikeln werden nicht gelöscht" +#: js/functions.js:1702 +msgid "" +"Remove selected feeds from the archive? Feeds with stored articles will not " +"be removed." +msgstr "" +"Die ausgewählten Feeds aus dem Archiv löschen? Feeds mit gespeicherten " +"Artikeln werden nicht gelöscht" -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "Feeds mit Aktualisierungsfehlern" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "Ausgewählte Feeds entfernen?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 js/prefs.js:1192 msgid "Removing selected feeds..." msgstr "Ausgewählte Feeds werden entfernt..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Hilfe" @@ -3031,23 +3015,23 @@ msgstr "Ausgewählte Label entfernen?" msgid "Removing selected labels..." msgstr "Ausgewählte Label werden entfernt..." -#: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:295 js/prefs.js:1393 msgid "No labels are selected." msgstr "Keine Label ausgewählt." #: js/prefs.js:309 -msgid "Remove selected users? Neither default admin nor your account will be removed." -msgstr "Ausgewählte Benutzer löschen? Weder der Administrator noch Ihr eigenes Konto werden gelöscht." +msgid "" +"Remove selected users? Neither default admin nor your account will be " +"removed." +msgstr "" +"Ausgewählte Benutzer löschen? Weder der Administrator noch Ihr eigenes Konto " +"werden gelöscht." #: js/prefs.js:312 msgid "Removing selected users..." msgstr "Ausgewählte Benutzer werden entfernt..." -#: js/prefs.js:326 -#: js/prefs.js:507 -#: js/prefs.js:528 -#: js/prefs.js:567 +#: js/prefs.js:326 js/prefs.js:507 js/prefs.js:528 js/prefs.js:567 msgid "No users are selected." msgstr "Keine Benutzer ausgewählt." @@ -3059,9 +3043,7 @@ msgstr "Ausgewählte Filter entfernen?" msgid "Removing selected filters..." msgstr "Ausgewählte Filter werden entfernt..." -#: js/prefs.js:359 -#: js/prefs.js:597 -#: js/prefs.js:616 +#: js/prefs.js:359 js/prefs.js:597 js/prefs.js:616 msgid "No filters are selected." msgstr "Keine Filter ausgewählt." @@ -3101,9 +3083,7 @@ msgstr "Feld für Benutzername darf nicht leer sein." msgid "Saving user..." msgstr "Benutzer werden gespeichert..." -#: js/prefs.js:512 -#: js/prefs.js:533 -#: js/prefs.js:572 +#: js/prefs.js:512 js/prefs.js:533 js/prefs.js:572 msgid "Please select only one user." msgstr "Bitte nur einen Benutzer auswählen." @@ -3147,319 +3127,311 @@ msgstr "OPML Import" msgid "Please choose an OPML file first." msgstr "Bitte zuerst eine OPML-Datei auswählen." -#: js/prefs.js:815 -#: plugins/import_export/import_export.js:115 +#: js/prefs.js:815 plugins/import_export/import_export.js:115 #: plugins/googlereaderimport/init.js:45 msgid "Importing, please wait..." msgstr "Importiere, bitte warten..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "Auf Standardwerte zurücksetzen?" -#: js/prefs.js:1082 -msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." -msgstr "Kategorie %s löschen? Feeds dieser Kategorie werden dann nach Unkategorisiert verschoben." +#: js/prefs.js:1096 +msgid "" +"Remove category %s? Any nested feeds would be placed into Uncategorized." +msgstr "" +"Kategorie %s löschen? Feeds dieser Kategorie werden dann nach " +"Unkategorisiert verschoben." -#: js/prefs.js:1088 +#: js/prefs.js:1102 msgid "Removing category..." msgstr "Kategorie wird entfernt..." -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Ausgewählte Kategorien entfernen?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "Ausgewählte Kategorien werden entfernt..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Keine Kategorien ausgewählt." -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "Name der Kategorie:" -#: js/prefs.js:1137 +#: js/prefs.js:1151 msgid "Creating category..." msgstr "Kategorie wird erstellt..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "Feeds ohne kürzliche Aktualisierungen" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "Aktuelle Veröffentlichungsadresse durch eine Neue ersetzen?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "Feed wird geleert..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Artikel in gewählten Feeds neu bewerten?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 msgid "Rescoring selected feeds..." msgstr "Ausgewählte Feed werden neu bewertet..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." -msgstr "Alle Artikel neu bewerten? Dieser Vorgang kann viel Zeit in Anspruch nehmen." +msgstr "" +"Alle Artikel neu bewerten? Dieser Vorgang kann viel Zeit in Anspruch nehmen." -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." msgstr "Feed werden neu bewertet..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "Farben der ausgewählten Label auf Standardwerte zurücksetzen?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Einstellungsprofile" -#: js/prefs.js:1411 -msgid "Remove selected profiles? Active and default profiles will not be removed." -msgstr "Ausgewählte Profile löschen? Das aktive und das Standardprofil werden nicht gelöscht." +#: js/prefs.js:1425 +msgid "" +"Remove selected profiles? Active and default profiles will not be removed." +msgstr "" +"Ausgewählte Profile löschen? Das aktive und das Standardprofil werden nicht " +"gelöscht." -#: js/prefs.js:1414 +#: js/prefs.js:1428 msgid "Removing selected profiles..." msgstr "Ausgewählte Profile werden entfernt..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "Keine Profile ausgewählt." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 js/prefs.js:1504 msgid "Activate selected profile?" msgstr "Ausgewählte Profile entfernen?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "Bitte ein Profil zum Aktivieren auswählen." -#: js/prefs.js:1458 +#: js/prefs.js:1472 msgid "Creating profile..." msgstr "Profil wird erstellt..." -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "Alle zuvor erstellten Feed-URLs werden ungültig. Fortfahren?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 js/prefs.js:1550 msgid "Clearing URLs..." msgstr "Leere URLs..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 msgid "Generated URLs cleared." msgstr "Generierte URLs gelöscht." -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "Alle bisher geteilten Artikel URLs werden ungültig. Fortfahren?" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "Geteilte URLs geleert." -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Label-Editor" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "Abonniere Feeds..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "Gesicherte Daten dieses Plugins löschen?" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Alle Artikel als gelesen markieren?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "Alle Feeds werden als gelesen markiert..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." msgstr "Bitte erst das Mail-Plugin aktivieren." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 msgid "Please enable embed_original plugin first." msgstr "Bitte erst das \"Original einbetten\" Plugin aktivieren." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "Artikel nach Tag auswählen" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "Sie können die Kategorie nicht abbestellen." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Bitte erst einen Feed auswählen." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "Sie können diese Art von Feed nicht neu bewerten." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "Artikel in %s neu bewerten?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "Artikel werden neu bewertet..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "Neue Version verfügbar!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" msgstr "Suche abbrechen" -#: js/viewfeed.js:455 -#: plugins/digest/digest.js:258 +#: js/viewfeed.js:453 plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Artikelmarkierung entfernen" -#: js/viewfeed.js:459 -#: plugins/digest/digest.js:260 +#: js/viewfeed.js:457 plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Artikel markieren" -#: js/viewfeed.js:499 -#: plugins/digest/digest.js:263 +#: js/viewfeed.js:497 plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Artikelveröffentlichung widerrufen" -#: js/viewfeed.js:503 -#: plugins/digest/digest.js:265 +#: js/viewfeed.js:501 plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Artikel veröffentlichen" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 -#: plugins/mailto/init.js:7 +#: js/viewfeed.js:653 +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "%d Artikel ausgewählt." +msgstr[1] "%d Artikel ausgewählt." + +#: js/viewfeed.js:725 js/viewfeed.js:753 js/viewfeed.js:780 js/viewfeed.js:843 +#: js/viewfeed.js:877 js/viewfeed.js:997 js/viewfeed.js:1040 +#: js/viewfeed.js:1093 js/viewfeed.js:2091 plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Keine Artikel ausgewählt." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "%d ausgewählten Artikel in %s löschen?" msgstr[1] "%d ausgewählte Artikel in %s löschen?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "%d ausgewählten Artikel löschen?" msgstr[1] "%d ausgewählte Artikel löschen?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "%d ausgewählten Artikel in %s archivieren?" msgstr[1] "%d ausgewählte Artikel in %s archivieren?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "%d archivierten Artikel zurück verschieben?" msgstr[1] "%d archivierte Artikel zurück verschieben?" -#: js/viewfeed.js:1032 -msgid "Please note that unstarred articles might get purged on next feed update." -msgstr "Bitte beachten Sie, das nicht markierte Artikel beim nächsten Update der Feeds gelöscht werden könnten." +#: js/viewfeed.js:1054 +msgid "" +"Please note that unstarred articles might get purged on next feed update." +msgstr "" +"Bitte beachten Sie, das nicht markierte Artikel beim nächsten Update der " +"Feeds gelöscht werden könnten." -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "%d ausgewählten Artikel in %s als gelesen markieren?" msgstr[1] "%d ausgewählte Artikel in %s als gelesen markieren?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "Artikel-Tags bearbeiten" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "Artikel-Tags werden gespeichert..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Kein Artikel ausgewählt." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Keine Artikel zum markieren gefunden" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "%d Artikel als gelesen markieren?" msgstr[1] "%d Artikel als gelesen markieren?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "Originalartikel öffnen" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 msgid "Display article URL" msgstr "Zeige Artikel-URL an" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 msgid "Toggle marked" msgstr "Markierung ein-/ausschalten" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Label zuweisen" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "Label entfernen" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "Abspielen..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "Zum Pausieren klicken" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "Bitte geben Sie eine neue Bewertung für die ausgewählten Artikel ab:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "Bitte geben Sie eine neue Bewertung für diesen Artikel ab:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 msgid "Article URL:" msgstr "Artikel-URL:" @@ -3493,10 +3465,10 @@ msgstr "Mehr laden..." #: plugins/embed_original/init.js:6 msgid "Sorry, your browser does not support sandboxed iframes." -msgstr "Entschuldigung, dein Browser unterstützt keine \"Sandbox\" für iframes." +msgstr "" +"Entschuldigung, dein Browser unterstützt keine \"Sandbox\" für iframes." -#: plugins/mailto/init.js:21 -#: plugins/mail/mail.js:21 +#: plugins/mailto/init.js:21 plugins/mail/mail.js:21 msgid "Forward article by email" msgstr "Artikel via E-Mail weiterleiten" @@ -3505,10 +3477,18 @@ msgid "Export Data" msgstr "Daten exportieren" #: plugins/import_export/import_export.js:40 -msgid "Finished, exported %d article. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgid_plural "Finished, exported %d articles. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgstr[0] "Fertig, %d Artikel exportiert. <a class='visibleLink' href='%u'>Hier</a> herunterladen." -msgstr[1] "Fertig, %d Artikel exportiert. <a class='visibleLink' href='%u'>Hier</a> herunterladen." +msgid "" +"Finished, exported %d article. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgid_plural "" +"Finished, exported %d articles. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgstr[0] "" +"Fertig, %d Artikel exportiert. <a class='visibleLink' href='%u'>Hier</a> " +"herunterladen." +msgstr[1] "" +"Fertig, %d Artikel exportiert. <a class='visibleLink' href='%u'>Hier</a> " +"herunterladen." #: plugins/import_export/import_export.js:93 msgid "Data Import" @@ -3546,8 +3526,7 @@ msgstr "Ausgewählte Instanzen entfernen?" msgid "Removing selected instances..." msgstr "Ausgewählte Instanzen werden entfernt..." -#: plugins/instances/instances.js:139 -#: plugins/instances/instances.js:151 +#: plugins/instances/instances.js:139 plugins/instances/instances.js:151 msgid "No instances are selected." msgstr "Keine Instanzen ausgewählt." @@ -3560,9 +3539,48 @@ msgid "Share article by URL" msgstr "Artikel über URL teilen" #: plugins/updater/updater.js:58 -#, fuzzy -msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." -msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeichnis, bevor Sie fortfahren. Schreiben Sie 'yes' zum fortfahren." +msgid "" +"Backup your tt-rss directory before continuing. Please type 'yes' to " +"continue." +msgstr "" +"Bitte sichern Sie ihr tt-rss Verzeichnis, bevor Sie fortfahren. Geben Sie " +"'yes' ein, um fortzufahren." + +#~ msgid "Switch to digest..." +#~ msgstr "Zur Zusammenfassung wechseln..." + +#~ msgid "Show tag cloud..." +#~ msgstr "Tagwolke anzeigen..." + +#~ msgid "Click to play" +#~ msgstr "Zum Abspielen klicken" + +#~ msgid "Play" +#~ msgstr "Abspielen" + +#~ msgid "Visit the website" +#~ msgstr "Offizielle Website besuchen" + +#~ msgid "Select theme" +#~ msgstr "Thema auswählen" + +#~ msgid "I have scanned the code and would like to enable OTP" +#~ msgstr "" +#~ "Ich habe den Code gescannt und möchte die Anmeldung mit Einmalpasswörtern " +#~ "jetzt aktivieren" + +#~ msgid "close" +#~ msgstr "schließen" + +#~ msgid "Playing..." +#~ msgstr "Abspielen..." + +#~ msgid "" +#~ "Could not upload file. You might need to adjust upload_max_filesize in " +#~ "PHP.ini (current value = %s)" +#~ msgstr "" +#~ "Datei konnte nicht hochgeladen werden. Möglicherweise muss " +#~ "upload_max_filesize in der PHP.ini angepasst werden. (Aktueller Wert = %s)" #~ msgid "Default interval between feed updates" #~ msgstr "Standard Intervall zwischen Feed-Aktualisierungen" @@ -3582,8 +3600,12 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgid "Please backup your database before proceeding." #~ msgstr "Bitte sichern Sie Ihre Datenbank bevor Sie fortfahren." -#~ msgid "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to <b>%d</b>)." -#~ msgstr "Ihre Tiny Tiny RSS Datenbank benötigt eine Aktualisierung auf die neuste Version (<b>%d</b> nach <b>%d</b>)." +#~ msgid "" +#~ "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> " +#~ "to <b>%d</b>)." +#~ msgstr "" +#~ "Ihre Tiny Tiny RSS Datenbank benötigt eine Aktualisierung auf die neuste " +#~ "Version (<b>%d</b> nach <b>%d</b>)." #~ msgid "Performing updates..." #~ msgstr "Führe Aktualisierungen durch..." @@ -3601,9 +3623,14 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgstr "FEHLER!" #~ msgid "Finished. Performed <b>%d</b> update up to schema version <b>%d</b>." -#~ msgid_plural "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." -#~ msgstr[0] "Beendet. <b>%d</b> Aktualisierung auf Schema Version <b>%d</b> durchgeführt." -#~ msgstr[1] "Beendet. <b>%d</b> Aktualisierungen auf Schema Version <b>%d</b> durchgeführt." +#~ msgid_plural "" +#~ "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." +#~ msgstr[0] "" +#~ "Beendet. <b>%d</b> Aktualisierung auf Schema Version <b>%d</b> " +#~ "durchgeführt." +#~ msgstr[1] "" +#~ "Beendet. <b>%d</b> Aktualisierungen auf Schema Version <b>%d</b> " +#~ "durchgeführt." #~ msgid "Your database schema is from a newer version of Tiny Tiny RSS." #~ msgstr "Ihr Datenbankschema stammt von einer neueren Tiny Tiny RSS Version." @@ -3611,8 +3638,12 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgid "Found schema version: <b>%d</b>, required: <b>%d</b>." #~ msgstr "Gefundene Schemaversion: <b>%d</b>, benötigt: <b>%d</b>." -#~ msgid "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer version and continue." -#~ msgstr "Aktualisierung des Schemas nicht möglich. Bitte aktualisieren Sie die Tiny Tiny RSS Dateien auf die neuere Version und fahren Sie fort." +#~ msgid "" +#~ "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer " +#~ "version and continue." +#~ msgstr "" +#~ "Aktualisierung des Schemas nicht möglich. Bitte aktualisieren Sie die " +#~ "Tiny Tiny RSS Dateien auf die neuere Version und fahren Sie fort." #~ msgid "Mark feed as read" #~ msgstr "Feed als gelesen markieren" @@ -3641,11 +3672,21 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgid "Modify score" #~ msgstr "Bewertung ändern" -#~ msgid "This option is useful when you are reading several planet-type aggregators with partially colliding userbase. When disabled, it forces same posts from different feeds to appear only once." -#~ msgstr "Diese Option dient zum Lesen von Feedsammlungen mit teilweise wiederkehrenden Artikeln. Ist diese Option deaktiviert, wird ein Artikel von unterschiedlichen Feedsquellen nur einmal angezeigt." - -#~ msgid "When this option is enabled, headlines in Special feeds and Labels are grouped by feeds" -#~ msgstr "Wenn diese Option aktiviert ist, werden Schlagzeilen in Sonderfeeds und Labels nach Feeds gruppiert" +#~ msgid "" +#~ "This option is useful when you are reading several planet-type " +#~ "aggregators with partially colliding userbase. When disabled, it forces " +#~ "same posts from different feeds to appear only once." +#~ msgstr "" +#~ "Diese Option dient zum Lesen von Feedsammlungen mit teilweise " +#~ "wiederkehrenden Artikeln. Ist diese Option deaktiviert, wird ein Artikel " +#~ "von unterschiedlichen Feedsquellen nur einmal angezeigt." + +#~ msgid "" +#~ "When this option is enabled, headlines in Special feeds and Labels are " +#~ "grouped by feeds" +#~ msgstr "" +#~ "Wenn diese Option aktiviert ist, werden Schlagzeilen in Sonderfeeds und " +#~ "Labels nach Feeds gruppiert" #~ msgid "Enable external API" #~ msgstr "Externe API aktivieren" @@ -3656,10 +3697,6 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgid "Date syntax is incorrect." #~ msgstr "Die Datumssyntax ist falsch." -#, fuzzy -#~ msgid "Refresh" -#~ msgstr "Neu" - #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "(%d Feed)" @@ -3677,9 +3714,6 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgid "Form secret key incorrect. Please enable cookies and try again." #~ msgstr "Geheimer Schlüssel falsch. Aktiviere Cookies und versuchs nochmal." -#~ msgid "Date" -#~ msgstr "Datum" - #~ msgid "Score" #~ msgstr "Bewertung" @@ -3687,7 +3721,9 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgstr "Fertig." #~ msgid "Enable the options you wish to apply using checkboxes on the right:" -#~ msgstr "Benutzen Sie die Auswahlkästchen auf der rechten Seite um die gewünschen Optionen anzuwenden:" +#~ msgstr "" +#~ "Benutzen Sie die Auswahlkästchen auf der rechten Seite um die gewünschen " +#~ "Optionen anzuwenden:" #~ msgid "New articles available in this feed (click to show)" #~ msgstr "Neue Artikel verfügbar (klicken zum Anzeigen)" @@ -3725,8 +3761,12 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgid "Back to feeds" #~ msgstr "Zurück zu den Feeds" -#~ msgid "This will clear your stored authentication information for Twitter. Continue?" -#~ msgstr "Dies wird Ihre gespeicherten Authentifizierungsinformationen für Twitter löschen. Fortfahren?" +#~ msgid "" +#~ "This will clear your stored authentication information for Twitter. " +#~ "Continue?" +#~ msgstr "" +#~ "Dies wird Ihre gespeicherten Authentifizierungsinformationen für Twitter " +#~ "löschen. Fortfahren?" #~ msgid "Clearing credentials..." #~ msgstr "Berechtigungen werden gelöscht..." @@ -3825,8 +3865,12 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgid "Focus search (if present)" #~ msgstr "Fokussierte Suche (wenn gewählt)" -#~ msgid "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS configuration and your access level." -#~ msgstr "<b>Anmerkung:</b> Abhängig von Ihren Tiny-Tiny-RSS-Einstellungen und Zugriffsrechten könnten nicht alle Aktionen verfügbar sein." +#~ msgid "" +#~ "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS " +#~ "configuration and your access level." +#~ msgstr "" +#~ "<b>Anmerkung:</b> Abhängig von Ihren Tiny-Tiny-RSS-Einstellungen und " +#~ "Zugriffsrechten könnten nicht alle Aktionen verfügbar sein." #~ msgid "Open article in new tab" #~ msgstr "Artikel in neuem Reiter öffnen" @@ -3901,7 +3945,9 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgstr "Mit Twitter verbinden" #~ msgid "Could not connect to Twitter. Refresh the page or try again later." -#~ msgstr "Konnte nicht zu Twitter verbinden. Aktualisieren Sie die Seite oder versuchen es später erneut." +#~ msgstr "" +#~ "Konnte nicht zu Twitter verbinden. Aktualisieren Sie die Seite oder " +#~ "versuchen es später erneut." #~ msgid "Congratulations! You have successfully registered with Twitter." #~ msgstr "Glückwunsch! Sie haben sich erfolgreich mit Twitter verbunden." @@ -3925,7 +3971,8 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgstr "Keine Feedkategorien definiert." #~ msgid "<b>Hint:</b> you can drag feeds and categories around." -#~ msgstr "<b>Hinweis</b>: Sie können Feeds und Kategorien mit der Maus herumziehen." +#~ msgstr "" +#~ "<b>Hinweis</b>: Sie können Feeds und Kategorien mit der Maus herumziehen." #~ msgid "Subscribing using bookmarklet" #~ msgstr "Mit Bookmarklet abonnieren" @@ -3933,11 +3980,19 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgid "Twitter" #~ msgstr "Twitter" -#~ msgid "Before you can update your Twitter feeds, you must register this instance of Tiny Tiny RSS with Twitter.com." -#~ msgstr "Bevor Sie Ihre Twitter-Feeds aktualisieren können, müssen Sie diese Instanz von Tiny Tiny RSS bei Twitter registrieren." +#~ msgid "" +#~ "Before you can update your Twitter feeds, you must register this instance " +#~ "of Tiny Tiny RSS with Twitter.com." +#~ msgstr "" +#~ "Bevor Sie Ihre Twitter-Feeds aktualisieren können, müssen Sie diese " +#~ "Instanz von Tiny Tiny RSS bei Twitter registrieren." -#~ msgid "You have been successfully registered with Twitter.com and should be able to access your Twitter feeds." -#~ msgstr "Sie haben diese Instanz erfolgreich mit Twitter verbunden und sollten nun auf Ihre Twitter-Feeds zugreifen können." +#~ msgid "" +#~ "You have been successfully registered with Twitter.com and should be able " +#~ "to access your Twitter feeds." +#~ msgstr "" +#~ "Sie haben diese Instanz erfolgreich mit Twitter verbunden und sollten nun " +#~ "auf Ihre Twitter-Feeds zugreifen können." #~ msgid "Register with Twitter.com" #~ msgstr "Mit Twitter registrieren" @@ -3954,5 +4009,9 @@ msgstr "Direktes Updaten ist noch experimentell. Sichern Sie Ihr tt-rss Verzeich #~ msgid "Filter Test Results" #~ msgstr "Filtertestergebnis" -#~ msgid "When \"Mark as read\" button is clicked in toolbar, automatically open next feed with unread articles." -#~ msgstr "Beim Klick auf \"Als gelesen markieren\" in der Toolbar, automatisch nächsten Feed mit ungelesenen Artikeln öffnen." +#~ msgid "" +#~ "When \"Mark as read\" button is clicked in toolbar, automatically open " +#~ "next feed with unread articles." +#~ msgstr "" +#~ "Beim Klick auf \"Als gelesen markieren\" in der Toolbar, automatisch " +#~ "nächsten Feed mit ungelesenen Artikeln öffnen." diff --git a/locale/es_ES/LC_MESSAGES/messages.mo b/locale/es_ES/LC_MESSAGES/messages.mo Binary files differindex b46d46933..8d749b9e2 100644 --- a/locale/es_ES/LC_MESSAGES/messages.mo +++ b/locale/es_ES/LC_MESSAGES/messages.mo diff --git a/locale/es_ES/LC_MESSAGES/messages.po b/locale/es_ES/LC_MESSAGES/messages.po index 2ec2f9adc..eaf61c195 100644 --- a/locale/es_ES/LC_MESSAGES/messages.po +++ b/locale/es_ES/LC_MESSAGES/messages.po @@ -7,107 +7,107 @@ msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" -"PO-Revision-Date: 2013-04-06 01:19+0100\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" +"PO-Revision-Date: 2013-04-30 17:51+0100\n" "Last-Translator: DavidM <milarupa@yahoo.es>\n" "Language-Team: Español <milarupa@yahoo.es>\n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.5.4\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Usar configuración por defecto" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Nunca purgar" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "1 semana de antigüedad" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "2 semanas de antigüedad" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "1 mes de antigüedad" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "2 meses de antigüedad" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "3 meses de antigüedad" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Intervalo por defecto" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 backend.php:93 msgid "Disable updates" msgstr "Desactivar actualizaciones" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 backend.php:94 msgid "Each 15 minutes" msgstr "Cada 15 minutos" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 backend.php:95 msgid "Each 30 minutes" msgstr "Cada 30 minutos" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 backend.php:96 msgid "Hourly" msgstr "Cada hora" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 backend.php:97 msgid "Each 4 hours" msgstr "Cada 4 horas" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 backend.php:98 msgid "Each 12 hours" msgstr "Cada 12 horas" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 backend.php:99 msgid "Daily" msgstr "Diariamente" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 backend.php:100 msgid "Weekly" msgstr "Semanalmente" -#: backend.php:99 -#: classes/pref/users.php:123 +#: backend.php:103 classes/pref/users.php:123 classes/pref/system.php:44 msgid "User" msgstr "Usuario" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Usuario con poder" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Administrador" #: errors.php:9 -msgid "This program requires XmlHttpRequest to function properly. Your browser doesn't seem to support it." -msgstr "Este programa requiere XmlHttpRequest para funcionar apropiadamente. Parece que su navegador no lo soporta." +msgid "" +"This program requires XmlHttpRequest to function properly. Your browser " +"doesn't seem to support it." +msgstr "" +"Este programa requiere XmlHttpRequest para funcionar apropiadamente. Parece " +"que su navegador no lo soporta." #: errors.php:12 -msgid "This program requires cookies to function properly. Your browser doesn't seem to support them." -msgstr "Este programa requiere cookies para funcionar apropiadamente. Parece que su navegador no las soporta." +msgid "" +"This program requires cookies to function properly. Your browser doesn't " +"seem to support them." +msgstr "" +"Este programa requiere cookies para funcionar apropiadamente. Parece que su " +"navegador no las soporta." #: errors.php:15 msgid "Backend sanity check failed." @@ -118,8 +118,12 @@ msgid "Frontend sanity check failed." msgstr "La comprobación de validez del Frontend ha fallado" #: errors.php:19 -msgid "Incorrect database schema version. <a href='db-updater.php'>Please update</a>." -msgstr "La versión del esquema de la base de datos es incorrecta. <a href='update.php'>Por favor, actualice</a>." +msgid "" +"Incorrect database schema version. <a href='db-updater.php'>Please " +"update</a>." +msgstr "" +"La versión del esquema de la base de datos es incorrecta. <a href='update." +"php'>Por favor, actualice</a>." #: errors.php:21 msgid "Request not authorized." @@ -130,367 +134,317 @@ msgid "No operation to perform." msgstr "Ninguna operación a realizar." #: errors.php:25 -msgid "Could not display feed: query failed. Please check label match syntax or local configuration." -msgstr "No se puede mostrar la fuente: consulta fallida. Por favor, compruebe la expresión de coincidencia del marcador o la configuración local." +msgid "" +"Could not display feed: query failed. Please check label match syntax or " +"local configuration." +msgstr "" +"No se puede mostrar la fuente: consulta fallida. Por favor, compruebe la " +"expresión de coincidencia del marcador o la configuración local." #: errors.php:27 msgid "Denied. Your access level is insufficient to access this page." -msgstr "Denegado. Su nivel de acceso es insuficiente para acceder a esta página." +msgstr "" +"Denegado. Su nivel de acceso es insuficiente para acceder a esta página." #: errors.php:29 msgid "Configuration check failed" msgstr "La comprobación de la configuración ha fallado." #: errors.php:31 -msgid "Your version of MySQL is not currently supported. Please see official site for more information." -msgstr "Su versión de MySQL no está soportada. Por favor, visite el sitio oficial para obtener más información." +msgid "" +"Your version of MySQL is not currently supported. Please see official site " +"for more information." +msgstr "" +"Su versión de MySQL no está soportada. Por favor, visite el sitio oficial " +"para obtener más información." #: errors.php:35 msgid "SQL escaping test failed, check your database and PHP configuration" -msgstr "La prueba de escape SQL ha fallado. Por favor, revise la configuración de su base de datos y PHP." - -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 -#: classes/backend.php:5 -#: classes/pref/labels.php:296 -#: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 -#: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 -#: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 -#: js/prefs.js:86 -#: js/prefs.js:576 -#: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 -#: plugins/import_export/import_export.js:17 -#: plugins/updater/updater.js:17 +msgstr "" +"La prueba de escape SQL ha fallado. Por favor, revise la configuración de su " +"base de datos y PHP." + +#: index.php:128 index.php:145 index.php:265 prefs.php:98 +#: classes/backend.php:5 classes/pref/labels.php:296 +#: classes/pref/filters.php:680 classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 js/feedlist.js:128 js/feedlist.js:439 +#: js/functions.js:446 js/functions.js:784 js/functions.js:1194 +#: js/functions.js:1330 js/functions.js:1642 js/prefs.js:86 js/prefs.js:576 +#: js/prefs.js:666 js/prefs.js:867 js/prefs.js:1454 js/prefs.js:1507 +#: js/prefs.js:1566 js/prefs.js:1583 js/prefs.js:1599 js/prefs.js:1615 +#: js/prefs.js:1634 js/prefs.js:1807 js/prefs.js:1823 js/tt-rss.js:506 +#: js/tt-rss.js:523 js/viewfeed.js:820 js/viewfeed.js:1249 +#: plugins/import_export/import_export.js:17 plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Cargando. Por favor, espere..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Colapsar la lista de fuentes" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "Mostrar artÃculos" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Adaptable" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Todos" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 include/functions.php:2007 classes/feeds.php:98 msgid "Starred" msgstr "Favoritos" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 include/functions.php:2008 classes/feeds.php:99 msgid "Published" msgstr "Publicados" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 classes/feeds.php:85 classes/feeds.php:97 msgid "Unread" msgstr "Sin leer" -#: index.php:177 +#: index.php:170 msgid "Unread First" msgstr "Sin leer primero" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "Con anotación" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Ignorar la puntuación" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "Ordenar artÃculos" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Por defecto" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "Recientes primero" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "Antiguos primero" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "TÃtulo" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 -#: js/FeedTree.js:128 -#: js/FeedTree.js:156 -#: plugins/digest/digest.js:647 +#: index.php:185 index.php:233 include/functions.php:1997 +#: classes/feeds.php:103 classes/feeds.php:441 js/FeedTree.js:128 +#: js/FeedTree.js:156 plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Marcar como leÃdo" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "Más de un dÃa" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "Más de una semana" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "Más de dos semanas" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "Problema de comunicación con el servidor." -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "¡Nueva versión de Tiny Tiny RSS disponible!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Acciones..." -#: index.php:233 +#: index.php:225 msgid "Preferences..." msgstr "Preferencias..." -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Buscar..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Acciones de la fuente:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "Suscribirse a una fuente..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Editar esta fuente..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Reiniciar la puntuación" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 classes/pref/feeds.php:759 classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Cancelar la suscripción" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Todas las fuentes:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Ocultar/Mostrar fuentes leÃdas" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Otras acciones:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "Modo resumen..." - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "Nube de etiquetas..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 include/functions.php:1983 msgid "Toggle widescreen mode" msgstr "Alternar modo de pantalla ancha" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "Seleccionar por etiquetas..." -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Crear marcador..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Crear filtro..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "Ayuda para atajos de teclado" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Cerrar sesión" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 prefs.php:116 include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Preferencias" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Atajos de teclado" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Salir de las preferencias" -#: prefs.php:124 -#: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: prefs.php:119 classes/pref/feeds.php:107 classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Fuentes" -#: prefs.php:127 -#: classes/pref/filters.php:156 +#: prefs.php:122 classes/pref/filters.php:156 msgid "Filters" msgstr "Filtros" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 -#: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: prefs.php:125 include/functions.php:1176 include/functions.php:1831 +#: classes/pref/labels.php:90 plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Marcadores" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Usuarios" -#: register.php:186 -#: include/login_form.php:238 +#: prefs.php:132 +msgid "System" +msgstr "Sistema" + +#: register.php:184 include/login_form.php:238 msgid "Create new account" msgstr "Crear nueva cuenta" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." -msgstr "El registro de nuevos usuarios ha sido deshabilitado por el administrador." - -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +msgstr "" +"El registro de nuevos usuarios ha sido deshabilitado por el administrador." + +#: register.php:194 register.php:239 register.php:252 register.php:267 +#: register.php:286 register.php:334 register.php:344 register.php:356 +#: classes/handler/public.php:629 classes/handler/public.php:717 +#: classes/handler/public.php:799 classes/handler/public.php:874 +#: classes/handler/public.php:888 classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Volver a Tiny Tiny RSS" -#: register.php:217 -msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." -msgstr "Su contraseña temporal será enviada a la dirección de correo especificada. Las cuentas a las que no se acceda al menos una vez serán borradas automáticamente a las 24 horas de enviar la contraseña temporal." +#: register.php:215 +msgid "" +"Your temporary password will be sent to the specified email. Accounts, which " +"were not logged in once, are erased automatically 24 hours after temporary " +"password is sent." +msgstr "" +"Su contraseña temporal será enviada a la dirección de correo especificada. " +"Las cuentas a las que no se acceda al menos una vez serán borradas " +"automáticamente a las 24 horas de enviar la contraseña temporal." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Nombre de usuario deseado:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "Comprobar la disponibilidad" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 classes/handler/public.php:757 msgid "Email:" msgstr "Correo electrónico:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "¿Cuánto es dos más dos?" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Enviar solicitud de registro" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "Su información de registro está incompleta" -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Lo sentimos, este nombre de usuario ya existe." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "El registro ha fallado." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Cuenta creada correctamente." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "El registro de nuevos usuarios está cerrado en estos momentos." -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "Script para actualizar datos de Tiny Tiny RSS." -#: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 -#: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: include/digest.php:109 include/functions.php:1185 +#: include/functions.php:1732 include/functions.php:1817 +#: include/functions.php:1839 classes/opml.php:416 classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Sin clasificar" @@ -505,398 +459,350 @@ msgstr[1] "%d artÃculos archivados" msgid "No feeds found." msgstr "No se han encontrado fuentes." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Especial" -#: include/functions.php:1637 -#: classes/feeds.php:1110 +#: include/functions.php:1681 classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Todas las fuentes" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Favoritos" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Publicados" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Recientes" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 include/functions.php:2005 msgid "All articles" msgstr "Todos" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "ArtÃculos archivados" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "LeÃdos recientemente" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Navegación" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "Abrir la fuente siguiente" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "Abrir la fuente siguiente" -#: include/functions.php:1914 +#: include/functions.php:1960 msgid "Open next article" msgstr "Abrir el artÃculo siguiente" -#: include/functions.php:1915 +#: include/functions.php:1961 msgid "Open previous article" msgstr "Abrir el artÃculo anterior" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "Abrir artÃculo siguiente (no desplazar artÃculos largos)" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "Abrir artÃculo anterior (no desplazar artÃculos largos)" -#: include/functions.php:1918 -#, fuzzy +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" -msgstr "Abrir artÃculo siguiente (no desplazar artÃculos largos)" +msgstr "Ir al artÃculo siguiente (no expandir ni marcar como leÃdo)" -#: include/functions.php:1919 -#, fuzzy +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" -msgstr "Abrir artÃculo anterior (no desplazar artÃculos largos)" +msgstr "Ir al artÃculo anterior (no expandir ni marcar como leÃdo)" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Mostrar el diálogo de búsqueda" -#: include/functions.php:1921 +#: include/functions.php:1967 msgid "Article" msgstr "ArtÃculo" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Alternar favoritos" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 js/viewfeed.js:1931 msgid "Toggle published" msgstr "Alternar publicados" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Alternar no leÃdos" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Editar etiquetas" -#: include/functions.php:1926 +#: include/functions.php:1972 msgid "Dismiss selected" msgstr "Desechar la selección" -#: include/functions.php:1927 +#: include/functions.php:1973 msgid "Dismiss read" msgstr "Desechar leÃdos" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" msgstr "Abrir en ventana nueva" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 js/viewfeed.js:1950 msgid "Mark below as read" msgstr "Marcar artÃculos posteriores como leÃdos" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 js/viewfeed.js:1944 msgid "Mark above as read" msgstr "Marcar artÃculos anteriores como leÃdos" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "Desplazarse abajo" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "Desplazarse hacia arriba" -#: include/functions.php:1933 +#: include/functions.php:1979 msgid "Select article under cursor" msgstr "Seleccionar el artÃculo que esté bajo el cursor del ratón" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "Enviar artÃculo por correo" -#: include/functions.php:1935 +#: include/functions.php:1981 msgid "Close/collapse article" msgstr "Cerrar/plegar artÃculo" -#: include/functions.php:1936 -#, fuzzy +#: include/functions.php:1982 msgid "Toggle article expansion (combined mode)" -msgstr "Expandir automáticamente los artÃculos en el modo combinado" +msgstr "Alternar expansión de los artÃculos (modo combinado)" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 plugins/embed_original/init.php:31 msgid "Toggle embed original" msgstr "Alternar incrustación del artÃculo original" -#: include/functions.php:1939 +#: include/functions.php:1985 msgid "Article selection" msgstr "Selección de artÃculos" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "Seleccionar todos los artÃculos" -#: include/functions.php:1941 +#: include/functions.php:1987 msgid "Select unread" msgstr "Seleccionar artÃculos sin leer" -#: include/functions.php:1942 +#: include/functions.php:1988 msgid "Select starred" msgstr "Seleccionar artÃculos favoritos" -#: include/functions.php:1943 +#: include/functions.php:1989 msgid "Select published" msgstr "Seleccionar artÃculos publicados" -#: include/functions.php:1944 +#: include/functions.php:1990 msgid "Invert selection" msgstr "Invertir selección " -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "Deseleccionar todo" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Fuente" -#: include/functions.php:1947 +#: include/functions.php:1993 msgid "Refresh current feed" msgstr "Actualizar la fuente activa" -#: include/functions.php:1948 +#: include/functions.php:1994 msgid "Un/hide read feeds" msgstr "Ocultar/Mostrar fuentes leÃdas" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "Suscribirse a una fuente" -#: include/functions.php:1950 -#: js/FeedTree.js:135 -#: js/PrefFeedTree.js:67 +#: include/functions.php:1996 js/FeedTree.js:135 js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Editar fuente" -#: include/functions.php:1952 +#: include/functions.php:1998 msgid "Reverse headlines" msgstr "Invertir orden de titulares" -#: include/functions.php:1953 +#: include/functions.php:1999 msgid "Debug feed update" msgstr "Depurar la actualización de fuentes" -#: include/functions.php:1954 -#: js/FeedTree.js:178 +#: include/functions.php:2000 js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Marcar todas las fuentes como leÃdas" -#: include/functions.php:1955 +#: include/functions.php:2001 msgid "Un/collapse current category" msgstr "Desplegar/plegar la categorÃa" -#: include/functions.php:1956 +#: include/functions.php:2002 msgid "Toggle combined mode" msgstr "Alternar modo combinado" -#: include/functions.php:1957 +#: include/functions.php:2003 msgid "Toggle auto expand in combined mode" msgstr "Expandir automáticamente los artÃculos en el modo combinado" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "Ir a" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "Reciente" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 js/tt-rss.js:456 js/tt-rss.js:615 msgid "Tag cloud" msgstr "Nube de etiquetas" -#: include/functions.php:1965 +#: include/functions.php:2011 msgid "Other" msgstr "Otro" -#: include/functions.php:1966 -#: classes/pref/labels.php:281 +#: include/functions.php:2012 classes/pref/labels.php:281 msgid "Create label" msgstr "Crear marcador" -#: include/functions.php:1967 -#: classes/pref/filters.php:654 +#: include/functions.php:2013 classes/pref/filters.php:654 msgid "Create filter" msgstr "Crear filtro" -#: include/functions.php:1968 +#: include/functions.php:2014 msgid "Un/collapse sidebar" msgstr "Mostrar/ocultar la barra lateral" -#: include/functions.php:1969 +#: include/functions.php:2015 msgid "Show help dialog" msgstr "Mostrar el diálogo de ayuda" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "Resultados de búsqueda: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "Clic para reproducir" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "Reproducir" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "sin etiquetas" -#: include/functions.php:3136 -#: classes/feeds.php:689 +#: include/functions.php:3165 classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Editar las etiquetas de este artÃculo" -#: include/functions.php:3170 -#: classes/feeds.php:641 +#: include/functions.php:3197 classes/feeds.php:641 msgid "Originally from:" msgstr "Original de:" -#: include/functions.php:3183 -#: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: include/functions.php:3210 classes/feeds.php:654 classes/pref/feeds.php:572 msgid "Feed URL" msgstr "URL de la fuente" -#: include/functions.php:3215 -#: classes/dlg.php:37 -#: classes/dlg.php:60 -#: classes/dlg.php:93 -#: classes/dlg.php:159 -#: classes/dlg.php:190 -#: classes/dlg.php:217 -#: classes/dlg.php:250 -#: classes/dlg.php:262 -#: classes/backend.php:105 -#: classes/pref/users.php:99 -#: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: include/functions.php:3242 classes/dlg.php:37 classes/dlg.php:60 +#: classes/dlg.php:93 classes/dlg.php:159 classes/dlg.php:190 +#: classes/dlg.php:217 classes/dlg.php:250 classes/dlg.php:262 +#: classes/backend.php:105 classes/pref/users.php:99 +#: classes/pref/filters.php:147 classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Cerrar esta ventana" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(editar nota)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "tipo desconocido" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "Adjuntos" -#: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 -#: plugins/mobile/login_form.php:40 +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "Error de LibXML %s en la lÃnea %d (columna %d): %s" + +#: include/login_form.php:183 classes/handler/public.php:475 +#: classes/handler/public.php:752 plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Nombre de usuario:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Contraseña:" -#: include/login_form.php:197 +#: include/login_form.php:199 msgid "I forgot my password" msgstr "Olvidé mi contraseña" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Idioma:" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Perfil:" -#: include/login_form.php:213 -#: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: include/login_form.php:209 classes/handler/public.php:233 +#: classes/rpc.php:63 classes/pref/prefs.php:1036 msgid "Default profile" msgstr "Perfil por defecto" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Usar menos tráfico" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" +"No muestra imágenes en los artÃculos, reduce las actualizaciones automáticas." + #: include/login_form.php:229 msgid "Remember me" msgstr "Recordarme" -#: include/login_form.php:235 -#: classes/handler/public.php:499 +#: include/login_form.php:235 classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Iniciar sesión" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "No se pudo validar la sesión (IP incorrecta)" @@ -908,192 +814,186 @@ msgstr "ArtÃculo no encontrado." msgid "Tags for this article (separated by commas):" msgstr "Etiquetas para este artÃculo (separadas por comas):" -#: classes/article.php:204 -#: classes/pref/users.php:176 -#: classes/pref/labels.php:79 -#: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/article.php:204 classes/pref/users.php:176 +#: classes/pref/labels.php:79 classes/pref/filters.php:405 +#: classes/pref/prefs.php:982 classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 plugins/instances/init.php:245 msgid "Save" msgstr "Guardar" -#: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 -#: classes/feeds.php:1037 -#: classes/feeds.php:1089 -#: classes/feeds.php:1149 -#: classes/pref/users.php:178 -#: classes/pref/labels.php:81 -#: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/article.php:206 classes/handler/public.php:452 +#: classes/handler/public.php:486 classes/feeds.php:1037 +#: classes/feeds.php:1089 classes/feeds.php:1149 classes/pref/users.php:178 +#: classes/pref/labels.php:81 classes/pref/filters.php:408 +#: classes/pref/filters.php:803 classes/pref/filters.php:879 +#: classes/pref/filters.php:946 classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 plugins/mail/init.php:124 +#: plugins/note/init.php:53 plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Cancelar" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "Compartir con Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "TÃtulo:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "Contenido:" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "Marcadores:" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "El artÃculo compartido aparecerá en la fuente Publicados." -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "Compartir" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "No ha iniciado sesión" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Nombre de usuario o contraseña incorrecta" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Ya está suscrito a <strong>%s</strong>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Suscrito a <strong>%s</strong>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "No se pudo suscribir a <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "No se han encontrado fuentes en <b>%s</b>." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 classes/handler/public.php:665 msgid "Multiple feed URLs found." msgstr "Múltiples fuentes encontradas." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." -msgstr "No se pudo suscribir a <strong>%s</strong>. No se pudo descargar la fuente de su URL." +msgstr "" +"No se pudo suscribir a <strong>%s</strong>. No se pudo descargar la fuente " +"de su URL." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "Suscribirse a la fuente seleccionada" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Editar las opciones de suscripción" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 msgid "Password recovery" msgstr "Recuperación de contraseña" -#: classes/handler/public.php:764 -msgid "You will need to provide valid account name and email. New password will be sent on your email address." -msgstr "Se necesita que proporcione un nombre de usuario y correo electrónico válidos. La nueva contraseña será enviada a su correo electrónico." +#: classes/handler/public.php:745 +msgid "" +"You will need to provide valid account name and email. New password will be " +"sent on your email address." +msgstr "" +"Se necesita que proporcione un nombre de usuario y correo electrónico " +"válidos. La nueva contraseña será enviada a su correo electrónico." -#: classes/handler/public.php:786 -#: classes/pref/users.php:360 +#: classes/handler/public.php:767 classes/pref/users.php:360 msgid "Reset password" msgstr "Redefinir contraseña" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "Algunos de los parámetros necesarios son incorrectos o faltan." -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 msgid "Go back" msgstr "Volver" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "Lo siento, combinación de usuario y correo electrónico incorrecta." -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Su nivel de acceso es insuficiente para ejecutar este programa." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Actualizador de la base de datos" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Actualizar" #: classes/dlg.php:16 -msgid "If you have imported labels and/or filters, you might need to reload preferences to see your new data." -msgstr "Si ha importado marcadores y/o filtros, puede ser necesario recargar las preferencia para ver sus nuevos datos." +msgid "" +"If you have imported labels and/or filters, you might need to reload " +"preferences to see your new data." +msgstr "" +"Si ha importado marcadores y/o filtros, puede ser necesario recargar las " +"preferencia para ver sus nuevos datos." #: classes/dlg.php:48 msgid "Your Public OPML URL is:" msgstr "La URL de su archivo OPML público es:" -#: classes/dlg.php:57 -#: classes/dlg.php:214 +#: classes/dlg.php:57 classes/dlg.php:214 msgid "Generate new URL" msgstr "Generar URL nueva" #: classes/dlg.php:71 -msgid "Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner." -msgstr "El demonio de actualización está habilitado en la configuración, pero el proceso del demonio no está en funcionamiento, lo cual impide la actualización de todas las fuentes. Por favor, inicie el proceso del demonio o solicÃtelo al propietario de la instancia." +msgid "" +"Update daemon is enabled in configuration, but daemon process is not " +"running, which prevents all feeds from updating. Please start the daemon " +"process or contact instance owner." +msgstr "" +"El demonio de actualización está habilitado en la configuración, pero el " +"proceso del demonio no está en funcionamiento, lo cual impide la " +"actualización de todas las fuentes. Por favor, inicie el proceso del demonio " +"o solicÃtelo al propietario de la instancia." -#: classes/dlg.php:75 -#: classes/dlg.php:84 +#: classes/dlg.php:75 classes/dlg.php:84 msgid "Last update:" msgstr "Última actualización:" #: classes/dlg.php:80 -msgid "Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner." -msgstr "El demonio de actualización está tardando demasiado en realizar una actualización de fuente. Esto podrÃa deberse a un problema en el servidor (rotura, cuelgue,...). Por favor, compruebe el proceso del demonio o avise al propietario de la instancia." +msgid "" +"Update daemon is taking too long to perform a feed update. This could " +"indicate a problem like crash or a hang. Please check the daemon process or " +"contact instance owner." +msgstr "" +"El demonio de actualización está tardando demasiado en realizar una " +"actualización de fuente. Esto podrÃa deberse a un problema en el servidor " +"(rotura, cuelgue,...). Por favor, compruebe el proceso del demonio o avise " +"al propietario de la instancia." #: classes/dlg.php:166 msgid "Match:" @@ -1119,18 +1019,20 @@ msgstr "Mostrar artÃculos" msgid "You can view this feed as RSS using the following URL:" msgstr "Puede ver esta fuente en formato RSS en la siguiente URL:" -#: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: classes/dlg.php:233 plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Nueva versión de Tiny Tiny RSS disponible (%s)." #: classes/dlg.php:241 -msgid "You can update using built-in updater in the Preferences or by using update.php" -msgstr "Puede actualizar usando el gestor de actualización en las preferenciaso utilizando update.php" +msgid "" +"You can update using built-in updater in the Preferences or by using update." +"php" +msgstr "" +"Puede actualizar usando el gestor de actualización en las preferenciaso " +"utilizando update.php" -#: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: classes/dlg.php:245 plugins/updater/init.php:335 msgid "See the release notes" msgstr "Ver las notas de la versión" @@ -1140,116 +1042,102 @@ msgstr "Descargar" #: classes/dlg.php:255 msgid "Error receiving version information or no new version available." -msgstr "Error al recibir información de versiones, o no hay una nueva versión disponible." +msgstr "" +"Error al recibir información de versiones, o no hay una nueva versión " +"disponible." -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "Visitar el sitio oficial" +#: classes/feeds.php:56 +#, php-format +msgid "Last updated: %s" +msgstr "Última actualización: %s" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Ver como fuente RSS" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 classes/feeds.php:128 classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "Ver como RSS" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Seleccionar:" -#: classes/feeds.php:92 -#: classes/pref/users.php:345 -#: classes/pref/labels.php:275 -#: classes/pref/filters.php:282 -#: classes/pref/filters.php:330 -#: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/feeds.php:84 classes/pref/users.php:345 classes/pref/labels.php:275 +#: classes/pref/filters.php:282 classes/pref/filters.php:330 +#: classes/pref/filters.php:648 classes/pref/filters.php:736 +#: classes/pref/filters.php:763 classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 plugins/instances/init.php:287 msgid "All" msgstr "Todo" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Invertir" -#: classes/feeds.php:95 -#: classes/pref/users.php:347 -#: classes/pref/labels.php:277 -#: classes/pref/filters.php:284 -#: classes/pref/filters.php:332 -#: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/feeds.php:87 classes/pref/users.php:347 classes/pref/labels.php:277 +#: classes/pref/filters.php:284 classes/pref/filters.php:332 +#: classes/pref/filters.php:650 classes/pref/filters.php:738 +#: classes/pref/filters.php:765 classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 plugins/instances/init.php:289 msgid "None" msgstr "Nada" -#: classes/feeds.php:101 +#: classes/feeds.php:93 msgid "More..." msgstr "Más..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Alternar la selección:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Selección:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "Definir puntuación" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "Archivar" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "Mover a la fuente original" -#: classes/feeds.php:118 -#: classes/pref/filters.php:291 -#: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/feeds.php:110 classes/pref/filters.php:291 +#: classes/pref/filters.php:339 classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "Borrar" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 classes/feeds.php:120 plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "Enviar por correo electrónico" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Fuente:" -#: classes/feeds.php:205 -#: classes/feeds.php:837 +#: classes/feeds.php:197 classes/feeds.php:837 msgid "Feed not found." msgstr "Fuente no encontrada." -#: classes/feeds.php:387 +#: classes/feeds.php:254 +msgid "Never" +msgstr "Nunca " + +#: classes/feeds.php:360 #, php-format msgid "Imported at %s" msgstr "Importado en %s" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "marcar como leÃdo" @@ -1270,37 +1158,39 @@ msgid "No starred articles found to display." msgstr "No se han encontrado artÃculos favoritos." #: classes/feeds.php:748 -msgid "No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter." -msgstr "No se han encontrado artÃculos que mostrar. Puede asignar artÃculos a los marcadores manualmente con el menú contextual del titular (se aplica a todos los artÃculos seleccionados) o usar un filtro." +msgid "" +"No articles found to display. You can assign articles to labels manually " +"from article header context menu (applies to all selected articles) or use a " +"filter." +msgstr "" +"No se han encontrado artÃculos que mostrar. Puede asignar artÃculos a los " +"marcadores manualmente con el menú contextual del titular (se aplica a todos " +"los artÃculos seleccionados) o usar un filtro." #: classes/feeds.php:750 msgid "No articles found to display." msgstr "No se han encontrado artÃculos que mostrar." -#: classes/feeds.php:765 -#: classes/feeds.php:932 +#: classes/feeds.php:765 classes/feeds.php:932 #, php-format msgid "Feeds last updated at %s" msgstr "Última actualización de las fuentes: %s" -#: classes/feeds.php:775 -#: classes/feeds.php:942 +#: classes/feeds.php:775 classes/feeds.php:942 msgid "Some feeds have update errors (click for details)" -msgstr "Error al actualizar algunas fuentes (pulse aquà para obtener los detalles)" +msgstr "" +"Error al actualizar algunas fuentes (pulse aquà para obtener los detalles)" #: classes/feeds.php:922 msgid "No feed selected." msgstr "No se ha seleccionado ninguna fuente." -#: classes/feeds.php:975 -#: classes/feeds.php:983 +#: classes/feeds.php:975 classes/feeds.php:983 msgid "Feed or site URL" msgstr "URL de la fuente o del sitio" -#: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/feeds.php:989 classes/pref/feeds.php:592 classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "CategorÃa:" @@ -1308,26 +1198,20 @@ msgstr "CategorÃa:" msgid "Available feeds" msgstr "Fuentes disponibles" -#: classes/feeds.php:1009 -#: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/feeds.php:1009 classes/pref/users.php:139 +#: classes/pref/feeds.php:622 classes/pref/feeds.php:860 msgid "Authentication" msgstr "Autenticación" -#: classes/feeds.php:1013 -#: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/feeds.php:1013 classes/pref/users.php:402 +#: classes/pref/feeds.php:628 classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Iniciar sesión" -#: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/feeds.php:1016 classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Contraseña:" @@ -1335,9 +1219,7 @@ msgstr "Contraseña:" msgid "This feed requires authentication." msgstr "Esta fuente requiere autenticación." -#: classes/feeds.php:1031 -#: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/feeds.php:1031 classes/feeds.php:1087 classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "Suscribir" @@ -1345,12 +1227,8 @@ msgstr "Suscribir" msgid "More feeds" msgstr "Más fuentes" -#: classes/feeds.php:1057 -#: classes/feeds.php:1148 -#: classes/pref/users.php:332 -#: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/feeds.php:1057 classes/feeds.php:1148 classes/pref/users.php:332 +#: classes/pref/filters.php:641 classes/pref/feeds.php:1316 js/tt-rss.js:173 msgid "Search" msgstr "Buscar" @@ -1366,13 +1244,10 @@ msgstr "Archivo de fuentes" msgid "limit:" msgstr "lÃmite:" -#: classes/feeds.php:1088 -#: classes/pref/users.php:358 -#: classes/pref/labels.php:284 -#: classes/pref/filters.php:398 -#: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/feeds.php:1088 classes/pref/users.php:358 +#: classes/pref/labels.php:284 classes/pref/filters.php:398 +#: classes/pref/filters.php:667 classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Eliminar" @@ -1408,8 +1283,7 @@ msgstr "Ctrl" msgid "Help topic not found." msgstr "Tema de ayuda no encontrado." -#: classes/opml.php:28 -#: classes/opml.php:33 +#: classes/opml.php:28 classes/opml.php:33 msgid "OPML Utility" msgstr "Utilidad OPML" @@ -1455,17 +1329,32 @@ msgstr "Añadiendo filtro..." msgid "Processing category: %s" msgstr "Procesando categorÃa: %s" -#: classes/opml.php:468 +#: classes/opml.php:465 plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "La subida falló con el código de error %d" + +#: classes/opml.php:479 plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +msgid "Unable to move uploaded file." +msgstr "No se pudo mover el archivo subido." + +#: classes/opml.php:483 plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Error: por favor, suba un fichero OPML." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +msgid "Error: unable to find moved OPML file." +msgstr "Error: no se pudo encontrar el fichero OPML movido." + +#: classes/opml.php:499 plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Error mientras se analizaba el documento." -#: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/users.php:6 classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "Su nivel de acceso es insuficiente para abrir esta pestaña." @@ -1473,8 +1362,7 @@ msgstr "Su nivel de acceso es insuficiente para abrir esta pestaña." msgid "User not found" msgstr "Usuario no encontrado" -#: classes/pref/users.php:53 -#: classes/pref/users.php:404 +#: classes/pref/users.php:53 classes/pref/users.php:404 msgid "Registered" msgstr "Registrado" @@ -1498,9 +1386,8 @@ msgstr "Nivel de acceso:" msgid "Change password to" msgstr "Cambiar la contraseña a" -#: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/users.php:161 classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Opciones" @@ -1511,7 +1398,9 @@ msgstr "Correo electrónico:" #: classes/pref/users.php:240 #, php-format msgid "Added user <b>%s</b> with password <b>%s</b>" -msgstr "Se ha añadido al usuario <strong>%s</strong> con la contraseña <strong>%s</strong>" +msgstr "" +"Se ha añadido al usuario <strong>%s</strong> con la contraseña <strong>%s</" +"strong>" #: classes/pref/users.php:247 #, php-format @@ -1531,24 +1420,20 @@ msgstr "Se ha cambiado la contraseña del usuario <b>%s</b> a <b>%s</b>" #: classes/pref/users.php:275 #, php-format msgid "Sending new password of user <b>%s</b> to <b>%s</b>" -msgstr "Enviando nueva contraseña del usuario <strong>%s</strong> a <strong>%s</strong>" +msgstr "" +"Enviando nueva contraseña del usuario <strong>%s</strong> a <strong>%s</" +"strong>" #: classes/pref/users.php:299 msgid "[tt-rss] Password change notification" msgstr "[tt-rss] Notificación de cambio de contraseña" -#: classes/pref/users.php:342 -#: classes/pref/labels.php:272 -#: classes/pref/filters.php:279 -#: classes/pref/filters.php:327 -#: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/users.php:342 classes/pref/labels.php:272 +#: classes/pref/filters.php:279 classes/pref/filters.php:327 +#: classes/pref/filters.php:645 classes/pref/filters.php:733 +#: classes/pref/filters.php:760 classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 plugins/instances/init.php:284 msgid "Select" msgstr "Seleccionar" @@ -1560,9 +1445,8 @@ msgstr "Crear usuario" msgid "Details" msgstr "Detalles" -#: classes/pref/users.php:356 -#: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: classes/pref/users.php:356 classes/pref/filters.php:660 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Editar" @@ -1574,8 +1458,7 @@ msgstr "Nivel de acceso" msgid "Last login" msgstr "Última sesión" -#: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: classes/pref/users.php:426 plugins/instances/init.php:334 msgid "Click to edit" msgstr "Pulse aquà para editar" @@ -1587,9 +1470,8 @@ msgstr "No se han definido usuarios." msgid "No matching users found." msgstr "No se han encontrado usuarios coincidentes." -#: classes/pref/labels.php:22 -#: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/labels.php:22 classes/pref/filters.php:268 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Leyenda" @@ -1623,44 +1505,41 @@ msgid "No recent articles matching this filter have been found." msgstr "No se han encontrado artÃculos recientes que coincidan con el filtro." #: classes/pref/filters.php:137 -msgid "Complex expressions might not give results while testing due to issues with database server regexp implementation." -msgstr "Es posible que expresiones complejas no devuelvan resultados en la prueba, a causa de problemas técnicos con la base de datos (implementación de expresiones regulares)." +msgid "" +"Complex expressions might not give results while testing due to issues with " +"database server regexp implementation." +msgstr "" +"Es posible que expresiones complejas no devuelvan resultados en la prueba, a " +"causa de problemas técnicos con la base de datos (implementación de " +"expresiones regulares)." -#: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:274 classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Coincidir" -#: classes/pref/filters.php:288 -#: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:288 classes/pref/filters.php:336 +#: classes/pref/filters.php:742 classes/pref/filters.php:769 msgid "Add" msgstr "Añadir" -#: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:322 classes/pref/filters.php:755 msgid "Apply actions" msgstr "Aplicar acciones" -#: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:372 classes/pref/filters.php:784 msgid "Enabled" msgstr "Habilitado" -#: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:381 classes/pref/filters.php:787 msgid "Match any rule" msgstr "Coincidencia con cualquier regla" -#: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:390 classes/pref/filters.php:790 msgid "Inverse matching" msgstr "Coincidencia inversa" -#: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:402 classes/pref/filters.php:797 msgid "Test" msgstr "Probar" @@ -1677,62 +1556,57 @@ msgstr "%s en %s en %s %s" msgid "Combine" msgstr "Combinar" -#: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/filters.php:663 classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "Reiniciar orden" -#: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/filters.php:671 classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Reiniciar la puntuación de los artÃculos" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Crear" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "Coincidencia inversa con la expresión regular" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "en el campo" -#: classes/pref/filters.php:864 -#: js/PrefFilterTree.js:45 +#: classes/pref/filters.php:863 js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "en" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" msgstr "Guardar regla" -#: classes/pref/filters.php:877 -#: js/functions.js:1013 +#: classes/pref/filters.php:876 js/functions.js:1013 msgid "Add rule" msgstr "Añadir regla" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Realizar la acción" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "con los parámetros:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" msgstr "Guardar acción" -#: classes/pref/filters.php:944 -#: js/functions.js:1039 +#: classes/pref/filters.php:943 js/functions.js:1039 msgid "Add action" msgstr "Añadir acción" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 msgid "[No caption]" msgstr "[Sin leyenda]" @@ -1765,16 +1639,24 @@ msgid "Blacklisted tags" msgstr "Etiquetas añadidas a la lista negra" #: classes/pref/prefs.php:27 -msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)." -msgstr "Cuando se autodetecten etiquetas en los artÃculos, no se incluirán estas etiquetas (lista de etiquetas separadas por comas)" +msgid "" +"When auto-detecting tags in articles these tags will not be applied (comma-" +"separated list)." +msgstr "" +"Cuando se autodetecten etiquetas en los artÃculos, no se incluirán estas " +"etiquetas (lista de etiquetas separadas por comas)" #: classes/pref/prefs.php:28 msgid "Automatically mark articles as read" msgstr "Marcar como leÃdos los artÃculos automáticamente" #: classes/pref/prefs.php:28 -msgid "This option enables marking articles as read automatically while you scroll article list." -msgstr "Esta opción permite que al desplazarse por la lista de artÃculos, los artÃculos se vayan marcando como leÃdos automáticamente." +msgid "" +"This option enables marking articles as read automatically while you scroll " +"article list." +msgstr "" +"Esta opción permite que al desplazarse por la lista de artÃculos, los " +"artÃculos se vayan marcando como leÃdos automáticamente." #: classes/pref/prefs.php:29 msgid "Automatically expand articles in combined mode" @@ -1785,8 +1667,12 @@ msgid "Combined feed display" msgstr "Despliegue combinado de la fuente" #: classes/pref/prefs.php:30 -msgid "Display expanded list of feed articles, instead of separate displays for headlines and article content" -msgstr "Muestra una lista expandida de los artÃculos de la fuente, en lugar de mostrar por separado los tÃtulos y contenidos de los artÃculos." +msgid "" +"Display expanded list of feed articles, instead of separate displays for " +"headlines and article content" +msgstr "" +"Muestra una lista expandida de los artÃculos de la fuente, en lugar de " +"mostrar por separado los tÃtulos y contenidos de los artÃculos." #: classes/pref/prefs.php:31 msgid "Confirm marking feed as read" @@ -1797,13 +1683,16 @@ msgid "Amount of articles to display at once" msgstr "Número de artÃculos que se muestran simultáneamente" #: classes/pref/prefs.php:33 -#, fuzzy msgid "Default feed update interval" -msgstr "Intervalo por defecto" +msgstr "Intervalo de actualización de fuentes por defecto" #: classes/pref/prefs.php:33 -msgid "Shortest interval at which a feed will be checked for updates regardless of update method" +msgid "" +"Shortest interval at which a feed will be checked for updates regardless of " +"update method" msgstr "" +"Intervalo más breve en el cual una fuente será chequeada buscando " +"actualizaciones, independientemente del método de actualización." #: classes/pref/prefs.php:34 msgid "Mark articles in e-mail digest as read" @@ -1814,8 +1703,13 @@ msgid "Enable e-mail digest" msgstr "Habilitar correo recopilatorio" #: classes/pref/prefs.php:35 -msgid "This option enables sending daily digest of new (and unread) headlines on your configured e-mail address" -msgstr "Esta opción permite el envÃo diario de un recopilatorio de los titulares nuevos o sin leer a la dirección de correo que haya indicado en la configuración" +msgid "" +"This option enables sending daily digest of new (and unread) headlines on " +"your configured e-mail address" +msgstr "" +"Esta opción permite el envÃo diario de un recopilatorio de los titulares " +"nuevos o sin leer a la dirección de correo que haya indicado en la " +"configuración" #: classes/pref/prefs.php:36 msgid "Try to send digests around specified time" @@ -1862,8 +1756,11 @@ msgid "On catchup show next feed" msgstr "Al ponerse al corriente, mostrar la siguiente fuente" #: classes/pref/prefs.php:44 -msgid "Automatically open next feed with unread articles after marking one as read" -msgstr "Abrir automáticamente la siguiente fuente con artÃculos sin leer, después de marcar una fuente como leÃda" +msgid "" +"Automatically open next feed with unread articles after marking one as read" +msgstr "" +"Abrir automáticamente la siguiente fuente con artÃculos sin leer, después de " +"marcar una fuente como leÃda" #: classes/pref/prefs.php:45 msgid "Purge articles after this number of days (0 - disables)" @@ -1873,8 +1770,7 @@ msgstr "Purgar artÃculos después de este número de dÃas (0 - desactivado)" msgid "Purge unread articles" msgstr "Purgar artÃculos sin leer" -#: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: classes/pref/prefs.php:47 plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Invertir el orden de los titulares (los más antiguos primero)" @@ -1892,7 +1788,9 @@ msgstr "Ordenar titulares por fecha de la fuente" #: classes/pref/prefs.php:50 msgid "Use feed-specified date to sort headlines instead of local import date." -msgstr "Usar fecha especificada en la fuente para ordenar los titulares en lugar de la fecha local de importación." +msgstr "" +"Usar fecha especificada en la fuente para ordenar los titulares en lugar de " +"la fecha local de importación." #: classes/pref/prefs.php:51 msgid "Login with an SSL certificate" @@ -1912,10 +1810,11 @@ msgstr "Quitar las etiquetas inseguras de los artÃculos" #: classes/pref/prefs.php:53 msgid "Strip all but most common HTML tags when reading articles." -msgstr "Quitar etiquetas HTML, salvo las más comunes, cuando se esté leyendo los artÃculos." +msgstr "" +"Quitar etiquetas HTML, salvo las más comunes, cuando se esté leyendo los " +"artÃculos." -#: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: classes/pref/prefs.php:54 js/prefs.js:1734 msgid "Customize stylesheet" msgstr "Personalizar hoja de estilo" @@ -1924,8 +1823,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "Personalizar la hoja de estilo CSS" #: classes/pref/prefs.php:55 -msgid "User timezone" -msgstr "Zona horaria del usuario" +msgid "Time zone" +msgstr "Zona horaria " #: classes/pref/prefs.php:56 msgid "Group headlines in virtual feeds" @@ -1933,25 +1832,31 @@ msgstr "Agrupar los titulares en fuentes virtuales" #: classes/pref/prefs.php:56 msgid "Special feeds, labels, and categories are grouped by originating feeds" -msgstr "Las fuentes especiales, marcadores y categorÃas se agrupan por fuente original" +msgstr "" +"Las fuentes especiales, marcadores y categorÃas se agrupan por fuente " +"original" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Seleccionar tema" +msgid "Language" +msgstr "Idioma" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "Tema" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "Seleccione uno de los temas CSS disponibles" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "La antigua contraseña no puede dejarse en blanco." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "La nueva contraseña no puede dejarse en blanco." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Las contraseñas introducidas no coinciden." @@ -1959,221 +1864,246 @@ msgstr "Las contraseñas introducidas no coinciden." msgid "Function not supported by authentication module." msgstr "Función no soportada por el módulo de autenticación" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "La configuración ha sido guardada." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Opción desconocida: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "Sus datos personales han sido guardados." -#: classes/pref/prefs.php:184 -#, fuzzy +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." -msgstr "Algunas preferencias solo están disponibles en el perfil por defecto." +msgstr "Se han establecido los valores por defecto en las preferencias." -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "Datos personales / Autenticación" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Datos personales" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "Nombre completo" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "Correo electrónico" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Nivel de acceso" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "Guardar datos" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "Su contraseña tiene el valor por defecto. Por favor, modifÃquela." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." -msgstr "Cambiar su contraseña actual desactivará las contraseñas de un solo uso." +msgstr "" +"Cambiar su contraseña actual desactivará las contraseñas de un solo uso." -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Antigua contraseña" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Nueva contraseña" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Confirme la nueva contraseña" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Cambiar contraseña" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "Contraseñas de un solo uso / Autenticador" -#: classes/pref/prefs.php:338 -msgid "One time passwords are currently enabled. Enter your current password below to disable." -msgstr "Las contraseñas de un solo uso están habilitadas. Introduzca su contraseña actual para deshabilitar." +#: classes/pref/prefs.php:327 +msgid "" +"One time passwords are currently enabled. Enter your current password below " +"to disable." +msgstr "" +"Las contraseñas de un solo uso están habilitadas. Introduzca su contraseña " +"actual para deshabilitar." -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 classes/pref/prefs.php:403 msgid "Enter your password" msgstr "Introduzca su contraseña" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" msgstr "Desactivar contraseñas de un solo uso" -#: classes/pref/prefs.php:380 -msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." -msgstr "Necesitará un Autenticador compatible para usar esta función. Cambiar su contraseña deshabilitarÃa automáticamente las contraseñas de un solo uso." +#: classes/pref/prefs.php:369 +msgid "" +"You will need a compatible Authenticator to use this. Changing your password " +"would automatically disable OTP." +msgstr "" +"Necesitará un Autenticador compatible para usar esta función. Cambiar su " +"contraseña deshabilitarÃa automáticamente las contraseñas de un solo uso." -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "Escanee el código siguiente con la aplicación de Autenticación:" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "He escaneado el código y quiero habilitar las contraseñas de un solo uso" +#: classes/pref/prefs.php:408 +msgid "Enter the generated one time password" +msgstr "Introduzca contraseña de un solo uso generada" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" msgstr "Activar contraseñas de un solo uso" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" +"Se requieren funciones PHP GD para el funcionamiento de las contraseñas de " +"un solo uso." + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "Algunas preferencias solo están disponibles en el perfil por defecto." -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "Personalizar" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "Registro" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "Limpiar" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "Hora actual del servidor: %s (UTC)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Guardar la configuración" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 msgid "Save and exit preferences" msgstr "Guardar preferencias y salir" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "Gestionar perfiles" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Opciones por defecto" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 classes/pref/prefs.php:708 msgid "Plugins" msgstr "Plugins" -#: classes/pref/prefs.php:730 -msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." -msgstr "Tiene que recargar Tiny Tiny RSS para que tengan efecto los cambios en los plugins." +#: classes/pref/prefs.php:710 +msgid "" +"You will need to reload Tiny Tiny RSS for plugin changes to take effect." +msgstr "" +"Tiene que recargar Tiny Tiny RSS para que tengan efecto los cambios en los " +"plugins." -#: classes/pref/prefs.php:732 -msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." -msgstr "Descargue más plugins de tt-rss.org: <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">foros</a> y <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." +#: classes/pref/prefs.php:712 +msgid "" +"Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank" +"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a " +"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins" +"\">wiki</a>." +msgstr "" +"Descargue más plugins de tt-rss.org: <a class=\"visibleLink\" target=\"_blank" +"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">foros</a> y <a target=" +"\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins" +"\">wiki</a>." -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "Plugins de sistema" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 classes/pref/prefs.php:796 msgid "Plugin" msgstr "Plugin" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 classes/pref/prefs.php:797 msgid "Description" msgstr "Descripción" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 classes/pref/prefs.php:798 msgid "Version" msgstr "Versión" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 classes/pref/prefs.php:799 msgid "Author" msgstr "Autor" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 classes/pref/prefs.php:831 msgid "more info" msgstr "más información" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 classes/pref/prefs.php:840 msgid "Clear data" msgstr "Borrar datos" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "Plugins de usuario" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 msgid "Enable selected plugins" msgstr "Activar los plugins seleccionados" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +msgid "Incorrect one time password" +msgstr "Contraseña de un solo uso incorrecta" + +#: classes/pref/prefs.php:925 classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "Contraseña incorrecta" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format -msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." -msgstr "Aquà puede cambiar los colores, fuentes y diseño de su tema actual mediante código CSS. Puede utilizar <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">este archivo</a> como referencia." +msgid "" +"You can override colors, fonts and layout of your currently selected theme " +"with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink" +"\" href=\"%s\">This file</a> can be used as a baseline." +msgstr "" +"Aquà puede cambiar los colores, fuentes y diseño de su tema actual mediante " +"código CSS. Puede utilizar <a target=\"_blank\" class=\"visibleLink\" href=" +"\"%s\">este archivo</a> como referencia." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Crear perfil" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 classes/pref/prefs.php:1060 msgid "(active)" msgstr "(activo)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "Borrar los perfiles seleccionados" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Activar perfil" @@ -2181,268 +2111,318 @@ msgstr "Activar perfil" msgid "Check to enable field" msgstr "Marcar para habilitar el campo" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "TÃtulo de la fuente" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 classes/pref/feeds.php:835 msgid "Update" msgstr "Actualizar" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Purga de artÃculos" -#: classes/pref/feeds.php:606 -msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." -msgstr "<b>Pista:</b> necesita rellenar su información de usuario si la fuente requiere autenticación, excepto para las fuentes de Twitter." +#: classes/pref/feeds.php:645 +msgid "" +"<b>Hint:</b> you need to fill in your login information if your feed " +"requires authentication, except for Twitter feeds." +msgstr "" +"<b>Pista:</b> necesita rellenar su información de usuario si la fuente " +"requiere autenticación, excepto para las fuentes de Twitter." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "No incluir en Fuentes Populares" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "Incluir en el correo recopilatorio" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Mostrar siempre imágenes adjuntas" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "No mostrar imágenes" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Guardar las imágenes en la memoria caché local" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "Marcar los artÃculos actualizados como no leÃdos" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Icono" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Reemplazar" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "Volver a suscribirse a las actualizaciones push" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." -msgstr "Reinicia el estatus de suscripción de PubSubHubbub para las fuentes habilitadas para push." +msgstr "" +"Reinicia el estatus de suscripción de PubSubHubbub para las fuentes " +"habilitadas para push." -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 classes/pref/feeds.php:1222 msgid "All done." msgstr "Hecho." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Fuentes con errores" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "Fuentes inactivas" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Editar fuentes seleccionadas" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 js/prefs.js:1779 msgid "Batch subscribe" msgstr "Suscripción en lote" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "CategorÃas" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "Añadir categorÃa" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "Eliminar seleccionadas" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "Ocultar/Mostrar categorÃas vacÃas" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "Más acciones..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Purga manual" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "Limpiar los datos de la fuente" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 -msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." -msgstr "Puede usar OPML para importar y exportar sus fuentes, filtros, marcadores y preferencias de Tiny Tiny RSS." +#: classes/pref/feeds.php:1427 +msgid "" +"Using OPML you can export and import your feeds, filters, labels and Tiny " +"Tiny RSS settings." +msgstr "" +"Puede usar OPML para importar y exportar sus fuentes, filtros, marcadores y " +"preferencias de Tiny Tiny RSS." -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "Sólo el perfil de opciones principal se puede migrar usando OPML." -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "Importar OPML" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "Nombre de archivo:" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "Incluir preferencias" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "Exportar OPML" -#: classes/pref/feeds.php:1399 -msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." -msgstr "Puede hacer público su OPML. Cualquiera que conozca la siguiente URL podrá suscribirse al OPML." +#: classes/pref/feeds.php:1456 +msgid "" +"Your OPML can be published publicly and can be subscribed by anyone who " +"knows the URL below." +msgstr "" +"Puede hacer público su OPML. Cualquiera que conozca la siguiente URL podrá " +"suscribirse al OPML." -#: classes/pref/feeds.php:1401 -msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." -msgstr "El OPML publicado no incluye sus preferencias, fuentes que requieren autenticación, ni fuentes ocultas de las Fuentes Populares." +#: classes/pref/feeds.php:1458 +msgid "" +"Published OPML does not include your Tiny Tiny RSS settings, feeds that " +"require authentication or feeds hidden from Popular feeds." +msgstr "" +"El OPML publicado no incluye sus preferencias, fuentes que requieren " +"autenticación, ni fuentes ocultas de las Fuentes Populares." -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "URL del archivo OPML público" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "Mostrar la URL del OPML público" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Integración con Firefox" -#: classes/pref/feeds.php:1416 -msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." -msgstr "Esta instalación de Tiny tiny RSS puede ser usada como un lector de fuentes de Firefox si pulsa en el enlace de abajo." +#: classes/pref/feeds.php:1472 +msgid "" +"This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the " +"link below." +msgstr "" +"Esta instalación de Tiny tiny RSS puede ser usada como un lector de fuentes " +"de Firefox si pulsa en el enlace de abajo." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Pulse aquà para registrar este sitio como un lector de fuentes." -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" msgstr "ArtÃculos publicados y compartidos / Fuentes generados" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "ArtÃculos publicados y fuentes generadas" -#: classes/pref/feeds.php:1435 -msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." -msgstr "Los artÃculos publicados son exportados como una fuente RSS pública a la cual podrá suscribirse cualquiera que conozca la URL especificada a continuación." +#: classes/pref/feeds.php:1491 +msgid "" +"Published articles are exported as a public RSS feed and can be subscribed " +"by anyone who knows the URL specified below." +msgstr "" +"Los artÃculos publicados son exportados como una fuente RSS pública a la " +"cual podrá suscribirse cualquiera que conozca la URL especificada a " +"continuación." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "Mostrar URL" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "Limpiar todas las URLs generadas" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "ArtÃculos compartidos mediante URL" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." -msgstr "Aquà puede desactivar todos los artÃculos compartidos mediante URLs únicas." +msgstr "" +"Aquà puede desactivar todos los artÃculos compartidos mediante URLs únicas." -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "Dejar de compartir todos los artÃculos" -#: classes/pref/feeds.php:1529 -msgid "These feeds have not been updated with new content for 3 months (oldest first):" -msgstr "Estas fuentes no han publicado contenidos nuevos al menos en 3 meses (más antiguas primero):" +#: classes/pref/feeds.php:1582 +msgid "" +"These feeds have not been updated with new content for 3 months (oldest " +"first):" +msgstr "" +"Estas fuentes no han publicado contenidos nuevos al menos en 3 meses (más " +"antiguas primero):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "Pulse para editar fuente" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "Cancelar la suscripción a las fuentes seleccionadas" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" -msgstr "Estas fuentes no han sido actualizadas debido a los siguientes errores:" +msgstr "" +"Estas fuentes no han sido actualizadas debido a los siguientes errores:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" -msgstr "Añadir una fuente RSS válida en cada lÃnea (no se realizará detección de fuentes)" +msgstr "" +"Añadir una fuente RSS válida en cada lÃnea (no se realizará detección de " +"fuentes)" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "Fuentes para suscribirse, una por lÃnea" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "Las fuentes requieren autenticación." -#: plugins/digest/digest_body.php:59 -msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." -msgstr "Esta aplicación requiere Javascript y su navegador no lo soporta. Por favor, revise la configuración de su navegador." +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "Log de errores" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "Actualizar" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "Error" + +#: classes/pref/system.php:42 +msgid "Filename" +msgstr "Nombre de archivo" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "Mensaje" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Fecha" + +#: plugins/digest/digest_body.php:57 +msgid "" +"Your browser doesn't support Javascript, which is required for this " +"application to function properly. Please check your browser settings." +msgstr "" +"Esta aplicación requiere Javascript y su navegador no lo soporta. Por favor, " +"revise la configuración de su navegador." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Hola," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "Versión estándar" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "Cerrar artÃculo" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "NSFW (click para alternar)" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "Plugin NSFW" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "Etiquetas que se considerarán NSFW (separadas por comas)" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 msgid "Configuration saved." msgstr "Configuración guardada." @@ -2458,17 +2438,16 @@ msgstr "La contraseña ha sido cambiada." msgid "Old password is incorrect." msgstr "La contraseña antigua es incorrecta." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 plugins/mobile/prefs.php:25 msgid "Home" msgstr "Página principal" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "No se encontró nada (clic para recargar la fuente)." @@ -2476,406 +2455,428 @@ msgstr "No se encontró nada (clic para recargar la fuente)." msgid "Open regular version" msgstr "Abrir versión estándar" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "Habilitar categorÃas" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "ON" msgstr "ON" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "OFF" msgstr "OFF" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "Ver categorÃas como carpetas" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "Mostrar imágenes en los artÃculos" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "Ocultar artÃculos y fuentes leÃdos" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "Ordenar fuentes por número de artÃculos sin leer" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[Reenviado]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 plugins/mail/init.php:64 msgid "Multiple articles" msgstr "Múltiples artÃculos" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "Hacer click en el enlace siguiente invocará su aplicación de correo:" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 msgid "Forward selected article(s) by email." msgstr "Enviar artÃculo por correo" -#: plugins/mailto/init.php:81 -msgid "You should be able to edit the message before sending in your mail client." -msgstr "DeberÃa poder editar el mensaje en su aplicación de correo antes de enviarlo." +#: plugins/mailto/init.php:78 +msgid "" +"You should be able to edit the message before sending in your mail client." +msgstr "" +"DeberÃa poder editar el mensaje en su aplicación de correo antes de enviarlo." -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 msgid "Close this dialog" msgstr "Cerrar este diálogo" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "Bookmarklets" -#: plugins/bookmarklets/init.php:24 -msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." -msgstr "Arrastre el siguiente enlace a la barra de herramientas de su navegador. Cuando esté interesado en suscribirse a una fuente, ábrala con el navegador y pulse el enlace para suscribirse." +#: plugins/bookmarklets/init.php:22 +msgid "" +"Drag the link below to your browser toolbar, open the feed you're interested " +"in in your browser and click on the link to subscribe to it." +msgstr "" +"Arrastre el siguiente enlace a la barra de herramientas de su navegador. " +"Cuando esté interesado en suscribirse a una fuente, ábrala con el navegador " +"y pulse el enlace para suscribirse." -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "¿Suscribirse a %s con Tiny Tiny RSS?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "Suscribirse con Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" -msgstr "Use este bookmarklet para publicar cualquier página usando Tiny Tiny RSS" +msgstr "" +"Use este bookmarklet para publicar cualquier página usando Tiny Tiny RSS" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "Importar y exportar" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "Archivo de artÃculos" -#: plugins/import_export/init.php:65 -msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." -msgstr "Puede exportar e importar sus artÃculos favoritos y archivados para tener una copia de seguridad, o para migrar entre instancias de Tiny Tiny RSS." +#: plugins/import_export/init.php:62 +msgid "" +"You can export and import your Starred and Archived articles for safekeeping " +"or when migrating between tt-rss instances." +msgstr "" +"Puede exportar e importar sus artÃculos favoritos y archivados para tener " +"una copia de seguridad, o para migrar entre instancias de Tiny Tiny RSS." -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "Exportar mis datos" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importar" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "Fallo de la importación: la versión del esquema es incorrecta." -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "Fallo de la importación: no se reconoce el formato del documento." -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "Terminado:" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "% artÃculo procesado, " msgstr[1] "% artÃculos procesados, " -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "%d importado, " msgstr[1] "%d importados, " -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "%d fuente creada." msgstr[1] "%d fuentes creadas." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "No se pudo cargar documento XML." -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "Preparar datos" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "No se puedo cargar el archivo. Puede ser necesario ajustar el parámetro upload_max_filesize en PHP.ini (valor actual = %s)" +#: plugins/import_export/init.php:444 plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." +msgstr "No se ha cargado ningún archivo." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "De:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "Para:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Asunto:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "Enviar correo electrónico" -#: plugins/note/init.php:28 -#: plugins/note/note.js:11 +#: plugins/note/init.php:26 plugins/note/note.js:11 msgid "Edit article note" msgstr "Editar nota del artÃculo" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "Panel de ejemplo" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "Valor de muestra" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "Definir valor" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "No se ha cargado ningún archivo." - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "Terminado. %d artÃculos de %d importados." -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "El formato del documento es incorrecto." -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "Importar items favoritos o compartidos de Google Reader" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "Pegue en el espacio siguiente su archivo starred.json o shared.json." -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "Importar mis items favoritos" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "Enlazado" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 plugins/instances/init.php:395 msgid "Instance" msgstr "Instancia" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "URL de la instancia" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 plugins/instances/init.php:414 msgid "Access key:" msgstr "Clave de acceso:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "Clave de acceso" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "Usar una clave de acceso para ambas instancias enlazadas." -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 plugins/instances/init.php:429 msgid "Generate new key" msgstr "Generar nueva clave" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "Enlazar instancia" -#: plugins/instances/init.php:307 -msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" -msgstr "Puede conectar otras instancias de Tiny Tiny RSS con esta para compartir Fuentes Populares. Para enlazar esta instancia de Tiny Tiny RSS con otras utilice esta URL:" +#: plugins/instances/init.php:304 +msgid "" +"You can connect other instances of Tiny Tiny RSS to this one to share " +"Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" +msgstr "" +"Puede conectar otras instancias de Tiny Tiny RSS con esta para compartir " +"Fuentes Populares. Para enlazar esta instancia de Tiny Tiny RSS con otras " +"utilice esta URL:" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "Última sesión" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "Estatus" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "Fuentes archivadas" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Crear enlace" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "Compartir mediante URL" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "Puede compartir este artÃculo con la siguiente URL única:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "Actualizar Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Su instalación de Tiny Tiny RSS está actualizada." -#: plugins/updater/init.php:351 -#, fuzzy +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." -msgstr "No cierre este diálogo esta que termine la actualización. Antes de continuar haga una copia de seguridad de la carpeta de Tiny Tiny RSS." +msgstr "" +"No cierre este cuadro de diálogo hasta que haya terminado la actualización." -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" +"Se recomienda hacer previamente una copia de seguridad del directorio de " +"Tiny Tiny RSS." -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." -msgstr "" +msgstr "Su base de datos no será modificada." -#: plugins/updater/init.php:362 -msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." +#: plugins/updater/init.php:360 +msgid "" +"Your current tt-rss installation directory will not be modified. It will be " +"renamed and left in the parent directory. You will be able to migrate all " +"your customized files after update finishes." msgstr "" +"El directorio actual de su instalación de Tiny Tiny RSS no será modificado. " +"Será renombrado, y quedará en el directorio padre. Después de concluir la " +"actualización usted podrá migrar todos los archivos personalizados que tenga." -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." msgstr "Listo para actualizar" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" msgstr "Empezar actualización" -#: js/feedlist.js:394 -#: js/feedlist.js:422 -#: plugins/digest/digest.js:26 +#: js/feedlist.js:395 js/feedlist.js:423 plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "¿Marcar todos los artÃculos de %s como leÃdos?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 msgid "Mark all articles in %s older than 1 day as read?" -msgstr "¿Marcar como leÃdos todos los artÃculos de más de 1 dÃa de antigüedad de %s? " +msgstr "" +"¿Marcar como leÃdos todos los artÃculos de más de 1 dÃa de antigüedad de %s? " -#: js/feedlist.js:416 +#: js/feedlist.js:417 msgid "Mark all articles in %s older than 1 week as read?" -msgstr "¿Marcar como leÃdos todos los artÃculos de más de 1 semana de antigüedad de %s?" +msgstr "" +"¿Marcar como leÃdos todos los artÃculos de más de 1 semana de antigüedad de " +"%s?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 msgid "Mark all articles in %s older than 2 weeks as read?" -msgstr "¿Marcar como leÃdos todos los artÃculos de más de 2 semanas de antigüedad de %s?" +msgstr "" +"¿Marcar como leÃdos todos los artÃculos de más de 2 semanas de antigüedad de " +"%s?" -#: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." -msgstr "¿Está seguro de que quiere reportar esta excepción a tt-rss.org? El informe incluirá los datos de su navegador. Su dirección IP quedará guardada." +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "El error será reportado a la ubicación configurada para los logs." + +#: js/functions.js:107 +msgid "" +"Are you sure to report this exception to tt-rss.org? The report will include " +"your browser information. Your IP would be saved in the database." +msgstr "" +"¿Está seguro de que quiere reportar esta excepción a tt-rss.org? El informe " +"incluirá los datos de su navegador. Su dirección IP quedará guardada." -#: js/functions.js:214 -msgid "close" -msgstr "cerrar" +#: js/functions.js:236 +msgid "Click to close" +msgstr "Clic para cerrar" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" msgstr "Error explicado" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "Subida completa." -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "¿Borrar el icono de la fuente?" -#: js/functions.js:697 +#: js/functions.js:723 msgid "Removing feed icon..." msgstr "Borrando el icono de la fuente..." -#: js/functions.js:702 +#: js/functions.js:728 msgid "Feed icon removed." msgstr "Icono de la fuente borrado." -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "Seleccione un archivo de imagen para cargar." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "¿Cargar un nuevo icono para esta fuente?" -#: js/functions.js:727 +#: js/functions.js:753 msgid "Uploading, please wait..." msgstr "Cargando. Por favor, espere..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "Por favor, introduzca el nombre del marcador:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "No se puede crear el marcador: falta nombre." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "Suscribirse a fuente" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "Se ha suscrito a %s" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "La URL especificada parece ser inválida." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "La URL especificada no parece contener fuentes." -#: js/functions.js:879 +#: js/functions.js:862 +msgid "Expand to select feed" +msgstr "Expandir para seleccionar fuente" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "No se pudo cargar la URL especificada: %s" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "Fallo de validación de XML: %s" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "Ya está suscrito a esta fuente." @@ -2893,15 +2894,18 @@ msgid "Create Filter" msgstr "Crear filtro" #: js/functions.js:1191 -msgid "Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update." -msgstr "¿Restaurar suscripción? Tiny Tiny RSS volverá a intentar suscribirse al hub de notificaciones en la siguiente actualización de fuentes." +msgid "" +"Reset subscription? Tiny Tiny RSS will try to subscribe to the notification " +"hub again on next feed update." +msgstr "" +"¿Restaurar suscripción? Tiny Tiny RSS volverá a intentar suscribirse al hub " +"de notificaciones en la siguiente actualización de fuentes." #: js/functions.js:1202 msgid "Subscription reset." msgstr "Suscripción reiniciada." -#: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/functions.js:1212 js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "¿Cancelar la suscripción a %s?" @@ -2909,70 +2913,61 @@ msgstr "¿Cancelar la suscripción a %s?" msgid "Removing feed..." msgstr "Eliminando la fuente..." -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "Introduzca el nombre de la categorÃa:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "¿Generar nueva dirección de sindicación para esta fuente?" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 js/prefs.js:1231 msgid "Trying to change address..." msgstr "Intentando cambiar la dirección..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 js/tt-rss.js:421 js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "No puede editar esta clase de fuente." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "Editar fuente" -#: js/functions.js:1566 -#: js/prefs.js:194 -#: js/prefs.js:749 +#: js/functions.js:1567 js/prefs.js:194 js/prefs.js:749 msgid "Saving data..." msgstr "Guardando datos..." -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "Más fuentes" -#: js/functions.js:1659 -#: js/functions.js:1769 -#: js/prefs.js:397 -#: js/prefs.js:427 -#: js/prefs.js:459 -#: js/prefs.js:642 -#: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/functions.js:1660 js/functions.js:1770 js/prefs.js:397 js/prefs.js:427 +#: js/prefs.js:459 js/prefs.js:642 js/prefs.js:662 js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "No se han seleccionado fuentes." -#: js/functions.js:1701 -msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." -msgstr "¿Eliminar las fuentes seleccionadas del archivo? Las fuentes con artÃculos archivados no serán eliminadas." +#: js/functions.js:1702 +msgid "" +"Remove selected feeds from the archive? Feeds with stored articles will not " +"be removed." +msgstr "" +"¿Eliminar las fuentes seleccionadas del archivo? Las fuentes con artÃculos " +"archivados no serán eliminadas." -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "Fuentes con errores de actualización" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "¿Borrar fuentes seleccionadas?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 js/prefs.js:1192 msgid "Removing selected feeds..." msgstr "Borrando fuentes seleccionadas..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Ayuda" @@ -2994,7 +2989,8 @@ msgstr "Por favor, introduzca el nombre de usuario:" #: js/prefs.js:62 msgid "Can't create user: no login specified." -msgstr "No se puede crear el usuario: no se ha especificado el nombre de usuario." +msgstr "" +"No se puede crear el usuario: no se ha especificado el nombre de usuario." #: js/prefs.js:66 msgid "Adding user..." @@ -3024,23 +3020,23 @@ msgstr "¿Borrar los marcadores seleccionados?" msgid "Removing selected labels..." msgstr "Eliminando las etiquetas seleccionadas..." -#: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:295 js/prefs.js:1393 msgid "No labels are selected." msgstr "No se han seleccionado marcadores." #: js/prefs.js:309 -msgid "Remove selected users? Neither default admin nor your account will be removed." -msgstr "¿Borrar los usuarios seleccionados? Su cuenta y la cuenta del administrador por defecto no serán borradas." +msgid "" +"Remove selected users? Neither default admin nor your account will be " +"removed." +msgstr "" +"¿Borrar los usuarios seleccionados? Su cuenta y la cuenta del administrador " +"por defecto no serán borradas." #: js/prefs.js:312 msgid "Removing selected users..." msgstr "Eliminando los usuarios seleccionados..." -#: js/prefs.js:326 -#: js/prefs.js:507 -#: js/prefs.js:528 -#: js/prefs.js:567 +#: js/prefs.js:326 js/prefs.js:507 js/prefs.js:528 js/prefs.js:567 msgid "No users are selected." msgstr "No se han seleccionado usuarios." @@ -3052,9 +3048,7 @@ msgstr "¿Eliminar los filtros seleccionados?" msgid "Removing selected filters..." msgstr "Eliminando los filtros seleccionados..." -#: js/prefs.js:359 -#: js/prefs.js:597 -#: js/prefs.js:616 +#: js/prefs.js:359 js/prefs.js:597 js/prefs.js:616 msgid "No filters are selected." msgstr "No se han seleccionado filtros." @@ -3080,7 +3074,8 @@ msgstr "Limpiando las fuentes seleccionadas..." #: js/prefs.js:440 msgid "How many days of articles to keep (0 - use default)?" -msgstr "¿Cuántos dÃas desea guardar los artÃculos? (0 = configuración por defecto)" +msgstr "" +"¿Cuántos dÃas desea guardar los artÃculos? (0 = configuración por defecto)" #: js/prefs.js:443 msgid "Purging selected feed..." @@ -3094,9 +3089,7 @@ msgstr "El campo de nombre de usuario no puede dejarse en blanco." msgid "Saving user..." msgstr "Guardando usuario..." -#: js/prefs.js:512 -#: js/prefs.js:533 -#: js/prefs.js:572 +#: js/prefs.js:512 js/prefs.js:533 js/prefs.js:572 msgid "Please select only one user." msgstr "Por favor, seleccione un solo usuario." @@ -3140,319 +3133,314 @@ msgstr "Importar OPML" msgid "Please choose an OPML file first." msgstr "Por favor, seleccione un archivo OPML." -#: js/prefs.js:815 -#: plugins/import_export/import_export.js:115 +#: js/prefs.js:815 plugins/import_export/import_export.js:115 #: plugins/googlereaderimport/init.js:45 msgid "Importing, please wait..." msgstr "Importando, espere por favor..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "¿Restaurar las opciones por defecto?" -#: js/prefs.js:1082 -msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." -msgstr "¿Borrar la categorÃa %s? Cualquier subcategorÃa será movida a Sin CategorÃa." +#: js/prefs.js:1096 +msgid "" +"Remove category %s? Any nested feeds would be placed into Uncategorized." +msgstr "" +"¿Borrar la categorÃa %s? Cualquier subcategorÃa será movida a Sin CategorÃa." -#: js/prefs.js:1088 +#: js/prefs.js:1102 msgid "Removing category..." msgstr "Borrando categorÃa..." -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "¿Eliminar las categorÃas seleccionadas?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "Eliminando las categorÃas seleccionadas..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "No se han seleccionado categorÃas." -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "Nombre de la categorÃa:" -#: js/prefs.js:1137 +#: js/prefs.js:1151 msgid "Creating category..." msgstr "Creando categorÃa..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "Fuentes sin actualizaciones recientes" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" -msgstr "¿Reemplazar la dirección actual de publicación del OPML por una dirección nueva?" +msgstr "" +"¿Reemplazar la dirección actual de publicación del OPML por una dirección " +"nueva?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "Limpiando la fuente..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" -msgstr "¿Reiniciar la puntuación de los artÃculos de las fuentes seleccionadas?" +msgstr "" +"¿Reiniciar la puntuación de los artÃculos de las fuentes seleccionadas?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 msgid "Rescoring selected feeds..." msgstr "Volviendo a puntuar las fuentes seleccionadas..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." -msgstr "¿Reiniciar la puntuación de todos los artÃculos? Esta operación puede llevar cierto tiempo." +msgstr "" +"¿Reiniciar la puntuación de todos los artÃculos? Esta operación puede llevar " +"cierto tiempo." -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." msgstr "Volviendo a puntuar las fuentes..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "¿Restaurar color por defecto en los marcadores seleccionados?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Perfiles de preferencias" -#: js/prefs.js:1411 -msgid "Remove selected profiles? Active and default profiles will not be removed." -msgstr "¿Borrar los perfiles seleccionados? El perfil activo y el perfil por defecto no serán borrados." +#: js/prefs.js:1425 +msgid "" +"Remove selected profiles? Active and default profiles will not be removed." +msgstr "" +"¿Borrar los perfiles seleccionados? El perfil activo y el perfil por defecto " +"no serán borrados." -#: js/prefs.js:1414 +#: js/prefs.js:1428 msgid "Removing selected profiles..." msgstr "Borrando los perfiles seleccionados..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "No se ha seleccionado ningún perfil." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 js/prefs.js:1504 msgid "Activate selected profile?" msgstr "¿Activar el perfil seleccionado?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "Seleccione un perfil para activar." -#: js/prefs.js:1458 +#: js/prefs.js:1472 msgid "Creating profile..." msgstr "Creando perfil..." -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "Se invalidarán todas las URLs generadas previamente. ¿Continuar?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 js/prefs.js:1550 msgid "Clearing URLs..." msgstr "Limpiando URLs..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 msgid "Generated URLs cleared." msgstr "Borrar todas las URLs generadas" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "Se invalidarán todas las URLs de artÃculos compartidos. ¿Continuar?" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "Las URLs compartidas han sido borradas." -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Editor de marcadores" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "Suscribiéndose a las fuentes..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "¿Borrar los datos guardados por este plugin?" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "¿Marcar todos los artÃculos como leÃdos?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "Marcando todas las fuentes como leÃdas..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." msgstr "Por favor, habilite primero el plugin mail." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 msgid "Please enable embed_original plugin first." msgstr "Por favor, habilite primero el plugin embed_original." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "Seleccionar artÃculo(s) por etiquetas" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "No puede cancelar la suscripción a la categorÃa." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Por favor, seleccione primero alguna fuente." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "No puede reiniciar la puntuación de esta clase de fuente." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "¿Reiniciar la puntuación de los artÃculos de %s?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "Reiniciando la puntuación de los artÃculos..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "¡Nueva versión disponible!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" msgstr "Cancelar búsqueda" -#: js/viewfeed.js:455 -#: plugins/digest/digest.js:258 +#: js/viewfeed.js:453 plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Quitar el artÃculo de los favoritos" -#: js/viewfeed.js:459 -#: plugins/digest/digest.js:260 +#: js/viewfeed.js:457 plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Marcar el artÃculo como favorito" -#: js/viewfeed.js:499 -#: plugins/digest/digest.js:263 +#: js/viewfeed.js:497 plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Despublicar artÃculo" -#: js/viewfeed.js:503 -#: plugins/digest/digest.js:265 +#: js/viewfeed.js:501 plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Publicar artÃculo" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 -#: plugins/mailto/init.js:7 +#: js/viewfeed.js:653 +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "%d artÃculo seleccionado" +msgstr[1] "%d artÃculos seleccionados" + +#: js/viewfeed.js:725 js/viewfeed.js:753 js/viewfeed.js:780 js/viewfeed.js:843 +#: js/viewfeed.js:877 js/viewfeed.js:997 js/viewfeed.js:1040 +#: js/viewfeed.js:1093 js/viewfeed.js:2091 plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "No se han seleccionado artÃculos." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "¿Borrar %d artÃculo seleccionado en %s?" msgstr[1] "¿Borrar %d artÃculos seleccionados en %s?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "¿Borrar %d artÃculo seleccionado?" msgstr[1] "¿Borrar %d artÃculos seleccionados?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "¿Archivar %d artÃculo seleccionado en %s?" msgstr[1] "¿Archivar %d artÃculos seleccionados en %s?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "¿Mover %d artÃculo archivado a su fuente original?" msgstr[1] "¿Mover %d artÃculos archivados a su fuente original?" -#: js/viewfeed.js:1032 -msgid "Please note that unstarred articles might get purged on next feed update." -msgstr "Recuerde que los artÃculos no favoritos podrÃan ser purgados en la siguiente actualización de las fuentes." +#: js/viewfeed.js:1054 +msgid "" +"Please note that unstarred articles might get purged on next feed update." +msgstr "" +"Recuerde que los artÃculos no favoritos podrÃan ser purgados en la siguiente " +"actualización de las fuentes." -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "¿Marcar %d artÃculo seleccionado de %s como leÃdo?" msgstr[1] "¿Marcar %d artÃculos seleccionados de %s como leÃdos?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "Editar las etiquetas del artÃculo" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "Guardando las etiquetas del artÃculo..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "No se ha seleccionado ningún artÃculo." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "No se han encontrado artÃculos que marcar" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "¿Marcar %d artÃculo como leÃdo?" msgstr[1] "¿Marcar %d artÃculos como leÃdos?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "Abrir artÃculo original" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 msgid "Display article URL" msgstr "Mostrar la URL del artÃculo" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 msgid "Toggle marked" msgstr "Alternar favorito" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Asignar marcador" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "Borrar marcador" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "Reproduciendo..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "Clic para pausar" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "Por favor, introduzca puntuación para los artÃculos seleccionados:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "Por favor, introduzca puntuación para este artÃculo:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 msgid "Article URL:" msgstr "URL del artÃculo:" @@ -3488,8 +3476,7 @@ msgstr "Cargar más..." msgid "Sorry, your browser does not support sandboxed iframes." msgstr "Lo siento, su navegador no soporta iframes aislados (sandbox)." -#: plugins/mailto/init.js:21 -#: plugins/mail/mail.js:21 +#: plugins/mailto/init.js:21 plugins/mail/mail.js:21 msgid "Forward article by email" msgstr "Enviar artÃculo por correo" @@ -3498,10 +3485,18 @@ msgid "Export Data" msgstr "Exportar datos" #: plugins/import_export/import_export.js:40 -msgid "Finished, exported %d article. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgid_plural "Finished, exported %d articles. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgstr[0] "Terminado, %d artÃculo exportado. Puede descargar los datos <a class='visibleLink' href='%u'>aquÃ</a>." -msgstr[1] "Terminado, %d artÃculos exportados. Puede descargar los datos <a class='visibleLink' href='%u'>aquÃ</a>." +msgid "" +"Finished, exported %d article. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgid_plural "" +"Finished, exported %d articles. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgstr[0] "" +"Terminado, %d artÃculo exportado. Puede descargar los datos <a " +"class='visibleLink' href='%u'>aquÃ</a>." +msgstr[1] "" +"Terminado, %d artÃculos exportados. Puede descargar los datos <a " +"class='visibleLink' href='%u'>aquÃ</a>." #: plugins/import_export/import_export.js:93 msgid "Data Import" @@ -3539,8 +3534,7 @@ msgstr "¿Borrar instancias seleccionadas?" msgid "Removing selected instances..." msgstr "Borrando instancias seleccionadas..." -#: plugins/instances/instances.js:139 -#: plugins/instances/instances.js:151 +#: plugins/instances/instances.js:139 plugins/instances/instances.js:151 msgid "No instances are selected." msgstr "No se han seleccionado instancias." @@ -3553,9 +3547,47 @@ msgid "Share article by URL" msgstr "Compartir artÃculo mediante URL" #: plugins/updater/updater.js:58 -#, fuzzy -msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." -msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una copia de seguridad de la carpeta de tt-rss antes de continuar. Escriba 'yes' para continuar." +msgid "" +"Backup your tt-rss directory before continuing. Please type 'yes' to " +"continue." +msgstr "" +"Haga copia de seguridad del directorio de Tiny Tiny RSS antes de continuar. " +"Por favor escriba 'yes' para continuar." + +#~ msgid "Switch to digest..." +#~ msgstr "Modo resumen..." + +#~ msgid "Show tag cloud..." +#~ msgstr "Nube de etiquetas..." + +#~ msgid "Click to play" +#~ msgstr "Clic para reproducir" + +#~ msgid "Play" +#~ msgstr "Reproducir" + +#~ msgid "Visit the website" +#~ msgstr "Visitar el sitio oficial" + +#~ msgid "Select theme" +#~ msgstr "Seleccionar tema" + +#~ msgid "I have scanned the code and would like to enable OTP" +#~ msgstr "" +#~ "He escaneado el código y quiero habilitar las contraseñas de un solo uso" + +#~ msgid "close" +#~ msgstr "cerrar" + +#~ msgid "Playing..." +#~ msgstr "Reproduciendo..." + +#~ msgid "" +#~ "Could not upload file. You might need to adjust upload_max_filesize in " +#~ "PHP.ini (current value = %s)" +#~ msgstr "" +#~ "No se puedo cargar el archivo. Puede ser necesario ajustar el parámetro " +#~ "upload_max_filesize en PHP.ini (valor actual = %s)" #~ msgid "Default interval between feed updates" #~ msgstr "Intervalo por defecto entre actualizaciones de las fuentes" @@ -3564,7 +3596,8 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgstr "No se pudo actualizar la base de datos" #~ msgid "Could not find necessary schema file, need version:" -#~ msgstr "No se pudo encontrar el fichero de esquema necesario. Versión necesaria:" +#~ msgstr "" +#~ "No se pudo encontrar el fichero de esquema necesario. Versión necesaria:" #~ msgid ", found: " #~ msgstr ", encontrado:" @@ -3573,10 +3606,16 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgstr "La base de datos de Tiny Tiny RSS está actualizada." #~ msgid "Please backup your database before proceeding." -#~ msgstr "Por favor, haga una copia de seguridad de su base de datos antes de continuar." +#~ msgstr "" +#~ "Por favor, haga una copia de seguridad de su base de datos antes de " +#~ "continuar." -#~ msgid "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to <b>%d</b>)." -#~ msgstr "Su base de datos Tiny Tiny RSS necesita ser actualizada a la última versión (<b>%d</b> to <b>%d</b>)." +#~ msgid "" +#~ "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> " +#~ "to <b>%d</b>)." +#~ msgstr "" +#~ "Su base de datos Tiny Tiny RSS necesita ser actualizada a la última " +#~ "versión (<b>%d</b> to <b>%d</b>)." #~ msgid "Performing updates..." #~ msgstr "Actualizando..." @@ -3595,18 +3634,29 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #, fuzzy #~ msgid "Finished. Performed <b>%d</b> update up to schema version <b>%d</b>." -#~ msgid_plural "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." -#~ msgstr[0] "Tarea terminada. Realizada(s) <b>%d</b> actualización(es) a la versión del esquema <b>%d</b>." -#~ msgstr[1] "Tarea terminada. Realizada(s) <b>%d</b> actualización(es) a la versión del esquema <b>%d</b>." +#~ msgid_plural "" +#~ "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." +#~ msgstr[0] "" +#~ "Tarea terminada. Realizada(s) <b>%d</b> actualización(es) a la versión " +#~ "del esquema <b>%d</b>." +#~ msgstr[1] "" +#~ "Tarea terminada. Realizada(s) <b>%d</b> actualización(es) a la versión " +#~ "del esquema <b>%d</b>." #~ msgid "Your database schema is from a newer version of Tiny Tiny RSS." -#~ msgstr "El esquema de su base de datos corresponde a una versión más reciente de Tiny Tiny RSS." +#~ msgstr "" +#~ "El esquema de su base de datos corresponde a una versión más reciente de " +#~ "Tiny Tiny RSS." #~ msgid "Found schema version: <b>%d</b>, required: <b>%d</b>." #~ msgstr "Versión actual del esquema: <b>%d</b>, requerida: <b>%d</b>." -#~ msgid "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer version and continue." -#~ msgstr "Imposible actualizar el esquema. Por favor, actualice Tiny Tiny RSS a la última versión y continúe." +#~ msgid "" +#~ "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer " +#~ "version and continue." +#~ msgstr "" +#~ "Imposible actualizar el esquema. Por favor, actualice Tiny Tiny RSS a la " +#~ "última versión y continúe." #~ msgid "Mark feed as read" #~ msgstr "Marcar fuente como leÃda" @@ -3614,8 +3664,12 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Enable external API" #~ msgstr "Habilitar API externa" -#~ msgid "When this option is enabled, headlines in Special feeds and Labels are grouped by feeds" -#~ msgstr "Cuando esta opción está habilitada, los titulares en fuentes especiales y marcadores son agrupados por fuentes" +#~ msgid "" +#~ "When this option is enabled, headlines in Special feeds and Labels are " +#~ "grouped by feeds" +#~ msgstr "" +#~ "Cuando esta opción está habilitada, los titulares en fuentes especiales y " +#~ "marcadores son agrupados por fuentes" #~ msgid "Title or Content" #~ msgstr "TÃtulo o contenido" @@ -3641,8 +3695,15 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Modify score" #~ msgstr "Modificar puntuación" -#~ msgid "This option is useful when you are reading several planet-type aggregators with partially colliding userbase. When disabled, it forces same posts from different feeds to appear only once." -#~ msgstr "Esta opción es útil cuando está leyendo varios agregadores de tipo \"planeta\" con bases de usuarios parcialmente coincidentes. Cuando está desactivado, fuerza a que los mismos artÃculos que hayan sido publicados por varias fuentes aparezcan una sola vez." +#~ msgid "" +#~ "This option is useful when you are reading several planet-type " +#~ "aggregators with partially colliding userbase. When disabled, it forces " +#~ "same posts from different feeds to appear only once." +#~ msgstr "" +#~ "Esta opción es útil cuando está leyendo varios agregadores de tipo " +#~ "\"planeta\" con bases de usuarios parcialmente coincidentes. Cuando está " +#~ "desactivado, fuerza a que los mismos artÃculos que hayan sido publicados " +#~ "por varias fuentes aparezcan una sola vez." #~ msgid "Date syntax appears to be correct:" #~ msgstr "Sintaxis de fecha parece correcta:" @@ -3651,10 +3712,6 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgstr "Sintaxis de fecha es incorrecta." #, fuzzy -#~ msgid "Refresh" -#~ msgstr "Refrescar" - -#, fuzzy #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "Editar la fuente" @@ -3669,9 +3726,6 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "¿Marcar todos los artÃculos visibles de %s como leÃdos?" -#~ msgid "Date" -#~ msgstr "Fecha" - #~ msgid "Score" #~ msgstr "Puntuación" @@ -3702,8 +3756,12 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Back to feeds" #~ msgstr "Volver a la lista de fuentes" -#~ msgid "This will clear your stored authentication information for Twitter. Continue?" -#~ msgstr "Esto borrará la su información de autenticación en Twitter almacenada. ¿Continuar?" +#~ msgid "" +#~ "This will clear your stored authentication information for Twitter. " +#~ "Continue?" +#~ msgstr "" +#~ "Esto borrará la su información de autenticación en Twitter almacenada. " +#~ "¿Continuar?" #, fuzzy #~ msgid "Clearing credentials..." @@ -3722,7 +3780,8 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ "Por favor, revise la configuración de su navegador." #~ msgid "Finished: %d articles processed, %d imported, %d feeds created." -#~ msgstr "Finalizado: %d artÃculos procesados, %d importados, %d fuentes creadas." +#~ msgstr "" +#~ "Finalizado: %d artÃculos procesados, %d importados, %d fuentes creadas." #~ msgid "Related" #~ msgstr "Relacionado" @@ -3799,8 +3858,12 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Focus search (if present)" #~ msgstr "Búsqueda enfocada (si está presente)" -#~ msgid "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS configuration and your access level." -#~ msgstr "<strong>Nota:</strong> la disponibilidad de las acciones dependerá de la configuración de Tiny Tiny RSS y de su nivel de acceso." +#~ msgid "" +#~ "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS " +#~ "configuration and your access level." +#~ msgstr "" +#~ "<strong>Nota:</strong> la disponibilidad de las acciones dependerá de la " +#~ "configuración de Tiny Tiny RSS y de su nivel de acceso." #~ msgid "Fatal: authentication module %s not found." #~ msgstr "Error fatal: no se encuentra el módulo de autenticación %s." @@ -3906,8 +3969,13 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Feed Categories" #~ msgstr "Volver a categorizar" -#~ msgid "When \"Mark as read\" button is clicked in toolbar, automatically open next feed with unread articles." -#~ msgstr "Cuando se pulse el botón \"Marcar como leÃdo\" de la barra de herramientas, abrir automáticamente la siguiente fuente que tenga artÃculos sin leer." +#~ msgid "" +#~ "When \"Mark as read\" button is clicked in toolbar, automatically open " +#~ "next feed with unread articles." +#~ msgstr "" +#~ "Cuando se pulse el botón \"Marcar como leÃdo\" de la barra de " +#~ "herramientas, abrir automáticamente la siguiente fuente que tenga " +#~ "artÃculos sin leer." #, fuzzy #~ msgid "Importing using DOMXML." @@ -3917,8 +3985,11 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Importing using DOMDocument." #~ msgstr "Importando OPML (usando la extensión DOMDocument)..." -#~ msgid "DOMXML extension is not found. It is required for PHP versions below 5." -#~ msgstr "No se ha encontrado la extensión DOMXML, la cual es necesaria para las versiones de PHP inferiores a la 5." +#~ msgid "" +#~ "DOMXML extension is not found. It is required for PHP versions below 5." +#~ msgstr "" +#~ "No se ha encontrado la extensión DOMXML, la cual es necesaria para las " +#~ "versiones de PHP inferiores a la 5." #, fuzzy #~ msgid "Cache images locally (SimplePie only)" @@ -3934,14 +4005,43 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Content filtering" #~ msgstr "Filtrado de contenido" -#~ msgid "Tiny Tiny RSS has support for filtering (or processing) articles. Filtering is done once, when new article is imported to the database from the newsfeed, specified field is matched against regular expression and some action is taken. Regular expression matching is case-insensitive." -#~ msgstr "Tiny tiny RSS soporta el filtrado (o procesamiento) de artÃculos. El filtrado se realiza una vez, cuando el nuevo artÃculo se importa a la base de datos desde la fuente de noticias: el campo especificado se compara con alguna expresión regular y se realiza alguna acción. La comparación de expresiones regulares es sensible a mayúsculas y minúsculas." +#~ msgid "" +#~ "Tiny Tiny RSS has support for filtering (or processing) articles. " +#~ "Filtering is done once, when new article is imported to the database from " +#~ "the newsfeed, specified field is matched against regular expression and " +#~ "some action is taken. Regular expression matching is case-insensitive." +#~ msgstr "" +#~ "Tiny tiny RSS soporta el filtrado (o procesamiento) de artÃculos. El " +#~ "filtrado se realiza una vez, cuando el nuevo artÃculo se importa a la " +#~ "base de datos desde la fuente de noticias: el campo especificado se " +#~ "compara con alguna expresión regular y se realiza alguna acción. La " +#~ "comparación de expresiones regulares es sensible a mayúsculas y " +#~ "minúsculas." -#~ msgid "Supported actions are: filter (do not import) article, mark article as read, set starred, assign tag(s), and set score. Filters can be defined globally and for some specific feed." -#~ msgstr "Acciones soportadas: filtrar (no importar) el artÃculo, marcarlo como leÃdo, fijarlo como favorito, asignarle etiquetas y darle una puntuación. Los filtros pueden ser definidos globalmente o para algunas fuentes concretas." +#~ msgid "" +#~ "Supported actions are: filter (do not import) article, mark article as " +#~ "read, set starred, assign tag(s), and set score. Filters can be defined " +#~ "globally and for some specific feed." +#~ msgstr "" +#~ "Acciones soportadas: filtrar (no importar) el artÃculo, marcarlo como " +#~ "leÃdo, fijarlo como favorito, asignarle etiquetas y darle una puntuación. " +#~ "Los filtros pueden ser definidos globalmente o para algunas fuentes " +#~ "concretas." -#~ msgid "Multiple and inverse matching are supported. All matching filters are considered when article is being imported and all actions executed in sequence. Inverse matching reverts matching result, e.g. filter matching XYZZY in title with inverse flag will match all articles, except those containing string XYZZY in title." -#~ msgstr "Se soportan las coincidencias múltiples e inversas. Todos los filtros de coincidencia son tenidos en cuenta cuando el artÃculo está siendo importado y todas las acciones se ejecutan en secuencia. Las coincidencias inversas invierten los resultados. Por ejemplo, el filtro de coincidencia XYZZY en el tÃtulo con la marca inversa seleccionada, hará que todos los artÃculos sean coincidentes salvo los que incluyan XYZZY en el tÃtulo." +#~ msgid "" +#~ "Multiple and inverse matching are supported. All matching filters are " +#~ "considered when article is being imported and all actions executed in " +#~ "sequence. Inverse matching reverts matching result, e.g. filter matching " +#~ "XYZZY in title with inverse flag will match all articles, except those " +#~ "containing string XYZZY in title." +#~ msgstr "" +#~ "Se soportan las coincidencias múltiples e inversas. Todos los filtros de " +#~ "coincidencia son tenidos en cuenta cuando el artÃculo está siendo " +#~ "importado y todas las acciones se ejecutan en secuencia. Las " +#~ "coincidencias inversas invierten los resultados. Por ejemplo, el filtro " +#~ "de coincidencia XYZZY en el tÃtulo con la marca inversa seleccionada, " +#~ "hará que todos los artÃculos sean coincidentes salvo los que incluyan " +#~ "XYZZY en el tÃtulo." #~ msgid "See also:" #~ msgstr "Ver también:" @@ -3970,12 +4070,9 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Click to expand article" #~ msgstr "Desplegar el artÃculo" -#, fuzzy -#~ msgid "Unable to load article." -#~ msgstr "Error: por favor, suba un fichero OPML." - #~ msgid "Update post on checksum change" -#~ msgstr "Actualizar el envÃo cuando cambie la suma de comprobación (\"checksum\")" +#~ msgstr "" +#~ "Actualizar el envÃo cuando cambie la suma de comprobación (\"checksum\")" #~ msgid "Use more accessible date/time format for headlines" #~ msgstr "Usar el formato de fecha y hora más accesible para los titulares" @@ -3999,8 +4096,12 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Unknown error" #~ msgstr "Error desconocido" -#~ msgid "Could not display feed (query failed). Please check label match syntax or local configuration." -#~ msgstr "No se puede mostrar la fuente (consulta fallida). Por favor, compruebe la sintaxis de la coincidencia de etiqueta o la configuración local." +#~ msgid "" +#~ "Could not display feed (query failed). Please check label match syntax or " +#~ "local configuration." +#~ msgstr "" +#~ "No se puede mostrar la fuente (consulta fallida). Por favor, compruebe la " +#~ "sintaxis de la coincidencia de etiqueta o la configuración local." #~ msgid "Publish article with a note" #~ msgstr "Publicar el artÃculo con una nota" @@ -4024,50 +4125,80 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgstr "Activar la lectura fuera de lÃnea" #~ msgid "Synchronize new articles for offline reading using Google Gears." -#~ msgstr "Sincronizar los nuevos artÃculos para su lectura fuera de lÃnea usando \"Google Gears\"." +#~ msgstr "" +#~ "Sincronizar los nuevos artÃculos para su lectura fuera de lÃnea usando " +#~ "\"Google Gears\"." #~ msgid "Default article limit" #~ msgstr "LÃmite de artÃculos por defecto" -#~ msgid "Default limit for articles to display, any custom number you like (0 - disables)." -#~ msgstr "LÃmite por defecto de los artÃculos a mostrar: cualquier número personalizado que quieras (0 = desactivado)." +#~ msgid "" +#~ "Default limit for articles to display, any custom number you like (0 - " +#~ "disables)." +#~ msgstr "" +#~ "LÃmite por defecto de los artÃculos a mostrar: cualquier número " +#~ "personalizado que quieras (0 = desactivado)." #~ msgid "Enable search toolbar" #~ msgstr "Habilitar la barra de herramientas de búsqueda" #~ msgid "Open article links in new browser window" -#~ msgstr "Abrir los enlaces del artÃculo en una nueva pestaña o ventana del navegador" +#~ msgstr "" +#~ "Abrir los enlaces del artÃculo en una nueva pestaña o ventana del " +#~ "navegador" -#~ msgid "Link to user stylesheet to override default style, disabled if empty." -#~ msgstr "Enlace a la hoja de estilo del usuario, la cual sobreescribirá el estilo por defecto (si se deja vació, la función estará desactivada)." +#~ msgid "" +#~ "Link to user stylesheet to override default style, disabled if empty." +#~ msgstr "" +#~ "Enlace a la hoja de estilo del usuario, la cual sobreescribirá el estilo " +#~ "por defecto (si se deja vació, la función estará desactivada)." #~ msgid "Hide feedlist" #~ msgstr "Ocultar la lista de fuentes" -#~ msgid "This option hides feedlist and allows it to be toggled on the fly, useful for small screens." -#~ msgstr "Esta opción oculta la lista de fuentes y le permite ser cambiada al vuelo (útil para pequeñas pantallas)." +#~ msgid "" +#~ "This option hides feedlist and allows it to be toggled on the fly, useful " +#~ "for small screens." +#~ msgstr "" +#~ "Esta opción oculta la lista de fuentes y le permite ser cambiada al vuelo " +#~ "(útil para pequeñas pantallas)." -#~ msgid "Experimental support for virtual feeds based on user crafted SQL queries. This feature is highly experimental and at this point not user friendly. Use with caution." -#~ msgstr "Soporte experimental para las fuentes virtuales basado en las consultas SQL diseñadas por el usuario. Esta caracterÃstica es experimental y nada amigable para el usuario. Úsela con cautela." +#~ msgid "" +#~ "Experimental support for virtual feeds based on user crafted SQL queries. " +#~ "This feature is highly experimental and at this point not user friendly. " +#~ "Use with caution." +#~ msgstr "" +#~ "Soporte experimental para las fuentes virtuales basado en las consultas " +#~ "SQL diseñadas por el usuario. Esta caracterÃstica es experimental y nada " +#~ "amigable para el usuario. Úsela con cautela." #~ msgid "Show additional information in feedlist" #~ msgstr "Mostrar información adicional en la lista de fuentes" #~ msgid "Prefer more accurate feedlist counters to UI speed" -#~ msgstr "Preferir el recuento más preciso de la lista de fuentes a la velocidad de la interfaz de usuario" +#~ msgstr "" +#~ "Preferir el recuento más preciso de la lista de fuentes a la velocidad de " +#~ "la interfaz de usuario" #~ msgid "Enable inline MP3 player" #~ msgstr "Habilitar el reproductor MP3 en lÃnea" -#~ msgid "Enable the Flash-based XSPF Player to play MP3-format podcast enclosures." -#~ msgstr "Habilitar el reproductor XSPF basado en flash para reproducir los ficheros de sonido MP3." +#~ msgid "" +#~ "Enable the Flash-based XSPF Player to play MP3-format podcast enclosures." +#~ msgstr "" +#~ "Habilitar el reproductor XSPF basado en flash para reproducir los " +#~ "ficheros de sonido MP3." #, fuzzy #~ msgid "Activate" #~ msgstr "Adaptable" -#~ msgid "You are running the latest version of Tiny Tiny RSS. The fact that you are seeing this dialog is probably a bug." -#~ msgstr "Usted está ejecutando la última versión de Tiny Tiny RSS. El hecho de que usted esté viendo este diálogo es probablemente un error." +#~ msgid "" +#~ "You are running the latest version of Tiny Tiny RSS. The fact that you " +#~ "are seeing this dialog is probably a bug." +#~ msgstr "" +#~ "Usted está ejecutando la última versión de Tiny Tiny RSS. El hecho de que " +#~ "usted esté viendo este diálogo es probablemente un error." #~ msgid "Feed Browser" #~ msgstr "Navegador de fuentes" @@ -4112,7 +4243,8 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgstr "color personalizado:" #~ msgid "Can't add filter: nothing to match on." -#~ msgstr "No se puede añadir el filtro: no se ha indicado ninguna coincidencia." +#~ msgstr "" +#~ "No se puede añadir el filtro: no se ha indicado ninguna coincidencia." #~ msgid "Can't subscribe: no feed URL given." #~ msgstr "Suscripción imposible: no se ha indicado la URL de la fuente." @@ -4134,7 +4266,8 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgstr "¿Guardar la configuración actual?" #~ msgid "Please enter new label foreground color:" -#~ msgstr "Por favor, introduzca un nuevo color de primer plano para la etiqueta:" +#~ msgstr "" +#~ "Por favor, introduzca un nuevo color de primer plano para la etiqueta:" #~ msgid "Please enter new label background color:" #~ msgstr "Por favor, introduzca un nuevo color de fondo para la etiqueta:" @@ -4204,7 +4337,8 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgstr "Por favor, espere..." #~ msgid "Data for offline browsing has not been downloaded yet." -#~ msgstr "Los datos para la navegación sin conexión aún no han sido descargados." +#~ msgstr "" +#~ "Los datos para la navegación sin conexión aún no han sido descargados." #~ msgid "Synchronizing feeds..." #~ msgstr "Sincronizando fuentes..." @@ -4239,11 +4373,19 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Last sync: Cancelled." #~ msgstr "Última sincronización: Cancelada." -#~ msgid "This will remove all offline data stored by Tiny Tiny RSS on this computer. Continue?" -#~ msgstr "Esto eliminará todos los datos fuera de lÃnea almacenados por Tiny Tiny RSS en esta computadora. ¿Desea continuar?" +#~ msgid "" +#~ "This will remove all offline data stored by Tiny Tiny RSS on this " +#~ "computer. Continue?" +#~ msgstr "" +#~ "Esto eliminará todos los datos fuera de lÃnea almacenados por Tiny Tiny " +#~ "RSS en esta computadora. ¿Desea continuar?" -#~ msgid "Tiny Tiny RSS has trouble accessing its server. Would you like to go offline?" -#~ msgstr "Tiny Tiny RSS tiene problemas para acceder a su servidor. ¿Desea ponerlo en modo fuera de lÃnea?" +#~ msgid "" +#~ "Tiny Tiny RSS has trouble accessing its server. Would you like to go " +#~ "offline?" +#~ msgstr "" +#~ "Tiny Tiny RSS tiene problemas para acceder a su servidor. ¿Desea ponerlo " +#~ "en modo fuera de lÃnea?" #~ msgid "Reset category order?" #~ msgstr "¿Reajustar el orden de la categorÃa?" @@ -4327,7 +4469,9 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgstr "Eliminando los datos sin conexión..." #~ msgid "Rescore last 100 articles in selected feeds?" -#~ msgstr "¿Reiniciar la puntuación de los últimos 100 artÃculos de las fuentes seleccionadas?" +#~ msgstr "" +#~ "¿Reiniciar la puntuación de los últimos 100 artÃculos de las fuentes " +#~ "seleccionadas?" #~ msgid "Saving feeds..." #~ msgstr "Guardando fuentes..." @@ -4341,11 +4485,18 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "Trying to change e-mail..." #~ msgstr "Intentando cambiar el correo electrónico..." -#~ msgid "You have to synchronize some articles before going into offline mode." -#~ msgstr "Tiene que sincronizar algunos artÃculos antes de ir al modo fuera de lÃnea." +#~ msgid "" +#~ "You have to synchronize some articles before going into offline mode." +#~ msgstr "" +#~ "Tiene que sincronizar algunos artÃculos antes de ir al modo fuera de " +#~ "lÃnea." -#~ msgid "You won't be able to access offline version of Tiny Tiny RSS until you switch it into offline mode again. Go online?" -#~ msgstr "No podrá acceder a la versión fuera de lÃnea de Tiny Tiny RSS hasta que lo haya puesto de nuevo en modo fuera de lÃnea. ¿Ponerlo en lÃnea?" +#~ msgid "" +#~ "You won't be able to access offline version of Tiny Tiny RSS until you " +#~ "switch it into offline mode again. Go online?" +#~ msgstr "" +#~ "No podrá acceder a la versión fuera de lÃnea de Tiny Tiny RSS hasta que " +#~ "lo haya puesto de nuevo en modo fuera de lÃnea. ¿Ponerlo en lÃnea?" #~ msgid "Can't open article: received invalid XML" #~ msgstr "No se puede abrir el artÃculo: el XML recibido no es válido." @@ -4371,9 +4522,6 @@ msgstr "La actualización en vivo es una caracterÃstica experimental. Haga una #~ msgid "The configuration was reset to defaults." #~ msgstr "La configuración ha sido reajustada a las opciones por defecto." -#~ msgid "Themes" -#~ msgstr "Plantillas" - #~ msgid "Change theme" #~ msgstr "Cambiar plantilla" diff --git a/locale/fi_FI/LC_MESSAGES/messages.mo b/locale/fi_FI/LC_MESSAGES/messages.mo Binary files differindex dd7f3ea16..34ccc85fd 100644 --- a/locale/fi_FI/LC_MESSAGES/messages.mo +++ b/locale/fi_FI/LC_MESSAGES/messages.mo diff --git a/locale/fi_FI/LC_MESSAGES/messages.po b/locale/fi_FI/LC_MESSAGES/messages.po index baf51f8ae..3c998af77 100644 --- a/locale/fi_FI/LC_MESSAGES/messages.po +++ b/locale/fi_FI/LC_MESSAGES/messages.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: tt-rss 1.7.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" -"PO-Revision-Date: 2013-04-01 14:49+0200\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" +"PO-Revision-Date: 2013-04-20 10:44+0200\n" "Last-Translator: Arto Tolonen <arto.tolonen@iki.fi>\n" "Language-Team: \n" "Language: fi_FI\n" @@ -17,98 +17,99 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Oletus" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Älä poista koskaan" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "Viikkoa vanhemmat" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "2 viikkoa vanhemmat" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "Kuukautta vanhemmat" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "2 kuukautta vanhemmat" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "3 kuukautta vanhemmat" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Oletusaikaväli" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "Ei päivitystä" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" -msgstr "Joka 15 minuutti" +msgstr "15 minuutin välein" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" -msgstr "Joka 30 minuutti" +msgstr "30 minuutin välein" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" -msgstr "Joka tunti" +msgstr "Kerran tunnissa" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" -msgstr "Joka 4 tunti" +msgstr "4 tunnin välein" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" -msgstr "Joka 12 tunti" +msgstr "12 tunnin välein" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "Päivittäin" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "Viikoittain" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "Käyttäjä" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Edistynyt käyttäjä" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Ylläpitäjä" #: errors.php:9 msgid "This program requires XmlHttpRequest to function properly. Your browser doesn't seem to support it." -msgstr "" +msgstr "Tämä sovellus edellyttää XmlHttpRequest-toimintoa. Selaimesi ei vaikuta tukevan sitä." #: errors.php:12 msgid "This program requires cookies to function properly. Your browser doesn't seem to support them." -msgstr "" +msgstr "Tämä sovellus edellyttää evästeiden toimivan oikein. Selaimesi ei vaikuta tukevan evästeitä." #: errors.php:15 msgid "Backend sanity check failed." @@ -136,7 +137,7 @@ msgstr "" #: errors.php:27 msgid "Denied. Your access level is insufficient to access this page." -msgstr "" +msgstr "Käyttäjäoikeutesi eivät riitä tämän sivun näyttämiseen." #: errors.php:29 msgid "Configuration check failed" @@ -150,348 +151,345 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Ladataan, odota..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" -msgstr "Sulje syötelista" +msgstr "Sulje syöteluettelo" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "Näytä artikkelit" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Mukautuva" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Kaikki artikkelit" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" -msgstr "Tähti" +msgstr "Tähdelliset" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" -msgstr "Julkinen" +msgstr "Julkiset" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" -msgstr "Lukematon" +msgstr "Lukemattomat" -#: index.php:177 +#: index.php:170 msgid "Unread First" msgstr "Lukemattomat ensin" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "Huomattavat" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Ohita pisteytys" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "Järjestä artikkelit" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Oletus" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "Uusin ensin" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "Vanhin ensin" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "Otsikko" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Merkitse luetuiksi" -#: index.php:195 +#: index.php:188 msgid "Older than one day" -msgstr "1pv vanhemmat" +msgstr "1 pv vanhemmat" -#: index.php:198 +#: index.php:191 msgid "Older than one week" -msgstr "1vk vanhemmat" +msgstr "1 vko vanhemmat" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" -msgstr "2vk vanhemmat" +msgstr "2 vko vanhemmat" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." -msgstr "Serveriin ei saada yhteyttä" +msgstr "Palvelimeen ei saada yhteyttä" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Uusi versio Tiny Tiny RSS:stä saatavilla!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Toiminnot..." -#: index.php:233 +#: index.php:225 msgid "Preferences..." msgstr "Asetukset" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Etsi..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Syötetoiminnot:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "Tilaa syöte..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." -msgstr "Muokkaa tätä syötettä" +msgstr "Muokkaa tätä syötettä..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Uudelleenpisteytä syöte" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" -msgstr "Peruuta syötetilaus" +msgstr "Peru tilaus" -#: index.php:240 +#: index.php:232 msgid "All feeds:" -msgstr "Kaikki syötteet" +msgstr "Kaikki syötteet:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Piilota/näytä luetut syötteet" -#: index.php:243 +#: index.php:235 msgid "Other actions:" -msgstr "Muut toiminnot" - -#: index.php:245 -msgid "Switch to digest..." -msgstr "Vaihda tiivistelmään..." +msgstr "Muut toiminnot:" -#: index.php:247 -msgid "Show tag cloud..." -msgstr "Näytä tagipilvi" - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 msgid "Toggle widescreen mode" msgstr "Vaihda näkymä" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." -msgstr "Valitse tageilla" +msgstr "Valitse avainsanoilla" -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Luo tunniste..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Luo suodatin..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "Näytä pikanäppäimet" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Kirjaudu ulos" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Asetukset" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Pikanäppäimet" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Poistu asetuksista" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Syötteet" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "Suodattimet" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Tunnisteet" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Käyttäjät" -#: register.php:186 +#: prefs.php:132 +#, fuzzy +msgid "System" +msgstr "Järjestelmän lisäosat" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "Luo uusi käyttäjätili" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "" -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" -msgstr "" +msgstr "Takaisin Tiny Tiny RSS:ään" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "" -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" -msgstr "Email:" +msgstr "Sähköposti:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" -msgstr "" +msgstr "Paljonko on kaksi plus kaksi:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "" -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "" -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "" -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "" -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "" -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "" #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "" @@ -506,315 +504,303 @@ msgstr[1] "" msgid "No feeds found." msgstr "Syötteitä ei löytynyt." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Erikoiset" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Kaikki syötteet" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" -msgstr "Tähdellä merkityt syötteet" +msgstr "Tähdelliset artikkelit" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Julkiset artikkelit" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Tuoreet artikkelit" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "Kaikki artikkelit" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "Arkistoidut artikkelit" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "Viimeksi luetut" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Valikko" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "Avaa seuraava syöte" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "Avaa edellinen syöte" -#: include/functions.php:1914 +#: include/functions.php:1960 msgid "Open next article" msgstr "Avaa seuraava artikkeli" -#: include/functions.php:1915 +#: include/functions.php:1961 msgid "Open previous article" msgstr "Avaa edellinen artikkeli" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "Avaa seuraava artikkeli (älä vieritä pitkiä artikkeleita)" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "Avaa edellinen artikkeli (älä vieritä pitkiä artikkeleita)" -#: include/functions.php:1918 -#, fuzzy +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" -msgstr "Avaa seuraava artikkeli (älä vieritä pitkiä artikkeleita)" +msgstr "Siirry seuraavaan artikkeliin (älä laajenna tai merkitse luetuksi)" -#: include/functions.php:1919 -#, fuzzy +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" -msgstr "Avaa edellinen artikkeli (älä vieritä pitkiä artikkeleita)" +msgstr "Siirry edelliseen artikkeliin (älä laajenna tai merkitse luetuksi)" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Etsi..." -#: include/functions.php:1921 +#: include/functions.php:1967 msgid "Article" msgstr "Artikkeli" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Lisää/Poista tähti" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "Vaihda julkinen-tilaa" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Vaihda luettu/lukematon" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" -msgstr "Muokkaa tageja" +msgstr "Muokkaa avainsanoja" -#: include/functions.php:1926 +#: include/functions.php:1972 msgid "Dismiss selected" msgstr "Piilota valittu" -#: include/functions.php:1927 +#: include/functions.php:1973 msgid "Dismiss read" msgstr "Piilota luettu" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" msgstr "Avaa uudessa ikkunassa" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 msgid "Mark below as read" msgstr "Merkitse alla olevat luetuiksi" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 msgid "Mark above as read" msgstr "Merkitse yllä olevat luetuiksi" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "Vieritä alas" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "Vieritä ylös" -#: include/functions.php:1933 +#: include/functions.php:1979 msgid "Select article under cursor" -msgstr "Valitse kursorin alla oleva artikkeli" +msgstr "Valitse osoittimen kohdalla oleva artikkeli" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "Lähetä artikkeli sähköpostilla" -#: include/functions.php:1935 +#: include/functions.php:1981 msgid "Close/collapse article" msgstr "Piilota/näytä artikkeli" -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" -msgstr "Vaihda automaattilaajennus tiivistemuodossa" +msgstr "Vaihda automaattilaajennuksen tila (yhdistelmänäkymässä)" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 msgid "Toggle embed original" msgstr "Vaihda alkuperäinen liitetty" -#: include/functions.php:1939 +#: include/functions.php:1985 msgid "Article selection" msgstr "Artikkelin valinta" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "Valitse kaikki artikkelit" -#: include/functions.php:1941 +#: include/functions.php:1987 msgid "Select unread" -msgstr "Valitse lukematon" +msgstr "Valitse lukemattomat" -#: include/functions.php:1942 +#: include/functions.php:1988 msgid "Select starred" msgstr "Valitse tähdellä merkityt" -#: include/functions.php:1943 +#: include/functions.php:1989 msgid "Select published" msgstr "Valitse julkaistu" -#: include/functions.php:1944 +#: include/functions.php:1990 msgid "Invert selection" msgstr "Vaihda valittujen tila" -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "Poista valinnat" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Syöte" -#: include/functions.php:1947 +#: include/functions.php:1993 msgid "Refresh current feed" msgstr "Päivitä tämänhetkinen syöte" -#: include/functions.php:1948 +#: include/functions.php:1994 msgid "Un/hide read feeds" msgstr "Piilota/näytä luetut syötteet" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "Tilaa syöte" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Muokkaa syötettä" -#: include/functions.php:1952 +#: include/functions.php:1998 msgid "Reverse headlines" -msgstr "Käännä otsikot" +msgstr "Otsikot käänteisjärjestyksessä" -#: include/functions.php:1953 +#: include/functions.php:1999 msgid "Debug feed update" -msgstr "Syötteen päivitys (Debug)" +msgstr "Syötepäivityksen vianetsintä" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Merkitse kaikki syötteet luetuiksi" -#: include/functions.php:1955 +#: include/functions.php:2001 msgid "Un/collapse current category" msgstr "Piilota/näytä tämänhetkinen kansio" -#: include/functions.php:1956 +#: include/functions.php:2002 msgid "Toggle combined mode" -msgstr "Vaihda yhdistety tila" +msgstr "Vaihda yhdistelmänäkymän tila" -#: include/functions.php:1957 +#: include/functions.php:2003 msgid "Toggle auto expand in combined mode" -msgstr "Vaihda automaattilaajennus tiivistemuodossa" +msgstr "Vaihda automaattilaajennuksen tila yhdistelmänäkymässä" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "Mene" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "Päivitä" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" -msgstr "Tagipilvi" +msgstr "Avainsanapilvi" -#: include/functions.php:1965 +#: include/functions.php:2011 msgid "Other" msgstr "Muu" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "Luo tunniste" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "Luo suodatin" -#: include/functions.php:1968 +#: include/functions.php:2014 msgid "Un/collapse sidebar" msgstr "Piilota/näytä sivupalkki" -#: include/functions.php:1969 +#: include/functions.php:2015 msgid "Show help dialog" msgstr "Näytä ohjeikkuna" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "Hakutulokset: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" -msgstr "ei tageja" +msgstr "ei avainsanoja" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" -msgstr "Muokkaa tämän artikkelin tageja" +msgstr "Muokkaa tämän artikkelin avainsanoja" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 msgid "Originally from:" msgstr "" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 msgid "Feed URL" -msgstr "Syötteen URL" +msgstr "Syötteen osoite" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -826,78 +812,81 @@ msgstr "Syötteen URL" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Sulje" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "tuntematon tyyppi" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "Litteet" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Käyttäjätunnus:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Salasana:" -#: include/login_form.php:197 +#: include/login_form.php:199 msgid "I forgot my password" msgstr "Unohdin salasanani" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Kieli:" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Profiili:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 msgid "Default profile" msgstr "Oletusprofiili" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Käytä vähemmän dataliikennettä" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "Muista kirjautumiseni" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Kirjaudu sisään" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "" @@ -907,167 +896,167 @@ msgstr "Artikkelia ei löytynyt" #: classes/article.php:179 msgid "Tags for this article (separated by commas):" -msgstr "Tämän syötteen tagit (pilkulla erotettuna)" +msgstr "Tämän syötteen avainsanat (pilkulla erotettuina)" #: classes/article.php:204 #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" -msgstr "Talleta" +msgstr "Tallenna" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Peru" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "Jaa Tiny Tiny RSS:llä" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "Otsikko:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "Sisältö:" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "Tunnisteet" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "Jaetut artikkelit näkyvät 'Julkisissa syötteissä'." -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "Jaa" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "Et ole kirjautunut" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Väärä käyttäjätunnus tai salasana" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Olet jo tilannut syötteen <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Tilattu syöte <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Tätä syötettä ei voitu tilata <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "<b>%s</b> ei sisällä syötteitä." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 msgid "Multiple feed URLs found." -msgstr "Useita syöte-URLiä löytyi." +msgstr "Useita syöteosoitteita löytyi." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." -msgstr "Syötettä <b>%s</b> ei voitu tilata.<br>URLää ei voi ladata." +msgstr "Syötettä <b>%s</b> ei voitu tilata.<br>Osoitetta ei voi ladata." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "Tilaa valittu syöte" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" -msgstr "Muokkaa syöteoptioita" +msgstr "Muokkaa syötteen asetuksia" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 msgid "Password recovery" msgstr "Salasanan palautus" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "Syötä tilisi sähköpostiosoite. Uusi salasana lähetetään sinulle sähköpostilla." -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "Palauta salasana" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "Jotkin vaadituista parametreistä puuttuvat tai ovat väärin." -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 msgid "Go back" msgstr "Takaisin" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." -msgstr "Valitettavasti käyttjätunnus/email -yhdistelmää ei löydy." +msgstr "Tätä käyttäjätunnus-sähköposti -yhdistelmää ei valitettavasti löydy." # Better this way... -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Käyttäjäoikeutesi eivät riitä päivitysscriptin suorittamiseen." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "" @@ -1082,7 +1071,7 @@ msgstr "" #: classes/dlg.php:57 #: classes/dlg.php:214 msgid "Generate new URL" -msgstr "Generoi uusi URL" +msgstr "Luo uusi URL" #: classes/dlg.php:71 msgid "Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner." @@ -1107,11 +1096,11 @@ msgstr "Mikä tahansa" #: classes/dlg.php:171 msgid "All tags." -msgstr "Kaikki tagit" +msgstr "Kaikki avainsanat" #: classes/dlg.php:173 msgid "Which Tags?" -msgstr "Mitkä tagit?" +msgstr "Mitkä avainsanat?" #: classes/dlg.php:186 msgid "Display entries" @@ -1119,10 +1108,10 @@ msgstr "Näytä" #: classes/dlg.php:205 msgid "You can view this feed as RSS using the following URL:" -msgstr "Tämän RSS-syötteen julkinen URL-osoite on:" +msgstr "Tämän RSS-syötteen julkinen osoite on:" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "" @@ -1132,7 +1121,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1144,114 +1133,120 @@ msgstr "Lataa" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "Syötteet päivitetty viimeksi %s" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Näytä RSS-syötteenä" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "Näytä RSS-syötteenä" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" -msgstr "Valitse" +msgstr "Valitse:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "Kaikki" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Käännä" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Ei mikään" -#: classes/feeds.php:101 +#: classes/feeds.php:93 msgid "More..." msgstr "Lisää..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Vaihda valittujen tila:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Valinta:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "Pisteytä" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "Arkistoi" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "Siirrä takaisin" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "Poista" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "Lähetä sähköpostilla" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Syöte:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "Syötettä ei löydy" -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "Älä poista koskaan" + +#: classes/feeds.php:360 #, php-format msgid "Imported at %s" msgstr "Tuotu %s" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "merkitse luetuksi" @@ -1289,7 +1284,7 @@ msgstr "Syötteet päivitetty viimeksi %s" #: classes/feeds.php:775 #: classes/feeds.php:942 msgid "Some feeds have update errors (click for details)" -msgstr "Joissakin syötteissä oli virheitä (klikkaa nähdäksesi lisätietoja)" +msgstr "Osassa syötteistä oli päivitysongelmia (napsauta nähdäksesi lisätietoja)" #: classes/feeds.php:922 msgid "No feed selected." @@ -1298,12 +1293,12 @@ msgstr "Yhtään syötettä ei ole valittuna" #: classes/feeds.php:975 #: classes/feeds.php:983 msgid "Feed or site URL" -msgstr "Syötteen/sivuston URL" +msgstr "Syötteen/sivuston osoite" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "Siirrä kansioon:" @@ -1313,24 +1308,24 @@ msgstr "Saatavilla olevat syötteet" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "Tunnistautuminen" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Käyttäjätunnus" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Salasana" @@ -1340,7 +1335,7 @@ msgstr "Tämä syöte vaatii kirjautumisen" #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "Tilaa" @@ -1352,8 +1347,8 @@ msgstr "Lisää syötteitä" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "Etsi" @@ -1374,8 +1369,8 @@ msgstr "raja:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Poista" @@ -1385,7 +1380,7 @@ msgstr "Etsi" #: classes/feeds.php:1107 msgid "Limit search to:" -msgstr "Rajaa haku" +msgstr "Haun rajaus:" #: classes/feeds.php:1123 msgid "This feed" @@ -1393,7 +1388,7 @@ msgstr "Tämä syöte" #: classes/backend.php:33 msgid "Other interface tips are available in the Tiny Tiny RSS wiki." -msgstr "Lisää käyttövinkkejä löydät Tiny Tiny RSS wiki -sivuilta." +msgstr "Lisää käyttövinkkejä löydät Tiny Tiny RSS -wikistä." #: classes/backend.php:38 msgid "Keyboard Shortcuts" @@ -1432,7 +1427,7 @@ msgstr "Lisätään syöte: %s" #: classes/opml.php:281 #, php-format msgid "Duplicate feed: %s" -msgstr "Duplikaatti syöte: %s" +msgstr "Syötteen kaksoiskappale: %s" #: classes/opml.php:295 #, php-format @@ -1442,7 +1437,7 @@ msgstr "Lisätään tunniste %s" #: classes/opml.php:298 #, php-format msgid "Duplicate label: %s" -msgstr "Duplikaatti tunniste: %s" +msgstr "Tunnisteen kaksoiskappale: %s" #: classes/opml.php:310 #, php-format @@ -1458,17 +1453,39 @@ msgstr "Lisätään suodatin..." msgid "Processing category: %s" msgstr "" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "Ladatun tiedoston siirtäminen epäonnistui." + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "" -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "Virhe: siirretty OPML-tiedosto katosi." + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "" #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "" @@ -1502,14 +1519,14 @@ msgid "Change password to" msgstr "Uusi salasana" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Valinnat" #: classes/pref/users.php:164 msgid "E-mail: " -msgstr "Email" +msgstr "Sähköposti: " #: classes/pref/users.php:240 #, php-format @@ -1519,12 +1536,12 @@ msgstr "" #: classes/pref/users.php:247 #, php-format msgid "Could not create user <b>%s</b>" -msgstr "Käyttääjää ei voitu luoda <b>%s</b>" +msgstr "Käyttäjää <b>%s</b> ei voitu luoda" #: classes/pref/users.php:251 #, php-format msgid "User <b>%s</b> already exists." -msgstr "Käyttäjätunnus <b>%s</b> on olemassa." +msgstr "Käyttäjätunnus <b>%s</b> on jo olemassa." #: classes/pref/users.php:273 #, php-format @@ -1545,13 +1562,13 @@ msgstr "" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 msgid "Select" msgstr "Valitse" @@ -1565,7 +1582,7 @@ msgstr "Tarkemmat tiedot" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Muokkaa" @@ -1578,13 +1595,13 @@ msgid "Last login" msgstr "Viimeisin kirjautuminen" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" -msgstr "Klikkaa muokataksesi" +msgstr "Napsauta muokataksesi" #: classes/pref/users.php:446 msgid "No users defined." -msgstr "Ei käyttjätunnuksia" +msgstr "Käyttäjätunnuksia ei määritelty." #: classes/pref/users.php:448 msgid "No matching users found." @@ -1592,7 +1609,7 @@ msgstr "Hakua vastaavia käyttäjätunnuksia ei löytynyt" #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Nimi" @@ -1611,7 +1628,7 @@ msgstr "Tausta:" #: classes/pref/labels.php:232 #, php-format msgid "Created label <b>%s</b>" -msgstr "Luotu tunniste <b>%s</b>" +msgstr "Luotiin tunniste <b>%s</b>" #: classes/pref/labels.php:287 msgid "Clear colors" @@ -1619,57 +1636,57 @@ msgstr "Poista värit" #: classes/pref/filters.php:96 msgid "Articles matching this filter:" -msgstr "Artikkelit, jotka täsmäävät tähän suodattimeen:" +msgstr "Suodatinta vastaavat artikkelit:" #: classes/pref/filters.php:133 msgid "No recent articles matching this filter have been found." -msgstr "Artikkeleita, jotka täsmäisivät tähän suodattimeen ei löytynyt. " +msgstr "Suodatinta vastaavia artikkeleita ei löytynyt. " #: classes/pref/filters.php:137 msgid "Complex expressions might not give results while testing due to issues with database server regexp implementation." msgstr "" #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Täsmäys" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "Lisää" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 msgid "Apply actions" msgstr "Suorita toiminnot" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "Aktivoitu" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 msgid "Match any rule" -msgstr "Täsmää kaikkiin sääntöihin" +msgstr "Täsmää ainakin yhteen säännöistä" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 msgid "Inverse matching" -msgstr "Käännä täsmäys" +msgstr "Käänteinen täsmäys" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" -msgstr "Testaa" +msgstr "Kokeilu" #: classes/pref/filters.php:435 msgid "(inverse)" -msgstr "(käännä)" +msgstr "(käänteinen)" #: classes/pref/filters.php:434 #, php-format @@ -1681,61 +1698,61 @@ msgid "Combine" msgstr "Yhdistä" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "Järjestä oletuksen mukaisesti" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Uudelleenpisteytä artikkelit" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Luo" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" -msgstr "'regular expression' -täsmäys" +msgstr "Käänteinen täsmäys säännöllisellä lausekkeella" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "kentässä" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "kansiossa" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" -msgstr "Talleta sääntö" +msgstr "Tallenna sääntö" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 msgid "Add rule" msgstr "Lisää sääntö" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Suorita toiminto" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "parametrit:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" -msgstr "Talleta toiminto" +msgstr "Tallenna toiminto" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 msgid "Add action" msgstr "Lisää toiminto" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 #, fuzzy msgid "[No caption]" msgstr "Nimi" @@ -1746,7 +1763,7 @@ msgstr "Yleinen" #: classes/pref/prefs.php:19 msgid "Interface" -msgstr "" +msgstr "Käyttöliittymä" #: classes/pref/prefs.php:20 msgid "Advanced" @@ -1754,12 +1771,11 @@ msgstr "Lisäasetukset" #: classes/pref/prefs.php:21 msgid "Digest" -msgstr "" +msgstr "Yhteenveto" #: classes/pref/prefs.php:25 -#, fuzzy msgid "Allow duplicate articles" -msgstr "Salli tuplapostaukset" +msgstr "Salli artikkeleiden kaksoiskappaleet" #: classes/pref/prefs.php:26 msgid "Assign articles to labels automatically" @@ -1767,21 +1783,19 @@ msgstr "Liitä tunnisteet artikkeleihin automaattisesti" #: classes/pref/prefs.php:27 msgid "Blacklisted tags" -msgstr "Estetyt tagit" +msgstr "Estetyt avainsanat" #: classes/pref/prefs.php:27 -#, fuzzy msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)." -msgstr "Näitä tageja ei liitetä automaattisesti (lista pilkulla erotettuna)" +msgstr "Näitä avainsanoja ei liitetä automaattisesti (pilkulla eroteltujen luettelo)." #: classes/pref/prefs.php:28 msgid "Automatically mark articles as read" msgstr "Merkitse syötteet automaattisesti luetuksi" #: classes/pref/prefs.php:28 -#, fuzzy msgid "This option enables marking articles as read automatically while you scroll article list." -msgstr "Artikkelit merkitään automaattisesti luetuiksi kun artikkelilistaa vieritetään." +msgstr "Artikkelit merkitään automaattisesti luetuiksi kun artikkeliluetteloa vieritetään." #: classes/pref/prefs.php:29 msgid "Automatically expand articles in combined mode" @@ -1789,11 +1803,11 @@ msgstr "Laajenna artikkelit automaattisesti yhdistelmänäkymässä" #: classes/pref/prefs.php:30 msgid "Combined feed display" -msgstr "Yhdistetty syötenäkymä" +msgstr "Syötteiden yhdistelmänäkymä" #: classes/pref/prefs.php:30 msgid "Display expanded list of feed articles, instead of separate displays for headlines and article content" -msgstr "Näytä artikkelilista laajennettuna, erillisten otsikko- ja artikkelinäkymien sijasta" +msgstr "Näytä artikkeliluettelo laajennettuna erillisten otsikko- ja artikkelinäkymien sijasta" #: classes/pref/prefs.php:31 msgid "Confirm marking feed as read" @@ -1804,7 +1818,6 @@ msgid "Amount of articles to display at once" msgstr "Kerralla näytettävien artikkeleiden määrä" #: classes/pref/prefs.php:33 -#, fuzzy msgid "Default feed update interval" msgstr "Oletusaikaväli" @@ -1814,20 +1827,19 @@ msgstr "" #: classes/pref/prefs.php:34 msgid "Mark articles in e-mail digest as read" -msgstr "Merkitse email-tiivestelmässä lähetetyt artikkelit luetuksi" +msgstr "Merkitse sähköpostitiivistelmänä lähetetyt artikkelit luetuksi" #: classes/pref/prefs.php:35 -#, fuzzy msgid "Enable e-mail digest" -msgstr "Aktivoi email-tiivistelmän lähetys" +msgstr "Aktivoi sähköpostitiivistelmän lähetys" #: classes/pref/prefs.php:35 msgid "This option enables sending daily digest of new (and unread) headlines on your configured e-mail address" -msgstr "Sähköpostiisi lähetetään päivittäin otsikot uusista (ja lukemattomista) artikkeleista" +msgstr "Sähköpostiisi lähetetään päivittäin otsikot uusista (lukemattomista) artikkeleista" #: classes/pref/prefs.php:36 msgid "Try to send digests around specified time" -msgstr "Lähetä kooste määriteltynä aikana (noin aika)" +msgstr "Pyri lähettämään kooste tiettyyn aikaan" #: classes/pref/prefs.php:36 msgid "Uses UTC timezone" @@ -1835,11 +1847,11 @@ msgstr "Käyttää UTC-aikavyöhykettä" #: classes/pref/prefs.php:37 msgid "Enable API access" -msgstr "" +msgstr "Aktivoi API" #: classes/pref/prefs.php:37 msgid "Allows external clients to access this account through the API" -msgstr "" +msgstr "Sallii pääsyn ulkoisille ohjelmille APIn kautta" #: classes/pref/prefs.php:38 msgid "Enable feed categories" @@ -1847,11 +1859,11 @@ msgstr "Käytä syötekansioita" #: classes/pref/prefs.php:39 msgid "Sort feeds by unread articles count" -msgstr "Järjestä syötteet lukemattomien artikkelimäärien mukaan" +msgstr "Järjestä syötteet lukemattomien artikkelien määrän perusteella" #: classes/pref/prefs.php:40 msgid "Maximum age of fresh articles (in hours)" -msgstr "Maksimi-ikä tuoreille artikkeleille (tunneissa)" +msgstr "Enimmäisikä tuoreille artikkeleille (tunneissa)" #: classes/pref/prefs.php:41 msgid "Hide feeds with no unread articles" @@ -1864,7 +1876,7 @@ msgstr "Näytä erikoissyötteet kun luetut artikkelit piilotetaan" #: classes/pref/prefs.php:43 msgid "Long date format" -msgstr "Pitkä päiväysformaatti" +msgstr "Päiväyksen pitempi muoto" #: classes/pref/prefs.php:44 msgid "On catchup show next feed" @@ -1872,7 +1884,7 @@ msgstr "Näytä automaattisesti seuraava syöte" #: classes/pref/prefs.php:44 msgid "Automatically open next feed with unread articles after marking one as read" -msgstr "Avaa automaattisesti seuraava lukemattomia artikkeleita sisältävä syöte kun viimeinen on merkitty luetuksi" +msgstr "Avaa automaattisesti seuraava lukemattomia artikkeleita sisältävä syöte kun edellinen on merkitty luetuksi" #: classes/pref/prefs.php:45 msgid "Purge articles after this number of days (0 - disables)" @@ -1883,17 +1895,17 @@ msgid "Purge unread articles" msgstr "Siivoa lukemattomat artikkelit" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" -msgstr "Käännä otsikkojärjestys (vanhimmat ensin)" +msgstr "Käänteinen otsikkojärjestys (vanhimmat ensin)" #: classes/pref/prefs.php:48 msgid "Short date format" -msgstr "Lyhyt päiväysformaatti" +msgstr "Päiväyksen lyhyempi muoto" #: classes/pref/prefs.php:49 msgid "Show content preview in headlines list" -msgstr "Näytä sisällön esikatselu otsikkolistassa" +msgstr "Näytä sisällön esikatselu otsikkoluettelossa" #: classes/pref/prefs.php:50 msgid "Sort headlines by feed date" @@ -1905,35 +1917,36 @@ msgstr "" #: classes/pref/prefs.php:51 msgid "Login with an SSL certificate" -msgstr "Kirjaudu SSL-sertificaatilla" +msgstr "Kirjaudu SSL-varmenteella" #: classes/pref/prefs.php:51 msgid "Click to register your SSL client certificate with tt-rss" -msgstr "Klikkaa rekisteröidäksesi SSL-sertifikaatti tt-rss:ään " +msgstr "Napsauta rekisteröidäksesi SSL-varmenne tt-rss:ään " #: classes/pref/prefs.php:52 msgid "Do not embed images in articles" -msgstr "Älä liitä kuvia artikkeleihin" +msgstr "Älä sisällytä kuvia artikkeleihin" #: classes/pref/prefs.php:53 msgid "Strip unsafe tags from articles" -msgstr "Poista vaaralliset tagit artikkeleista" +msgstr "Poista vaaralliset koodit artikkeleista" #: classes/pref/prefs.php:53 msgid "Strip all but most common HTML tags when reading articles." -msgstr "Poista kaikki erikoiset HTML tagit syötteistä." +msgstr "Karsi erikoiset HTML-koodit artikkeleita luettaessa." #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 msgid "Customize stylesheet" -msgstr "Muokkaa CSS-tyylisivua" +msgstr "Muokkaa CSS-tyylitiedostoa" #: classes/pref/prefs.php:54 msgid "Customize CSS stylesheet to your liking" -msgstr "Muokkaa lukijaa mieleiseksesi CSS-tyylisivuilla" +msgstr "Muokkaa lukijaa mieleiseksesi CSS-tyylitiedostolla" #: classes/pref/prefs.php:55 -msgid "User timezone" +#, fuzzy +msgid "Time zone" msgstr "Käyttäjän aikavyöhyke" #: classes/pref/prefs.php:56 @@ -1942,247 +1955,260 @@ msgstr "Ryhmittele otsikot virtuaalisyötteiksi" #: classes/pref/prefs.php:56 msgid "Special feeds, labels, and categories are grouped by originating feeds" -msgstr "" +msgstr "Erikoiset-syötteet, tunnisteet ja kansiot ryhmitellään alkuperäisen syötteen mukaan" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Valitse teema" +#, fuzzy +msgid "Language" +msgstr "Kieli:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" -msgstr "Valitse CSS-teema" +msgstr "Valitse yksi tarjolla olevista CSS-teemoista" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." -msgstr "Vanha salasana ei voi olla tyhjä" +msgstr "Vanha salasana ei saa olla tyhjä." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." -msgstr "Uusi salasana ei voi olla tyhjä" +msgstr "Uusi salasana ei saa olla tyhjä." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." -msgstr "Syötetyt salasanat eivät täsmää" +msgstr "Syötetyt salasanat eivät täsmää." #: classes/pref/prefs.php:88 msgid "Function not supported by authentication module." msgstr "" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." -msgstr "Konfiguraatio tallennettu." +msgstr "Asetukset tallennettiin." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Tuntematon valinta: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." -msgstr "Sinun tiedot on tallennettu" +msgstr "Tietosi tallennettiin." -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "Omat tiedot / Tunnistautuminen" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Omat tiedot" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "Koko nimi" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" -msgstr "Email" +msgstr "Sähköposti" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Käyttäjäoikeudet" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" -msgstr "Talleta tiedot" +msgstr "Tallenna tiedot" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." -msgstr "Käytät vieläkin oletussalasanaa, kannattaa vaihtaa." +msgstr "Käytät vieläkin oletussalasanaa, se kannattaa vaihtaa." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "Salasanan vaihtaminen poistaa kertakäyttösalasanatunnistautumisen käytöstä." -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Vanha salasana" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Uusi salasana" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Vahvista salasana" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Vaihda salasana" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 msgid "Enter your password" msgstr "Syötä salasanasi" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" msgstr "Poista OTP käytöstä" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "" -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" +#: classes/pref/prefs.php:408 +msgid "Enter the generated one time password" msgstr "" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" msgstr "Aktivoi kertakäyttösalasana" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "Muokkaa" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "Rekisteröi" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "Tyhjennä" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" -msgstr "Serverin aika: %s (UTC)" +msgstr "Palvelimen aika: %s (UTC)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" -msgstr "Talleta asetukset" +msgstr "Tallenna asetukset" -#: classes/pref/prefs.php:694 -#, fuzzy +#: classes/pref/prefs.php:675 msgid "Save and exit preferences" -msgstr "Poistu asetuksista" +msgstr "Tallenna ja poistu asetuksista" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "Hallitse profiileita" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Palauta oletusarvot" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "Lisäosat" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "Päivitä sivu aktivoidaksesi lisäosiin tehdyt muutokset." -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" -msgstr "Järjetelmän lisäosat" +msgstr "Järjestelmän lisäosat" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "Lisäosa" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 msgid "Description" msgstr "Kuvaus" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "Versio" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "Tekijä" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "lisätietoja" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 msgid "Clear data" msgstr "Tyhjennä tiedot" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "Käyttäjän lisäosat" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 msgid "Enable selected plugins" msgstr "Aktivoi valitut lisäosat" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "Väärä salasana" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "Väärä salasana" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." -msgstr "" +msgstr "Kirjoita tähän ne CSS-määrittelyt, jotka korvaavat tämänhetkisen teemasi värejä, fontteja ja sijoittelua. Voit käyttää pohjana <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">tätä tiedostoa.</a>" -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Luo profiili" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 msgid "(active)" msgstr "(aktiivinen)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "Poista valitut profiilit" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Aktivoi profiili" @@ -2190,270 +2216,295 @@ msgstr "Aktivoi profiili" msgid "Check to enable field" msgstr "Valitse aktivoidaksesi kenttä" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "Syötteen otsikko" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "Päivitä" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Artikkeleiden siivous" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "" -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "Piilota suosituista syötteistä" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" -msgstr "Sisällytä email-tiivistelmään" +msgstr "Sisällytä sähköpostitiivistelmään" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Näytä aina kuvat" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" -msgstr "Älä liitä kuvia" +msgstr "Älä näytä kuvia" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" -msgstr "Paikallinen välimuisti kuville" +msgstr "Tallenna kuvat välimuistiin" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "Merkitse päivitetyt artikkelit lukemattomiksi" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Suosikkikuvake" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Vaihda" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "" -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "Valmis." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Virheelliset syötteet" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "Passiiviset syötteet" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Muokkaa valittuja syötteitä" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 msgid "Batch subscribe" msgstr "Tilaa useita" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "Kansiot" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "Lisää kansio" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "Poista valittu" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "Piilota/näytä tyhjät kansiot" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." -msgstr "Lisää toimintoja" +msgstr "Lisää toimintoja..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "Tyhjennnä syötetiedot" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "" -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "" -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "Tiedosto:" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "" -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "" -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "" -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "" -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" -msgstr "Julkaistut & jaetut artikkelit / Generoidut syötteet" +msgstr "Julkaistut ja jaetut artikkelit / Luodut syötteet" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" -msgstr "Julkaistut artikkelit ja generoidut syötteet" +msgstr "Julkaistut artikkelit ja luodut syötteet" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." -msgstr "Julkistetut artikkelit näkyvät julkisina RSS-syötteinä ja niitä voi lukea ja tilata jokainen, joka tietää alla määritellyn URL:n" +msgstr "Julkistetut artikkelit näkyvät julkisena RSS-syötteenä ja niitä voi lukea ja tilata jokainen, joka tietää alla annetun osoitteen" -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" -msgstr "Näytä URL" +msgstr "Näytä osoite" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" -msgstr "Poista kaikki generoidut URLt" +msgstr "Poista kaikki luodut osoitteet" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" -msgstr "Artikkelit jaettu URL:n kautta" +msgstr "Osoitteen kautta jaetut artikkelit" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." -msgstr "Voit poistaa kaikkien artikkeleiden julkistukset tästä." +msgstr "Tässä voit perua kaikki osoitteen kautta jaettujen artikkeleiden julkistukset." -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "Poista kaikkien artikkeleiden jako" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "Näihin syötteisiin ei ole tullut uusia artikkeleita 3 kuukauteen (vanhimmat ensin):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 msgid "Click to edit feed" -msgstr "Klikkaa muokataksesi syötettä" +msgstr "Napsauta muokataksesi syötettä" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "Lopeta valittujen syötteiden tilaukset" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Näitä syötteitä ei ole päivitetty virheiden vuoksi:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" -msgstr "Lisää RSS-syötteet riveittäin. Yksi syöte per rivi. (syötetarkistusta ei tehdä)" +msgstr "Lisää RSS-syötteitä riveittäin (syötteitä ei yritetä tunnistaa)" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" -msgstr "Tilattavat syötteet, yksi syöte per rivi" +msgstr "Tilattavat syötteet, yksi syöte riviä kohden" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." -msgstr "Syöte vaatii kirjautumisen." +msgstr "Syötteet vaativat kirjautumisen." + +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "Päivitä" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:42 +#, fuzzy +msgid "Filename" +msgstr "Tiedosto:" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "" + +#: plugins/digest/digest_body.php:57 msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," -msgstr "Hei" +msgstr "Hei," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" -msgstr "Normaali versio" +msgstr "Tavallinen versio" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "Sulje artikkeli" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 msgid "Configuration saved." -msgstr "Asetukset tallennettu" +msgstr "Asetukset tallennettiin." #: plugins/auth_internal/init.php:62 msgid "Please enter your one time password:" @@ -2467,17 +2518,17 @@ msgstr "" msgid "Old password is incorrect." msgstr "" -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "" @@ -2485,408 +2536,418 @@ msgstr "" msgid "Open regular version" msgstr "" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" -msgstr "" - -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +msgstr "Käytä kansioita" + +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 msgid "Multiple articles" msgstr "" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 msgid "Forward selected article(s) by email." msgstr "" -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 msgid "Close this dialog" msgstr "Sulje" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" -msgstr "Tuo ja vie" +msgstr "Tuonti ja vienti" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "Artikkeliarkisto" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "" -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "Vie tietoni" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Tuo" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "" -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "" -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "Valmis: " -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "" msgstr[1] "" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "" msgstr[1] "" -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "" msgstr[1] "" -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "" -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." msgstr "" -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Otsikko:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" -msgstr "" +msgstr "Lähetä sähköposti" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 msgid "Edit article note" msgstr "" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "" - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" -msgstr "" +msgstr "Linkitetty" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 msgid "Access key:" msgstr "" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "" -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 msgid "Generate new key" msgstr "" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" -msgstr "" +msgstr "Tila" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Luo linkki" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" -msgstr "" +msgstr "Päivitä Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "" -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." msgstr "" -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." msgstr "" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" -msgstr "" +msgstr "Aloita päivitys" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Merkitäänkö kaikki artikkelit syötteessä %s luetuiksi?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 msgid "Mark all articles in %s older than 1 day as read?" -msgstr "Merkitäänkö kaikki yhtä päivää vanhemmat artikkelit syötteessä %s luetuiksi?" +msgstr "Merkitäänkö kaikki päivää vanhemmat artikkelit syötteessä %s luetuiksi?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 msgid "Mark all articles in %s older than 1 week as read?" -msgstr "Merkitäänkö kaikki yhtä viikkoa vanhemmat artikkelit syötteessä %s luetuiksi?" +msgstr "Merkitäänkö kaikki viikkoa vanhemmat artikkelit syötteessä %s luetuiksi?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 msgid "Mark all articles in %s older than 2 weeks as read?" -msgstr "Merkitäänkö kaikki 2 viikkoa vanhemmat artikkelit syötteessä %s luetuiksi?" +msgstr "Merkitäänkö kaikki kahta viikkoa vanhemmat artikkelit syötteessä %s luetuiksi?" + +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "" -#: js/functions.js:92 +#: js/functions.js:107 msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "" -#: js/functions.js:214 -msgid "close" -msgstr "sulje" +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "Napsauta muokataksesi" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "Lataus valmis." -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "Poista suosikkikuvake?" -#: js/functions.js:697 +#: js/functions.js:723 msgid "Removing feed icon..." -msgstr "Poistetaan suosikkikuvake" +msgstr "Poistetaan suosikkikuvake..." -#: js/functions.js:702 +#: js/functions.js:728 msgid "Feed icon removed." msgstr "Suosikkikuvake poistettu." -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." -msgstr "Valitse kuvatiedosto." +msgstr "Valitse ladattava kuvatiedosto." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" -msgstr "Lataa uusi suosikkikuvake tälle syötteelle?" +msgstr "Ladataanko uusi suosikkikuvake tälle syötteelle?" -#: js/functions.js:727 +#: js/functions.js:753 msgid "Uploading, please wait..." msgstr "Ladataan, odota..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" -msgstr "Syötä tunnisteen nimi" +msgstr "Syötä tunnisteen nimi:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." -msgstr "Tunnistetta ei luotu: Tyhjä nimi." +msgstr "Tunnistetta ei luotu: nimi puuttuu." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "Tilaa syöte" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" -msgstr "Syöte tilattu: %s" +msgstr "Tilattiin syöte %s" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." -msgstr "Syöttämäsi URL ei ole oikein" +msgstr "Antamasi osoite on viallinen." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." -msgstr "Syöttämäsi URL ei sisällä syötteitä" +msgstr "Antamassasi osoitteessa ei ole syötteitä." -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "Muokkaa valittuja syötteitä" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" -msgstr "URL:n lataus epäonnistui: %s" +msgstr "Osoitteen %s lataaminen epäonnistui" + +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" #: js/functions.js:883 msgid "You are already subscribed to this feed." -msgstr "Olet jo tilannut tämän syötteen" +msgstr "Olet jo tilannut tämän syötteen." #: js/functions.js:1013 msgid "Edit rule" @@ -2909,78 +2970,78 @@ msgid "Subscription reset." msgstr "" #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" -msgstr "Lopeta tämän syötteen tilaus: %s?" +msgstr "Perutaanko syötteen %s tilaus?" #: js/functions.js:1215 msgid "Removing feed..." -msgstr "Poistetaan syötteet..." +msgstr "Poistetaan syöte..." -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "Syötä kansion nimi:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "Vaihdetaan osoitetta..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "Et voi muokata tämäntyyppistä syötettä." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "Muokkaa syötettä" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 msgid "Saving data..." -msgstr "Talletetaan tiedot..." +msgstr "Tallennetaan tiedot..." -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "Lisää syötteitä" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." -msgstr "Yhtään syötettä ei ole valittuna" +msgstr "Yhtään syötettä ei ole valittuna." -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "" -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "Virheelliset syötteet" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "Poistetaanko valitut syötteet?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 msgid "Removing selected feeds..." msgstr "Poistetaan valitut syötteet..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Apua" @@ -2994,7 +3055,7 @@ msgstr "Poista kansio" #: js/PrefFilterTree.js:48 msgid "Inverse" -msgstr "Käännä valinnat" +msgstr "Käänteiset valinnat" #: js/prefs.js:55 msgid "Please enter login:" @@ -3002,7 +3063,7 @@ msgstr "Syötä käyttäjätunnus:" #: js/prefs.js:62 msgid "Can't create user: no login specified." -msgstr "Uutta käyttäjätunnusta ei voi luoda: Tyhjä käyttäjätunnus." +msgstr "Uutta käyttäjätunnusta ei voi luoda: käyttäjätunnus puuttuu." #: js/prefs.js:66 msgid "Adding user..." @@ -3033,7 +3094,7 @@ msgid "Removing selected labels..." msgstr "" #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "Yhtään tunnistetta ei ole valittuna" @@ -3050,7 +3111,7 @@ msgstr "Poistetaan valitut käyttäjätunnukset..." #: js/prefs.js:528 #: js/prefs.js:567 msgid "No users are selected." -msgstr "Käyttjätunnuksia ei ole valittu." +msgstr "Käyttäjätunnuksia ei ole valittu." #: js/prefs.js:344 msgid "Remove selected filters?" @@ -3068,7 +3129,7 @@ msgstr "Yhtään suodatinta ei ole valittuna." #: js/prefs.js:378 msgid "Unsubscribe from selected feeds?" -msgstr "Peruutaanko valittujen syötteiden tilaukset?" +msgstr "Perutaanko valittujen syötteiden tilaukset?" #: js/prefs.js:382 msgid "Unsubscribing from selected feeds..." @@ -3080,7 +3141,7 @@ msgstr "Valitse vain yksi syöte." #: js/prefs.js:418 msgid "Erase all non-starred articles in selected feed?" -msgstr "Haluatko poistaa syötteestä kaikki tähdellä merkitsemättömät artikkelit?" +msgstr "Haluatko poistaa syötteestä kaikki tähdettömät artikkelit?" #: js/prefs.js:421 msgid "Clearing selected feed..." @@ -3088,7 +3149,7 @@ msgstr "Poistetaan artikkeita..." #: js/prefs.js:440 msgid "How many days of articles to keep (0 - use default)?" -msgstr "Kuinka monen päivän ikäiset artikkelit säästetään (0 - käytä oletusarvoa)?" +msgstr "Montako päivää artikkeleita säilytetään (0 - käytä oletusarvoa)?" #: js/prefs.js:443 msgid "Purging selected feed..." @@ -3096,7 +3157,7 @@ msgstr "Siivotaan valittua syötettä..." #: js/prefs.js:478 msgid "Login field cannot be blank." -msgstr "Käyttjätunnus-kenttä ei voi olla tyhjä." +msgstr "Käyttäjätunnus ei voi olla tyhjä." #: js/prefs.js:482 msgid "Saving user..." @@ -3110,11 +3171,11 @@ msgstr "Valitse ainakin yksi käyttäjätunnus." #: js/prefs.js:537 msgid "Reset password of selected user?" -msgstr "Resetoi valitun käyttäjän salasana?" +msgstr "Nollaa valittujen käyttäjien salasanat?" #: js/prefs.js:540 msgid "Resetting password for selected user..." -msgstr "Resetoidaan valitun käyttäjän salasana..." +msgstr "Nollataan valittujen käyttäjien salasanat..." #: js/prefs.js:585 msgid "User details" @@ -3138,7 +3199,7 @@ msgstr "Muokkaa useampaa syötettä" #: js/prefs.js:708 msgid "Save changes to selected feeds?" -msgstr "Talleta valittujen syötteiden muutokset?" +msgstr "Tallenna valittujen syötteiden muutokset?" #: js/prefs.js:785 msgid "OPML Import" @@ -3154,321 +3215,320 @@ msgstr "" msgid "Importing, please wait..." msgstr "" -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" -msgstr "Palautetaanko oletukset?" +msgstr "Palautetaanko oletusasetukset?" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "" -#: js/prefs.js:1088 +#: js/prefs.js:1102 msgid "Removing category..." msgstr "Poistetaan kansio..." -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Haluatko poistaa valitun kansion?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "Poistetaan valitut kansiot..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Yhtään kansiota ei ole valittuna." -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "Kansion nimi:" -#: js/prefs.js:1137 +#: js/prefs.js:1151 msgid "Creating category..." msgstr "Luodaan kansio..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" -msgstr "Syötteet, joissa ei ole ollut päivityksiä pitkiin aikoihin" +msgstr "Syötteet joissa ei ole tuoreita artikkeleita" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "Siivotaan syöte..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Uudelleenpisteytetäänkö valitun syötteen artikkelit?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 msgid "Rescoring selected feeds..." -msgstr "Uudelleenpisteyteään valitut syötteet..." +msgstr "Uudelleenpisteytetään valitut syötteet..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "Uudelleenpisteytetäänkö kaikki artikkelit? Toiminto voi kestää kauan." -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." -msgstr "Uudelleenpisteyteään syötteet..." +msgstr "Uudelleenpisteytetään syötteet..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" -msgstr "Palautetaanko valittujen tunnisteiden värit oletusväreiksi?" +msgstr "Palautetaanko oletusväri valituille tunnisteille?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Profiilien asetukset" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "Poistetaanko valitut profiilit? Aktiivisia ja oletusprofiilia ei poisteta." -#: js/prefs.js:1414 +#: js/prefs.js:1428 msgid "Removing selected profiles..." msgstr "Poistetaan valitut profiilit..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." -msgstr "Yhtään profiiliä ei ole valittuna." +msgstr "Yhtään profiilia ei ole valittuna." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 msgid "Activate selected profile?" msgstr "Aktivoidaanko valittu profiili?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "Valitse profiili jonka haluat aktivoida." -#: js/prefs.js:1458 +#: js/prefs.js:1472 msgid "Creating profile..." msgstr "Luodaan profiili..." -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" -msgstr "Kaikki generoitujen syötteiden URLt poistetaan. Jatketaanko?" +msgstr "Kaikki luodut syöteosoitteet poistetaan. Jatketaanko?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 msgid "Clearing URLs..." -msgstr "Siivotaan URLt" +msgstr "Poistetaan osoitteita..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 msgid "Generated URLs cleared." -msgstr "Luodut URLt siivottu." +msgstr "Luodut osoitteet poistettiin." -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" -msgstr "Kaikki jaettujen artikkeleiden URLt poistetaan. Jatketaanko?" +msgstr "Kaikki jaettujen artikkeleiden osoitteet poistetaan. Jatketaanko?" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." -msgstr "Jaetut URLt tyhjennetty" +msgstr "Jaetut osoitteet poistettiin." -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" -msgstr "Tunniste-editori" +msgstr "Tunnisteiden muokkaus" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "Tilataan syötteet..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" -msgstr "Poistetaanko kaikki tämän lisäosan tallettamat tiedot?" +msgstr "Poistetaanko kaikki tämän lisäosan tallentamat tiedot?" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" -msgstr "Merkitse kaikki artikkelit luetuksi?" +msgstr "Merkitäänkö kaikki artikkelit luetuksi?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "Merkitään kaikki syötteet luetuiksi..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." -msgstr "Aktivoi ensin email lisäosa." +msgstr "Aktivoi ensin email-lisäosa." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 msgid "Please enable embed_original plugin first." msgstr "" -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" -msgstr "Valitse tagien perusteella" +msgstr "Valitse avainsanojen perusteella" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." -msgstr "Et voi peruuttaa tämän kansion tilausta." +msgstr "Et voi perua tämän kansion tilausta." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Valitse syötteet ensin." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "" -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" -msgstr "Uudelleenpisteytä artikkelit %s:ssa?" +msgstr "Uudelleenpisteytä artikkelit kansiossa %s?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "Uudelleenpisteytetään artikkelit..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "Uusi versio saatavilla!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" -msgstr "Peruuta haku" +msgstr "Peru haku" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Poista tähti artikkelista" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Merkitse artikkeli tähdellä" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Aseta artikkeli yksityiseksi" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Julkista artikkeli" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "Yhtään artikkelia ei ole valittuna." +msgstr[1] "Yhtään artikkelia ei ole valittuna." + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." -msgstr "Yhtään artikkelia ei ole valittuna" +msgstr "Yhtään artikkelia ei ole valittuna." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "" msgstr[1] "" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "" msgstr[1] "" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "Arkistoi %d valittu artikkeli syötteestä %s?" msgstr[1] "Arkistoi %d valittua artikkelia syötteestä %s?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "Siirretäänkö %d arkistoitu artikkeli takaisin?" msgstr[1] "Siirretäänkö %d arkistoitua artikkelia takaisin?" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Merkitäänkö %d valittu artikkeli syötteessä %s luetuksi?" +msgstr[1] "Merkitäänkö %d valittua artikkelia syötteessä %s luetuiksi?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" -msgstr "Muokkaa artikkelin tageja" +msgstr "Muokkaa artikkelin avainsanoja" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." -msgstr "Talletetaan artikkelin tagit..." +msgstr "Tallennetaan artikkelin avainsanat..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Yhtään artikkelia ei ole valittuna." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Artikkeleita ei ole merkittäväksi" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Merkitäänkö %d artikkeli luetuksi?" +msgstr[1] "Merkitäänkö %d artikkelia luetuiksi?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "Avaa alkuperäinen artikkeli" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 msgid "Display article URL" -msgstr "Näytä artikkelin URL" +msgstr "Näytä artikkelin osoite" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 msgid "Toggle marked" msgstr "Käännä valitun merkintä" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Liitä tunniste" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "Poista tunniste" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "" - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "Anna uusi pistemäärä valituille artikkeleille:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "Anna uusi pistemäärä tälle artikkelille:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 msgid "Article URL:" -msgstr "Artikkelin URL:" +msgstr "Artikkelin osoite:" #: plugins/digest/digest.js:72 msgid "Mark %d displayed article as read?" msgid_plural "Mark %d displayed articles as read?" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Merkitäänkö %d näytetty artikkeli luetuksi?" +msgstr[1] "Merkitäänkö %d näytettyä artikkelia luetuiksi?" #: plugins/digest/digest.js:290 msgid "Error: unable to load article." @@ -3476,13 +3536,13 @@ msgstr "Virhe: artikkelia ei voida ladata." #: plugins/digest/digest.js:464 msgid "Click to expand article." -msgstr "Klikkaa näyttääksesi artikkeli" +msgstr "Napsauta nähdäksesi koko artikkelin." #: plugins/digest/digest.js:535 msgid "%d more..." msgid_plural "%d more..." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d lisää..." +msgstr[1] "%d lisää..." #: plugins/digest/digest.js:542 msgid "No unread feeds." @@ -3503,7 +3563,7 @@ msgstr "Lähetä sähköpostilla" #: plugins/import_export/import_export.js:13 msgid "Export Data" -msgstr "Vie data" +msgstr "Vie tiedot" #: plugins/import_export/import_export.js:40 msgid "Finished, exported %d article. You can download the data <a class='visibleLink' href='%u'>here</a>." @@ -3513,7 +3573,7 @@ msgstr[1] "" #: plugins/import_export/import_export.js:93 msgid "Data Import" -msgstr "Tuo data" +msgstr "Tuo tiedot" #: plugins/import_export/import_export.js:112 msgid "Please choose the file first." @@ -3564,6 +3624,18 @@ msgstr "" msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." msgstr "" +#~ msgid "Switch to digest..." +#~ msgstr "Vaihda tiivistelmään..." + +#~ msgid "Show tag cloud..." +#~ msgstr "Näytä avainsanapilvi..." + +#~ msgid "Select theme" +#~ msgstr "Valitse teema" + +#~ msgid "close" +#~ msgstr "sulje" + #~ msgid "Default interval between feed updates" #~ msgstr "Oletusaikaväli syötepäivityksille" @@ -3598,7 +3670,7 @@ msgstr "" #~ msgstr "Sisältö" #~ msgid "Article Date" -#~ msgstr "Artikkelin pvm" +#~ msgstr "Artikkelin päiväys" #~ msgid "Delete article" #~ msgstr "Poista artikkeli" @@ -3607,22 +3679,19 @@ msgstr "" #~ msgstr "Merkitse tähdellä" #~ msgid "Assign tags" -#~ msgstr "Liitä tageja" +#~ msgstr "Liitä avainsanoja" #~ msgid "Modify score" #~ msgstr "Muokkaa pisteytystä" #~ msgid "Date syntax appears to be correct:" -#~ msgstr "Päiväysformaatti on oikein:" +#~ msgstr "Päiväyksen muoto on oikein:" #~ msgid "Date syntax is incorrect." -#~ msgstr "Päiväysformaatti on väärin." - -#~ msgid "Refresh" -#~ msgstr "Päivitä" +#~ msgstr "Päiväyksen muoto on väärin." #~ msgid "Tag Cloud" -#~ msgstr "Tagipilvi" +#~ msgstr "Avainsanapilvi" #~ msgid "Mark all visible articles in %s as read?" -#~ msgstr "Merkitse kaikki näkyvät artikkelit kansiossa %s luetuksi?" +#~ msgstr "Merkitse kaikki kansiossa %s näkyvät artikkelit luetuksi?" diff --git a/locale/fr_FR/LC_MESSAGES/messages.mo b/locale/fr_FR/LC_MESSAGES/messages.mo Binary files differindex 4d50abe90..bcbef187a 100644 --- a/locale/fr_FR/LC_MESSAGES/messages.mo +++ b/locale/fr_FR/LC_MESSAGES/messages.mo diff --git a/locale/fr_FR/LC_MESSAGES/messages.po b/locale/fr_FR/LC_MESSAGES/messages.po index 1854e6c8a..04992f5f9 100644 --- a/locale/fr_FR/LC_MESSAGES/messages.po +++ b/locale/fr_FR/LC_MESSAGES/messages.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: Tiny Tiny RSS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" -"PO-Revision-Date: 2013-04-03 08:43+0100\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" +"PO-Revision-Date: 2013-05-01 11:51+0100\n" "Last-Translator: Raphael Rochet <raphael@rri.fr>\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -20,100 +20,101 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.5.5\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Utiliser la valeur par défaut" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Ne jamais purger" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "Au bout d'une semaine" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "Au bout de 2 semaines" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "Au bout d'un mois" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "Au bout de 2 mois" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "Au bout de 3 mois" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Fréquence de mise à jour par défaut" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 backend.php:93 msgid "Disable updates" msgstr "Désactiver les mises à jour" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 backend.php:94 msgid "Each 15 minutes" msgstr "Toutes les 15 minutes" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 backend.php:95 msgid "Each 30 minutes" msgstr "Toutes les 30 minutes" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 backend.php:96 msgid "Hourly" msgstr "Toutes les heures" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 backend.php:97 msgid "Each 4 hours" msgstr "Toutes les 4 heures" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 backend.php:98 msgid "Each 12 hours" msgstr "Toutes les 12 heures" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 backend.php:99 msgid "Daily" msgstr "Une fois par jour" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 backend.php:100 msgid "Weekly" msgstr "Une fois par semaine" -#: backend.php:99 -#: classes/pref/users.php:123 +#: backend.php:103 classes/pref/users.php:123 classes/pref/system.php:44 msgid "User" msgstr "Utilisateur" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Utilisateur avancé" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Administrateur" #: errors.php:9 -msgid "This program requires XmlHttpRequest to function properly. Your browser doesn't seem to support it." -msgstr "Ce programme nécessite l'utilisation de XmlHttpRequest pour fonctionner correctement. Votre navigateur web semble ne pas intégrer cette fonctionnalité." +msgid "" +"This program requires XmlHttpRequest to function properly. Your browser " +"doesn't seem to support it." +msgstr "" +"Ce programme nécessite l'utilisation de XmlHttpRequest pour fonctionner " +"correctement. Votre navigateur web semble ne pas intégrer cette " +"fonctionnalité." #: errors.php:12 -msgid "This program requires cookies to function properly. Your browser doesn't seem to support them." -msgstr "Ce programme nécessite l'utilisation de cookies pour fonctionner correctement. Votre navigateur web semble ne pas intégrer cette fonctionnalité." +msgid "" +"This program requires cookies to function properly. Your browser doesn't " +"seem to support them." +msgstr "" +"Ce programme nécessite l'utilisation de cookies pour fonctionner " +"correctement. Votre navigateur web semble ne pas intégrer cette " +"fonctionnalité." #: errors.php:15 msgid "Backend sanity check failed." @@ -124,8 +125,12 @@ msgid "Frontend sanity check failed." msgstr "Le test de l'interface a échoué." #: errors.php:19 -msgid "Incorrect database schema version. <a href='db-updater.php'>Please update</a>." -msgstr "Version non valable pour le schéma de la base de données. <a href='db-updater.php'>Veuillez le mettre à jour</a>." +msgid "" +"Incorrect database schema version. <a href='db-updater.php'>Please " +"update</a>." +msgstr "" +"Version non valable pour le schéma de la base de données. <a href='db-" +"updater.php'>Veuillez le mettre à jour</a>." #: errors.php:21 msgid "Request not authorized." @@ -136,367 +141,318 @@ msgid "No operation to perform." msgstr "Aucune opération à effectuer." #: errors.php:25 -msgid "Could not display feed: query failed. Please check label match syntax or local configuration." -msgstr "Impossible d'afficher le flux : la requête n'a pas abouti. Veuillez vérifier la syntaxe de correspondance d'étiquette ou la configuration locale." +msgid "" +"Could not display feed: query failed. Please check label match syntax or " +"local configuration." +msgstr "" +"Impossible d'afficher le flux : la requête n'a pas abouti. Veuillez vérifier " +"la syntaxe de correspondance d'étiquette ou la configuration locale." #: errors.php:27 msgid "Denied. Your access level is insufficient to access this page." -msgstr "Accès refusé. Vous n'avez pas les permissions nécessaires pour accéder à cette page." +msgstr "" +"Accès refusé. Vous n'avez pas les permissions nécessaires pour accéder à " +"cette page." #: errors.php:29 msgid "Configuration check failed" msgstr "Échec du test de configuration" #: errors.php:31 -msgid "Your version of MySQL is not currently supported. Please see official site for more information." -msgstr "Votre version de MySQL n'est pas supportée actuellement. Veuillez consulter le site officiel pour plus d'informations." +msgid "" +"Your version of MySQL is not currently supported. Please see official site " +"for more information." +msgstr "" +"Votre version de MySQL n'est pas supportée actuellement. Veuillez consulter " +"le site officiel pour plus d'informations." #: errors.php:35 msgid "SQL escaping test failed, check your database and PHP configuration" -msgstr "Le test d'échappement SQL a échoué, veuillez vérifier votre configuration de base de données et de PHP" - -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 -#: classes/backend.php:5 -#: classes/pref/labels.php:296 -#: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 -#: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 -#: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 -#: js/prefs.js:86 -#: js/prefs.js:576 -#: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 -#: plugins/import_export/import_export.js:17 -#: plugins/updater/updater.js:17 +msgstr "" +"Le test d'échappement SQL a échoué, veuillez vérifier votre configuration de " +"base de données et de PHP" + +#: index.php:128 index.php:145 index.php:265 prefs.php:98 +#: classes/backend.php:5 classes/pref/labels.php:296 +#: classes/pref/filters.php:680 classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 js/feedlist.js:128 js/feedlist.js:439 +#: js/functions.js:446 js/functions.js:784 js/functions.js:1194 +#: js/functions.js:1330 js/functions.js:1642 js/prefs.js:86 js/prefs.js:576 +#: js/prefs.js:666 js/prefs.js:867 js/prefs.js:1454 js/prefs.js:1507 +#: js/prefs.js:1566 js/prefs.js:1583 js/prefs.js:1599 js/prefs.js:1615 +#: js/prefs.js:1634 js/prefs.js:1807 js/prefs.js:1823 js/tt-rss.js:506 +#: js/tt-rss.js:523 js/viewfeed.js:820 js/viewfeed.js:1249 +#: plugins/import_export/import_export.js:17 plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Chargement en cours, veuillez patienter..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Contracter la liste des flux" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "Afficher les articles" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Adaptatif" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Tous les articles" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 include/functions.php:2007 classes/feeds.php:98 msgid "Starred" msgstr "Remarquables" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 include/functions.php:2008 classes/feeds.php:99 msgid "Published" msgstr "Publiés" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 classes/feeds.php:85 classes/feeds.php:97 msgid "Unread" msgstr "Non lus" -#: index.php:177 +#: index.php:170 msgid "Unread First" msgstr "Non lus en premier" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "Avec annotation" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Ignorer le score" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "Classer les articles" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Utiliser la valeur par défaut" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "Les plus récents en premier" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "Les plus anciens en premier" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "Titre" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 -#: js/FeedTree.js:128 -#: js/FeedTree.js:156 -#: plugins/digest/digest.js:647 +#: index.php:185 index.php:233 include/functions.php:1997 +#: classes/feeds.php:103 classes/feeds.php:441 js/FeedTree.js:128 +#: js/FeedTree.js:156 plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Marquer comme lu" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "Âgé d'au moins un jour" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "Âgé d'au moins une semaine" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "Âgé d'au moins deux semaines" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "Un problème de communication avec le serveur est survenu." -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Une nouvelle version de Tiny Tiny RSS est disponible !" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Actions..." -#: index.php:233 +#: index.php:225 msgid "Preferences..." msgstr "Configuration..." -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Rechercher..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Actions sur ce flux :" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "S'abonner au flux..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Modifier ce flux..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Recalculer le score du flux" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 classes/pref/feeds.php:759 classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Se désabonner" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Tous les flux :" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Masquer/afficher les flux lus" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Autres actions :" -#: index.php:245 -msgid "Switch to digest..." -msgstr "Basculer en mode résumé..." - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "Afficher le nuage de tags..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 include/functions.php:1983 msgid "Toggle widescreen mode" msgstr "Basculer le mode écran large" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "Sélectionner par tags..." -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Créer une étiquette..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Créer un filtre..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "Aide sur les raccourcis clavier" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Déconnexion" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 prefs.php:116 include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Configuration" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Raccourcis clavier" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Quitter la configuration" -#: prefs.php:124 -#: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: prefs.php:119 classes/pref/feeds.php:107 classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Flux" -#: prefs.php:127 -#: classes/pref/filters.php:156 +#: prefs.php:122 classes/pref/filters.php:156 msgid "Filters" msgstr "Filtres" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 -#: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: prefs.php:125 include/functions.php:1176 include/functions.php:1831 +#: classes/pref/labels.php:90 plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Etiquettes" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Utilisateurs" -#: register.php:186 -#: include/login_form.php:238 +#: prefs.php:132 +msgid "System" +msgstr "Système" + +#: register.php:184 include/login_form.php:238 msgid "Create new account" msgstr "Créer un nouveau compte" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." -msgstr "L'inscription de nouveaux utilisateurs est désactivée par l'administrateur." - -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +msgstr "" +"L'inscription de nouveaux utilisateurs est désactivée par l'administrateur." + +#: register.php:194 register.php:239 register.php:252 register.php:267 +#: register.php:286 register.php:334 register.php:344 register.php:356 +#: classes/handler/public.php:629 classes/handler/public.php:717 +#: classes/handler/public.php:799 classes/handler/public.php:874 +#: classes/handler/public.php:888 classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Revenir à Tiny Tiny RSS" -#: register.php:217 -msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." -msgstr "Votre mot de passe temporaire va être envoyé à l'adresse mail indiquée. Les comptes ne s'étant pas connectés au moins une fois dans les 24 heures qui suivent l'envoi du mail seront supprimés." +#: register.php:215 +msgid "" +"Your temporary password will be sent to the specified email. Accounts, which " +"were not logged in once, are erased automatically 24 hours after temporary " +"password is sent." +msgstr "" +"Votre mot de passe temporaire va être envoyé à l'adresse mail indiquée. Les " +"comptes ne s'étant pas connectés au moins une fois dans les 24 heures qui " +"suivent l'envoi du mail seront supprimés." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Identifiant souhaité :" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "Vérifier la disponibilité" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 classes/handler/public.php:757 msgid "Email:" msgstr "Adresse mail :" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Combien font 2 plus 2 :" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Envoyer l'inscription" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "Vos informations d'inscription sont incomplètes." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Désolé, cet identifiant est déjà utilisé." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "L'inscription a échoué." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Compte créé avec succès." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "L'inscription de nouveaux utilisateurs est actuellement fermée." -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "Script de mise à jour des données de Tiny Tiny RSS." -#: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 -#: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: include/digest.php:109 include/functions.php:1185 +#: include/functions.php:1732 include/functions.php:1817 +#: include/functions.php:1839 classes/opml.php:416 classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Sans catégorie" @@ -511,398 +467,351 @@ msgstr[1] "%d articles archivés" msgid "No feeds found." msgstr "Aucun flux trouvé." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Spécial" -#: include/functions.php:1637 -#: classes/feeds.php:1110 +#: include/functions.php:1681 classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Tous les flux" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Articles remarquables" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Articles publiés" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Nouveaux articles" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 include/functions.php:2005 msgid "All articles" msgstr "Tous les articles" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "Articles archivés" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "Lus récemment" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Navigation" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "Ouvrir le flux suivant" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "Ouvrir le flux précédent" -#: include/functions.php:1914 +#: include/functions.php:1960 msgid "Open next article" msgstr "Ouvrir l'article suivant" -#: include/functions.php:1915 +#: include/functions.php:1961 msgid "Open previous article" msgstr "Ouvrir l'article précédent" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "Ouvrir l'article suivant (ne pas faire défiler les articles longs)" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "Ouvrir l'article précédent (ne pas faire défiler les articles longs)" -#: include/functions.php:1918 -#, fuzzy +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" -msgstr "Ouvrir l'article suivant (ne pas faire défiler les articles longs)" +msgstr "Aller à l'article suivant (ne pas développer ou marqué lu)" -#: include/functions.php:1919 -#, fuzzy +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" -msgstr "Ouvrir l'article précédent (ne pas faire défiler les articles longs)" +msgstr "Aller à l'article précédent (ne pas développer ou marqué lu)" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Afficher la fenêtre de recherche" -#: include/functions.php:1921 +#: include/functions.php:1967 msgid "Article" msgstr "Article" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Marquer comme (non) remarquable" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 js/viewfeed.js:1931 msgid "Toggle published" msgstr "Marquer comme (non) publié" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Marquer comme (non) lu" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Modifier les tags" -#: include/functions.php:1926 +#: include/functions.php:1972 msgid "Dismiss selected" msgstr "Ecarter la sélection" -#: include/functions.php:1927 +#: include/functions.php:1973 msgid "Dismiss read" msgstr "Ecarter les articles lus" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" msgstr "Ouvrir dans une nouvelle fenêtre" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 js/viewfeed.js:1950 msgid "Mark below as read" msgstr "Marquer les articles en-dessous comme lus" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 js/viewfeed.js:1944 msgid "Mark above as read" msgstr "Marquer les articles au-dessus comme lus" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "Défiler vers le bas" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "Défiler vers le haut" -#: include/functions.php:1933 +#: include/functions.php:1979 msgid "Select article under cursor" msgstr "Sélectionner l'article sous le curseur" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "Envoyer l'article par mail" -#: include/functions.php:1935 +#: include/functions.php:1981 msgid "Close/collapse article" msgstr "Contracter l'article" -#: include/functions.php:1936 -#, fuzzy +#: include/functions.php:1982 msgid "Toggle article expansion (combined mode)" -msgstr "Basculer le développement automatique en mode combiné" +msgstr "Basculer le développement (mode combiné)" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 plugins/embed_original/init.php:31 msgid "Toggle embed original" msgstr "Basculer l'intégration de l'article original" -#: include/functions.php:1939 +#: include/functions.php:1985 msgid "Article selection" msgstr "Sélection d'article" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "Sélectionner tous les articles" -#: include/functions.php:1941 +#: include/functions.php:1987 msgid "Select unread" msgstr "Sélectionner les articles non-lus" -#: include/functions.php:1942 +#: include/functions.php:1988 msgid "Select starred" msgstr "Sélectionner les articles remarquables" -#: include/functions.php:1943 +#: include/functions.php:1989 msgid "Select published" msgstr "Sélectionner les articles publiés" -#: include/functions.php:1944 +#: include/functions.php:1990 msgid "Invert selection" msgstr "Inverser la sélection" -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "Tout désélectionner" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Flux" -#: include/functions.php:1947 +#: include/functions.php:1993 msgid "Refresh current feed" msgstr "Actualiser le flux actif" -#: include/functions.php:1948 +#: include/functions.php:1994 msgid "Un/hide read feeds" msgstr "Masquer/afficher les flux lus" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "S'abonner au flux" -#: include/functions.php:1950 -#: js/FeedTree.js:135 -#: js/PrefFeedTree.js:67 +#: include/functions.php:1996 js/FeedTree.js:135 js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Modifier le flux" -#: include/functions.php:1952 +#: include/functions.php:1998 msgid "Reverse headlines" msgstr "Inverser l'ordre des en-têtes" -#: include/functions.php:1953 +#: include/functions.php:1999 msgid "Debug feed update" msgstr "Déboguer les mises à jour" -#: include/functions.php:1954 -#: js/FeedTree.js:178 +#: include/functions.php:2000 js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Marquer tous les flux comme lus" -#: include/functions.php:1955 +#: include/functions.php:2001 msgid "Un/collapse current category" msgstr "Étendre/contracter la catégorie" -#: include/functions.php:1956 +#: include/functions.php:2002 msgid "Toggle combined mode" msgstr "Basculer le mode combiné" -#: include/functions.php:1957 +#: include/functions.php:2003 msgid "Toggle auto expand in combined mode" msgstr "Basculer le développement automatique en mode combiné" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "Aller à " -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "Nouveaux" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 js/tt-rss.js:456 js/tt-rss.js:615 msgid "Tag cloud" msgstr "Nuage de tags" -#: include/functions.php:1965 +#: include/functions.php:2011 msgid "Other" msgstr "Autre" -#: include/functions.php:1966 -#: classes/pref/labels.php:281 +#: include/functions.php:2012 classes/pref/labels.php:281 msgid "Create label" msgstr "Créer une étiquette" -#: include/functions.php:1967 -#: classes/pref/filters.php:654 +#: include/functions.php:2013 classes/pref/filters.php:654 msgid "Create filter" msgstr "Créer un filtre" -#: include/functions.php:1968 +#: include/functions.php:2014 msgid "Un/collapse sidebar" msgstr "Ouvrir/fermer la barre latérale" -#: include/functions.php:1969 +#: include/functions.php:2015 msgid "Show help dialog" msgstr "Afficher la fenêtre d'aide" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "Résultats de recherche: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "Cliquez pour lancer la lecture" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "Lecture" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "aucun tag" -#: include/functions.php:3136 -#: classes/feeds.php:689 +#: include/functions.php:3165 classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Modifier les tags pour cet article" -#: include/functions.php:3170 -#: classes/feeds.php:641 +#: include/functions.php:3197 classes/feeds.php:641 msgid "Originally from:" msgstr "Origine :" -#: include/functions.php:3183 -#: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: include/functions.php:3210 classes/feeds.php:654 classes/pref/feeds.php:572 msgid "Feed URL" msgstr "URL du flux" -#: include/functions.php:3215 -#: classes/dlg.php:37 -#: classes/dlg.php:60 -#: classes/dlg.php:93 -#: classes/dlg.php:159 -#: classes/dlg.php:190 -#: classes/dlg.php:217 -#: classes/dlg.php:250 -#: classes/dlg.php:262 -#: classes/backend.php:105 -#: classes/pref/users.php:99 -#: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: include/functions.php:3242 classes/dlg.php:37 classes/dlg.php:60 +#: classes/dlg.php:93 classes/dlg.php:159 classes/dlg.php:190 +#: classes/dlg.php:217 classes/dlg.php:250 classes/dlg.php:262 +#: classes/backend.php:105 classes/pref/users.php:99 +#: classes/pref/filters.php:147 classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Fermer cette fenêtre" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(modifier l'annotation)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "type inconnu" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "Fichier attaché" -#: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 -#: plugins/mobile/login_form.php:40 +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "Erreur LibXML %s ligne %d (colonne %d): %s" + +#: include/login_form.php:183 classes/handler/public.php:475 +#: classes/handler/public.php:752 plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Identifiant :" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Mot de passe :" -#: include/login_form.php:197 +#: include/login_form.php:199 msgid "I forgot my password" msgstr "J'ai oublié mon mot de passe" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Langue :" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Profil :" -#: include/login_form.php:213 -#: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: include/login_form.php:209 classes/handler/public.php:233 +#: classes/rpc.php:63 classes/pref/prefs.php:1036 msgid "Default profile" msgstr "Profil par défaut" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Minimiser l'usage du trafic" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" +"N'affiche pas les images dans les articles, allège les actualisation " +"automatiques." + #: include/login_form.php:229 msgid "Remember me" msgstr "Se souvenir de moi" -#: include/login_form.php:235 -#: classes/handler/public.php:499 +#: include/login_form.php:235 classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Se connecter" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "Echec de la validation de la session (adresse IP incorrecte)" @@ -914,192 +823,184 @@ msgstr "Article non trouvé." msgid "Tags for this article (separated by commas):" msgstr "Tags pour cet article (séparés par des virgules) :" -#: classes/article.php:204 -#: classes/pref/users.php:176 -#: classes/pref/labels.php:79 -#: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/article.php:204 classes/pref/users.php:176 +#: classes/pref/labels.php:79 classes/pref/filters.php:405 +#: classes/pref/prefs.php:982 classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 plugins/instances/init.php:245 msgid "Save" msgstr "Enregistrer" -#: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 -#: classes/feeds.php:1037 -#: classes/feeds.php:1089 -#: classes/feeds.php:1149 -#: classes/pref/users.php:178 -#: classes/pref/labels.php:81 -#: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/article.php:206 classes/handler/public.php:452 +#: classes/handler/public.php:486 classes/feeds.php:1037 +#: classes/feeds.php:1089 classes/feeds.php:1149 classes/pref/users.php:178 +#: classes/pref/labels.php:81 classes/pref/filters.php:408 +#: classes/pref/filters.php:803 classes/pref/filters.php:879 +#: classes/pref/filters.php:946 classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 plugins/mail/init.php:124 +#: plugins/note/init.php:53 plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Annuler" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "Partager avec Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "Titre :" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL :" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "Contenu :" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "Etiquettes :" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "Les articles partagés apparaîtront dans le flux Publiés." -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "Partager" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "Non connecté" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Identifiant ou mot de passe incorrect" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Déjà abonné à <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Abonné à <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Impossible de s'abonner à <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "Aucun flux trouvé dans <b>%s</b>." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 classes/handler/public.php:665 msgid "Multiple feed URLs found." msgstr "Plusieurs flux trouvé." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." -msgstr "Impossible de s'abonner à <b>%s</b>.<br>Impossible de télécharger l'URL du flux." +msgstr "" +"Impossible de s'abonner à <b>%s</b>.<br>Impossible de télécharger l'URL du " +"flux." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "S'abonner au flux sélectionné" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Modifier les options d'abonnement" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 msgid "Password recovery" msgstr "Récupération de mot de passe" -#: classes/handler/public.php:764 -msgid "You will need to provide valid account name and email. New password will be sent on your email address." -msgstr "Vous devrez fournir un nom et une adresse email valides. Le nouveau mot de passe sera envoyé à votre adresse email." +#: classes/handler/public.php:745 +msgid "" +"You will need to provide valid account name and email. New password will be " +"sent on your email address." +msgstr "" +"Vous devrez fournir un nom et une adresse email valides. Le nouveau mot de " +"passe sera envoyé à votre adresse email." -#: classes/handler/public.php:786 -#: classes/pref/users.php:360 +#: classes/handler/public.php:767 classes/pref/users.php:360 msgid "Reset password" msgstr "Réinitialiser le mot de passe" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "Des paramètres du formulaire manquent ou sont invalides." -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 msgid "Go back" msgstr "Revenir" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "Désolé, ce couple identifiant et mail n'a pas été trouvé." -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Vous n'avez pas les permissions nécessaires pour exécuter ce script." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Outil de mise à jour de la base de données" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Exécuter les mises à jour" #: classes/dlg.php:16 -msgid "If you have imported labels and/or filters, you might need to reload preferences to see your new data." -msgstr "Si vous avez importé des étiquettes et/ou des filtres, vous devrez peut-être recharger les préférences pour voir les nouvelles données." +msgid "" +"If you have imported labels and/or filters, you might need to reload " +"preferences to see your new data." +msgstr "" +"Si vous avez importé des étiquettes et/ou des filtres, vous devrez peut-être " +"recharger les préférences pour voir les nouvelles données." #: classes/dlg.php:48 msgid "Your Public OPML URL is:" msgstr "Votre URL OPML publique est :" -#: classes/dlg.php:57 -#: classes/dlg.php:214 +#: classes/dlg.php:57 classes/dlg.php:214 msgid "Generate new URL" msgstr "Générer une nouvelle URL" #: classes/dlg.php:71 -msgid "Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner." -msgstr "Le démon de mise à jour est activé dans la configuration mais le processus n'est pas lancé et les flux ne sont donc pas mis à jour. Veuillez le démarrer ou contacter l'administrateur." +msgid "" +"Update daemon is enabled in configuration, but daemon process is not " +"running, which prevents all feeds from updating. Please start the daemon " +"process or contact instance owner." +msgstr "" +"Le démon de mise à jour est activé dans la configuration mais le processus " +"n'est pas lancé et les flux ne sont donc pas mis à jour. Veuillez le " +"démarrer ou contacter l'administrateur." -#: classes/dlg.php:75 -#: classes/dlg.php:84 +#: classes/dlg.php:75 classes/dlg.php:84 msgid "Last update:" msgstr "Dernière mise à jour :" #: classes/dlg.php:80 -msgid "Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner." -msgstr "Le démon de mise à jour prend trop de temps pour effectuer une mise à jour de flux. Cela peut indiquer un problème comme un crash ou un suspension du processus. Veuillez vérifier son état ou bien contacter l'administrateur." +msgid "" +"Update daemon is taking too long to perform a feed update. This could " +"indicate a problem like crash or a hang. Please check the daemon process or " +"contact instance owner." +msgstr "" +"Le démon de mise à jour prend trop de temps pour effectuer une mise à jour " +"de flux. Cela peut indiquer un problème comme un crash ou un suspension du " +"processus. Veuillez vérifier son état ou bien contacter l'administrateur." #: classes/dlg.php:166 msgid "Match:" @@ -1125,18 +1026,19 @@ msgstr "Afficher les entrées" msgid "You can view this feed as RSS using the following URL:" msgstr "Vous pouvez consulter ce flux comme RSS en utilisant l'URL suivante :" -#: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: classes/dlg.php:233 plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Une nouvelle version de Tiny Tiny RSS est disponible (%s)." #: classes/dlg.php:241 -msgid "You can update using built-in updater in the Preferences or by using update.php" -msgstr "Vous pouvez mettre à jour depuis la Configuration ou en utilisant update.php" +msgid "" +"You can update using built-in updater in the Preferences or by using update." +"php" +msgstr "" +"Vous pouvez mettre à jour depuis la Configuration ou en utilisant update.php" -#: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: classes/dlg.php:245 plugins/updater/init.php:335 msgid "See the release notes" msgstr "Voir les notes de publication" @@ -1146,116 +1048,102 @@ msgstr "Télécharger" #: classes/dlg.php:255 msgid "Error receiving version information or no new version available." -msgstr "Erreur de lecture de l'information de version ou aucune nouvelle version disponible." +msgstr "" +"Erreur de lecture de l'information de version ou aucune nouvelle version " +"disponible." -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "Visiter le site web" +#: classes/feeds.php:56 +#, php-format +msgid "Last updated: %s" +msgstr "Dernière mise à jour : %s" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Voir comme flux RSS" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 classes/feeds.php:128 classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "Voir comme RSS" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Sélectionner :" -#: classes/feeds.php:92 -#: classes/pref/users.php:345 -#: classes/pref/labels.php:275 -#: classes/pref/filters.php:282 -#: classes/pref/filters.php:330 -#: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/feeds.php:84 classes/pref/users.php:345 classes/pref/labels.php:275 +#: classes/pref/filters.php:282 classes/pref/filters.php:330 +#: classes/pref/filters.php:648 classes/pref/filters.php:736 +#: classes/pref/filters.php:763 classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 plugins/instances/init.php:287 msgid "All" msgstr "Tout" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Inverse" -#: classes/feeds.php:95 -#: classes/pref/users.php:347 -#: classes/pref/labels.php:277 -#: classes/pref/filters.php:284 -#: classes/pref/filters.php:332 -#: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/feeds.php:87 classes/pref/users.php:347 classes/pref/labels.php:277 +#: classes/pref/filters.php:284 classes/pref/filters.php:332 +#: classes/pref/filters.php:650 classes/pref/filters.php:738 +#: classes/pref/filters.php:765 classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 plugins/instances/init.php:289 msgid "None" msgstr "Aucun" -#: classes/feeds.php:101 +#: classes/feeds.php:93 msgid "More..." msgstr "Plus..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Sélectionner :" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Sélection :" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "Changer le score" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "Archive" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "Revenir" -#: classes/feeds.php:118 -#: classes/pref/filters.php:291 -#: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/feeds.php:110 classes/pref/filters.php:291 +#: classes/pref/filters.php:339 classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "Supprimer" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 classes/feeds.php:120 plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "Transférer par email" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Flux :" -#: classes/feeds.php:205 -#: classes/feeds.php:837 +#: classes/feeds.php:197 classes/feeds.php:837 msgid "Feed not found." msgstr "Flux non trouvé." -#: classes/feeds.php:387 +#: classes/feeds.php:254 +msgid "Never" +msgstr "Jamais" + +#: classes/feeds.php:360 #, php-format msgid "Imported at %s" msgstr "Importé à %s" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "marquer comme lu" @@ -1276,37 +1164,39 @@ msgid "No starred articles found to display." msgstr "Aucun article remarquable à afficher." #: classes/feeds.php:748 -msgid "No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter." -msgstr "Aucun article à afficher. Vous pouvez assigner des étiquettes aux articles manuellement (voir les actions du menu ci-dessus) ou utiliser un filtre." +msgid "" +"No articles found to display. You can assign articles to labels manually " +"from article header context menu (applies to all selected articles) or use a " +"filter." +msgstr "" +"Aucun article à afficher. Vous pouvez assigner des étiquettes aux articles " +"manuellement (voir les actions du menu ci-dessus) ou utiliser un filtre." #: classes/feeds.php:750 msgid "No articles found to display." msgstr "Aucun article à afficher." -#: classes/feeds.php:765 -#: classes/feeds.php:932 +#: classes/feeds.php:765 classes/feeds.php:932 #, php-format msgid "Feeds last updated at %s" msgstr "Flux mis à jour à %s" -#: classes/feeds.php:775 -#: classes/feeds.php:942 +#: classes/feeds.php:775 classes/feeds.php:942 msgid "Some feeds have update errors (click for details)" -msgstr "Des erreurs sont survenues pendant la mise à jour de certains flux (cliquer ici pour les détails)" +msgstr "" +"Des erreurs sont survenues pendant la mise à jour de certains flux (cliquer " +"ici pour les détails)" #: classes/feeds.php:922 msgid "No feed selected." msgstr "Aucun flux sélectionné." -#: classes/feeds.php:975 -#: classes/feeds.php:983 +#: classes/feeds.php:975 classes/feeds.php:983 msgid "Feed or site URL" msgstr "URL du flux" -#: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/feeds.php:989 classes/pref/feeds.php:592 classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "Placer dans la catégorie :" @@ -1314,26 +1204,20 @@ msgstr "Placer dans la catégorie :" msgid "Available feeds" msgstr "Flux disponibles" -#: classes/feeds.php:1009 -#: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/feeds.php:1009 classes/pref/users.php:139 +#: classes/pref/feeds.php:622 classes/pref/feeds.php:860 msgid "Authentication" msgstr "Identification" -#: classes/feeds.php:1013 -#: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/feeds.php:1013 classes/pref/users.php:402 +#: classes/pref/feeds.php:628 classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Se connecter" -#: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/feeds.php:1016 classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Mot de passe" @@ -1341,9 +1225,7 @@ msgstr "Mot de passe" msgid "This feed requires authentication." msgstr "Ce flux nécessite une identification." -#: classes/feeds.php:1031 -#: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/feeds.php:1031 classes/feeds.php:1087 classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "S'abonner" @@ -1351,12 +1233,8 @@ msgstr "S'abonner" msgid "More feeds" msgstr "D'autres flux" -#: classes/feeds.php:1057 -#: classes/feeds.php:1148 -#: classes/pref/users.php:332 -#: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/feeds.php:1057 classes/feeds.php:1148 classes/pref/users.php:332 +#: classes/pref/filters.php:641 classes/pref/feeds.php:1316 js/tt-rss.js:173 msgid "Search" msgstr "Rechercher" @@ -1372,13 +1250,10 @@ msgstr "Archive du flux" msgid "limit:" msgstr "limite :" -#: classes/feeds.php:1088 -#: classes/pref/users.php:358 -#: classes/pref/labels.php:284 -#: classes/pref/filters.php:398 -#: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/feeds.php:1088 classes/pref/users.php:358 +#: classes/pref/labels.php:284 classes/pref/filters.php:398 +#: classes/pref/filters.php:667 classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Supprimer" @@ -1396,7 +1271,9 @@ msgstr "Ce flux" #: classes/backend.php:33 msgid "Other interface tips are available in the Tiny Tiny RSS wiki." -msgstr "D'autres astuces sur l'interface sont disponibles sur le wiki de Tiny Tiny RSS." +msgstr "" +"D'autres astuces sur l'interface sont disponibles sur le wiki de Tiny Tiny " +"RSS." #: classes/backend.php:38 msgid "Keyboard Shortcuts" @@ -1414,8 +1291,7 @@ msgstr "Ctrl" msgid "Help topic not found." msgstr "Sujet non trouvé dans l'aide." -#: classes/opml.php:28 -#: classes/opml.php:33 +#: classes/opml.php:28 classes/opml.php:33 msgid "OPML Utility" msgstr "Outil OPML" @@ -1461,17 +1337,32 @@ msgstr "Créer un filtre..." msgid "Processing category: %s" msgstr "Placer dans la catégorie : %s" -#: classes/opml.php:468 +#: classes/opml.php:465 plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "Échec de l'envoi, code d'erreur %d" + +#: classes/opml.php:479 plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +msgid "Unable to move uploaded file." +msgstr "Impossible de déplacer le fichier envoyé." + +#: classes/opml.php:483 plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Erreur : veuillez envoyer un document OPML." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +msgid "Error: unable to find moved OPML file." +msgstr "Erreur : impossible de trouver le fichier OPML déplacé." + +#: classes/opml.php:499 plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Erreur lors de l'analyse du document." -#: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/users.php:6 classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "Vous n'avez pas les permissions nécessaires pour ouvrir cet onglet." @@ -1479,8 +1370,7 @@ msgstr "Vous n'avez pas les permissions nécessaires pour ouvrir cet onglet." msgid "User not found" msgstr "Utilisateur non trouvé" -#: classes/pref/users.php:53 -#: classes/pref/users.php:404 +#: classes/pref/users.php:53 classes/pref/users.php:404 msgid "Registered" msgstr "Inscrit" @@ -1504,9 +1394,8 @@ msgstr "Permissions : " msgid "Change password to" msgstr "Nouveau mot de passe" -#: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/users.php:161 classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Options" @@ -1543,18 +1432,12 @@ msgstr "Envoi du mot de passe de <b>%s</b> à <b>%s</b>" msgid "[tt-rss] Password change notification" msgstr "[tt-rss] Notification de changement de mot passe" -#: classes/pref/users.php:342 -#: classes/pref/labels.php:272 -#: classes/pref/filters.php:279 -#: classes/pref/filters.php:327 -#: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/users.php:342 classes/pref/labels.php:272 +#: classes/pref/filters.php:279 classes/pref/filters.php:327 +#: classes/pref/filters.php:645 classes/pref/filters.php:733 +#: classes/pref/filters.php:760 classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 plugins/instances/init.php:284 msgid "Select" msgstr "Sélectionner" @@ -1566,9 +1449,8 @@ msgstr "Créer l'utilisateur" msgid "Details" msgstr "Détails" -#: classes/pref/users.php:356 -#: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: classes/pref/users.php:356 classes/pref/filters.php:660 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Modifier" @@ -1580,8 +1462,7 @@ msgstr "Permissions" msgid "Last login" msgstr "Dernière connexion" -#: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: classes/pref/users.php:426 plugins/instances/init.php:334 msgid "Click to edit" msgstr "Cliquer pour modifier" @@ -1593,9 +1474,8 @@ msgstr "Aucun utilisateur défini." msgid "No matching users found." msgstr "Aucun utilisateur correspondant trouvé." -#: classes/pref/labels.php:22 -#: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/labels.php:22 classes/pref/filters.php:268 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Légende" @@ -1629,44 +1509,40 @@ msgid "No recent articles matching this filter have been found." msgstr "Aucun article récent correspondant à ce filtre." #: classes/pref/filters.php:137 -msgid "Complex expressions might not give results while testing due to issues with database server regexp implementation." -msgstr "Les expressions complexes risquent de ne pas avoir de résulats dans les tests à cause de problèmes avec le serveur." +msgid "" +"Complex expressions might not give results while testing due to issues with " +"database server regexp implementation." +msgstr "" +"Les expressions complexes risquent de ne pas avoir de résulats dans les " +"tests à cause de problèmes avec le serveur." -#: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:274 classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Correspondance" -#: classes/pref/filters.php:288 -#: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:288 classes/pref/filters.php:336 +#: classes/pref/filters.php:742 classes/pref/filters.php:769 msgid "Add" msgstr "Ajouter" -#: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:322 classes/pref/filters.php:755 msgid "Apply actions" msgstr "Actions éffectuées" -#: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:372 classes/pref/filters.php:784 msgid "Enabled" msgstr "Activé" -#: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:381 classes/pref/filters.php:787 msgid "Match any rule" msgstr "Au moins une correspondance" -#: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:390 classes/pref/filters.php:790 msgid "Inverse matching" msgstr "Correspondance inverse" -#: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:402 classes/pref/filters.php:797 msgid "Test" msgstr "Test" @@ -1683,62 +1559,57 @@ msgstr "%s sur %s dans %s %s" msgid "Combine" msgstr "Combiner" -#: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/filters.php:663 classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "Réinitialiser le critère de tri" -#: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/filters.php:671 classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Recalculer le score des articles" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Créer" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "Inverser le résultat de l'expression rationnelle" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "sur le champ" -#: classes/pref/filters.php:864 -#: js/PrefFilterTree.js:45 +#: classes/pref/filters.php:863 js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "dans" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" msgstr "Enregistrer" -#: classes/pref/filters.php:877 -#: js/functions.js:1013 +#: classes/pref/filters.php:876 js/functions.js:1013 msgid "Add rule" msgstr "Ajouter une règle" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Exécuter l'action" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "avec les paramètres :" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" msgstr "Enregistrer" -#: classes/pref/filters.php:944 -#: js/functions.js:1039 +#: classes/pref/filters.php:943 js/functions.js:1039 msgid "Add action" msgstr "Ajouter une action" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 msgid "[No caption]" msgstr "[Pas de titre]" @@ -1771,16 +1642,24 @@ msgid "Blacklisted tags" msgstr "Tags exclus" #: classes/pref/prefs.php:27 -msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)." -msgstr "Lors de l'auto-détection des tags dans les articles, ces tags ne seront pas utilisés (séparés par des virgules)." +msgid "" +"When auto-detecting tags in articles these tags will not be applied (comma-" +"separated list)." +msgstr "" +"Lors de l'auto-détection des tags dans les articles, ces tags ne seront pas " +"utilisés (séparés par des virgules)." #: classes/pref/prefs.php:28 msgid "Automatically mark articles as read" msgstr "Automatiquement marquer les articles comme lus" #: classes/pref/prefs.php:28 -msgid "This option enables marking articles as read automatically while you scroll article list." -msgstr "Cette option permet de marquer automatiquement les articles comme lus lorsque vous naviguez dans la liste d'articles." +msgid "" +"This option enables marking articles as read automatically while you scroll " +"article list." +msgstr "" +"Cette option permet de marquer automatiquement les articles comme lus " +"lorsque vous naviguez dans la liste d'articles." #: classes/pref/prefs.php:29 msgid "Automatically expand articles in combined mode" @@ -1791,8 +1670,12 @@ msgid "Combined feed display" msgstr "Affichage combiné des flux" #: classes/pref/prefs.php:30 -msgid "Display expanded list of feed articles, instead of separate displays for headlines and article content" -msgstr "Affiche les articles sous la forme d'une liste étendue, au lieu de deux listes séparées (une pour les en-têtes et une pour le contenu)" +msgid "" +"Display expanded list of feed articles, instead of separate displays for " +"headlines and article content" +msgstr "" +"Affiche les articles sous la forme d'une liste étendue, au lieu de deux " +"listes séparées (une pour les en-têtes et une pour le contenu)" #: classes/pref/prefs.php:31 msgid "Confirm marking feed as read" @@ -1803,13 +1686,16 @@ msgid "Amount of articles to display at once" msgstr "Nombre d'articles à afficher" #: classes/pref/prefs.php:33 -#, fuzzy msgid "Default feed update interval" msgstr "Fréquence de mise à jour par défaut" #: classes/pref/prefs.php:33 -msgid "Shortest interval at which a feed will be checked for updates regardless of update method" +msgid "" +"Shortest interval at which a feed will be checked for updates regardless of " +"update method" msgstr "" +"Intervalle minimum de temps entre deux mises à jour d'un flux, quelle que " +"soit la méthode de mise à jour" #: classes/pref/prefs.php:34 msgid "Mark articles in e-mail digest as read" @@ -1820,8 +1706,12 @@ msgid "Enable e-mail digest" msgstr "Activer la synthèse quotidienne par courrier électronique" #: classes/pref/prefs.php:35 -msgid "This option enables sending daily digest of new (and unread) headlines on your configured e-mail address" -msgstr "Cette option active l'envoi d'une synthèse quotidienne (digest) des en-têtes nouveaux et non lus à l'adresse électronique donnée" +msgid "" +"This option enables sending daily digest of new (and unread) headlines on " +"your configured e-mail address" +msgstr "" +"Cette option active l'envoi d'une synthèse quotidienne (digest) des en-têtes " +"nouveaux et non lus à l'adresse électronique donnée" #: classes/pref/prefs.php:36 msgid "Try to send digests around specified time" @@ -1868,19 +1758,21 @@ msgid "On catchup show next feed" msgstr "Sauter automatiquement au flux suivant" #: classes/pref/prefs.php:44 -msgid "Automatically open next feed with unread articles after marking one as read" +msgid "" +"Automatically open next feed with unread articles after marking one as read" msgstr "Sauter automatiquement au flux suivant après en marquer un comme lu" #: classes/pref/prefs.php:45 msgid "Purge articles after this number of days (0 - disables)" -msgstr "Purger les articles plus vieux que le nombre de jours donné (0 pour ne jamais purger)" +msgstr "" +"Purger les articles plus vieux que le nombre de jours donné (0 pour ne " +"jamais purger)" #: classes/pref/prefs.php:46 msgid "Purge unread articles" msgstr "Purger les articles non lus" -#: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: classes/pref/prefs.php:47 plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Inverser l'order des en-têtes (les plus anciens en premier)" @@ -1898,7 +1790,9 @@ msgstr "Trier les en-têtes par date de flux" #: classes/pref/prefs.php:50 msgid "Use feed-specified date to sort headlines instead of local import date." -msgstr "Utiliser les dates spécifiées dans le flux pour trier les en-têtes au lieu des dates importées localement." +msgstr "" +"Utiliser les dates spécifiées dans le flux pour trier les en-têtes au lieu " +"des dates importées localement." #: classes/pref/prefs.php:51 msgid "Login with an SSL certificate" @@ -1918,10 +1812,11 @@ msgstr "Éliminer les tags non sûrs des articles" #: classes/pref/prefs.php:53 msgid "Strip all but most common HTML tags when reading articles." -msgstr "Élimine toutes les balises HTML sauf les plus courantes lors de la lecture des articles." +msgstr "" +"Élimine toutes les balises HTML sauf les plus courantes lors de la lecture " +"des articles." -#: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: classes/pref/prefs.php:54 js/prefs.js:1734 msgid "Customize stylesheet" msgstr "Personnaliser la feuille de style" @@ -1930,8 +1825,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "Personnaliser les feuilles de style CSS" #: classes/pref/prefs.php:55 -msgid "User timezone" -msgstr "Fuseau horaire de l'utilisateur" +msgid "Time zone" +msgstr "Fuseau horaire" #: classes/pref/prefs.php:56 msgid "Group headlines in virtual feeds" @@ -1942,22 +1837,26 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "Les flux spéciaux, tags et catégories sont regroupés par flux sources." #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Sélectionner un thème" +msgid "Language" +msgstr "Langue" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "Thème" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "Sélectionnez un des thèmes CSS disponibles" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "L'ancien mot de passe ne peut pas être vide." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "Le nouveau mot de passe ne peut pas être vide." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Les mots de passe saisie ne sont pas identiques." @@ -1965,222 +1864,248 @@ msgstr "Les mots de passe saisie ne sont pas identiques." msgid "Function not supported by authentication module." msgstr "Fonction non supportée par le module d'identification." -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "La configuration a été enregistrée." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Option inconnue : %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "Vos données personnelles ont été sauvegardées." -#: classes/pref/prefs.php:184 -#, fuzzy +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." -msgstr "Certaines options ne ne disponibles que dans le profil par défaut." +msgstr "Vos préférences sont maintenant les valeurs par défaut." -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "Données personnelles / Authentification" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Données personelles" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "Nom complet" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "Adresse électronique" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Permissions" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "Enregistrer les données" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "Votre mot de passe est celui par défaut, veuillez le modifier." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." -msgstr "Changer votre mot de passe actuel désactivera les mots de passe à usage unique." +msgstr "" +"Changer votre mot de passe actuel désactivera les mots de passe à usage " +"unique." -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Ancien mot de passe" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Nouveau mot de passe" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Confirmation du mot de passe" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Modifier le mot de passe" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "Mots de passe à usage unique / Identificateur" -#: classes/pref/prefs.php:338 -msgid "One time passwords are currently enabled. Enter your current password below to disable." -msgstr "Les mots de passe à usage unique sont actuellement activés. Entrez votre mot de passe actuel ci-dessous pour les désactiver." +#: classes/pref/prefs.php:327 +msgid "" +"One time passwords are currently enabled. Enter your current password below " +"to disable." +msgstr "" +"Les mots de passe à usage unique sont actuellement activés. Entrez votre mot " +"de passe actuel ci-dessous pour les désactiver." -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 classes/pref/prefs.php:403 msgid "Enter your password" msgstr "Entrez votre mot de passe" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" msgstr "Désactiver les mots de passe à usage unique" -#: classes/pref/prefs.php:380 -msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." -msgstr "Vous aurez besoin d'un Identificateur compatible pour utiliser ceci. Changer votre mot de passe le désactivera automatiquement." +#: classes/pref/prefs.php:369 +msgid "" +"You will need a compatible Authenticator to use this. Changing your password " +"would automatically disable OTP." +msgstr "" +"Vous aurez besoin d'un Identificateur compatible pour utiliser ceci. Changer " +"votre mot de passe le désactivera automatiquement." -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "Scanner le code suivant avec l'application identificateur :" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "J'ai scanné le code et je veux activer les mots de passe à usage unique" +#: classes/pref/prefs.php:408 +msgid "Enter the generated one time password" +msgstr "Veuillez saisir le mot de passe à usage unique" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" msgstr "Activer les mots de passe à usage unique" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" +"Les fonctions GD de PHP sont nécessaires pour utiliser les mots de passe à " +"usage unique." + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "Certaines options ne ne disponibles que dans le profil par défaut." -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "Personnaliser" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "S'inscrire" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "Effacer" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "Heure du serveur : %s (GMT)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Enregistrer la configuration" -#: classes/pref/prefs.php:694 -#, fuzzy +#: classes/pref/prefs.php:675 msgid "Save and exit preferences" -msgstr "Quitter la configuration" +msgstr "Sauvegarder et quitter la configuration" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "Gérer les profils" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Revenir aux valeurs par défaut" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 classes/pref/prefs.php:708 msgid "Plugins" msgstr "Plugins" -#: classes/pref/prefs.php:730 -msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." -msgstr "Vous devrez relancer Tiny Tiny RSS pour que les changements apportés aux plugins prennent effet." +#: classes/pref/prefs.php:710 +msgid "" +"You will need to reload Tiny Tiny RSS for plugin changes to take effect." +msgstr "" +"Vous devrez relancer Tiny Tiny RSS pour que les changements apportés aux " +"plugins prennent effet." -#: classes/pref/prefs.php:732 -msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." -msgstr "Téléchargez plus de plugins sur <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">le forum</a> ou <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">le wiki</a> de Tiny Tiny RSS." +#: classes/pref/prefs.php:712 +msgid "" +"Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank" +"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a " +"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins" +"\">wiki</a>." +msgstr "" +"Téléchargez plus de plugins sur <a class=\"visibleLink\" target=\"_blank\" " +"href=\"http://tt-rss.org/forum/viewforum.php?f=22\">le forum</a> ou <a " +"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins" +"\">le wiki</a> de Tiny Tiny RSS." -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "Plugins systèmes" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 classes/pref/prefs.php:796 msgid "Plugin" msgstr "Plugin" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 classes/pref/prefs.php:797 msgid "Description" msgstr "Description" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 classes/pref/prefs.php:798 msgid "Version" msgstr "Version" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 classes/pref/prefs.php:799 msgid "Author" msgstr "Auteur" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 classes/pref/prefs.php:831 msgid "more info" msgstr "plus d'info" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 classes/pref/prefs.php:840 msgid "Clear data" msgstr "Purger les données" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "Plugins utilisateur" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 msgid "Enable selected plugins" msgstr "Activer les plugins sélectionnés" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +msgid "Incorrect one time password" +msgstr "Mot de passe incorrect" + +#: classes/pref/prefs.php:925 classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "Mot de passe incorrect" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format -msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." -msgstr "Vous pouvez redéfinir les couleurs, les polices et la mise en page du thème actuellement sélectionné à l'aide de vos propres instructions CSS ici. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Ce fichier</a> peut être utilisé comme base de départ." +msgid "" +"You can override colors, fonts and layout of your currently selected theme " +"with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink" +"\" href=\"%s\">This file</a> can be used as a baseline." +msgstr "" +"Vous pouvez redéfinir les couleurs, les polices et la mise en page du thème " +"actuellement sélectionné à l'aide de vos propres instructions CSS ici. <a " +"target=\"_blank\" class=\"visibleLink\" href=\"%s\">Ce fichier</a> peut être " +"utilisé comme base de départ." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Création d'un profil" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 classes/pref/prefs.php:1060 msgid "(active)" msgstr "(actif)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "Supprimer les profils sélectionnés" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Activer le profil" @@ -2188,268 +2113,318 @@ msgstr "Activer le profil" msgid "Check to enable field" msgstr "Cocher pour activer le champ" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "Titre du flux" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 classes/pref/feeds.php:835 msgid "Update" msgstr "Mettre à jour" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Purge des articles :" -#: classes/pref/feeds.php:606 -msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." -msgstr "<b>Astuce :</b> vous devez renseigner vos informations d'identification si le flux nécessite une authentification, sauf pour les flux Twitter." +#: classes/pref/feeds.php:645 +msgid "" +"<b>Hint:</b> you need to fill in your login information if your feed " +"requires authentication, except for Twitter feeds." +msgstr "" +"<b>Astuce :</b> vous devez renseigner vos informations d'identification si " +"le flux nécessite une authentification, sauf pour les flux Twitter." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "Masquer dans la liste des flux populaires" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "Inclure dans la synthèse quotidienne par courrier électronique" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Toujours afficher les images jointes" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "Ne pas intégrer les images" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Enregistrer localement les images" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "Marquer les article mis à jour comme non lus" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Icône" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Remplacer" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "Réinscription aux mises à jour en push" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." -msgstr "Réinitialiser l'état de l'inscription PubSubHubbub pour les flux en mise à jour push." +msgstr "" +"Réinitialiser l'état de l'inscription PubSubHubbub pour les flux en mise à " +"jour push." -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 classes/pref/feeds.php:1222 msgid "All done." msgstr "Tout est terminé." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Flux avec des erreurs" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "Flux inactifs" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Modifier les flux sélectionnés" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 js/prefs.js:1779 msgid "Batch subscribe" msgstr "Abonnement par lots" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "Catégories" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "Ajouter une catégorie" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "Supprimer les flux sélectionnés" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "Masquer/afficher les catégories vides" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "Autres actions..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Purger manuellement" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "Purger les données de flux" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 -msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." -msgstr "Avec OPML, vous pouvez exporter et importer vos flux, filtrer, étiquettes et réglages de Tiny Tiny RSS." +#: classes/pref/feeds.php:1427 +msgid "" +"Using OPML you can export and import your feeds, filters, labels and Tiny " +"Tiny RSS settings." +msgstr "" +"Avec OPML, vous pouvez exporter et importer vos flux, filtrer, étiquettes et " +"réglages de Tiny Tiny RSS." -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." -msgstr "Seul le profil de réglages principal peut être migré en utilisant OPML." +msgstr "" +"Seul le profil de réglages principal peut être migré en utilisant OPML." -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "Importer mon OPML" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "Nom du fichier :" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "Inclure les paramètres" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "Exporter en OPML" -#: classes/pref/feeds.php:1399 -msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." -msgstr "Votre fichier OPML peut être publié et toute personne qui connaît l'adresse indiquée ci-dessous peut s'y abonner." +#: classes/pref/feeds.php:1456 +msgid "" +"Your OPML can be published publicly and can be subscribed by anyone who " +"knows the URL below." +msgstr "" +"Votre fichier OPML peut être publié et toute personne qui connaît l'adresse " +"indiquée ci-dessous peut s'y abonner." -#: classes/pref/feeds.php:1401 -msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." -msgstr "Les OPML publiés n'incluent pas vos réglages de Tiny Tiny RSS, les flux qui nécessitent une authentification, ou les flux cachés des Flux Populaires." +#: classes/pref/feeds.php:1458 +msgid "" +"Published OPML does not include your Tiny Tiny RSS settings, feeds that " +"require authentication or feeds hidden from Popular feeds." +msgstr "" +"Les OPML publiés n'incluent pas vos réglages de Tiny Tiny RSS, les flux qui " +"nécessitent une authentification, ou les flux cachés des Flux Populaires." -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "URL OPML publique" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "Afficher l'URL de l'OPML public" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Intégration à Firefox" -#: classes/pref/feeds.php:1416 -msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." -msgstr "Ce site Tiny Tiny RSS peut être utilisé comme lecteur de flux dans Firefox en cliquant sur le lien ci-dessous." +#: classes/pref/feeds.php:1472 +msgid "" +"This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the " +"link below." +msgstr "" +"Ce site Tiny Tiny RSS peut être utilisé comme lecteur de flux dans Firefox " +"en cliquant sur le lien ci-dessous." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Cliquer ici pour enregistrer ce site comme lecteur de flux." -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" msgstr "Articles publiés et partagés / Flux générés" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "Articles publiés et flux générés" -#: classes/pref/feeds.php:1435 -msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." -msgstr "Les articles publiés sont exportés comme un flux RSS public et toute personne qui connaît l'adresse indiquée ci-dessous peut s'y abonner." +#: classes/pref/feeds.php:1491 +msgid "" +"Published articles are exported as a public RSS feed and can be subscribed " +"by anyone who knows the URL specified below." +msgstr "" +"Les articles publiés sont exportés comme un flux RSS public et toute " +"personne qui connaît l'adresse indiquée ci-dessous peut s'y abonner." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "Afficher l'URL" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "Supprimer toutes les URL générées" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "Articles publiés par URL" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "Vous pouvez désactiver tous les articles partagés par URL unique ici." -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "Désactiver le partage pour tous les articles" -#: classes/pref/feeds.php:1529 -msgid "These feeds have not been updated with new content for 3 months (oldest first):" -msgstr "Les flux suivants n'ont pas été mis à jour depuis 3 mois (par âge décroissant) :" +#: classes/pref/feeds.php:1582 +msgid "" +"These feeds have not been updated with new content for 3 months (oldest " +"first):" +msgstr "" +"Les flux suivants n'ont pas été mis à jour depuis 3 mois (par âge " +"décroissant) :" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "Cliquez pour modifier le flux" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "Se désabonner des flux sélectionnés" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Ces flux n'ont pas été mis à jour à cause d'erreurs :" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" -msgstr "Ajoutez un flux RSS valide par ligne (aucune détection de flux n'est réalisée)" +msgstr "" +"Ajoutez un flux RSS valide par ligne (aucune détection de flux n'est " +"réalisée)" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "Flux auxquels s'abonner, un par ligne" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "Les flux requièrent une identification." -#: plugins/digest/digest_body.php:59 -msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." -msgstr "Votre navigateur ne gère pas JavaScript, alors que c'est nécessaire pour le bon fonctionnement de ce logiciel. Veuillez modifier la configuration de votre navigateur." +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "Journal des erreurs" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "Actualiser" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "Erreur" + +#: classes/pref/system.php:42 +msgid "Filename" +msgstr "Nom du fichier" -#: plugins/digest/digest_body.php:74 +#: classes/pref/system.php:43 +msgid "Message" +msgstr "Message" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Date" + +#: plugins/digest/digest_body.php:57 +msgid "" +"Your browser doesn't support Javascript, which is required for this " +"application to function properly. Please check your browser settings." +msgstr "" +"Votre navigateur ne gère pas JavaScript, alors que c'est nécessaire pour le " +"bon fonctionnement de ce logiciel. Veuillez modifier la configuration de " +"votre navigateur." + +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Bonjour," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "Version ordinateur" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "Fermer l'article" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "Non convenable au travail (cliquer pour basculer)" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "Plugin NSFW" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" -msgstr "Tags à considérer non convenables au travail (séparés par des virgules)" +msgstr "" +"Tags à considérer non convenables au travail (séparés par des virgules)" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 msgid "Configuration saved." msgstr "La configuration a été enregistrée." @@ -2465,17 +2440,16 @@ msgstr "Le mot de passe a été modifié." msgid "Old password is incorrect." msgstr "L'ancien mot de passe n'est pas correct." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 plugins/mobile/prefs.php:25 msgid "Home" msgstr "Accueil" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "Rien n'a été trouvé (cliquez pour recharger le flux)." @@ -2483,406 +2457,422 @@ msgstr "Rien n'a été trouvé (cliquez pour recharger le flux)." msgid "Open regular version" msgstr "Version ordinateur" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "Utiliser les catégories de flux" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "ON" msgstr "Activé" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "OFF" msgstr "Désactivé" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "Parcourir les catégories comme des dossiers" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "Afficher les images dans les articles" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "Cacher les articles et flux lus" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "Trier les flux par nombre d'articles non lus" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[Transféré]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 plugins/mail/init.php:64 msgid "Multiple articles" msgstr "Articles multiples" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "Cliquez sur le lien suivant pour ouvrir votre client de messagerie:" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 msgid "Forward selected article(s) by email." msgstr "Transférer le ou les article(s) par mail." -#: plugins/mailto/init.php:81 -msgid "You should be able to edit the message before sending in your mail client." -msgstr "Vous devriez pouvoir modifier le message avant son envoi dans votre client de messagerie." +#: plugins/mailto/init.php:78 +msgid "" +"You should be able to edit the message before sending in your mail client." +msgstr "" +"Vous devriez pouvoir modifier le message avant son envoi dans votre client " +"de messagerie." -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 msgid "Close this dialog" msgstr "Fermer ce dialogue" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "Bookmarklets" -#: plugins/bookmarklets/init.php:24 -msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." -msgstr "Glissez le lien ci-dessous dans la barre d'outil de votre navigateur, ouvrez le flux qui vous intéresse et cliquez sur le lien pour vous abonner à ce flux." +#: plugins/bookmarklets/init.php:22 +msgid "" +"Drag the link below to your browser toolbar, open the feed you're interested " +"in in your browser and click on the link to subscribe to it." +msgstr "" +"Glissez le lien ci-dessous dans la barre d'outil de votre navigateur, ouvrez " +"le flux qui vous intéresse et cliquez sur le lien pour vous abonner à ce " +"flux." -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "S'abonner à %s dans Tiny Tiny RSS ?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "S'abonner dans Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "Utilisez ce bookmarklet pour publier des pages avec Tiny Tiny RSS" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "Importer et exporter" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "Archive" -#: plugins/import_export/init.php:65 -msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." -msgstr "Vous pouvez exporter et importer vos articles remarquables et archivés afin de les sauvegarder ou pour les transférer entre deux instances de tt-rss." +#: plugins/import_export/init.php:62 +msgid "" +"You can export and import your Starred and Archived articles for safekeeping " +"or when migrating between tt-rss instances." +msgstr "" +"Vous pouvez exporter et importer vos articles remarquables et archivés afin " +"de les sauvegarder ou pour les transférer entre deux instances de tt-rss." -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "Exporter mes données" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importer" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "Import impossible : version du schéma incorrecte." -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "Import impossible : format de document non reconnu." -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "Fini : " -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "%d article traité, " msgstr[1] "%d articles traités, " -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "%d importé, " msgstr[1] "%d importés, " -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "%d flux créé." msgstr[1] "%d flux créés." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "Impossible de charger le document XML." -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "Préparer les données" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "Envoi du fichier impossible. Vous devriez peut-être modifier la valeur de upload_max_filesize dans PHP.ini (valeur courante : %s)" +#: plugins/import_export/init.php:444 plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." +msgstr "Aucun fichier envoyé." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "De :" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "A :" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Sujet :" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "Envoyer le mail" -#: plugins/note/init.php:28 -#: plugins/note/note.js:11 +#: plugins/note/init.php:26 plugins/note/note.js:11 msgid "Edit article note" msgstr "Modifier l'annotation de l'article" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "Panneau d'exemple" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "Valeur d'exemple" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "Appliquer la valeur" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "Aucun fichier envoyé." - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "Terminé. %d articles sur %d importés." -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "Le format du document n'est pas correct." -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "Importer les articles marqués ou partagés de Google Reader" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." -msgstr "Collez votre fichier starred.json ou shared.json dans le formulaire ci-dessous." +msgstr "" +"Collez votre fichier starred.json ou shared.json dans le formulaire ci-" +"dessous." -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "Importer mes éléments partagés" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "Instances liées" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 plugins/instances/init.php:395 msgid "Instance" msgstr "Instance" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "URL de l'instance" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 plugins/instances/init.php:414 msgid "Access key:" msgstr "Clef d'accès :" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "Clef d'accès" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "Utilisez une clef d'accès pour les deux instances liées." -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 plugins/instances/init.php:429 msgid "Generate new key" msgstr "Générer une nouvelle clef" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "Lier une instance" -#: plugins/instances/init.php:307 -msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" -msgstr "Vous pouvez connecter d'autres instances de Tiny Tiny RSS à celle-ci pour partager les flux populaires. Pour cela, utilisez l'URL suivante :" +#: plugins/instances/init.php:304 +msgid "" +"You can connect other instances of Tiny Tiny RSS to this one to share " +"Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" +msgstr "" +"Vous pouvez connecter d'autres instances de Tiny Tiny RSS à celle-ci pour " +"partager les flux populaires. Pour cela, utilisez l'URL suivante :" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "Dernière connexion" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "Etat" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "Flux stockés" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Créer un lien" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "Partager par URL" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "Vous pouvez partager cet article avec l'URL unique suivante :" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "Mettre à jour Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Votre installation de Tiny Tiny RSS est à jour." -#: plugins/updater/init.php:351 -#, fuzzy +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." -msgstr "Ne fermez pas ce dialogue avant que la mise à jour soit terminée. Veuillez sauvegarder votre dossier tt-rss avant de continuer." +msgstr "Ne fermez pas ce dialogue avant que la mise à jour soit terminée." -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." -msgstr "" +msgstr "Il est conseillé de sauvegarder votre dossier tt-rss avant." -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." -msgstr "" +msgstr "Votre base de données ne sera pas modifiée." -#: plugins/updater/init.php:362 -msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." +#: plugins/updater/init.php:360 +msgid "" +"Your current tt-rss installation directory will not be modified. It will be " +"renamed and left in the parent directory. You will be able to migrate all " +"your customized files after update finishes." msgstr "" +"Votre dossier tt-rss ne sera pas modifié. Il sera renommé et laissé tel quel " +"dans le dossier parent. Vous pourrez recopier vos fichiers personnalisés " +"après la mise à jour." -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." msgstr "Prêt à mettre à jour." -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" msgstr "Commencer la mise à jour" -#: js/feedlist.js:394 -#: js/feedlist.js:422 -#: plugins/digest/digest.js:26 +#: js/feedlist.js:395 js/feedlist.js:423 plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Marquer tous les articles de %s comme lus ?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 msgid "Mark all articles in %s older than 1 day as read?" msgstr "Marquer tous les articles de %s âgés d'au moins 1 jour comme lus ?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 msgid "Mark all articles in %s older than 1 week as read?" msgstr "Marquer tous les articles de %s âgés d'au moins 1 semaine comme lus ?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "Marquer tous les articles de %s âgés d'au moins 2 semaines comme lus ?" -#: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." -msgstr "Êtes-vous sûr de vouloir signaler cette erreur sur tt-rss.org ? Le rapport incluera des informations sur votre navigateur. Votre adresse IP sera sauvegardée dans la base de données." +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "L'erreur sera reportée vers la destination configurée." -#: js/functions.js:214 -msgid "close" -msgstr "fermer" +#: js/functions.js:107 +msgid "" +"Are you sure to report this exception to tt-rss.org? The report will include " +"your browser information. Your IP would be saved in the database." +msgstr "" +"Êtes-vous sûr de vouloir signaler cette erreur sur tt-rss.org ? Le rapport " +"incluera des informations sur votre navigateur. Votre adresse IP sera " +"sauvegardée dans la base de données." -#: js/functions.js:586 +#: js/functions.js:236 +msgid "Click to close" +msgstr "Cliquez pour fermer" + +#: js/functions.js:612 msgid "Error explained" msgstr "Erreur expliquée" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "Envoi terminé." -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "Supprimer l'icône de flux stockée ?" -#: js/functions.js:697 +#: js/functions.js:723 msgid "Removing feed icon..." msgstr "Suppression de l'icône du flux..." -#: js/functions.js:702 +#: js/functions.js:728 msgid "Feed icon removed." msgstr "Icône du flux supprimée." -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "Veuillez sélectionner une image à envoyer." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "Envoyer une nouvelle icône pour ce flux ?" -#: js/functions.js:727 +#: js/functions.js:753 msgid "Uploading, please wait..." msgstr "Envoi en cours, veuillez patienter..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "Veuillez saisir le libellé de l'étiquette :" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "Impossible de créer une étiquette : libellé manquant." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "S'abonner au flux" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "Abonné à %s" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "L'URL spécifiée semble invalide." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "L'URL spécifiée ne semble pas contenir de flux." -#: js/functions.js:879 +#: js/functions.js:862 +msgid "Expand to select feed" +msgstr "Développer jusqu'au flux sélectionné" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "L'URL spécifiée n'a pas pu être téléchargée : %s" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "Erreur de validation XML: %s" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "Vous êtes déjà abonné à ce flux." @@ -2900,15 +2890,18 @@ msgid "Create Filter" msgstr "Créer un filtre" #: js/functions.js:1191 -msgid "Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update." -msgstr "Réinitialiser l'inscription ? Tiny Tiny RSS essayera de se réinscrire au hub de notification lors de la prochaine mise à jour du flux." +msgid "" +"Reset subscription? Tiny Tiny RSS will try to subscribe to the notification " +"hub again on next feed update." +msgstr "" +"Réinitialiser l'inscription ? Tiny Tiny RSS essayera de se réinscrire au hub " +"de notification lors de la prochaine mise à jour du flux." #: js/functions.js:1202 msgid "Subscription reset." msgstr "Abonnement réinitialisé." -#: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/functions.js:1212 js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "Se désabonner de %s ?" @@ -2916,70 +2909,61 @@ msgstr "Se désabonner de %s ?" msgid "Removing feed..." msgstr "Suppression du flux..." -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "Veuillez saisir un titre pour cette catégorie :" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "Générer une nouvelle adresse d'abonnement pour ce flux ?" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 js/prefs.js:1231 msgid "Trying to change address..." msgstr "Changement de l'adresse..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 js/tt-rss.js:421 js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "Vous ne pouvez pas modifier ce type de flux." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "Modifier le flux" -#: js/functions.js:1566 -#: js/prefs.js:194 -#: js/prefs.js:749 +#: js/functions.js:1567 js/prefs.js:194 js/prefs.js:749 msgid "Saving data..." msgstr "Enregistrement des données..." -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "D'autres flux" -#: js/functions.js:1659 -#: js/functions.js:1769 -#: js/prefs.js:397 -#: js/prefs.js:427 -#: js/prefs.js:459 -#: js/prefs.js:642 -#: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/functions.js:1660 js/functions.js:1770 js/prefs.js:397 js/prefs.js:427 +#: js/prefs.js:459 js/prefs.js:642 js/prefs.js:662 js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Aucun flux sélectionné." -#: js/functions.js:1701 -msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." -msgstr "Supprimer les flux sélectionnés de l'archive ? Les flux contenant des articles stockés ne seront pas supprimés." +#: js/functions.js:1702 +msgid "" +"Remove selected feeds from the archive? Feeds with stored articles will not " +"be removed." +msgstr "" +"Supprimer les flux sélectionnés de l'archive ? Les flux contenant des " +"articles stockés ne seront pas supprimés." -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "Flux avec des erreurs de mise à jour" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "Supprimer les flux sélectionnés ?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 js/prefs.js:1192 msgid "Removing selected feeds..." msgstr "Suppression des flux sélectionnés..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Aide" @@ -3001,7 +2985,8 @@ msgstr "Veuillez saisir l'identifiant :" #: js/prefs.js:62 msgid "Can't create user: no login specified." -msgstr "Impossible de créer l'utilisateur : aucun identifiant n'a été spécifié." +msgstr "" +"Impossible de créer l'utilisateur : aucun identifiant n'a été spécifié." #: js/prefs.js:66 msgid "Adding user..." @@ -3031,23 +3016,23 @@ msgstr "Supprimer les étiquettes sélectionnées ?" msgid "Removing selected labels..." msgstr "Suppression des étiquettes sélectionnées..." -#: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:295 js/prefs.js:1393 msgid "No labels are selected." msgstr "Aucune étiquette sélectionnée." #: js/prefs.js:309 -msgid "Remove selected users? Neither default admin nor your account will be removed." -msgstr "Supprimer les utilisateurs sélectionnés ? L'administrateur par défaut et votre compte utilisateur ne seront pas supprimés." +msgid "" +"Remove selected users? Neither default admin nor your account will be " +"removed." +msgstr "" +"Supprimer les utilisateurs sélectionnés ? L'administrateur par défaut et " +"votre compte utilisateur ne seront pas supprimés." #: js/prefs.js:312 msgid "Removing selected users..." msgstr "Suppression des utilisateurs sélectionnés..." -#: js/prefs.js:326 -#: js/prefs.js:507 -#: js/prefs.js:528 -#: js/prefs.js:567 +#: js/prefs.js:326 js/prefs.js:507 js/prefs.js:528 js/prefs.js:567 msgid "No users are selected." msgstr "Aucun utilisateur sélectionné." @@ -3059,9 +3044,7 @@ msgstr "Supprimer les filtres sélectionnés ?" msgid "Removing selected filters..." msgstr "Suppression des filtres sélectionnés..." -#: js/prefs.js:359 -#: js/prefs.js:597 -#: js/prefs.js:616 +#: js/prefs.js:359 js/prefs.js:597 js/prefs.js:616 msgid "No filters are selected." msgstr "Aucun filtre sélectionné." @@ -3079,7 +3062,8 @@ msgstr "Veuillez sélectionner un seul flux." #: js/prefs.js:418 msgid "Erase all non-starred articles in selected feed?" -msgstr "Supprimer tous les articles non-remarquables dans le flux sélectionné ?" +msgstr "" +"Supprimer tous les articles non-remarquables dans le flux sélectionné ?" #: js/prefs.js:421 msgid "Clearing selected feed..." @@ -3087,7 +3071,9 @@ msgstr "Nettoyage du flux sélectionné..." #: js/prefs.js:440 msgid "How many days of articles to keep (0 - use default)?" -msgstr "Combien de jours faut-il conserver les articles (0 pour utiliser la valeur par défaut) ?" +msgstr "" +"Combien de jours faut-il conserver les articles (0 pour utiliser la valeur " +"par défaut) ?" #: js/prefs.js:443 msgid "Purging selected feed..." @@ -3101,9 +3087,7 @@ msgstr "L'identifiant ne peut pas être vide." msgid "Saving user..." msgstr "Sauvegarde de l'utilisateur..." -#: js/prefs.js:512 -#: js/prefs.js:533 -#: js/prefs.js:572 +#: js/prefs.js:512 js/prefs.js:533 js/prefs.js:572 msgid "Please select only one user." msgstr "Veuillez sélectionner un seul utilisateur." @@ -3147,320 +3131,317 @@ msgstr "Import OPML" msgid "Please choose an OPML file first." msgstr "Veuillez d'abord sélectionner un fichier OPML." -#: js/prefs.js:815 -#: plugins/import_export/import_export.js:115 +#: js/prefs.js:815 plugins/import_export/import_export.js:115 #: plugins/googlereaderimport/init.js:45 msgid "Importing, please wait..." msgstr "Import en cours, veuillez patienter..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "Revenir aux valeurs par défaut ?" -#: js/prefs.js:1082 -msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." -msgstr "Supprimer la categorie %s ? Tous les flux enfants seront placés dans Sans catégorie." +#: js/prefs.js:1096 +msgid "" +"Remove category %s? Any nested feeds would be placed into Uncategorized." +msgstr "" +"Supprimer la categorie %s ? Tous les flux enfants seront placés dans Sans " +"catégorie." -#: js/prefs.js:1088 +#: js/prefs.js:1102 msgid "Removing category..." msgstr "Suppression de la catégorie..." -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Supprimer les catégories sélectionnées ?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "Suppression des catégories sélectionnés..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Aucune catégorie sélectionnée." -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "Titre de la catégorie :" -#: js/prefs.js:1137 +#: js/prefs.js:1151 msgid "Creating category..." msgstr "Création de la catégorie..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "Flux sans mise à jour récente" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "Remplacer l'adresse de publication OPML actuelle par une nouvelle ?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "Nettoyage du flux..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Recalculer le score des articles des flux sélectionnés ?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 msgid "Rescoring selected feeds..." msgstr "Recalcul du score des flux sélectionnés..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." -msgstr "Recalculer le score de tous les articles ? Cette opération peut prendre beaucoup de temps." +msgstr "" +"Recalculer le score de tous les articles ? Cette opération peut prendre " +"beaucoup de temps." -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." msgstr "Recalcul du score des flux..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "Ré-initialiser les couleurs des étiquettes aux couleurs par défaut ?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Paramètres des profils" -#: js/prefs.js:1411 -msgid "Remove selected profiles? Active and default profiles will not be removed." -msgstr "Supprimer les profils sélectionnés ? Les profils actifs et par défaut ne seront pas supprimés." +#: js/prefs.js:1425 +msgid "" +"Remove selected profiles? Active and default profiles will not be removed." +msgstr "" +"Supprimer les profils sélectionnés ? Les profils actifs et par défaut ne " +"seront pas supprimés." -#: js/prefs.js:1414 +#: js/prefs.js:1428 msgid "Removing selected profiles..." msgstr "Suppression des profils sélectionnés..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "Aucun profil sélectionné." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 js/prefs.js:1504 msgid "Activate selected profile?" msgstr "Activer le profil selectionné ?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "Veuillez sélectionner un profil à activer." -#: js/prefs.js:1458 +#: js/prefs.js:1472 msgid "Creating profile..." msgstr "Création d'un profil..." -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" -msgstr "Ceci va invalider toutes les URL de flux générées auparavant. Souhaitez-vous continuer ?" +msgstr "" +"Ceci va invalider toutes les URL de flux générées auparavant. Souhaitez-vous " +"continuer ?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 js/prefs.js:1550 msgid "Clearing URLs..." msgstr "Nettoyage des URL..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 msgid "Generated URLs cleared." msgstr "URL générées supprimées." -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" -msgstr "Ceci va invalider tous les articles partagés par URL. Souhaitez-vous continuer ?" +msgstr "" +"Ceci va invalider tous les articles partagés par URL. Souhaitez-vous " +"continuer ?" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "URL partagées supprimées." -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Editeur d'étiquette" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "Abonnement aux flux..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "Effacer les données pour ce plugin ?" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Marquer tous les articles comme lus ?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "Marquage de tous les flux comme lus..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." msgstr "Veuillez d'abord activer le plugin mail." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 msgid "Please enable embed_original plugin first." msgstr "Veuillez d'abord activer le plugin embed_original." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "Sélectionner des éléments par tags" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "Vous ne pouvez pas vous désabonner de la catégorie." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Veuillez d'abord sélectionner un flux." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "Vous ne pouvez pas recalculer le score de ce type de flux." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "Recalculer le score des articles de %s ?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "Recalcul des scores des articles..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "Une nouvelle version est disponible !" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" msgstr "Annuler la recherche" -#: js/viewfeed.js:455 -#: plugins/digest/digest.js:258 +#: js/viewfeed.js:453 plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Ne plus marquer comme remarquable" -#: js/viewfeed.js:459 -#: plugins/digest/digest.js:260 +#: js/viewfeed.js:457 plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Marquer comme remarquable" -#: js/viewfeed.js:499 -#: plugins/digest/digest.js:263 +#: js/viewfeed.js:497 plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Ne plus publier l'article" -#: js/viewfeed.js:503 -#: plugins/digest/digest.js:265 +#: js/viewfeed.js:501 plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Publier l'article" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 -#: plugins/mailto/init.js:7 +#: js/viewfeed.js:653 +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "%d article sélectionné" +msgstr[1] "%d articles sélectionnés" + +#: js/viewfeed.js:725 js/viewfeed.js:753 js/viewfeed.js:780 js/viewfeed.js:843 +#: js/viewfeed.js:877 js/viewfeed.js:997 js/viewfeed.js:1040 +#: js/viewfeed.js:1093 js/viewfeed.js:2091 plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Aucun article sélectionné." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "Supprimer %d article sélectionné de %s ?" msgstr[1] "Supprimer les %d articles sélectionnés de %s ?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "Supprimer %d article sélectionné ?" msgstr[1] "Supprimer les %d articles sélectionnés ?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "Archiver %d article sélectionné de %s ?" msgstr[1] "Archiver les %d articles sélectionnés de %s ?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "Restaurer %d article archivé ?" msgstr[1] "Restaurer %d articles archivés ?" -#: js/viewfeed.js:1032 -msgid "Please note that unstarred articles might get purged on next feed update." -msgstr "Veuillez noter que les articles non marqués risquent d'être purgés à la prochaine mise à jour du flux." +#: js/viewfeed.js:1054 +msgid "" +"Please note that unstarred articles might get purged on next feed update." +msgstr "" +"Veuillez noter que les articles non marqués risquent d'être purgés à la " +"prochaine mise à jour du flux." -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "Marquer %d article sélectionné de %s comme lu ?" msgstr[1] "Marquer %d articles sélectionnés de %s comme lus ?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "Modifier les tags de l'article" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "Sauvegarde des tags de l'article..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Aucun article sélectionné." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Aucun article à marquer" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "Marquer %d article comme lu ?" msgstr[1] "Marquer %d articles comme lus ?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "Ouvrir l'article original" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 msgid "Display article URL" msgstr "Afficher l'URL" # Same as 'starred" ? -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 msgid "Toggle marked" msgstr "Marquer comme (non) remarquable" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Assigner l'étiquette" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "Supprimer l'étiquette" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "Lecture..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "Cliquez pour mettre en pause" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "Nouveau score des articles sélectionnés :" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "Nouveau score pour cet article :" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 msgid "Article URL:" msgstr "URL de l'article :" @@ -3494,10 +3475,10 @@ msgstr "Charger plus..." #: plugins/embed_original/init.js:6 msgid "Sorry, your browser does not support sandboxed iframes." -msgstr "Malheureusement, votre navigateur ne supporte pas les iframes sécurisées." +msgstr "" +"Malheureusement, votre navigateur ne supporte pas les iframes sécurisées." -#: plugins/mailto/init.js:21 -#: plugins/mail/mail.js:21 +#: plugins/mailto/init.js:21 plugins/mail/mail.js:21 msgid "Forward article by email" msgstr "Transférer l'article par email" @@ -3506,10 +3487,18 @@ msgid "Export Data" msgstr "Exporter les données" #: plugins/import_export/import_export.js:40 -msgid "Finished, exported %d article. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgid_plural "Finished, exported %d articles. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgstr[0] "Terminé, %d article exporté. Vous pouvez télécharger les données <a class='visibleLink' href='%u'>ici</a>." -msgstr[1] "Terminé, %d articles exportés. Vous pouvez télécharger les données <a class='visibleLink' href='%u'>ici</a>." +msgid "" +"Finished, exported %d article. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgid_plural "" +"Finished, exported %d articles. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgstr[0] "" +"Terminé, %d article exporté. Vous pouvez télécharger les données <a " +"class='visibleLink' href='%u'>ici</a>." +msgstr[1] "" +"Terminé, %d articles exportés. Vous pouvez télécharger les données <a " +"class='visibleLink' href='%u'>ici</a>." #: plugins/import_export/import_export.js:93 msgid "Data Import" @@ -3547,8 +3536,7 @@ msgstr "Supprimer les instances sélectionnées ?" msgid "Removing selected instances..." msgstr "Suppression des instances sélectionnées..." -#: plugins/instances/instances.js:139 -#: plugins/instances/instances.js:151 +#: plugins/instances/instances.js:139 plugins/instances/instances.js:151 msgid "No instances are selected." msgstr "Aucune instance sélectionnée." @@ -3561,9 +3549,47 @@ msgid "Share article by URL" msgstr "Partager l'article par URL" #: plugins/updater/updater.js:58 -#, fuzzy -msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." -msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre dossier tt-rss avant de continuer. Tapez « yes » pour continuer." +msgid "" +"Backup your tt-rss directory before continuing. Please type 'yes' to " +"continue." +msgstr "" +"Sauvegardez votre dossier tt-rss avant de continuer. Veuillez taper « yes » " +"pour continuer." + +#~ msgid "Switch to digest..." +#~ msgstr "Basculer en mode résumé..." + +#~ msgid "Show tag cloud..." +#~ msgstr "Afficher le nuage de tags..." + +#~ msgid "Click to play" +#~ msgstr "Cliquez pour lancer la lecture" + +#~ msgid "Play" +#~ msgstr "Lecture" + +#~ msgid "Visit the website" +#~ msgstr "Visiter le site web" + +#~ msgid "Select theme" +#~ msgstr "Sélectionner un thème" + +#~ msgid "I have scanned the code and would like to enable OTP" +#~ msgstr "" +#~ "J'ai scanné le code et je veux activer les mots de passe à usage unique" + +#~ msgid "close" +#~ msgstr "fermer" + +#~ msgid "Playing..." +#~ msgstr "Lecture..." + +#~ msgid "" +#~ "Could not upload file. You might need to adjust upload_max_filesize in " +#~ "PHP.ini (current value = %s)" +#~ msgstr "" +#~ "Envoi du fichier impossible. Vous devriez peut-être modifier la valeur de " +#~ "upload_max_filesize dans PHP.ini (valeur courante : %s)" #~ msgid "Default interval between feed updates" #~ msgstr "Intervalle par défaut entre les mises à jour de flux" @@ -3583,8 +3609,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgid "Please backup your database before proceeding." #~ msgstr "Merci de sauvegardez votre base de données avant de poursuivre." -#~ msgid "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to <b>%d</b>)." -#~ msgstr "La base de données de Tiny Tiny RSS a besoin d'être mise à jour (version <b>%d</b> à <b>%d</b>)." +#~ msgid "" +#~ "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> " +#~ "to <b>%d</b>)." +#~ msgstr "" +#~ "La base de données de Tiny Tiny RSS a besoin d'être mise à jour (version " +#~ "<b>%d</b> à <b>%d</b>)." #~ msgid "Performing updates..." #~ msgstr "Exécution des mises à jour..." @@ -3602,18 +3632,29 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgstr "ERREUR !" #~ msgid "Finished. Performed <b>%d</b> update up to schema version <b>%d</b>." -#~ msgid_plural "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." -#~ msgstr[0] "Terminé. <b>%d</b> modification a été effectuée pour parvenir à la version de schéma <b>%d</b>." -#~ msgstr[1] "Terminé. <b>%d</b> modifications ont été effectuées pour parvenir à la version de schéma <b>%d</b>." +#~ msgid_plural "" +#~ "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." +#~ msgstr[0] "" +#~ "Terminé. <b>%d</b> modification a été effectuée pour parvenir à la " +#~ "version de schéma <b>%d</b>." +#~ msgstr[1] "" +#~ "Terminé. <b>%d</b> modifications ont été effectuées pour parvenir à la " +#~ "version de schéma <b>%d</b>." #~ msgid "Your database schema is from a newer version of Tiny Tiny RSS." -#~ msgstr "Votre schéma de base de données provient d'une version plus récente de Tiny Tiny RSS." +#~ msgstr "" +#~ "Votre schéma de base de données provient d'une version plus récente de " +#~ "Tiny Tiny RSS." #~ msgid "Found schema version: <b>%d</b>, required: <b>%d</b>." #~ msgstr "Version du schéma trouvée : <b>%d</b>, requise : <b>%d</b>." -#~ msgid "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer version and continue." -#~ msgstr "Mise à jour du schéma impossible. Veuillez mettre à jour les fichiers de Tiny Tiny RSS vers une version plus récente et continuer." +#~ msgid "" +#~ "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer " +#~ "version and continue." +#~ msgstr "" +#~ "Mise à jour du schéma impossible. Veuillez mettre à jour les fichiers de " +#~ "Tiny Tiny RSS vers une version plus récente et continuer." #~ msgid "Mark feed as read" #~ msgstr "Marquer le flux comme lu" @@ -3621,8 +3662,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgid "Enable external API" #~ msgstr "Activer les API externes" -#~ msgid "When this option is enabled, headlines in Special feeds and Labels are grouped by feeds" -#~ msgstr "Avec cette option activée, les entêtes dans les flux spéciaux et par étiquettes sont regroupés par flux" +#~ msgid "" +#~ "When this option is enabled, headlines in Special feeds and Labels are " +#~ "grouped by feeds" +#~ msgstr "" +#~ "Avec cette option activée, les entêtes dans les flux spéciaux et par " +#~ "étiquettes sont regroupés par flux" #~ msgid "Title or Content" #~ msgstr "Titre ou contenu" @@ -3648,8 +3693,15 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgid "Modify score" #~ msgstr "Modifier le score" -#~ msgid "This option is useful when you are reading several planet-type aggregators with partially colliding userbase. When disabled, it forces same posts from different feeds to appear only once." -#~ msgstr "Cette option est utile si vous lisez des articles venant d'agrégateurs de type «planet», dans lesquels certains flux se recoupent largement. Lorsque cette option est désactivée, les articles en double sont affichés en un seul exemplaire." +#~ msgid "" +#~ "This option is useful when you are reading several planet-type " +#~ "aggregators with partially colliding userbase. When disabled, it forces " +#~ "same posts from different feeds to appear only once." +#~ msgstr "" +#~ "Cette option est utile si vous lisez des articles venant d'agrégateurs de " +#~ "type «planet», dans lesquels certains flux se recoupent largement. " +#~ "Lorsque cette option est désactivée, les articles en double sont affichés " +#~ "en un seul exemplaire." #~ msgid "Date syntax appears to be correct:" #~ msgstr "La syntaxe des dates semble être correcte :" @@ -3657,9 +3709,6 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgid "Date syntax is incorrect." #~ msgstr "La syntaxe des dates est incorrecte." -#~ msgid "Refresh" -#~ msgstr "Actualiser" - #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "(%d flux)" @@ -3675,10 +3724,8 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgstr "Marquer tous les articles visibles de %s comme lus ?" #~ msgid "Form secret key incorrect. Please enable cookies and try again." -#~ msgstr "Clé de formulaire incorecte. Veuillez activer les cookies et réessayer." - -#~ msgid "Date" -#~ msgstr "Date" +#~ msgstr "" +#~ "Clé de formulaire incorecte. Veuillez activer les cookies et réessayer." #~ msgid "Score" #~ msgstr "Score" @@ -3690,7 +3737,8 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgstr "Activer les options voulues avec les cases à cocher sur la droite:" #~ msgid "New articles available in this feed (click to show)" -#~ msgstr "Nouveaux articles disponibles dans ce flux (cliquer pour les afficher)" +#~ msgstr "" +#~ "Nouveaux articles disponibles dans ce flux (cliquer pour les afficher)" #~ msgid "Share on identi.ca" #~ msgstr "Partager sur identi.ca" @@ -3722,8 +3770,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgid "Back to feeds" #~ msgstr "Retour aux flux" -#~ msgid "This will clear your stored authentication information for Twitter. Continue?" -#~ msgstr "Cela va effacer les informations d'authentification pour Twitter. Voulez-vous continuer ?" +#~ msgid "" +#~ "This will clear your stored authentication information for Twitter. " +#~ "Continue?" +#~ msgstr "" +#~ "Cela va effacer les informations d'authentification pour Twitter. Voulez-" +#~ "vous continuer ?" #~ msgid "Finished: %d articles processed, %d imported, %d feeds created." #~ msgstr "Terminé : %d articles traités, %d importés, %d flux créés." @@ -3754,7 +3806,8 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgstr "Naviguer dans les articles" #~ msgid "Mark articles below/above active one as read" -#~ msgstr "Marquer les articles au-dessous/au-dessus de l'article actif comme lus" +#~ msgstr "" +#~ "Marquer les articles au-dessous/au-dessus de l'article actif comme lus" #~ msgid "Scroll article content" #~ msgstr "Faire déflier le contenu de l'article" @@ -3783,8 +3836,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgid "Focus search (if present)" #~ msgstr "Focus sur la recherche (si affichée)" -#~ msgid "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS configuration and your access level." -#~ msgstr "<b>Note :</b> certaines actions peuvent ne pas être disponibles, selon la configuration de Tiny Tiny RSS et vos permissions." +#~ msgid "" +#~ "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS " +#~ "configuration and your access level." +#~ msgstr "" +#~ "<b>Note :</b> certaines actions peuvent ne pas être disponibles, selon la " +#~ "configuration de Tiny Tiny RSS et vos permissions." #~ msgid "Open article in new tab" #~ msgstr "Ouvrir les articles dans un nouvel onglet" @@ -3850,7 +3907,9 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgstr "S'inscrire via Twitter" #~ msgid "Could not connect to Twitter. Refresh the page or try again later." -#~ msgstr "Impossible de se connecter à Twitter. Rafraichissez la page ou essayez à nouveau plus tard." +#~ msgstr "" +#~ "Impossible de se connecter à Twitter. Rafraichissez la page ou essayez à " +#~ "nouveau plus tard." #~ msgid "Congratulations! You have successfully registered with Twitter." #~ msgstr "Félicitation ! Vous vous êtes inscrit via Twitter avec succès." @@ -3871,7 +3930,8 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgstr "Aucune catégorie de flux définie." #~ msgid "<b>Hint:</b> you can drag feeds and categories around." -#~ msgstr "<b>Astuce :</b> vous pouvez faire glisser les flux et les catagories." +#~ msgstr "" +#~ "<b>Astuce :</b> vous pouvez faire glisser les flux et les catagories." #~ msgid "Subscribing using bookmarklet" #~ msgstr "S'abonner via bookmarklet" @@ -3879,11 +3939,19 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgid "Twitter" #~ msgstr "Twitter" -#~ msgid "Before you can update your Twitter feeds, you must register this instance of Tiny Tiny RSS with Twitter.com." -#~ msgstr "Avant de mettre à jour vos flux Twitter, vous devez enregistrer cette instance de Tiny Tiny RSS avec Twitter.com." +#~ msgid "" +#~ "Before you can update your Twitter feeds, you must register this instance " +#~ "of Tiny Tiny RSS with Twitter.com." +#~ msgstr "" +#~ "Avant de mettre à jour vos flux Twitter, vous devez enregistrer cette " +#~ "instance de Tiny Tiny RSS avec Twitter.com." -#~ msgid "You have been successfully registered with Twitter.com and should be able to access your Twitter feeds." -#~ msgstr "Vous vous êtes inscrit avec succès sur Twitter.com et vous devriez être en mesure d'accéder à vos flux Twitter." +#~ msgid "" +#~ "You have been successfully registered with Twitter.com and should be able " +#~ "to access your Twitter feeds." +#~ msgstr "" +#~ "Vous vous êtes inscrit avec succès sur Twitter.com et vous devriez être " +#~ "en mesure d'accéder à vos flux Twitter." #~ msgid "Register with Twitter.com" #~ msgstr "S'inscrire sur Twitter.com" @@ -3900,8 +3968,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre #~ msgid "Filter Test Results" #~ msgstr "Résultats du test du filtre" -#~ msgid "When \"Mark as read\" button is clicked in toolbar, automatically open next feed with unread articles." -#~ msgstr "Lorsque vous cliquez sur « Marquer comme lus », le prochain flux contenant des articles non lus est automatiquement affiché" +#~ msgid "" +#~ "When \"Mark as read\" button is clicked in toolbar, automatically open " +#~ "next feed with unread articles." +#~ msgstr "" +#~ "Lorsque vous cliquez sur « Marquer comme lus », le prochain flux " +#~ "contenant des articles non lus est automatiquement affiché" #~ msgid "Uses server timezone" #~ msgstr "Utilise le fuseau horaire du serveur" diff --git a/locale/hu_HU/LC_MESSAGES/messages.mo b/locale/hu_HU/LC_MESSAGES/messages.mo Binary files differindex 6c9c1c3bf..aa0d5abd5 100644 --- a/locale/hu_HU/LC_MESSAGES/messages.mo +++ b/locale/hu_HU/LC_MESSAGES/messages.mo diff --git a/locale/hu_HU/LC_MESSAGES/messages.po b/locale/hu_HU/LC_MESSAGES/messages.po index 7bbd816de..25d4a1fec 100644 --- a/locale/hu_HU/LC_MESSAGES/messages.po +++ b/locale/hu_HU/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: 2013-03-26 12:00+0100\n" "Last-Translator: Zoltan Faludi <zoltan.faludi@gmail.com>\n" "Language-Team: HUNGARIAN\n" @@ -17,88 +17,89 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.5\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Alapértelmezett beállÃtás" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Sose töröld a régi hÃreket" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "1 hetes" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "2 hetes" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "1 hónapos" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "2 hónapos" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "3 hónapos" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "FrissÃtési intervallum:" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "FrissÃtések kikapcsolása" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "Minden 15 percben" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "Minden 30 percben" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "Óránként" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "Minden 4 órában" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "Minden 12 órában" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "Napi" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "Heti" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "Felhasználó" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Kiemelt felhasználó" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Adminisztrátor" @@ -154,349 +155,346 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "SQL eszképelési teszt sikertelen, ellenÅ‘rizze az adatbázis és a PHP bállÃtásokat" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Betöltés, kérem várjon..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "HÃrcsatornalista összecsukása" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "HÃrek megjelenÃtése" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "AdaptÃv" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Minden hÃr" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "Csillagozott" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "Publikált" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "Olvasatlan" -#: index.php:177 +#: index.php:170 #, fuzzy msgid "Unread First" msgstr "Olvasatlan" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Pontozás memmÅ‘zése" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "HÃrek rendezése" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Alapértelmezett" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "CÃm" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Megjelölés olvasottként" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "Kommunikációs probléma a szerverrel" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "A Tiny Tiny RSS-nek elérhetÅ‘ egy újabb verziója!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Műveletek" -#: index.php:233 +#: index.php:225 msgid "Preferences..." msgstr "BeállÃtások..." -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Keresés..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Műveletek hÃrcsatornákkal:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "Feliratkozás hÃrcsatornára..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "HÃrcsatorna szerkesztése..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "HÃrcsatorna újrapontozása" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Leiratkozás" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Az összes hÃrcsatorna:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Olvasottak rejtése/mutatása" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Egyéb műveletek:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "Váltás áttekintÅ‘ módba..." - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "CÃmkefelhÅ‘ megjelenÃtése..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 msgid "Toggle widescreen mode" msgstr "Szélesvásznú mód váltása" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "Kijelölés cÃmkék alapján" -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Új cÃmke létrehozása..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "SzűrÅ‘ létrehozása..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "Billentyűparancsok súgója" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Kijelentkezés" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "BeállÃtások" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Billentyűparancsok" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Kilépés a beállÃtásokból" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "HÃrcsatornák" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "SzűrÅ‘k" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "CÃmkék" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Felhasználók" -#: register.php:186 +#: prefs.php:132 +#, fuzzy +msgid "System" +msgstr "Rendszer beépülÅ‘k" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "Új felhasználói fiók létrehozása" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "Új felhasználók regisztrációja adminisztrátor által letilva." -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Vissza az RSS-olvasóhoz" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "Ideiglenes jelszavát elküdljük a megadott e-mail cÃmre. Azok a felhasználói fiókok, amelyekbe az ideiglenes jelszó kipostázásától számÃtott 24 órán belül nem lépnek be, automatikusan törlÅ‘dnek." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Felhasználói név:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "EllenÅ‘rizze, hogy nem foglalt-e már:" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "E-mail:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Mennyi kettÅ‘ meg kettÅ‘?" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Regisztráció elküldése" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "Regisztrációs adatai hiányosak" -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Ez a felhasználónév már foglalt." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "Regisztráció sikertelen." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Felhasználói fiók sikeresen létrehozva" -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "Új felhasználók regisztrációja jelenleg nem engedélyezett." -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "A Tiny Tiny RSS adatbázis frissÃtÅ‘ szkript." #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Kategorizálatlan" @@ -511,318 +509,308 @@ msgstr[1] "%d archivált hÃr" msgid "No feeds found." msgstr "Nem található hÃrcsatorna." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Kiemelt" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Összes hÃrcsatorna" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Csillagozott hÃrek" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Publikált hÃrek" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Friss hÃrek" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "Az összes hÃr" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "Archivált hÃrek" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "Legutóbb olvasott" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Navigáció" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "KövetkezÅ‘ hÃrcsatorna megnyitása" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "ElÅ‘zÅ‘ hÃrcsatorna megnyitása" -#: include/functions.php:1914 +#: include/functions.php:1960 msgid "Open next article" msgstr "KövetkezÅ‘ hÃr megnyitása" -#: include/functions.php:1915 +#: include/functions.php:1961 msgid "Open previous article" msgstr "ElÅ‘zÅ‘ hÃr megjelenÃtése" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "KövetkezÅ‘ hÃr megnyitása (nem görgeti a hosszú hÃreket)" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "ElÅ‘zÅ‘ hÃr megnyitása (nem görgeti a hosszú hÃreket)" -#: include/functions.php:1918 +#: include/functions.php:1964 #, fuzzy msgid "Move to next article (don't expand or mark read)" msgstr "KövetkezÅ‘ hÃr megnyitása (nem görgeti a hosszú hÃreket)" -#: include/functions.php:1919 +#: include/functions.php:1965 #, fuzzy msgid "Move to previous article (don't expand or mark read)" msgstr "ElÅ‘zÅ‘ hÃr megnyitása (nem görgeti a hosszú hÃreket)" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "KeresÅ‘mezÅ‘ megjelenÃtése" -#: include/functions.php:1921 +#: include/functions.php:1967 msgid "Article" msgstr "HÃr" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Csillagoz" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "Publikált" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Olvasatlannak jelöl" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "CÃmkék szerkesztése" -#: include/functions.php:1926 +#: include/functions.php:1972 #, fuzzy msgid "Dismiss selected" msgstr "EltávolÃtja a kijelölt hÃreket a cÃmke alól?" -#: include/functions.php:1927 +#: include/functions.php:1973 #, fuzzy msgid "Dismiss read" msgstr "Látható olvasott hÃrek elrejtése" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" msgstr "Megnyitás új ablakban" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 msgid "Mark below as read" msgstr "Olvasottnak jel ez alatt" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 msgid "Mark above as read" msgstr "Olvasottnak jel ez fölött" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "LegördÃtés" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "FelgördÃtés" -#: include/functions.php:1933 +#: include/functions.php:1979 msgid "Select article under cursor" msgstr "Az kurzor alatti hÃr kiválasztása" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "HÃr küldése emailben" -#: include/functions.php:1935 +#: include/functions.php:1981 msgid "Close/collapse article" msgstr "HÃr bezárása" -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" msgstr "Váltás kombinált módba" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 msgid "Toggle embed original" msgstr "Eredeti megjelenÃtésének váltása" -#: include/functions.php:1939 +#: include/functions.php:1985 msgid "Article selection" msgstr "HÃr kijelölés" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "Minden hÃr kijelölése" -#: include/functions.php:1941 +#: include/functions.php:1987 msgid "Select unread" msgstr "Olvasatlan hÃrek kijelölése" -#: include/functions.php:1942 +#: include/functions.php:1988 msgid "Select starred" msgstr "Csillagozott hÃrek kijelölése" -#: include/functions.php:1943 +#: include/functions.php:1989 msgid "Select published" msgstr "Publikált hÃrek kijlölése" -#: include/functions.php:1944 +#: include/functions.php:1990 msgid "Invert selection" msgstr "FordÃtott kijelölés" -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "Kijelölés eltávolÃtása" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "HÃrcsatorna" -#: include/functions.php:1947 +#: include/functions.php:1993 msgid "Refresh current feed" msgstr "Aktuális hÃrcsatorna frissÃtése" -#: include/functions.php:1948 +#: include/functions.php:1994 msgid "Un/hide read feeds" msgstr "Olvasott hÃrcsatornák rejtése/mutatása" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "Feliratkozás hÃrcsatornára" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "HÃrcsatorna szerkesztése" -#: include/functions.php:1952 +#: include/functions.php:1998 msgid "Reverse headlines" msgstr "CÃmek fordÃtott sorrendben" -#: include/functions.php:1953 +#: include/functions.php:1999 msgid "Debug feed update" msgstr "HÃrcsatorna frissÃtés hibakaresés" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Minden hÃrcsatornát olvasottként jelöl" -#: include/functions.php:1955 +#: include/functions.php:2001 msgid "Un/collapse current category" msgstr "Kategória kinyitás/összecsukás" -#: include/functions.php:1956 +#: include/functions.php:2002 msgid "Toggle combined mode" msgstr "Váltás kombinált módba" -#: include/functions.php:1957 +#: include/functions.php:2003 #, fuzzy msgid "Toggle auto expand in combined mode" msgstr "Váltás kombinált módba" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "Ugrás ide" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "Friss" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "CÃmkefelhÅ‘" -#: include/functions.php:1965 +#: include/functions.php:2011 msgid "Other" msgstr "Egyéb" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "CÃmke létrehozása" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "SzűrÅ‘ létrehozása" -#: include/functions.php:1968 +#: include/functions.php:2014 msgid "Un/collapse sidebar" msgstr "Oldalsáv megjelenÃtés/elrejtés" -#: include/functions.php:1969 +#: include/functions.php:2015 msgid "Show help dialog" msgstr "Súgó ablak megjelenÃtése" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "Keresési eredmények: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "Kattintson a lejátszáshoz" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "Lejátszás" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr "-" -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "nincs cÃmke" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "CÃmkék hozzáadása a hÃrhez" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 msgid "Originally from:" msgstr "Eredeti innen:" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 msgid "Feed URL" msgstr "HÃrcsatorna URL" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -834,79 +822,82 @@ msgstr "HÃrcsatorna URL" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Ablak bezárása" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(jegyzet szerkesztése)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "ismeretlen hÃrcsatornatÃpus" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "Csatolmányok:" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Felhasználó:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Jelszó:" -#: include/login_form.php:197 +#: include/login_form.php:199 #, fuzzy msgid "I forgot my password" msgstr "Érvénytelen jelszó" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Nyelv:" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Profil:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 msgid "Default profile" msgstr "Alapértelmezett profil" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Kisebb adatforgalom" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Belépés" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "Nem sikerült érvényesÃteni a munkamenetet (érvénytelen IP)" @@ -922,162 +913,162 @@ msgstr "A hÃr cÃmkéi (vesszÅ‘kkel elválasztva):" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "Mentés" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Mégsem" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "Megosztás Tiny Tiny RSS-el" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "CÃm:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "HÃrcsatorna URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "Tartalom:" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "CÃmkék:" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "A megosztott hÃr a Publikált hÃrek között fog megjelenni." -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "Megosztás" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "Nincs belépve" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Hibás felhasználói név vagy jelszó" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Már fel van iratkozva erre a hÃrcsatornára: <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Feliratkozva erre a hÃrcsatornára: <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Nem lehet feliratkozni ide: <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "Nem található hÃrcsatorna itt: <b>%s</b>." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 msgid "Multiple feed URLs found." msgstr "Több hÃrcsatorna URL-t találtam." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Nem lehet feliratkozni ide: <b>%s</b>.<br>Nem lehet betölteni a hÃcsatorna URL-t." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "Feliratkozás a kiválasztott hÃrcsatornára" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Feliratkozási beállÃtások szerkesztése" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 #, fuzzy msgid "Password recovery" msgstr "Jelszó" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "" -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "Jelszó visszaállÃtás" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "" -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 #, fuzzy msgid "Go back" msgstr "Visszalépés" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "A hozzáférési szinted nem elég magasa script futtatásához" -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Adatbázis-frissÃtÅ‘" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "FrissÃtések végrehajtása" @@ -1132,7 +1123,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "Ezt a hÃrcsatornát megtekintheti RSS-ként a következÅ‘ URL-en:" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Új Tiny Tiny RSS verzió érhetÅ‘ el (%s)." @@ -1142,7 +1133,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "FrissÃthet a beépÃtett frissÃtÅ‘vel a BeállÃtásokban, vagy az update.php használatával" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1154,114 +1145,120 @@ msgstr "Letöltés" msgid "Error receiving version information or no new version available." msgstr "Hiba a verzió információ fogadása közben vagy nem érhetÅ‘ el új verzió." -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "Weboldal megtekintése" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "Legutóbbi frissÃtés:" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Megtekintés RSS feedként" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "Megtekintés RSS-ként" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Kiválasztás:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "Mind" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "FordÃtott" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Kijelölés törlése" -#: classes/feeds.php:101 +#: classes/feeds.php:93 msgid "More..." msgstr "Tovább..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Kiválasztott legyen:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Kiválasztott hÃrcsatornák:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "Pontszám megadás" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "Archivál" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "Visszalépés" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "Törlés" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "TovábbÃtás emaiben" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "HÃrcsatorna:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "HÃrcsatorna nem található" -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "Sose töröld a régi hÃreket" + +#: classes/feeds.php:360 #, fuzzy, php-format msgid "Imported at %s" msgstr "Importálás" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "olvasottként jelöl" @@ -1313,9 +1310,9 @@ msgid "Feed or site URL" msgstr "HÃrcsatorna vagy weboldal URL" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "Hozzáadás a következÅ‘ kategóriához:" @@ -1325,24 +1322,24 @@ msgstr "ElérhetÅ‘ hÃrcsatornák" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "AzonosÃtás" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Belépés" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Jelszó" @@ -1352,7 +1349,7 @@ msgstr "Ez a hÃrcsatorna azonosÃtást igényel." #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "Feliratkozás" @@ -1364,8 +1361,8 @@ msgstr "További hÃrcsatornák" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "Keresés" @@ -1386,8 +1383,8 @@ msgstr "határ:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "EltávolÃt" @@ -1470,17 +1467,39 @@ msgstr "SzűrÅ‘ hozzáadása..." msgid "Processing category: %s" msgstr "%s kategória feldolgozása" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "Hiba: a hÃr nem tölthetÅ‘ be." + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Hiba: kérem töltse fel az OPML fájlt!" -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "Hiba: a hÃr nem tölthetÅ‘ be." + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Hiba történt a dokuementum feldoglozása közben" #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "Hozzáférési szintje elégtelen ehhez a művelethez." @@ -1514,8 +1533,8 @@ msgid "Change password to" msgstr "Jelszó megváltoztatása" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "BeállÃtások" @@ -1561,13 +1580,13 @@ msgstr "[tt-rss] ÉrtesÃtés jelszó megváltoztatásáról." #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 msgid "Select" msgstr "Kiválasztás" @@ -1581,7 +1600,7 @@ msgstr "Részletek" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Szerkesztés" @@ -1594,7 +1613,7 @@ msgid "Last login" msgstr "Utolsó belépés" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "Kattintson ide a szerkesztéshez" @@ -1608,7 +1627,7 @@ msgstr "Nem található a feltételeknek megfelelÅ‘ felhasználó." #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "CÃm" @@ -1646,41 +1665,41 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "Az adatbázis szerver regexp implementációjával kapcsolatos problémák miatt a összetett kifejezések nem biztos, hogy eredményesek lesznek." #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Szabály" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "Hozzáad" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 msgid "Apply actions" msgstr "Műveletek alkalmazása" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "Engedélyezve" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 msgid "Match any rule" msgstr "Minden szabálynak megfeleljen" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 #, fuzzy msgid "Inverse matching" msgstr "FordÃtott kijelölés" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "Teszt" @@ -1699,61 +1718,61 @@ msgid "Combine" msgstr "EgyesÃt" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "Rendezési sorren visszaállÃtása" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "HÃrek újrapontszámozása" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Létrehoz" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "...szerepeljen ebben a mezÅ‘ben: " -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "itt" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" msgstr "Szabály mentés" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 msgid "Add rule" msgstr "Szabály hozzáadás" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Műveletek" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "BeállÃtás:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" msgstr "Művelet mentés" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 msgid "Add action" msgstr "Művelet hozzáadás" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 #, fuzzy msgid "[No caption]" msgstr "CÃm" @@ -1902,7 +1921,7 @@ msgid "Purge unread articles" msgstr "Régi hÃrek törlésekor törölje az olvasatlanokat is" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "FordÃtott hÃrcÃm-sorrend (régiebbiek elÅ‘bb)" @@ -1943,7 +1962,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "HÃrek olvasásakor távolÃtsa el a a HTML kódokat a leggyakrabban használtak kivételével." #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 msgid "Customize stylesheet" msgstr "StÃluslap testreszabása" @@ -1952,7 +1971,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "Saját Ãzlése szerint testreszabhatja a CSS stÃluslapot" #: classes/pref/prefs.php:55 -msgid "User timezone" +#, fuzzy +msgid "Time zone" msgstr "Felhasználó idÅ‘zónája" #: classes/pref/prefs.php:56 @@ -1964,22 +1984,27 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "StÃlusválasztó" +#, fuzzy +msgid "Language" +msgstr "Nyelv:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "A régi jelszó mezÅ‘ nem maradhat üresen." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "Az új jelszó mezÅ‘ nem maradhat üresen." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "A megadott jelszavak nem egyeznek." @@ -1987,221 +2012,231 @@ msgstr "A megadott jelszavak nem egyeznek." msgid "Function not supported by authentication module." msgstr "A hitelesÃtési modul nem támogatja ezt a funkciót." -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "BeállÃtások elmentve." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Ismeretlen beállÃtás: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "A személyes adatai el lettek mentve." -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "Személyes adatok / AzonosÃtás" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Személyes adatok" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "Teljes név" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "E-mail" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Hozzáférési szint" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "Adatok mentése" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "A jelszava még az alapértelmezett, kérem változtassa meg." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Régi jelszó" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Új jelszó" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Jelszó még egyszer" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Jelszó megváltoztatása" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "Egyszer használatos jelszavak / HitelesÃtÅ‘" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 msgid "Enter your password" msgstr "Adja meg a jelszavát" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" msgstr "OTP letiltása" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "Ennek a használatához egy kompatibilis HitelesÃtÅ‘re van szükség. A jelszó módosÃtása automatikusan letiltja az OTP-t." -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "Szkennelje be a következÅ‘ kódot a HitelesÃtÅ‘ alkalmazással:" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "Beszkenneltem a kódot és be szeretném kapcsolni az OTP-t" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "Adja meg az egyszer használatos jelszót:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" msgstr "OTP engedélyezése" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "Testreszabás" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "Regisztráció" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "Töröl" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "Aktuális szerveridÅ‘: %s (UTC)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "BeállÃtások mentése" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 #, fuzzy msgid "Save and exit preferences" msgstr "Kilépés a beállÃtásokból" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "Profilok kezelése" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Alapértelmezett beállÃtások" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "BeépülÅ‘k" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "Rendszer beépülÅ‘k" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "BeépülÅ‘" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 msgid "Description" msgstr "LeÃrás" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "Verzió" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "SzerzÅ‘" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 msgid "Clear data" msgstr "Adatok törlése" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "Felhasználói beépülÅ‘k" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 msgid "Enable selected plugins" msgstr "Kiválasztott beépülÅ‘k engedélyezése" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "Érvénytelen jelszó" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "Érvénytelen jelszó" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "Egyéni CSS deklarációkkal itt felülbÃrálhatja a kiválasztott téma szÃneit, betűtÃpusait és elrendezését. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Ez a fájl</a> használható kiindulásként." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Profil létrehozás" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 msgid "(active)" msgstr "(aktÃv)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "EltávolÃtja a kiválasztott profilokat?" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Profil aktiválás" @@ -2209,239 +2244,265 @@ msgstr "Profil aktiválás" msgid "Check to enable field" msgstr "Jelölje be a mezÅ‘ engedélyezéséhez" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "HÃrcsatorna cÃme" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "FrissÃtés" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Régi hÃrek törlése:" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "<b>Megjegyzés:</b> ha a hÃrcsatorna megköveteli a hitelesÃtést (kivéve a Twitter csatornákat), ki kell tölteni a bejelentkezési információkat." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "Elrejtés a Népszerű hÃrcsatornákból" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "Hozzáadás az e-mail összefoglalóhoz" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Kép csatolmányokat mindig jelenÃtse meg" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "Ne ágyazza be a képeket" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Képek helyi tárolása" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "Frissült hÃrek megjelölése olvasatlanként" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Ikon" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Csere" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "Újra feliratkozás a push frissÃtésekre" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "VisszaállÃtja a PubSubHubbub feliratkozást a push-engedélyezett hÃrcsatornákhoz." -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "Kész." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Hibás hÃrcsatornák" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "InaktÃv hÃrcsatornák" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Kijelölt hÃrcsatornák szerkeztése" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 msgid "Batch subscribe" msgstr "Kötegelt feliratkozás" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "Kategóriák" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "Kategória hozzáadás" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "Kijelölt eltávolÃtása" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "Üres kategóriák elrejtése/megjelenÃtése" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "További műveletek..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Kézi takarÃtás (régi hÃrek törlése)" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "HÃrcsatorna-adatok törlése" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "Az OPML használatával hÃrcsatornákat, szűrÅ‘ket, cÃmkéket és beállÃtásokat exportálhat, importálhat." -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "Csak a fÅ‘ beállÃtásprofilt lehet OPML használatával költöztetni." -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "OPML importálása" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "Fájlnév:" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "BeállÃtásokkal együtt" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "Exportálás OPML-be" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "Az OPML nyilvánosságra hozható és bárki feliratkozhat rá, aki ismeri az alábbi URL-t." -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "A publikált OPML nem tartalmazza a beállÃtásokat, az azonosÃtást igénylÅ‘ hÃrcsatornákat és az Népszerű hÃrcsatornákból elrejtetteket." -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "Publikus OPML URL" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "Publikált OPML URL mejelenÃtése" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Firefox integráció" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "Ez a Tiny Tiny RSS oldal beállÃtható a Firefox böngészÅ‘ alapértelmezett hÃrcsatorna-olvasójaként. Ehhez kattintson az alábbi linkre!" -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Kattintson ide az oldal hÃrcsatorna-olvasóként való beállÃtásához!" -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" msgstr "Publikált és megosztott hÃrek / Generált hÃrcsatornák" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "Publikált hÃrek és generált hÃrcsatornák" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "A program a publikált hÃrekbÅ‘l egy publikus RSS hÃrcsatornát készÃt, amelyre bárki feliratkozhat, aki tudja a lenti cÃmet." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "URL megjelenÃtés" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "Minden generált URL törlése" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "URL alapján megosztott hÃrek" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "Itt minden egyedi URL-el megosztott hÃrt le lehet tiltani." -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "Minden hÃr megosztásának visszavonása" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "Ezek a hÃrcsatornák 3 hónapja nem frissültek új tartalommal (régebbiek elöl):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "Kattintson a hÃrcsatorna szerkesztéséhez" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "Leiratkozás a kiválasztott hÃrcsatornákról" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Váratlan hibák miatt ezek a hÃrcsatornák nem frissültek:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "Soronként egy érvényes RSS hÃrcsatornát adjon meg" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "Feliratkozás hÃrcsatornákra, soronként egy" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "Ez a hÃrcsatorna azonosÃtást igényel." -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +#, fuzzy +msgid "Refresh" +msgstr "Friss" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +#, fuzzy +msgid "Filename" +msgstr "Fájlnév:" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Dátum" + +#: plugins/digest/digest_body.php:57 #, fuzzy msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" @@ -2449,32 +2510,32 @@ msgstr "" "\t\t\taz alakalmazás megfelelÅ‘ működéséhez. Kérem ellenÅ‘rizze\n" "\t\t\tböngészÅ‘je beállÃtásait." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Üdv," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "Alap változat" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "HÃr bezárása" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "Munkahelyen nem bitonságos (kattintson a váltáshoz)" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "NSFW beépülÅ‘" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "Munkahelyen nem biztonságos tartalmak cÃmkéi (vesszÅ‘vel elválasztva)" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 msgid "Configuration saved." msgstr "BeállÃtások elmentve." @@ -2490,17 +2551,17 @@ msgstr "A jelszó megváltoztatva." msgid "Old password is incorrect." msgstr "A régi jelszó helytelen." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "KezdÅ‘lap" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "Semmit sem találtam (kattintson az újratöltéshez)." @@ -2508,414 +2569,422 @@ msgstr "Semmit sem találtam (kattintson az újratöltéshez)." msgid "Open regular version" msgstr "Szokásos verzió használata" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "Kategóriák engedélyezése" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "BE" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "KI" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "Tallózás a kategóriákban mint a könyvtárakban" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "Képek mejelenÃtése a hÃrekben" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "Olvasott hÃrek és hÃrcsatornák elrejtése" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "HÃrcsatornák rendezése olvasatlan hÃrek száma szerint" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[TovábbÃtva]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 msgid "Multiple articles" msgstr "Többszörös hÃrek" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "A levelezÅ‘program használatával való továbbÃtáshoz kattintson az alábbi linkre:" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 msgid "Forward selected article(s) by email." msgstr "Kijelölt hÃrek továbbÃtása e-mailben." -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "A levél elküldése elÅ‘tt lehetÅ‘ség van az üzenet szerkesztésére." -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 msgid "Close this dialog" msgstr "Ablak bezárása" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "Húzza a linket a böngészÅ‘ eszköztára alá, nyissa meg a böngészÅ‘jében a hÃrcsatornát és kattintson a linkre a feliratkozáshoz." -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "Feliratkozás %s hÃrcsatornára a Tiny Tiny RSS-ben?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "Feliratkozás a Tiny Tiny RSS-ben?" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "Import és export" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "HÃr archÃvum" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "A biztonság kedvéért exportálhatja és importálhatja a csillagozott és az archivált hÃreket a tt-rss költözések között." -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "Adataim expotálása" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importálás" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "Nem sikerült az importálás: érvénytelen séma verzió." -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "Nem sikerült az importálás: ismeretlen dokumentum formátum." -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, fuzzy, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "Megjegyzés" msgstr[1] "Megjegyzés" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "" msgstr[1] "" -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, fuzzy, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "Nincs kiválasztott hÃrcsatorna." msgstr[1] "Nincs kiválasztott hÃrcsatorna." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "Az XML dokumentum nem tölthetÅ‘ be." -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "Adatok elÅ‘készÃtése" -#: plugins/import_export/init.php:423 -#, fuzzy, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." msgstr "" -"Nem lehet feltölteni a fájlt. A php.ini fájlban be kell állÃtani az upload_max_filesize értékét\n" -"\t\t\t\t jelenlegi érték = %s" -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "Feladó:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "CÃmzett:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Tárgy:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "Email küldés" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 msgid "Edit article note" msgstr "Megjegyzés" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "Példa ablak" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "Példa érték" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "Érték megadás" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "" - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "Linkelt" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "Pédány" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "Példány URL" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 msgid "Access key:" msgstr "Hozzáférési kulcs:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "Hozzáférési kulcs" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "Egy hozzáférési kulcs használata minden linkelt példányhoz." -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 msgid "Generate new key" msgstr "Új kulcs generálása" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "Link példány" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "A Népszerű hÃrcsatornák megosztásához csatlakoztathat másik Tiny Tiny RSS példányokat ehhez. A Tiny Tiny RSS ezen példányához való kapcsolódáshoz ez az URL használható:" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "Utoljára belépve" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "Ãllapot" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "Tárolt hÃrcsatornák" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Link létrehozás" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "Megosztás URL-el" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "Ezt a hÃrt megoszthatja a következÅ‘ egyedi URL segÃtségével:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "Tiny Tiny RSS frissÃtése" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "A Tiny Tiny RSS telepÃtés naprakész." -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 #, fuzzy msgid "Do not close this dialog until updating is finished." msgstr "Ne zárja be amÃg a frissÃtés be nem fejezÅ‘dik. A folytatás elÅ‘tt mentse el a tt-rss könyvtárának tartalmát." -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." msgstr "FrissÃtésre kész." -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" msgstr "FrissÃtés indtása" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Minden hÃrt megjelöl olvasottként itt: %s?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 #, fuzzy msgid "Mark all articles in %s older than 1 day as read?" msgstr "Minden hÃrt megjelöl olvasottként itt: %s?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 #, fuzzy msgid "Mark all articles in %s older than 1 week as read?" msgstr "Minden hÃrt megjelöl olvasottként itt: %s?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 #, fuzzy msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "Minden hÃrt megjelöl olvasottként itt: %s?" -#: js/functions.js:92 +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "" + +#: js/functions.js:107 msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "Biztos, hogy be akarja jelenteni ezt a hibát a tt-rss.org oldalon? A jelentés tartalmazni a fogja a böngészÅ‘ információit. Az IP cÃme el lesz tárolva az adatbázisban." -#: js/functions.js:214 -msgid "close" -msgstr "" +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "Kattintson a megállÃtáshoz" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "" -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "EltávolÃtja a hÃrcsatorna tárolt ikonját?" -#: js/functions.js:697 +#: js/functions.js:723 #, fuzzy msgid "Removing feed icon..." msgstr "EltávolÃtja a hÃrcsatorna tárolt ikonját?" -#: js/functions.js:702 +#: js/functions.js:728 #, fuzzy msgid "Feed icon removed." msgstr "HÃrcsatorna nem található" -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "Kérem válasszon egy feltöltendÅ‘ képet." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "Új ikon tölt fel ehhez a hÃrcsatornához?" -#: js/functions.js:727 +#: js/functions.js:753 #, fuzzy msgid "Uploading, please wait..." msgstr "Betöltés, kérem várjon..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "Adja meg cÃmke nevét:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "CÃmke létrehozása sikertelen: nincs megadva név." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "Feliratkozás hÃrcsatornára" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "Feliratkozva ide: %s" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "A megadott URL érvénytelennek tűnik." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "A megadott URL nem tartalmaz hÃrcsatornákat." -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "Kijelölt hÃrcsatornák szerkeztése" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "A megadott URL nem tölthetÅ‘ be: %s" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "Már feliratkozott erre a hÃrcsatornára." @@ -2942,7 +3011,7 @@ msgid "Subscription reset." msgstr "Feliratkozás hÃrcsatornára..." #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "Leiratkozik innen: %s?" @@ -2950,72 +3019,72 @@ msgstr "Leiratkozik innen: %s?" msgid "Removing feed..." msgstr "" -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "Adja meg a kategória cÃmét:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "Új hÃrszolgáltatási cÃm generálásása ehhez a hÃrcsatornához?" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "" -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "Ezt a hÃrcsatornatÃpust nem szerkesztheted." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "HÃrcsatorna szerkesztése" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 #, fuzzy msgid "Saving data..." msgstr "Adatok mentése" -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "További hÃrcsatornák" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Nincs kiválasztott hÃrcsatorna." -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "EltávolÃtja a kijelölt hÃrcsatornákat az archÃvumból? A tárolt hÃrekkel rendelkezÅ‘ hÃrcsatornák nem lesznek törölve." -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "HÃrcsatornák frissÃtési hibával" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "EltávolÃtja a kiválasztott hÃrcsatornákat?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 #, fuzzy msgid "Removing selected feeds..." msgstr "EltávolÃtja a kiválasztott hÃrcsatornákat?" -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Súgó" @@ -3071,7 +3140,7 @@ msgid "Removing selected labels..." msgstr "EltávolÃtja a kiválasztott cÃmkéket?" #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "Nincs kiválasztott cÃmke." @@ -3201,332 +3270,331 @@ msgstr "ElÅ‘ször válasszon egy OPML fjlt." msgid "Importing, please wait..." msgstr "Betöltés, kérem várjon..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "VisszaállÃtja a gyári beállÃtásokat?" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "EltávolÃtja %s kategóriát? Minden tartalmazott hÃrcsatorna a Kategorizálatlanba fog kerülni." -#: js/prefs.js:1088 +#: js/prefs.js:1102 #, fuzzy msgid "Removing category..." msgstr "Kategória eltávolÃtása" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Kiválasztott kategóriák eltávolÃtása?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 #, fuzzy msgid "Removing selected categories..." msgstr "Kiválasztott kategóriák eltávolÃtása?" -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Nincs kategória kiválaszta." -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "Kategória cÃme:" -#: js/prefs.js:1137 +#: js/prefs.js:1151 #, fuzzy msgid "Creating category..." msgstr "SzűrÅ‘ létrehozása..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "HÃrcsatornák frissÃtések nélkül" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "Lecseréli a jelenlegi OPML hÃrcsatornája cÃmét egy újra?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 #, fuzzy msgid "Clearing feed..." msgstr "HÃrcsatorna-adatok törlése" -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Újrapontszámozza a hÃreket a kijelölt hÃrcsatornákban?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 #, fuzzy msgid "Rescoring selected feeds..." msgstr "Újrapontszámozza a hÃreket a kijelölt hÃrcsatornákban?" -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "Újrapontoz minden cÃkket? Ez a művelet hosszú ideig is eltarthat." -#: js/prefs.js:1348 +#: js/prefs.js:1362 #, fuzzy msgid "Rescoring feeds..." msgstr "HÃrcsatorna újrapontozása" -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "VisszaállÃtja a kijelölt cÃmkék szÃnét az alapértelmezettre?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "BeállÃtási profilok" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "EltávolÃtja a kijelölt profilokat? Az aktÃv és az alapértelmezett profil nem lesz törölve." -#: js/prefs.js:1414 +#: js/prefs.js:1428 #, fuzzy msgid "Removing selected profiles..." msgstr "EltávolÃtja a kiválasztott profilokat?" -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "Nincsenek kiválasztott profilok." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 msgid "Activate selected profile?" msgstr "Aktiválja a kiválasztott profilt?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "Válasszon egy aktiválandó profilt." -#: js/prefs.js:1458 +#: js/prefs.js:1472 #, fuzzy msgid "Creating profile..." msgstr "Profil létrehozás" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "Ez érvénytelenÃteni fog minden korábban generált hÃrcsatorna URL-t. Folytatja?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 msgid "Clearing URLs..." msgstr "" -#: js/prefs.js:1524 +#: js/prefs.js:1538 #, fuzzy msgid "Generated URLs cleared." msgstr "Új URL generálás" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "Ez érvénytelenÃteni fog minden korábban megosztott hÃr URL-t. Folytatja?" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "CÃmke SzerkesztÅ‘" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "Feliratkozás a hÃrcsatornákra..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "Törli a beépülÅ‘ tárolt adatait?" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Minden hÃrt megjelöl olvasottként?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 #, fuzzy msgid "Marking all feeds as read..." msgstr "Minden hÃrcsatornát olvasottként jelöl" -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." msgstr "ElÅ‘ször engedélyezze a mail beépülÅ‘t." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 msgid "Please enable embed_original plugin first." msgstr "ElÅ‘ször engedélyezze az embed_original beépülÅ‘t." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "Elemek kijelölése cÃmkék szerint" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "EbbÅ‘l a kategóriából nem ." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Válasszon hÃrcsatorná(ka)t!" -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "Ez a hÃrcsatorna tÃpust nem lehet újraponszámozni." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "Újrapontszámozza %s hÃreit?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 #, fuzzy msgid "Rescoring articles..." msgstr "HÃrek újrapontszámozása" -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "Új verzió érhetÅ‘ el." -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" msgstr "Keresés megszakÃtása" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Csillagot levesz a hÃrrÅ‘l" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "HÃr csillagozása" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Publikálás visszavonása" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "HÃr publikálása" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "Nincs kiválasztott hÃr." +msgstr[1] "Nincs kiválasztott hÃr." + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Nincsen kiválasztott hÃr." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 #, fuzzy msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "%d kijelölt hÃr törlése innen: %s?" msgstr[1] "%d kijelölt hÃr törlése innen: %s?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 #, fuzzy msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "Törli a %d kijelölt hÃrt?" msgstr[1] "Törli a %d kijelölt hÃrt?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 #, fuzzy msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "%d kijelölt hÃr archiválása inne: %s?" msgstr[1] "%d kijelölt hÃr archiválása inne: %s?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 #, fuzzy msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "%d archivált hÃr visszaállÃtása?" msgstr[1] "%d archivált hÃr visszaállÃtása?" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 #, fuzzy msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "%d kijelölt hÃr megjelölése olvasottként itt: %s?" msgstr[1] "%d kijelölt hÃr megjelölése olvasottként itt: %s?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "HÃr cÃmkéinek szerkesztése" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 #, fuzzy msgid "Saving article tags..." msgstr "HÃr cÃmkéinek szerkesztése" -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Nincs kiválasztott hÃr." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Nincs megjelölendÅ‘ hÃr." -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 #, fuzzy msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "%d hÃr megjelölése olvasottként?" msgstr[1] "%d hÃr megjelölése olvasottként?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "Eredeti hÃr megjelenÃtése" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 msgid "Display article URL" msgstr "URL megjelenÃtése" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 #, fuzzy msgid "Toggle marked" msgstr "Csillagoz" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "CÃmke hozzáadása" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "CÃmke eltávolÃtás" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "Lejátszás..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "Kattintson a megállÃtáshoz" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "Adjon meg egy új pontszámot a kijelölt hÃrekhez:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "Adjon meg egy új pontszámot a hÃrhez:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 msgid "Article URL:" msgstr "HÃr URL:" @@ -3637,6 +3705,36 @@ msgstr "Megosztás URL-el" msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." msgstr "Az élÅ‘ frissÃtés még kisérleti fázisban van. A folytatás elÅ‘tt mentse el a tt-rss könyvtárának tartalmát. A folytatáshoz Ãrja be a 'yes' szót." +#~ msgid "Switch to digest..." +#~ msgstr "Váltás áttekintÅ‘ módba..." + +#~ msgid "Show tag cloud..." +#~ msgstr "CÃmkefelhÅ‘ megjelenÃtése..." + +#~ msgid "Click to play" +#~ msgstr "Kattintson a lejátszáshoz" + +#~ msgid "Play" +#~ msgstr "Lejátszás" + +#~ msgid "Visit the website" +#~ msgstr "Weboldal megtekintése" + +#~ msgid "Select theme" +#~ msgstr "StÃlusválasztó" + +#~ msgid "I have scanned the code and would like to enable OTP" +#~ msgstr "Beszkenneltem a kódot és be szeretném kapcsolni az OTP-t" + +#~ msgid "Playing..." +#~ msgstr "Lejátszás..." + +#, fuzzy +#~ msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#~ msgstr "" +#~ "Nem lehet feltölteni a fájlt. A php.ini fájlban be kell állÃtani az upload_max_filesize értékét\n" +#~ "\t\t\t\t jelenlegi érték = %s" + #~ msgid "Default interval between feed updates" #~ msgstr "HÃrcsatorna frissÃtések közti idÅ‘" @@ -3731,10 +3829,6 @@ msgstr "Az élÅ‘ frissÃtés még kisérleti fázisban van. A folytatás elÅ‘tt #~ msgstr "A dátum szintaxisa helytelen." #, fuzzy -#~ msgid "Refresh" -#~ msgstr "Friss" - -#, fuzzy #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "(%d hÃrcsatorna)" @@ -3749,9 +3843,6 @@ msgstr "Az élÅ‘ frissÃtés még kisérleti fázisban van. A folytatás elÅ‘tt #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "Minden látható hÃrt megjelöl olvasottként itt: %s?" -#~ msgid "Date" -#~ msgstr "Dátum" - #~ msgid "Score" #~ msgstr "Pontszám" diff --git a/locale/it_IT/LC_MESSAGES/messages.mo b/locale/it_IT/LC_MESSAGES/messages.mo Binary files differindex b252f8b94..8c19af828 100644 --- a/locale/it_IT/LC_MESSAGES/messages.mo +++ b/locale/it_IT/LC_MESSAGES/messages.mo diff --git a/locale/it_IT/LC_MESSAGES/messages.po b/locale/it_IT/LC_MESSAGES/messages.po index c819e38fa..8206a3133 100644 --- a/locale/it_IT/LC_MESSAGES/messages.po +++ b/locale/it_IT/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tiny Tiny RSS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: 2012-02-14 08:31+0000\n" "Last-Translator: gothfox <cthulhoo@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,88 +18,89 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Utilizza predefiniti" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Non pulire mai" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "Vecchi di 1 settimana" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "Vecchi di 2 settimane" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "Vecchi di 1 mese" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "Vecchi di 2 mesi" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "Vecchi di 3 mesi" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Intervallo predefinito" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "Disabilitare aggiornamenti" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "Ogni 15 minuti" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "Ogni 30 minuti" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "A ogni ora" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "Ogni 4 ore" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "Ogni 12 ore" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "Giornalmente" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "Settimanalmente" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "Utente" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Utente con più autorizzazioni" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Amministratore" @@ -155,352 +156,348 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "Test di sanitizzazione dell'SQL fallito; controllare il database e la configurazione del PHP" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Caricamento, attendere prego..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Contrai elenco notiziari" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "Mostra articoli" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Adattivo" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Tutti gli articoli" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "Con stella" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "Pubblicati" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "Non letti" -#: index.php:177 +#: index.php:170 #, fuzzy msgid "Unread First" msgstr "Non letti" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Ignora punteggio" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "Ordina articoli" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Predefinito" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "Titolo" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Segna come letto" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "È disponibile la nuova versione di Tiny Tiny RSS." -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Azioni..." -#: index.php:233 +#: index.php:225 #, fuzzy msgid "Preferences..." msgstr "Preferenze" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Cerca..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Azioni notiziari:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "Sottoscrivi il notiziario..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Modifica questo notiziario..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Cambia punteggio notiziario" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Annulla sottoscrizione" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Tutti i notiziari:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Visualizza/Nascondi notiziari letti" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Altre azioni:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "Passa al sommario..." - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "Mostra nuvola etichette..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 #, fuzzy msgid "Toggle widescreen mode" msgstr "Inverti con stella" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "" -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Crea etichetta..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Crea filtro..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "Aiuto scorciatoie da tastiera" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Esci" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Preferenze" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Scorciatoie da tastiera" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Esci dalle preferenze" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Notiziari" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "Filtri" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Etichette" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Utenti" -#: register.php:186 +#: prefs.php:132 +msgid "System" +msgstr "" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "Crea un nuovo utente" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "La registrazione di nuovi utenti è disabilitata dall'amministratore." -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Ritorna a Tiny Tiny RSS" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "La password temporanea verrà inviata all'email speficiata. Utenti, che non eseguono l'accesso almeno una volta, vengono cancellati automaticamente 24 ore dopo che la password temporanea è stata inviata." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Accesso desiderato:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "Controlla disponibilità " -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "Email:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Quanto fa due più due:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Invia registrazione" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "Le informazioni di registrazione sono incomplete." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Il nome utente esiste già ." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "Registrazione fallita." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Utente creato con successo." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "La registrazione di nuovi utenti è attualmente chiusa." -#: update.php:56 +#: update.php:55 #, fuzzy msgid "Tiny Tiny RSS data update script." msgstr "Il database di Tiny Tiny RSS è aggiornato." #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Senza categoria" @@ -515,340 +512,330 @@ msgstr[1] "%d articoli archiviati" msgid "No feeds found." msgstr "Nessun notiziario trovato." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Speciale" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Tutti i notiziari" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Articoli con stella" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Articoli pubblicati" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Articoli nuovi" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "Tutti gli articoli" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "Articoli archiviati" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Navigazione" -#: include/functions.php:1912 +#: include/functions.php:1958 #, fuzzy msgid "Open next feed" msgstr "Su lettura passare al prossimo notiziario" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "" -#: include/functions.php:1914 +#: include/functions.php:1960 #, fuzzy msgid "Open next article" msgstr "Apri articolo di origine" -#: include/functions.php:1915 +#: include/functions.php:1961 #, fuzzy msgid "Open previous article" msgstr "Apri articolo di origine" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "" -#: include/functions.php:1918 +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" msgstr "" -#: include/functions.php:1919 +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" msgstr "" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Mostra il dialogo di ricerca" -#: include/functions.php:1921 +#: include/functions.php:1967 #, fuzzy msgid "Article" msgstr "Tutti gli articoli" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Inverti con stella" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "Inverti pubblicati" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Inverti non letti" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Modifica etichette" -#: include/functions.php:1926 +#: include/functions.php:1972 #, fuzzy msgid "Dismiss selected" msgstr "Rimuovi gli articoli selezionati" -#: include/functions.php:1927 +#: include/functions.php:1973 #, fuzzy msgid "Dismiss read" msgstr "Rimuovi articoli letti" -#: include/functions.php:1928 +#: include/functions.php:1974 #, fuzzy msgid "Open in new window" msgstr "Aprire gli articoli in una nuova finestra" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 msgid "Mark below as read" msgstr "" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 msgid "Mark above as read" msgstr "" -#: include/functions.php:1931 +#: include/functions.php:1977 #, fuzzy msgid "Scroll down" msgstr "Fatto tutto." -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "" -#: include/functions.php:1933 +#: include/functions.php:1979 #, fuzzy msgid "Select article under cursor" msgstr "Seleziona l'articolo sotto il cursore del mouse" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "" -#: include/functions.php:1935 +#: include/functions.php:1981 #, fuzzy msgid "Close/collapse article" msgstr "Cambio punteggio degli articoli" -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" msgstr "Inverti pubblicati" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 #, fuzzy msgid "Toggle embed original" msgstr "Inverti pubblicati" -#: include/functions.php:1939 +#: include/functions.php:1985 #, fuzzy msgid "Article selection" msgstr "Azioni sull'articolo attivo" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "" -#: include/functions.php:1941 +#: include/functions.php:1987 #, fuzzy msgid "Select unread" msgstr "Inverti non letti" -#: include/functions.php:1942 +#: include/functions.php:1988 #, fuzzy msgid "Select starred" msgstr "Imposta con stella" -#: include/functions.php:1943 +#: include/functions.php:1989 #, fuzzy msgid "Select published" msgstr "Articoli pubblicati" -#: include/functions.php:1944 +#: include/functions.php:1990 #, fuzzy msgid "Invert selection" msgstr "Selezione:" -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Notiziario" -#: include/functions.php:1947 +#: include/functions.php:1993 #, fuzzy msgid "Refresh current feed" msgstr "Aggiorna notiziario attivo" -#: include/functions.php:1948 +#: include/functions.php:1994 #, fuzzy msgid "Un/hide read feeds" msgstr "Visualizza/Nascondi notiziari letti" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "Sottoscrivi il notiziario" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Modifica notiziario" -#: include/functions.php:1952 +#: include/functions.php:1998 #, fuzzy msgid "Reverse headlines" msgstr "Invertire l'ordine dei sommari" -#: include/functions.php:1953 +#: include/functions.php:1999 #, fuzzy msgid "Debug feed update" msgstr "Disabilitare aggiornamenti" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Segna tutti i notiziari come letti" -#: include/functions.php:1955 +#: include/functions.php:2001 #, fuzzy msgid "Un/collapse current category" msgstr "Mettere nella categoria:" -#: include/functions.php:1956 +#: include/functions.php:2002 #, fuzzy msgid "Toggle combined mode" msgstr "Inverti pubblicati" -#: include/functions.php:1957 +#: include/functions.php:2003 #, fuzzy msgid "Toggle auto expand in combined mode" msgstr "Inverti pubblicati" -#: include/functions.php:1958 +#: include/functions.php:2004 #, fuzzy msgid "Go to" msgstr "Vai a..." -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "Nuvola etichette" -#: include/functions.php:1965 +#: include/functions.php:2011 #, fuzzy msgid "Other" msgstr "Altri notiziari" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "Crea etichetta" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "Crea filtro" -#: include/functions.php:1968 +#: include/functions.php:2014 #, fuzzy msgid "Un/collapse sidebar" msgstr "Contrai la barra laterale" -#: include/functions.php:1969 +#: include/functions.php:2015 #, fuzzy msgid "Show help dialog" msgstr "Mostra il dialogo di ricerca" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "Fare clic per riprodurre" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "Riproduci" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "nessuna etichetta" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Modifica le etichette per questo articolo" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 msgid "Originally from:" msgstr "Originariamente da:" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 msgid "Feed URL" msgstr "URL del notiziario" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -860,80 +847,83 @@ msgstr "URL del notiziario" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Chiudi questa finestra" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(modifica note)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "tipo sconosciuto" -#: include/functions.php:3742 +#: include/functions.php:3749 #, fuzzy msgid "Attachments" msgstr "Allegati:" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Accesso:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Password:" -#: include/login_form.php:197 +#: include/login_form.php:199 #, fuzzy msgid "I forgot my password" msgstr "Nome utente o password sbagliati" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Lingua:" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Profilo:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 msgid "Default profile" msgstr "Profilo predefinito" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Utilizzare minor traffico" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Accedi" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "La validazione della sessione è fallita (IP non corretto)" @@ -949,168 +939,168 @@ msgstr "Etichette per questo articolo (separate da virgole):" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "Salva" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Annulla" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 #, fuzzy msgid "Share with Tiny Tiny RSS" msgstr "Sottoscrive in Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 #, fuzzy msgid "Title:" msgstr "Titolo" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 #, fuzzy msgid "Content:" msgstr "Contenuto" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 #, fuzzy msgid "Labels:" msgstr "Etichette" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "" -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 #, fuzzy msgid "Not logged in" msgstr "Ultimo accesso" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Nome utente o password sbagliati" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Si ha già una sottoscrizione a <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Sottoscrizione avvenuta a <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Impossibile sottoscrivere <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, fuzzy, php-format msgid "No feeds found in <b>%s</b>." msgstr "Nessun notiziario trovato." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 #, fuzzy msgid "Multiple feed URLs found." msgstr "Nessun notiziario trovato." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Impossibile sottoscrivere <b>%s</b>.<br>Impossibile scaricare l'URL del notiziario." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "Sottoscrivi il notiziario selezionato" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Modifica opzioni di sottoscrizione" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 #, fuzzy msgid "Password recovery" msgstr "Password" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "" -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "Reimposta password" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "" -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 #, fuzzy msgid "Go back" msgstr "Sposta indietro" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Il livello di accesso non è sufficiente per eseguire questo script." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Aggiornatore database" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Effettuare gli aggiornamenti" @@ -1166,7 +1156,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "È possibile vedere questo notiziario come RSS utilizzando il seguente URL:" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "È disponibile una nuova versione di Tiny Tiny RSS (%s)." @@ -1176,7 +1166,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1188,116 +1178,122 @@ msgstr "Scarica" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "Visita il sito web" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "Ultimo aggiornamento:" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Visualizza come RSS del notiziario" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "Visualizza come RSS" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Seleziona:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "Tutti" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Inverti" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Nessuno" -#: classes/feeds.php:101 +#: classes/feeds.php:93 #, fuzzy msgid "More..." msgstr "%d altri..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Inverti selezione:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Selezione:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 #, fuzzy msgid "Set score" msgstr "Punteggio" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "Archivio" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "Sposta indietro" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "Elimina" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "Inoltra per email" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Notiziario:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "Notiziario non trovato." -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "Non pulire mai" + +#: classes/feeds.php:360 #, fuzzy, php-format msgid "Imported at %s" msgstr "Importa" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "segna come letto" @@ -1349,9 +1345,9 @@ msgid "Feed or site URL" msgstr "URL del notiziario" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "Mettere nella categoria:" @@ -1361,24 +1357,24 @@ msgstr "Notiziari disponibili" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "Autenticazione" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Accesso" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Password" @@ -1388,7 +1384,7 @@ msgstr "Questo notiziario richiede l'autenticazione" #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "Sottoscrivi" @@ -1400,8 +1396,8 @@ msgstr "Altri notiziari" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "Cerca" @@ -1422,8 +1418,8 @@ msgstr "limite:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Rimuovi" @@ -1507,17 +1503,39 @@ msgstr "Crea filtro..." msgid "Processing category: %s" msgstr "Mettere nella categoria:" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "Errore: impossibile caricare l'articolo." + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Errore: caricare il file OPML." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "Errore: impossibile caricare l'articolo." + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Errore durante l'analisi del documento." #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "Il livello di accesso non è sufficiente per aprire questa scheda." @@ -1551,8 +1569,8 @@ msgid "Change password to" msgstr "Cambiare la password a" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Opzioni" @@ -1594,13 +1612,13 @@ msgstr "[tt-rss] Notifica di cambio password" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 msgid "Select" msgstr "Seleziona" @@ -1614,7 +1632,7 @@ msgstr "Dettagli" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Modifica" @@ -1627,7 +1645,7 @@ msgid "Last login" msgstr "Ultimo accesso" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "Fare clic per modificare" @@ -1641,7 +1659,7 @@ msgstr "Nessun utente corrispondente trovato." #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Intestazione" @@ -1680,42 +1698,42 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "" #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Corrisponde" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 #, fuzzy msgid "Apply actions" msgstr "Azioni notiziari" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "Abilitato" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 msgid "Match any rule" msgstr "" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 #, fuzzy msgid "Inverse matching" msgstr "Corrispondenza inversa" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "Prova" @@ -1734,64 +1752,64 @@ msgid "Combine" msgstr "" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "Reimposta ordinamento" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Cambio punteggio degli articoli" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Crea" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "al campo" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "in" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #, fuzzy msgid "Save rule" msgstr "Salva" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 msgid "Add rule" msgstr "" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Esegui azione" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "con parametri:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #, fuzzy msgid "Save action" msgstr "Riquadro azioni" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 #, fuzzy msgid "Add action" msgstr "Azioni notiziari" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 #, fuzzy msgid "[No caption]" msgstr "Intestazione" @@ -1942,7 +1960,7 @@ msgid "Purge unread articles" msgstr "Eliminare articoli non letti" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Invertire l'ordine del sommario (prima i più vecchi)" @@ -1984,7 +2002,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "Toglie tutte le etichette HTML più comuni durante la lettura degli articoli." #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 msgid "Customize stylesheet" msgstr "Personalizza il foglio di stile" @@ -1993,7 +2011,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "Personalizza a piacimento il foglio di stile CSS" #: classes/pref/prefs.php:55 -msgid "User timezone" +#, fuzzy +msgid "Time zone" msgstr "Fuso orario dell'utente" #: classes/pref/prefs.php:56 @@ -2005,22 +2024,27 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Seleziona tema" +#, fuzzy +msgid "Language" +msgstr "Lingua:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "La vecchia password non può essere vuota." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "La nuova password non può essere vuota." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Le password inserite non corrispondono." @@ -2028,228 +2052,238 @@ msgstr "Le password inserite non corrispondono." msgid "Function not supported by authentication module." msgstr "" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "La configurazione è stata salvata." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Opzione sconosciuta: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "I dati personali sono stati salvati." -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 #, fuzzy msgid "Personal data / Authentication" msgstr "Autenticazione" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "Nome completo" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "Email" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Livello di accesso" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "Salva dati" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "La password è impostata al valore predefinito: cambiarla." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Vecchia password" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Nuova password" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Conferma password" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Cambia password" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 #, fuzzy msgid "Enter your password" msgstr "Nome utente o password sbagliati" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 #, fuzzy msgid "Disable OTP" msgstr "Disabilitare aggiornamenti" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "" -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "Inserire il titolo della categoria:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 #, fuzzy msgid "Enable OTP" msgstr "Abilitato" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "Personalizza" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "Registro" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "Pulisci" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Salva configurazione" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 #, fuzzy msgid "Save and exit preferences" msgstr "Esci dalle preferenze" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "Gestisci profili" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Reimposta ai valori predefiniti" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 msgid "Description" msgstr "" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 #, fuzzy msgid "Clear data" msgstr "Pulisci i dati del notiziario" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 #, fuzzy msgid "Enable selected plugins" msgstr "Abilitare le categorie dei notiziari" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "Nome utente o password sbagliati" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 #, fuzzy msgid "Incorrect password" msgstr "Nome utente o password sbagliati" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "Si possono cambiare i colori, i caratteri e la disposizione del tema correntemente selezionato attraverso le dichiarazioni CSS personalizzate. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Questo file</a> può essere utilizzato come base." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Crea profilo" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 msgid "(active)" msgstr "(attivo)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "Rimuovi i profili selezionati" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Attiva profilo" @@ -2257,251 +2291,276 @@ msgstr "Attiva profilo" msgid "Check to enable field" msgstr "Spuntare per abilitare il campo" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "Titolo notiziario" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "Aggiorna" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Eliminazione articoli:" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "<b>Suggerimento:</b> occorre riempire la informazioni di accesso se il proprio notiziario richiede l'autenticazione, eccetto per i notiziari di Twitter." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "Nascondere nei notiziari popolari" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "Includere nell'email riassunto" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Mostrare sempre le immagini allegate" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Memorizzare le immagini localmente" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "Segnare gli articoli aggiornati come non letti" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Icona" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Sostituisci" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "Sottoscrivi per inviare aggiornamenti" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "Reimposta lo stato di sottoscrizione a PubSubHubbub per notiziari abilitati all'invio." -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "Fatto tutto." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Notiziari con errori" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 #, fuzzy msgid "Inactive feeds" msgstr "Aggiorna notiziario attivo" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Modifica i notiziari selezionati" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 msgid "Batch subscribe" msgstr "" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 #, fuzzy msgid "Categories" msgstr "Categorie notiziario" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 #, fuzzy msgid "Add category" msgstr "Modifica categorie" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 #, fuzzy msgid "Remove selected" msgstr "Rimuovere i notiziari selezionati?" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 #, fuzzy msgid "(Un)hide empty categories" msgstr "Modifica categorie" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "Altre azioni..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Eliminazione manuale" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "Pulisci i dati del notiziario" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "" -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "" -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 #, fuzzy msgid "Import my OPML" msgstr "Importazione OPML..." -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 #, fuzzy msgid "Filename:" msgstr "Nome completo" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 #, fuzzy msgid "Include settings" msgstr "Includere nell'email riassunto" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 #, fuzzy msgid "Export OPML" msgstr "Importazione OPML..." -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "OPML può essere pubblicato e può essere sottoscritto da chiunque conosca l'URL seguente." -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "" -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "URL OPML pubblico" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 #, fuzzy msgid "Display published OPML URL" msgstr "URL OPML pubblico" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Integrazione con Firefox" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "Questo sito di Tiny Tiny RSS può essere utilizzato come lettore di notiziari di Firefox facendo clic sul collegamento qui sotto." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Fare clic qui per registrare questo sito come lettore di notiziari." -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 #, fuzzy msgid "Published & shared articles / Generated feeds" msgstr "Articoli pubblicati e notiziari generati" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "Articoli pubblicati e notiziari generati" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "Gli articoli pubblicati vengono esportati come un notiziario pubblico e possono essere sottoscritti da chiunque conosca l'URL specificato qui sotto." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "Visualizza URL" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "Pulisci tutti gli URL generati" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "" -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 #, fuzzy msgid "Unshare all articles" msgstr "Togli la stella all'articolo" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "Questi notiziari non sono stati aggiornati con nuovi contenuti da 3 mesi (più vecchi prima):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "Fare clic per modificare il notiziario" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "Annulla la sottoscrizione ai notiziari selezionati" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Questi notiziari non sono stati aggiornati a causa di errori:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "" -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +#, fuzzy +msgid "Filename" +msgstr "Nome completo" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Data" + +#: plugins/digest/digest_body.php:57 #, fuzzy msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" @@ -2509,32 +2568,32 @@ msgstr "" "\t\t\tda questa applicazione per funzionare correttamente. Controllare\n" "\t\t\tle impostazioni del browser." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Salve," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 #, fuzzy msgid "Configuration saved." msgstr "La configurazione è stata salvata." @@ -2552,17 +2611,17 @@ msgstr "La password è stata cambiata" msgid "Old password is incorrect." msgstr "La vecchia password non è corretta." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "Casa" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "Non trovato (fare clic per ricaricare il notiziario)." @@ -2570,422 +2629,432 @@ msgstr "Non trovato (fare clic per ricaricare il notiziario)." msgid "Open regular version" msgstr "" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "Abilitare le categorie" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "Acceso" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "Spento" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "Sfoglia le categorie come cartelle" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "Mostrare le immagini negli articoli" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 #, fuzzy msgid "Hide read articles and feeds" msgstr "Articoli pubblicati e notiziari generati" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "Ordinare i notiziari per numero di non letti" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[Inoltrato]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 msgid "Multiple articles" msgstr "Articoli multipli" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 #, fuzzy msgid "Forward selected article(s) by email." msgstr "Inoltra l'articolo per email" -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 #, fuzzy msgid "Close this dialog" msgstr "Chiudi questo pannello" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "Trascinare il collegamento seguente nella barra degli strumenti del browser; aprire il notiziario al quale si è interessati nel browser a fare clic sul collegamento per sottoscriverlo." -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "Sottoscrivere %s in Tiny Tiny RSS?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "Sottoscrive in Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 #, fuzzy msgid "Article archive" msgstr "Data dell'articolo" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "" -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importa" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "" -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "" -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, fuzzy, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "Modifica note articolo" msgstr[1] "Modifica note articolo" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, fuzzy, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "già importato." msgstr[1] "già importato." -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, fuzzy, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "Nessun notiziario selezionato." msgstr[1] "Nessun notiziario selezionato." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "" -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." msgstr "" -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "Da:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "A:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Oggetto:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "Invia email" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 msgid "Edit article note" msgstr "Modifica note articolo" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 #, fuzzy msgid "Set value" msgstr "Imposta con stella" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "" - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "Collegato" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "Istanza" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "URL dell'istanza" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 msgid "Access key:" msgstr "Chiave di accesso:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "Chiave di accesso" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "Utilizzare una chiave di accesso per entrambe le istanze collegate." -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 msgid "Generate new key" msgstr "Genera nuova chiave" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "Collega istanza" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "Impossibile connettere altre istanze di Tiny Tiny RSS a questa per condividere i notiziari popolari. Collegare questa istanza di Tiny Tiny RSS utilizzando questo URL:" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "Ultimo connesso" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "Notiziari memorizzati" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Crea collegamento" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 #, fuzzy msgid "You can share this article by the following unique URL:" msgstr "È possibile vedere questo notiziario come RSS utilizzando il seguente URL:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 #, fuzzy msgid "Update Tiny Tiny RSS" msgstr "Ritorna a Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 #, fuzzy msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Il database di Tiny Tiny RSS è aggiornato." -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." msgstr "" -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 #, fuzzy msgid "Ready to update." msgstr "Ultimo aggiornamento:" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 #, fuzzy msgid "Start update" msgstr "Ultimo aggiornamento:" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Segnare tutti gli articoli in «%s» come letti?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 #, fuzzy msgid "Mark all articles in %s older than 1 day as read?" msgstr "Segnare tutti gli articoli in «%s» come letti?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 #, fuzzy msgid "Mark all articles in %s older than 1 week as read?" msgstr "Segnare tutti gli articoli in «%s» come letti?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 #, fuzzy msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "Segnare tutti gli articoli in «%s» come letti?" -#: js/functions.js:92 +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "" + +#: js/functions.js:107 msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "Si vuole notificare questa eccezione a tt-rss.org? La notifica includerà le informazioni sul browser. L'IP verrà salvato in un database." -#: js/functions.js:214 -msgid "close" -msgstr "" +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "Fare clic per mettere in pausa" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "" -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "Rimuovi le icone salvate dei notiziari?" -#: js/functions.js:697 +#: js/functions.js:723 #, fuzzy msgid "Removing feed icon..." msgstr "Rimuovi le icone salvate dei notiziari?" -#: js/functions.js:702 +#: js/functions.js:728 #, fuzzy msgid "Feed icon removed." msgstr "Notiziario non trovato." -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "Selezionare un file immagine da caricare." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "Caricare una nuova icona per questo notiziario?" -#: js/functions.js:727 +#: js/functions.js:753 #, fuzzy msgid "Uploading, please wait..." msgstr "Caricamento, attendere prego..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "Inserire l'intestazione dell'etichetta:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "Impossibile creare l'etichetta: intestazione mancante." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "Sottoscrivi il notiziario" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "Sottoscrizione effettuata a «%s»" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "L'URL specifica sembra essere non valido." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "L'URL specificato non sembra contenere alcun notiziario." -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "Modifica i notiziari selezionati" + +#: js/functions.js:874 #, fuzzy msgid "Couldn't download the specified URL: %s" msgstr "Impossibile scaricare l'URL specificato." +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "La sottoscrizione a questo notiziario è già stata effettuata." @@ -3014,7 +3083,7 @@ msgid "Subscription reset." msgstr "Sottoscrivi il notiziario..." #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "Annullare la sottoscrizione a «%s»?" @@ -3022,72 +3091,72 @@ msgstr "Annullare la sottoscrizione a «%s»?" msgid "Removing feed..." msgstr "" -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "Inserire il titolo della categoria:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "Generare un nuovo indirizzo per questo notiziario?" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "" -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "Impossibile modificare questo tipo di notiziario." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "Modifica notiziario" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 #, fuzzy msgid "Saving data..." msgstr "Salva dati" -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "Altri notiziari" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Nessun notiziario selezionato." -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "Rimuovere i notiziari selezionati dall'archivio? I notiziari con articoli archiviati non saranno rimossi." -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "Notiziari con errori di aggiornamento" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "Rimuovere i notiziari selezionati?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 #, fuzzy msgid "Removing selected feeds..." msgstr "Rimuovere i notiziari selezionati?" -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "" @@ -3146,7 +3215,7 @@ msgid "Removing selected labels..." msgstr "Rimuovere le etichette selezionate?" #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "Nessuna etichetta selezionata." @@ -3277,339 +3346,338 @@ msgstr "Scegliere prima un file OPML." msgid "Importing, please wait..." msgstr "Caricamento, attendere prego..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "Reimpostare ai valori predefiniti?" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "" -#: js/prefs.js:1088 +#: js/prefs.js:1102 #, fuzzy msgid "Removing category..." msgstr "Crea categoria" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Rimuovere le categorie selezionate?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 #, fuzzy msgid "Removing selected categories..." msgstr "Rimuovi le categorie selezionate" -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Nessuna categoria selezionata." -#: js/prefs.js:1133 +#: js/prefs.js:1147 #, fuzzy msgid "Category title:" msgstr "Categorie" -#: js/prefs.js:1137 +#: js/prefs.js:1151 #, fuzzy msgid "Creating category..." msgstr "Crea filtro..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "Notiziari senza aggiornamenti recenti" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "Sostituire l'indirizzo di pubblicazione OPML attuale con uno nuovo?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 #, fuzzy msgid "Clearing feed..." msgstr "Pulisci i dati del notiziario" -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Cambiare il punteggio agli articoli nel notiziario selezionato?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 #, fuzzy msgid "Rescoring selected feeds..." msgstr "Cambiare il punteggio agli articoli nel notiziario selezionato?" -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "Cambiare il punteggio a tutti i notiziari? Questa operazione può durare molto tempo." -#: js/prefs.js:1348 +#: js/prefs.js:1362 #, fuzzy msgid "Rescoring feeds..." msgstr "Cambia punteggio notiziario" -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "Reimpostare le etichette selezionate ai colori predefiniti?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Impostazioni dei profili" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "Rimuovere i profili selezionati? Il profilo attivo e quello predefinito non saranno rimossi." -#: js/prefs.js:1414 +#: js/prefs.js:1428 #, fuzzy msgid "Removing selected profiles..." msgstr "Rimuovi i profili selezionati" -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "Nessun profilo selezionato." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 msgid "Activate selected profile?" msgstr "Attivare il profilo selezionato?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "Scegliere un profilo da attivare" -#: js/prefs.js:1458 +#: js/prefs.js:1472 #, fuzzy msgid "Creating profile..." msgstr "Crea profilo" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "Questo invaliderà tutti gli URL di notiziari generati precedentemente. Continuare?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 msgid "Clearing URLs..." msgstr "" -#: js/prefs.js:1524 +#: js/prefs.js:1538 #, fuzzy msgid "Generated URLs cleared." msgstr "Genera nuovo URL" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Editor etichette" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "" -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Segnare tutti gli articoli come letti?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 #, fuzzy msgid "Marking all feeds as read..." msgstr "Segna tutti i notiziari come letti" -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 #, fuzzy msgid "Please enable mail plugin first." msgstr "Selezionare prima qualche notiziario." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 #, fuzzy msgid "Please enable embed_original plugin first." msgstr "Selezionare prima qualche notiziario." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "Impossibile annullare la sottoscrizione alla categoria." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Selezionare prima qualche notiziario." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "Impossibile cambiare il punteggio a questo tipo di notiziari." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "Cambiare il punteggio degli articoli in «%s»?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 #, fuzzy msgid "Rescoring articles..." msgstr "Cambio punteggio degli articoli" -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "Nuova versione disponibile." -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 #, fuzzy msgid "Cancel search" msgstr "Annulla" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Togli la stella all'articolo" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Metti la stella all'articolo" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Non pubblicare articolo" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Pubblica articolo" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "Nessun articolo selezionato." +msgstr[1] "Nessun articolo selezionato." + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Nessun articolo selezionato." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 #, fuzzy msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "Eliminare i %d articoli selezionati in «%s»?" msgstr[1] "Eliminare i %d articoli selezionati in «%s»?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 #, fuzzy msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "Eliminare i %d articoli selezionati?" msgstr[1] "Eliminare i %d articoli selezionati?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 #, fuzzy msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "Archiviare i %d articoli selezionati in «%s»?" msgstr[1] "Archiviare i %d articoli selezionati in «%s»?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 #, fuzzy msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "Spostare %d articoli archiviati indietro?" msgstr[1] "Spostare %d articoli archiviati indietro?" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 #, fuzzy msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "Segnare %d articoli selezionati in «%s» come letti?" msgstr[1] "Segnare %d articoli selezionati in «%s» come letti?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "Modifica etichette articolo" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 #, fuzzy msgid "Saving article tags..." msgstr "Modifica etichette articolo" -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Nessun articolo selezionato." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Nessun articolo trovato da segnare" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 #, fuzzy msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "Segnare %d articolo/i come letto/i?" msgstr[1] "Segnare %d articolo/i come letto/i?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "Apri articolo di origine" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 #, fuzzy msgid "Display article URL" msgstr "Visualizza URL" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 #, fuzzy msgid "Toggle marked" msgstr "Inverti con stella" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Assegna etichetta" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "Rimuovi etichetta" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "In riproduzione..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "Fare clic per mettere in pausa" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 #, fuzzy msgid "Please enter new score for selected articles:" msgstr "Eliminare i %d articoli selezionati?" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 #, fuzzy msgid "Please enter new score for this article:" msgstr "Inserire il titolo della categoria:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 #, fuzzy msgid "Article URL:" msgstr "Tutti gli articoli" @@ -3720,6 +3788,27 @@ msgstr "Metti la stella all'articolo" msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." msgstr "" +#~ msgid "Switch to digest..." +#~ msgstr "Passa al sommario..." + +#~ msgid "Show tag cloud..." +#~ msgstr "Mostra nuvola etichette..." + +#~ msgid "Click to play" +#~ msgstr "Fare clic per riprodurre" + +#~ msgid "Play" +#~ msgstr "Riproduci" + +#~ msgid "Visit the website" +#~ msgstr "Visita il sito web" + +#~ msgid "Select theme" +#~ msgstr "Seleziona tema" + +#~ msgid "Playing..." +#~ msgstr "In riproduzione..." + #~ msgid "Default interval between feed updates" #~ msgstr "Intervallo predefinito tra gli aggiornamenti dei notiziari" @@ -3829,9 +3918,6 @@ msgstr "" #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "Segnare tutti gli articoli visibili in «%s» come letti?" -#~ msgid "Date" -#~ msgstr "Data" - #~ msgid "Score" #~ msgstr "Punteggio" diff --git a/locale/ja_JP/LC_MESSAGES/messages.mo b/locale/ja_JP/LC_MESSAGES/messages.mo Binary files differindex ce593d426..0b0bc9221 100644 --- a/locale/ja_JP/LC_MESSAGES/messages.mo +++ b/locale/ja_JP/LC_MESSAGES/messages.mo diff --git a/locale/ja_JP/LC_MESSAGES/messages.po b/locale/ja_JP/LC_MESSAGES/messages.po index 58532d9ca..3b028b69f 100644 --- a/locale/ja_JP/LC_MESSAGES/messages.po +++ b/locale/ja_JP/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: tt-rss unstable\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: 2013-03-25 06:48+0900\n" "Last-Translator: skikuta <kik0220@gmail.com>\n" "Language-Team: \n" @@ -16,88 +16,89 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "標準を使用ã™ã‚‹" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "ãšã£ã¨å‰Šé™¤ã—ãªã„" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "1 週間å‰" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "2 週間å‰" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "1 ヶ月å‰" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "2 日月å‰" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "3 ヶ月å‰" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "æ›´æ–°ã®é–“éš”" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "更新を無効ã«ã™ã‚‹" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "å„ 15 分" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "å„ 30 分" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "毎時" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "å„ 4 時間" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "å„ 12 時間" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "毎日" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "毎週" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "ユーザー" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "パワーユーザー" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "管ç†è€…" @@ -152,356 +153,351 @@ msgstr "MySQL ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒç¾åœ¨ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。オ msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "SQLã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—処ç†ã®ãƒ†ã‚¹ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚データベースã¨PHPã®è¨å®šã‚’確èªã—ã¦ãã ã•ã„。" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "èªã¿è¾¼ã¿ã‚“ã§ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "フィード一覧を閉ã˜ã‚‹" -#: index.php:169 +#: index.php:162 #, fuzzy msgid "Show articles" msgstr "記事をä¿ç®¡ã—ã¾ã—ãŸ" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "ã™ã¹ã¦ã®è¨˜äº‹" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "ãŠæ°—ã«å…¥ã‚Š" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "公開済ã¿" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "未èª" -#: index.php:177 +#: index.php:170 #, fuzzy msgid "Unread First" msgstr "未èª" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "スコア計算ã®ç„¡åŠ¹åŒ–" -#: index.php:182 +#: index.php:175 #, fuzzy msgid "Sort articles" msgstr "記事をä¿ç®¡ã—ã¾ã—ãŸ" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "標準" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "題å" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "æ—¢èªã«ã™ã‚‹" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "サーãƒãƒ¼ã¨ã®é€šä¿¡ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Tiny Tiny RSS ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨ã§ãã¾ã™!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "æ“作..." -#: index.php:233 +#: index.php:225 #, fuzzy msgid "Preferences..." msgstr "è¨å®š" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "検索..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "フィードæ“作" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "フィードを購èªã™ã‚‹..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "フィードを編集ã™ã‚‹..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "フィードã®ã‚¹ã‚³ã‚¢ã‚’å†è¨ˆç®—ã—ã¦ã„ã¾ã™..." -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "è³¼èªã‚’ã‚„ã‚ã‚‹" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "ã™ã¹ã¦ã®ãƒ•ィード:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "èªã‚“ã ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’éš ã™/å†è¡¨ç¤ºã™ã‚‹" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "ãã®ä»–ã®æ“作:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "ダイジェストã«ç§»è¡Œ..." - -#: index.php:247 -#, fuzzy -msgid "Show tag cloud..." -msgstr "タグクラウド" - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 #, fuzzy msgid "Toggle widescreen mode" msgstr "カテゴリーã®ä¸¦ã³æ›¿ãˆãƒ¢ãƒ¼ãƒ‰ã®åˆ‡ã‚Šæ›¿ãˆ" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "ã‚¿ã‚°ã§é¸æŠž..." -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "ラベルを作æˆã™ã‚‹..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "フィルターを作æˆã—ã¦ã„ã¾ã™..." -#: index.php:252 +#: index.php:240 #, fuzzy msgid "Keyboard shortcuts help" msgstr "ã‚ーボードショートカット" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "ãƒã‚°ã‚¢ã‚¦ãƒˆ" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "è¨å®š" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "ã‚ーボードショートカット" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "è¨å®šã‚’終了ã™ã‚‹" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "フィード" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "フィルター" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "ラベル" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "ユーザー" -#: register.php:186 +#: prefs.php:132 +msgid "System" +msgstr "" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆ" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ç™»éŒ²ã¯ç®¡ç†è€…ã«ã‚ˆã£ã¦ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚" -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Tiny Tiny RSS ã«æˆ»ã‚‹" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "一時的ãªãƒ‘スワードをメールã§é€ã‚Šã¾ã—ãŸã€‚ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆï¼ˆä¸€åº¦ã ã‘ãƒã‚°ã‚¤ãƒ³å‡ºæ¥ã¾ã™ã€‚)ã¯24時間後ã«å‰Šé™¤ã•れã¾ã™ã€‚" -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "ã”希望ã®loginå:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "有効性ã®ç¢ºèª" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "メールアドレス:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "2 + 2 = ?" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "登録をé€ä¿¡ã™ã‚‹" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "ç™»éŒ²æƒ…å ±ãŒå®Œæˆã—ã¦ã„ã¾ã›ã‚“。" -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "ã™ã¿ã¾ã›ã‚“ãŒã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¯æ—¢ã«ã„ã¾ã™ã€‚" -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "登録ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "アカウントã®ä½œæˆã«æˆåŠŸã—ã¾ã—ãŸã€‚" -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ç™»éŒ²ã¯ç¾åœ¨è¡Œã£ã¦ã„ã¾ã›ã‚“。" -#: update.php:56 +#: update.php:55 #, fuzzy msgid "Tiny Tiny RSS data update script." msgstr "Tiny Tiny RSS ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’æ›´æ–°ã—ã¾ã—ãŸã€‚" #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "カテゴリー割り当ã¦ãªã—" @@ -516,352 +512,341 @@ msgstr[1] "ãŠæ°—ã«å…¥ã‚Šã®è¨˜äº‹" msgid "No feeds found." msgstr "フィードãŒã‚りã¾ã›ã‚“。" -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "特別" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "ã™ã¹ã¦ã®ãƒ•ィード" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "ãŠæ°—ã«å…¥ã‚Šã®è¨˜äº‹" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "公開済ã¿ã®è¨˜äº‹" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "æ–°ã—ã„記事" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "ã™ã¹ã¦ã®è¨˜äº‹" -#: include/functions.php:1846 +#: include/functions.php:1892 #, fuzzy msgid "Archived articles" msgstr "未èªè¨˜äº‹" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "最近èªã‚“ã " -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "ナビゲーション" -#: include/functions.php:1912 +#: include/functions.php:1958 #, fuzzy msgid "Open next feed" msgstr "次ã®ãƒ•ィードを開ã" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "å‰ã®ãƒ•ィードを開ã" -#: include/functions.php:1914 +#: include/functions.php:1960 #, fuzzy msgid "Open next article" msgstr "次ã®è¨˜äº‹ã‚’é–‹ã" -#: include/functions.php:1915 +#: include/functions.php:1961 #, fuzzy msgid "Open previous article" msgstr "å‰ã®è¨˜äº‹ã‚’é–‹ã" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "次ã®è¨˜äº‹ã‚’é–‹ã(スクãƒãƒ¼ãƒ«ã—ãªã„)" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "å‰ã®è¨˜äº‹ã‚’é–‹ã(スクãƒãƒ¼ãƒ«ã—ãªã„)" -#: include/functions.php:1918 +#: include/functions.php:1964 #, fuzzy msgid "Move to next article (don't expand or mark read)" msgstr "次ã®è¨˜äº‹ã‚’é–‹ã(スクãƒãƒ¼ãƒ«ã—ãªã„)" -#: include/functions.php:1919 +#: include/functions.php:1965 #, fuzzy msgid "Move to previous article (don't expand or mark read)" msgstr "å‰ã®è¨˜äº‹ã‚’é–‹ã(スクãƒãƒ¼ãƒ«ã—ãªã„)" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "検索ダイアãƒã‚°ã‚’表示ã™ã‚‹" -#: include/functions.php:1921 +#: include/functions.php:1967 #, fuzzy msgid "Article" msgstr "ã™ã¹ã¦ã®è¨˜äº‹" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’切り替ãˆã‚‹" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "公開を切り替ãˆã‚‹" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "未èªã«åˆ‡ã‚Šæ›¿ãˆã‚‹" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "タグを編集ã™ã‚‹" -#: include/functions.php:1926 +#: include/functions.php:1972 #, fuzzy msgid "Dismiss selected" msgstr "ラベルã‹ã‚‰é¸æŠžã—ãŸè¨˜äº‹ã‚’削除ã—ã¾ã™ã‹?" -#: include/functions.php:1927 +#: include/functions.php:1973 #, fuzzy msgid "Dismiss read" msgstr "公開記事" -#: include/functions.php:1928 +#: include/functions.php:1974 #, fuzzy msgid "Open in new window" msgstr "æ–°ã—ã„ウィンドウã§è¨˜äº‹ã‚’é–‹ã" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 #, fuzzy msgid "Mark below as read" msgstr "æ—¢èªã«ã™ã‚‹" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 #, fuzzy msgid "Mark above as read" msgstr "æ—¢èªã«ã™ã‚‹" -#: include/functions.php:1931 +#: include/functions.php:1977 #, fuzzy msgid "Scroll down" msgstr "下ã«ã‚¹ã‚¯ãƒãƒ¼ãƒ«" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "上ã«ã‚¹ã‚¯ãƒãƒ¼ãƒ«" -#: include/functions.php:1933 +#: include/functions.php:1979 #, fuzzy msgid "Select article under cursor" msgstr "マウスカーソルã®ä¸‹ã®è¨˜äº‹ã‚’é¸æŠžã™ã‚‹" -#: include/functions.php:1934 +#: include/functions.php:1980 #, fuzzy msgid "Email article" msgstr "ã™ã¹ã¦ã®è¨˜äº‹" -#: include/functions.php:1935 +#: include/functions.php:1981 #, fuzzy msgid "Close/collapse article" msgstr "記事を消去ã™ã‚‹" -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" msgstr "カテゴリーã®ä¸¦ã³æ›¿ãˆãƒ¢ãƒ¼ãƒ‰ã®åˆ‡ã‚Šæ›¿ãˆ" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 #, fuzzy msgid "Toggle embed original" msgstr "カテゴリーã®ä¸¦ã³æ›¿ãˆãƒ¢ãƒ¼ãƒ‰ã®åˆ‡ã‚Šæ›¿ãˆ" -#: include/functions.php:1939 +#: include/functions.php:1985 #, fuzzy msgid "Article selection" msgstr "有効ãªè¨˜äº‹ã®æ“作" -#: include/functions.php:1940 +#: include/functions.php:1986 #, fuzzy msgid "Select all articles" msgstr "記事を消去ã™ã‚‹" -#: include/functions.php:1941 +#: include/functions.php:1987 #, fuzzy msgid "Select unread" msgstr "未èªè¨˜äº‹ã‚’削除ã™ã‚‹" -#: include/functions.php:1942 +#: include/functions.php:1988 #, fuzzy msgid "Select starred" msgstr "ãŠæ°—ã«å…¥ã‚Šã«è¨å®šã™ã‚‹" -#: include/functions.php:1943 +#: include/functions.php:1989 #, fuzzy msgid "Select published" msgstr "未èªè¨˜äº‹ã‚’削除ã™ã‚‹" -#: include/functions.php:1944 +#: include/functions.php:1990 #, fuzzy msgid "Invert selection" msgstr "有効ãªè¨˜äº‹ã®æ“作" -#: include/functions.php:1945 +#: include/functions.php:1991 #, fuzzy msgid "Deselect everything" msgstr "記事を消去ã™ã‚‹" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "フィード" -#: include/functions.php:1947 +#: include/functions.php:1993 #, fuzzy msgid "Refresh current feed" msgstr "有効ãªãƒ•ã‚£ãƒ¼ãƒ‰ã®æ›´æ–°" -#: include/functions.php:1948 +#: include/functions.php:1994 #, fuzzy msgid "Un/hide read feeds" msgstr "èªã‚“ã ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’éš ã™/å†è¡¨ç¤ºã™ã‚‹" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "フィードを購èªã™ã‚‹" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "フィードを編集ã™ã‚‹" -#: include/functions.php:1952 +#: include/functions.php:1998 #, fuzzy msgid "Reverse headlines" msgstr "ヘッドラインã®é€†é † (å¤ã„ã‚‚ã®ãŒä¸Š)" -#: include/functions.php:1953 +#: include/functions.php:1999 #, fuzzy msgid "Debug feed update" msgstr "ã™ã¹ã¦ã®ãƒ•ィードを更新ã—ã¾ã—ãŸã€‚" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "ã™ã¹ã¦ã®ãƒ•ィードを既èªã«è¨å®šã™ã‚‹" -#: include/functions.php:1955 +#: include/functions.php:2001 #, fuzzy msgid "Un/collapse current category" msgstr "カテゴリーã®é–‹é–‰" -#: include/functions.php:1956 +#: include/functions.php:2002 #, fuzzy msgid "Toggle combined mode" msgstr "カテゴリーã®ä¸¦ã³æ›¿ãˆãƒ¢ãƒ¼ãƒ‰ã®åˆ‡ã‚Šæ›¿ãˆ" -#: include/functions.php:1957 +#: include/functions.php:2003 #, fuzzy msgid "Toggle auto expand in combined mode" msgstr "カテゴリーã®ä¸¦ã³æ›¿ãˆãƒ¢ãƒ¼ãƒ‰ã®åˆ‡ã‚Šæ›¿ãˆ" -#: include/functions.php:1958 +#: include/functions.php:2004 #, fuzzy msgid "Go to" msgstr "移動..." -#: include/functions.php:1960 +#: include/functions.php:2006 #, fuzzy msgid "Fresh" msgstr "å†æç”»" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "タグクラウド" -#: include/functions.php:1965 +#: include/functions.php:2011 #, fuzzy msgid "Other" msgstr "ãã®ä»–:" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "ラベルを作æˆã™ã‚‹" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "フィルターを作æˆã™ã‚‹" -#: include/functions.php:1968 +#: include/functions.php:2014 #, fuzzy msgid "Un/collapse sidebar" msgstr "サイドãƒãƒ¼ã‚’縮å°ã™ã‚‹" -#: include/functions.php:1969 +#: include/functions.php:2015 #, fuzzy msgid "Show help dialog" msgstr "検索ダイアãƒã‚°ã‚’表示ã™ã‚‹" -#: include/functions.php:2492 +#: include/functions.php:2536 #, fuzzy, php-format msgid "Search results: %s" msgstr "æ¤œç´¢çµæžœ" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -#, fuzzy -msgid "Click to play" -msgstr "クリックã§è¡¨ç¤º" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "表示" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "ã‚¿ã‚°ãŒã‚りã¾ã›ã‚“" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "ã“ã®è¨˜äº‹ã®ã‚¿ã‚°ã‚’編集ã™ã‚‹" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 #, fuzzy msgid "Originally from:" msgstr "å…ƒã®è¨˜äº‹å†…容を表示ã™ã‚‹" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 #, fuzzy msgid "Feed URL" msgstr "フィード" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -873,83 +858,86 @@ msgstr "フィード" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã‚‹" -#: include/functions.php:3451 +#: include/functions.php:3458 #, fuzzy msgid "(edit note)" msgstr "ノートã®ç·¨é›†" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "未知ã®ç¨®é¡ž" -#: include/functions.php:3742 +#: include/functions.php:3749 #, fuzzy msgid "Attachments" msgstr "添付:" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "ãƒã‚°ã‚¤ãƒ³:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "パスワード:" -#: include/login_form.php:197 +#: include/login_form.php:199 #, fuzzy msgid "I forgot my password" msgstr "ユーザーåã‹ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæ£ã—ãã‚りã¾ã›ã‚“" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "言語:" - -#: include/login_form.php:209 +#: include/login_form.php:205 #, fuzzy msgid "Profile:" msgstr "ファイル:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 #, fuzzy msgid "Default profile" msgstr "標準ã®è¨˜äº‹åˆ¶é™" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "ãƒã‚°ã‚¤ãƒ³" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®æ¤œæŸ»ã«å¤±æ•—ã—ã¾ã—㟠(IP ãŒæ£ã—ããªã„)" @@ -966,168 +954,168 @@ msgstr "ã“ã®è¨˜äº‹ã®ã‚¿ã‚° (カンマã§åŒºåˆ‡ã‚Šã¾ã™):" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "ä¿å˜" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "å–り消ã—" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 #, fuzzy msgid "Share with Tiny Tiny RSS" msgstr "Tiny Tiny RSS ã«æˆ»ã‚‹" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "題å:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 #, fuzzy msgid "Content:" msgstr "内容" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 #, fuzzy msgid "Labels:" msgstr "ラベル" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "共有ã—ãŸè¨˜äº‹ã¯ç™ºè¡Œã—ãŸãƒ•ィードã«è¡¨ç¤ºã•れã¾ã™" -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "共有" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 #, fuzzy msgid "Not logged in" msgstr "ãƒã‚°ã‚¤ãƒ³ã—ã¦ã„ã¾ã›ã‚“" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "ユーザーåã‹ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæ£ã—ãã‚りã¾ã›ã‚“" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "<b>%s</b> ã¯æ—¢ã«è³¼èªã—ã¦ã„ã¾ã™ã€‚" -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "<b>%s</b> ã‚’è³¼èªã—ã¾ã—ãŸã€‚" -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "<b>%s</b> ã¯æ—¢ã«è³¼èªã—ã¦ã„ã¾ã™ã€‚" -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, fuzzy, php-format msgid "No feeds found in <b>%s</b>." msgstr "フィードãŒã‚りã¾ã›ã‚“。" -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 #, fuzzy msgid "Multiple feed URLs found." msgstr "公開フィード㮠URL を変更ã—ã¾ã—ãŸã€‚" -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "<b>%s</b> ã¯æ—¢ã«è³¼èªã—ã¦ã„ã¾ã™ã€‚" -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 #, fuzzy msgid "Subscribe to selected feed" msgstr "é¸æŠžã•れãŸãƒ•ィードã®è³¼èªã‚’ã‚„ã‚ã¾ã™ã‹?" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "è³¼èªã‚ªãƒ—ションã®ç·¨é›†" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 #, fuzzy msgid "Password recovery" msgstr "パスワード:" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "" -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "パスワードã®ãƒªã‚»ãƒƒãƒˆ" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "ã„ãã¤ã‹ã®å¿…é ˆé …ç›®ãŒå…¥åŠ›ã•れã¦ã„ãªã„ã‹ã€æ£ã—ãã‚りã¾ã›ã‚“" -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 #, fuzzy msgid "Go back" msgstr "戻る" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "ãƒã‚°ã‚¤ãƒ³åã¨ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®çµ„ã¿åˆã‚ã›ãŒçµ„ã¿åˆã‚ã›ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "ã“ã®ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹ã«ã¯ã‚¢ã‚¯ã‚»ã‚¹ãƒ¬ãƒ™ãƒ«ãŒä¸å分ã§ã™ã€‚" -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "データベースアップデーター" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "æ›´æ–°ã®å®Ÿè¡Œ" @@ -1187,7 +1175,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, fuzzy, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Tiny Tiny RSS ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨ã§ãã¾ã™!" @@ -1197,7 +1185,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1209,123 +1197,128 @@ msgstr "" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -#, fuzzy -msgid "Visit the website" -msgstr "オフィシャルサイトã«è¨ªå•ã™ã‚‹" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "最終更新:" -#: classes/feeds.php:83 +#: classes/feeds.php:75 #, fuzzy msgid "View as RSS feed" msgstr "フィードを閲覧ã™ã‚‹" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 #, fuzzy msgid "View as RSS" msgstr "タグを閲覧ã™ã‚‹" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "é¸æŠž:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "ã™ã¹ã¦" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "å転" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "ãªã—" -#: classes/feeds.php:101 +#: classes/feeds.php:93 #, fuzzy msgid "More..." msgstr "ヘルプをèªã¿è¾¼ã‚“ã§ã„ã¾ã™..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "é¸æŠžã®åˆ‡ã‚Šæ›¿ãˆ:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "é¸æŠž:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 #, fuzzy msgid "Set score" msgstr "スコア" -#: classes/feeds.php:115 +#: classes/feeds.php:107 #, fuzzy msgid "Archive" msgstr "è¨˜äº‹ã®æ—¥ä»˜" -#: classes/feeds.php:117 +#: classes/feeds.php:109 #, fuzzy msgid "Move back" msgstr "戻る" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 #, fuzzy msgid "Delete" msgstr "標準" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 #, fuzzy msgid "Forward by email" msgstr "è¨˜äº‹ã‚’ãŠæ°—ã«å…¥ã‚Šã«ã™ã‚‹" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "フィード:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "フィードãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "ãšã£ã¨å‰Šé™¤ã—ãªã„" + +#: classes/feeds.php:360 #, fuzzy, php-format msgid "Imported at %s" msgstr "インãƒãƒ¼ãƒˆ" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "æ—¢èªã«ã™ã‚‹" @@ -1377,9 +1370,9 @@ msgid "Feed or site URL" msgstr "フィード" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "カテゴリーã®å ´æ‰€:" @@ -1390,24 +1383,24 @@ msgstr "ã™ã¹ã¦ã®ãƒ•ィード" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "èªè¨¼" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "ãƒã‚°ã‚¤ãƒ³" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 #, fuzzy msgid "Password" msgstr "パスワード:" @@ -1418,7 +1411,7 @@ msgstr "ã“ã®ãƒ•ィードã¯èªè¨¼ã‚’è¦æ±‚ã—ã¾ã™ã€‚" #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "è³¼èª" @@ -1431,8 +1424,8 @@ msgstr "ã•らãªã‚‹ãƒ•ィード" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "検索" @@ -1456,8 +1449,8 @@ msgstr "制é™:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "削除" @@ -1542,17 +1535,39 @@ msgstr "ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’è¿½åŠ ã—ã¦ã„ã¾ã™..." msgid "Processing category: %s" msgstr "カテゴリーã®å ´æ‰€:" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "エラー: OPML ファイルをアップãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。" + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "エラー: OPML ファイルをアップãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。" -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "エラー: OPML ファイルをアップãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。" + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "ドã‚ュメントã®è§£æžä¸ã®ã‚¨ãƒ©ãƒ¼ã§ã™ã€‚" #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "ã“ã®ã‚¿ãƒ–ã‚’é–‹ãã«ã¯ã‚¢ã‚¯ã‚»ã‚¹ãƒ¬ãƒ™ãƒ«ãŒä¸å分ã§ã™ã€‚" @@ -1586,8 +1601,8 @@ msgid "Change password to" msgstr "次ã®ãƒ‘スワードã«å¤‰æ›´ã™ã‚‹:" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "オプション" @@ -1633,13 +1648,13 @@ msgstr "[tt-rss] パスワード変更通知" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 #, fuzzy msgid "Select" msgstr "é¸æŠž:" @@ -1655,7 +1670,7 @@ msgstr "毎日" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "編集" @@ -1668,7 +1683,7 @@ msgid "Last login" msgstr "最終ãƒã‚°ã‚¤ãƒ³" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "編集ã™ã‚‹ã«ã¯ã‚¯ãƒªãƒƒã‚¯" @@ -1682,7 +1697,7 @@ msgstr "ユーザーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "ã‚ャプション" @@ -1725,43 +1740,43 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "" #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "一致" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "è¿½åŠ " #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 #, fuzzy msgid "Apply actions" msgstr "フィードæ“作" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "有効ã«ã™ã‚‹" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 #, fuzzy msgid "Match any rule" msgstr "一致ã—ãŸã™ã¹ã¦ã®æœªèªè¨˜äº‹:" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 #, fuzzy msgid "Inverse matching" msgstr "一致ã—ãªã„" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "テスト" @@ -1780,67 +1795,67 @@ msgid "Combine" msgstr "" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 #, fuzzy msgid "Reset sort order" msgstr "パスワードã®ãƒªã‚»ãƒƒãƒˆ" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "記事ã®ã‚¹ã‚³ã‚¢ã®å†é›†è¨ˆ" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "作æˆ" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 #, fuzzy msgid "on field" msgstr "é …ç›®" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #, fuzzy msgid "Save rule" msgstr "ä¿å˜" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 #, fuzzy msgid "Add rule" msgstr "ãƒ•ã‚£ãƒ¼ãƒ‰ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’è¿½åŠ ã—ã¦ã„ã¾ã™..." -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "æ“作ã®å®Ÿè¡Œ" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "パラメーター:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #, fuzzy msgid "Save action" msgstr "パãƒãƒ«æ“作" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 #, fuzzy msgid "Add action" msgstr "フィードæ“作" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 msgid "[No caption]" msgstr "[ã‚ャプションãªã—]" @@ -1990,7 +2005,7 @@ msgid "Purge unread articles" msgstr "未èªè¨˜äº‹ã‚’削除ã™ã‚‹" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "ヘッドラインã®é€†é † (å¤ã„ã‚‚ã®ãŒä¸Š)" @@ -2033,7 +2048,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "" #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 #, fuzzy msgid "Customize stylesheet" msgstr "ユーザースタイルシート㮠URL" @@ -2043,7 +2058,7 @@ msgid "Customize CSS stylesheet to your liking" msgstr "" #: classes/pref/prefs.php:55 -msgid "User timezone" +msgid "Time zone" msgstr "" #: classes/pref/prefs.php:56 @@ -2055,22 +2070,28 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "ãƒ†ãƒ¼ãƒžã‚’é¸æŠžã™ã‚‹" +#, fuzzy +msgid "Language" +msgstr "言語:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +#, fuzzy +msgid "Theme" +msgstr "テーマ" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "å¤ã„パスワードを空ã«ã§ãã¾ã›ã‚“。" -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "æ–°ã—ã„パスワードを空ã«ã§ãã¾ã›ã‚“。" -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“。" @@ -2078,239 +2099,249 @@ msgstr "パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“。" msgid "Function not supported by authentication module." msgstr "" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "è¨å®šã‚’ä¿å˜ã—ã¾ã—ãŸã€‚" -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "䏿˜Žãªã‚ªãƒ—ション: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 #, fuzzy msgid "Your personal data has been saved." msgstr "パスワードを変更ã—ã¾ã—ãŸã€‚" -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 #, fuzzy msgid "Personal data / Authentication" msgstr "èªè¨¼" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "個人データ" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "é›»åメール" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "アクセスレベル" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 #, fuzzy msgid "Save data" msgstr "ä¿å˜" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 #, fuzzy msgid "Your password is at default value, please change it." msgstr "" "ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæ¨™æº–ã®ã¾ã¾ã§ã™ã€‚\n" " 変更ã—ã¦ãã ã•ã„。" -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "ç¾åœ¨ã®ãƒ‘スワード" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "æ–°ã—ã„パスワード" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "æ–°ã—ã„パスワード(確èª)" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "パスワードを変更ã™ã‚‹" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 #, fuzzy msgid "Enter your password" msgstr "ユーザーåã‹ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæ£ã—ãã‚りã¾ã›ã‚“" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 #, fuzzy msgid "Disable OTP" msgstr "(無効ã§ã™)" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "" -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "ã“ã®ã‚¢ãƒ¼ãƒ†ã‚£ã‚¯ãƒ«ã®ãƒŽãƒ¼ãƒˆã‚’入力ã—ã¦ãã ã•ã„:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 #, fuzzy msgid "Enable OTP" msgstr "有効ã«ã™ã‚‹" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 #, fuzzy msgid "Customize" msgstr "ユーザースタイルシート㮠URL" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 #, fuzzy msgid "Register" msgstr "登録済ã¿" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "è¨å®šã‚’ä¿å˜ã™ã‚‹" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 #, fuzzy msgid "Save and exit preferences" msgstr "è¨å®šã‚’終了ã™ã‚‹" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 #, fuzzy msgid "Manage profiles" msgstr "フィルターを作æˆã™ã‚‹" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "æ¨™æº–ã«æˆ»ã™" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 #, fuzzy msgid "Description" msgstr "説明" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 #, fuzzy msgid "Clear data" msgstr "ãƒ•ã‚£ãƒ¼ãƒ‰ãƒ‡ãƒ¼ã‚¿ã®æ¶ˆåŽ»" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 #, fuzzy msgid "Enable selected plugins" msgstr "フィードアイコンを有効ã«ã™ã‚‹" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "ユーザーåã‹ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæ£ã—ãã‚りã¾ã›ã‚“" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 #, fuzzy msgid "Incorrect password" msgstr "ユーザーåã‹ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæ£ã—ãã‚りã¾ã›ã‚“" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "" -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 #, fuzzy msgid "Create profile" msgstr "フィルターを作æˆã™ã‚‹" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 msgid "(active)" msgstr "(有効)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 #, fuzzy msgid "Remove selected profiles" msgstr "é¸æŠžã•れãŸãƒ—ãƒãƒ•ァイルを削除ã—ã¾ã™ã‹?" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 #, fuzzy msgid "Activate profile" msgstr "プãƒãƒ•ァイルを有効ã«ã™ã‚‹" @@ -2320,296 +2351,321 @@ msgstr "プãƒãƒ•ァイルを有効ã«ã™ã‚‹" msgid "Check to enable field" msgstr "編集ã™ã‚‹ã«ã¯ã‚¯ãƒªãƒƒã‚¯" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 #, fuzzy msgid "Feed Title" msgstr "題å" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "æ›´æ–°" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "記事ã®å‰Šé™¤:" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "" -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 #, fuzzy msgid "Hide from Popular feeds" msgstr "自分ã®ãƒ•ィード一覧ã‹ã‚‰éš ã™" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "é›»åメールダイジェストã«å«ã‚€" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "ãƒãƒ¼ã‚«ãƒ«ã«ç”»åƒã‚’ã‚ャッシュã™ã‚‹" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 #, fuzzy msgid "Mark updated articles as unread" msgstr "ã™ã¹ã¦ã®è¨˜äº‹ã‚’æ—¢èªã«ã—ã¾ã™ã‹?" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 #, fuzzy msgid "Icon" msgstr "æ“作" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 #, fuzzy msgid "Resubscribe to push updates" msgstr "フィードを購èªã™ã‚‹:" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "" -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "ã™ã¹ã¦çµ‚了ã—ã¾ã—ãŸã€‚" -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 #, fuzzy msgid "Feeds with errors" msgstr "フィードエディター" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 #, fuzzy msgid "Inactive feeds" msgstr "å…ƒã®ãƒ•ィード" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 #, fuzzy msgid "Edit selected feeds" msgstr "é¸æŠžã—ãŸãƒ•ィードを削除ã—ã¦ã„ã¾ã™..." -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 #, fuzzy msgid "Batch subscribe" msgstr "è³¼èªã‚’ã‚„ã‚ã‚‹" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 #, fuzzy msgid "Categories" msgstr "カテゴリー:" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 #, fuzzy msgid "Add category" msgstr "ãƒ•ã‚£ãƒ¼ãƒ‰ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’è¿½åŠ ã—ã¦ã„ã¾ã™..." -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 #, fuzzy msgid "Remove selected" msgstr "é¸æŠžã•れãŸãƒ•ィルターを削除ã—ã¾ã™ã‹?" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 #, fuzzy msgid "(Un)hide empty categories" msgstr "カテゴリーã®ç·¨é›†" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 #, fuzzy msgid "More actions..." msgstr "æ“作..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "手動削除" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "ãƒ•ã‚£ãƒ¼ãƒ‰ãƒ‡ãƒ¼ã‚¿ã®æ¶ˆåŽ»" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "" -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "" -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 #, fuzzy msgid "Import my OPML" msgstr "OPML ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆä¸ (DOMXML 機能拡張を用ã„ã¦)..." -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 #, fuzzy msgid "Include settings" msgstr "é›»åメールダイジェストã«å«ã‚€" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 #, fuzzy msgid "Export OPML" msgstr "OPML エクスãƒãƒ¼ãƒˆ" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "" -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "" -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 #, fuzzy msgid "Firefox integration" msgstr "Firefox çµ±åˆ" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "下ã®ãƒªãƒ³ã‚¯ã‚’クリックã™ã‚‹ã“ã¨ã§ã€Firefox ã®ãƒ•ィードリーダーã¨ã—ã¦ã“ã® Tiny Tiny RSS ã®ã‚µã‚¤ãƒˆã‚’使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "クリックã™ã‚‹ã¨ãƒ•ィードリーダーã¨ã—ã¦ã“ã®ã‚µã‚¤ãƒˆã‚’登録ã—ã¾ã™ã€‚" -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 #, fuzzy msgid "Published & shared articles / Generated feeds" msgstr "é¸æŠžã—ãŸãƒ•ィードã®è¨˜äº‹ã®ã‚¹ã‚³ã‚¢ã‚’å†è¨ˆç®—ã—ã¾ã™ã‹?" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 #, fuzzy msgid "Published articles and generated feeds" msgstr "é¸æŠžã—ãŸãƒ•ィードã®è¨˜äº‹ã®ã‚¹ã‚³ã‚¢ã‚’å†è¨ˆç®—ã—ã¾ã™ã‹?" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "" -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 #, fuzzy msgid "Display URL" msgstr "ã‚¿ã‚°ã®è¡¨ç¤º" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 #, fuzzy msgid "Articles shared by URL" msgstr "è¨˜äº‹ã‚’ãŠæ°—ã«å…¥ã‚Šã«ã™ã‚‹" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "" -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 #, fuzzy msgid "Unshare all articles" msgstr "記事ã®ãŠæ°—ã«å…¥ã‚Šã‚’解除ã™ã‚‹" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 #, fuzzy msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "エラーã®ãŸã‚ã€ãƒ•ã‚£ãƒ¼ãƒ‰ã¯æ›´æ–°ã•れã¾ã›ã‚“ã§ã—ãŸ:" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 #, fuzzy msgid "Click to edit feed" msgstr "編集ã™ã‚‹ã«ã¯ã‚¯ãƒªãƒƒã‚¯" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 #, fuzzy msgid "Unsubscribe from selected feeds" msgstr "é¸æŠžã•れãŸãƒ•ィードã®è³¼èªã‚’ã‚„ã‚ã¾ã™ã‹?" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "エラーã®ãŸã‚ã€ãƒ•ã‚£ãƒ¼ãƒ‰ã¯æ›´æ–°ã•れã¾ã›ã‚“ã§ã—ãŸ:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 #, fuzzy msgid "Feeds require authentication." msgstr "ã“ã®ãƒ•ィードã¯èªè¨¼ã‚’è¦æ±‚ã—ã¾ã™ã€‚" -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +#, fuzzy +msgid "Refresh" +msgstr "å†æç”»" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +msgid "Filename" +msgstr "" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "日付" + +#: plugins/digest/digest_body.php:57 msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "よã†ã“ãã€" -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 #, fuzzy msgid "Close article" msgstr "記事を消去ã™ã‚‹" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 #, fuzzy msgid "Configuration saved." msgstr "è¨å®šã‚’ä¿å˜ã—ã¾ã—ãŸã€‚" @@ -2627,17 +2683,17 @@ msgstr "パスワードを変更ã—ã¾ã—ãŸã€‚" msgid "Old password is incorrect." msgstr "å¤ã„パスワードãŒä¸æ£ç¢ºã§ã™ã€‚" -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "" @@ -2645,448 +2701,458 @@ msgstr "" msgid "Open regular version" msgstr "" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 #, fuzzy msgid "Enable categories" msgstr "フィードカテゴリーを有効ã«ã™ã‚‹" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 #, fuzzy msgid "Browse categories like folders" msgstr "カテゴリーã®é †åºã‚’リセットã™ã‚‹" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 #, fuzzy msgid "Show images in posts" msgstr "記事内ã«ç”»åƒã‚’表示ã—ãªã„" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 #, fuzzy msgid "Hide read articles and feeds" msgstr "èªã‚“ã ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’éš ã™/å†è¡¨ç¤ºã™ã‚‹" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 #, fuzzy msgid "Sort feeds by unread count" msgstr "未èªè¨˜äº‹æ•°ã«ã‚ˆã‚‹ãƒ•ィードã®ä¸¦ã³æ›¿ãˆ" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 #, fuzzy msgid "Multiple articles" msgstr "ã™ã¹ã¦ã®è¨˜äº‹" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 #, fuzzy msgid "Forward selected article(s) by email." msgstr "è¨˜äº‹ã‚’ãŠæ°—ã«å…¥ã‚Šã«ã™ã‚‹" -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 #, fuzzy msgid "Close this dialog" msgstr "ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã‚‹" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, fuzzy, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "Tiny Tiny RSS ã«æˆ»ã‚‹" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 #, fuzzy msgid "Subscribe in Tiny Tiny RSS" msgstr "Tiny Tiny RSS ã«æˆ»ã‚‹" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 #, fuzzy msgid "Article archive" msgstr "è¨˜äº‹ã®æ—¥ä»˜" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "" -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 #, fuzzy msgid "Export my data" msgstr "OPML エクスãƒãƒ¼ãƒˆ" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "インãƒãƒ¼ãƒˆ" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 #, fuzzy msgid "Could not import: incorrect schema version." msgstr "å¿…è¦ãªã‚¹ã‚ーマファイルを見ã¤ã‘られã¾ã›ã‚“ã§ã—ãŸã€‚次ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¿…è¦ã§ã™:" -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "" -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, fuzzy, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "タグを編集ã™ã‚‹" msgstr[1] "タグを編集ã™ã‚‹" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, fuzzy, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "æ—¢ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆæ¸ˆã¿ã§ã™ã€‚" msgstr[1] "æ—¢ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆæ¸ˆã¿ã§ã™ã€‚" -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, fuzzy, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "フィードã¯é¸æŠžã•れã¦ã„ã¾ã›ã‚“。" msgstr[1] "フィードã¯é¸æŠžã•れã¦ã„ã¾ã›ã‚“。" -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "" -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 #, fuzzy msgid "Prepare data" msgstr "ä¿å˜" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +#, fuzzy +msgid "No file uploaded." +msgstr "アップãƒãƒ¼ãƒ‰ã™ã‚‹ OPML ファイルãŒã‚りã¾ã›ã‚“。" -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 #, fuzzy msgid "To:" msgstr "トップ" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 #, fuzzy msgid "Subject:" msgstr "é¸æŠž:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 #, fuzzy msgid "Send e-mail" msgstr "é›»åメールを変更ã™ã‚‹" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 #, fuzzy msgid "Edit article note" msgstr "タグを編集ã™ã‚‹" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 #, fuzzy msgid "Example Pane" msgstr "例" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 #, fuzzy msgid "Set value" msgstr "ãŠæ°—ã«å…¥ã‚Šã«è¨å®šã™ã‚‹" -#: plugins/googlereaderimport/init.php:72 -#, fuzzy -msgid "No file uploaded." -msgstr "アップãƒãƒ¼ãƒ‰ã™ã‚‹ OPML ファイルãŒã‚りã¾ã›ã‚“。" - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 #, fuzzy msgid "Linked" msgstr "リンク" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 #, fuzzy msgid "Access key:" msgstr "アクセスレベル: " -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 #, fuzzy msgid "Access key" msgstr "アクセスレベル" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "" -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 #, fuzzy msgid "Generate new key" msgstr "生æˆã—ãŸãƒ•ィード" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 #, fuzzy msgid "Link instance" msgstr "タグを編集ã™ã‚‹" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 #, fuzzy msgid "Stored feeds" msgstr "ã•らãªã‚‹ãƒ•ィード" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 #, fuzzy msgid "Create link" msgstr "作æˆ" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 #, fuzzy msgid "Share by URL" msgstr "è¨˜äº‹ã‚’ãŠæ°—ã«å…¥ã‚Šã«ã™ã‚‹" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 #, fuzzy msgid "Update Tiny Tiny RSS" msgstr "Tiny Tiny RSS ã«æˆ»ã‚‹" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 #, fuzzy msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Tiny Tiny RSS ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’æ›´æ–°ã—ã¾ã—ãŸã€‚" -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." msgstr "" -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 #, fuzzy msgid "Ready to update." msgstr "最終更新:" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 #, fuzzy msgid "Start update" msgstr "最終更新:" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "「%sã€ã®ã™ã¹ã¦ã®è¨˜äº‹ã‚’æ—¢èªã«è¨å®šã—ã¾ã™ã‹?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 #, fuzzy msgid "Mark all articles in %s older than 1 day as read?" msgstr "「%sã€ã®ã™ã¹ã¦ã®è¨˜äº‹ã‚’æ—¢èªã«è¨å®šã—ã¾ã™ã‹?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 #, fuzzy msgid "Mark all articles in %s older than 1 week as read?" msgstr "「%sã€ã®ã™ã¹ã¦ã®è¨˜äº‹ã‚’æ—¢èªã«è¨å®šã—ã¾ã™ã‹?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 #, fuzzy msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "「%sã€ã®ã™ã¹ã¦ã®è¨˜äº‹ã‚’æ—¢èªã«è¨å®šã—ã¾ã™ã‹?" -#: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." msgstr "" -#: js/functions.js:214 -msgid "close" +#: js/functions.js:107 +msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "" -#: js/functions.js:586 +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "編集ã™ã‚‹ã«ã¯ã‚¯ãƒªãƒƒã‚¯" + +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 #, fuzzy msgid "Upload complete." msgstr "更新済ã¿è¨˜äº‹" -#: js/functions.js:692 +#: js/functions.js:718 #, fuzzy msgid "Remove stored feed icon?" msgstr "ä¿å˜ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚’削除ã™ã‚‹" -#: js/functions.js:697 +#: js/functions.js:723 #, fuzzy msgid "Removing feed icon..." msgstr "フィードを削除ã—ã¦ã„ã¾ã™..." -#: js/functions.js:702 +#: js/functions.js:728 #, fuzzy msgid "Feed icon removed." msgstr "フィードãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" -#: js/functions.js:724 +#: js/functions.js:750 #, fuzzy msgid "Please select an image file to upload." msgstr "フィードをã²ã¨ã¤é¸æŠžã—ã¦ãã ã•ã„" -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "" -#: js/functions.js:727 +#: js/functions.js:753 #, fuzzy msgid "Uploading, please wait..." msgstr "èªã¿è¾¼ã¿ã‚“ã§ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "ラベルã®ã‚ャプションを入力ã—ã¦ãã ã•ã„:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "ラベルãŒä½œæˆã§ãã¾ã›ã‚“: ã‚ャプションãŒè¦‹å½“ãŸã‚Šã¾ã›ã‚“。" -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "フィードを購èªã™ã‚‹" -#: js/functions.js:818 +#: js/functions.js:844 #, fuzzy msgid "Subscribed to %s" msgstr "フィードを購èªã™ã‚‹:" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "" -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "" -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "é¸æŠžã—ãŸãƒ•ィードを削除ã—ã¦ã„ã¾ã™..." + +#: js/functions.js:874 #, fuzzy msgid "Couldn't download the specified URL: %s" msgstr "è³¼èªã§ãã¾ã›ã‚“: フィード URL ãŒå…¥åŠ›ã•れã¦ã„ã¾ã›ã‚“。" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 #, fuzzy msgid "You are already subscribed to this feed." @@ -3116,7 +3182,7 @@ msgid "Subscription reset." msgstr "フィードを購èªã™ã‚‹..." #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "%s ã®è³¼èªã‚’ã‚„ã‚ã¾ã™ã‹?" @@ -3124,78 +3190,78 @@ msgstr "%s ã®è³¼èªã‚’ã‚„ã‚ã¾ã™ã‹?" msgid "Removing feed..." msgstr "フィードを削除ã—ã¦ã„ã¾ã™..." -#: js/functions.js:1323 +#: js/functions.js:1324 #, fuzzy msgid "Please enter category title:" msgstr "ã“ã®ã‚¢ãƒ¼ãƒ†ã‚£ã‚¯ãƒ«ã®ãƒŽãƒ¼ãƒˆã‚’入力ã—ã¦ãã ã•ã„:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "アドレスã®å¤‰æ›´ã‚’試ã¿ã¦ã„ã¾ã™..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 #, fuzzy msgid "You can't edit this kind of feed." msgstr "フィードã®ã“ã®ç¨®é¡žã‚’消去ã§ãã¾ã›ã‚“。" -#: js/functions.js:1560 +#: js/functions.js:1561 #, fuzzy msgid "Edit Feed" msgstr "フィードを編集ã™ã‚‹" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 #, fuzzy msgid "Saving data..." msgstr "フィードをä¿å˜ã—ã¦ã„ã¾ã™..." -#: js/functions.js:1598 +#: js/functions.js:1599 #, fuzzy msgid "More Feeds" msgstr "ã•らãªã‚‹ãƒ•ィード" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "é¸æŠžã•れãŸãƒ•ィードã¯ã‚りã¾ã›ã‚“。" -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "" -#: js/functions.js:1740 +#: js/functions.js:1741 #, fuzzy msgid "Feeds with update errors" msgstr "フィードエディター" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 #, fuzzy msgid "Remove selected feeds?" msgstr "é¸æŠžã•れãŸãƒ•ィルターを削除ã—ã¾ã™ã‹?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 #, fuzzy msgid "Removing selected feeds..." msgstr "é¸æŠžã•れãŸãƒ•ィルターを削除ã—ã¦ã„ã¾ã™..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "ヘルプ" @@ -3253,7 +3319,7 @@ msgid "Removing selected labels..." msgstr "é¸æŠžã—ãŸãƒ©ãƒ™ãƒ«ã‚’削除ã—ã¦ã„ã¾ã™..." #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "é¸æŠžã•れãŸãƒ©ãƒ™ãƒ«ã¯ã‚りã¾ã›ã‚“。" @@ -3381,347 +3447,344 @@ msgstr "ã¯ã˜ã‚ã«ã„ãã¤ã‹ã®ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„。" msgid "Importing, please wait..." msgstr "èªã¿è¾¼ã¿ã‚“ã§ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "æ¨™æº–ã«æˆ»ã—ã¾ã™ã‹?" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "" -#: js/prefs.js:1088 +#: js/prefs.js:1102 #, fuzzy msgid "Removing category..." msgstr "カテゴリーã®ä½œæˆ" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "é¸æŠžã•れãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’削除ã—ã¾ã™ã‹?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "é¸æŠžã•れãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’削除ã—ã¦ã„ã¾ã™..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "é¸æŠžã•れãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã¯ã‚りã¾ã›ã‚“。" -#: js/prefs.js:1133 +#: js/prefs.js:1147 #, fuzzy msgid "Category title:" msgstr "カテゴリーエディター" -#: js/prefs.js:1137 +#: js/prefs.js:1151 #, fuzzy msgid "Creating category..." msgstr "フィルターを作æˆã—ã¦ã„ã¾ã™..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "" -#: js/prefs.js:1213 +#: js/prefs.js:1227 #, fuzzy msgid "Replace current OPML publishing address with a new one?" msgstr "æ–°ã—ã„ã‚‚ã®ã§ç¾åœ¨ã®å…¬é–‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’ç½®ãæ›ãˆã¾ã™ã‹?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "フィードを消去ã—ã¦ã„ã¾ã™..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "é¸æŠžã—ãŸãƒ•ィードã®è¨˜äº‹ã®ã‚¹ã‚³ã‚¢ã‚’å†è¨ˆç®—ã—ã¾ã™ã‹?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 #, fuzzy msgid "Rescoring selected feeds..." msgstr "é¸æŠžã•れãŸãƒ•ィードを消去ã—ã¦ã„ã¾ã™..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "ã™ã¹ã¦ã®è¨˜äº‹ã®ã‚¹ã‚³ã‚¢ã‚’å†è¨ˆç®—ã—ã¾ã™ã‹? ã“ã®æ“作ã¯å¤§é‡ã®æ™‚間を使ã†ã§ã—ょã†ã€‚" -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." msgstr "フィードã®ã‚¹ã‚³ã‚¢ã‚’å†è¨ˆç®—ã—ã¦ã„ã¾ã™..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 #, fuzzy msgid "Reset selected labels to default colors?" msgstr "ラベルã®è‰²ã‚’標準ã«ãƒªã‚»ãƒƒãƒˆã—ã¾ã™ã‹?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "" -#: js/prefs.js:1414 +#: js/prefs.js:1428 #, fuzzy msgid "Removing selected profiles..." msgstr "é¸æŠžã•れãŸãƒ•ィルターを削除ã—ã¦ã„ã¾ã™..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 #, fuzzy msgid "No profiles are selected." msgstr "é¸æŠžã•れãŸè¨˜äº‹ã¯ã‚りã¾ã›ã‚“。" -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 #, fuzzy msgid "Activate selected profile?" msgstr "é¸æŠžã•れãŸãƒ•ィルターを削除ã—ã¾ã™ã‹?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 #, fuzzy msgid "Please choose a profile to activate." msgstr "ã¯ã˜ã‚ã«ã„ãã¤ã‹ã®ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„。" -#: js/prefs.js:1458 +#: js/prefs.js:1472 #, fuzzy msgid "Creating profile..." msgstr "フィルターを作æˆã™ã‚‹" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 #, fuzzy msgid "Clearing URLs..." msgstr "フィードを消去ã—ã¦ã„ã¾ã™..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 #, fuzzy msgid "Generated URLs cleared." msgstr "生æˆã—ãŸãƒ•ィード" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "ラベルエディター" -#: js/prefs.js:1771 +#: js/prefs.js:1785 #, fuzzy msgid "Subscribing to feeds..." msgstr "フィードを購èªã—ã¦ã„ã¾ã™..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "ã™ã¹ã¦ã®è¨˜äº‹ã‚’æ—¢èªã«ã—ã¾ã™ã‹?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "ã™ã¹ã¦ã®ãƒ•ィードを既èªã«è¨å®šã—ã¦ã„ã¾ã™..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 #, fuzzy msgid "Please enable mail plugin first." msgstr "ã¯ã˜ã‚ã«ã„ãã¤ã‹ã®ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„。" -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 #, fuzzy msgid "Please enable embed_original plugin first." msgstr "ã¯ã˜ã‚ã«ã„ãã¤ã‹ã®ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„。" -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "カテゴリーã‹ã‚‰è³¼èªã‚’ã‚„ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "ã¯ã˜ã‚ã«ã„ãã¤ã‹ã®ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„。" -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 #, fuzzy msgid "You can't rescore this kind of feed." msgstr "フィードã®ã“ã®ç¨®é¡žã‚’消去ã§ãã¾ã›ã‚“。" -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "%s ã®è¨˜äº‹ã®ã‚¹ã‚³ã‚¢ã‚’å†è¨ˆç®—ã—ã¾ã™ã‹?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "記事ã®ã‚¹ã‚³ã‚¢ã‚’å†è¨ˆç®—ã—ã¦ã„ã¾ã™..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 #, fuzzy msgid "New version available!" msgstr "Tiny Tiny RSS ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨ã§ãã¾ã™!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 #, fuzzy msgid "Cancel search" msgstr "å–り消ã—" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "記事ã®ãŠæ°—ã«å…¥ã‚Šã‚’解除ã™ã‚‹" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "è¨˜äº‹ã‚’ãŠæ°—ã«å…¥ã‚Šã«ã™ã‚‹" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "éžå…¬é–‹è¨˜äº‹" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "公開記事" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "é¸æŠžã•れãŸè¨˜äº‹ã¯ã‚りã¾ã›ã‚“。" +msgstr[1] "é¸æŠžã•れãŸè¨˜äº‹ã¯ã‚りã¾ã›ã‚“。" + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "記事ã¯é¸æŠžã•れã¦ã„ã¾ã›ã‚“。" -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 #, fuzzy msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "é¸æŠžã—㟠%d ä»¶ã®è¨˜äº‹ã‚’「%sã€ã«è¨å®šã—ã¾ã™ã‹?" msgstr[1] "é¸æŠžã—㟠%d ä»¶ã®è¨˜äº‹ã‚’「%sã€ã«è¨å®šã—ã¾ã™ã‹?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 #, fuzzy msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "ラベルã‹ã‚‰é¸æŠžã—ãŸè¨˜äº‹ã‚’削除ã—ã¾ã™ã‹?" msgstr[1] "ラベルã‹ã‚‰é¸æŠžã—ãŸè¨˜äº‹ã‚’削除ã—ã¾ã™ã‹?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 #, fuzzy msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "é¸æŠžã—㟠%d ä»¶ã®è¨˜äº‹ã‚’「%sã€ã«è¨å®šã—ã¾ã™ã‹?" msgstr[1] "é¸æŠžã—㟠%d ä»¶ã®è¨˜äº‹ã‚’「%sã€ã«è¨å®šã—ã¾ã™ã‹?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 #, fuzzy msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "ãŠæ°—ã«å…¥ã‚Šã®è¨˜äº‹" msgstr[1] "ãŠæ°—ã«å…¥ã‚Šã®è¨˜äº‹" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 #, fuzzy msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "é¸æŠžã—㟠%d ä»¶ã®è¨˜äº‹ã‚’「%sã€ã«è¨å®šã—ã¾ã™ã‹?" msgstr[1] "é¸æŠžã—㟠%d ä»¶ã®è¨˜äº‹ã‚’「%sã€ã«è¨å®šã—ã¾ã™ã‹?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 #, fuzzy msgid "Edit article Tags" msgstr "タグを編集ã™ã‚‹" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "記事ã®ã‚¿ã‚°ã‚’ä¿å˜ã—ã¦ã„ã¾ã™..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "é¸æŠžã•れãŸè¨˜äº‹ã¯ã‚りã¾ã›ã‚“。" -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "マークã—ãŸè¨˜äº‹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 #, fuzzy msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "%d ä»¶ã®ãƒžãƒ¼ã‚¯ã—ãŸè¨˜äº‹ã‚’æ—¢èªã¨ã—ã¦è¨å®šã—ã¾ã™ã‹?" msgstr[1] "%d ä»¶ã®ãƒžãƒ¼ã‚¯ã—ãŸè¨˜äº‹ã‚’æ—¢èªã¨ã—ã¦è¨å®šã—ã¾ã™ã‹?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 #, fuzzy msgid "Open original article" msgstr "å…ƒã®è¨˜äº‹å†…容を表示ã™ã‚‹" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 #, fuzzy msgid "Display article URL" msgstr "ã‚¿ã‚°ã®è¡¨ç¤º" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 #, fuzzy msgid "Toggle marked" msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’切り替ãˆã‚‹" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "ラベルã®å‰²ã‚Šå½“ã¦" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 #, fuzzy msgid "Remove label" msgstr "é¸æŠžã—ãŸãƒ©ãƒ™ãƒ«ã‚’削除ã—ã¾ã™ã‹?" -#: js/viewfeed.js:2017 -#, fuzzy -msgid "Playing..." -msgstr "フィード一覧をèªã¿è¾¼ã‚“ã§ã„ã¾ã™..." - -#: js/viewfeed.js:2018 -#, fuzzy -msgid "Click to pause" -msgstr "編集ã™ã‚‹ã«ã¯ã‚¯ãƒªãƒƒã‚¯" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 #, fuzzy msgid "Please enter new score for selected articles:" msgstr "ã“ã®ã‚¢ãƒ¼ãƒ†ã‚£ã‚¯ãƒ«ã®ãƒŽãƒ¼ãƒˆã‚’入力ã—ã¦ãã ã•ã„:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 #, fuzzy msgid "Please enter new score for this article:" msgstr "ã“ã®ã‚¢ãƒ¼ãƒ†ã‚£ã‚¯ãƒ«ã®ãƒŽãƒ¼ãƒˆã‚’入力ã—ã¦ãã ã•ã„:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 #, fuzzy msgid "Article URL:" msgstr "ã™ã¹ã¦ã®è¨˜äº‹" @@ -3845,6 +3908,31 @@ msgstr "è¨˜äº‹ã‚’ãŠæ°—ã«å…¥ã‚Šã«ã™ã‚‹" msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." msgstr "" +#~ msgid "Switch to digest..." +#~ msgstr "ダイジェストã«ç§»è¡Œ..." + +#, fuzzy +#~ msgid "Show tag cloud..." +#~ msgstr "タグクラウド" + +#, fuzzy +#~ msgid "Click to play" +#~ msgstr "クリックã§è¡¨ç¤º" + +#~ msgid "Play" +#~ msgstr "表示" + +#, fuzzy +#~ msgid "Visit the website" +#~ msgstr "オフィシャルサイトã«è¨ªå•ã™ã‚‹" + +#~ msgid "Select theme" +#~ msgstr "ãƒ†ãƒ¼ãƒžã‚’é¸æŠžã™ã‚‹" + +#, fuzzy +#~ msgid "Playing..." +#~ msgstr "フィード一覧をèªã¿è¾¼ã‚“ã§ã„ã¾ã™..." + #, fuzzy #~ msgid "Default interval between feed updates" #~ msgstr "ãƒ•ã‚£ãƒ¼ãƒ‰ã®æ›´æ–°ã¾ã§ã®æ¨™æº–é–“éš” (å˜ä½:分)" @@ -3934,10 +4022,6 @@ msgstr "" #~ msgstr "å¤ã„パスワードãŒä¸æ£ç¢ºã§ã™ã€‚" #, fuzzy -#~ msgid "Refresh" -#~ msgstr "å†æç”»" - -#, fuzzy #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "フィードを編集ã™ã‚‹" @@ -3956,9 +4040,6 @@ msgstr "" #~ msgid "Form secret key incorrect. Please enable cookies and try again." #~ msgstr "シークレットã‚ãƒ¼ãŒæ£ã—ãã‚りã¾ã›ã‚“。クッã‚ーを有効ã«ã—ã¦å†åº¦å®Ÿè¡Œã—ã¦ãã ã•ã„。" -#~ msgid "Date" -#~ msgstr "日付" - #~ msgid "Score" #~ msgstr "スコア" @@ -4219,10 +4300,6 @@ msgstr "" #~ msgid "Click to expand article" #~ msgstr "é–‹ã„ãŸè¨˜äº‹ã®ã‚¯ãƒªãƒƒã‚¯" -#, fuzzy -#~ msgid "Unable to load article." -#~ msgstr "エラー: OPML ファイルをアップãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。" - #~ msgid "Update post on checksum change" #~ msgstr "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã®å¤‰æ›´ã§æŠ•稿を更新ã™ã‚‹" @@ -4599,9 +4676,6 @@ msgstr "" #~ msgid "The configuration was reset to defaults." #~ msgstr "è¨å®šã‚’æ¨™æº–ã«æˆ»ã—ã¾ã—ãŸã€‚" -#~ msgid "Themes" -#~ msgstr "テーマ" - #~ msgid "Change theme" #~ msgstr "テーマを変更ã™ã‚‹" @@ -4838,9 +4912,6 @@ msgstr "" #~ msgid "Site:" #~ msgstr "サイト:" -#~ msgid "Last updated:" -#~ msgstr "最終更新:" - #~ msgid "Other feeds: Top 25" #~ msgstr "ãã®ä»–ã®ãƒ•ィード: トップ 25" diff --git a/locale/lv_LV/LC_MESSAGES/messages.mo b/locale/lv_LV/LC_MESSAGES/messages.mo Binary files differindex a4d1d92b3..800c2fb6c 100644 --- a/locale/lv_LV/LC_MESSAGES/messages.mo +++ b/locale/lv_LV/LC_MESSAGES/messages.mo diff --git a/locale/lv_LV/LC_MESSAGES/messages.po b/locale/lv_LV/LC_MESSAGES/messages.po index d06f8d4db..111dde820 100644 --- a/locale/lv_LV/LC_MESSAGES/messages.po +++ b/locale/lv_LV/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: 2013-03-18 22:55+0300\n" "Last-Translator: Valdis VÄ«toliņš <valdis.vitolins@odo.lv>\n" "Language-Team: \n" @@ -16,88 +16,89 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Lietot noklusÄ“to" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Nekad nedzÄ“st" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "1 nedēļu vecs" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "2 nedēļas vecs" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "1 mÄ“nesi vecs" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "2 mÄ“neÅ¡us vecs" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "3 mÄ“neÅ¡us vecs" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "NoklusÄ“tais intervÄls" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "AtslÄ“gt atjaunojumus" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "Katras 15 minÅ«tes" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "Katras 30 minÅ«tes" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "Ik stundu" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "Katras 4 stundas" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "Katras 12 stundas" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "Ik dienas" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "Ik nedēļu" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "LietotÄjs" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "SuperlietotÄjs" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Administrators" @@ -153,351 +154,347 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "NeizdevÄs SQL izņēmumu tests, pÄrbaudiet jÅ«su datu bÄzes un PHP iestatÄ«jumus" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "IelÄdÄ“, lÅ«dzu gaidiet..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Sakļaut barotņu sarakstu" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "RÄdÄ«t rakstus" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "AdaptÄ«vs" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Visus rakstus" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "Zvaigžņotos" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "PublicÄ“tos" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "NelasÄ«tos" -#: index.php:177 +#: index.php:170 #, fuzzy msgid "Unread First" msgstr "NelasÄ«tos" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "IgnorÄ“t novÄ“rtÄ“jumu" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "KÄrtot rakstus" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "NoklusÄ“tais" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "Virsraksts" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "AtzÄ«mÄ“t kÄ lasÄ«tu" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Ir pieejama jauna Tiny Tiny RSS versija!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "DarbÄ«bas" -#: index.php:233 +#: index.php:225 #, fuzzy msgid "Preferences..." msgstr "IestatÄ«jumi" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "MeklÄ“t" -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Barotnes darbÄ«bas" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "AbonÄ“t barotni..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Rediģēt Å¡o barotni..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "PÄrvÄ“rtÄ“t barotni" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Atteikties" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Visas barotnes:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "(Ne)rÄdÄ«t lasÄ«tÄs barotnes" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Citas darbÄ«bas:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "PÄrslÄ“gties uz Ä«ssavilkumu..." - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "RadÄ«t birku mÄkoni..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 #, fuzzy msgid "Toggle widescreen mode" msgstr "PÄrslÄ“gt zvaigžņoÅ¡anu" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "AtlasÄ«t pÄ“c iezÄ«mÄ“m..." -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Izveidot iezÄ«mi" -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Izveidot filtru..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "IsinÄjumtaustiņu palÄ«dzÄ«ba" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Atteikties" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "IestatÄ«jumi" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "ĪsinÄjumtaustiņi" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Iziet no iestatÄ«jumiem" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Barotnes" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "Filtri" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "IezÄ«mes" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "LietotÄji" -#: register.php:186 +#: prefs.php:132 +msgid "System" +msgstr "" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "Izveidot jaunu kontu" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "Jaunu lietotÄju reÄ£istrēšana ir administratÄ«vi atcelta." -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Atgriezties uz Tiny Tiny RSS" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "JÅ«su Ä«slaicÄ«gÄ parole tiks nosÅ«tÄ«ta uz norÄdÄ«to e-pastu. Konti, kuros ne neviens nav pieteicies, tiek automÄtiski izdzÄ“sti 24 stundu laikÄ pÄ“c Ä«slaicÄ«gÄs paroles nosÅ«tīšanas." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "VÄ“lamais pieteikÅ¡anÄs vÄrds:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "PÄrbaudÄ«t pieejamÄ«bu" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "E-pasts:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Cik ir divi un divi:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Iesniegt reÄ£istrÄciju" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "JÅ«su reÄ£istrÄcija ir nepilnÄ«ga." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Piedodiet, lietotÄja vÄrds jau tiek izmantots." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "ReÄ£istrÄcija neizdevÄs." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Konts ir veiksmÄ«gi izveidots." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "Jaunu lietotÄju reÄ£istrÄcija Å¡obrÄ«d ir slÄ“gta." -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "Tiny Tiny RSS datu atjaunoÅ¡anas skripts." #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "NekategorizÄ“ts" @@ -512,341 +509,331 @@ msgstr[1] "%d arhivÄ“ti raksti" msgid "No feeds found." msgstr "Neatradu barotnes." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "ĪpaÅ¡i" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Visas barotnes" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Zvaigžņotie raksti" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "PublicÄ“tie raksti" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "JaunÄkie raksti" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "Visi raksti" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "ArhivÄ“tie raksti" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "Nesen lasÄ«tie raksti" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "NavigÄcija" -#: include/functions.php:1912 +#: include/functions.php:1958 #, fuzzy msgid "Open next feed" msgstr "PÄ“c noÄ·erÅ¡anas rÄdÄ«t nÄkamo barotni" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "" -#: include/functions.php:1914 +#: include/functions.php:1960 #, fuzzy msgid "Open next article" msgstr "AtvÄ“rt sÄkotnÄ“jo rakstu" -#: include/functions.php:1915 +#: include/functions.php:1961 #, fuzzy msgid "Open previous article" msgstr "AtvÄ“rt sÄkotnÄ“jo rakstu" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "" -#: include/functions.php:1918 +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" msgstr "" -#: include/functions.php:1919 +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" msgstr "" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "RÄdÄ«t meklēšanas logu" -#: include/functions.php:1921 +#: include/functions.php:1967 #, fuzzy msgid "Article" msgstr "Visus rakstus" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "PÄrslÄ“gt zvaigžņoÅ¡anu" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "PÄrslÄ“gt publicēšanu" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "PÄrslÄ“gt nelasÄ«tu" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Rediģēt iezÄ«mes" -#: include/functions.php:1926 +#: include/functions.php:1972 #, fuzzy msgid "Dismiss selected" msgstr "Atmest atlasÄ«tos rakstus" -#: include/functions.php:1927 +#: include/functions.php:1973 #, fuzzy msgid "Dismiss read" msgstr "Atmest lasÄ«tos rakstus" -#: include/functions.php:1928 +#: include/functions.php:1974 #, fuzzy msgid "Open in new window" msgstr "AtvÄ“rt rakstu jaunÄ logÄ" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 msgid "Mark below as read" msgstr "IezÄ«mÄ“t lejup kÄ lasÄ«tus" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 msgid "Mark above as read" msgstr "IezÄ«mÄ“t augÅ¡up kÄ lasÄ«tus" -#: include/functions.php:1931 +#: include/functions.php:1977 #, fuzzy msgid "Scroll down" msgstr "Viss izdarÄ«ts." -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "" -#: include/functions.php:1933 +#: include/functions.php:1979 #, fuzzy msgid "Select article under cursor" msgstr "IezÄ«mÄ“t rakstu zem peles kursora" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "NosÅ«tÄ«t rakstu uz e-pastu" -#: include/functions.php:1935 +#: include/functions.php:1981 #, fuzzy msgid "Close/collapse article" msgstr "AizvÄ“rt rakstu" -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" msgstr "PÄrslÄ“gt publicēšanu" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 #, fuzzy msgid "Toggle embed original" msgstr "PÄrslÄ“gt publicēšanu" -#: include/functions.php:1939 +#: include/functions.php:1985 #, fuzzy msgid "Article selection" msgstr "Apgriezt rakstu iezÄ«mēšanu" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "IezÄ«mÄ“t visus rakstus" -#: include/functions.php:1941 +#: include/functions.php:1987 #, fuzzy msgid "Select unread" msgstr "IezÄ«mÄ“t nelasÄ«tos rakstus" -#: include/functions.php:1942 +#: include/functions.php:1988 #, fuzzy msgid "Select starred" msgstr "Uzlikt zvaigzni" -#: include/functions.php:1943 +#: include/functions.php:1989 #, fuzzy msgid "Select published" msgstr "IezÄ«mÄ“t publicÄ“tos rakstus" -#: include/functions.php:1944 +#: include/functions.php:1990 #, fuzzy msgid "Invert selection" msgstr "Apgriezt rakstu iezÄ«mēšanu" -#: include/functions.php:1945 +#: include/functions.php:1991 #, fuzzy msgid "Deselect everything" msgstr "NeatzÄ«mÄ“t rakstus" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Barotne" -#: include/functions.php:1947 +#: include/functions.php:1993 #, fuzzy msgid "Refresh current feed" msgstr "Atjaunot aktÄ«vo barotni" -#: include/functions.php:1948 +#: include/functions.php:1994 #, fuzzy msgid "Un/hide read feeds" msgstr "(Ne)rÄdÄ«t lasÄ«tÄs barotnes" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "AbonÄ“t barotni" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Rediģēt barotni" -#: include/functions.php:1952 +#: include/functions.php:1998 #, fuzzy msgid "Reverse headlines" msgstr "Apgriezt virsrakstu secÄ«bu" -#: include/functions.php:1953 +#: include/functions.php:1999 #, fuzzy msgid "Debug feed update" msgstr "AtslÄ“gt atjaunojumus" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "AtzÄ«mÄ“t visas barotnes kÄ lasÄ«tas" -#: include/functions.php:1955 +#: include/functions.php:2001 #, fuzzy msgid "Un/collapse current category" msgstr "Ievietot kategorijÄ:" -#: include/functions.php:1956 +#: include/functions.php:2002 #, fuzzy msgid "Toggle combined mode" msgstr "PÄrslÄ“gt publicēšanu" -#: include/functions.php:1957 +#: include/functions.php:2003 #, fuzzy msgid "Toggle auto expand in combined mode" msgstr "PÄrslÄ“gt publicēšanu" -#: include/functions.php:1958 +#: include/functions.php:2004 #, fuzzy msgid "Go to" msgstr "Doties uz..." -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "IezÄ«mju mÄkonis" -#: include/functions.php:1965 +#: include/functions.php:2011 #, fuzzy msgid "Other" msgstr "Citas barotnes" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "Izveidot etiÄ·eti" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "Izveidot filtru" -#: include/functions.php:1968 +#: include/functions.php:2014 #, fuzzy msgid "Un/collapse sidebar" msgstr "Sakļaut sÄnjoslu" -#: include/functions.php:1969 +#: include/functions.php:2015 #, fuzzy msgid "Show help dialog" msgstr "RÄdÄ«t meklēšanas logu" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "Meklēšanas rezultÄti: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "Klikšķiniet, lai atskaņotu" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "Atskaņot" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr "–" -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "nav iezÄ«mju" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Rediģēt šī raksta iezÄ«mes" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 msgid "Originally from:" msgstr "SÄkotnÄ“jais no:" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 msgid "Feed URL" msgstr "Barotnes URL" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -858,79 +845,82 @@ msgstr "Barotnes URL" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "AizvÄ“rt Å¡o logu" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(rediģēt piezÄ«mi)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "nezinÄms tips" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "Pielikumi" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Pieteikties:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Parole:" -#: include/login_form.php:197 +#: include/login_form.php:199 #, fuzzy msgid "I forgot my password" msgstr "Nepareiza parole" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Valoda:" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Profils:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 msgid "Default profile" msgstr "NoklusÄ“tais profils" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Saspiest datu plÅ«smu" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Pieteikties" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "NeizdevÄs validÄ“t sesiju (mainÄ«jusies IP adrese)" @@ -946,162 +936,162 @@ msgstr "Å Ä« raksta iezÄ«mes (atdalÄ«tas ar komatiem):" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "SaglabÄt" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Atcelt" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "KopÄ«got ar Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "Virsraksts:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "Saturs:" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "EtiÄ·etes:" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "KopÄ«gotais raksts parÄdÄ«sies PublicÄ“ts barotnÄ“" -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "KopÄ«got" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "Nav pieteicies" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Nepareizs lietotÄja vÄrds vai parole" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Jau ir pasÅ«tÄ«jis <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "PasÅ«tÄ«jis <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "NeizdevÄs pasÅ«tÄ«t <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "<b>%s</b> barotne netika atrasta." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 msgid "Multiple feed URLs found." msgstr "Atradu vairÄkus barotņu URLus." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "NeizdevÄs pasÅ«tÄ«t <b>%s</b>.<br>NevarÄ“ju lejuplÄdÄ“t barotnes URL." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "PasÅ«tÄ«t norÄdÄ«to barotni" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Rediģēt barotnes iestatÄ«jumus" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 #, fuzzy msgid "Password recovery" msgstr "Parole" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "" -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "AtstatÄ«t paroli" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "" -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 #, fuzzy msgid "Go back" msgstr "PÄrvietot atpakaļ" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Jums nav nepiecieÅ¡amo skripta palaiÅ¡anas tiesÄ«bu. " -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Datu bÄzes atjaunotÄjs" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "IzpildÄ«t atjaunojumus" @@ -1156,7 +1146,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "JÅ«s varat skatÄ«t so baronti kÄ RSS ar sekojoÅ¡u URL:" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Ir pieejama jauna Tiny Tiny RSS versija (%s)." @@ -1166,7 +1156,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "JÅ«s varat veikt atjaunojumus, izmantojot iestatÄ«jumos norÄdÄ«to atjaunoÅ¡anas procesu, vai arÄ« atverot update.php lapu" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1178,115 +1168,121 @@ msgstr "LejuplÄdÄ“t" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "ApmeklÄ“t vietni" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "PÄ“dÄ“jais atjaunojums:" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "SkatÄ«t RSS barotni" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "SkatÄ«t kÄ RSS" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "IezÄ«mÄ“t:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "Visus" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Apgriezt" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Nevienu" -#: classes/feeds.php:101 +#: classes/feeds.php:93 #, fuzzy msgid "More..." msgstr "Papildu iespÄ“jas..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "IzvÄ“les pÄrslÄ“gÅ¡ana:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "IzvÄ“le:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "IestatÄ«r vÄ“rtÄ“jumu" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "ArhivÄ“t" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "PÄrvietot atpakaļ" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "DzÄ“st" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "PÄrsÅ«tÄ«t e-pastÄ" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Barotne:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "Barotne netika atrasta." -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "Nekad nedzÄ“st" + +#: classes/feeds.php:360 #, fuzzy, php-format msgid "Imported at %s" msgstr "Imports" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "iezÄ«mÄ“t kÄ lasÄ«tu" @@ -1337,9 +1333,9 @@ msgid "Feed or site URL" msgstr "Barotnes vai vietnes URL" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "Ievietot kategorijÄ:" @@ -1349,24 +1345,24 @@ msgstr "PieejamÄs barotnes" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "AutentifikÄcija" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "PieteikÅ¡anÄs" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Parole" @@ -1376,7 +1372,7 @@ msgstr "Å im laukam ir nepiecieÅ¡ams autentificÄ“ties." #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "PasÅ«tÄ«t" @@ -1388,8 +1384,8 @@ msgstr "VairÄk barotnes" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "MeklÄ“t" @@ -1410,8 +1406,8 @@ msgstr "ierobežojumi:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "NovÄkt" @@ -1494,17 +1490,39 @@ msgstr "Pievieno filtru..." msgid "Processing category: %s" msgstr "ApstrÄdÄ kategoriju: %s" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "Kļūda: lÅ«dzu augÅ¡uplÄdÄ“jiet OPML failu." + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Kļūda: lÅ«dzu augÅ¡uplÄdÄ“jiet OPML failu." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "Kļūda: lÅ«dzu augÅ¡uplÄdÄ“jiet OPML failu." + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Dokumenta apstrÄdes kļūda." #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "Jums nav pietiekamas pieejas tiesÄ«bas, lai atvÄ“rtu Å¡o cilni." @@ -1538,8 +1556,8 @@ msgid "Change password to" msgstr "NomainÄ«t paroli uz" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "IespÄ“jas" @@ -1585,13 +1603,13 @@ msgstr "[tt-rss] paroles maiņas paziņojums" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 msgid "Select" msgstr "IezÄ«mÄ“t" @@ -1605,7 +1623,7 @@ msgstr "Detaļas" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Rediģēt" @@ -1618,7 +1636,7 @@ msgid "Last login" msgstr "PÄ“dÄ“jÄ pieteikÅ¡anÄs" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "Klikšķiniet, lai rediģētu" @@ -1632,7 +1650,7 @@ msgstr "Neatradu atbilstoÅ¡us lietotÄjus." #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Uzraksts" @@ -1670,41 +1688,41 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "" #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "AtbilstÄ«ba" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "Pievienot" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 msgid "Apply actions" msgstr "Pielietot darbÄ«bas" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "IespÄ“jots" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 msgid "Match any rule" msgstr "Atbilst jebkuram likumam" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 #, fuzzy msgid "Inverse matching" msgstr "Apgriezt rakstu iezÄ«mēšanu" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "PÄrbaudÄ«t" @@ -1723,61 +1741,61 @@ msgid "Combine" msgstr "Apvienot" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "AtstatÄ«t kÄrtoÅ¡anas secÄ«bu" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "PÄrvÄ“rtÄ“t rakstus" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Izveidot" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "laukÄ" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "kur" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" msgstr "SaglabÄt likumu" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 msgid "Add rule" msgstr "Pievienot likumu" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Pielietot darbÄ«bu" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "ar parametriem:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" msgstr "SaglabÄt darbÄ«bu" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 msgid "Add action" msgstr "Pievienot darbÄ«bu" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 #, fuzzy msgid "[No caption]" msgstr "Uzraksts" @@ -1926,7 +1944,7 @@ msgid "Purge unread articles" msgstr "DzÄ“st nelasÄ«tos rakstus" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Apgriezt virsrakstu secÄ«bu (vecÄkos vispirms)" @@ -1968,7 +1986,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "Lasot rakstus, atmest visus, izņemot paÅ¡us svarÄ«gÄkos HTML tagus." #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 msgid "Customize stylesheet" msgstr "PielÄgot stilu lapu" @@ -1977,7 +1995,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "PielÄgot CSS stilu lapu" #: classes/pref/prefs.php:55 -msgid "User timezone" +#, fuzzy +msgid "Time zone" msgstr "LietotÄja laika zona" #: classes/pref/prefs.php:56 @@ -1989,22 +2008,27 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "IzvÄ“lieties tÄ“mu" +#, fuzzy +msgid "Language" +msgstr "Valoda:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "VecÄ parole nedrÄ«kst bÅ«t tukÅ¡a" -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "JaunÄ parole nedrÄ«kst bÅ«t tukÅ¡a" -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "IevadÄ«tÄs paroles nav vienÄdas." @@ -2012,223 +2036,233 @@ msgstr "IevadÄ«tÄs paroles nav vienÄdas." msgid "Function not supported by authentication module." msgstr "Funkiju neatbalsta autentifikÄcijas modulis." -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "IestatÄ«jumi ir saglabÄti." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "NezinÄma iespÄ“ja %s." -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "JÅ«su personÄ«gie dati ir saglabÄti." -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "PersonÄ«gie dati/autentifikÄcija" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "PersonÄ«gie dati" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "VÄrds un uzvÄrds" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "E-pasts" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Pieejas lÄ«menis" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "SaglabÄt datus" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "Jums ir norÄdÄ«ta noklusÄ“tÄ parole, lÅ«dzu nomainiet to." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "VecÄ parole" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "JaunÄ parole" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Apstipriniet paroli" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "NomainÄ«t paroli" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "VienreizlietojamÄ parole/autentifikÄcija" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 msgid "Enter your password" msgstr "Ievadiet savu paroli" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" msgstr "AtslÄ“gt vienreizlietojamo paroli" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "Lai to lietotu, jums bÅ«s nepiecieÅ¡ams savietojams autentifikators. JÅ«su paroles maiņa automÄtiski atslÄ“gs vienreizlietojamo paroli." -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "Ar autentifikÄcijas moduli noskenÄ“jiet sekojoÅ¡o kodu:" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "Esmu noskenÄ“jis Å¡o kodu un vÄ“los iespÄ“jot vienreizlietojamo paroli" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "LÅ«dzu ievadiet vienreizlietojamo paroli:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" msgstr "IespÄ“jot vienreizlietojamo paroli" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "PielÄgot" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "ReÄ£istrÄ“t" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "AttÄ«rÄ«t" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "TekoÅ¡Ä laika zona ir: %s (UTC)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "SaglabÄt iestatÄ«jumus" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 #, fuzzy msgid "Save and exit preferences" msgstr "Iziet no iestatÄ«jumiem" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "PÄrvaldÄ«t profilus" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "AtstatÄ«t uz noklusÄ“tajiem" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 msgid "Description" msgstr "" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 #, fuzzy msgid "Clear data" msgstr "DzÄ“st barotņu datus" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 #, fuzzy msgid "Enable selected plugins" msgstr "IespÄ“jot barotņu kategorijas" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "Nepareiza parole" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "Nepareiza parole" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "JÅ«s varat aizstÄt krÄsas, fontus un izklÄjumu, Å¡obrÄ«d izmantotÄ CSS vietÄ izmantojot savus pielÄgojumus. Paraugu varat ņemt no <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">šī faila</a>." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Izveidot profilu" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 msgid "(active)" msgstr "(aktÄ«vs)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "DzÄ“st iezÄ«mÄ“tos profilus" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "AktivizÄ“t profilu" @@ -2236,239 +2270,264 @@ msgstr "AktivizÄ“t profilu" msgid "Check to enable field" msgstr "IezÄ«mÄ“jiet, lai iespÄ“jotu" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "Barotnes virsraksts" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "Atjaunot" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Dzēšu rakstu:" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "<b>Ieteikums:</b> ja jÅ«su barotnei ir nepiecieÅ¡ama autentifikÄcija, jums ir jÄievada pieteikÅ¡anÄs informÄcija. VienÄ«gais izņēmums ir Twitter barotnes." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "NerÄdÄ«t populÄrajÄs barotnÄ“s" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "Iekļaut e-pasta Ä«ssavilkumu" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "VienmÄ“r rÄdÄ«t attÄ“lu pielikumus" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "KeÅ¡ot attÄ“lus lokÄli" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "AtzÄ«mÄ“t atjaunotos rakstus kÄ nelasÄ«tus" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Ikona" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Aizvietot" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "PÄrpasÅ«tÄ«t atjaunojumu grūšanu" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "Atstata PubSubHubbub pasÅ«tÄ«jumu statusu barotnÄ“m ar iespÄ“jotu atjaunojumu grūšanu." -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "Viss izdarÄ«ts." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Barotnes ar kļūdÄm" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "NeaktÄ«vÄs barotnes" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Rediģēt izvÄ“lÄ“tÄs barotnes" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 msgid "Batch subscribe" msgstr "PasÅ«tÄ«juma pakotne" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "Kategorijas" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "Pievienot kategoriju" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "DzÄ“st izvÄ“lÄ“tÄs" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "(Ne)slÄ“pt tukÅ¡Äs kategorijas" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "Papildu iespÄ“jas..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "ManuÄla dzēšana" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "DzÄ“st barotņu datus" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "Izmantojot OPML jÅ«s varat eksportÄ“t un importÄ“t savas barotnes, filtrus, etiÄ·etes un Tiny Tiny RSS iestatÄ«jumus." -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "Izmantojot OPML var migrÄ“t tikai galvenos iestatÄ«jumus." -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "ImportÄ“t manu OPML" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "Faila nosaukums:" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "Iekļaut iestatÄ«jumus" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "EksportÄ“t OPML" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "JÅ«su OPML var publicÄ“t un to var abonÄ“t katrs, kas zin zemÄk minÄ“to saiti." -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "PublicÄ“tajÄ OPML nav iekļauti: jÅ«su Tiny Tiny RSS iestatÄ«jumi, barotnes, kurÄs nepiecieÅ¡ams autentificÄ“ties un arÄ« barotnes, kas ir paslÄ“ptas no populÄrajÄm barotnÄ“m." -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "PubliskÄ OPML URL (adrese)" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "ParÄdÄ«t publicÄ“tÄ OPML URL" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Firefox integrÄcija" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "Å o Tiny Tiny RSS vietni var izmantot kÄ Firefox Feed Reader, klikšķinot uz zemÄkÄs saites." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Klikšķiniet Å¡eit, lai reÄ£istrÄ“tu Å¡o vietni kÄ barotņu avotu." -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" msgstr "PublicÄ“tie un kopÄ«gotie raksti / sagatavotÄs barotnes" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "PublicÄ“tie raksti un sagatavotÄs barotnes" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "PublicÄ“tie raksti tiek eksportÄ“ti kÄ publiskas RSS barotnes un tÄs var izmantot katrs, kas zina zemÄk minÄ“to saiti." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "ParÄdÄ«t URL" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "AttÄ«rÄ«t visus Ä£enerÄ“tos URL" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "Raksti, kas kopÄ«goti ar URL" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "JÅ«s varat atcelt ar Å¡o URL kopÄ«gotos rakstus Å¡eit." -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "Atcelt visu rakstu kopÄ«goÅ¡anu" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "Å ajÄs barotnÄ“s nav bijis jauns saturs vairÄk kÄ 3 mÄ“neÅ¡us (sÄkot ar vecÄkajÄm):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "Klikšķiniet, lai rediģētu" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "Atcelt izvÄ“lÄ“to barotņu pasÅ«tīšanu" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Å Ä«s barotnes netika atjaunotas sekojoÅ¡u kļūdu dēļ:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "Pievienojiet vienu derÄ«gu RSS barotni vienÄ rindÄ (barotnes netiek pÄrbaudÄ«tas)" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "PasÅ«tÄmÄs barotnes, pa vienai katrÄ rindÄ" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "BarotnÄ“m nepiecieÅ¡ama autentifikÄcija" -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +#, fuzzy +msgid "Filename" +msgstr "Faila nosaukums:" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Datums" + +#: plugins/digest/digest_body.php:57 #, fuzzy msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" @@ -2476,32 +2535,32 @@ msgstr "" "\t\t\tlai šī programma strÄdÄtu pareizi. LÅ«dzu pÄrbaudiet savas\n" "\t\t\tpÄrlÅ«kprogrammas iestatÄ«jumus." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "SveicinÄti," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "RegulÄrÄ versija" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "AizvÄ“rt rakstu" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 #, fuzzy msgid "Configuration saved." msgstr "IestatÄ«jumi ir saglabÄti." @@ -2518,17 +2577,17 @@ msgstr "Parole ir nomainÄ«ta." msgid "Old password is incorrect." msgstr "VecÄ parole nav pareiza." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "MÄjas" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "Nekas netika atrasts (klikšķiniet, lai pÄrlÄdÄ“tu barotni)." @@ -2536,416 +2595,424 @@ msgstr "Nekas netika atrasts (klikšķiniet, lai pÄrlÄdÄ“tu barotni)." msgid "Open regular version" msgstr "AtvÄ“rt parasto versiju" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "IespÄ“jot kategorijas" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "IESL." -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "Izsl." -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "PÄrlÅ«kt kategorijas kÄ mapes." -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "RÄdÄ«t ziņÄs attÄ“lus." -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "NerÄdÄ«t lasÄ«tos rakstus barotnÄ“s" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "KÄrtot barotnes pÄ“c nelasÄ«to skaita" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[PÄrsÅ«tÄ«ts]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 msgid "Multiple articles" msgstr "VairÄki raksti" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 #, fuzzy msgid "Forward selected article(s) by email." msgstr "PÄrsÅ«tÄ«t e-pastÄ" -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 #, fuzzy msgid "Close this dialog" msgstr "AizvÄ“rt Å¡o logu" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "GrÄmatzÄ«mes" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "Velciet zemÄk minÄ“to saiti uz jÅ«su pÄrlÅ«kprogrammas rÄ«ku joslu, tad atveriet jÅ«s interesÄ“joÅ¡o saiti un klikšķiniet uz tÄs, lai pasÅ«tÄ«tu tÄs jaunumus" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "PasÅ«tÄ«t %s Tiny Tiny RSS?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "PasÅ«tÄ«t Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "Izmantojiet grÄmatzÄ«mes lai publicÄ“tu izvÄ“lÄ“tÄs lapas Tiny Tiny RSS" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "Imports un eksports" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "Raksta arhÄ«vs" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "JÅ«s varat eksportÄ“t un importÄ“t jÅ«su zvaigžņotos un arhivÄ“tos rakstus, lai saglabÄtu tos pÄrejot uz citu tt-rss instanci." -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "EksportÄ“t manus datus" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Imports" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "NeizdevÄs importÄ“t: nepareiza shÄ“mas versija." -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "NeizdevÄs importÄ“t: neatpazÄ«ts dokumenta formÄts." -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, fuzzy, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "Rediģēt raksta piezÄ«mes" msgstr[1] "Rediģēt raksta piezÄ«mes" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "" msgstr[1] "" -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, fuzzy, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "Nav izvÄ“lÄ“ta barotne." msgstr[1] "Nav izvÄ“lÄ“ta barotne." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "NeizdevÄs ielÄdÄ“t XML dokumentu." -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "Sagatavo datus" -#: plugins/import_export/init.php:423 -#, fuzzy, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." msgstr "" -"NeizdevÄs augÅ¡uplÄdÄ“t failu. IespÄ“jams, jums ir jÄpielÄgo upload_max_filesize iestatÄ«jums\n" -"\t\t\t\tPHP.ini failÄ (tekoÅ¡Ä vÄ“rtÄ«ba = %s)" -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "No:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "Uz:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Temats:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "NosÅ«tÄ«t e-pastu" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 msgid "Edit article note" msgstr "Rediģēt raksta piezÄ«mes" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "PiemÄ“ra panelis" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "PiemÄ“ra vÄ“rtÄ«ba" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "IestatÄ«t vÄ“rtÄ«bu" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "" - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "SaistÄ«ts" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "Instance" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "Instances URL" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 msgid "Access key:" msgstr "Pieejas atslÄ“ga:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "Pieejas aslÄ“ga" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "Izmantot to paÅ¡u pieejas aslÄ“gu abÄm saistÄ«tajÄm instancÄ“m." -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 msgid "Generate new key" msgstr "Ä¢enerÄ“t jaunu atslÄ“gu" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "Saites instance" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "JÅ«s varat pievienot kopÄ«got populÄrÄs barotnes un pieslÄ“gt tai citas Tiny Tiny RSS instances. Pievienoties Å¡ai Tiny Tiny RSS instancei var, izmantojot Å¡o saiti:" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "PÄ“dÄ“jo reizi pieteicies" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "Statuss" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "SaglabÄtÄs barotnes" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Izveidot saiti" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "KopÄ«got ar URL" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "JÅ«s varat kopÄ«got Å¡o rakstu ar sekojoÅ¡u unikÄlu URL:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "Atjaunot Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "JÅ«su Tiny Tiny RSS ir aktuÄls." -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 #, fuzzy msgid "Do not close this dialog until updating is finished." msgstr "LÅ«dzu neaizveriet logu lÄ«dz ir pabeigta atjaunoÅ¡ana. Pirms turpinÄt, izveidojiet jÅ«su tt-rss mapes rezerves kopiju." -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." msgstr "Gatavs atjaunoÅ¡anai." -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" msgstr "SÄkt atjaunoÅ¡anu" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Vai atzÄ«mÄ“t visus rakstus %s kÄ lasÄ«tus?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 #, fuzzy msgid "Mark all articles in %s older than 1 day as read?" msgstr "Vai atzÄ«mÄ“t visus rakstus %s kÄ lasÄ«tus?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 #, fuzzy msgid "Mark all articles in %s older than 1 week as read?" msgstr "Vai atzÄ«mÄ“t visus rakstus %s kÄ lasÄ«tus?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 #, fuzzy msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "Vai atzÄ«mÄ“t visus rakstus %s kÄ lasÄ«tus?" -#: js/functions.js:92 +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "" + +#: js/functions.js:107 msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "Vai tieÅ¡Äm vÄ“laties ziņot par Å¡o izņēmumu tt-rss.org? ZiņojumÄ tiks iekļauta informÄcija par jÅ«su pÄrlÅ«kprogrammu, un jÅ«su IP adrese tiks saglabÄta datu bÄzÄ“." -#: js/functions.js:214 -msgid "close" -msgstr "" +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "Klikšķiniet, lai apturÄ“tu" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "" -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "DzÄ“st saglabÄto barotnes ikonu?" -#: js/functions.js:697 +#: js/functions.js:723 #, fuzzy msgid "Removing feed icon..." msgstr "DzÄ“st saglabÄto barotnes ikonu?" -#: js/functions.js:702 +#: js/functions.js:728 #, fuzzy msgid "Feed icon removed." msgstr "Barotne netika atrasta." -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "LÅ«dzu norÄdiet augÅ¡uplÄdÄ“jamo attÄ“la failu." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "AugÅ¡uplÄdÄ“t Å¡ai barotnei jaunu ikonu?" -#: js/functions.js:727 +#: js/functions.js:753 #, fuzzy msgid "Uploading, please wait..." msgstr "IelÄdÄ“, lÅ«dzu gaidiet..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "LÅ«dzu ievadiet etiÄ·etes uzrakstu:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "NeizdevÄs izveidot etiÄ·eti: nav uzraksta." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "PasÅ«tÄ«t barotni" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "PasÅ«tÄ«ta barotne %s" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "NorÄdÄ«tais URL ir nepareizs." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "NorÄdÄ«tajÄ URL nav nevienas barotnes." -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "Rediģēt izvÄ“lÄ“tÄs barotnes" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "NeizdevÄs lejuplÄdÄ“t norÄdÄ«to URL: %s" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "JÅ«s jau esat pasÅ«tÄ«jis Å¡o barotni." @@ -2972,7 +3039,7 @@ msgid "Subscription reset." msgstr "AbonÄ“t barotni..." #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "Atteikt pasÅ«tÄ«jumu %s?" @@ -2980,72 +3047,72 @@ msgstr "Atteikt pasÅ«tÄ«jumu %s?" msgid "Removing feed..." msgstr "" -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "LÅ«dzu ievadiet kategorijas virsrakstu:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "Izveidot jaunu šīs barotnes sindikÄcijas adresi?" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "" -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "JÅ«s nevarat rediģēt Å¡Äda veida barotni." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "Rediģēt barotni" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 #, fuzzy msgid "Saving data..." msgstr "SaglabÄt datus" -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "VairÄk barotnes" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Nav izvÄ“lÄ“ta barotne" -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "DzÄ“st izvÄ“lÄ“tÄs barotnes no arhÄ«va? Barotnes, kurÄs ir raksti, netiks dzÄ“stas." -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "Barotnes ar atjaunoÅ¡anas kļūdÄm" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "DzÄ“st izvÄ“lÄ“tÄs barotnes?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 #, fuzzy msgid "Removing selected feeds..." msgstr "DzÄ“st izvÄ“lÄ“tÄs barotnes?" -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "PalÄ«dzÄ«ba" @@ -3101,7 +3168,7 @@ msgid "Removing selected labels..." msgstr "DzÄ“st izvÄ“lÄ“tÄs etiÄ·etes?" #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "Nav izvÄ“lÄ“ta etiÄ·ete." @@ -3231,334 +3298,333 @@ msgstr "LÅ«dzu vispirms norÄdiet OPML failu." msgid "Importing, please wait..." msgstr "IelÄdÄ“, lÅ«dzu gaidiet..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "AtsatÄ«t uz noklusÄ“to?" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "DzÄ“st kategoriju %s? Visas iekļautÄs barotnes tiks pÄrvietotas uz NekategorizÄ“ts kategoriju." -#: js/prefs.js:1088 +#: js/prefs.js:1102 #, fuzzy msgid "Removing category..." msgstr "DzÄ“st kategoriju" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "DzÄ“st izvÄ“lÄ“tÄs kategorijas?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 #, fuzzy msgid "Removing selected categories..." msgstr "DzÄ“st izvÄ“lÄ“tÄs kategorijas?" -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Nav izvÄ“lÄ“ta kategorija." -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "Kategorijas virsraksts:" -#: js/prefs.js:1137 +#: js/prefs.js:1151 #, fuzzy msgid "Creating category..." msgstr "Izveidot filtru..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "Barotnes bez neseniem jaunumiem" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "Aizvietot esoÅ¡o OPML publicÄ“to adresi ar jauno vÄ“rtÄ«bu?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 #, fuzzy msgid "Clearing feed..." msgstr "DzÄ“st barotņu datus" -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Atjaunot rakstus izvÄ“lÄ“tajÄs barotnÄ“s?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 #, fuzzy msgid "Rescoring selected feeds..." msgstr "Atjaunot rakstus izvÄ“lÄ“tajÄs barotnÄ“s?" -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "PÄrvÄ“rtÄ“t visus rakstus? Tas var prasÄ«t ilgu laiku." -#: js/prefs.js:1348 +#: js/prefs.js:1362 #, fuzzy msgid "Rescoring feeds..." msgstr "PÄrvÄ“rtÄ“t barotni" -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "AtstatÄ«t iezÄ«mÄ“tÄs etiÄ·etes uz noklusÄ“tajÄm krÄsÄm?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Profilu iestatÄ«jumi" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "DzÄ“st izvÄ“lÄ“tos profilus? AktÄ«vie un noklusÄ“tie profili netiks dzÄ“sti." -#: js/prefs.js:1414 +#: js/prefs.js:1428 #, fuzzy msgid "Removing selected profiles..." msgstr "DzÄ“st iezÄ«mÄ“tos profilus" -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "Nav izvÄ“lÄ“ts profils." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 msgid "Activate selected profile?" msgstr "AktivizÄ“t izvÄ“lÄ“to profilu?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "LÅ«dzu norÄdiet aktivizÄ“jamo profilu." -#: js/prefs.js:1458 +#: js/prefs.js:1472 #, fuzzy msgid "Creating profile..." msgstr "Izveidot profilu" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "Tas padarÄ«s nederÄ«gus visu iepriekÅ¡ izveidoto barotņu URLus. TurpinÄt?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 msgid "Clearing URLs..." msgstr "" -#: js/prefs.js:1524 +#: js/prefs.js:1538 #, fuzzy msgid "Generated URLs cleared." msgstr "Izveidot jaunu URL" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "Tas padarÄ«s nederÄ«gus visu iepriekÅ¡ izveidoto kopÄ«goto rakstu URLus. TurpinÄt?" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "EtiÄ·eÅ¡u redaktors" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "Barotņu pasÅ«tīšana" -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "AttÄ«rÄ«t šī spraudņa saglabÄtos datus?" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Vai atzÄ«mÄ“t visus rakstus kÄ lasÄ«tus?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 #, fuzzy msgid "Marking all feeds as read..." msgstr "AtzÄ«mÄ“t visas barotnes kÄ lasÄ«tas" -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." msgstr "LÅ«dzu, vispirmi iespÄ“jojiet e-pasta spraudni." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 #, fuzzy msgid "Please enable embed_original plugin first." msgstr "LÅ«dzu, vispirmi iespÄ“jojiet e-pasta spraudni." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "AtlasÄ«t vienumus pÄ“c iezÄ«mÄ“m" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "JÅ«s nevarat atteikties no kategorijas." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "LÅ«dzu, vispirms norÄdiet barotni." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "JÅ«s nevarat pÄrvÄ“rtÄ“t šī veida barotni." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "PÄrvÄ“rtÄ“t rakstus %s?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 #, fuzzy msgid "Rescoring articles..." msgstr "PÄrvÄ“rtÄ“t rakstus" -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "Ir pieejama jauna versija!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" msgstr "Atcelt meklēšanu" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Atzvaigžņot rakstu" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Zvaigžņot rakstu" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "AtpublicÄ“t rakstu" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "PublicÄ“t rakstu" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "Nav izvÄ“lÄ“ts raksts." +msgstr[1] "Nav izvÄ“lÄ“ts raksts." + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Nav norÄdÄ«ts raksts." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 #, fuzzy msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "DzÄ“st %d izvÄ“lÄ“tos rakstus %s?" msgstr[1] "DzÄ“st %d izvÄ“lÄ“tos rakstus %s?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 #, fuzzy msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "DzÄ“st %d izvÄ“lÄ“tos rakstus?" msgstr[1] "DzÄ“st %d izvÄ“lÄ“tos rakstus?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 #, fuzzy msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "ArhivÄ“t %d izvÄ“lÄ“tos rakstus %s?" msgstr[1] "ArhivÄ“t %d izvÄ“lÄ“tos rakstus %s?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 #, fuzzy msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "PÄrvietot %d arhivÄ“tos rakstus atpakaļ?" msgstr[1] "PÄrvietot %d arhivÄ“tos rakstus atpakaļ?" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 #, fuzzy msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "AtzÄ«mÄ“t %d izvÄ“lÄ“tos rakstus %s kÄ lasÄ«tus?" msgstr[1] "AtzÄ«mÄ“t %d izvÄ“lÄ“tos rakstus %s kÄ lasÄ«tus?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "Rediģēt rakstu iezÄ«mes" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 #, fuzzy msgid "Saving article tags..." msgstr "Rediģēt rakstu iezÄ«mes" -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Nav izvÄ“lÄ“ts raksts." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Nav atrasti iezÄ«mÄ“jamie raksti" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 #, fuzzy msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "IezÄ«mÄ“t %d rakstus kÄ lasÄ«tus?" msgstr[1] "IezÄ«mÄ“t %d rakstus kÄ lasÄ«tus?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "AtvÄ“rt sÄkotnÄ“jo rakstu" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 #, fuzzy msgid "Display article URL" msgstr "ParÄdÄ«t URL" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 #, fuzzy msgid "Toggle marked" msgstr "PÄrslÄ“gt zvaigžņoÅ¡anu" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Pievienot etiÄ·eti" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "DzÄ“st etiÄ·eti" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "Atskaņo..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "Klikšķiniet, lai apturÄ“tu" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "Ievadiet jauno vÄ“rtÄ“jumu izvÄ“lÄ“tajiem rakstiem:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "Ievadiet jaunu vÄ“rtÄ“jumu Å¡im rakstam:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 #, fuzzy msgid "Article URL:" msgstr "Visus rakstus" @@ -3680,6 +3746,36 @@ msgstr "KopÄ«got ar URL" msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." msgstr "LÅ«dzu neaizveriet logu lÄ«dz ir pabeigta atjaunoÅ¡ana. Pirms turpinÄt, izveidojiet jÅ«su tt-rss mapes rezerves kopiju." +#~ msgid "Switch to digest..." +#~ msgstr "PÄrslÄ“gties uz Ä«ssavilkumu..." + +#~ msgid "Show tag cloud..." +#~ msgstr "RadÄ«t birku mÄkoni..." + +#~ msgid "Click to play" +#~ msgstr "Klikšķiniet, lai atskaņotu" + +#~ msgid "Play" +#~ msgstr "Atskaņot" + +#~ msgid "Visit the website" +#~ msgstr "ApmeklÄ“t vietni" + +#~ msgid "Select theme" +#~ msgstr "IzvÄ“lieties tÄ“mu" + +#~ msgid "I have scanned the code and would like to enable OTP" +#~ msgstr "Esmu noskenÄ“jis Å¡o kodu un vÄ“los iespÄ“jot vienreizlietojamo paroli" + +#~ msgid "Playing..." +#~ msgstr "Atskaņo..." + +#, fuzzy +#~ msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#~ msgstr "" +#~ "NeizdevÄs augÅ¡uplÄdÄ“t failu. IespÄ“jams, jums ir jÄpielÄgo upload_max_filesize iestatÄ«jums\n" +#~ "\t\t\t\tPHP.ini failÄ (tekoÅ¡Ä vÄ“rtÄ«ba = %s)" + #~ msgid "Default interval between feed updates" #~ msgstr "NoklusÄ“tais barotņu atjaunoÅ¡anas intervÄls " @@ -3792,9 +3888,6 @@ msgstr "LÅ«dzu neaizveriet logu lÄ«dz ir pabeigta atjaunoÅ¡ana. Pirms turpinÄt, #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "Vai atzÄ«mÄ“t redzamos rakstus %s kÄ lasÄ«tus?" -#~ msgid "Date" -#~ msgstr "Datums" - #~ msgid "Score" #~ msgstr "NovÄ“rtÄ“jums" diff --git a/locale/nb_NO/LC_MESSAGES/messages.mo b/locale/nb_NO/LC_MESSAGES/messages.mo Binary files differindex 4aaff6f12..b12aac593 100644 --- a/locale/nb_NO/LC_MESSAGES/messages.mo +++ b/locale/nb_NO/LC_MESSAGES/messages.mo diff --git a/locale/nb_NO/LC_MESSAGES/messages.po b/locale/nb_NO/LC_MESSAGES/messages.po index 50667c609..98bd93ace 100644 --- a/locale/nb_NO/LC_MESSAGES/messages.po +++ b/locale/nb_NO/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Tiny Tiny RSS 1.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: 2009-05-02 00:10+0100\n" "Last-Translator: Christian Lomsdalen <christian@vindstille.net>\n" "Language-Team: Norwegian BokmÃ¥l <christian@vindstille.net>\n" @@ -16,88 +16,89 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Bruk standard" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Slett aldri" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "1 uke gammel" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "2 uker gammel" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "1 mÃ¥ned gammel" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "2 mÃ¥neder gammel" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "3 mÃ¥neder gammel" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Standard intervall:" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "SlÃ¥ av oppdateringer" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "Hvert 15. minutt" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "Hvert 30. minutt" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "PÃ¥ timen" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "Hver 4. time" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "Hver 12. time" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "Daglig" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "Ukentlig" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "Bruker" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Superbruker" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Administrator" @@ -154,356 +155,351 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "SQL escaping testen feilen, sjekk database og PHP konfigurasjonene dine." -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "laster, vennligst vent" -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Skjul nyhetskanalsslisten" -#: index.php:169 +#: index.php:162 #, fuzzy msgid "Show articles" msgstr "Lagrede artikler" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Tilpasset" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Alle artikler" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "Favoritter" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "Publisert" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "Ulest" -#: index.php:177 +#: index.php:170 #, fuzzy msgid "Unread First" msgstr "Ulest" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Ignorer poenggivning" -#: index.php:182 +#: index.php:175 #, fuzzy msgid "Sort articles" msgstr "Lagrede artikler" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Standard" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "Tittel" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Marker som lest" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Ny versjon av Tiny Tiny Rss er tilgjengelig!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Handlinger..." -#: index.php:233 +#: index.php:225 #, fuzzy msgid "Preferences..." msgstr "Innstillinger" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Søk..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Nyhetsstrømshandlinger:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "Abonner pÃ¥ nyhetsstrøm..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Rediger nyhetsstrømmen..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Sett poeng pÃ¥ nytt for nyhetskanalene" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Avabonner" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Alle nyhetsstrømmer:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Skjul/vis leste nyhetsstrømmer" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Andre handlinger:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "" - -#: index.php:247 -#, fuzzy -msgid "Show tag cloud..." -msgstr "Tag-sky" - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 #, fuzzy msgid "Toggle widescreen mode" msgstr "Tillatt endringer i kategorirekkefølgen?" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "" -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Lag merkelapp..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Lag filter..." -#: index.php:252 +#: index.php:240 #, fuzzy msgid "Keyboard shortcuts help" msgstr "Tastatursnarveier" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Logg ut" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Innstillinger" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Tastatursnarveier" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Forlat innstillinger" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Nyhetsstrømmer" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "Filtre" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Merkelapper" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Brukere" -#: register.php:186 +#: prefs.php:132 +msgid "System" +msgstr "" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "Lag ny konto" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "Registrering av nye brukere er administrativt avskrudd" -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Returner til Tiny Tiny RSS" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "Ditt midlertidige passord vil bli sendt til den oppgitte e-posten. Kontoer, som ikke blir logget inn pÃ¥, blir slettet automatisk 24 timer etter at passordet ble sendt." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Ønsket brukernavn:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "Sjekk tilgjengeligheten" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "E-post:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Hvor mye er to pluss to:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Send registreringen" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "Registreringsinformasjonen din er ufullstendig." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Beklager, brukernavn er allerede tatt." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "Registrering feilet" -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Kontoen ble opprettet med suksess." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "Registrering av nye brukere er stengt." -#: update.php:56 +#: update.php:55 #, fuzzy msgid "Tiny Tiny RSS data update script." msgstr "Tiny Tiny RSS-databasen er oppdatert" #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Ukategorisert" @@ -518,350 +514,339 @@ msgstr[1] "Favorittartikler" msgid "No feeds found." msgstr "Ingen nyhetsstrømmer ble funnet." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Snarveier" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Alle Nyhetsstrømmer" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Favorittartikler" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Publiserte artikler" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Ferske artikler" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "Alle artikler" -#: include/functions.php:1846 +#: include/functions.php:1892 #, fuzzy msgid "Archived articles" msgstr "Lagrede artikler" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Navigasjon" -#: include/functions.php:1912 +#: include/functions.php:1958 #, fuzzy msgid "Open next feed" msgstr "Generert nyhetsstrøm" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "" -#: include/functions.php:1914 +#: include/functions.php:1960 #, fuzzy msgid "Open next article" msgstr "Vis opprinnelig artikkelinnhold" -#: include/functions.php:1915 +#: include/functions.php:1961 #, fuzzy msgid "Open previous article" msgstr "Vis opprinnelig artikkelinnhold" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "" -#: include/functions.php:1918 +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" msgstr "" -#: include/functions.php:1919 +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" msgstr "" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Vis søkevinduet" -#: include/functions.php:1921 +#: include/functions.php:1967 #, fuzzy msgid "Article" msgstr "Alle artikler" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Sett som favoritt" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "Sett som publisert" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Sett som ulest" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Endre stikkord" -#: include/functions.php:1926 +#: include/functions.php:1972 #, fuzzy msgid "Dismiss selected" msgstr "Fjerne merkede artikler fra merkelappen?" -#: include/functions.php:1927 +#: include/functions.php:1973 #, fuzzy msgid "Dismiss read" msgstr "Publiser artiklen" -#: include/functions.php:1928 +#: include/functions.php:1974 #, fuzzy msgid "Open in new window" msgstr "Ã…pne artikkel i nytt nettleservindu" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 #, fuzzy msgid "Mark below as read" msgstr "Marker som lest" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 #, fuzzy msgid "Mark above as read" msgstr "Marker som lest" -#: include/functions.php:1931 +#: include/functions.php:1977 #, fuzzy msgid "Scroll down" msgstr "Alt ferdig." -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "" -#: include/functions.php:1933 +#: include/functions.php:1979 #, fuzzy msgid "Select article under cursor" msgstr "Velg artikkelen under musepekeren" -#: include/functions.php:1934 +#: include/functions.php:1980 #, fuzzy msgid "Email article" msgstr "Alle artikler" -#: include/functions.php:1935 +#: include/functions.php:1981 #, fuzzy msgid "Close/collapse article" msgstr "Fjern artikler" -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" msgstr "Tillatt endringer i kategorirekkefølgen?" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 #, fuzzy msgid "Toggle embed original" msgstr "Tillatt endringer i kategorirekkefølgen?" -#: include/functions.php:1939 +#: include/functions.php:1985 #, fuzzy msgid "Article selection" msgstr "Handlinger for aktive artikler" -#: include/functions.php:1940 +#: include/functions.php:1986 #, fuzzy msgid "Select all articles" msgstr "Fjern artikler" -#: include/functions.php:1941 +#: include/functions.php:1987 #, fuzzy msgid "Select unread" msgstr "Slett uleste artikler" -#: include/functions.php:1942 +#: include/functions.php:1988 #, fuzzy msgid "Select starred" msgstr "Sett som favorittartikkel" -#: include/functions.php:1943 +#: include/functions.php:1989 #, fuzzy msgid "Select published" msgstr "Slett uleste artikler" -#: include/functions.php:1944 +#: include/functions.php:1990 #, fuzzy msgid "Invert selection" msgstr "Handlinger for aktive artikler" -#: include/functions.php:1945 +#: include/functions.php:1991 #, fuzzy msgid "Deselect everything" msgstr "Fjern artikler" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Nyhetsstrøm" -#: include/functions.php:1947 +#: include/functions.php:1993 #, fuzzy msgid "Refresh current feed" msgstr "Oppdater aktive nyhetsstrømmer" -#: include/functions.php:1948 +#: include/functions.php:1994 #, fuzzy msgid "Un/hide read feeds" msgstr "Skjul/vis leste nyhetsstrømmer" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "Abonner pÃ¥ nyhetsstrøm" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Rediger nyhetsstrømmen" -#: include/functions.php:1952 +#: include/functions.php:1998 #, fuzzy msgid "Reverse headlines" msgstr "Motsatt titteloversikt (eldste først)" -#: include/functions.php:1953 +#: include/functions.php:1999 #, fuzzy msgid "Debug feed update" msgstr "Alle nyhetsstrømmer er oppdatert" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Marker alle nyhetsstrømmer som lest" -#: include/functions.php:1955 +#: include/functions.php:2001 #, fuzzy msgid "Un/collapse current category" msgstr "Velg for Ã¥ slÃ¥ sammen kategorien" -#: include/functions.php:1956 +#: include/functions.php:2002 #, fuzzy msgid "Toggle combined mode" msgstr "Tillatt endringer i kategorirekkefølgen?" -#: include/functions.php:1957 +#: include/functions.php:2003 #, fuzzy msgid "Toggle auto expand in combined mode" msgstr "Tillatt endringer i kategorirekkefølgen?" -#: include/functions.php:1958 +#: include/functions.php:2004 #, fuzzy msgid "Go to" msgstr "GÃ¥ til..." -#: include/functions.php:1960 +#: include/functions.php:2006 #, fuzzy msgid "Fresh" msgstr "Oppdater" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "Tag-sky" -#: include/functions.php:1965 +#: include/functions.php:2011 #, fuzzy msgid "Other" msgstr "Andre:" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "Lag merkelapp" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "Lag filter" -#: include/functions.php:1968 +#: include/functions.php:2014 #, fuzzy msgid "Un/collapse sidebar" msgstr "Skjul nyhetskanalsslisten" -#: include/functions.php:1969 +#: include/functions.php:2015 #, fuzzy msgid "Show help dialog" msgstr "Vis søkevinduet" -#: include/functions.php:2492 +#: include/functions.php:2536 #, fuzzy, php-format msgid "Search results: %s" msgstr "Søkeresultat" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -#, fuzzy -msgid "Click to play" -msgstr "Trykk for Ã¥ endre" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr "-" -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "Ingen stikkord" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Rediger stikkordene for denne artikkelen" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 #, fuzzy msgid "Originally from:" msgstr "Vis opprinnelig artikkelinnhold" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 #, fuzzy msgid "Feed URL" msgstr "Nyhetsstrøm" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -873,83 +858,86 @@ msgstr "Nyhetsstrøm" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Lukk dette vinduet" -#: include/functions.php:3451 +#: include/functions.php:3458 #, fuzzy msgid "(edit note)" msgstr "Rediger notat" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "Ukjent type" -#: include/functions.php:3742 +#: include/functions.php:3749 #, fuzzy msgid "Attachments" msgstr "Vedlegg:" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Brukernavn:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Passord:" -#: include/login_form.php:197 +#: include/login_form.php:199 #, fuzzy msgid "I forgot my password" msgstr "Feil brukernavn og/eller passord" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "SprÃ¥k:" - -#: include/login_form.php:209 +#: include/login_form.php:205 #, fuzzy msgid "Profile:" msgstr "Fil:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 #, fuzzy msgid "Default profile" msgstr "Standard artikkelbegrensning" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Logg inn" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "Sesjonen kunne ikke valideres (feil IP)" @@ -966,168 +954,168 @@ msgstr "Denne artikkelens stikkord (separert med kommaer):" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "Lagre" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Avbryt" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 #, fuzzy msgid "Share with Tiny Tiny RSS" msgstr "Returner til Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "Tittel:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "Nettadresse:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 #, fuzzy msgid "Content:" msgstr "Innhold" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 #, fuzzy msgid "Labels:" msgstr "Merkelapper" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "" -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 #, fuzzy msgid "Not logged in" msgstr "Sist innlogget" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Feil brukernavn og/eller passord" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Abonnerer allerede pÃ¥ <b>%s</b>" -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Abonnerer pÃ¥ <b>%s</b>" -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Abonnerer allerede pÃ¥ <b>%s</b>" -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, fuzzy, php-format msgid "No feeds found in <b>%s</b>." msgstr "Ingen nyhetsstrømmer ble funnet." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 #, fuzzy msgid "Multiple feed URLs found." msgstr "Adresse for nyhetsstrømmen for offentliggjorte innlegg har endret seg." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Abonnerer allerede pÃ¥ <b>%s</b>" -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 #, fuzzy msgid "Subscribe to selected feed" msgstr "Fjern abonnement pÃ¥ valgte nyhetsstrømmer" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Rediger abonnementsalternativer" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 #, fuzzy msgid "Password recovery" msgstr "Passord:" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "" -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "Nullstill passordet" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "" -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 #, fuzzy msgid "Go back" msgstr "GÃ¥ tilbake" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "AdgangsnivÃ¥et ditt er for lavt for Ã¥ kjøre dette scriptet" -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Databaseoppdaterer" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Utfør oppdateringene" @@ -1186,7 +1174,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, fuzzy, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Ny versjon av Tiny Tiny Rss er tilgjengelig!" @@ -1196,7 +1184,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1208,123 +1196,128 @@ msgstr "" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -#, fuzzy -msgid "Visit the website" -msgstr "Besøk den offisielle siden" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "Siste oppdatering:" -#: classes/feeds.php:83 +#: classes/feeds.php:75 #, fuzzy msgid "View as RSS feed" msgstr "Se nyhetsstrømmene" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 #, fuzzy msgid "View as RSS" msgstr "Se stikkord" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Velg:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "Alle" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Motsatt" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Ingen" -#: classes/feeds.php:101 +#: classes/feeds.php:93 #, fuzzy msgid "More..." msgstr "Laster hjelp..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Marker utvalg:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Utvalg:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 #, fuzzy msgid "Set score" msgstr "Poeng" -#: classes/feeds.php:115 +#: classes/feeds.php:107 #, fuzzy msgid "Archive" msgstr "Artikkeldato" -#: classes/feeds.php:117 +#: classes/feeds.php:109 #, fuzzy msgid "Move back" msgstr "GÃ¥ tilbake" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 #, fuzzy msgid "Delete" msgstr "Standard" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 #, fuzzy msgid "Forward by email" msgstr "Marker artikkel som favoritt" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Nyhetsstrøm:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "Nyhetsstrømmen ble ikke funnet" -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "Slett aldri" + +#: classes/feeds.php:360 #, fuzzy, php-format msgid "Imported at %s" msgstr "Importer" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "marker som lest" @@ -1376,9 +1369,9 @@ msgid "Feed or site URL" msgstr "Nyhetsstrøm" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "Plasser i kategori..." @@ -1389,24 +1382,24 @@ msgstr "Alle Nyhetsstrømmer" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "Autentifisering" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Logg inn" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 #, fuzzy msgid "Password" msgstr "Passord:" @@ -1417,7 +1410,7 @@ msgstr "Denne nyhetsstrømmen krever autentifisering" #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "Abonner" @@ -1430,8 +1423,8 @@ msgstr "Flere nyhetsstrømmer" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "Søk" @@ -1455,8 +1448,8 @@ msgstr "Antall:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Fjern" @@ -1541,17 +1534,39 @@ msgstr "Legger til nyhetsstrøm..." msgid "Processing category: %s" msgstr "Plasser i kategori..." -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "Feil: Kan ikke laste opp OPMLfil" + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Feil: Kan ikke laste opp OPMLfil" -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "Feil: Kan ikke laste opp OPMLfil" + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Feil under behandling av dokumentet" #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "AdgangsnivÃ¥et ditt er for lavt for Ã¥ Ã¥pne denne siden." @@ -1585,8 +1600,8 @@ msgid "Change password to" msgstr "Endre passordet til" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Alternativer:" @@ -1632,13 +1647,13 @@ msgstr "[tt-rss] Varsel om endring av passord" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 #, fuzzy msgid "Select" msgstr "Velg:" @@ -1654,7 +1669,7 @@ msgstr "Daglig" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Rediger" @@ -1667,7 +1682,7 @@ msgid "Last login" msgstr "Siste innlogging" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "Trykk for Ã¥ endre" @@ -1681,7 +1696,7 @@ msgstr "Ingen matchende brukere ble funnet" #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Overskrift" @@ -1724,43 +1739,43 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "" #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Match" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "Legg til" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 #, fuzzy msgid "Apply actions" msgstr "Nyhetsstrømshandlinger" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "Tillatt" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 #, fuzzy msgid "Match any rule" msgstr "Match pÃ¥:" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 #, fuzzy msgid "Inverse matching" msgstr "Motsatt markering" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "Test" @@ -1779,66 +1794,66 @@ msgid "Combine" msgstr "" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 #, fuzzy msgid "Reset sort order" msgstr "Nullstill passordet" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Tilbakestill poengsummene for artiklene" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Lag" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "PÃ¥ felt:" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "i" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #, fuzzy msgid "Save rule" msgstr "Lagre" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 #, fuzzy msgid "Add rule" msgstr "Legger til kategori for nyhetsstrømmer" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Utfør handlingen" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "med parametrene:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #, fuzzy msgid "Save action" msgstr "Panelhandlinger" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 #, fuzzy msgid "Add action" msgstr "Nyhetsstrømshandlinger" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 msgid "[No caption]" msgstr "Ingen bildetekst" @@ -1991,7 +2006,7 @@ msgid "Purge unread articles" msgstr "Slett uleste artikler" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Motsatt titteloversikt (eldste først)" @@ -2034,7 +2049,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "Fjern alle HTML-koder utenom de mest vanlige nÃ¥r artikler leses." #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 #, fuzzy msgid "Customize stylesheet" msgstr "URL til brukerbestemt utseendemal (CSS)" @@ -2044,7 +2059,7 @@ msgid "Customize CSS stylesheet to your liking" msgstr "" #: classes/pref/prefs.php:55 -msgid "User timezone" +msgid "Time zone" msgstr "" #: classes/pref/prefs.php:56 @@ -2056,22 +2071,28 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Velg utseende" +#, fuzzy +msgid "Language" +msgstr "SprÃ¥k:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +#, fuzzy +msgid "Theme" +msgstr "Utseender" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "Gammelt passord kan ikke være blankt." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "Nytt passord kan ikke vært blankt." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Innskrivne passord matcher ikke." @@ -2079,240 +2100,250 @@ msgstr "Innskrivne passord matcher ikke." msgid "Function not supported by authentication module." msgstr "" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "Konfigurasjonen er lagret." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Ukjent valg: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 #, fuzzy msgid "Your personal data has been saved." msgstr "Passord har blitt endret." -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 #, fuzzy msgid "Personal data / Authentication" msgstr "Autentifisering" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Personlig informasjon" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "E-post" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "TilgangsnivÃ¥" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 #, fuzzy msgid "Save data" msgstr "Lagre" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 #, fuzzy msgid "Your password is at default value, please change it." msgstr "" "Passordet ditt er et standardpassord, \n" "\t\t\t\t\t\tVennligst bytt." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Gammelt passord" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Nytt passord" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Bekreft passord" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Endre passord" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 #, fuzzy msgid "Enter your password" msgstr "Feil brukernavn og/eller passord" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 #, fuzzy msgid "Disable OTP" msgstr "(Avskrudd)" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "" -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "Vennligst skriv inn et notat for denne artikkelen:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 #, fuzzy msgid "Enable OTP" msgstr "Tillatt" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 #, fuzzy msgid "Customize" msgstr "URL til brukerbestemt utseendemal (CSS)" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 #, fuzzy msgid "Register" msgstr "Registrert" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Lagre konfigurasjonen" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 #, fuzzy msgid "Save and exit preferences" msgstr "Forlat innstillinger" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 #, fuzzy msgid "Manage profiles" msgstr "Lag filter" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Tilbake til standard" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 #, fuzzy msgid "Description" msgstr "beskrivelse" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 #, fuzzy msgid "Clear data" msgstr "Slett nyhetsstrømsdata" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 #, fuzzy msgid "Enable selected plugins" msgstr "Bruk nyhetsstrømsikoner" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "Feil brukernavn og/eller passord" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 #, fuzzy msgid "Incorrect password" msgstr "Feil brukernavn og/eller passord" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "" -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 #, fuzzy msgid "Create profile" msgstr "Lag filter" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 #, fuzzy msgid "(active)" msgstr "Tilpasset" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 #, fuzzy msgid "Remove selected profiles" msgstr "Fjerne valgte filtre?" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 #, fuzzy msgid "Activate profile" msgstr "Fjerne valgte filtre?" @@ -2321,267 +2352,292 @@ msgstr "Fjerne valgte filtre?" msgid "Check to enable field" msgstr "Marker for Ã¥ tillate felt" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 #, fuzzy msgid "Feed Title" msgstr "Tittel" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "Oppdater" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Slett artikler:" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "" -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 #, fuzzy msgid "Hide from Popular feeds" msgstr "Skjul fra min nyhetsstrømslisten" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "Inkluder i e-postsammendraget" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Mellomlagre bilder lokalt pÃ¥ serveren" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 #, fuzzy msgid "Mark updated articles as unread" msgstr "Marker alle artikler som leste?" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 #, fuzzy msgid "Icon" msgstr "Handling" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 #, fuzzy msgid "Resubscribe to push updates" msgstr "Abonnerer pÃ¥ følgende nyhetsstrømmer:" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "" -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "Alt ferdig." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 #, fuzzy msgid "Feeds with errors" msgstr "Nyhetsstrømsredigerer" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 #, fuzzy msgid "Inactive feeds" msgstr "Hele nyhetsstrømmen" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 #, fuzzy msgid "Edit selected feeds" msgstr "Sletter den valgte nyhetsstrømmen..." -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 #, fuzzy msgid "Batch subscribe" msgstr "Avabonner" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 #, fuzzy msgid "Categories" msgstr "Kategori:" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 #, fuzzy msgid "Add category" msgstr "Legger til kategori for nyhetsstrømmer" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 #, fuzzy msgid "Remove selected" msgstr "Fjerne valgte filtre?" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 #, fuzzy msgid "(Un)hide empty categories" msgstr "Rediger kategorier" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 #, fuzzy msgid "More actions..." msgstr "Handlinger..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Slett manuelt" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "Slett nyhetsstrømsdata" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "" -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "" -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 #, fuzzy msgid "Import my OPML" msgstr "Importerer OPML (bruker DOMXML-utvidelsen)..." -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 #, fuzzy msgid "Include settings" msgstr "Inkluder i e-postsammendraget" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 #, fuzzy msgid "Export OPML" msgstr "Eksporter OPML" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 #, fuzzy msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "Publiserte artikler kan bli eksportert som en offentlig RSS-nyhetskanal og kan bli abonnert pÃ¥ av alle som vet adressen som blir spesifisert nedenfor." -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "" -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 #, fuzzy msgid "Firefox integration" msgstr "Firefox integrering" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "Denne Tiny Tiny RSS siden kan bli brukt som nyhetsstrømsleser for Firefox ved Ã¥ trykke pÃ¥ lenken nedenfor." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Trykk her for Ã¥ registrere denne siden som nyhetsstrømsleser" -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 #, fuzzy msgid "Published & shared articles / Generated feeds" msgstr "Sett poeng pÃ¥ nytt for artiklene i de valgte nyhetskanalene?" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 #, fuzzy msgid "Published articles and generated feeds" msgstr "Sett poeng pÃ¥ nytt for artiklene i de valgte nyhetskanalene?" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "Publiserte artikler kan bli eksportert som en offentlig RSS-nyhetskanal og kan bli abonnert pÃ¥ av alle som vet adressen som blir spesifisert nedenfor." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 #, fuzzy msgid "Display URL" msgstr "Vis stikkord" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 #, fuzzy msgid "Articles shared by URL" msgstr "Marker artikkel som favoritt" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "" -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 #, fuzzy msgid "Unshare all articles" msgstr "Uleste artikler" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 #, fuzzy msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "Disse nyhetsstrømmene kunne ikke oppdateres pÃ¥ grunn av feil:" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 #, fuzzy msgid "Click to edit feed" msgstr "Trykk for Ã¥ endre" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 #, fuzzy msgid "Unsubscribe from selected feeds" msgstr "Fjern abonnement pÃ¥ valgte nyhetsstrømmer" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Disse nyhetsstrømmene kunne ikke oppdateres pÃ¥ grunn av feil:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 #, fuzzy msgid "Feeds require authentication." msgstr "Denne nyhetsstrømmen krever autentifisering" -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +#, fuzzy +msgid "Refresh" +msgstr "Oppdater" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +msgid "Filename" +msgstr "" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Dato" + +#: plugins/digest/digest_body.php:57 #, fuzzy msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" @@ -2589,33 +2645,33 @@ msgstr "" "\t\tfor at dette programmet skal fungere ordentlig. Vennligst sjekk din \n" "\t\tnettlesers instillinger." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Hei, " -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 #, fuzzy msgid "Close article" msgstr "Fjern artikler" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 #, fuzzy msgid "Configuration saved." msgstr "Konfigurasjonen er lagret." @@ -2633,17 +2689,17 @@ msgstr "Passord har blitt endret." msgid "Old password is incorrect." msgstr "Gammelt passord er feil" -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "" @@ -2651,448 +2707,458 @@ msgstr "" msgid "Open regular version" msgstr "" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 #, fuzzy msgid "Enable categories" msgstr "Tillatt kategorisering av nyhetsstrømmer" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 #, fuzzy msgid "Browse categories like folders" msgstr "Tilbakestill kategorirekkefølgen" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 #, fuzzy msgid "Show images in posts" msgstr "Ikke vis bilder i artiklene" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 #, fuzzy msgid "Hide read articles and feeds" msgstr "Skjul/vis leste nyhetsstrømmer" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 #, fuzzy msgid "Sort feeds by unread count" msgstr "Sorter nyhetsstrømer ut i fra antall uleste artikler" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 #, fuzzy msgid "Multiple articles" msgstr "Alle artikler" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 #, fuzzy msgid "Forward selected article(s) by email." msgstr "Marker artikkel som favoritt" -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 #, fuzzy msgid "Close this dialog" msgstr "Lukk dette vinduet" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, fuzzy, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "Returner til Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 #, fuzzy msgid "Subscribe in Tiny Tiny RSS" msgstr "Returner til Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 #, fuzzy msgid "Article archive" msgstr "Artikkeldato" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "" -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 #, fuzzy msgid "Export my data" msgstr "Eksporter OPML" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importer" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 #, fuzzy msgid "Could not import: incorrect schema version." msgstr "Kunne ikke finne den nødvendige skjemafilen, nødvendig versjon:" -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "" -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, fuzzy, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "Endre Stikkord" msgstr[1] "Endre Stikkord" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, fuzzy, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "Allerede importert." msgstr[1] "Allerede importert." -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, fuzzy, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "Ingen valgt nyhetsstrøm" msgstr[1] "Ingen valgt nyhetsstrøm" -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "" -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 #, fuzzy msgid "Prepare data" msgstr "Lagre" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +#, fuzzy +msgid "No file uploaded." +msgstr "Ingen OPML-fil til Ã¥ lastes opp." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 #, fuzzy msgid "To:" msgstr "Topp" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 #, fuzzy msgid "Subject:" msgstr "Velg:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 #, fuzzy msgid "Send e-mail" msgstr "Skift e-post" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 #, fuzzy msgid "Edit article note" msgstr "Endre Stikkord" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 #, fuzzy msgid "Example Pane" msgstr "Eksempler" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 #, fuzzy msgid "Set value" msgstr "Sett som favorittartikkel" -#: plugins/googlereaderimport/init.php:72 -#, fuzzy -msgid "No file uploaded." -msgstr "Ingen OPML-fil til Ã¥ lastes opp." - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 #, fuzzy msgid "Linked" msgstr "Lenke" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 #, fuzzy msgid "Access key:" msgstr "TilgangsnivÃ¥:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 #, fuzzy msgid "Access key" msgstr "TilgangsnivÃ¥" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "" -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 #, fuzzy msgid "Generate new key" msgstr "Generert nyhetsstrøm" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 #, fuzzy msgid "Link instance" msgstr "Endre stikkord" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 #, fuzzy msgid "Stored feeds" msgstr "Flere nyhetsstrømmer" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 #, fuzzy msgid "Create link" msgstr "Lag" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 #, fuzzy msgid "Share by URL" msgstr "Marker artikkel som favoritt" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 #, fuzzy msgid "Update Tiny Tiny RSS" msgstr "Returner til Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 #, fuzzy msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Tiny Tiny RSS-databasen er oppdatert" -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." msgstr "" -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 #, fuzzy msgid "Ready to update." msgstr "Siste oppdatering:" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 #, fuzzy msgid "Start update" msgstr "Siste oppdatering:" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Marker alle artikler i %s som leste?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 #, fuzzy msgid "Mark all articles in %s older than 1 day as read?" msgstr "Marker alle artikler i %s som leste?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 #, fuzzy msgid "Mark all articles in %s older than 1 week as read?" msgstr "Marker alle artikler i %s som leste?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 #, fuzzy msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "Marker alle artikler i %s som leste?" -#: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." msgstr "" -#: js/functions.js:214 -msgid "close" +#: js/functions.js:107 +msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "" -#: js/functions.js:586 +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "Trykk for Ã¥ endre" + +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 #, fuzzy msgid "Upload complete." msgstr "Oppdaterte artikler" -#: js/functions.js:692 +#: js/functions.js:718 #, fuzzy msgid "Remove stored feed icon?" msgstr "Fjern lagrede data" -#: js/functions.js:697 +#: js/functions.js:723 #, fuzzy msgid "Removing feed icon..." msgstr "Fjerner nyhetsstrøm..." -#: js/functions.js:702 +#: js/functions.js:728 #, fuzzy msgid "Feed icon removed." msgstr "Nyhetsstrømmen ble ikke funnet" -#: js/functions.js:724 +#: js/functions.js:750 #, fuzzy msgid "Please select an image file to upload." msgstr "Vennligst velg en nyhetsstrøm" -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "" -#: js/functions.js:727 +#: js/functions.js:753 #, fuzzy msgid "Uploading, please wait..." msgstr "laster, vennligst vent" -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "Vennligst skriv inn merkelappstekst:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "Kan ikke skape merkelapp, mangler overskrift." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "Abonner pÃ¥ nyhetsstrøm" -#: js/functions.js:818 +#: js/functions.js:844 #, fuzzy msgid "Subscribed to %s" msgstr "Abonnerer pÃ¥ følgende nyhetsstrømmer:" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "" -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "" -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "Sletter den valgte nyhetsstrømmen..." + +#: js/functions.js:874 #, fuzzy msgid "Couldn't download the specified URL: %s" msgstr "Kan ikke abonnere: Ingen nyhetsstrømsadresse er blitt gitt" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 #, fuzzy msgid "You are already subscribed to this feed." @@ -3122,7 +3188,7 @@ msgid "Subscription reset." msgstr "Abonner pÃ¥ nyhetsstrøm..." #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "Fjerne abonnement pÃ¥ %s?" @@ -3130,77 +3196,77 @@ msgstr "Fjerne abonnement pÃ¥ %s?" msgid "Removing feed..." msgstr "Fjerner nyhetsstrøm..." -#: js/functions.js:1323 +#: js/functions.js:1324 #, fuzzy msgid "Please enter category title:" msgstr "Vennligst skriv inn et notat for denne artikkelen:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "Prøver Ã¥ endre adressen..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "Du kan ikke endre denne typen nyhetsstrøm" -#: js/functions.js:1560 +#: js/functions.js:1561 #, fuzzy msgid "Edit Feed" msgstr "Rediger nyhetsstrømmen" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 #, fuzzy msgid "Saving data..." msgstr "Lagrer Nyhetsstrøm" -#: js/functions.js:1598 +#: js/functions.js:1599 #, fuzzy msgid "More Feeds" msgstr "Flere nyhetsstrømmer" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Ingen nyhetsstrømmer er valgt" -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "" -#: js/functions.js:1740 +#: js/functions.js:1741 #, fuzzy msgid "Feeds with update errors" msgstr "Oppdateringsfeil" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 #, fuzzy msgid "Remove selected feeds?" msgstr "Fjerne valgte filtre?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 #, fuzzy msgid "Removing selected feeds..." msgstr "Fjerner valgte filtre..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Hjelp" @@ -3258,7 +3324,7 @@ msgid "Removing selected labels..." msgstr "Fjerner merkede merkelapper..." #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "Ingen merkelapper er markert" @@ -3386,347 +3452,344 @@ msgstr "Vennligst velg en eller flere nyhetsstrømmer først" msgid "Importing, please wait..." msgstr "laster, vennligst vent" -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "Tilbakefør til standardinnstillingene" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "" -#: js/prefs.js:1088 +#: js/prefs.js:1102 #, fuzzy msgid "Removing category..." msgstr "Lag kategori" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Fjerne valgte kategorier?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "Fjerner valgte kategorier..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Ingen kategorier er valgt." -#: js/prefs.js:1133 +#: js/prefs.js:1147 #, fuzzy msgid "Category title:" msgstr "Kategoriredigerer" -#: js/prefs.js:1137 +#: js/prefs.js:1151 #, fuzzy msgid "Creating category..." msgstr "Lag filter..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 #, fuzzy msgid "Feeds without recent updates" msgstr "Oppdateringsfeil" -#: js/prefs.js:1213 +#: js/prefs.js:1227 #, fuzzy msgid "Replace current OPML publishing address with a new one?" msgstr "Bytt ut nÃ¥værende publiseringsadresse med en ny?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "Rensker nyhetsstrøm..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Sett poeng pÃ¥ nytt for artiklene i de valgte nyhetskanalene?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 #, fuzzy msgid "Rescoring selected feeds..." msgstr "Rensker valgt nyhetsstrøm..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "Endre poengene til artiklene? Dette kan ta lang tid." -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." msgstr "Setter poeng pÃ¥ nytt for nyhetskanalene..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 #, fuzzy msgid "Reset selected labels to default colors?" msgstr "Sett merkelappsfargene til standard?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "" -#: js/prefs.js:1414 +#: js/prefs.js:1428 #, fuzzy msgid "Removing selected profiles..." msgstr "Fjerner valgte filtre..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 #, fuzzy msgid "No profiles are selected." msgstr "Ingen artikkel er valgt." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 #, fuzzy msgid "Activate selected profile?" msgstr "Fjerne valgte filtre?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 #, fuzzy msgid "Please choose a profile to activate." msgstr "Vennligst velg en eller flere nyhetsstrømmer først" -#: js/prefs.js:1458 +#: js/prefs.js:1472 #, fuzzy msgid "Creating profile..." msgstr "Lag filter" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 #, fuzzy msgid "Clearing URLs..." msgstr "Rensker nyhetsstrøm..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 #, fuzzy msgid "Generated URLs cleared." msgstr "Generert nyhetsstrøm" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Merkelappredigerer" -#: js/prefs.js:1771 +#: js/prefs.js:1785 #, fuzzy msgid "Subscribing to feeds..." msgstr "Abonnerer pÃ¥ nyhetsstrømmen..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Marker alle artikler som leste?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "Marker alle nyhetsstrømmer som lest" -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 #, fuzzy msgid "Please enable mail plugin first." msgstr "Vennligst velg en eller flere nyhetsstrømmer først" -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 #, fuzzy msgid "Please enable embed_original plugin first." msgstr "Vennligst velg en eller flere nyhetsstrømmer først" -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "Du kan ikke fjerne abonnement fra kategorien." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Vennligst velg en eller flere nyhetsstrømmer først" -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "Du kan ikke endre poengsummen for denne typen nyhetskanal" -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "Endre poengene for artiklene i %s?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "Endrer poengsummen for artiklene..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 #, fuzzy msgid "New version available!" msgstr "Ny versjon av Tiny Tiny Rss er tilgjengelig!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 #, fuzzy msgid "Cancel search" msgstr "Avbryt" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Fjern favorittmerkingen fra artiklen" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Marker artikkel som favoritt" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Fjern publiseringen av artikkelen." -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Publiser artiklen" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "Ingen artikkel er valgt." +msgstr[1] "Ingen artikkel er valgt." + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Ingen artikler er valgt." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 #, fuzzy msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "Marker %d valgte artikler i %s som leste?" msgstr[1] "Marker %d valgte artikler i %s som leste?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 #, fuzzy msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "Fjerne merkede artikler fra merkelappen?" msgstr[1] "Fjerne merkede artikler fra merkelappen?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 #, fuzzy msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "Marker %d valgte artikler i %s som leste?" msgstr[1] "Marker %d valgte artikler i %s som leste?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 #, fuzzy msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "Favorittartikler" msgstr[1] "Favorittartikler" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 #, fuzzy msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "Marker %d valgte artikler i %s som leste?" msgstr[1] "Marker %d valgte artikler i %s som leste?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 #, fuzzy msgid "Edit article Tags" msgstr "Endre Stikkord" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "Lagrer artikkelens kategorier..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Ingen artikkel er valgt." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Ingen artikler funnet som kan markeres" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 #, fuzzy msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "Marker %d artikkel/artikler som leste?" msgstr[1] "Marker %d artikkel/artikler som leste?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 #, fuzzy msgid "Open original article" msgstr "Vis opprinnelig artikkelinnhold" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 #, fuzzy msgid "Display article URL" msgstr "Vis stikkord" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 #, fuzzy msgid "Toggle marked" msgstr "Sett som favoritt" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Tildel stikkord" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 #, fuzzy msgid "Remove label" msgstr "Fjerne merkede merkelapper?" -#: js/viewfeed.js:2017 -#, fuzzy -msgid "Playing..." -msgstr "Laster nyhetsstrømmer..." - -#: js/viewfeed.js:2018 -#, fuzzy -msgid "Click to pause" -msgstr "Trykk for Ã¥ endre" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 #, fuzzy msgid "Please enter new score for selected articles:" msgstr "Vennligst skriv inn et notat for denne artikkelen:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 #, fuzzy msgid "Please enter new score for this article:" msgstr "Vennligst skriv inn et notat for denne artikkelen:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 #, fuzzy msgid "Article URL:" msgstr "Alle artikler" @@ -3851,6 +3914,25 @@ msgid "Backup your tt-rss directory before continuing. Please type 'yes' to cont msgstr "" #, fuzzy +#~ msgid "Show tag cloud..." +#~ msgstr "Tag-sky" + +#, fuzzy +#~ msgid "Click to play" +#~ msgstr "Trykk for Ã¥ endre" + +#, fuzzy +#~ msgid "Visit the website" +#~ msgstr "Besøk den offisielle siden" + +#~ msgid "Select theme" +#~ msgstr "Velg utseende" + +#, fuzzy +#~ msgid "Playing..." +#~ msgstr "Laster nyhetsstrømmer..." + +#, fuzzy #~ msgid "Default interval between feed updates" #~ msgstr "Standard intervall mellom nyhetsstrømsoppdateringer (i minutter)" @@ -3937,10 +4019,6 @@ msgstr "" #~ msgstr "Gammelt passord er feil" #, fuzzy -#~ msgid "Refresh" -#~ msgstr "Oppdater" - -#, fuzzy #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "Rediger nyhetsstrømmen" @@ -3956,9 +4034,6 @@ msgstr "" #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "Marker alle synlige artikler i %s som leste?" -#~ msgid "Date" -#~ msgstr "Dato" - #~ msgid "Score" #~ msgstr "Poeng" @@ -4256,10 +4331,6 @@ msgstr "" #~ msgid "Click to expand article" #~ msgstr "Trykk for Ã¥ utvide artikkel" -#, fuzzy -#~ msgid "Unable to load article." -#~ msgstr "Feil: Kan ikke laste opp OPMLfil" - #~ msgid "Update post on checksum change" #~ msgstr "Oppdaterer artikkel etter checksumbytte" @@ -4665,9 +4736,6 @@ msgstr "" #~ msgid "The configuration was reset to defaults." #~ msgstr "Konfigurasjonen er satt tilbake til standard" -#~ msgid "Themes" -#~ msgstr "Utseender" - #~ msgid "Change theme" #~ msgstr "Endre utseende" @@ -4872,9 +4940,6 @@ msgstr "" #~ msgid "Site:" #~ msgstr "Side:" -#~ msgid "Last updated:" -#~ msgstr "Siste oppdatering:" - #~ msgid "Other feeds: Top 25" #~ msgstr "Andre nyhetsstrømmer: Topp 25" diff --git a/locale/nl_NL/LC_MESSAGES/messages.mo b/locale/nl_NL/LC_MESSAGES/messages.mo Binary files differindex 16175a8af..e4537668d 100644 --- a/locale/nl_NL/LC_MESSAGES/messages.mo +++ b/locale/nl_NL/LC_MESSAGES/messages.mo diff --git a/locale/nl_NL/LC_MESSAGES/messages.po b/locale/nl_NL/LC_MESSAGES/messages.po index 54b96039d..ded35bd57 100644 --- a/locale/nl_NL/LC_MESSAGES/messages.po +++ b/locale/nl_NL/LC_MESSAGES/messages.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: TT-RSS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" -"PO-Revision-Date: 2013-03-23 11:28+0100\n" -"Last-Translator: Dingoe <translations@gvmelle.com>\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" +"PO-Revision-Date: 2013-05-02 13:55+0100\n" +"Last-Translator: ArmyOfPirates\n" "Language-Team: translations <LL@li.org>\n" "Language: DUTCH\n" "MIME-Version: 1.0\n" @@ -21,111 +21,113 @@ msgstr "" "X-Poedit-KeywordsList: _\n" "X-Poedit-Basepath: .\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" -msgstr "Gebruik standaard" +msgstr "Gebruik standaardwaarde" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Nooit opschonen" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "1 week oud" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "2 weken oud" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "1 maand oud" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "2 maanden oud" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "3 maanden oud" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Standaard interval" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 backend.php:93 msgid "Disable updates" msgstr "updates uitschakelen" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 backend.php:94 msgid "Each 15 minutes" msgstr "Elke 15 minuten" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 backend.php:95 msgid "Each 30 minutes" msgstr "Elke 30 minuten" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 backend.php:96 msgid "Hourly" msgstr "Ieder uur" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 backend.php:97 msgid "Each 4 hours" msgstr "Om de 4 uur" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 backend.php:98 msgid "Each 12 hours" msgstr "Om de 12 uur" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 backend.php:99 msgid "Daily" msgstr "Dagelijks" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 backend.php:100 msgid "Weekly" msgstr "Wekelijks" -#: backend.php:99 -#: classes/pref/users.php:123 +#: backend.php:103 classes/pref/users.php:123 classes/pref/system.php:44 msgid "User" msgstr "Gebruiker" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Hoofdgebruiker" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Beheerder" #: errors.php:9 -msgid "This program requires XmlHttpRequest to function properly. Your browser doesn't seem to support it." -msgstr "Dit programma vereist XmlHttpRequest om goed te functioneren. Uw browser lijkt dit niet te ondersteunen." +msgid "" +"This program requires XmlHttpRequest to function properly. Your browser " +"doesn't seem to support it." +msgstr "" +"Dit programma vereist XmlHttpRequest om goed te functioneren. Uw browser " +"lijkt dit niet te ondersteunen." #: errors.php:12 -msgid "This program requires cookies to function properly. Your browser doesn't seem to support them." -msgstr "Dit programma vereist cookies om goed te functioneren. Uw browser lijkt dit niet te ondersteunen." +msgid "" +"This program requires cookies to function properly. Your browser doesn't " +"seem to support them." +msgstr "" +"Dit programma vereist cookies om goed te functioneren. Uw browser lijkt dit " +"niet te ondersteunen." #: errors.php:15 -#, fuzzy msgid "Backend sanity check failed." -msgstr "Gezondheidscontrole server mislukt" +msgstr "Gezondheidscontrole server is mislukt." #: errors.php:17 msgid "Frontend sanity check failed." msgstr "Frontend gezondheidscontrole mislukt." #: errors.php:19 -msgid "Incorrect database schema version. <a href='db-updater.php'>Please update</a>." -msgstr "Onjuiste database schema versie. <a href='db-updater.php'>Bijwerken aub!</a>." +msgid "" +"Incorrect database schema version. <a href='db-updater.php'>Please " +"update</a>." +msgstr "" +"Onjuiste database schema versie. <a href='db-updater.php'>Bijwerken " +"aub!</a>." #: errors.php:21 msgid "Request not authorized." @@ -136,8 +138,12 @@ msgid "No operation to perform." msgstr "Geen uit te voeren opdracht." #: errors.php:25 -msgid "Could not display feed: query failed. Please check label match syntax or local configuration." -msgstr "Kon feed niet weergeven: de zoekopdracht is mislukt. Controleer aub de syntax van de labelzoektekst of de lokale configuratie. " +msgid "" +"Could not display feed: query failed. Please check label match syntax or " +"local configuration." +msgstr "" +"Kon feed niet weergeven: de zoekopdracht is mislukt. Controleer aub de " +"syntax van de labelzoektekst of de lokale configuratie. " #: errors.php:27 msgid "Denied. Your access level is insufficient to access this page." @@ -148,767 +154,657 @@ msgid "Configuration check failed" msgstr "Configuratiecontrole mislukt" #: errors.php:31 -#, fuzzy -msgid "Your version of MySQL is not currently supported. Please see official site for more information." +msgid "" +"Your version of MySQL is not currently supported. Please see official site " +"for more information." msgstr "" -"Uw versie van MySQL wordt niet ondersteund. Zie de\n" -"\t\tofficiële website voor meer informatie." +"Uw versie van MySQL wordt niet ondersteund. Zie de officiële website voor " +"meer informatie." #: errors.php:35 msgid "SQL escaping test failed, check your database and PHP configuration" -msgstr "SQL escaping test mislukt. Controleer uw database en de PHP configuratie" - -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 -#: classes/backend.php:5 -#: classes/pref/labels.php:296 -#: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 -#: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 -#: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 -#: js/prefs.js:86 -#: js/prefs.js:576 -#: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 -#: plugins/import_export/import_export.js:17 -#: plugins/updater/updater.js:17 +msgstr "" +"SQL escaping test mislukt. Controleer uw database en de PHP configuratie" + +#: index.php:128 index.php:145 index.php:265 prefs.php:98 +#: classes/backend.php:5 classes/pref/labels.php:296 +#: classes/pref/filters.php:680 classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 js/feedlist.js:128 js/feedlist.js:439 +#: js/functions.js:446 js/functions.js:784 js/functions.js:1194 +#: js/functions.js:1330 js/functions.js:1642 js/prefs.js:86 js/prefs.js:576 +#: js/prefs.js:666 js/prefs.js:867 js/prefs.js:1454 js/prefs.js:1507 +#: js/prefs.js:1566 js/prefs.js:1583 js/prefs.js:1599 js/prefs.js:1615 +#: js/prefs.js:1634 js/prefs.js:1807 js/prefs.js:1823 js/tt-rss.js:506 +#: js/tt-rss.js:523 js/viewfeed.js:820 js/viewfeed.js:1249 +#: plugins/import_export/import_export.js:17 plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Aan 't laden, even wachten aub..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Feedlijst inklappen" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "Toon artikelen" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Aangepast" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Alle artikelen" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 include/functions.php:2007 classes/feeds.php:98 msgid "Starred" msgstr "Met ster" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 include/functions.php:2008 classes/feeds.php:99 msgid "Published" msgstr "Gepubliceerd" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 classes/feeds.php:85 classes/feeds.php:97 msgid "Unread" msgstr "Ongelezen" -#: index.php:177 -#, fuzzy +#: index.php:170 msgid "Unread First" -msgstr "Ongelezen" +msgstr "Ongelezen eerst" -#: index.php:178 +#: index.php:171 msgid "With Note" -msgstr "" +msgstr "Met notitie" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" -msgstr "Score negeren" +msgstr "Scores negeren" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "Artikelen sorteren" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Standaard" -#: index.php:186 +#: index.php:179 msgid "Newest first" -msgstr "" +msgstr "Nieuwste eerst" -#: index.php:187 +#: index.php:180 msgid "Oldest first" -msgstr "" +msgstr "Oudste eerst" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "Titel" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 -#: js/FeedTree.js:128 -#: js/FeedTree.js:156 -#: plugins/digest/digest.js:647 +#: index.php:185 index.php:233 include/functions.php:1997 +#: classes/feeds.php:103 classes/feeds.php:441 js/FeedTree.js:128 +#: js/FeedTree.js:156 plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Markeren als gelezen" -#: index.php:195 +#: index.php:188 msgid "Older than one day" -msgstr "" +msgstr "Ouder dan een dag" -#: index.php:198 +#: index.php:191 msgid "Older than one week" -msgstr "" +msgstr "Ouder dan een week" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" -msgstr "" +msgstr "Ouder dan twee weken" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." -msgstr "communicatieprobleem met de server." +msgstr "Communicatieprobleem met de server." -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Er is een nieuwe versie van Tiny Tiny RSS beschikbaar!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Acties..." -#: index.php:233 +#: index.php:225 msgid "Preferences..." msgstr "Voorkeuren…" -#: index.php:234 +#: index.php:226 msgid "Search..." -msgstr "zoeken..." +msgstr "Zoeken..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Feed acties:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "Abonneren op feed..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Bewerk deze feed..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Feed opnieuw score geven" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 classes/pref/feeds.php:759 classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Abonnement opzeggen" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Alle feeds:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Toon/Verberg gelezen feeds" -#: index.php:243 +#: index.php:235 msgid "Other actions:" -msgstr "andere acties:" +msgstr "Andere acties:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "Omschakelen naar samenvatting…" - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "Toon tagwolk..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 include/functions.php:1983 msgid "Toggle widescreen mode" msgstr "Wisselen breedbeeld modus" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "Selectie met tags..." -#: index.php:250 +#: index.php:238 msgid "Create label..." -msgstr "Aanmaken label…" +msgstr "Label aanmaken…" -#: index.php:251 +#: index.php:239 msgid "Create filter..." -msgstr "Aanmaken filter…" +msgstr "Filter aanmaken…" -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "Hulp bij sneltoetscombinaties" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Afmelden" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 prefs.php:116 include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Voorkeuren" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Sneltoetscombinaties" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Verlaat voorkeuren" -#: prefs.php:124 -#: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: prefs.php:119 classes/pref/feeds.php:107 classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Feeds" -#: prefs.php:127 -#: classes/pref/filters.php:156 +#: prefs.php:122 classes/pref/filters.php:156 msgid "Filters" msgstr "Filters" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 -#: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: prefs.php:125 include/functions.php:1176 include/functions.php:1831 +#: classes/pref/labels.php:90 plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Labels" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Gebruikers" -#: register.php:186 -#: include/login_form.php:238 +#: prefs.php:132 +msgid "System" +msgstr "Systeem" + +#: register.php:184 include/login_form.php:238 msgid "Create new account" -msgstr "Aanmaken nieuw account" +msgstr "Maak nieuw account aan" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." -msgstr "Het registreren van nieuwe gebruikers is door de administrateur uitgeschakeld." - -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +msgstr "" +"Het registreren van nieuwe gebruikers is door de beheerder uitgeschakeld." + +#: register.php:194 register.php:239 register.php:252 register.php:267 +#: register.php:286 register.php:334 register.php:344 register.php:356 +#: classes/handler/public.php:629 classes/handler/public.php:717 +#: classes/handler/public.php:799 classes/handler/public.php:874 +#: classes/handler/public.php:888 classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Ga terug naar Tiny Tiny RSS" -#: register.php:217 -msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." -msgstr "Uw tijdelijke wachtwoord wordt naar het vermelde e-mailadres verstuurd. Accounts waarin niet wordt ingelogd, worden automatisch 24 uur na het verzenden van het tijdelijk wachtwoord verwijderd." +#: register.php:215 +msgid "" +"Your temporary password will be sent to the specified email. Accounts, which " +"were not logged in once, are erased automatically 24 hours after temporary " +"password is sent." +msgstr "" +"Uw tijdelijke wachtwoord wordt naar het vermelde e-mailadres verstuurd. " +"Accounts waarin niet wordt ingelogd, worden automatisch 24 uur na het " +"verzenden van het tijdelijk wachtwoord verwijderd." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Gewenst loginID:" -#: register.php:226 +#: register.php:224 msgid "Check availability" -msgstr "controleer beschikbaarheid" +msgstr "Controleer beschikbaarheid" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 classes/handler/public.php:757 msgid "Email:" msgstr "E-mail:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 classes/handler/public.php:762 msgid "How much is two plus two:" -msgstr "hoeveel is twee plus twee:" +msgstr "Hoeveel is twee plus twee:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Registratie indienen" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "Uw registratie informatie is incompleet." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Sorry, deze naam is al in gebruik." -#: register.php:286 +#: register.php:284 msgid "Registration failed." -msgstr "de registratie is mislukt." +msgstr "Registratie is mislukt." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Het account is met succes aangemaakt." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "Nieuwe gebruikersregistratie is op dit moment niet mogelijk." -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "Tiny Tiny RSS data update script." -#: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 -#: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: include/digest.php:109 include/functions.php:1185 +#: include/functions.php:1732 include/functions.php:1817 +#: include/functions.php:1839 classes/opml.php:416 classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Ongecategoriseerd" #: include/feedbrowser.php:83 -#, fuzzy, php-format +#, php-format msgid "%d archived article" msgid_plural "%d archived articles" -msgstr[0] "%d gearchiveerde artikelen" +msgstr[0] "%d gearchiveerd artikel" msgstr[1] "%d gearchiveerde artikelen" #: include/feedbrowser.php:107 msgid "No feeds found." msgstr "Geen feeds gevonden." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Speciaal" -#: include/functions.php:1637 -#: classes/feeds.php:1110 +#: include/functions.php:1681 classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Alle feeds" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Artikelen met ster" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Gepubliceerde artikelen" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Nieuwe artikelen" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 include/functions.php:2005 msgid "All articles" msgstr "Alle artikelen" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "Gearchiveerde artikelen" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "Recent gelezen" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Navigatie" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "Open volgende feed" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "Open voorgaande feed" -#: include/functions.php:1914 +#: include/functions.php:1960 msgid "Open next article" msgstr "Open volgende artikel" -#: include/functions.php:1915 +#: include/functions.php:1961 msgid "Open previous article" msgstr "Open voorgaand artikel" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "Open volgend artikel (lange artikelen niet scrollen)" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "Open vorig artikel (lange artikelen niet scrollen)" -#: include/functions.php:1918 -#, fuzzy +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" -msgstr "Open volgend artikel (lange artikelen niet scrollen)" +msgstr "Open volgend artikel (niet uitklappen of markeren als gelezen)" -#: include/functions.php:1919 -#, fuzzy +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" -msgstr "Open vorig artikel (lange artikelen niet scrollen)" +msgstr "Open vorig artikel (niet uitklappen of markeren als gelezen)" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" -msgstr "toon zoekdialoogvenster" +msgstr "Toon zoekdialoogvenster" -#: include/functions.php:1921 +#: include/functions.php:1967 msgid "Article" msgstr "Artikel" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "In/uitschakelen sterren" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 js/viewfeed.js:1931 msgid "Toggle published" msgstr "In/uitschakelen gepubliceerd" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 js/viewfeed.js:1909 msgid "Toggle unread" msgstr "In/uitschakelen gelezen" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Bewerk tags" -#: include/functions.php:1926 +#: include/functions.php:1972 msgid "Dismiss selected" msgstr "Geselecteerde negeren" -#: include/functions.php:1927 +#: include/functions.php:1973 msgid "Dismiss read" msgstr "Gelezene negeren" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" -msgstr "open in nieuw venster" +msgstr "Open in nieuw venster" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 js/viewfeed.js:1950 msgid "Mark below as read" msgstr "Hieronder markeren als gelezen" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 js/viewfeed.js:1944 msgid "Mark above as read" -msgstr "hierboven markeren als gelezen" +msgstr "Hierboven markeren als gelezen" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "Omlaag scrollen" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "Omhoog scrollen" -#: include/functions.php:1933 +#: include/functions.php:1979 msgid "Select article under cursor" msgstr "Selecteer artikel onder de cursor" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "E-mail artikel" -#: include/functions.php:1935 +#: include/functions.php:1981 msgid "Close/collapse article" msgstr "Sluiten/inklappen artikel" -#: include/functions.php:1936 -#, fuzzy +#: include/functions.php:1982 msgid "Toggle article expansion (combined mode)" -msgstr "In/uitschakelen gecombineerde modus" +msgstr "In/uitschakelen artikel uitklappen (gecombineerde modus)" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 plugins/embed_original/init.php:31 msgid "Toggle embed original" msgstr "In/uitschakelen origineel insluiten" -#: include/functions.php:1939 +#: include/functions.php:1985 msgid "Article selection" msgstr "Artikelselectie" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "Selecteer alle artikelen" -#: include/functions.php:1941 +#: include/functions.php:1987 msgid "Select unread" msgstr "Selecteer ongelezen" -#: include/functions.php:1942 +#: include/functions.php:1988 msgid "Select starred" msgstr "Selecteer met ster" -#: include/functions.php:1943 +#: include/functions.php:1989 msgid "Select published" msgstr "Selecteer gepubliceerde" -#: include/functions.php:1944 +#: include/functions.php:1990 msgid "Invert selection" -msgstr "Omdraaien selectie" +msgstr "Keer selectie om" -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "Deselecteer alles" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Feed" -#: include/functions.php:1947 +#: include/functions.php:1993 msgid "Refresh current feed" msgstr "Ververs huidige feed" -#: include/functions.php:1948 +#: include/functions.php:1994 msgid "Un/hide read feeds" msgstr "Toon/Verberg gelezen feeds" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "Abonneer op feed" -#: include/functions.php:1950 -#: js/FeedTree.js:135 -#: js/PrefFeedTree.js:67 +#: include/functions.php:1996 js/FeedTree.js:135 js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Bewerk feed" -#: include/functions.php:1952 +#: include/functions.php:1998 msgid "Reverse headlines" msgstr "Draai kopteksten om" -#: include/functions.php:1953 +#: include/functions.php:1999 msgid "Debug feed update" msgstr "Debug feed update" -#: include/functions.php:1954 -#: js/FeedTree.js:178 +#: include/functions.php:2000 js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Markeer alle feeds als gelezen" -#: include/functions.php:1955 +#: include/functions.php:2001 msgid "Un/collapse current category" msgstr "Uit/Inklappen huidige categorie" -#: include/functions.php:1956 +#: include/functions.php:2002 msgid "Toggle combined mode" msgstr "In/uitschakelen gecombineerde modus" -#: include/functions.php:1957 -#, fuzzy +#: include/functions.php:2003 msgid "Toggle auto expand in combined mode" -msgstr "In/uitschakelen gecombineerde modus" +msgstr "In/uitschakelen automatisch uitklappen in gecombineerde modus" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "Ga naar" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "Nieuw" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 js/tt-rss.js:456 js/tt-rss.js:615 msgid "Tag cloud" msgstr "Tag wolk" -#: include/functions.php:1965 +#: include/functions.php:2011 msgid "Other" msgstr "Andere" -#: include/functions.php:1966 -#: classes/pref/labels.php:281 +#: include/functions.php:2012 classes/pref/labels.php:281 msgid "Create label" -msgstr "Aanmaken label" +msgstr "Maak label" -#: include/functions.php:1967 -#: classes/pref/filters.php:654 +#: include/functions.php:2013 classes/pref/filters.php:654 msgid "Create filter" -msgstr "Aanmaken filter" +msgstr "Maak filter" -#: include/functions.php:1968 +#: include/functions.php:2014 msgid "Un/collapse sidebar" msgstr "Uit/Inklappen zijbalk" -#: include/functions.php:1969 +#: include/functions.php:2015 msgid "Show help dialog" msgstr "Toon helpdialoogvenster" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" -msgstr "zoekresultaten: %s" +msgstr "Zoekresultaten: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "Klik om af te spelen" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "Afspelen" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "geen tags" -#: include/functions.php:3136 -#: classes/feeds.php:689 +#: include/functions.php:3165 classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Bewerk tags voor dit artikel" -#: include/functions.php:3170 -#: classes/feeds.php:641 +#: include/functions.php:3197 classes/feeds.php:641 msgid "Originally from:" msgstr "Oorspronkelijk uit:" -#: include/functions.php:3183 -#: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: include/functions.php:3210 classes/feeds.php:654 classes/pref/feeds.php:572 msgid "Feed URL" msgstr "Feed URL" -#: include/functions.php:3215 -#: classes/dlg.php:37 -#: classes/dlg.php:60 -#: classes/dlg.php:93 -#: classes/dlg.php:159 -#: classes/dlg.php:190 -#: classes/dlg.php:217 -#: classes/dlg.php:250 -#: classes/dlg.php:262 -#: classes/backend.php:105 -#: classes/pref/users.php:99 -#: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: include/functions.php:3242 classes/dlg.php:37 classes/dlg.php:60 +#: classes/dlg.php:93 classes/dlg.php:159 classes/dlg.php:190 +#: classes/dlg.php:217 classes/dlg.php:250 classes/dlg.php:262 +#: classes/backend.php:105 classes/pref/users.php:99 +#: classes/pref/filters.php:147 classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Sluit dit venster" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(bewerk notitie)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" -msgstr "Onbekend type" +msgstr "onbekend type" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "Bijlagen" -#: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 -#: plugins/mobile/login_form.php:40 +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "LibXML fout %s op regel %d (kolom %d): %s" + +#: include/login_form.php:183 classes/handler/public.php:475 +#: classes/handler/public.php:752 plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Aanmelden:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Wachtwoord:" -#: include/login_form.php:197 -#, fuzzy +#: include/login_form.php:199 msgid "I forgot my password" -msgstr "Onjuist wachtwoord" - -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Taal:" +msgstr "Ik ben mijn wachtwoord vergeten" -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Profiel:" -#: include/login_form.php:213 -#: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: include/login_form.php:209 classes/handler/public.php:233 +#: classes/rpc.php:63 classes/pref/prefs.php:1036 msgid "Default profile" msgstr "Standaard profiel" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Gebruik minder dataverkeer" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" +"Geeft geen afbeeldingen weer in artikelen, vermindert automatisch herladen." + #: include/login_form.php:229 msgid "Remember me" -msgstr "" +msgstr "Onthoud mij" -#: include/login_form.php:235 -#: classes/handler/public.php:499 +#: include/login_form.php:235 classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Aanmelden" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "De sessie kon niet worden gevalideerd (onjuist IP)" @@ -920,194 +816,182 @@ msgstr "Artikel niet gevonden." msgid "Tags for this article (separated by commas):" msgstr "Tags voor dit artikel (komma gescheiden):" -#: classes/article.php:204 -#: classes/pref/users.php:176 -#: classes/pref/labels.php:79 -#: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/article.php:204 classes/pref/users.php:176 +#: classes/pref/labels.php:79 classes/pref/filters.php:405 +#: classes/pref/prefs.php:982 classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 plugins/instances/init.php:245 msgid "Save" msgstr "Opslaan" -#: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 -#: classes/feeds.php:1037 -#: classes/feeds.php:1089 -#: classes/feeds.php:1149 -#: classes/pref/users.php:178 -#: classes/pref/labels.php:81 -#: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/article.php:206 classes/handler/public.php:452 +#: classes/handler/public.php:486 classes/feeds.php:1037 +#: classes/feeds.php:1089 classes/feeds.php:1149 classes/pref/users.php:178 +#: classes/pref/labels.php:81 classes/pref/filters.php:408 +#: classes/pref/filters.php:803 classes/pref/filters.php:879 +#: classes/pref/filters.php:946 classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 plugins/mail/init.php:124 +#: plugins/note/init.php:53 plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Annuleren" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "Deel met Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "Titel:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "Inhoud:" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "Labels:" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "Gedeeld artikel zal verschijnen in de Gepubliceerd feed." -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "Delen" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "Niet ingelogd" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Onjuiste gebruikersnaam of wachtwoord" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Reeds geabonneerd op <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Geabonneerd op <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Kon niet abonneren op <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "Geen feeds gevonden in <b>%s</b>." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 classes/handler/public.php:665 msgid "Multiple feed URLs found." msgstr "Meerdere feed-URL's gevonden." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Kon niet abonneren op <b>%s</b>.<br>Kon de feed URL niet downloaden." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "Abonneren op de geselecteerde feed" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Bewerk abonnement opties" -#: classes/handler/public.php:758 -#, fuzzy +#: classes/handler/public.php:739 msgid "Password recovery" -msgstr "Wachtwoord" +msgstr "Wachtwoordherstel" -#: classes/handler/public.php:764 -msgid "You will need to provide valid account name and email. New password will be sent on your email address." +#: classes/handler/public.php:745 +msgid "" +"You will need to provide valid account name and email. New password will be " +"sent on your email address." msgstr "" +"Je moet een geldige naam en emailadres opgeven. Het nieuwe wachtwoord wordt " +"naar je emailadres verzonden." -#: classes/handler/public.php:786 -#: classes/pref/users.php:360 +#: classes/handler/public.php:767 classes/pref/users.php:360 msgid "Reset password" msgstr "Herstel wachtwoord" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." -msgstr "" +msgstr "Sommige vereiste velden ontbreken of zijn onjuist." -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 -#, fuzzy +#: classes/handler/public.php:781 classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 msgid "Go back" -msgstr "Terugzetten" +msgstr "Ga terug" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." -msgstr "" +msgstr "Sorry, deze combinatie van naam en wachtwoord is onbekend." -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Uw toegangsrechten zijn niet voldoende om dit script uit te voeren." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Database updater" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Voor de updates uit" #: classes/dlg.php:16 -msgid "If you have imported labels and/or filters, you might need to reload preferences to see your new data." -msgstr "Indien u labels en/of filters heeft geïmporteerd moet u waarschijnlijk te voorkeuren herladen om uw bijgewerkte gegevens te zien." +msgid "" +"If you have imported labels and/or filters, you might need to reload " +"preferences to see your new data." +msgstr "" +"Indien u labels en/of filters heeft geïmporteerd moet u waarschijnlijk te " +"voorkeuren herladen om uw bijgewerkte gegevens te zien." #: classes/dlg.php:48 msgid "Your Public OPML URL is:" msgstr "Uw publieke OPML URL is:" -#: classes/dlg.php:57 -#: classes/dlg.php:214 +#: classes/dlg.php:57 classes/dlg.php:214 msgid "Generate new URL" msgstr "Genereer nieuwe URL" #: classes/dlg.php:71 -msgid "Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner." -msgstr "De update deamon is ingeschakeld in de configuratie, maar het deamon proces loopt niet. Dit voorkomt dat alle feeds wordt bijgewerkt. Start het deamon proces of contacteer de eigenaar van deze instantie." +msgid "" +"Update daemon is enabled in configuration, but daemon process is not " +"running, which prevents all feeds from updating. Please start the daemon " +"process or contact instance owner." +msgstr "" +"De update daemon is ingeschakeld in de configuratie, maar het " +"achtergrondproces loopt niet. Dit voorkomt dat alle feeds wordt bijgewerkt. " +"Start het achtergrondproces of contacteer de eigenaar van deze instantie." -#: classes/dlg.php:75 -#: classes/dlg.php:84 +#: classes/dlg.php:75 classes/dlg.php:84 msgid "Last update:" msgstr "Laatste update:" #: classes/dlg.php:80 -msgid "Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner." -msgstr "De update deamon neemt te veel tijd om een feed bij te werken. Dit kan betekenen dat het proces is gescrashed of hangt. Controleer het deamon proces of contacteer de eigenaar van deze instantie." +msgid "" +"Update daemon is taking too long to perform a feed update. This could " +"indicate a problem like crash or a hang. Please check the daemon process or " +"contact instance owner." +msgstr "" +"De update daemon neemt te veel tijd om een feed bij te werken. Dit kan " +"betekenen dat het proces is gescrashed of hangt. Controleer het " +"achtergrondproces of contacteer de eigenaar van deze instantie." #: classes/dlg.php:166 msgid "Match:" @@ -1133,20 +1017,22 @@ msgstr "Items weergeven" msgid "You can view this feed as RSS using the following URL:" msgstr "u kunt deze feed bekijken als RSS via de volgende URL:" -#: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: classes/dlg.php:233 plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Nieuwe versie van Tiny Tiny RSS is beschikbaar (%s)." #: classes/dlg.php:241 -msgid "You can update using built-in updater in the Preferences or by using update.php" -msgstr "U kunt updaten met behulp van de ingebouwde updater in de Voorkeuren of via update.php" +msgid "" +"You can update using built-in updater in the Preferences or by using update." +"php" +msgstr "" +"U kunt updaten met behulp van de ingebouwde updater in de Voorkeuren of via " +"update.php" -#: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: classes/dlg.php:245 plugins/updater/init.php:335 msgid "See the release notes" -msgstr "" +msgstr "Zie de uitgave opmerkingen" #: classes/dlg.php:247 msgid "Download" @@ -1154,118 +1040,103 @@ msgstr "Downloaden" #: classes/dlg.php:255 msgid "Error receiving version information or no new version available." -msgstr "Fout bij verkrijgen van informatie over de versie, of geen nieuwe versie beschikbaar." +msgstr "" +"Fout bij verkrijgen van versie informatie, of geen nieuwe versie beschikbaar." -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "Bezoek de website" +#: classes/feeds.php:56 +#, php-format +msgid "Last updated: %s" +msgstr "Laatst geüpdatet: %s" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Toon als RSS feed" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 classes/feeds.php:128 classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "Toon als RSS" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Selecteer:" -#: classes/feeds.php:92 -#: classes/pref/users.php:345 -#: classes/pref/labels.php:275 -#: classes/pref/filters.php:282 -#: classes/pref/filters.php:330 -#: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/feeds.php:84 classes/pref/users.php:345 classes/pref/labels.php:275 +#: classes/pref/filters.php:282 classes/pref/filters.php:330 +#: classes/pref/filters.php:648 classes/pref/filters.php:736 +#: classes/pref/filters.php:763 classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 plugins/instances/init.php:287 msgid "All" msgstr "Alles" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Omkeren" -#: classes/feeds.php:95 -#: classes/pref/users.php:347 -#: classes/pref/labels.php:277 -#: classes/pref/filters.php:284 -#: classes/pref/filters.php:332 -#: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/feeds.php:87 classes/pref/users.php:347 classes/pref/labels.php:277 +#: classes/pref/filters.php:284 classes/pref/filters.php:332 +#: classes/pref/filters.php:650 classes/pref/filters.php:738 +#: classes/pref/filters.php:765 classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 plugins/instances/init.php:289 msgid "None" msgstr "Niets" -#: classes/feeds.php:101 +#: classes/feeds.php:93 msgid "More..." msgstr "Meer…" -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Selectie schakelaar:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Selectie:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "Geef score" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" -msgstr "Archief" +msgstr "Archiveer" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "Terugzetten" -#: classes/feeds.php:118 -#: classes/pref/filters.php:291 -#: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/feeds.php:110 classes/pref/filters.php:291 +#: classes/pref/filters.php:339 classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "Verwijderen" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 classes/feeds.php:120 plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" -msgstr "doorsturen per e-mail" +msgstr "Doorsturen per e-mail" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Feed:" -#: classes/feeds.php:205 -#: classes/feeds.php:837 +#: classes/feeds.php:197 classes/feeds.php:837 msgid "Feed not found." msgstr "Feed niet gevonden." -#: classes/feeds.php:387 -#, fuzzy, php-format +#: classes/feeds.php:254 +msgid "Never" +msgstr "Nooit" + +#: classes/feeds.php:360 +#, php-format msgid "Imported at %s" -msgstr "Importeren" +msgstr "Geïmporteerd op %s" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" -msgstr "Markeer als gelezen" +msgstr "markeer als gelezen" #: classes/feeds.php:585 msgid "Collapse article" @@ -1284,22 +1155,24 @@ msgid "No starred articles found to display." msgstr "Er zijn geen artikelen met ster gevonden om weer te geven." #: classes/feeds.php:748 -#, fuzzy -msgid "No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter." -msgstr "Geen artikelen gevonden voor weergave. U kunt artikelen handmatig aan labels toekennen (zie het Actie menu hierboven) of een filter gebruiken." +msgid "" +"No articles found to display. You can assign articles to labels manually " +"from article header context menu (applies to all selected articles) or use a " +"filter." +msgstr "" +"Geen artikelen gevonden voor weergave. U kunt handmatig labels aan artikels " +"toekennen (zie het Actie menu hierboven) of een filter gebruiken." #: classes/feeds.php:750 msgid "No articles found to display." msgstr "Geen artikelen gevonden om weer te geven." -#: classes/feeds.php:765 -#: classes/feeds.php:932 +#: classes/feeds.php:765 classes/feeds.php:932 #, php-format msgid "Feeds last updated at %s" msgstr "Feeds laatst bijgewerkt op %s" -#: classes/feeds.php:775 -#: classes/feeds.php:942 +#: classes/feeds.php:775 classes/feeds.php:942 msgid "Some feeds have update errors (click for details)" msgstr "Sommige feeds hebben update fouten (klik voor details)" @@ -1307,15 +1180,12 @@ msgstr "Sommige feeds hebben update fouten (klik voor details)" msgid "No feed selected." msgstr "Geen feeds geselecteerd." -#: classes/feeds.php:975 -#: classes/feeds.php:983 +#: classes/feeds.php:975 classes/feeds.php:983 msgid "Feed or site URL" msgstr "Feed of website URL" -#: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/feeds.php:989 classes/pref/feeds.php:592 classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "Plaats in categorie:" @@ -1323,26 +1193,20 @@ msgstr "Plaats in categorie:" msgid "Available feeds" msgstr "Beschikbare feeds" -#: classes/feeds.php:1009 -#: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/feeds.php:1009 classes/pref/users.php:139 +#: classes/pref/feeds.php:622 classes/pref/feeds.php:860 msgid "Authentication" msgstr "Authenticatie" -#: classes/feeds.php:1013 -#: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/feeds.php:1013 classes/pref/users.php:402 +#: classes/pref/feeds.php:628 classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "LoginID" -#: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/feeds.php:1016 classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Wachtwoord" @@ -1350,9 +1214,7 @@ msgstr "Wachtwoord" msgid "This feed requires authentication." msgstr "Deze feed vereist authenticatie." -#: classes/feeds.php:1031 -#: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/feeds.php:1031 classes/feeds.php:1087 classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "Abonneren" @@ -1360,12 +1222,8 @@ msgstr "Abonneren" msgid "More feeds" msgstr "Meer feeds" -#: classes/feeds.php:1057 -#: classes/feeds.php:1148 -#: classes/pref/users.php:332 -#: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/feeds.php:1057 classes/feeds.php:1148 classes/pref/users.php:332 +#: classes/pref/filters.php:641 classes/pref/feeds.php:1316 js/tt-rss.js:173 msgid "Search" msgstr "Zoeken" @@ -1379,15 +1237,12 @@ msgstr "Feed archief" #: classes/feeds.php:1065 msgid "limit:" -msgstr "Beperking:" - -#: classes/feeds.php:1088 -#: classes/pref/users.php:358 -#: classes/pref/labels.php:284 -#: classes/pref/filters.php:398 -#: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +msgstr "beperking:" + +#: classes/feeds.php:1088 classes/pref/users.php:358 +#: classes/pref/labels.php:284 classes/pref/filters.php:398 +#: classes/pref/filters.php:667 classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Verwijderen" @@ -1405,7 +1260,7 @@ msgstr "Deze feed" #: classes/backend.php:33 msgid "Other interface tips are available in the Tiny Tiny RSS wiki." -msgstr "andere interface tips zijn te vinden in de Tiny Tiny RSS wiki." +msgstr "Andere interface tips zijn te vinden in de Tiny Tiny RSS wiki." #: classes/backend.php:38 msgid "Keyboard Shortcuts" @@ -1423,8 +1278,7 @@ msgstr "Ctrl" msgid "Help topic not found." msgstr "Help onderwerp niet gevonden." -#: classes/opml.php:28 -#: classes/opml.php:33 +#: classes/opml.php:28 classes/opml.php:33 msgid "OPML Utility" msgstr "OPML hulpprogramma" @@ -1463,24 +1317,39 @@ msgstr "Instellen voorkeursleutel %s op %s" #: classes/opml.php:339 msgid "Adding filter..." -msgstr "filter toevoegen..." +msgstr "Filter toevoegen..." #: classes/opml.php:416 #, php-format msgid "Processing category: %s" msgstr "Verwerken categorie: %s" -#: classes/opml.php:468 +#: classes/opml.php:465 plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "Upload mislukt met fout nummer %d" + +#: classes/opml.php:479 plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +msgid "Unable to move uploaded file." +msgstr "Kan het geüploade bestand niet verplaatsen." + +#: classes/opml.php:483 plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." -msgstr "Fout: OPML-bestand uploaden aub." +msgstr "Fout: OPML bestand uploaden aub." + +#: classes/opml.php:492 +msgid "Error: unable to find moved OPML file." +msgstr "Fout: kan het verplaatste OPML bestand niet vinden." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:499 plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." -msgstr "Fout bij het parseren van het document." +msgstr "Fout bij het parsen van het document." -#: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/users.php:6 classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "Uw toegangsniveau is niet toereikend om deze tab te openen." @@ -1488,8 +1357,7 @@ msgstr "Uw toegangsniveau is niet toereikend om deze tab te openen." msgid "User not found" msgstr "Gebruiker niet gevonden" -#: classes/pref/users.php:53 -#: classes/pref/users.php:404 +#: classes/pref/users.php:53 classes/pref/users.php:404 msgid "Registered" msgstr "Geregistreerd" @@ -1513,9 +1381,8 @@ msgstr "Toegangsniveau:" msgid "Change password to" msgstr "Wijzig wachtwoord naar" -#: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/users.php:161 classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Opties" @@ -1539,35 +1406,25 @@ msgid "User <b>%s</b> already exists." msgstr "Gebruiker <b>%s</b> bestaat al." #: classes/pref/users.php:273 -#, fuzzy, php-format +#, php-format msgid "Changed password of user <b>%s</b> to <b>%s</b>" -msgstr "" -"Wijzig wachtwoord van gebruiker<b>%s</b>\n" -"\t\t\t\t naar <b>%s</b>" +msgstr "Wachtwoord van gebruiker<b>%s</b> naar <b>%s</b> gewijzigd" #: classes/pref/users.php:275 -#, fuzzy, php-format +#, php-format msgid "Sending new password of user <b>%s</b> to <b>%s</b>" -msgstr "" -"Wijzig wachtwoord van gebruiker<b>%s</b>\n" -"\t\t\t\t naar <b>%s</b>" +msgstr "Wachtwoord van gebruiker<b>%s</b>naar <b>%s</b> versturen" #: classes/pref/users.php:299 msgid "[tt-rss] Password change notification" msgstr "[tt-rss] Melding verandering van wachtwoord" -#: classes/pref/users.php:342 -#: classes/pref/labels.php:272 -#: classes/pref/filters.php:279 -#: classes/pref/filters.php:327 -#: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/users.php:342 classes/pref/labels.php:272 +#: classes/pref/filters.php:279 classes/pref/filters.php:327 +#: classes/pref/filters.php:645 classes/pref/filters.php:733 +#: classes/pref/filters.php:760 classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 plugins/instances/init.php:284 msgid "Select" msgstr "Selecteer" @@ -1579,9 +1436,8 @@ msgstr "Gebruiker aanmaken" msgid "Details" msgstr "Details" -#: classes/pref/users.php:356 -#: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: classes/pref/users.php:356 classes/pref/filters.php:660 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Bewerken" @@ -1593,10 +1449,9 @@ msgstr "Toegangsniveau" msgid "Last login" msgstr "Laatste loginID" -#: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: classes/pref/users.php:426 plugins/instances/init.php:334 msgid "Click to edit" -msgstr "Klik voor bewerken" +msgstr "Klik om te bewerken" #: classes/pref/users.php:446 msgid "No users defined." @@ -1604,11 +1459,10 @@ msgstr "Geen gebruikers gedefinieerd." #: classes/pref/users.php:448 msgid "No matching users found." -msgstr "geen overeenkomstige gebruikers gevonden." +msgstr "Geen overeenkomstige gebruikers gevonden." -#: classes/pref/labels.php:22 -#: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/labels.php:22 classes/pref/filters.php:268 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Onderschrift" @@ -1627,7 +1481,7 @@ msgstr "Achtergrond:" #: classes/pref/labels.php:232 #, php-format msgid "Created label <b>%s</b>" -msgstr "aangemaakt label <b>%s</b>" +msgstr "Label <b>%s</b> aangemaakt" #: classes/pref/labels.php:287 msgid "Clear colors" @@ -1639,124 +1493,113 @@ msgstr "Artikelen volgens dit filter:" #: classes/pref/filters.php:133 msgid "No recent articles matching this filter have been found." -msgstr "Er zijn geen recente artikelen die overeenkomen met dit filter gevonden." +msgstr "" +"Er zijn geen recente artikelen die overeenkomen met dit filter gevonden." #: classes/pref/filters.php:137 -msgid "Complex expressions might not give results while testing due to issues with database server regexp implementation." -msgstr "complexe expressies kunnen geen resultaat geven bij het testen, tengevolge van problemen bij de database server's regexp implementatie." +msgid "" +"Complex expressions might not give results while testing due to issues with " +"database server regexp implementation." +msgstr "" +"Complexe expressies kunnen geen resultaat geven bij het testen, tengevolge " +"van problemen bij de database server's regexp implementatie." -#: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:274 classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Match" -#: classes/pref/filters.php:288 -#: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:288 classes/pref/filters.php:336 +#: classes/pref/filters.php:742 classes/pref/filters.php:769 msgid "Add" msgstr "Toevoegen" -#: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:322 classes/pref/filters.php:755 msgid "Apply actions" msgstr "Acties toepassen" -#: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:372 classes/pref/filters.php:784 msgid "Enabled" msgstr "Ingeschakeld" -#: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:381 classes/pref/filters.php:787 msgid "Match any rule" msgstr "Match elke regel" -#: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 -#, fuzzy +#: classes/pref/filters.php:390 classes/pref/filters.php:790 msgid "Inverse matching" -msgstr "Omdraaien selectie" +msgstr "Omgekeerde matching" -#: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:402 classes/pref/filters.php:797 msgid "Test" msgstr "Test" #: classes/pref/filters.php:435 -#, fuzzy msgid "(inverse)" -msgstr "Omgekeerd" +msgstr "(omgekeerd)" #: classes/pref/filters.php:434 -#, fuzzy, php-format +#, php-format msgid "%s on %s in %s %s" -msgstr "%s op %s in %s" +msgstr "%s op %s in %s %s" #: classes/pref/filters.php:657 msgid "Combine" msgstr "Combineren" -#: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/filters.php:663 classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "Herstel sorteervolgorde" -#: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/filters.php:671 classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Artikelen nieuwe score geven" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Aanmaken" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" -msgstr "" +msgstr "Omgekeerde regular expression matching" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "op veld" -#: classes/pref/filters.php:864 -#: js/PrefFilterTree.js:45 +#: classes/pref/filters.php:863 js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "in" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" msgstr "Regel opslaan" -#: classes/pref/filters.php:877 -#: js/functions.js:1013 +#: classes/pref/filters.php:876 js/functions.js:1013 msgid "Add rule" -msgstr "regel toevoegen" +msgstr "Regel toevoegen" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" -msgstr "Actie doorvoeren" +msgstr "Actie uitvoeren" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "met parameters:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" msgstr "Actie opslaan" -#: classes/pref/filters.php:944 -#: js/functions.js:1039 +#: classes/pref/filters.php:943 js/functions.js:1039 msgid "Add action" msgstr "Actie toevoegen" -#: classes/pref/filters.php:967 -#, fuzzy +#: classes/pref/filters.php:966 msgid "[No caption]" -msgstr "Onderschrift" +msgstr "[Geen onderschrift]" #: classes/pref/prefs.php:18 msgid "General" @@ -1772,12 +1615,11 @@ msgstr "Geavanceerd" #: classes/pref/prefs.php:21 msgid "Digest" -msgstr "" +msgstr "Samenvatting" #: classes/pref/prefs.php:25 -#, fuzzy msgid "Allow duplicate articles" -msgstr "toestaan dubbele berichten" +msgstr "Sta dubbele artikels toe" #: classes/pref/prefs.php:26 msgid "Assign articles to labels automatically" @@ -1788,18 +1630,24 @@ msgid "Blacklisted tags" msgstr "Op de zwarte lijst geplaatste tags" #: classes/pref/prefs.php:27 -#, fuzzy -msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)." -msgstr "Wanneer tags automatisch worden gedetecteerd in artikelen, zullen deze tags niet worden toegekend (komma-gescheiden lijst)." +msgid "" +"When auto-detecting tags in articles these tags will not be applied (comma-" +"separated list)." +msgstr "" +"Wanneer tags automatisch worden gedetecteerd in artikelen, zullen deze tags " +"niet worden toegekend (komma-gescheiden lijst)." #: classes/pref/prefs.php:28 msgid "Automatically mark articles as read" msgstr "Artikelen automatisch als gelezen markeren" #: classes/pref/prefs.php:28 -#, fuzzy -msgid "This option enables marking articles as read automatically while you scroll article list." -msgstr "Deze optie schakelt het automatisch markeren als gelezen van artikelen in, terwijl u door de artikellijst scrolt." +msgid "" +"This option enables marking articles as read automatically while you scroll " +"article list." +msgstr "" +"Deze optie schakelt het automatisch markeren als gelezen van artikelen " +"(terwijl u door de artikellijst scrolt) in." #: classes/pref/prefs.php:29 msgid "Automatically expand articles in combined mode" @@ -1810,38 +1658,48 @@ msgid "Combined feed display" msgstr "Gecombineerde feed weergave" #: classes/pref/prefs.php:30 -msgid "Display expanded list of feed articles, instead of separate displays for headlines and article content" -msgstr "Uitgeklapte lijst van artikelen weergeven in plaats van afzonderlijke weergave van kopteksten en artikelinhoud" +msgid "" +"Display expanded list of feed articles, instead of separate displays for " +"headlines and article content" +msgstr "" +"Uitgeklapte lijst van artikelen weergeven in plaats van afzonderlijke " +"weergave van kopteksten en artikelinhoud" #: classes/pref/prefs.php:31 msgid "Confirm marking feed as read" -msgstr "Bevestigen feed markeren als gelezen" +msgstr "Bevestig feed markeren als gelezen" #: classes/pref/prefs.php:32 msgid "Amount of articles to display at once" msgstr "Aantal tegelijkertijd weer te geven artikelen " #: classes/pref/prefs.php:33 -#, fuzzy msgid "Default feed update interval" -msgstr "Standaard interval" +msgstr "Standaard feed update interval" #: classes/pref/prefs.php:33 -msgid "Shortest interval at which a feed will be checked for updates regardless of update method" +msgid "" +"Shortest interval at which a feed will be checked for updates regardless of " +"update method" msgstr "" +"Kortste interval waarmee een feed wordt gecontroleerd op updates, " +"onafhankelijk van upate methode" #: classes/pref/prefs.php:34 msgid "Mark articles in e-mail digest as read" msgstr "Markeer artikelen in e-mail samenvatting als gelezen" #: classes/pref/prefs.php:35 -#, fuzzy msgid "Enable e-mail digest" -msgstr "Inschakelen e-mail samenvatting" +msgstr "Schakel e-mail samenvatting in" #: classes/pref/prefs.php:35 -msgid "This option enables sending daily digest of new (and unread) headlines on your configured e-mail address" -msgstr "Deze optie schakelt het verzenden in van een dagelijkse samenvatting van nieuwe (en ongelezen) kopteksten naar het door u ingestelde e-mailadres" +msgid "" +"This option enables sending daily digest of new (and unread) headlines on " +"your configured e-mail address" +msgstr "" +"Deze optie schakelt het verzenden van een dagelijkse samenvatting van nieuwe " +"(en ongelezen) kopteksten naar het door u ingestelde e-mailadres in" #: classes/pref/prefs.php:36 msgid "Try to send digests around specified time" @@ -1853,11 +1711,11 @@ msgstr "Gebruikt UTC tijdzone" #: classes/pref/prefs.php:37 msgid "Enable API access" -msgstr "" +msgstr "Sta API toegang toe" #: classes/pref/prefs.php:37 msgid "Allows external clients to access this account through the API" -msgstr "" +msgstr "Laat externe clienten to tot dit account via de API" #: classes/pref/prefs.php:38 msgid "Enable feed categories" @@ -1872,12 +1730,10 @@ msgid "Maximum age of fresh articles (in hours)" msgstr "Maximum leeftijd van nieuwe artikelen (uren) " #: classes/pref/prefs.php:41 -#, fuzzy msgid "Hide feeds with no unread articles" msgstr "Feeds zonder ongelezen artikelen verbergen" #: classes/pref/prefs.php:42 -#, fuzzy msgid "Show special feeds when hiding read feeds" msgstr "Toon speciale feeds bij verbergen gelezen feeds" @@ -1887,22 +1743,25 @@ msgstr "Lang datumformaat" #: classes/pref/prefs.php:44 msgid "On catchup show next feed" -msgstr "toon volgende feed na bijwerken" +msgstr "Toon volgende feed na bijwerken" #: classes/pref/prefs.php:44 -msgid "Automatically open next feed with unread articles after marking one as read" -msgstr "Automatisch volgende feed met ongelezen artikelen openen nadat er een is gemarkeerd als gelezen" +msgid "" +"Automatically open next feed with unread articles after marking one as read" +msgstr "" +"Automatisch volgende feed met ongelezen artikelen openen nadat er een is " +"gemarkeerd als gelezen" #: classes/pref/prefs.php:45 msgid "Purge articles after this number of days (0 - disables)" -msgstr "Permanent verwijderen van artikelen na dit aantal dagen (0 - zet dit uit)" +msgstr "" +"Permanent verwijderen van artikelen na dit aantal dagen (0 - zet dit uit)" #: classes/pref/prefs.php:46 msgid "Purge unread articles" msgstr "Ongelezen artikelen permanent verwijderen" -#: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: classes/pref/prefs.php:47 plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Draai de koptekst volgorde om (oudste eerst)" @@ -1912,7 +1771,7 @@ msgstr "Korte datumformaat" #: classes/pref/prefs.php:49 msgid "Show content preview in headlines list" -msgstr "toon voorbeeld van inhoud in lijst van kopteksten" +msgstr "Toon voorbeeld van inhoud in lijst van kopteksten" #: classes/pref/prefs.php:50 msgid "Sort headlines by feed date" @@ -1920,7 +1779,9 @@ msgstr "Sorteer kopteksten op feed datum" #: classes/pref/prefs.php:50 msgid "Use feed-specified date to sort headlines instead of local import date." -msgstr "Door feed gespecificeerde data gebruiken om kopteksten te sorteren in plaats van lokaal geïmporteerde data." +msgstr "" +"Door feed gespecificeerde data gebruiken om kopteksten te sorteren in plaats " +"van lokaal geïmporteerde data." #: classes/pref/prefs.php:51 msgid "Login with an SSL certificate" @@ -1940,10 +1801,11 @@ msgstr "Verwijder onveilige tags uit artikelen" #: classes/pref/prefs.php:53 msgid "Strip all but most common HTML tags when reading articles." -msgstr "Verwijder alles behalve de meest algemene HTML tags bij het lezen van artikelen." +msgstr "" +"Verwijder alles behalve de meest algemene HTML tags bij het lezen van " +"artikelen." -#: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: classes/pref/prefs.php:54 js/prefs.js:1734 msgid "Customize stylesheet" msgstr "Aanpassen opmaakmodel" @@ -1952,7 +1814,7 @@ msgid "Customize CSS stylesheet to your liking" msgstr "Aanpassen CSS opmaakmodel aan uw voorkeur" #: classes/pref/prefs.php:55 -msgid "User timezone" +msgid "Time zone" msgstr "Gebruiker's tijdzone" #: classes/pref/prefs.php:56 @@ -1962,25 +1824,30 @@ msgstr "Kopteksten in virtuele feeds groeperen" #: classes/pref/prefs.php:56 msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" +"Speciale feeds, labels en categorieën worden gegroepeerd op oorspronkelijke " +"feeds" #: classes/pref/prefs.php:57 -#, fuzzy -msgid "Select theme" -msgstr "Selecteer met ster" +msgid "Language" +msgstr "Taal" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "Thema" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" -msgstr "" +msgstr "Selecteer een van de beschikbare CSS themas" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "Oud wachtwoord kan niet leeg zijn." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "Nieuw wachtwoord kan niet leeg zijn." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Ingevulde wachtwoorden komen niet overeen." @@ -1988,221 +1855,242 @@ msgstr "Ingevulde wachtwoorden komen niet overeen." msgid "Function not supported by authentication module." msgstr "Functie niet ondersteund door authenticatiemodule." -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "De configuratie is opgeslagen." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Onbekende optie: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "Uw persoonlijke gegevens zijn opgeslagen." -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." -msgstr "" +msgstr "Je voorkeuren zijn nu ingesteld op de standaardwaarden." -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "Persoonlijke gegevens / Authenticatie" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Persoonlijke gegevens" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" -msgstr "volledige naam" +msgstr "Volledige naam" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "E-mail" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Toegangsniveau" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "Gegevens opslaan" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "Uw wachtwoord staat op de standaard waarde. Verander het aub." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." -msgstr "" +msgstr "Je wachtwoord wijzigen schakelt Eenmalig Wachtwoord uit." -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Oud wachtwoord" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Nieuw wachtwoord" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" -msgstr "Bevestigen wachtwoord" +msgstr "Bevestig wachtwoord" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Wijzig wachtwoord" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" -msgstr "eenmalig wachtwoord / Authenticator" +msgstr "Eenmalig wachtwoord / Authenticator" -#: classes/pref/prefs.php:338 -msgid "One time passwords are currently enabled. Enter your current password below to disable." +#: classes/pref/prefs.php:327 +msgid "" +"One time passwords are currently enabled. Enter your current password below " +"to disable." msgstr "" +"Eenmalig wachtwoord is geactiveerd. Voer je huidige wachtwoord in om dit uit " +"te schakelen." -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 classes/pref/prefs.php:403 msgid "Enter your password" msgstr "Vul uw wachtwoord in" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" -msgstr "EWW (Eenmalig wachtwoord) uitschakelen" +msgstr "EW (Eenmalig wachtwoord) uitschakelen" -#: classes/pref/prefs.php:380 -msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." -msgstr "U heeft een compatibele Authenticator nodig om dit te gebruiken. Veranderen van wachtwoord schakelt automatisch EWW uit." +#: classes/pref/prefs.php:369 +msgid "" +"You will need a compatible Authenticator to use this. Changing your password " +"would automatically disable OTP." +msgstr "" +"U heeft een compatibele Authenticator nodig om dit te gebruiken. Veranderen " +"van wachtwoord schakelt automatisch EW uit." -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "Scan de volgende code met de Authenticator applicatie:" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "Ik heb de code gescanned en wil nu EWW inschakelen" +#: classes/pref/prefs.php:408 +msgid "Enter the generated one time password" +msgstr "Geef aub uw eenmalig wachtwoord" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" -msgstr "Inschakelen EWW" +msgstr "Inschakelen EW" + +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "PHP GD functies zijn noodzakelijk voor EW ondersteuning." -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." -msgstr "" +msgstr "Sommige instellingen zijn alleen beschikbaar in het standaard profiel." -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "Aanpassen" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "Registreren" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "Wissen" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "Huidige servertijd: %s (UTC)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Configuratie opslaan" -#: classes/pref/prefs.php:694 -#, fuzzy +#: classes/pref/prefs.php:675 msgid "Save and exit preferences" msgstr "Verlaat voorkeuren" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "Profielbeheer" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Terugzetten naar de standaardwaarden" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 classes/pref/prefs.php:708 msgid "Plugins" msgstr "Plug-ins" -#: classes/pref/prefs.php:730 -msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." -msgstr "" +#: classes/pref/prefs.php:710 +msgid "" +"You will need to reload Tiny Tiny RSS for plugin changes to take effect." +msgstr "Je moet Tiny Tiny RSS herladen om wijzigingen te kunnen zien." -#: classes/pref/prefs.php:732 -msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." +#: classes/pref/prefs.php:712 +msgid "" +"Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank" +"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a " +"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins" +"\">wiki</a>." msgstr "" +"Download meer plugins van tt-rss.org <a class=\"visibleLink\" target=\"_blank" +"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forum</a> of <a " +"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins" +"\">wiki</a>." -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "Systeem plug-ins" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 classes/pref/prefs.php:796 msgid "Plugin" msgstr "Plug-in" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 classes/pref/prefs.php:797 msgid "Description" msgstr "Omschrijving" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 classes/pref/prefs.php:798 msgid "Version" msgstr "Versie" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 classes/pref/prefs.php:799 msgid "Author" msgstr "Auteur" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 classes/pref/prefs.php:831 msgid "more info" -msgstr "" +msgstr "meer info" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 classes/pref/prefs.php:840 msgid "Clear data" msgstr "Wis data" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "Gebruiker's plug-ins" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 msgid "Enable selected plugins" msgstr "Geselecteerd plug-ins inschakelen" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +msgid "Incorrect one time password" +msgstr "Onjuist Eenmalig Wachtwoord" + +#: classes/pref/prefs.php:925 classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "Onjuist wachtwoord" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format -msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." -msgstr "U kunt door de CSS-declaraties aan te passen de kleuren, lettertypen en lay-out van uw huidige thema hier aanpassen. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Dit bestand</a> kan als richtlijn worden gebruikt." +msgid "" +"You can override colors, fonts and layout of your currently selected theme " +"with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink" +"\" href=\"%s\">This file</a> can be used as a baseline." +msgstr "" +"U kunt door de CSS-declaraties aan te passen de kleuren, lettertypen en lay-" +"out van uw huidige thema hier aanpassen. <a target=\"_blank\" class=" +"\"visibleLink\" href=\"%s\">Dit bestand</a> kan als richtlijn worden " +"gebruikt." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Maak profiel" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 classes/pref/prefs.php:1060 msgid "(active)" msgstr "(actief)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "Verwijder geselecteerde profielen" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Activeer profiel" @@ -2210,272 +2098,312 @@ msgstr "Activeer profiel" msgid "Check to enable field" msgstr "Aanvinken om veld in te schakelen" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "Feed titel" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 classes/pref/feeds.php:835 msgid "Update" msgstr "Bijwerken" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Artikelopschoning:" -#: classes/pref/feeds.php:606 -msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." -msgstr "<b>Hint:</b> U moet uw aanmeld informatie invullen als uw feed authenticatie vereist, behalve voor Twitter feeds." +#: classes/pref/feeds.php:645 +msgid "" +"<b>Hint:</b> you need to fill in your login information if your feed " +"requires authentication, except for Twitter feeds." +msgstr "" +"<b>Hint:</b> U moet uw aanmeld informatie invullen als uw feed authenticatie " +"vereist, behalve voor Twitter feeds." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "Verbergen voor populaire feeds" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 classes/pref/feeds.php:886 msgid "Include in e-mail digest" -msgstr "toevoegen aan e-mail samenvatting" +msgstr "Toevoegen aan e-mail samenvatting" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Altijd afbeeldingsbijlagen weergeven" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "Afbeeldingen niet insluiten." -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Afbeelding lokaal in cache plaatsen" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "Markeer bijgewerkte artikelen als niet-gelezen" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" -msgstr "Icon" +msgstr "Pictogram" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Vervangen" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "Herabonneren voor push updates" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "Herstelt PubSubHubbub abonnement status voor gepushte feeds." -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 classes/pref/feeds.php:1222 msgid "All done." msgstr "Alles gedaan." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Feeds met fouten" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "Inactieve feeds" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Bewerk geselecteerde feeds" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 js/prefs.js:1779 msgid "Batch subscribe" msgstr "Batchmatig abonneren" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "Categorieën" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "Categorie toevoegen" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "Verwijder geselecteerde" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "Verberg/Toon lege categorieën" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "Meer acties…" -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Handmatig opschonen" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "Wis feed data" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 -msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." -msgstr "Met OPML kunt u feeds, filters, labels en Tiny Tiny RSS instellingen exporteren en importeren." +#: classes/pref/feeds.php:1427 +msgid "" +"Using OPML you can export and import your feeds, filters, labels and Tiny " +"Tiny RSS settings." +msgstr "" +"Met OPML kunt u feeds, filters, labels en Tiny Tiny RSS instellingen " +"exporteren en importeren." -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." -msgstr "Alleen het hoofdprofiel van de instellingen kan worden overgebracht met OPML." +msgstr "" +"Alleen instellingen van het hoofdprofiel kunnen worden overgebracht met OPML." -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "Importeer mijn OPML" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "Bestandsnaam:" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" -msgstr "toevoegingsinstellingen" +msgstr "Toevoegingsinstellingen" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "OPML exporteren" -#: classes/pref/feeds.php:1399 -msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." -msgstr "Uw OPML kan openbaar worden gepubliceerd en er kan op worden geabonneerd door iedereen die de URL hieronder kent." +#: classes/pref/feeds.php:1456 +msgid "" +"Your OPML can be published publicly and can be subscribed by anyone who " +"knows the URL below." +msgstr "" +"Uw OPML kan openbaar worden gepubliceerd en er kan op worden geabonneerd " +"door iedereen die de URL hieronder kent." -#: classes/pref/feeds.php:1401 -msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." -msgstr "De gepubliceerde OPML bevatten niet uw Tiny Tiny RSS instellingen, feeds die authenticatie vereisen of feeds verborgen voor Populaire feeds." +#: classes/pref/feeds.php:1458 +msgid "" +"Published OPML does not include your Tiny Tiny RSS settings, feeds that " +"require authentication or feeds hidden from Popular feeds." +msgstr "" +"De gepubliceerde OPML bevatten niet uw Tiny Tiny RSS instellingen, feeds die " +"authenticatie vereisen of feeds verborgen voor Populaire feeds." -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "Publieke OPML URL" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "Gepubliceerde OPML URL weergeven" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Firefox integratie" -#: classes/pref/feeds.php:1416 -msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." -msgstr "Deze Tiny Tiny RSS site kan gebruikt worden als een Firefox Feed Reader door op de link hieronder te klikken." +#: classes/pref/feeds.php:1472 +msgid "" +"This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the " +"link below." +msgstr "" +"Deze Tiny Tiny RSS site kan gebruikt worden als een Firefox Feed Reader door " +"op de link hieronder te klikken." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Klik hier om deze site te registreren als een feed reader." -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" msgstr "Gepubliceerde & gedeelde artikelen / Gegenereerde feeds" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "Gepubliceerde artikelen en gegenereerde feeds" -#: classes/pref/feeds.php:1435 -msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." -msgstr "Gepubliceerde artikelen worden geëxporteerd als publieke RSS-feed en er kan door iedereen die de URL hieronder kent op worden geabonneerd." +#: classes/pref/feeds.php:1491 +msgid "" +"Published articles are exported as a public RSS feed and can be subscribed " +"by anyone who knows the URL specified below." +msgstr "" +"Gepubliceerde artikelen worden geëxporteerd als publieke RSS-feed en er kan " +"door iedereen die de URL hieronder kent op worden geabonneerd." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "Toon URL" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "Wis alle gegenereerde URL's" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "Artikelen gedeeld met URL" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "U kunt alle artikelen gedeeld via unieke URL's hier uitschakelen." -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "Delen alle artikelen teniet doen" -#: classes/pref/feeds.php:1529 -msgid "These feeds have not been updated with new content for 3 months (oldest first):" +#: classes/pref/feeds.php:1582 +msgid "" +"These feeds have not been updated with new content for 3 months (oldest " +"first):" msgstr "Deze feeds hebben al 3 maanden geen nieuwe inhoud (oudste eerst):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "Klik om feed te bewerken" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "Abonnement opzeggen voor geselecteerde feeds" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Deze feeds zijn niet bijgewerkt omdat er fouten zijn opgetreden:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" -msgstr "Een geldige RSS feed per regel toevoegen (geen feed detectie uitgevoerd)" +msgstr "" +"Een geldige RSS feed per regel toevoegen (er wordt geen feed detectie " +"uitgevoerd)" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "Te abonneren feeds: één per regel" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "Feeds vereisen authenticatie." -#: plugins/digest/digest_body.php:59 -#, fuzzy -msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "Fouten Log" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "Herlaad" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "Fout" + +#: classes/pref/system.php:42 +msgid "Filename" +msgstr "Bestandsnaam" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "Bericht" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Datum" + +#: plugins/digest/digest_body.php:57 +msgid "" +"Your browser doesn't support Javascript, which is required for this " +"application to function properly. Please check your browser settings." msgstr "" -"Uw browser ondersteunt geen Javascript. Dit is vereist voor\n" -"\t\t\thet goed functioneren van deze applicatie. Controleer aub uw\n" -"\t\t\tbrowser instellingen." +"Uw browser ondersteunt geen Javascript. Dit is vereist voor het goed " +"functioneren van deze applicatie. Controleer aub uw browser instellingen." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Hallo," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "Reguliere versie" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "Sluit artikel" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "NVVW (Niet Veilig Voor Werk) (klik om in/uit te schakelen)" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "NVVW (Niet Veilig Voor Werk) Plug-in" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "Tags te overwegen als NVVW (komma gescheiden)" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 msgid "Configuration saved." msgstr "Configuratie opgeslagen." @@ -2491,17 +2419,16 @@ msgstr "Wachtwoord is veranderd." msgid "Old password is incorrect." msgstr "Oud wachtwoord is onjuist." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 plugins/mobile/prefs.php:25 msgid "Home" -msgstr "Thuisbasis" +msgstr "Startpagina" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "Niets gevonden (klik om feed opnieuw te laden)." @@ -2509,414 +2436,423 @@ msgstr "Niets gevonden (klik om feed opnieuw te laden)." msgid "Open regular version" msgstr "Open de reguliere versie" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "Inschakelen categorieën" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "ON" msgstr "AAN" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "OFF" msgstr "UIT" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" -msgstr "Browse categorieën als mappen" +msgstr "Geef categorieën als mappen weer" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "Toon afbeeldingen in berichten" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "Verberg gelezen artikelen en feeds" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" -msgstr "sorteer feeds op ongelezen aantallen" +msgstr "Sorteer feeds op ongelezen aantallen" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[Doorgestuurd]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 plugins/mail/init.php:64 msgid "Multiple articles" msgstr "Meerdere artikelen" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "Klikken op de volgende link om uw e-mail cliënt te starten:" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 msgid "Forward selected article(s) by email." msgstr "Geselecteerde artikel(en) doorsturen per e-mail." -#: plugins/mailto/init.php:81 -msgid "You should be able to edit the message before sending in your mail client." -msgstr "U zou in staat moeten zijn het bericht te bewerken vóórdat u het verzendt met uw e-mail cliënt." +#: plugins/mailto/init.php:78 +msgid "" +"You should be able to edit the message before sending in your mail client." +msgstr "" +"U zou in staat moeten zijn het bericht te bewerken vóórdat u het verzendt " +"met uw e-mail cliënt." -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 msgid "Close this dialog" msgstr "Sluit dit dialoogvenster" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "Bookmarklets" -#: plugins/bookmarklets/init.php:24 -msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." -msgstr "Sleep de link hieronder naar uw browser's werkbalk, open de feed waar u geïnteresseerd in bent in uw browser en klik op de link om u er op te abonneren." +#: plugins/bookmarklets/init.php:22 +msgid "" +"Drag the link below to your browser toolbar, open the feed you're interested " +"in in your browser and click on the link to subscribe to it." +msgstr "" +"Sleep de link hieronder naar uw browser's werkbalk, open de feed waar u " +"geïnteresseerd in bent in uw browser en klik op de link om u er op te " +"abonneren." -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "Abonneren op %s in Tiny Tiny RSS?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "Abonneren in Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" -msgstr "Gebruik deze bookmarklet om arbitraire pagina's met Tiny Tiny RSS te publiceren" +msgstr "" +"Gebruik deze bookmarklet om willekeurige pagina's met Tiny Tiny RSS te " +"publiceren" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "Import en export" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "Artikelarchief" -#: plugins/import_export/init.php:65 -msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." -msgstr "U kunt uw gearchiveerde of artikelen met ster exporteren en importeren om veilig te bewaren wanneer u migreert tussen tt-rss instanties." +#: plugins/import_export/init.php:62 +msgid "" +"You can export and import your Starred and Archived articles for safekeeping " +"or when migrating between tt-rss instances." +msgstr "" +"U kunt uw gearchiveerde of artikelen met ster exporteren en importeren om " +"veilig te bewaren wanneer u migreert tussen tt-rss instanties." -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "Exporteer mijn data" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importeren" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "Kon niet importeren: onjuiste schema versie." -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." -msgstr "Kon niet importeren: onbekend documentformaat." +msgstr "Kon niet importeren: onbekend documentindeling." -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " -msgstr "" +msgstr "Klaar:" -#: plugins/import_export/init.php:383 -#, fuzzy, php-format +#: plugins/import_export/init.php:382 +#, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " -msgstr[0] "Bewerk artikel notitie" -msgstr[1] "Bewerk artikel notitie" +msgstr[0] "%d artikel verwerkt, " +msgstr[1] "%d artikels verwerkt, " -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d geïmporteerd, " +msgstr[1] "%d geïmporteerd, " -#: plugins/import_export/init.php:385 -#, fuzzy, php-format +#: plugins/import_export/init.php:384 +#, php-format msgid "%d feed created." msgid_plural "%d feeds created." -msgstr[0] "Geen feeds geselecteerd." -msgstr[1] "Geen feeds geselecteerd." +msgstr[0] "%d feed gemaakt." +msgstr[1] "%d feeds gemaakt." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "Kon XML-document niet laden." -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "Voorbereiden data" -#: plugins/import_export/init.php:423 -#, fuzzy, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "" -"Kon bestand niet uploaden. U moet misschien de upload_max_filesize\n" -"\t\t\t\tin PHP.ini aanpassen (huidige waarde = %s)" +#: plugins/import_export/init.php:444 plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." +msgstr "Geen bestand geupload." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "Van:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "Naar:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Onderwerp:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" -msgstr "Zend e-mail" +msgstr "Verzend e-mail" -#: plugins/note/init.php:28 -#: plugins/note/note.js:11 +#: plugins/note/init.php:26 plugins/note/note.js:11 msgid "Edit article note" msgstr "Bewerk artikel notitie" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "Voorbeeldpaneel" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "Voorbeeld waarde" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "Geef waarde" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "" - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." -msgstr "" +msgstr "Klaar. %d van de %d artikels geïmporteerd." -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." -msgstr "" +msgstr "Het document heeft een onbekende indeling." -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" -msgstr "" +msgstr "Importeer gedeelde items of items met ster van Google Reader" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." -msgstr "" +msgstr "Plak je starred.json of shared.json hieronder." -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" -msgstr "" +msgstr "Importeer items met Ster" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "Gekoppeld" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 plugins/instances/init.php:395 msgid "Instance" msgstr "Instantie" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" -msgstr "instantie URL" +msgstr "Instantie URL" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 plugins/instances/init.php:414 msgid "Access key:" msgstr "Toegangssleutel:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "Toegangssleutel" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "Gebruik één toegang-sleutel voor beide gekoppelde instanties." -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 plugins/instances/init.php:429 msgid "Generate new key" msgstr "Genereer nieuwe sleutel" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "Link instantie" -#: plugins/instances/init.php:307 -msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" -msgstr "U kunt deze instantie verbinden met andere instanties van Tiny Tiny RSS om Populaire feeds te delen. Verbindt deze instantie van Tiny Tiny RSS met deze URL:" +#: plugins/instances/init.php:304 +msgid "" +"You can connect other instances of Tiny Tiny RSS to this one to share " +"Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" +msgstr "" +"U kunt deze instantie verbinden met andere instanties van Tiny Tiny RSS om " +"Populaire feeds te delen. Verbindt deze instantie van Tiny Tiny RSS met " +"deze URL:" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "Laatst verbonden" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "Status" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "Opgeslagen feeds" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Link aanmaken" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "Deel via URL" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "U kunt dit artikel delen via de volgende unieke URL:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "Tiny Tiny RSS bijwerken" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Uw Tiny Tiny RSS installatie is up-to-date." -#: plugins/updater/init.php:351 -#, fuzzy +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." -msgstr "Sluit dit dialoogvenster niet voordat het bijwerken klaar is. Maak een back-up van uw tt-rss map alvorens verder te gaan." +msgstr "Sluit dit dialoogvenster niet voordat het bijwerken klaar is." -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." -msgstr "" +msgstr "Het is raadzaam eerst een backup van je tt-rss map te maken." -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." -msgstr "" +msgstr "Je database wordt niet aangepast." -#: plugins/updater/init.php:362 -msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." +#: plugins/updater/init.php:360 +msgid "" +"Your current tt-rss installation directory will not be modified. It will be " +"renamed and left in the parent directory. You will be able to migrate all " +"your customized files after update finishes." msgstr "" +"Je huidige tt-rss installatie map wordt niet aangepast. Deze wordt hernoemd " +"en in de hoofdmap gelaten. Je kan al je aangepaste bestanden overzetten " +"nadat de update voltooid is." -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." -msgstr "Klaar voor bijwerken." +msgstr "Klaar om bij te werken." -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" msgstr "Start update" -#: js/feedlist.js:394 -#: js/feedlist.js:422 -#: plugins/digest/digest.js:26 +#: js/feedlist.js:395 js/feedlist.js:423 plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Markeer alle artikelen in %s als gelezen?" -#: js/feedlist.js:413 -#, fuzzy +#: js/feedlist.js:414 msgid "Mark all articles in %s older than 1 day as read?" -msgstr "Markeer alle artikelen in %s als gelezen?" +msgstr "Markeer alle artikelen in %s ouder dan 1 dag als gelezen?" -#: js/feedlist.js:416 -#, fuzzy +#: js/feedlist.js:417 msgid "Mark all articles in %s older than 1 week as read?" -msgstr "Markeer alle artikelen in %s als gelezen?" +msgstr "Markeer alle artikelen in %s ouder dan 1 week als gelezen?" -#: js/feedlist.js:419 -#, fuzzy +#: js/feedlist.js:420 msgid "Mark all articles in %s older than 2 weeks as read?" -msgstr "Markeer alle artikelen in %s als gelezen?" +msgstr "Markeer alle artikelen in %s ouder dan 2 weken als gelezen?" -#: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." -msgstr "Weet u zeker dat u deze uitzondering wilt rapporteren aan tt-rss.org? Het rapport zal uw browser informatie bevatten. Uw IP-adres zal bewaard worden in een database." +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "De fout wordt in het geconfigureerde log vastgelegd." -#: js/functions.js:214 -msgid "close" +#: js/functions.js:107 +msgid "" +"Are you sure to report this exception to tt-rss.org? The report will include " +"your browser information. Your IP would be saved in the database." msgstr "" +"Weet u zeker dat u deze uitzondering wilt rapporteren aan tt-rss.org? Het " +"rapport zal uw browser informatie bevatten. Uw IP-adres zal bewaard worden " +"in een database." + +#: js/functions.js:236 +msgid "Click to close" +msgstr "Klik om te sluiten" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" -msgstr "" +msgstr "Fout uitleg" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." -msgstr "" +msgstr "Upload voltooid." -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "Opgeslagen feed pictogram verwijderen?" -#: js/functions.js:697 -#, fuzzy +#: js/functions.js:723 msgid "Removing feed icon..." -msgstr "Opgeslagen feed pictogram verwijderen?" +msgstr "Opgeslagen feed pictogram verwijderen..." -#: js/functions.js:702 -#, fuzzy +#: js/functions.js:728 msgid "Feed icon removed." -msgstr "Feed niet gevonden." +msgstr "Feed pictogram verwijderd." -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "Selecteer aub een afbeeldingsbestand om te uploaden." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "Nieuw pictogram voor deze feed uploaden?" -#: js/functions.js:727 -#, fuzzy +#: js/functions.js:753 msgid "Uploading, please wait..." -msgstr "Aan 't laden, even wachten aub..." +msgstr "Aan 't uploaden, even wachten aub..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "Geeft een onderschrift voor label:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." -msgstr "Kan geen label aanmaken: onderschrift ontbreekt" +msgstr "Kan label niet aanmaken: onderschrift ontbreekt." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "Abonneren op feed" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "Geabonneerd op %s" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "Gespecificeerde URL lijkt ongeldig te zijn." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "Gespecificeerde URL lijkt geen feeds te bevatten." -#: js/functions.js:879 +#: js/functions.js:862 +msgid "Expand to select feed" +msgstr "Uitklappen tot geselecteerde feed" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "Kon de gespecificeerde URL: %s niet downloaden" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "XML validatie mislukt: %s" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "U bent al geabonneerd op deze feed." @@ -2934,89 +2870,80 @@ msgid "Create Filter" msgstr "Filter aanmaken" #: js/functions.js:1191 -msgid "Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update." -msgstr "Abonnement opnieuw instellen? Tiny Tiny RSS zal proberen zich opnieuw op de notification hub te abonneren bij de volgende feed update." +msgid "" +"Reset subscription? Tiny Tiny RSS will try to subscribe to the notification " +"hub again on next feed update." +msgstr "" +"Abonnement opnieuw instellen? Tiny Tiny RSS zal proberen zich opnieuw op de " +"notification hub te abonneren bij de volgende feed update." #: js/functions.js:1202 -#, fuzzy msgid "Subscription reset." -msgstr "Abonneren op feed..." +msgstr "Abonnement hersteld." -#: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/functions.js:1212 js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "Abonnement opzeggen voor %s?" #: js/functions.js:1215 msgid "Removing feed..." -msgstr "" +msgstr "Feed wordt verwijderd..." -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "Vul titel van categorie in aub:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" -msgstr "nieuw syndicatie-adres voor deze feed genereren?" +msgstr "Nieuw syndicatie-adres voor deze feed genereren?" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 js/prefs.js:1231 msgid "Trying to change address..." -msgstr "" +msgstr "Adres aan het aanpassen..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 js/tt-rss.js:421 js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "U kunt dit type feed niet bewerken." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" -msgstr "Bewerken feed" +msgstr "Bewerk feed" -#: js/functions.js:1566 -#: js/prefs.js:194 -#: js/prefs.js:749 -#, fuzzy +#: js/functions.js:1567 js/prefs.js:194 js/prefs.js:749 msgid "Saving data..." -msgstr "Gegevens opslaan" +msgstr "Gegevens opslaan..." -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "Meer feeds" -#: js/functions.js:1659 -#: js/functions.js:1769 -#: js/prefs.js:397 -#: js/prefs.js:427 -#: js/prefs.js:459 -#: js/prefs.js:642 -#: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/functions.js:1660 js/functions.js:1770 js/prefs.js:397 js/prefs.js:427 +#: js/prefs.js:459 js/prefs.js:642 js/prefs.js:662 js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Er zijn geen feeds geselecteerd." -#: js/functions.js:1701 -msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." -msgstr "Geselecteerde feeds uit het archief verwijderen? Feeds met opgeslagen artikelen zullen niet worden verwijderd." +#: js/functions.js:1702 +msgid "" +"Remove selected feeds from the archive? Feeds with stored articles will not " +"be removed." +msgstr "" +"Geselecteerde feeds uit het archief verwijderen? Feeds met opgeslagen " +"artikelen zullen niet worden verwijderd." -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "Feeds met update fouten" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "Geselecteerde feeds verwijderen?" -#: js/functions.js:1754 -#: js/prefs.js:1178 -#, fuzzy +#: js/functions.js:1755 js/prefs.js:1192 msgid "Removing selected feeds..." -msgstr "Geselecteerde feeds verwijderen?" +msgstr "Geselecteerde feeds verwijderen..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Help" @@ -3038,16 +2965,15 @@ msgstr "Geef loginID aub:" #: js/prefs.js:62 msgid "Can't create user: no login specified." -msgstr "Kan geen gebruiker aanmaken: geen loginID gespecificeerd." +msgstr "Kan gebruiker niet aanmaken: geen loginID gespecificeerd." #: js/prefs.js:66 -#, fuzzy msgid "Adding user..." -msgstr "filter toevoegen..." +msgstr "Gebruiker toevoegen..." #: js/prefs.js:94 msgid "User Editor" -msgstr "Gebruiker's Editor" +msgstr "Gebruikers bewerken" #: js/prefs.js:117 msgid "Edit Filter" @@ -3058,37 +2984,34 @@ msgid "Remove filter?" msgstr "Filter verwijderen?" #: js/prefs.js:169 -#, fuzzy msgid "Removing filter..." -msgstr "filter toevoegen..." +msgstr "Filter verwijderen..." #: js/prefs.js:279 msgid "Remove selected labels?" msgstr "Geselecteerde labels verwijderen?" #: js/prefs.js:282 -#, fuzzy msgid "Removing selected labels..." -msgstr "Geselecteerde labels verwijderen?" +msgstr "Geselecteerde labels verwijderen..." -#: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:295 js/prefs.js:1393 msgid "No labels are selected." msgstr "Er zijn geen labels geselecteerd." #: js/prefs.js:309 -msgid "Remove selected users? Neither default admin nor your account will be removed." -msgstr "Geselecteerde gebruikers verwijderen? Noch de standaard admin gebruiker, noch uw eigen account zal worden verwijderd." +msgid "" +"Remove selected users? Neither default admin nor your account will be " +"removed." +msgstr "" +"Geselecteerde gebruikers verwijderen? Noch de standaard admin gebruiker, " +"noch uw eigen account zal worden verwijderd." #: js/prefs.js:312 -#, fuzzy msgid "Removing selected users..." -msgstr "Geselecteerde filters verwijderen?" +msgstr "Geselecteerde gebruikers verwijderen..." -#: js/prefs.js:326 -#: js/prefs.js:507 -#: js/prefs.js:528 -#: js/prefs.js:567 +#: js/prefs.js:326 js/prefs.js:507 js/prefs.js:528 js/prefs.js:567 msgid "No users are selected." msgstr "Er zijn geen gebruikers geselecteerd." @@ -3097,13 +3020,10 @@ msgid "Remove selected filters?" msgstr "Geselecteerde filters verwijderen?" #: js/prefs.js:347 -#, fuzzy msgid "Removing selected filters..." -msgstr "Geselecteerde filters verwijderen?" +msgstr "Geselecteerde filters verwijderen..." -#: js/prefs.js:359 -#: js/prefs.js:597 -#: js/prefs.js:616 +#: js/prefs.js:359 js/prefs.js:597 js/prefs.js:616 msgid "No filters are selected." msgstr "Er zijn geen filters geselecteerd." @@ -3112,9 +3032,8 @@ msgid "Unsubscribe from selected feeds?" msgstr "Abonnement opzeggen voor geselecteerde feeds?" #: js/prefs.js:382 -#, fuzzy msgid "Unsubscribing from selected feeds..." -msgstr "Abonnement opzeggen voor geselecteerde feeds" +msgstr "Abonnement opzeggen voor geselecteerde feeds..." #: js/prefs.js:412 msgid "Please select only one feed." @@ -3125,31 +3044,27 @@ msgid "Erase all non-starred articles in selected feed?" msgstr "Alle artikelen zonder ster in deze feed wissen?" #: js/prefs.js:421 -#, fuzzy msgid "Clearing selected feed..." -msgstr "Bewerk geselecteerde feeds" +msgstr "Geselecteerde feed opruimen..." #: js/prefs.js:440 msgid "How many days of articles to keep (0 - use default)?" -msgstr "hoeveel dagen moeten artikelen worden bewaard (0 = gebruik Standaard)?" +msgstr "" +"Hoeveel dagen moeten artikelen worden bewaard (0 = gebruik standaardwaarde)?" #: js/prefs.js:443 -#, fuzzy msgid "Purging selected feed..." -msgstr "Bewerk geselecteerde feeds" +msgstr "Geselecteerde feeds opschonen..." #: js/prefs.js:478 msgid "Login field cannot be blank." msgstr "Het loginID veld kan niet leeg zijn." #: js/prefs.js:482 -#, fuzzy msgid "Saving user..." -msgstr "filter toevoegen..." +msgstr "Gebruiker opslaan..." -#: js/prefs.js:512 -#: js/prefs.js:533 -#: js/prefs.js:572 +#: js/prefs.js:512 js/prefs.js:533 js/prefs.js:572 msgid "Please select only one user." msgstr "Selecteer aub slechts één gebruiker." @@ -3158,9 +3073,8 @@ msgid "Reset password of selected user?" msgstr "Wachtwoord van geselecteerde gebruiker opnieuw instellen?" #: js/prefs.js:540 -#, fuzzy msgid "Resetting password for selected user..." -msgstr "Wachtwoord van geselecteerde gebruiker opnieuw instellen?" +msgstr "Wachtwoord van geselecteerde gebruiker opnieuw instellen..." #: js/prefs.js:585 msgid "User details" @@ -3175,9 +3089,8 @@ msgid "Combine selected filters?" msgstr "Geselecteerde filters combineren?" #: js/prefs.js:623 -#, fuzzy msgid "Joining filters..." -msgstr "filter toevoegen..." +msgstr "Filters samenvoegen..." #: js/prefs.js:684 msgid "Edit Multiple Feeds" @@ -3195,347 +3108,318 @@ msgstr "OPML import" msgid "Please choose an OPML file first." msgstr "kies eerst een OPML-bestand aub." -#: js/prefs.js:815 -#: plugins/import_export/import_export.js:115 +#: js/prefs.js:815 plugins/import_export/import_export.js:115 #: plugins/googlereaderimport/init.js:45 -#, fuzzy msgid "Importing, please wait..." -msgstr "Aan 't laden, even wachten aub..." +msgstr "Aan 't importeren, even wachten aub..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "Terugzetten naar de standaardwaarden?" -#: js/prefs.js:1082 -msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." -msgstr "Categorie %s verwijderen? elke genestelde feed zal in de rubriek 'Ongecategoriseerd' worden geplaatst." +#: js/prefs.js:1096 +msgid "" +"Remove category %s? Any nested feeds would be placed into Uncategorized." +msgstr "" +"Categorie %s verwijderen? elke genestelde feed zal in de rubriek " +"'Ongecategoriseerd' worden geplaatst." -#: js/prefs.js:1088 -#, fuzzy +#: js/prefs.js:1102 msgid "Removing category..." -msgstr "Categorie verwijderen" +msgstr "Categorie verwijderen..." -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Geselecteerde categorieën verwijderen?" -#: js/prefs.js:1112 -#, fuzzy +#: js/prefs.js:1126 msgid "Removing selected categories..." -msgstr "Geselecteerde categorieën verwijderen?" +msgstr "Geselecteerde categorieën verwijderen..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Geen categorieën geselecteerd." -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "Categorie titel:" -#: js/prefs.js:1137 -#, fuzzy +#: js/prefs.js:1151 msgid "Creating category..." -msgstr "Aanmaken filter…" +msgstr "Aanmaken categorie…" -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "Feeds zonder recente updates" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" -msgstr "huidig OPML publicatieadres vervangen door een nieuwe?" +msgstr "Huidig OPML publicatieadres vervangen door een nieuwe?" -#: js/prefs.js:1302 -#, fuzzy +#: js/prefs.js:1316 msgid "Clearing feed..." -msgstr "Wis feed data" +msgstr "Feed opruimen..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Artikelen in geselecteerde feeds opnieuw een score geven?" -#: js/prefs.js:1325 -#, fuzzy +#: js/prefs.js:1339 msgid "Rescoring selected feeds..." -msgstr "Artikelen in geselecteerde feeds opnieuw een score geven?" +msgstr "Geselecteerde feeds nieuwe score geven..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." -msgstr "Alle artikelen opnieuw een score geven? Dit kan veel tjid in beslag nemen." +msgstr "" +"Alle artikelen opnieuw een score geven? Dit kan veel tijd in beslag nemen." -#: js/prefs.js:1348 -#, fuzzy +#: js/prefs.js:1362 msgid "Rescoring feeds..." -msgstr "Feed opnieuw score geven" +msgstr "Feed opnieuw score geven..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "Geselecteerd label naar de standaard kleur terugzetten?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Instellingsprofielen" -#: js/prefs.js:1411 -msgid "Remove selected profiles? Active and default profiles will not be removed." -msgstr "Geselecteerde profielen verwijderen? Actieve en standaard profielen zullen niet worden verwijderd." +#: js/prefs.js:1425 +msgid "" +"Remove selected profiles? Active and default profiles will not be removed." +msgstr "" +"Geselecteerde profielen verwijderen? Actieve en standaard profielen zullen " +"niet worden verwijderd." -#: js/prefs.js:1414 -#, fuzzy +#: js/prefs.js:1428 msgid "Removing selected profiles..." -msgstr "Verwijder geselecteerde profielen" +msgstr "Geselecteerde profielen verwijderen..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "Er zijn geen profielen geselecteerd." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 js/prefs.js:1504 msgid "Activate selected profile?" msgstr "Geselecteerd profiel activeren?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "Kies een te activeren profiel aub." -#: js/prefs.js:1458 -#, fuzzy +#: js/prefs.js:1472 msgid "Creating profile..." -msgstr "Maak profiel" +msgstr "Profiel aanmaken..." -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "Dit zal alle eerder gegenereerde feed-URL's ongeldig maken. Doorgaan?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 js/prefs.js:1550 msgid "Clearing URLs..." -msgstr "" +msgstr "URLs opruimen..." -#: js/prefs.js:1524 -#, fuzzy +#: js/prefs.js:1538 msgid "Generated URLs cleared." -msgstr "Genereer nieuwe URL" +msgstr "Genereerde URLs gewist." -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "Dit zal all eerder gedeelde artikel-URL's ongeldig maken. Doorgaan?" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." -msgstr "" +msgstr "Gedeelde URLs opgeruimd." -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Label editor" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "Abonneren op feeds..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "Wis opgeslagen data voor deze plug-in?" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Markeer alle artikelen als gelezen?" -#: js/tt-rss.js:130 -#, fuzzy +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." -msgstr "Markeer alle feeds als gelezen" +msgstr "Alle feeds als gelezen markeren..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." msgstr "Eerst de e-mail plug-in inschakelen aub." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 msgid "Please enable embed_original plugin first." -msgstr "embed_original plug-in inschakelen aub." +msgstr "Eerst embed_original plug-in inschakelen aub." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "Selecteer item(s) via tags" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "U kunt het abonnementen niet opzeggen in deze categorie." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Selecteer aub eerst een feed." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "U kunt dit type feed geen andere score geven." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "Artikelen in %s opnieuw een score geven?" -#: js/tt-rss.js:795 -#, fuzzy +#: js/tt-rss.js:806 msgid "Rescoring articles..." -msgstr "Artikelen nieuwe score geven" +msgstr "Artikelen nieuwe score geven..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "Nieuwe versie beschikbaar!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" msgstr "Zoeken annuleren" -#: js/viewfeed.js:455 -#: plugins/digest/digest.js:258 +#: js/viewfeed.js:453 plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Ster weghalen bij artikel" -#: js/viewfeed.js:459 -#: plugins/digest/digest.js:260 +#: js/viewfeed.js:457 plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Geef artikel een ster" -#: js/viewfeed.js:499 -#: plugins/digest/digest.js:263 +#: js/viewfeed.js:497 plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Ongepubliceerd artikel" -#: js/viewfeed.js:503 -#: plugins/digest/digest.js:265 +#: js/viewfeed.js:501 plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Artikel publiceren" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 -#: plugins/mailto/init.js:7 +#: js/viewfeed.js:653 +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "%d artikel geselecteerd" +msgstr[1] "%d artikelen geselecteerd" + +#: js/viewfeed.js:725 js/viewfeed.js:753 js/viewfeed.js:780 js/viewfeed.js:843 +#: js/viewfeed.js:877 js/viewfeed.js:997 js/viewfeed.js:1040 +#: js/viewfeed.js:1093 js/viewfeed.js:2091 plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Geen artikelen geselecteerd." -#: js/viewfeed.js:983 -#, fuzzy +#: js/viewfeed.js:1005 msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" -msgstr[0] "Verwijder %d geselecteerde artikelen in %s?" +msgstr[0] "Verwijder %d geselecteerd artikel in %s?" msgstr[1] "Verwijder %d geselecteerde artikelen in %s?" -#: js/viewfeed.js:985 -#, fuzzy +#: js/viewfeed.js:1007 msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" -msgstr[0] "Verwijder %d geselecteerde artikelen?" +msgstr[0] "Verwijder %d geselecteerd artikel?" msgstr[1] "Verwijder %d geselecteerde artikelen?" -#: js/viewfeed.js:1027 -#, fuzzy +#: js/viewfeed.js:1049 msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" -msgstr[0] "%d geselecteerd artikelen archiveren in %s?" +msgstr[0] "%d geselecteerd artikel archiveren in %s?" msgstr[1] "%d geselecteerd artikelen archiveren in %s?" -#: js/viewfeed.js:1030 -#, fuzzy +#: js/viewfeed.js:1052 msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" -msgstr[0] "%d gearchiveerde artikelen terugzetten?" +msgstr[0] "%d gearchiveerd artikel terugzetten?" msgstr[1] "%d gearchiveerde artikelen terugzetten?" -#: js/viewfeed.js:1032 -msgid "Please note that unstarred articles might get purged on next feed update." +#: js/viewfeed.js:1054 +msgid "" +"Please note that unstarred articles might get purged on next feed update." msgstr "" +"Let op, artikels zonder ster kunnen verloren gaan bij de volgende feed " +"update." -#: js/viewfeed.js:1077 -#, fuzzy +#: js/viewfeed.js:1099 msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" -msgstr[0] "Markeer %d geselecteerde artikelen in %s als gelezen?" +msgstr[0] "Markeer %d geselecteerd artikel in %s als gelezen?" msgstr[1] "Markeer %d geselecteerde artikelen in %s als gelezen?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" -msgstr "Bewerken artikel tags" +msgstr "Bewerk artikel tags" -#: js/viewfeed.js:1107 -#, fuzzy +#: js/viewfeed.js:1129 msgid "Saving article tags..." -msgstr "Bewerken artikel tags" +msgstr "Artikel tags opslaan..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Geen artikel geselecteerd." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Geen artikelen gevonden om te markeren" -#: js/viewfeed.js:1347 -#, fuzzy +#: js/viewfeed.js:1372 msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" -msgstr[0] "Markeer %d artikel(en) als gelezen?" -msgstr[1] "Markeer %d artikel(en) als gelezen?" +msgstr[0] "Markeer %d artikel als gelezen?" +msgstr[1] "Markeer %d artikelen als gelezen?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "Open origineel artikel" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 msgid "Display article URL" msgstr "Toon artikel URL" -#: js/viewfeed.js:1907 -#, fuzzy +#: js/viewfeed.js:1920 msgid "Toggle marked" -msgstr "In/uitschakelen sterren" +msgstr "Markeer als (on)gelezen" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Labels toevoegen" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "Label verwijderen" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "aan 't afspelen..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "Klik voor pauze" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "Geef aub een nieuwe score voor de geselecteerde artikelen:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "Geef aub een nieuwe score voor dit artikel:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 msgid "Article URL:" msgstr "Artikel URL:" #: plugins/digest/digest.js:72 -#, fuzzy msgid "Mark %d displayed article as read?" msgid_plural "Mark %d displayed articles as read?" -msgstr[0] "Markeer %d getoonde artikelen als gelezen?" +msgstr[0] "Markeer %d getoond artikel als gelezen?" msgstr[1] "Markeer %d getoonde artikelen als gelezen?" #: plugins/digest/digest.js:290 @@ -3547,7 +3431,6 @@ msgid "Click to expand article." msgstr "Klik om artikel uit te klappen." #: plugins/digest/digest.js:535 -#, fuzzy msgid "%d more..." msgid_plural "%d more..." msgstr[0] "%d meer…" @@ -3565,8 +3448,7 @@ msgstr "Laad meer..." msgid "Sorry, your browser does not support sandboxed iframes." msgstr "Sorry, uw browser lijkt iframes in een sandbox niet te ondersteunen." -#: plugins/mailto/init.js:21 -#: plugins/mail/mail.js:21 +#: plugins/mailto/init.js:21 plugins/mail/mail.js:21 msgid "Forward article by email" msgstr "Artikel doorsturen per e-mail" @@ -3575,33 +3457,38 @@ msgid "Export Data" msgstr "Data exporteren" #: plugins/import_export/import_export.js:40 -#, fuzzy -msgid "Finished, exported %d article. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgid_plural "Finished, exported %d articles. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgstr[0] "Klaar met exporteren van %d artikelen. U kunt de data <a class='visibleLink' href='%u'>hier</a> downloaden. " -msgstr[1] "Klaar met exporteren van %d artikelen. U kunt de data <a class='visibleLink' href='%u'>hier</a> downloaden. " +msgid "" +"Finished, exported %d article. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgid_plural "" +"Finished, exported %d articles. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgstr[0] "" +"Klaar met exporteren van %d artikel. U kunt de data <a class='visibleLink' " +"href='%u'>hier</a> downloaden." +msgstr[1] "" +"Klaar met exporteren van %d artikelen. U kunt de data <a class='visibleLink' " +"href='%u'>hier</a> downloaden." #: plugins/import_export/import_export.js:93 msgid "Data Import" -msgstr "Data import" +msgstr "Data importeren" #: plugins/import_export/import_export.js:112 msgid "Please choose the file first." msgstr "Kies het bestand eerst aub." #: plugins/note/note.js:17 -#, fuzzy msgid "Saving article note..." -msgstr "Bewerk artikel notitie" +msgstr "Artikel notitie opslaan..." #: plugins/googlereaderimport/init.js:18 msgid "Google Reader Import" -msgstr "" +msgstr "Google Reader Importeerder" #: plugins/googlereaderimport/init.js:42 -#, fuzzy msgid "Please choose a file first." -msgstr "Kies het bestand eerst aub." +msgstr "Kies eerst een bestand aub." #: plugins/instances/instances.js:10 msgid "Link Instance" @@ -3616,12 +3503,10 @@ msgid "Remove selected instances?" msgstr "Geselecteerde instanties verwijderen?" #: plugins/instances/instances.js:125 -#, fuzzy msgid "Removing selected instances..." -msgstr "Geselecteerde instanties verwijderen?" +msgstr "Geselecteerde instanties verwijderen..." -#: plugins/instances/instances.js:139 -#: plugins/instances/instances.js:151 +#: plugins/instances/instances.js:139 plugins/instances/instances.js:151 msgid "No instances are selected." msgstr "Er zijn geen instanties geselecteerd." @@ -3634,9 +3519,45 @@ msgid "Share article by URL" msgstr "Deel artikel via URL" #: plugins/updater/updater.js:58 +msgid "" +"Backup your tt-rss directory before continuing. Please type 'yes' to " +"continue." +msgstr "" +"Maak een back-up van uw tt-rss map alvorens door te gaan. Typ 'yes' om door " +"te gaan. " + +#~ msgid "Switch to digest..." +#~ msgstr "Omschakelen naar samenvatting…" + +#~ msgid "Show tag cloud..." +#~ msgstr "Toon tagwolk..." + +#~ msgid "Click to play" +#~ msgstr "Klik om af te spelen" + +#~ msgid "Play" +#~ msgstr "Afspelen" + +#~ msgid "Visit the website" +#~ msgstr "Bezoek de website" + #, fuzzy -msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." -msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map alvorens door te gaan. Typ 'ja' om door te gaan. " +#~ msgid "Select theme" +#~ msgstr "Selecteer met ster" + +#~ msgid "I have scanned the code and would like to enable OTP" +#~ msgstr "Ik heb de code gescanned en wil nu EWW inschakelen" + +#~ msgid "Playing..." +#~ msgstr "aan 't afspelen..." + +#, fuzzy +#~ msgid "" +#~ "Could not upload file. You might need to adjust upload_max_filesize in " +#~ "PHP.ini (current value = %s)" +#~ msgstr "" +#~ "Kon bestand niet uploaden. U moet misschien de upload_max_filesize\n" +#~ "\t\t\t\tin PHP.ini aanpassen (huidige waarde = %s)" #~ msgid "Default interval between feed updates" #~ msgstr "Standaard interval voor feed updates" @@ -3656,8 +3577,12 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al #~ msgid "Please backup your database before proceeding." #~ msgstr "Maak aub een back-up van uw database voordat u verder gaat." -#~ msgid "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to <b>%d</b>)." -#~ msgstr "Uw Tiny Tiny RSS database moet worden geüpdate naar de laatste versie (<b>%d</b> naar <b>%d</b>)." +#~ msgid "" +#~ "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> " +#~ "to <b>%d</b>)." +#~ msgstr "" +#~ "Uw Tiny Tiny RSS database moet worden geüpdate naar de laatste versie (<b>" +#~ "%d</b> naar <b>%d</b>)." #~ msgid "Performing updates..." #~ msgstr "Uitvoeren van updates..." @@ -3676,7 +3601,8 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al #, fuzzy #~ msgid "Finished. Performed <b>%d</b> update up to schema version <b>%d</b>." -#~ msgid_plural "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." +#~ msgid_plural "" +#~ "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." #~ msgstr[0] "" #~ "Klaar. <b>%d</b> update(s) uitgevoerd volgens schema naar\n" #~ "\t\t\tversie <b>%d</b>." @@ -3690,8 +3616,12 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al #~ msgid "Found schema version: <b>%d</b>, required: <b>%d</b>." #~ msgstr "Versie schema gevonden: <b>%d</b>, vereist: <b>%d</b>." -#~ msgid "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer version and continue." -#~ msgstr "Schema update onmogelijk. Update Tiny Tiny RSS bestanden naar de nieuwere versie en gaan door." +#~ msgid "" +#~ "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer " +#~ "version and continue." +#~ msgstr "" +#~ "Schema update onmogelijk. Update Tiny Tiny RSS bestanden naar de nieuwere " +#~ "versie en gaan door." #, fuzzy #~ msgid "Mark feed as read" @@ -3700,8 +3630,12 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al #~ msgid "Enable external API" #~ msgstr "Inschakelen externe API" -#~ msgid "When this option is enabled, headlines in Special feeds and Labels are grouped by feeds" -#~ msgstr "Als deze optie is ingeschakeld worden kopteksten in de Speciale feedsrubriek en Labels gegroepeerd per feed" +#~ msgid "" +#~ "When this option is enabled, headlines in Special feeds and Labels are " +#~ "grouped by feeds" +#~ msgstr "" +#~ "Als deze optie is ingeschakeld worden kopteksten in de Speciale " +#~ "feedsrubriek en Labels gegroepeerd per feed" #~ msgid "Title or Content" #~ msgstr "Titel of inhoud" @@ -3727,8 +3661,15 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al #~ msgid "Modify score" #~ msgstr "verander de score" -#~ msgid "This option is useful when you are reading several planet-type aggregators with partially colliding userbase. When disabled, it forces same posts from different feeds to appear only once." -#~ msgstr "Deze optie is nuttig als u verscheidene planet-type nieuws aggregators leest met een ten dele overeenkomende gebruikersgroep. Indien uitgeschakeld forceert het berichten van verschillende feeds slechts eenmaal te verschijnen." +#~ msgid "" +#~ "This option is useful when you are reading several planet-type " +#~ "aggregators with partially colliding userbase. When disabled, it forces " +#~ "same posts from different feeds to appear only once." +#~ msgstr "" +#~ "Deze optie is nuttig als u verscheidene planet-type nieuws aggregators " +#~ "leest met een ten dele overeenkomende gebruikersgroep. Indien " +#~ "uitgeschakeld forceert het berichten van verschillende feeds slechts " +#~ "eenmaal te verschijnen." #~ msgid "Date syntax appears to be correct:" #~ msgstr "Data syntax lijkt correct:" @@ -3737,10 +3678,6 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al #~ msgstr "Data syntax is onjuist." #, fuzzy -#~ msgid "Refresh" -#~ msgstr "Nieuw" - -#, fuzzy #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "(%d feeds)" @@ -3755,9 +3692,6 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "Markeer alle zichtbare artikelen in %s als gelezen?" -#~ msgid "Date" -#~ msgstr "Datum" - #~ msgid "Score" #~ msgstr "Score" @@ -3800,14 +3734,19 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al #~ msgid "Back to feeds" #~ msgstr "Terug naar de feeds" -#~ msgid "This will clear your stored authentication information for Twitter. Continue?" -#~ msgstr "Dit zal uw opgeslagen authenticatie informatie voor Twitter verwijderen. Doorgaan?" +#~ msgid "" +#~ "This will clear your stored authentication information for Twitter. " +#~ "Continue?" +#~ msgstr "" +#~ "Dit zal uw opgeslagen authenticatie informatie voor Twitter verwijderen. " +#~ "Doorgaan?" #~ msgid "Updated" #~ msgstr "Bijgewerkt" #~ msgid "Finished: %d articles processed, %d imported, %d feeds created." -#~ msgstr "Klaar: %d artikelen afgehandeld, %d geïmporteerd, %d feeds aangemaakt." +#~ msgstr "" +#~ "Klaar: %d artikelen afgehandeld, %d geïmporteerd, %d feeds aangemaakt." #~ msgid "Related" #~ msgstr "Gerelateerd" diff --git a/locale/pl_PL/LC_MESSAGES/messages.mo b/locale/pl_PL/LC_MESSAGES/messages.mo Binary files differindex ec391e011..86b35841d 100644 --- a/locale/pl_PL/LC_MESSAGES/messages.mo +++ b/locale/pl_PL/LC_MESSAGES/messages.mo diff --git a/locale/pl_PL/LC_MESSAGES/messages.po b/locale/pl_PL/LC_MESSAGES/messages.po index bf761b311..ca8be88e0 100644 --- a/locale/pl_PL/LC_MESSAGES/messages.po +++ b/locale/pl_PL/LC_MESSAGES/messages.po @@ -9,98 +9,99 @@ msgid "" msgstr "" "Project-Id-Version: Tiny Tiny RSS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" -"PO-Revision-Date: 2013-03-25 13:25+0100\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" +"PO-Revision-Date: 2013-04-15 21:00+0100\n" "Last-Translator: MirosÅ‚aw Lach <m.wordpress@lach.waw.pl>\n" -"Language-Team: Polish (http://www.transifex.com/projects/p/tt-rss/language/pl/)\n" +"Language-Team: \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Użyj domyÅ›lnych" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Nigdy nie usuwaj" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "Jednotygodniowe" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "Dwutygodniowe" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "MiesiÄ™czne" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "DwumiesiÄ™czne" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "TrzymiesiÄ™czne" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "DomyÅ›lna czÄ™stotliwość" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "Wyłącz aktualizacje" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "Co 15 minut" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "Co 30 minut" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "Co godzinÄ™" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "Co 4 godziny" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "Co 12 godzin" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "Codziennie" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "Cotygodniowo" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "Użytkownik" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Zaawansowany użytkownik" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Administrator" @@ -152,349 +153,345 @@ msgstr "Twoja wersja serwera MySQL nie jest obecnie wspierana. Zapoznaj siÄ™ z z msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "Test escape'owania SQL nie powiódÅ‚ siÄ™. Sprawdź konfiguracjÄ™ swojej bazy danych i PHP." -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Trwa Å‚adowanie, proszÄ™ czekać..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "RozwiÅ„ listÄ™ kanałów" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "Pokaż artykuÅ‚y" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Adaptacyjny" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Wszystkie artykuÅ‚y" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "Oznaczone gwiazdkÄ…" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "Opublikowane" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "Nieprzeczytane" -#: index.php:177 -#, fuzzy +#: index.php:170 msgid "Unread First" -msgstr "Nieprzeczytane" +msgstr "Najpierw nieprzeczytane" -#: index.php:178 +#: index.php:171 msgid "With Note" -msgstr "" +msgstr "Z adnotacjÄ…" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Ignoruj punktacjÄ™" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "Sortuj artykuÅ‚y" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "DomyÅ›lne" -#: index.php:186 +#: index.php:179 msgid "Newest first" -msgstr "" +msgstr "Najpierw najnowsze" -#: index.php:187 +#: index.php:180 msgid "Oldest first" -msgstr "" +msgstr "Najpierw najstarsze" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "TytuÅ‚" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Oznacz jako przeczytane" -#: index.php:195 +#: index.php:188 msgid "Older than one day" -msgstr "" +msgstr "Starsze niż jeden dzieÅ„" -#: index.php:198 +#: index.php:191 msgid "Older than one week" -msgstr "" +msgstr "Starsze niż jeden tydzieÅ„" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" -msgstr "" +msgstr "Starsze niż dwa tygodnie" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "Problem w komunikacji z serwerem." -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "DostÄ™pna jest nowa wersja Tiny Tiny RSS!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "DziaÅ‚ania..." -#: index.php:233 +#: index.php:225 msgid "Preferences..." msgstr "Ustawienia..." -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "Szukaj..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "DziaÅ‚ania dla kanałów:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "Prenumeruj kanaÅ‚..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Edytuj ten kanaÅ‚..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Przelicz punktacjÄ™ kanaÅ‚u" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "Wypisz siÄ™" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Wszystkie kanaÅ‚y:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Pokaż/Ukryj przeczytane kanaÅ‚y" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Inne dziaÅ‚ania:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "Przełącz na przeglÄ…d..." - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "Pokaż chmurÄ™ tagów..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 msgid "Toggle widescreen mode" msgstr "Przełącz tryb szerokoekranowy" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "Wybierz używajÄ…c tagów..." -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Utwórz etykietÄ™..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Utwórz filtr..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "O skrótach klawiszowych" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Wyloguj" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Ustawienia" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "Skróty klawiszowe" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Wyjdź z ustawieÅ„" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "KanaÅ‚y" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "Filtry" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Etykiety" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Użytkownicy" -#: register.php:186 +#: prefs.php:132 +#, fuzzy +msgid "System" +msgstr "Wtyczki systemowe" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "Utwórz nowe konto" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "Rejestracja nowych użytkowników zostaÅ‚ zablokowana przez administratora." -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "Wróć do Tiny Tiny RSS" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "Twoje tymczasowe hasÅ‚o zostanie wysÅ‚ane na podany adres email. Konta, na które nikt nie zalogowaÅ‚ siÄ™, sÄ… usuwane automatycznie 24 godziny po wysÅ‚aniu hasÅ‚a tymczasowego." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Pożądana nazwa użytkownika:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "Sprawdź dostÄ™pność" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "Email:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Ile wynosi dwa plus dwa:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "Zarejestruj siÄ™" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "Wprowadzone informacje sÄ… niekompletne." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Niestety, ta nazwa użytkownika jest już zajÄ™ta." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "Rejestracja nie powiodÅ‚a siÄ™." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Konto zostaÅ‚o zaÅ‚ożone." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "Możliwość rejestracji jest obecnie wyłączona." -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "Skrypt aktualizacji danych Tiny Tiny RSS." #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Bez kategorii" @@ -510,316 +507,302 @@ msgstr[2] "%d zarchiwizowanych artykułów" msgid "No feeds found." msgstr "Nie znaleziono kanałów." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Specjalne" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Wszystkie kanaÅ‚y" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "ArtykuÅ‚y oznaczone gwiazdkÄ…" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Opublikowane artykuÅ‚y" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Åšwieże artykuÅ‚y" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "Wszystkie artykuÅ‚y" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "Zarchiwizowane artykuÅ‚y" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "Ostatnio czytane" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "Nawigacja" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "Przejdź do nastÄ™pnego kanaÅ‚u" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "Otwórz poprzedni kanaÅ‚" -#: include/functions.php:1914 +#: include/functions.php:1960 msgid "Open next article" msgstr "Otwórz nastÄ™pny artykuÅ‚" -#: include/functions.php:1915 +#: include/functions.php:1961 msgid "Open previous article" msgstr "Otwórz poprzedni artykuÅ‚" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "Otwórz nastÄ™pny artykuÅ‚ (nie przewijaj dÅ‚ugich artykułów)" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "Otwórz poprzeni artykół (nie przewijaj dÅ‚ugich artykułów)" -#: include/functions.php:1918 -#, fuzzy +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" -msgstr "Otwórz nastÄ™pny artykuÅ‚ (nie przewijaj dÅ‚ugich artykułów)" +msgstr "Otwórz nastÄ™pny artykół (nie rozszerzaj lub oznaczaj jako przeczytane)" -#: include/functions.php:1919 -#, fuzzy +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" -msgstr "Otwórz poprzeni artykół (nie przewijaj dÅ‚ugich artykułów)" +msgstr "Otwórz poprzeni artykół (nie rozszerzaj lub oznaczaj jako przeczytane)" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Otwórz okno wyszukiwania" -#: include/functions.php:1921 +#: include/functions.php:1967 msgid "Article" msgstr "ArtykuÅ‚" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Przełącz oznaczenie gwiazdkÄ…" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "Przełącz flagÄ™ publikacji" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Przełącz flagÄ™ \"przeczytano\"" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Edytuj tagi" -#: include/functions.php:1926 +#: include/functions.php:1972 msgid "Dismiss selected" msgstr "Odrzuć wybrane" -#: include/functions.php:1927 +#: include/functions.php:1973 msgid "Dismiss read" msgstr "Odrzuć przeczytane" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" msgstr "Otwórz w nowym oknie" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 msgid "Mark below as read" msgstr "Oznacz poniższe jako przeczytane" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 msgid "Mark above as read" msgstr "Oznacz powyższe jako przeczytane" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "PrzewiÅ„ w dół" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "PrzewiÅ„ do góry" -#: include/functions.php:1933 +#: include/functions.php:1979 msgid "Select article under cursor" msgstr "Wybierz artykuÅ‚ pod kursorem" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "PrzeÅ›lij artykuÅ‚ emailem" -#: include/functions.php:1935 +#: include/functions.php:1981 msgid "Close/collapse article" msgstr "Zamknij/zwiÅ„ artykuÅ‚" -#: include/functions.php:1936 -#, fuzzy +#: include/functions.php:1982 msgid "Toggle article expansion (combined mode)" -msgstr "Przełącz tryb scalony" +msgstr "Przełącz rozszerzanie artykułów (tryb scalony)" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 msgid "Toggle embed original" msgstr "Przełącza flagÄ™ \"wbuduj oryginalny artykuÅ‚\"" -#: include/functions.php:1939 +#: include/functions.php:1985 msgid "Article selection" msgstr "Wybór artykułów" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "Wybierz wszystkie artykuÅ‚y" -#: include/functions.php:1941 +#: include/functions.php:1987 msgid "Select unread" msgstr "Wybierz nieprzeczytane" -#: include/functions.php:1942 +#: include/functions.php:1988 msgid "Select starred" msgstr "Wybierz oznaczone gwiazdkÄ…" -#: include/functions.php:1943 +#: include/functions.php:1989 msgid "Select published" msgstr "Wybierz opublikowane" -#: include/functions.php:1944 +#: include/functions.php:1990 msgid "Invert selection" msgstr "Odwróć zaznaczenie" -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "Odznacz wszystko" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "KanaÅ‚" -#: include/functions.php:1947 +#: include/functions.php:1993 msgid "Refresh current feed" msgstr "OdÅ›wież bieżący kanaÅ‚" -#: include/functions.php:1948 +#: include/functions.php:1994 msgid "Un/hide read feeds" msgstr "Pokaż/Ukryj przeczytane kanaÅ‚y" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "Prenumeruj kanaÅ‚" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Edytuj kanaÅ‚" -#: include/functions.php:1952 +#: include/functions.php:1998 msgid "Reverse headlines" msgstr "Odwróć kolejność nagłówków" -#: include/functions.php:1953 +#: include/functions.php:1999 msgid "Debug feed update" msgstr "Testuj aktualizacjÄ™ kanałów" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Oznacz wszystkie kanaÅ‚y jako przeczytane" -#: include/functions.php:1955 +#: include/functions.php:2001 msgid "Un/collapse current category" msgstr "ZwiÅ„/rozwiÅ„ bieżącÄ… kategoriÄ™" -#: include/functions.php:1956 +#: include/functions.php:2002 msgid "Toggle combined mode" msgstr "Przełącz tryb scalony" -#: include/functions.php:1957 -#, fuzzy +#: include/functions.php:2003 msgid "Toggle auto expand in combined mode" -msgstr "Przełącz tryb scalony" +msgstr "Przełącz automatyczne rozszerzanie artykułów w trybie scalonym" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "Idź do" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "Åšwieży" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "Chmura tagów" -#: include/functions.php:1965 +#: include/functions.php:2011 msgid "Other" msgstr "Inne" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "Utwórz etykietÄ™" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "Utwórz filtr" -#: include/functions.php:1968 +#: include/functions.php:2014 msgid "Un/collapse sidebar" msgstr "Zwin/rozwiÅ„ pasek boczny" -#: include/functions.php:1969 +#: include/functions.php:2015 msgid "Show help dialog" msgstr "Otwórz okno pomocy" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "Wyniki wyszukiwania: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "WciÅ›nij aby odtworzyć" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "Odtwórz" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "brak tagów" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Edytuj tagi dla tego artykuÅ‚u" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 msgid "Originally from:" msgstr "OryginaÅ‚ pochodzi z:" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 msgid "Feed URL" msgstr "Adres kanaÅ‚u" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -831,78 +814,81 @@ msgstr "Adres kanaÅ‚u" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Zamknij to okno" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(edytuj notatkÄ™)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "nieznany typ" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "Załączniki" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Nazwa użytkownika:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "HasÅ‚o:" -#: include/login_form.php:197 +#: include/login_form.php:199 msgid "I forgot my password" msgstr "ZapomniaÅ‚em hasÅ‚a" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "JÄ™zyk:" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Profil:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 msgid "Default profile" msgstr "DomyÅ›lny profil" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "Wersja lekka" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" -msgstr "" +msgstr "PamiÄ™taj mnie" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Zaloguj" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "Nie powiodÅ‚a siÄ™ weryfikacja sesji (nieprawidÅ‚owy adres IP)" @@ -918,161 +904,160 @@ msgstr "Tagi dla tego artykuÅ‚u (oddzielone przecinkami):" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "Zapisz" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Anuluj" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "UdostÄ™pnij za pomocÄ… Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "TytuÅ‚:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "Adres:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "Treść:" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "Etykiety:" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "UdostÄ™pniany artykuÅ‚ bÄ™dzie wyÅ›wietlany w Publikowanych kanaÅ‚ach." -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "UdostÄ™pnij" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "Nie zalogowany" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "NieprawidÅ‚owa nazwa użytkownika lub hasÅ‚o" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Prenumerujesz już kanaÅ‚ <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Zaprenumerowano kanaÅ‚ <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Nie udaÅ‚o siÄ™ zaprenumerować <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "Nie znaleziono kanałów w <b>%s</b>." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 msgid "Multiple feed URLs found." msgstr "Znaleziono wiele adresów kanałów." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Nie udaÅ‚o siÄ™ zaprenumerować <b>%s</b>. Nie udaÅ‚o siÄ™ pobrać adresu kanaÅ‚u." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "Prenumeruj wybrany kanaÅ‚" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Edytuj opcje prenumeraty" -#: classes/handler/public.php:758 -#, fuzzy +#: classes/handler/public.php:739 msgid "Password recovery" -msgstr "HasÅ‚o" +msgstr "Odzyskiwanie hasÅ‚a" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." -msgstr "" +msgstr "BÄ™dziesz musiaÅ‚ podać prawidÅ‚owÄ… nazwÄ™ konta oraz adres email. Nowe hasÅ‚o zostanie przesÅ‚ane na Twój adres email." -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "Resetuj hasÅ‚o" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "Niektóre z wymaganych parametrów sÄ… nieprawidÅ‚owe lub nie zostaÅ‚y wprowadzone." -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 msgid "Go back" msgstr "Cofnij" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "Przykro mi, podana kombinacja nazwy użytkownika i adresu email nie zostaÅ‚a oznaleziona." -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Twój poziom dostÄ™pu jest niewystarczajÄ…cy do uruchomienia tego skryptu." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Aktualizator bazy danych" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Przeprowadź aktualizacje" @@ -1127,7 +1112,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "Możesz obejrzeć ten kanaÅ‚ jako RSS korzystajÄ…c z adresu:" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "DostÄ™pna jest nowa wersja Tiny Tiny RSS (%s)." @@ -1137,9 +1122,9 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "Możesz przeprowadzić aktualizacjÄ™ wykorzystujÄ…c wbudowany aktualizator dostÄ™pny w Ustawieniach lub korzystajÄ…c z update.php" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" -msgstr "" +msgstr "Zobacz informacje o wydaniu" #: classes/dlg.php:247 msgid "Download" @@ -1149,114 +1134,120 @@ msgstr "Pobierz" msgid "Error receiving version information or no new version available." msgstr "Błąd podczas odbierania informacji o wersji lub brak dostÄ™pnej nowej wersji." -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "Odwiedź stronÄ™ internetowÄ…" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "Ostatnia aktualizacja:" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Zobacz jako kanaÅ‚ RSS" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "WyÅ›wietl jako RSS" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Wybierz: " -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "Wszystko" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Odwróć" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Nic" -#: classes/feeds.php:101 +#: classes/feeds.php:93 msgid "More..." msgstr "WiÄ™cej..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Przełącz zaznaczenie:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Zaznaczenie:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "OceÅ„" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "Archiwizuj" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "Cofnij" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "UsuÅ„" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "Przekaż za pomocÄ… emaila" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "KanaÅ‚:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "KanaÅ‚ nie zostaÅ‚ odnaleziony." -#: classes/feeds.php:387 -#, fuzzy, php-format +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "Nigdy nie usuwaj" + +#: classes/feeds.php:360 +#, php-format msgid "Imported at %s" -msgstr "Importuj" +msgstr "Zaimportowane do %s" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "oznacz jako przeczytane" @@ -1277,9 +1268,8 @@ msgid "No starred articles found to display." msgstr "Nie znaleziono artykułów oznaczonych gwiazdkÄ…." #: classes/feeds.php:748 -#, fuzzy msgid "No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter." -msgstr "Nie znaleziono artykułów. Możesz rÄ™cznie przypisać artykuÅ‚y do etykiet (zobacz menu Akcje powyżej) lub wykorzystać do tego celu filtry." +msgstr "Nie znaleziono artykułów do wyÅ›wietlenia. Możesz rÄ™cznie przypisać artykuÅ‚y do etykiet z menu kontekstowego artykuÅ‚u (ma zastosowanie do wszystkich zaznaczonych artykułów) lub użyć filtru." #: classes/feeds.php:750 msgid "No articles found to display." @@ -1306,9 +1296,9 @@ msgid "Feed or site URL" msgstr "Adres kanaÅ‚u lub strony" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "Umieść w kategorii:" @@ -1318,24 +1308,24 @@ msgstr "DostÄ™pne kanaÅ‚y" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "Uwierzytelnianie" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Nazwa użytkownika" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "HasÅ‚o" @@ -1345,7 +1335,7 @@ msgstr "Ten kanaÅ‚ wymaga uwierzytelniania." #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "Prenumeruj" @@ -1357,8 +1347,8 @@ msgstr "WiÄ™cej kanałów" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "Szukaj" @@ -1379,8 +1369,8 @@ msgstr "limit:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "UsuÅ„" @@ -1463,17 +1453,37 @@ msgstr "DodajÄ™ filtr..." msgid "Processing category: %s" msgstr "Przetwarzam kategoriÄ™: %s" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "PrzesyÅ‚anie pliku zakoÅ„czone błędem numer %d" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +msgid "Unable to move uploaded file." +msgstr "Nie udaÅ‚o siÄ™ przenieść przesÅ‚anego pliku." + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Błąd: proszÄ™ wgrać plik OPML." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +msgid "Error: unable to find moved OPML file." +msgstr "Błąd: nie udaÅ‚o siÄ™ przenieść pliku OPML." + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Błąd przetwarzania dokumentu." #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "Twój poziom uprawnieÅ„ jest niewystarczajÄ…cy aby otworzyć tÄ™ zakÅ‚adkÄ™." @@ -1507,8 +1517,8 @@ msgid "Change password to" msgstr "ZmieÅ„ hasÅ‚o na" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Opcje" @@ -1550,13 +1560,13 @@ msgstr "[tt-rss] Informacja o zmianie hasÅ‚a" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 msgid "Select" msgstr "Wybierz" @@ -1570,7 +1580,7 @@ msgstr "Szczegóły" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Edytuj" @@ -1583,7 +1593,7 @@ msgid "Last login" msgstr "Ostatnie logowanie" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "Kliknij aby edytować" @@ -1597,7 +1607,7 @@ msgstr "Nie odnaleziono pasujÄ…cego użytkownika." #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Opis" @@ -1635,118 +1645,114 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "ZÅ‚ozone wyrażenia mogÄ… nie przynosić spodziewanych rezultatów podczas testów ze wzglÄ™du na różnice w implementacji wyrażeÅ„ regularnych na serwerze bazy danych." #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "Dopasuj" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "Dodaj" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 msgid "Apply actions" msgstr "Zastosuj dziaÅ‚ania" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "Włączone" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 msgid "Match any rule" msgstr "Pasuje do dowolnej reguÅ‚y" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 -#, fuzzy +#: classes/pref/filters.php:790 msgid "Inverse matching" msgstr "Odwróć dopasowanie" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "Testuj" #: classes/pref/filters.php:435 -#, fuzzy msgid "(inverse)" -msgstr "Odwróć" +msgstr "(odwróć)" #: classes/pref/filters.php:434 -#, fuzzy, php-format +#, php-format msgid "%s on %s in %s %s" -msgstr "%s na %s w %s" +msgstr "%s na %s w %s %s" #: classes/pref/filters.php:657 msgid "Combine" msgstr "Połącz" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "Zresetuj porzÄ…dek sortowania" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Przywróć artykuÅ‚y" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Utwórz" -#: classes/pref/filters.php:856 -#, fuzzy +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" -msgstr "NieprawidÅ‚owe wyrażenie regularne." +msgstr "Odwróć dopasowywanie wyrażeniami regularnymi" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "pole" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "w" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" msgstr "Zapisz regułę" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 msgid "Add rule" msgstr "Dodaj regułę" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Wykonaj operacjÄ™" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "z parametrami:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" msgstr "Zapisz dziaÅ‚anie" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 msgid "Add action" msgstr "Dodaj dziaÅ‚ania" -#: classes/pref/filters.php:967 -#, fuzzy +#: classes/pref/filters.php:966 msgid "[No caption]" -msgstr "Opis" +msgstr "[Brak opisu]" #: classes/pref/prefs.php:18 msgid "General" @@ -1762,10 +1768,9 @@ msgstr "Zaawansowane" #: classes/pref/prefs.php:21 msgid "Digest" -msgstr "" +msgstr "WyciÄ…g" #: classes/pref/prefs.php:25 -#, fuzzy msgid "Allow duplicate articles" msgstr "Zezwalaj na powielanie artykułów" @@ -1778,7 +1783,6 @@ msgid "Blacklisted tags" msgstr "Czarna lista tagów" #: classes/pref/prefs.php:27 -#, fuzzy msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)." msgstr "Podczas automatycznego wykrywania tagów wymienione obok tagi nie zostanÄ… zastosowane (kolejne tagi oddzielaj przecinkiem)." @@ -1787,9 +1791,8 @@ msgid "Automatically mark articles as read" msgstr "Automatycznie oznacz artykuÅ‚y jako przeczytane" #: classes/pref/prefs.php:28 -#, fuzzy msgid "This option enables marking articles as read automatically while you scroll article list." -msgstr "Opcja uruchamia automatyczne oznaczanie artykułów jako przeczytanych podczas przewijania listy artykułów." +msgstr "Opcja uruchamia automatyczne oznaczanie artykułów jako przeczytanych podczas przewijania listy artykułów," #: classes/pref/prefs.php:29 msgid "Automatically expand articles in combined mode" @@ -1812,20 +1815,18 @@ msgid "Amount of articles to display at once" msgstr "Ilość artykułów do wyÅ›wietlenia za jednym razem" #: classes/pref/prefs.php:33 -#, fuzzy msgid "Default feed update interval" -msgstr "DomyÅ›lna czÄ™stotliwość" +msgstr "DomyÅ›lna czÄ™stotliwość aktualizacji kanałów" #: classes/pref/prefs.php:33 msgid "Shortest interval at which a feed will be checked for updates regardless of update method" -msgstr "" +msgstr "Najkrótszy odstÄ™p czasu co który kanaÅ‚ bÄ™dzie sprawdzany w poszukiwaniu zmian, niezależnie od metody aktualizacji" #: classes/pref/prefs.php:34 msgid "Mark articles in e-mail digest as read" msgstr "Oznacz jako przeczytane artykuÅ‚y przesÅ‚ane emailem jako przeglÄ…d" #: classes/pref/prefs.php:35 -#, fuzzy msgid "Enable e-mail digest" msgstr "Włącz przeglÄ…d artykułów wysyÅ‚any emailem" @@ -1843,11 +1844,11 @@ msgstr "Używa strefy UTC" #: classes/pref/prefs.php:37 msgid "Enable API access" -msgstr "" +msgstr "Włącz dostÄ™p do API" #: classes/pref/prefs.php:37 msgid "Allows external clients to access this account through the API" -msgstr "" +msgstr "Zezwój zewnÄ™trznym klientom/aplikacjom korzystać z tego konta przez API" #: classes/pref/prefs.php:38 msgid "Enable feed categories" @@ -1862,14 +1863,12 @@ msgid "Maximum age of fresh articles (in hours)" msgstr "Przez ile czasu uznawać artykuÅ‚ za Å›wieży (w godzinach)" #: classes/pref/prefs.php:41 -#, fuzzy msgid "Hide feeds with no unread articles" msgstr "Ukryj kanaÅ‚y nie zawierajÄ…ce nieprzeczytanych artykułów" #: classes/pref/prefs.php:42 -#, fuzzy msgid "Show special feeds when hiding read feeds" -msgstr "Pokaż kanaÅ‚y specjalne gdy włączone ukrywanie przeczytanych kanałów." +msgstr "Pokaż kanaÅ‚y specjalne gdy włączone jest ukrywanie przeczytanych kanałów." #: classes/pref/prefs.php:43 msgid "Long date format" @@ -1892,7 +1891,7 @@ msgid "Purge unread articles" msgstr "Czyszczenie nieprzeczytanych artykułów" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Odwrotny porzÄ…dek nagłówków (najstarsze pierwsze)" @@ -1933,7 +1932,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "Podczas czytania artykuÅ‚u usuÅ„ wszystkie poza najpopularniejszymi znaczniki HTML." #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 msgid "Customize stylesheet" msgstr "Dostosuj arkusz styli" @@ -1942,7 +1941,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "Dostosuj arkusz styli CSS wedle swojego uznania" #: classes/pref/prefs.php:55 -msgid "User timezone" +#, fuzzy +msgid "Time zone" msgstr "Strefa czasowa użytkownika" #: classes/pref/prefs.php:56 @@ -1951,25 +1951,30 @@ msgstr "Grupuj nagłówki w wirtualnych kanaÅ‚ach" #: classes/pref/prefs.php:56 msgid "Special feeds, labels, and categories are grouped by originating feeds" -msgstr "" +msgstr "KanaÅ‚y specjalne, etykiety i kategorie sÄ… grupowane wedÅ‚ug źródÅ‚owego kanaÅ‚u" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Wybierz styl" +#, fuzzy +msgid "Language" +msgstr "JÄ™zyk:" -#: classes/pref/prefs.php:57 -msgid "Select one of the available CSS themes" +#: classes/pref/prefs.php:58 +msgid "Theme" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:58 +msgid "Select one of the available CSS themes" +msgstr "Wybierz jeden z dostÄ™pnych styli CSS" + +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "Stare hasÅ‚o nie może być puste." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "Nowe hasÅ‚o nie może być puste." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Wprowadzone hasÅ‚a sÄ… różne." @@ -1977,222 +1982,230 @@ msgstr "Wprowadzone hasÅ‚a sÄ… różne." msgid "Function not supported by authentication module." msgstr "Metoda nie wspierana przez mechanizm uwierzytelniajÄ…cy." -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "Konfiguracja zostaÅ‚a zapisana." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "Nieznana opcja: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "Dwoje dane osobiste zostaÅ‚y zapisane." -#: classes/pref/prefs.php:184 -#, fuzzy +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." -msgstr "Niektóre ustawienia dostÄ™pne sÄ… jedynie dla domyÅ›lnego profilu." +msgstr "Twoje ustawienie zostaÅ‚y zresetowane do wartoÅ›ci domyÅ›lnych." -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "Dane osobiste / Uwierzytelnianie" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Informacje osobiste" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "Nazwa" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "E-mail" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Poziom dostÄ™pu" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "Zapisz dane" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "Używasz domyÅ›lnego hasÅ‚a, zmieÅ„ je proszÄ™." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "Zmiana Twojego bieżącego hasÅ‚a spowoduje wyłączenie mechanizmu OTP." -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Stare hasÅ‚o" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Nowe hasÅ‚o" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Potwierdź hasÅ‚o" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "ZmieÅ„ hasÅ‚o" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "HasÅ‚o jednorazowe / Uwierzytelnianie" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "HasÅ‚a jednorazowe sÄ… obecnie włączone. Wprowadź swoje obecne hasÅ‚o aby je wyłączyć." -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 msgid "Enter your password" msgstr "Wprowadź hasÅ‚o" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" msgstr "Wyłącz hasÅ‚a jednorazowe" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "Potrzebujesz wÅ‚aÅ›ciwego moduÅ‚u uwierzytelniajÄ…cego aby użyć tej funkcji. Zmiana hasÅ‚a spowoduje automatyczne wyłączenie OTP." -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "Zeskanuj poniższy kod przy użyciu aplikacji uwierzytelniajÄ…cej:" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "ZeskanowaÅ‚em kod i chciaÅ‚bym włączyć OTP." +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "Wprowadź hasÅ‚o jednorazowe:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" msgstr "Włącz hasÅ‚a jednorazowe" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "Niektóre ustawienia dostÄ™pne sÄ… jedynie dla domyÅ›lnego profilu." -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "Dostosuj" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "Zarejestruj" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "Wyczyść" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "Czas serwera to: %s (UTC)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Zapisz konfiguracjÄ™" -#: classes/pref/prefs.php:694 -#, fuzzy +#: classes/pref/prefs.php:675 msgid "Save and exit preferences" -msgstr "Wyjdź z ustawieÅ„" +msgstr "Zapisz i wyjdź z ustawieÅ„" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "ZarzÄ…dzaj profilami" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "Przywróć domyÅ›lne" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "Wtyczki" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "Musisz przeÅ‚adować Tiny Tiny RSS aby zastosować zmiany we wtyczkach." -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." -msgstr "" +msgstr "Pobierz wiÄ™cej wtyczek z <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forum</a> lub <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a> tt-rss.org." -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "Wtyczki systemowe" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "Wtyczka" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 msgid "Description" msgstr "Opis" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "Wersja" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "Autor" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" -msgstr "" +msgstr "wiÄ™cej informacji" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 msgid "Clear data" msgstr "Wyczyść dane" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "Wtyczki użytkowników" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 msgid "Enable selected plugins" msgstr "Włącz wybrane wtyczki" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "NieprawidÅ‚owe hasÅ‚o" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "NieprawidÅ‚owe hasÅ‚o" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "Możesz nadpisać ustawienia kolorów, czcionek i ukÅ‚adu wybranego stylu przy użyciu wÅ‚asnych deklaracji CSS. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Ten plik</a> może posÅ‚użyć jako przykÅ‚ad." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Utwórz profil" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 msgid "(active)" msgstr "(aktywny)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "UsuÅ„ wybrane profile" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Aktywuj profil" @@ -2200,268 +2213,294 @@ msgstr "Aktywuj profil" msgid "Check to enable field" msgstr "Zaznacz aby uaktywnić pole" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "TytuÅ‚ kanaÅ‚u" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "Aktualizuj" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Czyszczenie artykułów:" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "<b>Wskazówka:</b> musisz wypeÅ‚nić dane logowania jeżeli Twój kanaÅ‚ wymaga uwierzytelniania. Nie dotyczy to kanałów z Twittera." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "Ukryj przed umieszczeniem w Popularnych kanaÅ‚ach" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "Umieść w przeglÄ…dzie emailowym" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Zawsze wyÅ›wietlaj załączniki graficzne" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "Nie osadzaj obrazków" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "Przechowuj obrazki lokalnie" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "Oznacz zaktualizowane artykuÅ‚y jako nieprzeczytane" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Ikona" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "ZamieÅ„" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "Odnów prenumeratÄ™ aktualizacji typu PUSH" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "Resetuje status prenumerat PubSubHubbub dla kanałów obsÅ‚ugujÄ…cych PUSH." -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "Zrobione." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "KanaÅ‚y z błędami" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "Nieaktywne kanaÅ‚y" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Edytuj wybrane kanaÅ‚y" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 msgid "Batch subscribe" msgstr "Prenumerata wsadowa" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "Kategorie" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "Dodaj kategoriÄ™" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "UsuÅ„ wybrane" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "Pokaż/Ukryj puste kategorie" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "WiÄ™cej dziaÅ‚aÅ„..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Czyszczenie rÄ™czne" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "Wyczyść dane kanaÅ‚u" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "KorzystajÄ…c z OPML możesz eksportować i importować kanaÅ‚y, filtry, etykiety i ustawienia Tiny Tiny RSS." -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "Tylko główne ustawienia profilu mogÄ… być migrowane korzystajÄ…c z OPML." -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "Importuj mój OPML" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "Nazwa pliku:" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "Załącz ustawienia" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "Eksportuj OPML" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "Twój OPML może zostać opublikowany i być prenumerowany przez każdego kto zna poniższy adres." -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "Opublikowany OPML nie zawiera ustawieÅ„ Twojego Tiny Tiny RSS, kanałów wymagajÄ…cych uwierzytelniania i kanałów ukrytych przed umieszczeniem w Popularnych kanaÅ‚ach." -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "Publiczny adres OPML" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "WyÅ›wietl opublikowany adres OPML" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Integracja z Firefoxem" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "Tiny Tiny RSS może być ustawiona jako domyÅ›lny czytnik kanałów w Firefoxie poprzez klikniÄ™cie odnoÅ›nika poniżej." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Kliknij tutaj aby ustawić tÄ™ stronÄ™ jako czytnik kanałów." -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" msgstr "Opublikowane i udostÄ™pnione artykuÅ‚y / Wygenerowane kanaÅ‚y" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "Opublikowane artykuÅ‚y i wygenerowane kanaÅ‚y" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "Opublikowane artykuÅ‚y sÄ… eksportowane jako publiczny kanaÅ‚ RSS i mogÄ… być prenumerowane przez każdego kto zna adres podany poniżej." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "WyÅ›wietl adres" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "Wyczyść wszystkie wygenerowane adresy" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "Wszystkie artykuÅ‚y udostÄ™pnione przez adresy" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "Możesz wyłączyć wszystkie unikalne adresy prowadzÄ…ce do udostÄ™pnionych artykułów." -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "ZakoÅ„cz udostÄ™pnianie wszystkich artykułów" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "Niniejsze kanaÅ‚y nie zostaÅ‚y uaktualnione przez 3 miesiÄ…ce (najstarsze pierwsze):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "Kliknij aby edytować kanaÅ‚" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "ZakoÅ„cz prenumeratÄ™ wybranych kanałów:" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Te kanaÅ‚y nie zostaÅ‚y uaktualnione ponieważ wystÄ…piÅ‚y błędy:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "Wpisz jeden prawidÅ‚owy adres kanaÅ‚u RSS w każdej linii (nie jest przeprowadzana automatyczna detekcja adresu kanaÅ‚u)" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "KanaÅ‚y do prenumeraty. Każdy w osobnej linii" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "KanaÅ‚y wymagajÄ… uwierzytelniania." -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +#, fuzzy +msgid "Refresh" +msgstr "Åšwieży" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +#, fuzzy +msgid "Filename" +msgstr "Nazwa pliku:" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Data" + +#: plugins/digest/digest_body.php:57 msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "Twoja przeglÄ…darka nie obsÅ‚uguje Javascript, który jest wymagany aby aplikacja dziaÅ‚aÅ‚a poprawnie. ProszÄ™ sprawdź ustawienia swojej przeglÄ…darki." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Cześć," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "Wersja standardowa" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "Zamknij artykuÅ‚" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "NiewÅ‚aÅ›ciwe w pracy (wciÅ›nij aby przełączyć)" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "Wtyczka \"NiewÅ‚aÅ›ciwe w pracy\"" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "Znaczniki uznawane za niewÅ‚aÅ›ciwe w pracy (oddzielone przecinkami)" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 msgid "Configuration saved." msgstr "Konfiguracja zostaÅ‚a zapisana." @@ -2477,17 +2516,17 @@ msgstr "HasÅ‚o zostaÅ‚o zmienione." msgid "Old password is incorrect." msgstr "NieprawidÅ‚owe stare hasÅ‚o." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "Stron główna" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "Nic nie znaleziono (kliknij aby odÅ›wieżyć kanaÅ‚)." @@ -2495,126 +2534,126 @@ msgstr "Nic nie znaleziono (kliknij aby odÅ›wieżyć kanaÅ‚)." msgid "Open regular version" msgstr "Otwórz standardowÄ… wersjÄ™" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "Włącz kategorie" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "WÅÄ„CZONE" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "WYÅÄ„CZONE" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "PrzeglÄ…daj kategorie jak katalogi" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "WyÅ›wietlaj obrazki w artykuÅ‚ach" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "Ukryj przeczytane artykuÅ‚y i kanaÅ‚y" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "Sortuj kanaÅ‚y wedÅ‚ug liczby nieprzeczytanych" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[Przekazane]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 msgid "Multiple articles" msgstr "Wiele artykułów" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "Kliknij odnoÅ›nik aby uruchomić Twój program pocztowy:" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 msgid "Forward selected article(s) by email." msgstr "PrzeÅ›lij artykuÅ‚ emailem." -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "PowinieneÅ› mieć jeszcze możliwość edycji wiamoÅ›ci przed wysÅ‚aniem w poziomu programu pocztowego." -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 msgid "Close this dialog" msgstr "Zamknij to okno" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "SkryptozakÅ‚adki" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "PrzeciÄ…gnij poniższy odnoÅ›nik na pasek zakÅ‚adek Twojej przeglÄ…darki, otwórz kanaÅ‚ który Cie interesuje w przeglÄ…darce i kliknij na utworzonym odnoÅ›niku aby zaprenumerować kanaÅ‚." -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "Prenumerować %s w Tiny Tiny RSS?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "Prenumeruj w Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "Użyj tej SkryptozakÅ‚adki aby publikować dowolne strony używajÄ…c Tiny Tiny RSS" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "Import i eksport" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "Archiwum artykułów" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "Możesz eksportować i importować artykuÅ‚y oznaczone gwiazdkÄ… oraz zarchiwizowane dla zachowania lub na czas migracji pomiÄ™dzy instalacjami tt-rss." -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "Eksportuj moje dane" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importuj" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "Nieudany import: nieprawidÅ‚owa wersja schematu." -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "Nieudany import: nierozpoznany typ dokumentu." -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "ZakoÅ„czono: " -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " @@ -2622,7 +2661,7 @@ msgstr[0] "%d artykuÅ‚ przetworzony." msgstr[1] "%d artykuÅ‚y przetworzone." msgstr[2] "%d artykułów przetworzonych." -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " @@ -2630,7 +2669,7 @@ msgstr[0] "%d zaimportowany." msgstr[1] "%d zaimportowane." msgstr[2] "%d zaimportowanych." -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, php-format msgid "%d feed created." msgid_plural "%d feeds created." @@ -2638,269 +2677,275 @@ msgstr[0] "%d kanaÅ‚ utworzony." msgstr[1] "%d kanaÅ‚y utworzone." msgstr[2] "%d kanałów utworzonych." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "Nie udaÅ‚o siÄ™ wczytać dokumentu XML." -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "Przygotuj dane" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "Nie udaÅ‚o siÄ™ wgrać pliku. Możliwe, że bÄ™dziesz musiaÅ‚ dostosować wartość parametru upload_max_filesize (maksymalny rozmiar przesyÅ‚anego pliku) w PHP.ini (obecna wartość = %s)" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." +msgstr "Nie przesÅ‚ano żadnego pliku." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "Od:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "Do:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Temat:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "WyÅ›lij email" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 msgid "Edit article note" msgstr "Edytuj notatkÄ™ do artykuÅ‚u" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "PrzykÅ‚adowe onko" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "PrzykÅ‚adowa wartość" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "Ustaw wartość" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "" - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." -msgstr "" +msgstr "ZakoÅ„czone. Zaimportowano %d z %d artykułów." -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." -msgstr "" +msgstr "Dokument ma nieprawidÅ‚owy format." -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" -msgstr "" +msgstr "Zaimportuj oznaczone gwiazdkÄ… lub udostÄ™pnione elementy z Google Reader" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." -msgstr "" +msgstr "Wklej swój plik starred.json lub shared.json do poniższego formularza." -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" -msgstr "" +msgstr "Importuj elementy Oznaczone gwiazdkÄ…" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "Połączone instancje" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "Instancja" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "Adres instancji:" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 msgid "Access key:" msgstr "Klucz dostÄ™pu:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "Klucz dostÄ™pu" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "Użyj jednego klucza dostÄ™pu dla obydwóch połączonych instancji." -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 msgid "Generate new key" msgstr "Wygeneruj nowy klucz" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "Połącz instalacjÄ™" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "Możesz podłączyć inne instalacje Tiny Tiny RSS do bieżącej aby współdzielić informacje o Popularnych kanaÅ‚ach. Połącz z tÄ… instancjÄ… Tiny Tiny RSS używajÄ…c tego adresu:" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "Ostatnio połączony" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "Status" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "Zapisane kanaÅ‚y" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Utwórz łącze" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "UdostÄ™pnij adres" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "Możesz udostÄ™pnić ten artykuÅ‚ korzystajÄ…c z tego unikalnego adresu:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "Aktualizuj Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Twoja instalacja Tiny Tiny RSS jest aktualna." -#: plugins/updater/init.php:351 -#, fuzzy +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." -msgstr "Nie zamykaj tego okna dopóki aktualizacja nia zakoÅ„czy siÄ™. Wykonaj kopiÄ™ zapasowÄ… katalogu tt-rss przed kontynuacjÄ…." +msgstr "Nie zamykaj tego okna dopóki aktualizacja nia zakoÅ„czy siÄ™." -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." -msgstr "" +msgstr "Sugerujemy wykonać wczeÅ›niej kopiÄ™ zapasowÄ… katalogu tt-rss." -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." -msgstr "" +msgstr "Baza danych nie zostanie zmodyfikowana." -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." -msgstr "" +msgstr "Twój obecny katalog tt-rss nie zostanie zmodyfikowany. Jego nazwa zostanie zmieniona i pozostawiona w katalogu poziom wyżej. BÄ™dziesz mógÅ‚ przemigrować dostosowane przez siebie pliki po zakoÅ„czeniu aktualizacji." -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." msgstr "Gotowy do aktualizacji." -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" msgstr "Rozpocznik aktualizacjÄ™" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Oznaczyć wszystkie artykuÅ‚y w %s jako przeczytane?" -#: js/feedlist.js:413 -#, fuzzy +#: js/feedlist.js:414 msgid "Mark all articles in %s older than 1 day as read?" -msgstr "Oznaczyć wszystkie artykuÅ‚y w %s jako przeczytane?" +msgstr "Oznaczyć wszystkie w kanale %s starsze jak 1 dzieÅ„ jako przeczytane?" -#: js/feedlist.js:416 -#, fuzzy +#: js/feedlist.js:417 msgid "Mark all articles in %s older than 1 week as read?" -msgstr "Oznaczyć wszystkie artykuÅ‚y w %s jako przeczytane?" +msgstr "Oznaczyć wszystkie w kanale %s starsze jak tydzieÅ„ jako przeczytane?" -#: js/feedlist.js:419 -#, fuzzy +#: js/feedlist.js:420 msgid "Mark all articles in %s older than 2 weeks as read?" -msgstr "Oznaczyć wszystkie artykuÅ‚y w %s jako przeczytane?" +msgstr "Oznaczyć wszystkie w kanale %s starsze jak 2 tygodnie jako przeczytane?" -#: js/functions.js:92 +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "" + +#: js/functions.js:107 msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "Czy jesteÅ› pewien, że chcesz zgÅ‚osić ten wyjÄ…tek do tt-rss.org? ZgÅ‚oszenie bÄ™dzie zawieraÅ‚o informacje o Twojej przeglÄ…darce. Twój adres IP zostanie zapisany w naszej bazie danych." -#: js/functions.js:214 -msgid "close" -msgstr "" +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "Kliknij aby zapauzować" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" -msgstr "" +msgstr "WyjaÅ›nienie błędu" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "PrzesyÅ‚anie ukoÅ„czone." -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "UsuÅ„ zapisanÄ… ikonÄ™ kanaÅ‚u." -#: js/functions.js:697 +#: js/functions.js:723 msgid "Removing feed icon..." msgstr "Usuwanie ikony kanaÅ‚u..." -#: js/functions.js:702 +#: js/functions.js:728 msgid "Feed icon removed." msgstr "Ikona kanaÅ‚u usuniÄ™ta." -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "Wybierz obrazek do wysÅ‚ania." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "Wgrać nowÄ… ikonÄ™ dla tego kanaÅ‚u?" -#: js/functions.js:727 +#: js/functions.js:753 msgid "Uploading, please wait..." msgstr "Trwa Å‚adowanie, proszÄ™ czekać..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "ProszÄ™ wprowadzić opis etykiety:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "Nie udaÅ‚o siÄ™ utworzyć etykiety: brak opisu." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "Prenumeruj kanaÅ‚" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "Zaprenumerowano kanaÅ‚ %s" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "Wprowadzony adres jest niepoprawny." -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "Wprowadzony adres nie zawiera żadnych kanałów." -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "Edytuj wybrane kanaÅ‚y" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "Nie udaÅ‚o siÄ™ pobrać wprowadzonego adresu: %s" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "Prenumerujesz już ten kanaÅ‚." @@ -2926,7 +2971,7 @@ msgid "Subscription reset." msgstr "Zresetowano prenumerate." #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "ZakoÅ„czyć prenumeratÄ™ %s?" @@ -2934,70 +2979,70 @@ msgstr "ZakoÅ„czyć prenumeratÄ™ %s?" msgid "Removing feed..." msgstr "Usuwanie kanaÅ‚u..." -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "Wprowadź tytuÅ‚ kategorii:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "WygenerowaÅ„ nowy adres do dzielenia siÄ™ tym kanaÅ‚em?" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "Próbuje zmienić adres..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "Nie możesz edytować kanaÅ‚u tego typu." -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "Edytuj kanaÅ‚" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 msgid "Saving data..." msgstr "Zapisywanie danych..." -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "WiÄ™cej kanałów" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Nie wybrano żadnego kanaÅ‚u." -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "Usunąć wybrane kanaÅ‚y z archiwum? KanaÅ‚y z zachowanymi artykuÅ‚ami nie zostanÄ… usuniÄ™te." -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "KanaÅ‚y z błędami aktualizacji" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "Usunąć wybrane kanaÅ‚y?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 msgid "Removing selected feeds..." msgstr "Usuwanie wybranych kanałów..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Pomoc" @@ -3050,7 +3095,7 @@ msgid "Removing selected labels..." msgstr "Usuwanie wybranych etykiet..." #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "Nie wybrano żadnych etykiet." @@ -3171,320 +3216,319 @@ msgstr "Najpierw wybierz plik OPML." msgid "Importing, please wait..." msgstr "Trwa import, proszÄ™ czekać..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "Przywrócić ustawienia domyÅ›lne?" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "Usunąć kategoriÄ™ %s? Wszystkie zagnieżdżone kanaÅ‚y zostanÄ… umieszczone w Bez kategorii." -#: js/prefs.js:1088 +#: js/prefs.js:1102 msgid "Removing category..." msgstr "Usuwanie kategorii..." -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Usunąć wybrane kategoriÄ™?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "Usuwanie wybranych kategorii..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Nie wybrano żadnej kategorii." -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "TytuÅ‚ kategorii:" -#: js/prefs.js:1137 +#: js/prefs.js:1151 msgid "Creating category..." msgstr "Tworzenie kategorii..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "KanaÅ‚y nieaktualizowane ostatnio" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "ZastÄ…pić obecny adres publikacji OPML nowym adresem?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "Czyszczenie kanaÅ‚u..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Przeliczyć punktacjÄ™ w wybranych kanaÅ‚ach?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 msgid "Rescoring selected feeds..." msgstr "Przeliczanie punktacji wybranych kanałów..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "Przeliczyć punktacjÄ™ wszystkich artykułów? Ta czynność może zająć dużo czasu." -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." msgstr "Przeliczanie punktacji kanałów..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "Przywrócić domyÅ›lne kolory wybranym etykietom?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Profile ustawieÅ„" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "Usunąć wybrane profile? Aktywne i domyÅ›lne profile nie zostanÄ… usuniÄ™te." -#: js/prefs.js:1414 +#: js/prefs.js:1428 msgid "Removing selected profiles..." msgstr "Usuwanie wybranych profili..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "Nie wybrano żadnych profili." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 msgid "Activate selected profile?" msgstr "Uaktywnić wybrany profil?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "Wybierz profil do uaktywnienia." -#: js/prefs.js:1458 +#: js/prefs.js:1472 msgid "Creating profile..." msgstr "Tworzenie profili...." -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "Operacja spowoduje unieważnienie wszystkich poprzednio wygenerowanych adresów kanałów. Kontynuować?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 msgid "Clearing URLs..." msgstr "CzyszczÄ™ URLe..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 msgid "Generated URLs cleared." msgstr "Wyczyszczono wygenerowane adresy URL." -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "Operacja spowoduje unieważnienie adresów wszystkich poprzednio udostÄ™pnionych artykułów. Kontynuować?" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "UdostÄ™pniane adresy zostaÅ‚y wyczyszczone." -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Edytor etykiet" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "Prenumerowanie kanałów..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "WyczyÅ›cić zapamiÄ™tane dane tej wtyczki?" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Oznaczyć wszystkie artykuÅ‚y jako przeczytane?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "Oznaczam wszystkie kanaÅ‚y jako przeczytane..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." msgstr "Włącz najpierw wtyczkÄ™ obsÅ‚ugi poczty (mail)." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 msgid "Please enable embed_original plugin first." msgstr "Włącz najpierw wtyczkÄ™ osadzania oryginalnej wiadomoÅ›ci (embed_original)." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "Wybierz element(y) przy użyciu tagów" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "Nie możesz zrezygnować z prenumeraty tej kategorii." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "Wybierz najpierw jakiÅ› kanaÅ‚." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "Nie możesz przeliczyć punktacji kanaÅ‚u tego rodzaju." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "Przeliczyć punktacjÄ™ artykułów w %s?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "Przeliczanie punktacji kanałów..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "DostÄ™pna jest nowa wersja!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" msgstr "Anuluj wyszukiwanie" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "UsuÅ„ oznaczenie gwiazdkÄ…" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Oznacz artykuÅ‚ gwiazdkÄ…" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Anuluj publikacje artykuÅ‚u" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Opublikuj" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "Nie wybrano żadnego artykuÅ‚u." +msgstr[1] "Nie wybrano żadnego artykuÅ‚u." +msgstr[2] "Nie wybrano żadnego artykuÅ‚u." + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Nie wybrano żadnych artykułów" -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "Usunąć %d zaznaczony artykuÅ‚ z %s?" msgstr[1] "Usunąć %d zaznaczone artykuÅ‚y z %s?" msgstr[2] "Usunąć %d zaznaczonych artykułów z %s?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "Usunąć %d zaznaczony artykuÅ‚?" msgstr[1] "Usunąć %d zaznaczone artykuÅ‚y?" msgstr[2] "Usunąć %d zaznaczonych artykułów?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "Zarchiwizować %d zaznaczony artykuÅ‚ z %s?" msgstr[1] "Zarchiwizować %d zaznaczone artykuÅ‚y z %s?" msgstr[2] "Zarchiwizować %d zaznaczonych artykułów z %s?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "Przywrócić %d zarchiwizowany artykuÅ‚?" msgstr[1] "Przywrócić %d zarchiwizowane artykuÅ‚y?" msgstr[2] "Przywrócić %d zarchiwizowanych artykułów?" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." -msgstr "" +msgstr "PamiÄ™taj, iż artykuÅ‚y nie oznaczone gwiazdkÄ… mogÄ… zostać usuniÄ™te podczas nastÄ™pnej aktualizacji." -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "Oznaczyć %d wybrany artykuÅ‚ z %s jako przeczytany?" msgstr[1] "Oznaczyć %d wybrane artykuÅ‚y z %s jako przeczytane?" msgstr[2] "Oznaczyć %d wybranych artykułów z %s jako przeczytane?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "Edytuj tagi artykuÅ‚u" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "ZapisujÄ™ tagi artykuÅ‚u..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Nie wybrano żadnego artykuÅ‚u." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Nie znaleziono artykułów do oznaczenia" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "Oznaczyć %d artykuÅ‚ jako przeczytany?" msgstr[1] "Oznaczyć %d artykuÅ‚y jako przeczytane?" msgstr[2] "Oznaczyć %d artykułów jako przeczytane?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "Otwórz oryginalny artykuÅ‚" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 msgid "Display article URL" msgstr "WyÅ›wietl adres artykuÅ‚u" -#: js/viewfeed.js:1907 -#, fuzzy +#: js/viewfeed.js:1920 msgid "Toggle marked" msgstr "Przełącz oznaczenie gwiazdkÄ…" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Przypisz etykietÄ™" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "UsuÅ„ etykietÄ™" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "Odtwarzam..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "Kliknij aby zapauzować" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "Wprowadź nowÄ… punktacjÄ™ dla wybranych artykułów:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "Wprowadź nowÄ… punktacjÄ™ dla tego artykuÅ‚u:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 msgid "Article URL:" msgstr "Adres artykuÅ‚u:" @@ -3552,10 +3596,9 @@ msgstr "ZapisujÄ™ notatkÄ™ do artykuÅ‚u..." #: plugins/googlereaderimport/init.js:18 msgid "Google Reader Import" -msgstr "" +msgstr "Import z Google Reader" #: plugins/googlereaderimport/init.js:42 -#, fuzzy msgid "Please choose a file first." msgstr "Najpierw wybierz plik." @@ -3589,9 +3632,38 @@ msgid "Share article by URL" msgstr "UdostÄ™pnij artykuÅ‚" #: plugins/updater/updater.js:58 -#, fuzzy msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." -msgstr "Aktualizacja \"na żywo\" jest uznawana za funkcjÄ™ eksperymentalnÄ…. Wykonaj kopiÄ™ swojego katalogu tt-rss przed kontynuowaniem. Wpisz 'yes' aby kontynuować." +msgstr "Wykonaj kopiÄ™ swojego katalogu tt-rss przed kontynuowaniem. Wpisz 'yes' aby kontynuować." + +#~ msgid "Switch to digest..." +#~ msgstr "Przełącz na przeglÄ…d..." + +#~ msgid "Show tag cloud..." +#~ msgstr "Pokaż chmurÄ™ tagów..." + +#~ msgid "Click to play" +#~ msgstr "WciÅ›nij aby odtworzyć" + +#~ msgid "Play" +#~ msgstr "Odtwórz" + +#~ msgid "Visit the website" +#~ msgstr "Odwiedź stronÄ™ internetowÄ…" + +#~ msgid "Select theme" +#~ msgstr "Wybierz styl" + +#~ msgid "I have scanned the code and would like to enable OTP" +#~ msgstr "ZeskanowaÅ‚em kod i chciaÅ‚bym włączyć OTP." + +#~ msgid "close" +#~ msgstr "zamknij" + +#~ msgid "Playing..." +#~ msgstr "Odtwarzam..." + +#~ msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#~ msgstr "Nie udaÅ‚o siÄ™ wgrać pliku. Możliwe, że bÄ™dziesz musiaÅ‚ dostosować wartość parametru upload_max_filesize (maksymalny rozmiar przesyÅ‚anego pliku) w PHP.ini (obecna wartość = %s)" #~ msgid "Default interval between feed updates" #~ msgstr "DomyÅ›lny czas pomiÄ™dzy aktualizacjami kanaÅ‚u" @@ -3686,10 +3758,6 @@ msgstr "Aktualizacja \"na żywo\" jest uznawana za funkcjÄ™ eksperymentalnÄ…. Wy #~ msgid "Date syntax is incorrect." #~ msgstr "Format daty jest niepoprawny." -#, fuzzy -#~ msgid "Refresh" -#~ msgstr "Åšwieży" - #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "(%d kanaÅ‚)" @@ -3708,9 +3776,6 @@ msgstr "Aktualizacja \"na żywo\" jest uznawana za funkcjÄ™ eksperymentalnÄ…. Wy #~ msgid "Form secret key incorrect. Please enable cookies and try again." #~ msgstr "NieprawidÅ‚owa wartość poufnego klucza. Włącz ciasteczka i spróbuj ponownie." -#~ msgid "Date" -#~ msgstr "Data" - #~ msgid "Score" #~ msgstr "Punktacja" diff --git a/locale/pt_BR/LC_MESSAGES/messages.mo b/locale/pt_BR/LC_MESSAGES/messages.mo Binary files differindex 5bf59fa44..3add14d83 100644 --- a/locale/pt_BR/LC_MESSAGES/messages.mo +++ b/locale/pt_BR/LC_MESSAGES/messages.mo diff --git a/locale/pt_BR/LC_MESSAGES/messages.po b/locale/pt_BR/LC_MESSAGES/messages.po index c2a0b9131..abd2745fe 100644 --- a/locale/pt_BR/LC_MESSAGES/messages.po +++ b/locale/pt_BR/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: tt-rss 1.2.14.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: 2007-10-24 00:47-0200\n" "Last-Translator: Marcelo Jorge VIeira (metal) <metal@alucinados.com>\n" "Language-Team: Portuguese/Brazil\n" @@ -17,89 +17,90 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "Usar o padrão" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Nunca remover" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "1 semana atrás" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "2 semanas atrás" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "1 mês atrás" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "2 meses atrás" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "3 meses atrás" -#: backend.php:78 +#: backend.php:82 #, fuzzy msgid "Default interval" msgstr "Padrão" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "Desabilitar updates" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "Cada 15 minutos" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "Cada 30 minutos" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "Toda hora" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "Cada 4 horas" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "Cada 12 horas" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "Diariamente" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "Semanalmente" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "Usuário" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "Administrador" @@ -154,367 +155,362 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "" -#: index.php:166 +#: index.php:159 #, fuzzy msgid "Collapse feedlist" msgstr "Todos os feeds" -#: index.php:169 +#: index.php:162 #, fuzzy msgid "Show articles" msgstr "Favoritos" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "Favoritos" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "Publicado" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "Não Lido" -#: index.php:177 +#: index.php:170 #, fuzzy msgid "Unread First" msgstr "Não Lido" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "" -#: index.php:182 +#: index.php:175 #, fuzzy msgid "Sort articles" msgstr "Favoritos" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "Padrão" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "TÃtulo" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Marcar como lido" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "Ações..." -#: index.php:233 +#: index.php:225 #, fuzzy msgid "Preferences..." msgstr "Preferências" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "" -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "Ações do Feed:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 #, fuzzy msgid "Subscribe to feed..." msgstr "Removendo o Feed..." -#: index.php:237 +#: index.php:229 #, fuzzy msgid "Edit this feed..." msgstr "Editar" -#: index.php:238 +#: index.php:230 #, fuzzy msgid "Rescore feed" msgstr "Removendo o Feed..." -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Todos os Feeds:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Outras ações:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "" - -#: index.php:247 -#, fuzzy -msgid "Show tag cloud..." -msgstr "núvem de tags" - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 #, fuzzy msgid "Toggle widescreen mode" msgstr "Remover as categorias selecionadas?" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "" -#: index.php:250 +#: index.php:238 #, fuzzy msgid "Create label..." msgstr "Criar um usuário" -#: index.php:251 +#: index.php:239 #, fuzzy msgid "Create filter..." msgstr "Criar um usuário" -#: index.php:252 +#: index.php:240 #, fuzzy msgid "Keyboard shortcuts help" msgstr " Criar filtro" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Sair" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "Preferências" -#: prefs.php:112 +#: prefs.php:107 #, fuzzy msgid "Keyboard shortcuts" msgstr " Criar filtro" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Sair das preferências" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 #, fuzzy msgid "Feeds" msgstr "Feed" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 #, fuzzy msgid "Filters" msgstr "Arquivo:" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "" -#: prefs.php:134 +#: prefs.php:129 #, fuzzy msgid "Users" msgstr "Usuário" -#: register.php:186 +#: prefs.php:132 +msgid "System" +msgstr "" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "" -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "" -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 #, fuzzy msgid "Email:" msgstr "E-mail:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "" -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "" -#: register.php:286 +#: register.php:284 #, fuzzy msgid "Registration failed." msgstr "A checagem da configuração falhou" -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "" -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "" -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "" #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Não Categorizado" @@ -530,355 +526,344 @@ msgstr[1] "Favoritos" msgid "No feeds found." msgstr "Sem Feeds para exibir." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "Especial" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Todos os feeds" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 #, fuzzy msgid "All articles" msgstr "Favoritos" -#: include/functions.php:1846 +#: include/functions.php:1892 #, fuzzy msgid "Archived articles" msgstr "Favoritos" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "" -#: include/functions.php:1911 +#: include/functions.php:1957 #, fuzzy msgid "Navigation" msgstr "Salvar configuração" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "" -#: include/functions.php:1914 +#: include/functions.php:1960 #, fuzzy msgid "Open next article" msgstr "Favoritos" -#: include/functions.php:1915 +#: include/functions.php:1961 #, fuzzy msgid "Open previous article" msgstr "Favoritos" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "" -#: include/functions.php:1918 +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" msgstr "" -#: include/functions.php:1919 +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" msgstr "" -#: include/functions.php:1920 +#: include/functions.php:1966 #, fuzzy msgid "Show search dialog" msgstr "Favoritos" -#: include/functions.php:1921 +#: include/functions.php:1967 #, fuzzy msgid "Article" msgstr "Feed não encontrado." -#: include/functions.php:1922 +#: include/functions.php:1968 #, fuzzy msgid "Toggle starred" msgstr "Marcar como favorito" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 #, fuzzy msgid "Toggle published" msgstr "Publicado" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "" -#: include/functions.php:1925 +#: include/functions.php:1971 #, fuzzy msgid "Edit tags" msgstr "Editar Tags" -#: include/functions.php:1926 +#: include/functions.php:1972 #, fuzzy msgid "Dismiss selected" msgstr "Remover os filtros selecionados?" -#: include/functions.php:1927 +#: include/functions.php:1973 #, fuzzy msgid "Dismiss read" msgstr "Favoritos" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" msgstr "" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 #, fuzzy msgid "Mark below as read" msgstr "Marcar como lido" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 #, fuzzy msgid "Mark above as read" msgstr "Marcar como lido" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "" -#: include/functions.php:1933 +#: include/functions.php:1979 #, fuzzy msgid "Select article under cursor" msgstr "Favoritos" -#: include/functions.php:1934 +#: include/functions.php:1980 #, fuzzy msgid "Email article" msgstr "Favoritos" -#: include/functions.php:1935 +#: include/functions.php:1981 #, fuzzy msgid "Close/collapse article" msgstr "Favoritos" -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" msgstr "Remover as categorias selecionadas?" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 #, fuzzy msgid "Toggle embed original" msgstr "Remover as categorias selecionadas?" -#: include/functions.php:1939 +#: include/functions.php:1985 #, fuzzy msgid "Article selection" msgstr "Favoritos" -#: include/functions.php:1940 +#: include/functions.php:1986 #, fuzzy msgid "Select all articles" msgstr "Favoritos" -#: include/functions.php:1941 +#: include/functions.php:1987 #, fuzzy msgid "Select unread" msgstr "Favoritos" -#: include/functions.php:1942 +#: include/functions.php:1988 #, fuzzy msgid "Select starred" msgstr "Marcar como favorito" -#: include/functions.php:1943 +#: include/functions.php:1989 #, fuzzy msgid "Select published" msgstr "Favoritos" -#: include/functions.php:1944 +#: include/functions.php:1990 #, fuzzy msgid "Invert selection" msgstr "Favoritos" -#: include/functions.php:1945 +#: include/functions.php:1991 #, fuzzy msgid "Deselect everything" msgstr "Favoritos" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Feed" -#: include/functions.php:1947 +#: include/functions.php:1993 #, fuzzy msgid "Refresh current feed" msgstr "Favoritos" -#: include/functions.php:1948 +#: include/functions.php:1994 #, fuzzy msgid "Un/hide read feeds" msgstr "Favoritos" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 #, fuzzy msgid "Edit feed" msgstr "Editar" -#: include/functions.php:1952 +#: include/functions.php:1998 #, fuzzy msgid "Reverse headlines" msgstr "Remover as categorias selecionadas?" -#: include/functions.php:1953 +#: include/functions.php:1999 #, fuzzy msgid "Debug feed update" msgstr "Desabilitar updates" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 #, fuzzy msgid "Mark all feeds as read" msgstr "Marcando todos os feeds como lidos..." -#: include/functions.php:1955 +#: include/functions.php:2001 #, fuzzy msgid "Un/collapse current category" msgstr "Salvando categoria..." -#: include/functions.php:1956 +#: include/functions.php:2002 #, fuzzy msgid "Toggle combined mode" msgstr "Remover as categorias selecionadas?" -#: include/functions.php:1957 +#: include/functions.php:2003 #, fuzzy msgid "Toggle auto expand in combined mode" msgstr "Remover as categorias selecionadas?" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "Núvem de tags" -#: include/functions.php:1965 +#: include/functions.php:2011 #, fuzzy msgid "Other" msgstr "Onde:" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "" -#: include/functions.php:1968 +#: include/functions.php:2014 #, fuzzy msgid "Un/collapse sidebar" msgstr "Todos os feeds" -#: include/functions.php:1969 +#: include/functions.php:2015 #, fuzzy msgid "Show help dialog" msgstr "Favoritos" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -#, fuzzy -msgid "Click to play" -msgstr "Favoritos" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "" - -#: include/functions.php:3104 +#: include/functions.php:3133 #, fuzzy msgid " - " msgstr " - por " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "sem tags" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 #, fuzzy msgid "Edit tags for this article" msgstr "Favoritos" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 #, fuzzy msgid "Originally from:" msgstr "Favoritos" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 #, fuzzy msgid "Feed URL" msgstr "Feed" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -890,84 +875,87 @@ msgstr "Feed" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Fechar esta janela" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "" -#: include/functions.php:3686 +#: include/functions.php:3693 #, fuzzy msgid "unknown type" msgstr "Erro desconhecido" -#: include/functions.php:3742 +#: include/functions.php:3749 #, fuzzy msgid "Attachments" msgstr "Conteúdo" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Login:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Senha:" -#: include/login_form.php:197 +#: include/login_form.php:199 #, fuzzy msgid "I forgot my password" msgstr "Senha nova" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "LÃngua:" - -#: include/login_form.php:209 +#: include/login_form.php:205 #, fuzzy msgid "Profile:" msgstr "Arquivo:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 #, fuzzy msgid "Default profile" msgstr "Padrão" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 #, fuzzy msgid "Log in" msgstr "Login" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "" @@ -984,168 +972,168 @@ msgstr "" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "Salvar" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Cancelar" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 #, fuzzy msgid "Share with Tiny Tiny RSS" msgstr "Removendo o Feed..." -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "TÃtulo" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 #, fuzzy msgid "URL:" msgstr "Feed URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 #, fuzzy msgid "Content:" msgstr "Conteúdo" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "" -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 #, fuzzy msgid "Not logged in" msgstr "Último Login" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, fuzzy, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Não pode criar o usuário <b>%s</b>" -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, fuzzy, php-format msgid "Subscribed to <b>%s</b>." msgstr "Removendo o Feed..." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Não pode criar o usuário <b>%s</b>" -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, fuzzy, php-format msgid "No feeds found in <b>%s</b>." msgstr "Sem Feeds para exibir." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 #, fuzzy msgid "Multiple feed URLs found." msgstr "Sem Feeds para exibir." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Não pode criar o usuário <b>%s</b>" -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 #, fuzzy msgid "Subscribe to selected feed" msgstr "Removendo o Feed..." -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 #, fuzzy msgid "Password recovery" msgstr "Senha:" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "" -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 #, fuzzy msgid "Reset password" msgstr "Senha nova" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "" -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 msgid "Go back" msgstr "" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Seu nÃvel de acesso é insuficiente para executar esse script." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "" @@ -1202,7 +1190,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "" @@ -1212,7 +1200,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1224,124 +1212,130 @@ msgstr "" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "Atualizar" -#: classes/feeds.php:83 +#: classes/feeds.php:75 #, fuzzy msgid "View as RSS feed" msgstr "Todos os feeds" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 #, fuzzy msgid "View as RSS" msgstr "Editar Tags" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Selecione:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "Todos" -#: classes/feeds.php:94 +#: classes/feeds.php:86 #, fuzzy msgid "Invert" msgstr "(Inverso)" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Nenhum" -#: classes/feeds.php:101 +#: classes/feeds.php:93 #, fuzzy msgid "More..." msgstr "Salvando o Feed..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 #, fuzzy msgid "Selection toggle:" msgstr "Seleção" -#: classes/feeds.php:109 +#: classes/feeds.php:101 #, fuzzy msgid "Selection:" msgstr "Seleção" -#: classes/feeds.php:112 +#: classes/feeds.php:104 #, fuzzy msgid "Set score" msgstr "Marcar como favorito" -#: classes/feeds.php:115 +#: classes/feeds.php:107 #, fuzzy msgid "Archive" msgstr "Feed não encontrado." -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 #, fuzzy msgid "Delete" msgstr "Padrão" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 #, fuzzy msgid "Forward by email" msgstr "Favoritos" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Feed:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "Feed não encontrado." -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "Nunca remover" + +#: classes/feeds.php:360 #, fuzzy, php-format msgid "Imported at %s" msgstr "Importar" -#: classes/feeds.php:534 +#: classes/feeds.php:535 #, fuzzy msgid "mark as read" msgstr "Marcar como lido" @@ -1397,9 +1391,9 @@ msgid "Feed or site URL" msgstr "Feed" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 #, fuzzy msgid "Place in category:" msgstr "Salvando categoria..." @@ -1411,24 +1405,24 @@ msgstr "Todos os feeds" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Login" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 #, fuzzy msgid "Password" msgstr "Senha:" @@ -1439,7 +1433,7 @@ msgstr "Este feed requer autenticação." #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "" @@ -1452,8 +1446,8 @@ msgstr "Removendo o Feed..." #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "" @@ -1477,8 +1471,8 @@ msgstr "Limite:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Remover" @@ -1564,17 +1558,39 @@ msgstr "Adicionando o Feed..." msgid "Processing category: %s" msgstr "Salvando categoria..." -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "Favoritos" + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "" -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "Favoritos" + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "" #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 #, fuzzy msgid "Your access level is insufficient to open this tab." msgstr "Seu nÃvel de acesso é insuficiente para executar esse script." @@ -1616,8 +1632,8 @@ msgid "Change password to" msgstr "Mudar senha" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 #, fuzzy msgid "Options" msgstr "Opções:" @@ -1665,13 +1681,13 @@ msgstr "" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 #, fuzzy msgid "Select" msgstr "Selecione:" @@ -1687,7 +1703,7 @@ msgstr "Diariamente" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Editar" @@ -1700,7 +1716,7 @@ msgid "Last login" msgstr "Último Login" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 #, fuzzy msgid "Click to edit" msgstr "Favoritos" @@ -1717,7 +1733,7 @@ msgstr "Sem Feeds para exibir." #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 #, fuzzy msgid "Caption" msgstr "Opções:" @@ -1760,43 +1776,43 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "" #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 #, fuzzy msgid "Apply actions" msgstr "Ações do Feed:" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "Ativado" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 #, fuzzy msgid "Match any rule" msgstr "Favoritos" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 #, fuzzy msgid "Inverse matching" msgstr "Favoritos" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "Teste" @@ -1815,69 +1831,69 @@ msgid "Combine" msgstr "" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 #, fuzzy msgid "Reset sort order" msgstr "Remover as categorias selecionadas?" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 #, fuzzy msgid "Rescore articles" msgstr "Favoritos" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Criar" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 #, fuzzy msgid "on field" msgstr "Feed" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 #, fuzzy msgid "in" msgstr "Link" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #, fuzzy msgid "Save rule" msgstr "Salvar" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 msgid "Add rule" msgstr "" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 #, fuzzy msgid "Perform Action" msgstr "Ação" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #, fuzzy msgid "Save action" msgstr "Ações do Feed:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 #, fuzzy msgid "Add action" msgstr "Ações do Feed:" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 #, fuzzy msgid "[No caption]" msgstr "Opções:" @@ -2026,7 +2042,7 @@ msgid "Purge unread articles" msgstr "" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "" @@ -2068,7 +2084,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "" #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 msgid "Customize stylesheet" msgstr "" @@ -2077,7 +2093,7 @@ msgid "Customize CSS stylesheet to your liking" msgstr "" #: classes/pref/prefs.php:55 -msgid "User timezone" +msgid "Time zone" msgstr "" #: classes/pref/prefs.php:56 @@ -2089,22 +2105,28 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Selecionar o tema" +#, fuzzy +msgid "Language" +msgstr "LÃngua:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +#, fuzzy +msgid "Theme" +msgstr "Temas" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "A senha antiga não pode ser vazia." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "A nova senha não pode ser vazia." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "As senhas informadas não conferem." @@ -2112,240 +2134,250 @@ msgstr "As senhas informadas não conferem." msgid "Function not supported by authentication module." msgstr "" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 #, fuzzy msgid "The configuration was saved." msgstr "Salvar configuração" -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "" -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 #, fuzzy msgid "Personal data" msgstr "Salvar" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "E-mail" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 #, fuzzy msgid "Access level" msgstr "NÃvel de acesso:" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 #, fuzzy msgid "Save data" msgstr "Salvar" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 #, fuzzy msgid "Your password is at default value, please change it." msgstr "" "Sua senha é a padrão, \n" "\t\t\t\t\t\tvocê deve mudá-la." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Senha antiga" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Senha nova" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Confirmar senha" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Mudar senha" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 #, fuzzy msgid "Enter your password" msgstr "Mudar senha" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 #, fuzzy msgid "Disable OTP" msgstr "(Desativado)" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "" -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "Salvando categoria..." -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 #, fuzzy msgid "Enable OTP" msgstr "Ativado" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 #, fuzzy msgid "Register" msgstr "Remover as categorias selecionadas?" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Salvar configuração" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 #, fuzzy msgid "Save and exit preferences" msgstr "Sair das preferências" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 #, fuzzy msgid "Manage profiles" msgstr "Criar um usuário" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 #, fuzzy msgid "Reset to defaults" msgstr "Usar o padrão" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 #, fuzzy msgid "Description" msgstr "descrição" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 #, fuzzy msgid "Clear data" msgstr "Salvando o Feed..." -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 #, fuzzy msgid "Enable selected plugins" msgstr "Editar categorias" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "Senha nova" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 #, fuzzy msgid "Incorrect password" msgstr "Senha nova" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "" -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 #, fuzzy msgid "Create profile" msgstr "Criar um usuário" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 msgid "(active)" msgstr "" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 #, fuzzy msgid "Remove selected profiles" msgstr "Remover os filtros selecionados?" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 #, fuzzy msgid "Activate profile" msgstr "Remover os filtros selecionados?" @@ -2355,295 +2387,320 @@ msgstr "Remover os filtros selecionados?" msgid "Check to enable field" msgstr "Favoritos" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 #, fuzzy msgid "Feed Title" msgstr "TÃtulo" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "Atualizar" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 #, fuzzy msgid "Article purging:" msgstr "Feed não encontrado." -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "" -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 #, fuzzy msgid "Hide from Popular feeds" msgstr "Todos os feeds" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 #, fuzzy msgid "Include in e-mail digest" msgstr "Marcando todos os feeds como lidos..." -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 #, fuzzy msgid "Mark updated articles as unread" msgstr "Marcando todos os feeds como lidos..." -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 #, fuzzy msgid "Icon" msgstr "Ação" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 #, fuzzy msgid "Resubscribe to push updates" msgstr "Removendo o Feed..." -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "" -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "" -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 #, fuzzy msgid "Feeds with errors" msgstr "Editor de Feed" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 #, fuzzy msgid "Inactive feeds" msgstr "Editar" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 #, fuzzy msgid "Edit selected feeds" msgstr "Removendo filtros selecionados…" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 msgid "Batch subscribe" msgstr "" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 #, fuzzy msgid "Categories" msgstr "Categoria:" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 #, fuzzy msgid "Add category" msgstr "Adicionando o Feed..." -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 #, fuzzy msgid "Remove selected" msgstr "Remover os filtros selecionados?" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 #, fuzzy msgid "(Un)hide empty categories" msgstr "Editar categorias" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 #, fuzzy msgid "More actions..." msgstr "Ações..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 #, fuzzy msgid "Clear feed data" msgstr "Salvando o Feed..." -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "" -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "" -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 #, fuzzy msgid "Import my OPML" msgstr "Importando OPML (usando a extensão DOMXML)..." -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 #, fuzzy msgid "Export OPML" msgstr "Exportar OPML" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "" -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "" -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 #, fuzzy msgid "Firefox integration" msgstr "Informações do Feed:" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "" -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "" -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 #, fuzzy msgid "Published & shared articles / Generated feeds" msgstr "Remover os filtros selecionados?" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 #, fuzzy msgid "Published articles and generated feeds" msgstr "Remover os filtros selecionados?" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "" -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 #, fuzzy msgid "Articles shared by URL" msgstr "Favoritos" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "" -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 #, fuzzy msgid "Unshare all articles" msgstr "Favoritos" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 #, fuzzy msgid "Click to edit feed" msgstr "Favoritos" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 #, fuzzy msgid "Unsubscribe from selected feeds" msgstr "Removendo o Feed..." -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 #, fuzzy msgid "Feeds require authentication." msgstr "Este feed requer autenticação." -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +msgid "Filename" +msgstr "" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +#, fuzzy +msgid "Date" +msgstr "Atualizar" + +#: plugins/digest/digest_body.php:57 msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Olá," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 #, fuzzy msgid "Close article" msgstr "Favoritos" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 #, fuzzy msgid "Configuration saved." msgstr "Salvar configuração" @@ -2662,17 +2719,17 @@ msgstr "E-mail alterado." msgid "Old password is incorrect." msgstr "Senha antiga incorreta" -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "" @@ -2680,441 +2737,451 @@ msgstr "" msgid "Open regular version" msgstr "" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 #, fuzzy msgid "Enable categories" msgstr "Editar categorias" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 #, fuzzy msgid "Hide read articles and feeds" msgstr "Favoritos" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 #, fuzzy msgid "Multiple articles" msgstr "Favoritos" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 #, fuzzy msgid "Forward selected article(s) by email." msgstr "Favoritos" -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 #, fuzzy msgid "Close this dialog" msgstr "Fechar esta janela" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, fuzzy, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "Removendo o Feed..." -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 #, fuzzy msgid "Subscribe in Tiny Tiny RSS" msgstr "Removendo o Feed..." -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 #, fuzzy msgid "Article archive" msgstr "Feed não encontrado." -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "" -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 #, fuzzy msgid "Export my data" msgstr "Exportar OPML" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Importar" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "" -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "" -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, fuzzy, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "Editar Tags" msgstr[1] "Editar Tags" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "" msgstr[1] "" -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, fuzzy, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "Nenhum feed foi selecionado." msgstr[1] "Nenhum feed foi selecionado." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "" -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 #, fuzzy msgid "Prepare data" msgstr "Salvar" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +#, fuzzy +msgid "No file uploaded." +msgstr "Nenhum arquivo OPML para upload." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 #, fuzzy msgid "Subject:" msgstr "Selecione:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 #, fuzzy msgid "Send e-mail" msgstr "Mudar E-mail" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 #, fuzzy msgid "Edit article note" msgstr "Editar Tags" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 #, fuzzy msgid "Set value" msgstr "Marcar como favorito" -#: plugins/googlereaderimport/init.php:72 -#, fuzzy -msgid "No file uploaded." -msgstr "Nenhum arquivo OPML para upload." - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 #, fuzzy msgid "Linked" msgstr "Link" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 #, fuzzy msgid "Access key:" msgstr "NÃvel de acesso:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 #, fuzzy msgid "Access key" msgstr "NÃvel de acesso:" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "" -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 #, fuzzy msgid "Generate new key" msgstr "Gerar um outro endereço" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 #, fuzzy msgid "Link instance" msgstr "Editar Tags" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 #, fuzzy msgid "Stored feeds" msgstr "Removendo o Feed..." -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 #, fuzzy msgid "Create link" msgstr "Criar" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 #, fuzzy msgid "Share by URL" msgstr "Favoritos" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 #, fuzzy msgid "Your Tiny Tiny RSS installation is up to date." msgstr "A checagem da configuração falhou" -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." msgstr "" -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 #, fuzzy msgid "Ready to update." msgstr "Atualizado" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 #, fuzzy msgid "Start update" msgstr "Atualizado" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 #, fuzzy msgid "Mark all articles in %s as read?" msgstr "Marcando todos os feeds como lidos..." -#: js/feedlist.js:413 +#: js/feedlist.js:414 #, fuzzy msgid "Mark all articles in %s older than 1 day as read?" msgstr "Marcando todos os feeds como lidos..." -#: js/feedlist.js:416 +#: js/feedlist.js:417 #, fuzzy msgid "Mark all articles in %s older than 1 week as read?" msgstr "Marcando todos os feeds como lidos..." -#: js/feedlist.js:419 +#: js/feedlist.js:420 #, fuzzy msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "Marcando todos os feeds como lidos..." -#: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." msgstr "" -#: js/functions.js:214 -msgid "close" +#: js/functions.js:107 +msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "" -#: js/functions.js:586 +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "Favoritos" + +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "" -#: js/functions.js:692 +#: js/functions.js:718 #, fuzzy msgid "Remove stored feed icon?" msgstr "Remover as categorias selecionadas?" -#: js/functions.js:697 +#: js/functions.js:723 #, fuzzy msgid "Removing feed icon..." msgstr "Removendo o Feed..." -#: js/functions.js:702 +#: js/functions.js:728 #, fuzzy msgid "Feed icon removed." msgstr "Feed não encontrado." -#: js/functions.js:724 +#: js/functions.js:750 #, fuzzy msgid "Please select an image file to upload." msgstr "Por favor selecione um feed." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "" -#: js/functions.js:727 +#: js/functions.js:753 msgid "Uploading, please wait..." msgstr "" -#: js/functions.js:743 +#: js/functions.js:769 #, fuzzy msgid "Please enter label caption:" msgstr "Último Login" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "" -#: js/functions.js:791 +#: js/functions.js:817 #, fuzzy msgid "Subscribe to Feed" msgstr "Removendo o Feed..." -#: js/functions.js:818 +#: js/functions.js:844 #, fuzzy msgid "Subscribed to %s" msgstr "Removendo o Feed..." -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "" -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "" -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "Removendo filtros selecionados…" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "" @@ -3144,7 +3211,7 @@ msgid "Subscription reset." msgstr "Removendo o Feed..." #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 #, fuzzy msgid "Unsubscribe from %s?" msgstr "Removendo o Feed..." @@ -3153,78 +3220,78 @@ msgstr "Removendo o Feed..." msgid "Removing feed..." msgstr "Removendo o Feed..." -#: js/functions.js:1323 +#: js/functions.js:1324 #, fuzzy msgid "Please enter category title:" msgstr "Salvando categoria..." -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 #, fuzzy msgid "Trying to change address..." msgstr "Tentando alterar senha ..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "" -#: js/functions.js:1560 +#: js/functions.js:1561 #, fuzzy msgid "Edit Feed" msgstr "Editar" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 #, fuzzy msgid "Saving data..." msgstr "Salvando o Feed..." -#: js/functions.js:1598 +#: js/functions.js:1599 #, fuzzy msgid "More Feeds" msgstr "Removendo o Feed..." -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Nenhum feed foi selecionado." -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "" -#: js/functions.js:1740 +#: js/functions.js:1741 #, fuzzy msgid "Feeds with update errors" msgstr "Atualizar" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 #, fuzzy msgid "Remove selected feeds?" msgstr "Remover os filtros selecionados?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 #, fuzzy msgid "Removing selected feeds..." msgstr "Removendo filtros selecionados…" -#: js/functions.js:1852 +#: js/functions.js:1853 #, fuzzy msgid "Help" msgstr "Olá," @@ -3288,7 +3355,7 @@ msgid "Removing selected labels..." msgstr "Removendo filtros selecionados…" #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 #, fuzzy msgid "No labels are selected." msgstr "Nenhum filtro foi selecionado." @@ -3424,360 +3491,357 @@ msgstr "Por favor selecione somente um filtro." msgid "Importing, please wait..." msgstr "Importando OPML (usando a extensão DOMXML)..." -#: js/prefs.js:968 +#: js/prefs.js:982 #, fuzzy msgid "Reset to defaults?" msgstr "Usar o padrão" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "" -#: js/prefs.js:1088 +#: js/prefs.js:1102 #, fuzzy msgid "Removing category..." msgstr "Criar categoria" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Remover as categorias selecionadas?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "Removendo categorias selecionadas…" -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Nenhuma categoria foi selecionada." -#: js/prefs.js:1133 +#: js/prefs.js:1147 #, fuzzy msgid "Category title:" msgstr "Editor de Categoria" -#: js/prefs.js:1137 +#: js/prefs.js:1151 #, fuzzy msgid "Creating category..." msgstr "Criar um usuário" -#: js/prefs.js:1164 +#: js/prefs.js:1178 #, fuzzy msgid "Feeds without recent updates" msgstr "Atualizar" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "" -#: js/prefs.js:1302 +#: js/prefs.js:1316 #, fuzzy msgid "Clearing feed..." msgstr "Salvando o Feed..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 #, fuzzy msgid "Rescore articles in selected feeds?" msgstr "Remover os filtros selecionados?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 #, fuzzy msgid "Rescoring selected feeds..." msgstr "Removendo filtros selecionados…" -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "" -#: js/prefs.js:1348 +#: js/prefs.js:1362 #, fuzzy msgid "Rescoring feeds..." msgstr "Removendo o Feed..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "" -#: js/prefs.js:1414 +#: js/prefs.js:1428 #, fuzzy msgid "Removing selected profiles..." msgstr "Removendo filtros selecionados…" -#: js/prefs.js:1429 +#: js/prefs.js:1443 #, fuzzy msgid "No profiles are selected." msgstr "Nenhum filtro foi selecionado." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 #, fuzzy msgid "Activate selected profile?" msgstr "Remover os filtros selecionados?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 #, fuzzy msgid "Please choose a profile to activate." msgstr "Por favor selecione somente um filtro." -#: js/prefs.js:1458 +#: js/prefs.js:1472 #, fuzzy msgid "Creating profile..." msgstr "Criar um usuário" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 #, fuzzy msgid "Clearing URLs..." msgstr "Salvando o Feed..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 #, fuzzy msgid "Generated URLs cleared." msgstr "Gerar um outro endereço" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 #, fuzzy msgid "Label Editor" msgstr "Editor de Feed" -#: js/prefs.js:1771 +#: js/prefs.js:1785 #, fuzzy msgid "Subscribing to feeds..." msgstr "Removendo o Feed..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 #, fuzzy msgid "Mark all articles as read?" msgstr "Marcando todos os feeds como lidos..." -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "Marcando todos os feeds como lidos..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 #, fuzzy msgid "Please enable mail plugin first." msgstr "Por favor selecione somente um feed" -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 #, fuzzy msgid "Please enable embed_original plugin first." msgstr "Por favor selecione somente um feed" -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "" -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 #, fuzzy msgid "Please select some feed first." msgstr "Por favor selecione somente um feed" -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "" -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 #, fuzzy msgid "Rescore articles in %s?" msgstr "Favoritos" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 #, fuzzy msgid "Rescoring articles..." msgstr "Favoritos" -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 #, fuzzy msgid "Cancel search" msgstr "Cancelar" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 #, fuzzy msgid "Unstar article" msgstr "Favoritos" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 #, fuzzy msgid "Star article" msgstr "Favoritos" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 #, fuzzy msgid "Unpublish article" msgstr "Publicado" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "Nenhum filtro foi selecionado." +msgstr[1] "Nenhum filtro foi selecionado." + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 #, fuzzy msgid "No articles are selected." msgstr "Nenhum filtro foi selecionado." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 #, fuzzy msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "Favoritos" msgstr[1] "Favoritos" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 #, fuzzy msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "Remover os filtros selecionados?" msgstr[1] "Remover os filtros selecionados?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 #, fuzzy msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "Favoritos" msgstr[1] "Favoritos" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 #, fuzzy msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "Favoritos" msgstr[1] "Favoritos" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 #, fuzzy msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "Marcando todos os feeds como lidos..." msgstr[1] "Marcando todos os feeds como lidos..." -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 #, fuzzy msgid "Edit article Tags" msgstr "Editar Tags" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 #, fuzzy msgid "Saving article tags..." msgstr "Salvando categoria..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 #, fuzzy msgid "No article is selected." msgstr "Nenhum filtro foi selecionado." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 #, fuzzy msgid "No articles found to mark" msgstr "Sem Feeds para exibir." -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 #, fuzzy msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "Marcando todos os feeds como lidos..." msgstr[1] "Marcando todos os feeds como lidos..." -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 #, fuzzy msgid "Open original article" msgstr "Favoritos" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 #, fuzzy msgid "Display article URL" msgstr "Favoritos" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 #, fuzzy msgid "Toggle marked" msgstr "Marcar como favorito" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 #, fuzzy msgid "Remove label" msgstr "Remover" -#: js/viewfeed.js:2017 -#, fuzzy -msgid "Playing..." -msgstr "Salvando o Feed..." - -#: js/viewfeed.js:2018 -#, fuzzy -msgid "Click to pause" -msgstr "Favoritos" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 #, fuzzy msgid "Please enter new score for selected articles:" msgstr "Remover os filtros selecionados?" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 #, fuzzy msgid "Please enter new score for this article:" msgstr "Salvando categoria..." -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 #, fuzzy msgid "Article URL:" msgstr "Feed não encontrado." @@ -3902,6 +3966,21 @@ msgid "Backup your tt-rss directory before continuing. Please type 'yes' to cont msgstr "" #, fuzzy +#~ msgid "Show tag cloud..." +#~ msgstr "núvem de tags" + +#, fuzzy +#~ msgid "Click to play" +#~ msgstr "Favoritos" + +#~ msgid "Select theme" +#~ msgstr "Selecionar o tema" + +#, fuzzy +#~ msgid "Playing..." +#~ msgstr "Salvando o Feed..." + +#, fuzzy #~ msgid "Default interval between feed updates" #~ msgstr "Padrão" @@ -3974,10 +4053,6 @@ msgstr "" #~ msgstr "Marcando todos os feeds como lidos..." #, fuzzy -#~ msgid "Date" -#~ msgstr "Atualizar" - -#, fuzzy #~ msgid "Share on identi.ca" #~ msgstr "TÃtulo" @@ -4319,9 +4394,6 @@ msgstr "" #~ msgid "Done." #~ msgstr "Feito." -#~ msgid "Themes" -#~ msgstr "Temas" - #~ msgid "Change theme" #~ msgstr "Mudar Tema" diff --git a/locale/ru_RU/LC_MESSAGES/messages.mo b/locale/ru_RU/LC_MESSAGES/messages.mo Binary files differindex de9d096eb..58731f8f3 100644 --- a/locale/ru_RU/LC_MESSAGES/messages.mo +++ b/locale/ru_RU/LC_MESSAGES/messages.mo diff --git a/locale/ru_RU/LC_MESSAGES/messages.po b/locale/ru_RU/LC_MESSAGES/messages.po index 966e8d059..0d5c144f7 100644 --- a/locale/ru_RU/LC_MESSAGES/messages.po +++ b/locale/ru_RU/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: 2009-05-29 14:38+0300\n" "Last-Translator: Max Kamashev <max.kamashev@floscoeli.com>\n" "Language-Team: РуÑÑкий <ru@li.org>\n" @@ -19,88 +19,89 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 1.5\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "По умолчанию" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "Ðикогда" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "ÐеделÑ" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "Две недели" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "Один меÑÑц" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "Два меÑÑца" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "Три меÑÑца" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "Интервал обновлениÑ:" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "Ðе обновлÑть" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "Каждые 15 минут" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "Каждые 30 минут" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "Каждый чаÑ" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "Каждые 4 чаÑа" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "Каждые 12 чаÑов" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "Раз в день" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "Раз в неделю" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "Пользователь" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Ðктивный пользователь" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "ÐдминиÑтратор" @@ -155,352 +156,348 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "неудавшийÑÑ Ñ‚ÐµÑÑ‚ ÑÐºÑ€Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ SQL, проверьте вашу базу данных и конфигурацию PHP" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Идет загрузка..." -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "Свернуть ÑпиÑок каналов" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "Показать Ñтатьи" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "Ðдаптивно" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "Ð’Ñе Ñтатьи" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "Отмеченные" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "Опубликован" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "Ðовые" -#: index.php:177 +#: index.php:170 #, fuzzy msgid "Unread First" msgstr "Ðовые" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "Игнорировать Оценки" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "Сортировать Ñтатьи" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "По умолчанию" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "Заголовок" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "Как прочитанные" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "ДоÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Tiny Tiny RSS!" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "ДейÑтвиÑ..." -#: index.php:233 +#: index.php:225 #, fuzzy msgid "Preferences..." msgstr "ÐаÑтройки" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "ПоиÑк..." -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð´ каналами:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "ПодпиÑатьÑÑ Ð½Ð° канал..." -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "Редактировать канал..." -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "Заново оценить канал" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "ОтпиÑатьÑÑ" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "Ð’Ñе каналы:" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "Показать/Ñкрыть прочитанные" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "Другие дейÑтвиÑ:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "Перейти в дайджеÑÑ‚..." - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "Показать облако тегов..." - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 #, fuzzy msgid "Toggle widescreen mode" msgstr "Переключить изменение режима категории" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "Выбрать по тегам..." -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "Создать метку..." -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "Создать фильтр..." -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "ГорÑчие клавиши" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "Выход" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "ÐаÑтройки" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "ГорÑчие Клавиши" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "Закрыть наÑтройки" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "Каналы" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "Фильтры" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "Метки" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "Пользователи" -#: register.php:186 +#: prefs.php:132 +msgid "System" +msgstr "" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "Создать новый аккаунт" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… пользователей запрещена." -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "ВернутьÑÑ Ðº Tiny Tiny RSS" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "Временный пароль будет отправлен на указанный e-mail. ЕÑли аккаунт не будет активирован в течении 24 чаÑов, то он будет удалён." -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "Желаемый логин:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "Проверить доÑтупноÑть" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "E-mail: " -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "Сколько будет, два Ð¿Ð»ÑŽÑ Ð´Ð²Ð°:" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "ЗарегиÑтрироватьÑÑ" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "Ðе полноÑтью заполнена ваша региÑÑ‚Ñ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ." -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "Извините, такое Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÐ¶Ðµ ÑущеÑтвует." -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "ÐÐµÑƒÐ´Ð°Ñ‡Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ." -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "Ðккаунт уÑпешно Ñоздан." -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… пользователей временно закрыта." -#: update.php:56 +#: update.php:55 #, fuzzy msgid "Tiny Tiny RSS data update script." msgstr "Tiny Tiny RSS база данных обновлена." #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "Ðет категории" @@ -516,343 +513,333 @@ msgstr[2] "Отмеченные" msgid "No feeds found." msgstr "Каналы не найдены." -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "ОÑобые" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "Ð’Ñе каналы" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "Отмеченные" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "Опубликованные" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "Свежие" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "Ð’Ñе Ñтатьи" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "Ðрхив Ñтатей" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "ÐавигациÑ" -#: include/functions.php:1912 +#: include/functions.php:1958 #, fuzzy msgid "Open next feed" msgstr "Генерировать канал" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "" -#: include/functions.php:1914 +#: include/functions.php:1960 #, fuzzy msgid "Open next article" msgstr "Показать оригинальное Ñодержимое Ñтатьи" -#: include/functions.php:1915 +#: include/functions.php:1961 #, fuzzy msgid "Open previous article" msgstr "Показать оригинальное Ñодержимое Ñтатьи" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "" -#: include/functions.php:1918 +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" msgstr "" -#: include/functions.php:1919 +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" msgstr "" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "Показать диалог поиÑка" -#: include/functions.php:1921 +#: include/functions.php:1967 #, fuzzy msgid "Article" msgstr "Ð’Ñе Ñтатьи" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "Изм. отмеченное" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "Отметить / ÑнÑть отметку" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "Прочитано / не прочитано" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "Редактировать теги" -#: include/functions.php:1926 +#: include/functions.php:1972 #, fuzzy msgid "Dismiss selected" msgstr "Скрыть выбранные Ñтатьи" -#: include/functions.php:1927 +#: include/functions.php:1973 #, fuzzy msgid "Dismiss read" msgstr "Опубликовать" -#: include/functions.php:1928 +#: include/functions.php:1974 #, fuzzy msgid "Open in new window" msgstr "Открыть Ñтатью в новом окне" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 msgid "Mark below as read" msgstr "Отметить Ñтатьи ниже как прочитанные" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 msgid "Mark above as read" msgstr "Отметить Ñтатьи выше как прочитанные" -#: include/functions.php:1931 +#: include/functions.php:1977 #, fuzzy msgid "Scroll down" msgstr "Ð’ÑÑ‘ выполнено." -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "" -#: include/functions.php:1933 +#: include/functions.php:1979 #, fuzzy msgid "Select article under cursor" msgstr "Выбрать Ñтатью под курÑором мыши" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "Отправить по почте" -#: include/functions.php:1935 +#: include/functions.php:1981 #, fuzzy msgid "Close/collapse article" msgstr "Закрыть Ñтатью" -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" msgstr "Переключить изменение режима категории" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 #, fuzzy msgid "Toggle embed original" msgstr "Переключить изменение режима категории" -#: include/functions.php:1939 +#: include/functions.php:1985 #, fuzzy msgid "Article selection" msgstr "Инвертировать выделение" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "Выбрать вÑе Ñтатьи" -#: include/functions.php:1941 +#: include/functions.php:1987 #, fuzzy msgid "Select unread" msgstr "Выбрать непрочитанные Ñтатьи" -#: include/functions.php:1942 +#: include/functions.php:1988 #, fuzzy msgid "Select starred" msgstr "Отметить" -#: include/functions.php:1943 +#: include/functions.php:1989 #, fuzzy msgid "Select published" msgstr "Выбрать непрочитанные Ñтатьи" -#: include/functions.php:1944 +#: include/functions.php:1990 #, fuzzy msgid "Invert selection" msgstr "Инвертировать выделение" -#: include/functions.php:1945 +#: include/functions.php:1991 #, fuzzy msgid "Deselect everything" msgstr "ОчиÑтить выделение Ñтатей" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "Канал" -#: include/functions.php:1947 +#: include/functions.php:1993 #, fuzzy msgid "Refresh current feed" msgstr "Обновить активный канал" -#: include/functions.php:1948 +#: include/functions.php:1994 #, fuzzy msgid "Un/hide read feeds" msgstr "Показать/Ñкрыть прочитанные" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "ПодпиÑатьÑÑ Ð½Ð° канал" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "Редактировать канал" -#: include/functions.php:1952 +#: include/functions.php:1998 #, fuzzy msgid "Reverse headlines" msgstr "Обратный порÑдок заголовков" -#: include/functions.php:1953 +#: include/functions.php:1999 #, fuzzy msgid "Debug feed update" msgstr "Ð’Ñе каналы обновлены." -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "Отметить вÑе каналы как прочитанные" -#: include/functions.php:1955 +#: include/functions.php:2001 #, fuzzy msgid "Un/collapse current category" msgstr "Щёлкните, чтобы развернуть категорию" -#: include/functions.php:1956 +#: include/functions.php:2002 #, fuzzy msgid "Toggle combined mode" msgstr "Переключить изменение режима категории" -#: include/functions.php:1957 +#: include/functions.php:2003 #, fuzzy msgid "Toggle auto expand in combined mode" msgstr "Переключить изменение режима категории" -#: include/functions.php:1958 +#: include/functions.php:2004 #, fuzzy msgid "Go to" msgstr "Перейти к.." -#: include/functions.php:1960 +#: include/functions.php:2006 #, fuzzy msgid "Fresh" msgstr "Обновить" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "Облако тегов" -#: include/functions.php:1965 +#: include/functions.php:2011 #, fuzzy msgid "Other" msgstr "Другой:" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "Создать метку" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "Создать фильтр" -#: include/functions.php:1968 +#: include/functions.php:2014 #, fuzzy msgid "Un/collapse sidebar" msgstr "Развернуть боковую панель" -#: include/functions.php:1969 +#: include/functions.php:2015 #, fuzzy msgid "Show help dialog" msgstr "Показать диалог поиÑка" -#: include/functions.php:2492 +#: include/functions.php:2536 #, fuzzy, php-format msgid "Search results: %s" msgstr "Результаты поиÑка" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "Щёлкните Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "Играть" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "нет тегов" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "Редактировать теги Ñтатьи" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 msgid "Originally from:" msgstr "Оригинал:" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 #, fuzzy msgid "Feed URL" msgstr "Канал" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -864,81 +851,84 @@ msgstr "Канал" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "Закрыть Ñто окно" -#: include/functions.php:3451 +#: include/functions.php:3458 #, fuzzy msgid "(edit note)" msgstr "править заметку" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "неизвеÑтный тип" -#: include/functions.php:3742 +#: include/functions.php:3749 #, fuzzy msgid "Attachments" msgstr "ВложениÑ:" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Логин:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Пароль:" -#: include/login_form.php:197 +#: include/login_form.php:199 #, fuzzy msgid "I forgot my password" msgstr "Ðекорректное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "Язык:" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "Профиль:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 msgid "Default profile" msgstr "Профиль по умолчанию" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "ИÑпользовать меньше трафика" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Войти" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "Ошибка проверки ÑеÑÑии (некорректный IP)" @@ -954,168 +944,168 @@ msgstr "Теги Ð´Ð»Ñ Ñтой Ñтатьи (разделенные запÑÑ‚ #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "Сохранить" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "Отмена" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 #, fuzzy msgid "Share with Tiny Tiny RSS" msgstr "ВернутьÑÑ Ðº Tiny Tiny RSS" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "Заголовок:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 #, fuzzy msgid "Content:" msgstr "Содержимое" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 #, fuzzy msgid "Labels:" msgstr "Метки" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "" -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 #, fuzzy msgid "Not logged in" msgstr "ПоÑледний вход" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "Ðекорректное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Канал <b>%s</b> уже подпиÑан." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Добавлена подпиÑка на <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Канал <b>%s</b> уже подпиÑан." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, fuzzy, php-format msgid "No feeds found in <b>%s</b>." msgstr "Каналы не найдены." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 #, fuzzy msgid "Multiple feed URLs found." msgstr "Опубликованный URL канала изменён." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, fuzzy, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Канал <b>%s</b> уже подпиÑан." -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 #, fuzzy msgid "Subscribe to selected feed" msgstr "ОтпиÑатьÑÑ Ð¾Ñ‚ выбранных каналов?" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "Редактировать опции подпиÑки" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 #, fuzzy msgid "Password recovery" msgstr "Пароль" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "" -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "СброÑить пароль" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "" -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 #, fuzzy msgid "Go back" msgstr "ПеремеÑтить назад" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "Ð’ доÑтупе отказано - недоÑтаточный уровень привилегий." -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "Обновление базы данных" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "Применить обновлениÑ" @@ -1177,7 +1167,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "ДоÑтупна Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Tiny Tiny RSS (%s)." @@ -1187,7 +1177,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1199,116 +1189,122 @@ msgstr "Скачать" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "ПоÑетить официальный Ñайт" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "ПоÑледнее обновление" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "Показать в формате RSS" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "Показать в формате RSS" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "Выбрать:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "Ð’Ñе" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "Инвертировать" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "Ðичего" -#: classes/feeds.php:101 +#: classes/feeds.php:93 #, fuzzy msgid "More..." msgstr "Идет загрузка помощи..." -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "Переключить выбранное:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "Выбрано:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 #, fuzzy msgid "Set score" msgstr "Оценка" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "Ðрхивировать" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "ПеремеÑтить назад" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "Удалить" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "Отправить по почте" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "Канал:" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "Канал не найден." -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "Ðикогда" + +#: classes/feeds.php:360 #, fuzzy, php-format msgid "Imported at %s" msgstr "Импортировать" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "Отметить как прочитанные" @@ -1360,9 +1356,9 @@ msgid "Feed or site URL" msgstr "Канал" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "ПомеÑтить в категорию:" @@ -1372,24 +1368,24 @@ msgstr "ДоÑтупные каналы" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "ÐвторизациÑ" #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "Пользователь:" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "Пароль" @@ -1399,7 +1395,7 @@ msgstr "Ðтот канал требует авторизации." #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "ПодпиÑатьÑÑ" @@ -1411,8 +1407,8 @@ msgstr "Другие каналы" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "ПоиÑк" @@ -1436,8 +1432,8 @@ msgstr "Сколько:" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "Удалить" @@ -1521,17 +1517,39 @@ msgstr "ДобавлÑÑŽ фильтр %s" msgid "Processing category: %s" msgstr "ПомеÑтить в категорию:" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "Ошибка: пожалуйÑта загрузите OPML файл." + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "Ошибка: пожалуйÑта загрузите OPML файл." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "Ошибка: пожалуйÑта загрузите OPML файл." + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "Ошибка при разборе документа." #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "Вашего ÑƒÑ€Ð¾Ð²Ð½Ñ Ð´Ð¾Ñтупа недоÑтаточно Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтой вкладки." @@ -1565,8 +1583,8 @@ msgid "Change password to" msgstr "Изменить пароль на" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "Опции:" @@ -1608,13 +1626,13 @@ msgstr "[tt-rss] Уведомление о Ñмене паролÑ" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 msgid "Select" msgstr "Выбрать" @@ -1628,7 +1646,7 @@ msgstr "Подробнее" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "Редактировать" @@ -1641,7 +1659,7 @@ msgid "Last login" msgstr "ПоÑледний вход" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "Щёлкните Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ" @@ -1655,7 +1673,7 @@ msgstr "ПодходÑщих пользователей не найдено." #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "Заголовок" @@ -1695,43 +1713,43 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "" #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "ИÑкать" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "Добавить" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 #, fuzzy msgid "Apply actions" msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð´ каналом" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "Включен" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 #, fuzzy msgid "Match any rule" msgstr "СоответÑтвие:" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 #, fuzzy msgid "Inverse matching" msgstr "Инвертировать фильтр" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "Проверить" @@ -1750,65 +1768,65 @@ msgid "Combine" msgstr "" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "СброÑить Ñортировку" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "Заново оценить Ñтатьи" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "Создать" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "по полю:" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "в" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #, fuzzy msgid "Save rule" msgstr "Сохранить" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 #, fuzzy msgid "Add rule" msgstr "Добавить метку..." -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "Выполнить дейÑтвиÑ" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸:" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #, fuzzy msgid "Save action" msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð´ каналами" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 #, fuzzy msgid "Add action" msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð´ каналом" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 msgid "[No caption]" msgstr "[Ðет заголовка]" @@ -1960,7 +1978,7 @@ msgid "Purge unread articles" msgstr "ОчиÑтить непрочитанные Ñтатьи" #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "Обратный порÑдок заголовков (Ñтарые впереди)" @@ -2002,7 +2020,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "Вырезать вÑе, кроме оÑновных HTML тегов при показе Ñтатей." #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 msgid "Customize stylesheet" msgstr "Изменить пользовательÑкие Ñтили" @@ -2011,7 +2029,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "" #: classes/pref/prefs.php:55 -msgid "User timezone" +#, fuzzy +msgid "Time zone" msgstr "ЧаÑовой поÑÑ" #: classes/pref/prefs.php:56 @@ -2023,22 +2042,28 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "Выбор темы" +#, fuzzy +msgid "Language" +msgstr "Язык:" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +#, fuzzy +msgid "Theme" +msgstr "Темы" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "Старый пароль не может быть пуÑтым." -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "Ðовый пароль не может быть пуÑтым." -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "Пароли не Ñовпадают." @@ -2046,232 +2071,242 @@ msgstr "Пароли не Ñовпадают." msgid "Function not supported by authentication module." msgstr "" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñохранена." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 #, fuzzy msgid "Your personal data has been saved." msgstr "Пароль был изменен." -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 #, fuzzy msgid "Personal data / Authentication" msgstr "ÐвторизациÑ" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "Личные данные" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "Полное имÑ" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "E-mail" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "Уровень доÑтупа:" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "Сохранить" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "ИÑпользуетÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ по умолчанию, пожалуйÑта, измените его." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "Старый пароль" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "Ðовый пароль" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "Подтверждение паролÑ" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "Изменить пароль" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 #, fuzzy msgid "Enter your password" msgstr "Ðекорректное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 #, fuzzy msgid "Disable OTP" msgstr "(Отключен)" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "" -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "ПожалуйÑта, укажите заметку Ð´Ð»Ñ Ñтатьи:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 #, fuzzy msgid "Enable OTP" msgstr "Включен" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 #, fuzzy msgid "Customize" msgstr "Изменить пользовательÑкие Ñтили" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "РегиÑтрациÑ" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "Сохранить конфигурацию" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 #, fuzzy msgid "Save and exit preferences" msgstr "Закрыть наÑтройки" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "Управление профилÑми" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "СброÑить наÑтройки" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 #, fuzzy msgid "Description" msgstr "опиÑание" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 #, fuzzy msgid "Clear data" msgstr "ОчиÑтить данные канала." -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 #, fuzzy msgid "Enable selected plugins" msgstr "Разрешить иконки каналов" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "Ðекорректное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 #, fuzzy msgid "Incorrect password" msgstr "Ðекорректное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "" -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "Создать профиль" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 #, fuzzy msgid "(active)" msgstr "Ðдаптивно" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "Удалить выбранные профили?" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "Ðктивировать профиль" @@ -2279,256 +2314,282 @@ msgstr "Ðктивировать профиль" msgid "Check to enable field" msgstr "Проверить доÑтупноÑть полÑ" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "Заголовок" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "Обновить" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "Удаление Ñообщений:" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "" -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "СпрÑтать из ÑпиÑка популÑрных каналов" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "Включить в e-mail дайджеÑÑ‚" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "Ð’Ñегда показывать вложенные изображениÑ" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "КÑшировать Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "Пометить вÑе Ñтатьи как прочитанные?" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "Иконка" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "Заменить" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "ПереподпиÑатьÑÑ Ð½Ð° PUSH обновлениÑ" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "СбраÑывает ÑтатуÑподпиÑки Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ механизма PubSubHubbub" -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "Ð’ÑÑ‘ выполнено." -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "Каналы Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð¼Ð¸" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "Ðеактивные каналы" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "Редактировать выбранные каналы" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 #, fuzzy msgid "Batch subscribe" msgstr "ОтпиÑатьÑÑ" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "Категории" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 #, fuzzy msgid "Add category" msgstr "Добавить категорию..." -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 #, fuzzy msgid "Remove selected" msgstr "Удалить выбранные фильтры?" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 #, fuzzy msgid "(Un)hide empty categories" msgstr "Редактировать категории" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "ДейÑтвиÑ..." -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "Ð ÑƒÑ‡Ð½Ð°Ñ Ð¾Ñ‡Ð¸Ñтка" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "ОчиÑтить данные канала." -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "" -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "Только главный профиль наÑтроек будет ÑкÑпортирован в OPML." -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 #, fuzzy msgid "Import my OPML" msgstr "Импортирую OPML..." -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 #, fuzzy msgid "Filename:" msgstr "Полное имÑ" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 #, fuzzy msgid "Include settings" msgstr "Включить в e-mail дайджеÑÑ‚" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 #, fuzzy msgid "Export OPML" msgstr "ÐкÑпортировать OPML" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 #, fuzzy msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "Опубликованные Ñтатьи ÑкÑпортируетÑÑ Ð² качеÑтве общего RSS канала и могут быть подпиÑаны кем-либо ещё, кто знает URL, указанный ниже." -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "" -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "ÐŸÑƒÐ±Ð»Ð¸Ñ‡Ð½Ð°Ñ ÑÑылка на OPML" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 #, fuzzy msgid "Display published OPML URL" msgstr "ÐŸÑƒÐ±Ð»Ð¸Ñ‡Ð½Ð°Ñ ÑÑылка на OPML" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 #, fuzzy msgid "Firefox integration" msgstr "Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð² Firefox" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "Ðтот Ñайт Ñ Tiny Tiny RSS можно иÑпользовать в Firefox как агрегатор RSS. Ð”Ð»Ñ Ñтого щёлкните по ÑÑылке ниже." -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "Щёлкните здеÑÑŒ Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации Ñайта в роли RSS агрегатора" -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 #, fuzzy msgid "Published & shared articles / Generated feeds" msgstr "Заново оценить Ñтатьи в выбранных каналах?" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 #, fuzzy msgid "Published articles and generated feeds" msgstr "Заново оценить Ñтатьи в выбранных каналах?" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "Опубликованные Ñтатьи ÑкÑпортируетÑÑ Ð² качеÑтве общего RSS канала и могут быть подпиÑаны кем-либо ещё, кто знает URL, указанный ниже." -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 #, fuzzy msgid "Display URL" msgstr "показать теги" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 #, fuzzy msgid "Articles shared by URL" msgstr "РаÑшарить Ñтатью по ÑÑылке" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "" -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 #, fuzzy msgid "Unshare all articles" msgstr "Отмеченные" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "Ðти каналы не были обновлены в течение трех меÑÑцев:" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "Щёлкните Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "ОтпиÑатьÑÑ Ð¾Ñ‚ выбранных каналов?" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "Ðти каналы не были обновлены из-за ошибок:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 #, fuzzy msgid "Feeds require authentication." msgstr "Ðтот канал требует авторизации." -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +#, fuzzy +msgid "Refresh" +msgstr "Обновить" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +#, fuzzy +msgid "Filename" +msgstr "Полное имÑ" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "Дата" + +#: plugins/digest/digest_body.php:57 #, fuzzy msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" @@ -2536,32 +2597,32 @@ msgstr "" "\t\tÐ´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»Ð° Ñтой программы. ПожалуйÑта, проверьте\n" "\t\tнаÑтройки вашего браузера." -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "Привет," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "Закрыть Ñтатью" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 #, fuzzy msgid "Configuration saved." msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñохранена." @@ -2579,17 +2640,17 @@ msgstr "Пароль был изменен." msgid "Old password is incorrect." msgstr "Старый пароль неправилен." -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "" @@ -2597,135 +2658,135 @@ msgstr "" msgid "Open regular version" msgstr "" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 #, fuzzy msgid "Enable categories" msgstr "Включить категории каналов" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 #, fuzzy msgid "Browse categories like folders" msgstr "СброÑить порÑдок категорий" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 #, fuzzy msgid "Show images in posts" msgstr "Ðе показывать Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑтатьÑÑ…" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 #, fuzzy msgid "Hide read articles and feeds" msgstr " Показать/Ñкрыть прочитанные" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 #, fuzzy msgid "Sort feeds by unread count" msgstr "Сортировать каналы по количеÑтву непрочитанных Ñтатей" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 msgid "Multiple articles" msgstr "Ð’Ñе Ñтатьи" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 #, fuzzy msgid "Forward selected article(s) by email." msgstr "Отмеченные" -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 #, fuzzy msgid "Close this dialog" msgstr "Закрыть Ñто окно" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, fuzzy, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "ВернутьÑÑ Ðº Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 #, fuzzy msgid "Subscribe in Tiny Tiny RSS" msgstr "ВернутьÑÑ Ðº Tiny Tiny RSS" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "Ðрхив Ñтатей" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "" -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 #, fuzzy msgid "Export my data" msgstr "ÐкÑпортировать данные" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "Импортировать" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "Ðе могу импортировать данные: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñхемы." -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "Ðе могу импортировать данные: неизвеÑтынй формат данных." -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, fuzzy, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " @@ -2733,7 +2794,7 @@ msgstr[0] "Редактировать заметку" msgstr[1] "Редактировать заметку" msgstr[2] "Редактировать заметку" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, fuzzy, php-format msgid "%d imported, " msgid_plural "%d imported, " @@ -2741,7 +2802,7 @@ msgstr[0] "уже импортирован." msgstr[1] "уже импортирован." msgstr[2] "уже импортирован." -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, fuzzy, php-format msgid "%d feed created." msgid_plural "%d feeds created." @@ -2749,290 +2810,300 @@ msgstr[0] "Канал не выбран." msgstr[1] "Канал не выбран." msgstr[2] "Канал не выбран." -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "Ðе могу загрузить XML документ." -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 #, fuzzy msgid "Prepare data" msgstr "Сохранить" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" -msgstr "" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +#, fuzzy +msgid "No file uploaded." +msgstr "Ðет файла OPML Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸." -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "От:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "Кому:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "Заголовок:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "Отправить пиÑьмо" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 msgid "Edit article note" msgstr "Редактировать заметку" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 #, fuzzy msgid "Example Pane" msgstr "Примеры" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 #, fuzzy msgid "Set value" msgstr "Отметить" -#: plugins/googlereaderimport/init.php:72 -#, fuzzy -msgid "No file uploaded." -msgstr "Ðет файла OPML Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸." - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "СвÑзанные" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "ИнÑталлÑциÑ" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "URL инÑталлÑции" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 #, fuzzy msgid "Access key:" msgstr "Уровень доÑтупа:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 #, fuzzy msgid "Access key" msgstr "Уровень доÑтупа:" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "ИÑпользуйте один ключ доÑтупа Ð´Ð»Ñ Ð¾Ð±Ð¾Ð¸Ñ… инÑталлÑций" -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 #, fuzzy msgid "Generate new key" msgstr "Генерировать канал" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 #, fuzzy msgid "Link instance" msgstr "Редактировать теги" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 #, fuzzy msgid "Stored feeds" msgstr "Больше каналов" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "Создать ÑÑылку" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 #, fuzzy msgid "Share by URL" msgstr "РаÑшарить Ñтатью по ÑÑылке" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 #, fuzzy msgid "Update Tiny Tiny RSS" msgstr "ВернутьÑÑ Ðº Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 #, fuzzy msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Tiny Tiny RSS база данных обновлена." -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." msgstr "" -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 #, fuzzy msgid "Ready to update." msgstr "ПоÑледнее обновление:" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 #, fuzzy msgid "Start update" msgstr "ПоÑледнее обновление:" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "Отметить вÑе Ñтатьи в %s как прочитанные?" -#: js/feedlist.js:413 +#: js/feedlist.js:414 #, fuzzy msgid "Mark all articles in %s older than 1 day as read?" msgstr "Отметить вÑе Ñтатьи в %s как прочитанные?" -#: js/feedlist.js:416 +#: js/feedlist.js:417 #, fuzzy msgid "Mark all articles in %s older than 1 week as read?" msgstr "Отметить вÑе Ñтатьи в %s как прочитанные?" -#: js/feedlist.js:419 +#: js/feedlist.js:420 #, fuzzy msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "Отметить вÑе Ñтатьи в %s как прочитанные?" -#: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." msgstr "" -#: js/functions.js:214 -msgid "close" +#: js/functions.js:107 +msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "" -#: js/functions.js:586 +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "Пауза" + +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 #, fuzzy msgid "Upload complete." msgstr "Обновлённые Ñтатьи" -#: js/functions.js:692 +#: js/functions.js:718 #, fuzzy msgid "Remove stored feed icon?" msgstr "Удалить Ñохранённые данные" -#: js/functions.js:697 +#: js/functions.js:723 #, fuzzy msgid "Removing feed icon..." msgstr "Канал удалÑетÑÑ..." -#: js/functions.js:702 +#: js/functions.js:728 #, fuzzy msgid "Feed icon removed." msgstr "Канал не найден." -#: js/functions.js:724 +#: js/functions.js:750 #, fuzzy msgid "Please select an image file to upload." msgstr "ПожалуйÑта выберите только один канал." -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "" -#: js/functions.js:727 +#: js/functions.js:753 #, fuzzy msgid "Uploading, please wait..." msgstr "Идет загрузка..." -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "ПожалуйÑта, введите заголовок метки:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "Ðе могу Ñоздать метку: отÑутÑтвует заголовок." -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "ПодпиÑатьÑÑ Ð½Ð° канал" -#: js/functions.js:818 +#: js/functions.js:844 #, fuzzy msgid "Subscribed to %s" msgstr "ПодпиÑаны каналы:" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "" -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "" -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "Редактировать выбранные каналы" + +#: js/functions.js:874 #, fuzzy msgid "Couldn't download the specified URL: %s" msgstr "Ðе могу подпиÑатьÑÑ: нет URL" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 #, fuzzy msgid "You are already subscribed to this feed." @@ -3062,7 +3133,7 @@ msgid "Subscription reset." msgstr "ПодпиÑатьÑÑ Ð½Ð° канал..." #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "ОтпиÑатьÑÑ Ð¾Ñ‚ %s?" @@ -3070,77 +3141,77 @@ msgstr "ОтпиÑатьÑÑ Ð¾Ñ‚ %s?" msgid "Removing feed..." msgstr "Канал удалÑетÑÑ..." -#: js/functions.js:1323 +#: js/functions.js:1324 #, fuzzy msgid "Please enter category title:" msgstr "ПожалуйÑта, укажите заметку Ð´Ð»Ñ Ñтатьи:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "Попытка изменить адреÑ.." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "Ð’Ñ‹ не можете редактировать Ñтот канал." -#: js/functions.js:1560 +#: js/functions.js:1561 #, fuzzy msgid "Edit Feed" msgstr "Редактировать канал" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 #, fuzzy msgid "Saving data..." msgstr "Идёт Ñохранение..." -#: js/functions.js:1598 +#: js/functions.js:1599 #, fuzzy msgid "More Feeds" msgstr "Больше каналов" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "Ðет выбранных каналов." -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "" -#: js/functions.js:1740 +#: js/functions.js:1741 #, fuzzy msgid "Feeds with update errors" msgstr "Ошибки обновлениÑ" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 #, fuzzy msgid "Remove selected feeds?" msgstr "Удалить выбранные фильтры?" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 #, fuzzy msgid "Removing selected feeds..." msgstr "Выбранные фильтры удалÑÑŽÑ‚ÑÑ..." -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "Помощь" @@ -3198,7 +3269,7 @@ msgid "Removing selected labels..." msgstr "Выбранные метки удалÑÑŽÑ‚ÑÑ..." #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "Ðет выбранных меток." @@ -3324,235 +3395,243 @@ msgstr "ПожалуйÑта выберите файл OPML." msgid "Importing, please wait..." msgstr "Идет загрузка..." -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "СброÑить наÑтройки?" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "" -#: js/prefs.js:1088 +#: js/prefs.js:1102 #, fuzzy msgid "Removing category..." msgstr "Создать категорию" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "Удалить выбранные категории?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "Выбранные категории удалÑÑŽÑ‚ÑÑ..." -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "Ðет выбранных категорий." -#: js/prefs.js:1133 +#: js/prefs.js:1147 #, fuzzy msgid "Category title:" msgstr "Редактор категорий" -#: js/prefs.js:1137 +#: js/prefs.js:1151 #, fuzzy msgid "Creating category..." msgstr "Создать фильтр..." -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "Давно не обновлÑвшиеÑÑ ÐºÐ°Ð½Ð°Ð»Ñ‹" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "Изменить текущий Ð°Ð´Ñ€ÐµÑ Ð¿ÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸ OPML на новый?" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "ОчиÑтка канала..." -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "Заново оценить Ñтатьи в выбранных каналах?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 #, fuzzy msgid "Rescoring selected feeds..." msgstr "ОчиÑтка выбранных каналов..." -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "Оценить заново вÑе Ñтатьи? Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ продолжатьÑÑ Ð´Ð»Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ времÑ." -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." msgstr "Переоценка каналов..." -#: js/prefs.js:1365 +#: js/prefs.js:1379 #, fuzzy msgid "Reset selected labels to default colors?" msgstr "СброÑить метку цветов, на цвета по умолчанию?" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "Профили наÑтроек" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "" -#: js/prefs.js:1414 +#: js/prefs.js:1428 #, fuzzy msgid "Removing selected profiles..." msgstr "Выбранные фильтры удалÑÑŽÑ‚ÑÑ..." -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "Профиль не выбран" -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 msgid "Activate selected profile?" msgstr "Ðктивировать выбранный профиль?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "ПожалуйÑта выберите какой-нибудь профиль." -#: js/prefs.js:1458 +#: js/prefs.js:1472 #, fuzzy msgid "Creating profile..." msgstr "Создать профиль" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 #, fuzzy msgid "Clearing URLs..." msgstr "ОчиÑтка канала..." -#: js/prefs.js:1524 +#: js/prefs.js:1538 #, fuzzy msgid "Generated URLs cleared." msgstr "Создать новую ÑÑылку" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "Редактор Меток" -#: js/prefs.js:1771 +#: js/prefs.js:1785 #, fuzzy msgid "Subscribing to feeds..." msgstr "ПодпиÑатьÑÑ Ð½Ð° канал..." -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "Пометить вÑе Ñтатьи как прочитанные?" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "Помечаю вÑе каналы как прочитанные..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 #, fuzzy msgid "Please enable mail plugin first." msgstr "ПожалуйÑта выберите какой-нибудь канал." -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 #, fuzzy msgid "Please enable embed_original plugin first." msgstr "ПожалуйÑта выберите какой-нибудь канал." -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¿Ð¸ÑатьÑÑ Ð¾Ñ‚ категории." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "ПожалуйÑта выберите какой-нибудь канал." -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "Ð’Ñ‹ не можете Ñнова оценить Ñтот канал." -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "УÑтановить оценку ÑтатьÑм в %s?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "Переоценка Ñтатей..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 #, fuzzy msgid "New version available!" msgstr "ДоÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Tiny Tiny RSS!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 #, fuzzy msgid "Cancel search" msgstr "Отмена" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Ðе отмеченные" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "Отмеченные" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Ðе публиковать" -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Опубликовать" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "Ð¡Ñ‚Ð°Ñ‚ÑŒÑ Ð½Ðµ выбрана" +msgstr[1] "Ð¡Ñ‚Ð°Ñ‚ÑŒÑ Ð½Ðµ выбрана" +msgstr[2] "Ð¡Ñ‚Ð°Ñ‚ÑŒÑ Ð½Ðµ выбрана" + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Ðет выбранных Ñтатей." -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 #, fuzzy msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" @@ -3560,7 +3639,7 @@ msgstr[0] "Отметить %d выбранные Ñтатьи в %s как пр msgstr[1] "Отметить %d выбранные Ñтатьи в %s как прочитанные?" msgstr[2] "Отметить %d выбранные Ñтатьи в %s как прочитанные?" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 #, fuzzy msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" @@ -3568,7 +3647,7 @@ msgstr[0] "Удалить %d выбранных Ñтатей?" msgstr[1] "Удалить %d выбранных Ñтатей?" msgstr[2] "Удалить %d выбранных Ñтатей?" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 #, fuzzy msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" @@ -3576,7 +3655,7 @@ msgstr[0] "Ðрхивировать %d выбранных Ñтатей в %s?" msgstr[1] "Ðрхивировать %d выбранных Ñтатей в %s?" msgstr[2] "Ðрхивировать %d выбранных Ñтатей в %s?" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 #, fuzzy msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" @@ -3584,11 +3663,11 @@ msgstr[0] "ПеремеÑтить %d архивированных Ñтатей Ð msgstr[1] "ПеремеÑтить %d архивированных Ñтатей назад?" msgstr[2] "ПеремеÑтить %d архивированных Ñтатей назад?" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 #, fuzzy msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" @@ -3596,23 +3675,23 @@ msgstr[0] "Отметить %d выбранные Ñтатьи в %s как пр msgstr[1] "Отметить %d выбранные Ñтатьи в %s как прочитанные?" msgstr[2] "Отметить %d выбранные Ñтатьи в %s как прочитанные?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "Редактировать теги" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "Сохранить теги Ñтатьи..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "Ð¡Ñ‚Ð°Ñ‚ÑŒÑ Ð½Ðµ выбрана" -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "Статей Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ¸ не найдено." -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 #, fuzzy msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" @@ -3620,47 +3699,39 @@ msgstr[0] "Отметить %d Ñтатью(ей) как прочитанные? msgstr[1] "Отметить %d Ñтатью(ей) как прочитанные?" msgstr[2] "Отметить %d Ñтатью(ей) как прочитанные?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "Показать оригинальное Ñодержимое Ñтатьи" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 #, fuzzy msgid "Display article URL" msgstr "показать теги" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 #, fuzzy msgid "Toggle marked" msgstr "Изм. отмеченное" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "Применить метку" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "Удалить метку" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "Проигрываю..." - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "Пауза" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 #, fuzzy msgid "Please enter new score for selected articles:" msgstr "ПожалуйÑта, укажите заметку Ð´Ð»Ñ Ñтатьи:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 #, fuzzy msgid "Please enter new score for this article:" msgstr "ПожалуйÑта, укажите заметку Ð´Ð»Ñ Ñтатьи:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 #, fuzzy msgid "Article URL:" msgstr "Ð’Ñе Ñтатьи" @@ -3783,6 +3854,27 @@ msgstr "РаÑшарить Ñтатью по ÑÑылке" msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." msgstr "" +#~ msgid "Switch to digest..." +#~ msgstr "Перейти в дайджеÑÑ‚..." + +#~ msgid "Show tag cloud..." +#~ msgstr "Показать облако тегов..." + +#~ msgid "Click to play" +#~ msgstr "Щёлкните Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ" + +#~ msgid "Play" +#~ msgstr "Играть" + +#~ msgid "Visit the website" +#~ msgstr "ПоÑетить официальный Ñайт" + +#~ msgid "Select theme" +#~ msgstr "Выбор темы" + +#~ msgid "Playing..." +#~ msgstr "Проигрываю..." + #~ msgid "Default interval between feed updates" #~ msgstr "Интервал между обновлениÑми каналов по умолчанию (в минутах)" @@ -3868,10 +3960,6 @@ msgstr "" #~ msgstr "Старый пароль неправилен." #, fuzzy -#~ msgid "Refresh" -#~ msgstr "Обновить" - -#, fuzzy #~ msgid "(%d feed)" #~ msgid_plural "(%d feeds)" #~ msgstr[0] "(%d каналов)" @@ -3888,9 +3976,6 @@ msgstr "" #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "Отметить вÑе видимые Ñтатьи в %s как прочитанные?" -#~ msgid "Date" -#~ msgstr "Дата" - #~ msgid "Score" #~ msgstr "Оценка" @@ -4197,10 +4282,6 @@ msgstr "" #~ msgid "Click to expand article" #~ msgstr "Щёлкните чтобы развернуть Ñтатью" -#, fuzzy -#~ msgid "Unable to load article." -#~ msgstr "Ошибка: пожалуйÑта загрузите OPML файл." - #~ msgid "Update post on checksum change" #~ msgstr "ОбновлÑть Ñтатью при изменении контрольной Ñуммы" @@ -4606,9 +4687,6 @@ msgstr "" #~ msgid "The configuration was reset to defaults." #~ msgstr "ÐаÑтройки были Ñброшены по-умолчанию." -#~ msgid "Themes" -#~ msgstr "Темы" - #~ msgid "Change theme" #~ msgstr "Изменить тему" @@ -4821,9 +4899,6 @@ msgstr "" #~ msgid "Site:" #~ msgstr "Сайт:" -#~ msgid "Last updated:" -#~ msgstr "ПоÑледнее обновление" - #, fuzzy #~ msgid "Feed browser cache information is missing. Please refer to the <a class='visibleLink' target='_blank' href='http://tt-rss.org/trac/wiki/FeedBrowser'>wiki</a> for more information." #~ msgstr "Feed browser cache information is missing. Ð”Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐµÐ¹ информации Ñмотрите тут <a class='visibleLink' target='_blank' href='http://tt-rss.org/trac/wiki/FeedBrowser'>wiki</a>." diff --git a/locale/sv_SE/LC_MESSAGES/messages.mo b/locale/sv_SE/LC_MESSAGES/messages.mo Binary files differindex fbad313e9..0783eb2d2 100644 --- a/locale/sv_SE/LC_MESSAGES/messages.mo +++ b/locale/sv_SE/LC_MESSAGES/messages.mo diff --git a/locale/sv_SE/LC_MESSAGES/messages.po b/locale/sv_SE/LC_MESSAGES/messages.po index 581068bca..6df3e5d18 100644 --- a/locale/sv_SE/LC_MESSAGES/messages.po +++ b/locale/sv_SE/LC_MESSAGES/messages.po @@ -9,26 +9,27 @@ # joschi <joschi.studispam@googlemail.com>, 2011. msgid "" msgstr "" -"Project-Id-Version: Tiny Tiny RSS\n" +"Project-Id-Version: Tiny Tiny RSS sv_SE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" -"PO-Revision-Date: 2013-03-20 16:42+0100\n" -"Last-Translator: wahlis\n" -"Language-Team: \n" -"Language: sv\n" +"POT-Creation-Date: 2013-04-04 09:06+0400\n" +"PO-Revision-Date: 2013-04-30 08:37+0100\n" +"Last-Translator: Mattias Tengblad <mst@eyesx.com>\n" +"Language-Team: Mattias Tengblad <mst@eyesx.com>\n" +"Language: Svenska\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"X-Poedit-Language: Swedish\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.5.5\n" +"X-Poedit-SourceCharset: UTF-8\n" #: backend.php:69 msgid "Use default" -msgstr "Standardvärden" +msgstr "Använd standard" #: backend.php:70 msgid "Never purge" -msgstr "Radera aldrig" +msgstr "Rensa aldrig" #: backend.php:71 msgid "1 week old" @@ -54,48 +55,39 @@ msgstr "3 mÃ¥nader" msgid "Default interval" msgstr "Standardintervall" -#: backend.php:79 -#: backend.php:89 +#: backend.php:79 backend.php:89 msgid "Disable updates" msgstr "Inaktivera uppdateringar" -#: backend.php:80 -#: backend.php:90 +#: backend.php:80 backend.php:90 msgid "Each 15 minutes" msgstr "Varje kvart" -#: backend.php:81 -#: backend.php:91 +#: backend.php:81 backend.php:91 msgid "Each 30 minutes" -msgstr "Varje halvtimme" +msgstr "Varje halvtimma" -#: backend.php:82 -#: backend.php:92 +#: backend.php:82 backend.php:92 msgid "Hourly" -msgstr "Varje timme" +msgstr "Varje timma" -#: backend.php:83 -#: backend.php:93 +#: backend.php:83 backend.php:93 msgid "Each 4 hours" msgstr "Var 4:e timme" -#: backend.php:84 -#: backend.php:94 +#: backend.php:84 backend.php:94 msgid "Each 12 hours" msgstr "Var 12:e timme" -#: backend.php:85 -#: backend.php:95 +#: backend.php:85 backend.php:95 msgid "Daily" msgstr "Dagligen" -#: backend.php:86 -#: backend.php:96 +#: backend.php:86 backend.php:96 msgid "Weekly" msgstr "Veckovis" -#: backend.php:99 -#: classes/pref/users.php:123 +#: backend.php:99 classes/pref/users.php:123 msgid "User" msgstr "Användare" @@ -107,38 +99,150 @@ msgstr "Superanvändare" msgid "Administrator" msgstr "Administratör" +#: db-updater.php:19 +msgid "Your access level is insufficient to run this script." +msgstr "Du har inte behörighet att köra detta skript." + +#: db-updater.php:44 +msgid "Database Updater" +msgstr "Databasuppdatering" + +#: db-updater.php:87 +msgid "Could not update database" +msgstr "Kunde inte uppdatera databasen" + +#: db-updater.php:90 +msgid "Could not find necessary schema file, need version:" +msgstr "Kunde inte hitta rätt schemafil, behöver version:" + +#: db-updater.php:91 +msgid ", found: " +msgstr ", hittade: " + +#: db-updater.php:94 +msgid "Tiny Tiny RSS database is up to date." +msgstr "Tiny Tiny RSS databas är uppdaterad." + +#: db-updater.php:96 db-updater.php:165 db-updater.php:178 register.php:196 +#: register.php:241 register.php:254 register.php:269 register.php:288 +#: register.php:336 register.php:346 register.php:358 +#: classes/handler/public.php:648 classes/handler/public.php:736 +#: classes/handler/public.php:818 +msgid "Return to Tiny Tiny RSS" +msgstr "Ã…tergÃ¥ till Tiny Tiny RSS" + +#: db-updater.php:102 +msgid "Please backup your database before proceeding." +msgstr "Ta en backup av din databas innan du forsätter." + +#: db-updater.php:104 +#, php-format +msgid "" +"Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to " +"<b>%d</b>)." +msgstr "" +"Din Tiny Tiny RSS-databas behöver uppdateras till den senaste versionen (<b>" +"%d</b> till <b>%d</b>)." + +#: db-updater.php:118 +msgid "Perform updates" +msgstr "Utför uppdatering" + +#: db-updater.php:123 +msgid "Performing updates..." +msgstr "Uppdatering pÃ¥gÃ¥r..." + +#: db-updater.php:129 +#, php-format +msgid "Updating to version %d..." +msgstr "Uppdaterar till version %d..." + +#: db-updater.php:144 +msgid "Checking version... " +msgstr "Kontrollerar version..." + +#: db-updater.php:150 +msgid "OK!" +msgstr "OK!" + +#: db-updater.php:152 +msgid "ERROR!" +msgstr "FEL!" + +#: db-updater.php:160 +#, php-format +msgid "Finished. Performed <b>%d</b> update up to schema version <b>%d</b>." +msgid_plural "" +"Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." +msgstr[0] "" +"Klart. Genomförde <b>%d</b> uppdatering upp till schemaversion <b>%d</b>." +msgstr[1] "" +"Klart. Genomförde <b>%d</b> uppdateringar upp till schemaversion <b>%d</b>." + +#: db-updater.php:170 +msgid "Your database schema is from a newer version of Tiny Tiny RSS." +msgstr "Ditt databasschema är för en nyare Tiny Tiny RSS Version." + +#: db-updater.php:172 +#, php-format +msgid "Found schema version: <b>%d</b>, required: <b>%d</b>." +msgstr "Fann schemaversion: <b>%d</b>, behöver version: <b>%d</b>." + +#: db-updater.php:174 +msgid "" +"Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer " +"version and continue." +msgstr "" +"Kan inte uppdatera schema. Uppdatera Tiny Tiny RSS pÃ¥ filsystemet till en ny " +"version " + #: errors.php:9 -msgid "This program requires XmlHttpRequest to function properly. Your browser doesn't seem to support it." -msgstr "Denna sida behöver XmlHttpRequest för att kunna köras. Din webbläsare verkar inte stöda det." +msgid "" +"This program requires XmlHttpRequest to function properly. Your browser " +"doesn't seem to support it." +msgstr "" +"Denna sida behöver XmlHttpRequest för att kunna köras. Din webbläsare verkar " +"inte stöda det." #: errors.php:12 -msgid "This program requires cookies to function properly. Your browser doesn't seem to support them." -msgstr "Denna sida behöver cookies för att fungera. Din webbläsare verkar inte stöda det." +msgid "" +"This program requires cookies to function properly. Your browser doesn't " +"seem to support them." +msgstr "" +"Denna sida behöver cookies för att fungera. Din webbläsare verkar inte stöda " +"det." #: errors.php:15 -#, fuzzy msgid "Backend sanity check failed." -msgstr "Backend sanitetskontroll misslyckades!!" +msgstr "Sanitetskontroll för \"backend\" misslyckades." #: errors.php:17 msgid "Frontend sanity check failed." -msgstr "Frontend sanitetskontroll misslyckades!!" +msgstr "Sanitetskontroll för \"frontend\" misslyckades." #: errors.php:19 -msgid "Incorrect database schema version. <a href='db-updater.php'>Please update</a>." -msgstr "Fel version av datenbasschema. <a href='update.php'>Vänligen uppdatera</a>." +msgid "" +"Incorrect database schema version. <a href='db-updater.php'>Please " +"update</a>." +msgstr "" +"Felaktig version för databasshema. <a href='db-updater.php'>Vänligen " +"uppdatera</a>." #: errors.php:21 msgid "Request not authorized." -msgstr "Inte tillÃ¥tet." +msgstr "FörfrÃ¥gan ej tillÃ¥ten." #: errors.php:23 msgid "No operation to perform." msgstr "Ingen aktivtet vald." #: errors.php:25 -msgid "Could not display feed: query failed. Please check label match syntax or local configuration." -msgstr "Kunde inte visa flöde: sökning misslyckades. Vänligen kontrollera att etiketten har rätt syntax och den lokala konfigurationen" +msgid "" +"Could not display feed: query failed. Please check label match syntax or " +"local configuration." +msgstr "" +"Kunde inte visa flöde: sökning misslyckades. Vänligen kontrollera att " +"etiketten har rätt syntax och den lokala konfigurationen" #: errors.php:27 msgid "Denied. Your access level is insufficient to access this page." @@ -146,60 +250,39 @@ msgstr "Nekad. Din behörighetsnivÃ¥ är för lÃ¥g för att ladda denna sida." #: errors.php:29 msgid "Configuration check failed" -msgstr "Konfigurationskontroll misslyckades" +msgstr "Kontrollen av konfiguration misslyckades" #: errors.php:31 -#, fuzzy -msgid "Your version of MySQL is not currently supported. Please see official site for more information." +msgid "" +"Your version of MySQL is not currently supported. Please see official site " +"for more information." msgstr "" -"Ihre Version von MySQL wird zur Zeit nicht unterstüzt. Bitte\n" -"\t\tinformieren Sie sich auf der offiziellen Website." +"Din version av MySQL stöds inte för närvarande. Vänligen se den officiella " +"webbplatsen för mer information." #: errors.php:35 msgid "SQL escaping test failed, check your database and PHP configuration" -msgstr "SQL Escaping Test fehlgeschlagen, überprüfen Sie Ihre Datenbank und PHP Konfiguration" - -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 -#: classes/backend.php:5 -#: classes/pref/labels.php:296 -#: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 -#: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 -#: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 -#: js/prefs.js:86 -#: js/prefs.js:576 -#: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 -#: plugins/import_export/import_export.js:17 -#: plugins/updater/updater.js:17 +msgstr "" +"Test för \"SQL escaping\" misslyckades, kontrollera databas och PHP-" +"konfiguration" + +#: index.php:135 index.php:152 index.php:276 prefs.php:103 +#: classes/backend.php:5 classes/pref/labels.php:296 +#: classes/pref/filters.php:680 classes/pref/feeds.php:1331 +#: plugins/digest/digest_body.php:63 js/feedlist.js:128 js/feedlist.js:436 +#: js/functions.js:420 js/functions.js:758 js/functions.js:1194 +#: js/functions.js:1329 js/functions.js:1641 js/prefs.js:86 js/prefs.js:576 +#: js/prefs.js:666 js/prefs.js:858 js/prefs.js:1445 js/prefs.js:1498 +#: js/prefs.js:1557 js/prefs.js:1574 js/prefs.js:1590 js/prefs.js:1606 +#: js/prefs.js:1625 js/prefs.js:1798 js/prefs.js:1814 js/tt-rss.js:475 +#: js/tt-rss.js:492 js/viewfeed.js:772 js/viewfeed.js:1200 +#: plugins/import_export/import_export.js:17 plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "Laddar, vänta..." #: index.php:166 msgid "Collapse feedlist" -msgstr "Öppna kanallistan" +msgstr "Visa/dölj flödeslista" #: index.php:169 msgid "Show articles" @@ -213,32 +296,25 @@ msgstr "Adaptivt" msgid "All Articles" msgstr "Alla artiklar" -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:174 include/functions.php:1953 classes/feeds.php:106 msgid "Starred" msgstr "Stjärnmärkta" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:175 include/functions.php:1954 classes/feeds.php:107 msgid "Published" msgstr "Publicerade" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:176 classes/feeds.php:93 classes/feeds.php:105 msgid "Unread" msgstr "Olästa" #: index.php:177 -#, fuzzy msgid "Unread First" -msgstr "Olästa" +msgstr "Olästa först" #: index.php:178 msgid "With Note" -msgstr "" +msgstr "Med notering" #: index.php:179 msgid "Ignore Scoring" @@ -246,7 +322,7 @@ msgstr "Ignorera poängsättningen" #: index.php:182 msgid "Sort articles" -msgstr "Sortera artiklarna" +msgstr "Sortera artiklar" #: index.php:185 msgid "Default" @@ -254,135 +330,119 @@ msgstr "Standard" #: index.php:186 msgid "Newest first" -msgstr "" +msgstr "Nyast först" #: index.php:187 msgid "Oldest first" -msgstr "" - -#: index.php:188 -msgid "Title" -msgstr "Titel" +msgstr "Äldst först" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 -#: js/FeedTree.js:128 -#: js/FeedTree.js:156 -#: plugins/digest/digest.js:647 +#: index.php:191 index.php:240 include/functions.php:1943 +#: classes/feeds.php:111 classes/feeds.php:441 js/FeedTree.js:128 +#: js/FeedTree.js:156 plugins/digest/digest.js:647 msgid "Mark as read" -msgstr "Markera som lästa" +msgstr "Markera som läst" -#: index.php:195 +#: index.php:194 msgid "Older than one day" -msgstr "" +msgstr "Äldre än en dag" -#: index.php:198 +#: index.php:197 msgid "Older than one week" -msgstr "" +msgstr "Äldre än en vecka" -#: index.php:201 +#: index.php:200 msgid "Older than two weeks" -msgstr "" +msgstr "Äldre än tvÃ¥ veckor" -#: index.php:218 +#: index.php:217 msgid "Communication problem with server." msgstr "Kommunikationsproblem med servern." -#: index.php:226 +#: index.php:225 msgid "New version of Tiny Tiny RSS is available!" msgstr "Ny version av Tiny Tiny RSS finns att ladda ner!" -#: index.php:231 +#: index.php:230 msgid "Actions..." -msgstr "Aktiviteter..." +msgstr "Ã…tgärder..." -#: index.php:233 +#: index.php:232 msgid "Preferences..." msgstr "Inställningar..." -#: index.php:234 +#: index.php:233 msgid "Search..." msgstr "Sök..." -#: index.php:235 +#: index.php:234 msgid "Feed actions:" -msgstr "Kanalaktiviteter:" +msgstr "FlödesÃ¥tgärder:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:235 classes/handler/public.php:578 msgid "Subscribe to feed..." -msgstr "Prenumerera pÃ¥ kanal..." +msgstr "Prenumerera pÃ¥ flöde..." -#: index.php:237 +#: index.php:236 msgid "Edit this feed..." -msgstr "Redigera kanal..." +msgstr "Redigera detta flöde..." -#: index.php:238 +#: index.php:237 msgid "Rescore feed" -msgstr "Beräkna kanalens poäng pÃ¥ nytt" +msgstr "Beräkna flödets poäng pÃ¥ nytt" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:238 classes/pref/feeds.php:717 classes/pref/feeds.php:1283 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" -msgstr "Avbeställ kanalen" +msgstr "Avsluta prenumeration" -#: index.php:240 +#: index.php:239 msgid "All feeds:" -msgstr "Alla kanaler:" +msgstr "Alla flöden:" -#: index.php:242 +#: index.php:241 msgid "(Un)hide read feeds" -msgstr "Dölj lästa kanaler" +msgstr "Visa/dölj lästa flöden" -#: index.php:243 +#: index.php:242 msgid "Other actions:" msgstr "Andra aktiviteter:" -#: index.php:245 +#: index.php:244 msgid "Switch to digest..." msgstr "Byt läge till sammanfattning..." -#: index.php:247 +#: index.php:246 msgid "Show tag cloud..." msgstr "Visa taggmoln..." -#: index.php:248 -#: include/functions.php:1937 +#: index.php:247 include/functions.php:1929 msgid "Toggle widescreen mode" msgstr "Växla widescreenläge" -#: index.php:249 +#: index.php:248 msgid "Select by tags..." -msgstr "Välj artiklar frÃ¥n tagg..." +msgstr "Välj efter taggar..." -#: index.php:250 +#: index.php:249 msgid "Create label..." msgstr "Skapa etikett..." -#: index.php:251 +#: index.php:250 msgid "Create filter..." msgstr "Skapa filter..." -#: index.php:252 +#: index.php:251 msgid "Keyboard shortcuts help" msgstr "Hjälp för kortkommandon..." -#: index.php:261 -#: plugins/digest/digest_body.php:77 +#: index.php:260 plugins/digest/digest_body.php:77 #: plugins/mobile/mobile-functions.php:62 #: plugins/mobile/mobile-functions.php:237 msgid "Logout" -msgstr "Utloggning" +msgstr "Logga ut" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:36 prefs.php:121 include/functions.php:1956 +#: classes/pref/prefs.php:428 msgid "Preferences" msgstr "Inställningar" @@ -394,23 +454,17 @@ msgstr "Kortkommandon" msgid "Exit preferences" msgstr "Lämna inställningarna" -#: prefs.php:124 -#: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 +#: prefs.php:124 classes/pref/feeds.php:107 classes/pref/feeds.php:1209 #: classes/pref/feeds.php:1272 msgid "Feeds" -msgstr "Kanaler" +msgstr "Flöden" -#: prefs.php:127 -#: classes/pref/filters.php:156 +#: prefs.php:127 classes/pref/filters.php:156 msgid "Filters" msgstr "Filter" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 -#: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: prefs.php:130 include/functions.php:1146 include/functions.php:1782 +#: classes/pref/labels.php:90 plugins/mobile/mobile-functions.php:198 msgid "Labels" msgstr "Etiketter" @@ -418,8 +472,7 @@ msgstr "Etiketter" msgid "Users" msgstr "Användare" -#: register.php:186 -#: include/login_form.php:238 +#: register.php:186 include/login_form.php:238 msgid "Create new account" msgstr "Skapa ett nytt konto" @@ -427,27 +480,14 @@ msgstr "Skapa ett nytt konto" msgid "New user registrations are administratively disabled." msgstr "Nyregistrering av användare är inaktiverat." -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 -msgid "Return to Tiny Tiny RSS" -msgstr "Ã…ter till Tiny Tiny RSS" - #: register.php:217 -msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." -msgstr "Ditt tillfälliga lösenords skickas till angiven e-postadress. Om du inte loggar in inom 24 timmar kommer kontot automatiskt att raderas" +msgid "" +"Your temporary password will be sent to the specified email. Accounts, which " +"were not logged in once, are erased automatically 24 hours after temporary " +"password is sent." +msgstr "" +"Ditt tillfälliga lösenords skickas till angiven e-postadress. Om du inte " +"loggar in inom 24 timmar kommer kontot automatiskt att raderas" #: register.php:223 msgid "Desired login:" @@ -457,19 +497,17 @@ msgstr "Önskat användarnamn:" msgid "Check availability" msgstr "Kontrollera tillgänglighet" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:228 classes/handler/public.php:776 msgid "Email:" msgstr "E-post:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:231 classes/handler/public.php:781 msgid "How much is two plus two:" msgstr "Hur mycket är tvÃ¥ plus tvÃ¥?:" #: register.php:234 msgid "Submit registration" -msgstr "Registrera" +msgstr "Skicka registrering" #: register.php:252 msgid "Your registration information is incomplete." @@ -489,404 +527,337 @@ msgstr "Konto skapat." #: register.php:355 msgid "New user registrations are currently closed." -msgstr "Nyregistrering av användare är tillfälligt avbruten." +msgstr "Nyregistrering av användare är för närvarande avstängt." -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "Skript för att uppdatera Tiny Tiny RSS." -#: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 -#: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: include/digest.php:109 include/functions.php:1155 +#: include/functions.php:1683 include/functions.php:1768 +#: include/functions.php:1790 classes/opml.php:416 classes/pref/feeds.php:222 msgid "Uncategorized" msgstr "Okategoriserat" #: include/feedbrowser.php:83 -#, fuzzy, php-format +#, php-format msgid "%d archived article" msgid_plural "%d archived articles" -msgstr[0] "%d arkiverade artiklar" +msgstr[0] "%d arkiverad artikel" msgstr[1] "%d arkiverade artiklar" #: include/feedbrowser.php:107 msgid "No feeds found." -msgstr "Inga kanaler funna." +msgstr "Inga flöden funna." -#: include/functions.php:1148 -#: include/functions.php:1785 +#: include/functions.php:1144 include/functions.php:1780 #: plugins/mobile/mobile-functions.php:171 msgid "Special" -msgstr "Specialkanaler" +msgstr "Special" -#: include/functions.php:1637 -#: classes/feeds.php:1110 +#: include/functions.php:1632 classes/feeds.php:1101 #: classes/pref/filters.php:427 msgid "All feeds" -msgstr "Alla kanaler" +msgstr "Alla flöden" -#: include/functions.php:1838 +#: include/functions.php:1833 msgid "Starred articles" msgstr "Stjärnmärkta artiklar" -#: include/functions.php:1840 +#: include/functions.php:1835 msgid "Published articles" msgstr "Publicerade artiklar" -#: include/functions.php:1842 +#: include/functions.php:1837 msgid "Fresh articles" msgstr "Nya artiklar" -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1839 include/functions.php:1951 msgid "All articles" msgstr "Alla artiklar" -#: include/functions.php:1846 +#: include/functions.php:1841 msgid "Archived articles" msgstr "Arkiverade artiklar" -#: include/functions.php:1848 +#: include/functions.php:1843 msgid "Recently read" msgstr "Nyligen lästa" -#: include/functions.php:1911 +#: include/functions.php:1906 msgid "Navigation" msgstr "Navigation" -#: include/functions.php:1912 +#: include/functions.php:1907 msgid "Open next feed" -msgstr "Öppna nästa kanal" +msgstr "Öppna nästa flöde" -#: include/functions.php:1913 +#: include/functions.php:1908 msgid "Open previous feed" -msgstr "Öppna föregÃ¥ende kanal" +msgstr "Öppna föregÃ¥ende flöde" -#: include/functions.php:1914 +#: include/functions.php:1909 msgid "Open next article" msgstr "Öppna näst artikel" -#: include/functions.php:1915 +#: include/functions.php:1910 msgid "Open previous article" msgstr "Öppna föregÃ¥ende artikel" -#: include/functions.php:1916 +#: include/functions.php:1911 msgid "Open next article (don't scroll long articles)" msgstr "Öppna nästa artikel (skrolla inte lÃ¥nga artiklar)" -#: include/functions.php:1917 +#: include/functions.php:1912 msgid "Open previous article (don't scroll long articles)" msgstr "Öppna föregÃ¥ende artikel (skrolla inte lÃ¥nga artiklar)" -#: include/functions.php:1918 -#, fuzzy -msgid "Move to next article (don't expand or mark read)" -msgstr "Öppna nästa artikel (skrolla inte lÃ¥nga artiklar)" - -#: include/functions.php:1919 -#, fuzzy -msgid "Move to previous article (don't expand or mark read)" -msgstr "Öppna föregÃ¥ende artikel (skrolla inte lÃ¥nga artiklar)" - -#: include/functions.php:1920 +#: include/functions.php:1913 msgid "Show search dialog" msgstr "Visa sökdialogen" -#: include/functions.php:1921 +#: include/functions.php:1914 msgid "Article" msgstr "Artikel" -#: include/functions.php:1922 +#: include/functions.php:1915 msgid "Toggle starred" msgstr "Växla stjärnmarkering" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1916 js/viewfeed.js:1863 msgid "Toggle published" msgstr "Växla publicering" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1917 js/viewfeed.js:1841 msgid "Toggle unread" msgstr "Växla olästa" -#: include/functions.php:1925 +#: include/functions.php:1918 msgid "Edit tags" msgstr "Redigera taggar" -#: include/functions.php:1926 -#, fuzzy +#: include/functions.php:1919 msgid "Dismiss selected" msgstr "Avvisa markerade" -#: include/functions.php:1927 -#, fuzzy +#: include/functions.php:1920 msgid "Dismiss read" msgstr "Avvisa lästa" -#: include/functions.php:1928 +#: include/functions.php:1921 msgid "Open in new window" msgstr "Öppna i nytt fönster" -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1922 js/viewfeed.js:1882 msgid "Mark below as read" msgstr "Märk nedanstÃ¥ende som lästa" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1923 js/viewfeed.js:1876 msgid "Mark above as read" msgstr "Märk ovanstÃ¥ende som lästa" -#: include/functions.php:1931 +#: include/functions.php:1924 msgid "Scroll down" msgstr "Skrolla ned" -#: include/functions.php:1932 +#: include/functions.php:1925 msgid "Scroll up" msgstr "Skrolla upp" -#: include/functions.php:1933 -#, fuzzy +#: include/functions.php:1926 msgid "Select article under cursor" -msgstr "Välj markerad artikel" +msgstr "Välj artikel under pekare" -#: include/functions.php:1934 +#: include/functions.php:1927 msgid "Email article" msgstr "Skicka artikel med e-post" -#: include/functions.php:1935 -#, fuzzy +#: include/functions.php:1928 msgid "Close/collapse article" -msgstr "Stäng artikel" - -#: include/functions.php:1936 -#, fuzzy -msgid "Toggle article expansion (combined mode)" -msgstr "Växla komboläge" +msgstr "Stäng/minimera artikel" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 -#, fuzzy +#: include/functions.php:1930 plugins/embed_original/init.php:33 msgid "Toggle embed original" -msgstr "Växla visa orginal" +msgstr "Stäng av/sätt pÃ¥ inbäddade original" -#: include/functions.php:1939 +#: include/functions.php:1931 msgid "Article selection" msgstr "Artikelval" -#: include/functions.php:1940 +#: include/functions.php:1932 msgid "Select all articles" -msgstr "Välj alla" +msgstr "Välj alla artiklar" -#: include/functions.php:1941 +#: include/functions.php:1933 msgid "Select unread" msgstr "Välj olästa" -#: include/functions.php:1942 +#: include/functions.php:1934 msgid "Select starred" msgstr "Välj markerade" -#: include/functions.php:1943 +#: include/functions.php:1935 msgid "Select published" msgstr "Välj publicerade" -#: include/functions.php:1944 +#: include/functions.php:1936 msgid "Invert selection" msgstr "Invertera val" -#: include/functions.php:1945 +#: include/functions.php:1937 msgid "Deselect everything" msgstr "Avmarkera allt" -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 +#: include/functions.php:1938 classes/pref/feeds.php:521 #: classes/pref/feeds.php:754 msgid "Feed" -msgstr "Kanal" +msgstr "Flöde" -#: include/functions.php:1947 +#: include/functions.php:1939 msgid "Refresh current feed" -msgstr "Uppdatera aktuell kanal" +msgstr "Uppdatera aktuellt flöde" -#: include/functions.php:1948 +#: include/functions.php:1940 msgid "Un/hide read feeds" -msgstr "Växla visning av lästa kanaler" +msgstr "Visa/dölj lästa flöden" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1941 classes/pref/feeds.php:1275 msgid "Subscribe to feed" -msgstr "Prenumerera pÃ¥ kanal" +msgstr "Prenumerera pÃ¥ flöde" -#: include/functions.php:1950 -#: js/FeedTree.js:135 -#: js/PrefFeedTree.js:67 +#: include/functions.php:1942 js/FeedTree.js:135 js/PrefFeedTree.js:67 msgid "Edit feed" -msgstr "Redigera kanal" +msgstr "Redigera flöde" -#: include/functions.php:1952 -#, fuzzy +#: include/functions.php:1944 msgid "Reverse headlines" msgstr "Omvänd sortering pÃ¥ rubrik" -#: include/functions.php:1953 +#: include/functions.php:1945 msgid "Debug feed update" -msgstr "Debugga kanaluppdatering" +msgstr "Felsök flödesuppdatering" -#: include/functions.php:1954 -#: js/FeedTree.js:178 +#: include/functions.php:1946 js/FeedTree.js:178 msgid "Mark all feeds as read" -msgstr "Märk alla kanaler som lästa" +msgstr "Märk alla flöden som lästa" -#: include/functions.php:1955 +#: include/functions.php:1947 msgid "Un/collapse current category" msgstr "Öppna/stäng aktuell kategori:" -#: include/functions.php:1956 +#: include/functions.php:1948 msgid "Toggle combined mode" msgstr "Växla komboläge" -#: include/functions.php:1957 -#, fuzzy +#: include/functions.php:1949 msgid "Toggle auto expand in combined mode" -msgstr "Växla komboläge" +msgstr "Aktivera automatisk expandering i kombinerat läge" -#: include/functions.php:1958 +#: include/functions.php:1950 msgid "Go to" msgstr "GÃ¥ till" -#: include/functions.php:1960 +#: include/functions.php:1952 msgid "Fresh" msgstr "Nya" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:1955 js/tt-rss.js:431 js/tt-rss.js:584 msgid "Tag cloud" msgstr "Taggmoln" -#: include/functions.php:1965 +#: include/functions.php:1957 msgid "Other" msgstr "Övriga" -#: include/functions.php:1966 -#: classes/pref/labels.php:281 +#: include/functions.php:1958 classes/pref/labels.php:281 msgid "Create label" msgstr "Skapa etikett" -#: include/functions.php:1967 -#: classes/pref/filters.php:654 +#: include/functions.php:1959 classes/pref/filters.php:654 msgid "Create filter" msgstr "Skapa filter" -#: include/functions.php:1968 +#: include/functions.php:1960 msgid "Un/collapse sidebar" -msgstr "Växla sidomeny" +msgstr "Visa/dölj sidofält" -#: include/functions.php:1969 +#: include/functions.php:1961 msgid "Show help dialog" -msgstr "Hjälpfönster" +msgstr "Visa hjälpfönster" -#: include/functions.php:2492 +#: include/functions.php:2446 #, php-format msgid "Search results: %s" msgstr "Sökresultat: %s" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 +#: include/functions.php:2937 js/viewfeed.js:1969 msgid "Click to play" msgstr "Klicka för att starta" -#: include/functions.php:2986 -#: js/viewfeed.js:2023 +#: include/functions.php:2938 js/viewfeed.js:1968 msgid "Play" msgstr "Start" -#: include/functions.php:3104 +#: include/functions.php:3055 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3077 include/functions.php:3371 #: classes/article.php:281 msgid "no tags" msgstr "Inga taggar" -#: include/functions.php:3136 -#: classes/feeds.php:689 +#: include/functions.php:3087 classes/feeds.php:686 msgid "Edit tags for this article" msgstr "Redigera taggar för denna artikel" -#: include/functions.php:3170 -#: classes/feeds.php:641 +#: include/functions.php:3116 classes/feeds.php:642 msgid "Originally from:" msgstr "Ursprungligen frÃ¥n:" -#: include/functions.php:3183 -#: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: include/functions.php:3129 classes/feeds.php:655 classes/pref/feeds.php:540 msgid "Feed URL" -msgstr "Kanal-URL" - -#: include/functions.php:3215 -#: classes/dlg.php:37 -#: classes/dlg.php:60 -#: classes/dlg.php:93 -#: classes/dlg.php:159 -#: classes/dlg.php:190 -#: classes/dlg.php:217 -#: classes/dlg.php:250 -#: classes/dlg.php:262 -#: classes/backend.php:105 -#: classes/pref/users.php:99 -#: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +msgstr "URL för flöde" + +#: include/functions.php:3160 classes/dlg.php:37 classes/dlg.php:60 +#: classes/dlg.php:93 classes/dlg.php:159 classes/dlg.php:190 +#: classes/dlg.php:217 classes/dlg.php:250 classes/dlg.php:262 +#: classes/backend.php:105 classes/pref/users.php:99 +#: classes/pref/filters.php:147 classes/pref/prefs.php:1059 +#: classes/pref/feeds.php:1588 classes/pref/feeds.php:1660 +#: plugins/import_export/init.php:406 plugins/import_export/init.php:429 +#: plugins/googlereaderimport/init.php:168 plugins/share/init.php:67 +#: plugins/updater/init.php:361 msgid "Close this window" msgstr "Stäng fönstret" -#: include/functions.php:3451 +#: include/functions.php:3396 msgid "(edit note)" msgstr "(Redigera notering)" -#: include/functions.php:3686 +#: include/functions.php:3631 msgid "unknown type" msgstr "Okänd typ" -#: include/functions.php:3742 +#: include/functions.php:3687 msgid "Attachments" msgstr "Bilagor" -#: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 -#: plugins/mobile/login_form.php:40 +#: include/login_form.php:183 classes/handler/public.php:483 +#: classes/handler/public.php:771 plugins/mobile/login_form.php:40 msgid "Login:" msgstr "Användarnamn:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:192 classes/handler/public.php:486 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "Lösenord:" #: include/login_form.php:197 -#, fuzzy msgid "I forgot my password" -msgstr "Felaktigt lösenord" +msgstr "Jag har glömt mitt lösenord" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 +#: include/login_form.php:201 classes/handler/public.php:489 msgid "Language:" msgstr "SprÃ¥k:" @@ -894,10 +865,8 @@ msgstr "SprÃ¥k:" msgid "Profile:" msgstr "Profil:" -#: include/login_form.php:213 -#: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: include/login_form.php:213 classes/handler/public.php:233 +#: classes/rpc.php:64 classes/pref/prefs.php:995 msgid "Default profile" msgstr "Standardprofil" @@ -907,15 +876,14 @@ msgstr "Använd mindre datatrafik" #: include/login_form.php:229 msgid "Remember me" -msgstr "" +msgstr "Kom ihÃ¥g mig" -#: include/login_form.php:235 -#: classes/handler/public.php:499 +#: include/login_form.php:235 classes/handler/public.php:499 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "Logga in" -#: include/sessions.php:62 +#: include/sessions.php:58 msgid "Session failed to validate (incorrect IP)" msgstr "Kunde inte verifiera session (fel IP)" @@ -927,44 +895,28 @@ msgstr "Hittar inte artikel." msgid "Tags for this article (separated by commas):" msgstr "Taggar för denna artikel (kommaseparerade):" -#: classes/article.php:204 -#: classes/pref/users.php:176 -#: classes/pref/labels.php:79 -#: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/article.php:204 classes/pref/users.php:176 +#: classes/pref/labels.php:79 classes/pref/filters.php:405 +#: classes/pref/prefs.php:941 classes/pref/feeds.php:733 +#: classes/pref/feeds.php:881 plugins/nsfw/init.php:86 +#: plugins/note/init.php:53 plugins/instances/init.php:248 msgid "Save" msgstr "Spara" -#: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 -#: classes/feeds.php:1037 -#: classes/feeds.php:1089 -#: classes/feeds.php:1149 -#: classes/pref/users.php:178 -#: classes/pref/labels.php:81 -#: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 +#: classes/article.php:206 classes/handler/public.php:460 +#: classes/handler/public.php:502 classes/feeds.php:1028 +#: classes/feeds.php:1080 classes/feeds.php:1140 classes/pref/users.php:178 +#: classes/pref/labels.php:81 classes/pref/filters.php:408 +#: classes/pref/filters.php:804 classes/pref/filters.php:880 +#: classes/pref/filters.php:947 classes/pref/prefs.php:943 +#: classes/pref/feeds.php:734 classes/pref/feeds.php:884 +#: classes/pref/feeds.php:1797 plugins/mail/init.php:126 +#: plugins/note/init.php:55 plugins/instances/init.php:251 #: plugins/instances/init.php:440 msgid "Cancel" msgstr "Avbryt" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:424 plugins/bookmarklets/init.php:38 msgid "Share with Tiny Tiny RSS" msgstr "Dela med Tiny Tiny RSS" @@ -972,10 +924,8 @@ msgstr "Dela med Tiny Tiny RSS" msgid "Title:" msgstr "Titel:" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 +#: classes/handler/public.php:434 classes/pref/feeds.php:538 +#: classes/pref/feeds.php:769 plugins/instances/init.php:215 #: plugins/instances/init.php:405 msgid "URL:" msgstr "URL:" @@ -1002,119 +952,115 @@ msgstr "Inte inloggad" #: classes/handler/public.php:548 msgid "Incorrect username or password" -msgstr "Felaktig inloggning" +msgstr "Felaktigt användarnamn eller lösenord" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:584 classes/handler/public.php:681 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "Du prenumererar redan pÃ¥ <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:587 classes/handler/public.php:672 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "Prenumererar pÃ¥ <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:590 classes/handler/public.php:675 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "Kunde inte prenumerera pÃ¥ <b>%s</b>." -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:593 classes/handler/public.php:678 #, php-format msgid "No feeds found in <b>%s</b>." -msgstr "Hittade inga kanaler pÃ¥ <b>%s</b>." +msgstr "Hittade inga flöden i <b>%s</b>." -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:596 classes/handler/public.php:684 msgid "Multiple feed URLs found." -msgstr "Hittade flera kanal-URLs." +msgstr "Hittade flera flödes-URLer." -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:600 classes/handler/public.php:689 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "Kunde inte prenumerera pÃ¥ <b>%s</b> <br>Kan inte ladda ned URL " -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:618 classes/handler/public.php:707 msgid "Subscribe to selected feed" -msgstr "Prenumerera pÃ¥ vald kanal" +msgstr "Prenumerera pÃ¥ valt flöde" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:643 classes/handler/public.php:731 msgid "Edit subscription options" msgstr "Redigera prenumerationsinställningar" #: classes/handler/public.php:758 -#, fuzzy msgid "Password recovery" -msgstr "Lösenord" +msgstr "Ã…terställning av lösenord" #: classes/handler/public.php:764 -msgid "You will need to provide valid account name and email. New password will be sent on your email address." +msgid "" +"You will need to provide valid account name and email. New password will be " +"sent on your email address." msgstr "" +"Du mÃ¥ste uppge ett giltigt kontonamn och e-postadress. Ett ny lösenord " +"kommer att skickas till din e-post." -#: classes/handler/public.php:786 -#: classes/pref/users.php:360 +#: classes/handler/public.php:786 classes/pref/users.php:360 msgid "Reset password" msgstr "Ã…terställ lösenord" #: classes/handler/public.php:796 msgid "Some of the required form parameters are missing or incorrect." msgstr "" +"Vissa av dom obligatoriska formulärparametrarna saknas eller är inkorrekta." -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 +#: classes/handler/public.php:800 classes/handler/public.php:826 #: plugins/digest/digest_body.php:69 -#, fuzzy msgid "Go back" -msgstr "Ã…ter" +msgstr "GÃ¥ tillbaka" #: classes/handler/public.php:822 msgid "Sorry, login and email combination not found." msgstr "" - -#: classes/handler/public.php:842 -msgid "Your access level is insufficient to run this script." -msgstr "Du har inte behörighet att köra detta skript." - -#: classes/handler/public.php:866 -msgid "Database Updater" -msgstr "Databasuppdatering" - -#: classes/handler/public.php:931 -msgid "Perform updates" -msgstr "Utför uppdatering" +"Beklagar, kombinationen av användarnamn och e-postadress kunde inte hittas." #: classes/dlg.php:16 -msgid "If you have imported labels and/or filters, you might need to reload preferences to see your new data." -msgstr "Om du har importerat etiketter eller filter mÃ¥ste du ladda om inställningarna för att se uppdateringarna" +msgid "" +"If you have imported labels and/or filters, you might need to reload " +"preferences to see your new data." +msgstr "" +"Om du har importerat etiketter eller filter mÃ¥ste du ladda om " +"inställningarna för att se uppdateringarna" #: classes/dlg.php:48 msgid "Your Public OPML URL is:" msgstr "Din publika OPML-URL är:" -#: classes/dlg.php:57 -#: classes/dlg.php:214 +#: classes/dlg.php:57 classes/dlg.php:214 msgid "Generate new URL" msgstr "Skapa ny URL" #: classes/dlg.php:71 -msgid "Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner." -msgstr "Uppdateringsdemon är aktiverad i konfigurationen, men processen körs inte. Detta förhindrar alla kanaler frÃ¥n att uppdateras. Starta om processen eller kontakta den som administrerar instansen." +msgid "" +"Update daemon is enabled in configuration, but daemon process is not " +"running, which prevents all feeds from updating. Please start the daemon " +"process or contact instance owner." +msgstr "" +"Uppdateringsdemon är aktiverad i konfigurationen, men processen körs inte. " +"Detta förhindrar alla flöden frÃ¥n att uppdateras. Starta om processen eller " +"kontakta den som administrerar instansen." -#: classes/dlg.php:75 -#: classes/dlg.php:84 +#: classes/dlg.php:75 classes/dlg.php:84 msgid "Last update:" msgstr "Senaste uppdatering:" #: classes/dlg.php:80 -msgid "Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner." -msgstr "Uppdateringsprocessen tar för lÃ¥ng tid pÃ¥ sig att uppdatera. Detta kan indikera en lÃ¥sning eller hängning. Kontrollera processen eller kontakta administratören." +msgid "" +"Update daemon is taking too long to perform a feed update. This could " +"indicate a problem like crash or a hang. Please check the daemon process or " +"contact instance owner." +msgstr "" +"Uppdateringsprocessen tar för lÃ¥ng tid pÃ¥ sig att uppdatera. Detta kan " +"indikera en lÃ¥sning eller hängning. Kontrollera processen eller kontakta " +"administratören." #: classes/dlg.php:166 msgid "Match:" @@ -1134,26 +1080,28 @@ msgstr "Vilka taggar?" #: classes/dlg.php:186 msgid "Display entries" -msgstr "Visa " +msgstr "Visa poster" #: classes/dlg.php:205 msgid "You can view this feed as RSS using the following URL:" -msgstr "Du kan se denna kanal som RSS pÃ¥ följande URL:" +msgstr "Du kan se detta flöde som RSS pÃ¥ följande URL:" -#: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: classes/dlg.php:233 plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Ny version av Tiny Tiny RSS tillgänglig(%s)." #: classes/dlg.php:241 -msgid "You can update using built-in updater in the Preferences or by using update.php" -msgstr "Du kan uppdatera med din inbyggda uppdateraren under Inställningar eller med update.php" +msgid "" +"You can update using built-in updater in the Preferences or by using update." +"php" +msgstr "" +"Du kan uppdatera med din inbyggda uppdateraren under Inställningar eller med " +"update.php" -#: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: classes/dlg.php:245 plugins/updater/init.php:335 msgid "See the release notes" -msgstr "" +msgstr "Se releasenoteringar" #: classes/dlg.php:247 msgid "Download" @@ -1169,11 +1117,9 @@ msgstr "Besök den officiella webbsiten" #: classes/feeds.php:83 msgid "View as RSS feed" -msgstr "Visa RSS-kanal" +msgstr "Visa RSS-flöde" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:84 classes/feeds.php:138 classes/pref/feeds.php:1440 msgid "View as RSS" msgstr "Visa som RSS" @@ -1181,19 +1127,12 @@ msgstr "Visa som RSS" msgid "Select:" msgstr "Markera:" -#: classes/feeds.php:92 -#: classes/pref/users.php:345 -#: classes/pref/labels.php:275 -#: classes/pref/filters.php:282 -#: classes/pref/filters.php:330 -#: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/feeds.php:92 classes/pref/users.php:345 classes/pref/labels.php:275 +#: classes/pref/filters.php:282 classes/pref/filters.php:330 +#: classes/pref/filters.php:648 classes/pref/filters.php:737 +#: classes/pref/filters.php:764 classes/pref/prefs.php:955 +#: classes/pref/feeds.php:1266 classes/pref/feeds.php:1536 +#: classes/pref/feeds.php:1606 plugins/instances/init.php:290 msgid "All" msgstr "Alla" @@ -1201,19 +1140,12 @@ msgstr "Alla" msgid "Invert" msgstr "Invertera" -#: classes/feeds.php:95 -#: classes/pref/users.php:347 -#: classes/pref/labels.php:277 -#: classes/pref/filters.php:284 -#: classes/pref/filters.php:332 -#: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/feeds.php:95 classes/pref/users.php:347 classes/pref/labels.php:277 +#: classes/pref/filters.php:284 classes/pref/filters.php:332 +#: classes/pref/filters.php:650 classes/pref/filters.php:739 +#: classes/pref/filters.php:766 classes/pref/prefs.php:957 +#: classes/pref/feeds.php:1268 classes/pref/feeds.php:1538 +#: classes/pref/feeds.php:1608 plugins/instances/init.php:292 msgid "None" msgstr "Ingen" @@ -1239,176 +1171,156 @@ msgstr "Arkiv" #: classes/feeds.php:117 msgid "Move back" -msgstr "Ã…ter" +msgstr "GÃ¥ tillbaka" -#: classes/feeds.php:118 -#: classes/pref/filters.php:291 -#: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 +#: classes/feeds.php:118 classes/pref/filters.php:291 +#: classes/pref/filters.php:339 classes/pref/filters.php:746 #: classes/pref/filters.php:773 msgid "Delete" msgstr "Radera" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 +#: classes/feeds.php:125 classes/feeds.php:130 plugins/mailto/init.php:28 #: plugins/mail/init.php:28 msgid "Forward by email" msgstr "Skicka med e-post" #: classes/feeds.php:134 msgid "Feed:" -msgstr "Kanal:" +msgstr "Flöde:" -#: classes/feeds.php:205 -#: classes/feeds.php:837 +#: classes/feeds.php:205 classes/feeds.php:831 msgid "Feed not found." -msgstr "Hittar inte kanal." +msgstr "Kunde inte hitta flöde." -#: classes/feeds.php:387 -#, fuzzy, php-format +#: classes/feeds.php:388 +#, php-format msgid "Imported at %s" -msgstr "Importera" +msgstr "Importerad kl. %s" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "markera som läst" -#: classes/feeds.php:585 +#: classes/feeds.php:586 msgid "Collapse article" -msgstr "Stäng artikel" +msgstr "Minimera artikel" -#: classes/feeds.php:738 +#: classes/feeds.php:732 msgid "No unread articles found to display." msgstr "Hittade inga olästa artiklar." -#: classes/feeds.php:741 +#: classes/feeds.php:735 msgid "No updated articles found to display." msgstr "Hittade inga uppdaterade artiklar." -#: classes/feeds.php:744 +#: classes/feeds.php:738 msgid "No starred articles found to display." msgstr "Hittade inga stjärnmarkerade artiklar." -#: classes/feeds.php:748 -#, fuzzy -msgid "No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter." -msgstr "Hittade inga artiklar att visa. Du kan ge artiklar etiketter manuellt (Se aktiviteter-menyn ovan) eller genom att använd ett filter" +#: classes/feeds.php:742 +msgid "" +"No articles found to display. You can assign articles to labels manually " +"from article header context menu (applies to all selected articles) or use a " +"filter." +msgstr "" +"Hittade inga artiklar att visa. Du kan ge artiklar etiketter manuellt via " +"snabbmenyn för artiklar (gäller alla valda artiklar) eller genom att använda " +"filter." -#: classes/feeds.php:750 +#: classes/feeds.php:744 msgid "No articles found to display." msgstr "Hittade inga artiklar att visa." -#: classes/feeds.php:765 -#: classes/feeds.php:932 +#: classes/feeds.php:759 classes/feeds.php:923 #, php-format msgid "Feeds last updated at %s" -msgstr "Kanaler senast uppdaterade %s" +msgstr "Flöden senast uppdaterade %s" -#: classes/feeds.php:775 -#: classes/feeds.php:942 +#: classes/feeds.php:769 classes/feeds.php:933 msgid "Some feeds have update errors (click for details)" -msgstr "Vissa kanaler har uppdateringsfel (klicka för detaljer)" +msgstr "Vissa flöden har uppdateringsfel (klicka för detaljer)" -#: classes/feeds.php:922 +#: classes/feeds.php:913 msgid "No feed selected." -msgstr "Ingen kanal vald." +msgstr "Inget flöde valt." -#: classes/feeds.php:975 -#: classes/feeds.php:983 +#: classes/feeds.php:966 classes/feeds.php:974 msgid "Feed or site URL" -msgstr "URL för kanal eller webbplats" +msgstr "URL för flöde eller webbplats" -#: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/feeds.php:980 classes/pref/feeds.php:560 classes/pref/feeds.php:782 +#: classes/pref/feeds.php:1761 msgid "Place in category:" -msgstr "Lägg i kategori:" +msgstr "Placera i kategori:" -#: classes/feeds.php:997 +#: classes/feeds.php:988 msgid "Available feeds" -msgstr "Tillgängliga kanaler" +msgstr "Tillgängliga flöden" -#: classes/feeds.php:1009 -#: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/feeds.php:1000 classes/pref/users.php:139 +#: classes/pref/feeds.php:590 classes/pref/feeds.php:818 msgid "Authentication" -msgstr "Autenticering" +msgstr "Autentisering" -#: classes/feeds.php:1013 -#: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/feeds.php:1004 classes/pref/users.php:402 +#: classes/pref/feeds.php:596 classes/pref/feeds.php:822 +#: classes/pref/feeds.php:1775 msgid "Login" msgstr "Användarnamn" -#: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/feeds.php:1007 classes/pref/prefs.php:253 +#: classes/pref/feeds.php:602 classes/pref/feeds.php:828 +#: classes/pref/feeds.php:1778 msgid "Password" msgstr "Lösenord" -#: classes/feeds.php:1026 +#: classes/feeds.php:1017 msgid "This feed requires authentication." -msgstr "Denna kanal kräver autenticering." +msgstr "Detta flöde kräver autentisering." -#: classes/feeds.php:1031 -#: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/feeds.php:1022 classes/feeds.php:1078 classes/pref/feeds.php:1796 msgid "Subscribe" msgstr "Prenumerera" -#: classes/feeds.php:1034 +#: classes/feeds.php:1025 msgid "More feeds" -msgstr "Fler kanaler" - -#: classes/feeds.php:1057 -#: classes/feeds.php:1148 -#: classes/pref/users.php:332 -#: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +msgstr "Fler flöden" + +#: classes/feeds.php:1048 classes/feeds.php:1139 classes/pref/users.php:332 +#: classes/pref/filters.php:641 classes/pref/feeds.php:1259 js/tt-rss.js:170 msgid "Search" msgstr "Sök" -#: classes/feeds.php:1061 +#: classes/feeds.php:1052 msgid "Popular feeds" -msgstr "Populära kanaler" +msgstr "Populära flöden" -#: classes/feeds.php:1062 +#: classes/feeds.php:1053 msgid "Feed archive" -msgstr "Kanalarkiv" +msgstr "Flödesarkiv" -#: classes/feeds.php:1065 +#: classes/feeds.php:1056 msgid "limit:" -msgstr "Gräns:" - -#: classes/feeds.php:1088 -#: classes/pref/users.php:358 -#: classes/pref/labels.php:284 -#: classes/pref/filters.php:398 -#: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 +msgstr "gräns:" + +#: classes/feeds.php:1079 classes/pref/users.php:358 +#: classes/pref/labels.php:284 classes/pref/filters.php:398 +#: classes/pref/filters.php:667 classes/pref/feeds.php:707 #: plugins/instances/init.php:297 msgid "Remove" msgstr "Ta bort" -#: classes/feeds.php:1099 +#: classes/feeds.php:1090 msgid "Look for" msgstr "Sök efter" -#: classes/feeds.php:1107 +#: classes/feeds.php:1098 msgid "Limit search to:" msgstr "Begränsa sökning till:" -#: classes/feeds.php:1123 +#: classes/feeds.php:1114 msgid "This feed" -msgstr "Denna kanal" +msgstr "Detta flöde" #: classes/backend.php:33 msgid "Other interface tips are available in the Tiny Tiny RSS wiki." @@ -1430,10 +1342,9 @@ msgstr "Ctrl" msgid "Help topic not found." msgstr "Hittade inte nÃ¥got hjälpavsnitt." -#: classes/opml.php:28 -#: classes/opml.php:33 +#: classes/opml.php:28 classes/opml.php:33 msgid "OPML Utility" -msgstr "OPML verktyg" +msgstr "OPML-verktyg" #: classes/opml.php:37 msgid "Importing OPML..." @@ -1441,17 +1352,17 @@ msgstr "Importera OPML..." #: classes/opml.php:41 msgid "Return to preferences" -msgstr "Ã…ter till inställningarna" +msgstr "Ã…tergÃ¥ till inställningar" #: classes/opml.php:270 #, php-format msgid "Adding feed: %s" -msgstr "Lägger till kanal: %s" +msgstr "Lägger till flöde: %s" #: classes/opml.php:281 #, php-format msgid "Duplicate feed: %s" -msgstr "Kanaldubblett: %s" +msgstr "Dublett av flöde: %s" #: classes/opml.php:295 #, php-format @@ -1481,36 +1392,33 @@ msgstr "Bearbetar kategori: %s" msgid "Error: please upload OPML file." msgstr "Fel: vänligen ladda upp en OPMLfil." -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:475 plugins/googlereaderimport/init.php:161 msgid "Error while parsing document." -msgstr "Fel i tolkning av dokument." +msgstr "Fel vid tolkning av dokument." -#: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/users.php:6 plugins/instances/init.php:157 msgid "Your access level is insufficient to open this tab." -msgstr "Du har inte rättigheter att öppna denna flik" +msgstr "Du saknar behörighet för att öppna denna flik" #: classes/pref/users.php:34 msgid "User not found" -msgstr "Hittade inte användare" +msgstr "Hittade inte användaren" -#: classes/pref/users.php:53 -#: classes/pref/users.php:404 +#: classes/pref/users.php:53 classes/pref/users.php:404 msgid "Registered" msgstr "Registrerad" #: classes/pref/users.php:54 msgid "Last logged in" -msgstr "Senste inloggning" +msgstr "Senast inloggad" #: classes/pref/users.php:61 msgid "Subscribed feeds count" -msgstr "Antal prenumererade kanaler" +msgstr "Antal flödesprenumerationer" #: classes/pref/users.php:65 msgid "Subscribed feeds" -msgstr "Prenumererade kanaler" +msgstr "Prenumererade flöden" #: classes/pref/users.php:142 msgid "Access level: " @@ -1520,8 +1428,7 @@ msgstr "BehörighetsnivÃ¥: " msgid "Change password to" msgstr "Nytt lösenord" -#: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 +#: classes/pref/users.php:161 classes/pref/feeds.php:610 #: classes/pref/feeds.php:834 msgid "Options" msgstr "Alternativ" @@ -1533,7 +1440,7 @@ msgstr "E-post: " #: classes/pref/users.php:240 #, php-format msgid "Added user <b>%s</b> with password <b>%s</b>" -msgstr "Lade til användare <b>%s</b> med lösenord <b>%s</b>" +msgstr "Lade till användare <b>%s</b> med lösenord <b>%s</b>" #: classes/pref/users.php:247 #, php-format @@ -1543,34 +1450,28 @@ msgstr "Kunde inte skapa användare <b>%s</b>" #: classes/pref/users.php:251 #, php-format msgid "User <b>%s</b> already exists." -msgstr "Användare <b>%s</b> finns redan." +msgstr "Användaren <b>%s</b> finns redan." #: classes/pref/users.php:273 -#, fuzzy, php-format +#, php-format msgid "Changed password of user <b>%s</b> to <b>%s</b>" msgstr "Lösenord för användare <b>%s</b> ändrat till <b>%s</b>" #: classes/pref/users.php:275 -#, fuzzy, php-format +#, php-format msgid "Sending new password of user <b>%s</b> to <b>%s</b>" -msgstr "Lösenord för användare <b>%s</b> ändrat till <b>%s</b>" +msgstr "Nytt lösenord för användare <b>%s</b> skickat till <b>%s</b>" #: classes/pref/users.php:299 msgid "[tt-rss] Password change notification" -msgstr "[tt-rss] Info: Nytt lösenord" - -#: classes/pref/users.php:342 -#: classes/pref/labels.php:272 -#: classes/pref/filters.php:279 -#: classes/pref/filters.php:327 -#: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +msgstr "[tt-rss] Notifikation för ändring av lösenord" + +#: classes/pref/users.php:342 classes/pref/labels.php:272 +#: classes/pref/filters.php:279 classes/pref/filters.php:327 +#: classes/pref/filters.php:645 classes/pref/filters.php:734 +#: classes/pref/filters.php:761 classes/pref/prefs.php:952 +#: classes/pref/feeds.php:1263 classes/pref/feeds.php:1533 +#: classes/pref/feeds.php:1603 plugins/instances/init.php:287 msgid "Select" msgstr "Markera" @@ -1582,8 +1483,7 @@ msgstr "Skapa användare" msgid "Details" msgstr "Detaljer" -#: classes/pref/users.php:356 -#: classes/pref/filters.php:660 +#: classes/pref/users.php:356 classes/pref/filters.php:660 #: plugins/instances/init.php:296 msgid "Edit" msgstr "Redigera" @@ -1596,8 +1496,7 @@ msgstr "BehörighetsnivÃ¥" msgid "Last login" msgstr "Senaste inloggning" -#: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: classes/pref/users.php:426 plugins/instances/init.php:337 msgid "Click to edit" msgstr "Klicka för att redigera" @@ -1609,8 +1508,7 @@ msgstr "Inga användare definierade." msgid "No matching users found." msgstr "Hittade inga matchande användare." -#: classes/pref/labels.php:22 -#: classes/pref/filters.php:268 +#: classes/pref/labels.php:22 classes/pref/filters.php:268 #: classes/pref/filters.php:725 msgid "Caption" msgstr "Titel" @@ -1621,11 +1519,11 @@ msgstr "Färger" #: classes/pref/labels.php:42 msgid "Foreground:" -msgstr "Förgrund" +msgstr "Förgrund:" #: classes/pref/labels.php:42 msgid "Background:" -msgstr "Bakgrund" +msgstr "Bakgrund:" #: classes/pref/labels.php:232 #, php-format @@ -1645,70 +1543,62 @@ msgid "No recent articles matching this filter have been found." msgstr "Inga nya artiklar som matchar detta filter funna." #: classes/pref/filters.php:137 -msgid "Complex expressions might not give results while testing due to issues with database server regexp implementation." -msgstr "Komplexa uttryck kanske inte ger nÃ¥gra testresultat pÃ¥ grund av problem med databasens regexpimplementation" +msgid "" +"Complex expressions might not give results while testing due to issues with " +"database server regexp implementation." +msgstr "" +"Komplexa uttryck kanske inte ger nÃ¥gra testresultat pÃ¥ grund av problem med " +"databasens regexpimplementation" -#: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 +#: classes/pref/filters.php:274 classes/pref/filters.php:729 #: classes/pref/filters.php:844 msgid "Match" -msgstr "Regler" +msgstr "Matcha" -#: classes/pref/filters.php:288 -#: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:288 classes/pref/filters.php:336 +#: classes/pref/filters.php:743 classes/pref/filters.php:770 msgid "Add" msgstr "Lägg till" -#: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:322 classes/pref/filters.php:756 msgid "Apply actions" -msgstr "Tillämpa" +msgstr "Tillämpa Ã¥tgärder" -#: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:372 classes/pref/filters.php:785 msgid "Enabled" -msgstr "Aktiverad" +msgstr "Aktiverat" -#: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:381 classes/pref/filters.php:788 msgid "Match any rule" msgstr "Matcha alla regler" -#: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 -#, fuzzy +#: classes/pref/filters.php:390 classes/pref/filters.php:791 msgid "Inverse matching" msgstr "Invertera matchning" -#: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:402 classes/pref/filters.php:798 msgid "Test" msgstr "Test" #: classes/pref/filters.php:435 -#, fuzzy msgid "(inverse)" -msgstr "Invertera" +msgstr "(invertera)" #: classes/pref/filters.php:434 -#, fuzzy, php-format +#, php-format msgid "%s on %s in %s %s" -msgstr "%s av %s i %s" +msgstr "%s pÃ¥ %s i %s %s" #: classes/pref/filters.php:657 msgid "Combine" msgstr "Kombinera" -#: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 +#: classes/pref/filters.php:663 classes/pref/feeds.php:1279 #: classes/pref/feeds.php:1293 msgid "Reset sort order" -msgstr "Ã…terställ sorteringsordningen" +msgstr "Ã…terställ sorteringsordning" -#: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/filters.php:671 classes/pref/feeds.php:1318 msgid "Rescore articles" msgstr "Poängsätt pÃ¥ nytt" @@ -1718,14 +1608,13 @@ msgstr "Skapa" #: classes/pref/filters.php:856 msgid "Inverse regular expression matching" -msgstr "" +msgstr "Invertera matchning av regulära uttryck" #: classes/pref/filters.php:858 msgid "on field" msgstr "i fält" -#: classes/pref/filters.php:864 -#: js/PrefFilterTree.js:45 +#: classes/pref/filters.php:864 js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "i" @@ -1734,8 +1623,7 @@ msgstr "i" msgid "Save rule" msgstr "Spara regel" -#: classes/pref/filters.php:877 -#: js/functions.js:1013 +#: classes/pref/filters.php:877 js/functions.js:1013 msgid "Add rule" msgstr "Tillämpa regel" @@ -1751,15 +1639,13 @@ msgstr "med parametrar:" msgid "Save action" msgstr "Spara aktivitet" -#: classes/pref/filters.php:944 -#: js/functions.js:1039 +#: classes/pref/filters.php:944 js/functions.js:1039 msgid "Add action" msgstr "Lägg till aktivitet" #: classes/pref/filters.php:967 -#, fuzzy msgid "[No caption]" -msgstr "Titel" +msgstr "[Inge titel]" #: classes/pref/prefs.php:18 msgid "General" @@ -1767,7 +1653,7 @@ msgstr "Generellt" #: classes/pref/prefs.php:19 msgid "Interface" -msgstr "Interface" +msgstr "Visning" #: classes/pref/prefs.php:20 msgid "Advanced" @@ -1775,33 +1661,36 @@ msgstr "Avancerat" #: classes/pref/prefs.php:21 msgid "Digest" -msgstr "" +msgstr "Sammanställning" #: classes/pref/prefs.php:25 -#, fuzzy msgid "Allow duplicate articles" -msgstr "TillÃ¥t dubbletter" +msgstr "TillÃ¥t dubbletter av artiklar" #: classes/pref/prefs.php:26 msgid "Assign articles to labels automatically" -msgstr "Ange etiketter för artiklar per automatik" +msgstr "Ange etiketter för artiklar automatiskt" #: classes/pref/prefs.php:27 msgid "Blacklisted tags" msgstr "Svartlistade taggar" #: classes/pref/prefs.php:27 -#, fuzzy -msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)." -msgstr "Använd inte följande taggar för automatisk taggning av artiklar (komma-separerad lista" +msgid "" +"When auto-detecting tags in articles these tags will not be applied (comma-" +"separated list)." +msgstr "" +"Använd inte följande taggar för automatisk taggning av artiklar (komma-" +"separerad lista)." #: classes/pref/prefs.php:28 msgid "Automatically mark articles as read" msgstr "Märk artiklar som lästa automatiskt" #: classes/pref/prefs.php:28 -#, fuzzy -msgid "This option enables marking articles as read automatically while you scroll article list." +msgid "" +"This option enables marking articles as read automatically while you scroll " +"article list." msgstr "Markera artiklar som lästa automatisk när du skrollar artikellistan" #: classes/pref/prefs.php:29 @@ -1810,57 +1699,59 @@ msgstr "Expandera artiklar automatiskt i kombinerat läge" #: classes/pref/prefs.php:30 msgid "Combined feed display" -msgstr "Kombinerad kanalvisning" +msgstr "Kombinerad flödesvisning" #: classes/pref/prefs.php:30 -msgid "Display expanded list of feed articles, instead of separate displays for headlines and article content" -msgstr "Visa expanderad lista med artiklar, istället för olika visningar för rubriker och artikeltext" +msgid "" +"Display expanded list of feed articles, instead of separate displays for " +"headlines and article content" +msgstr "" +"Visa expanderad lista med artiklar, istället för olika visningar för " +"rubriker och artikeltext" #: classes/pref/prefs.php:31 msgid "Confirm marking feed as read" -msgstr "Bekräfta markera kanal som läst" +msgstr "Bekräfta markera flöde som läst" #: classes/pref/prefs.php:32 msgid "Amount of articles to display at once" -msgstr "Visa XX artiklar per gÃ¥ng" - -#: classes/pref/prefs.php:33 -#, fuzzy -msgid "Default feed update interval" -msgstr "Standardintervall" +msgstr "Antal artiklar att visa samtidigt" #: classes/pref/prefs.php:33 -msgid "Shortest interval at which a feed will be checked for updates regardless of update method" -msgstr "" +msgid "Default interval between feed updates" +msgstr "Standardintervall mellan flödesuppdateringar" #: classes/pref/prefs.php:34 msgid "Mark articles in e-mail digest as read" msgstr "Flagga artiklar i e-postsammanfattning som lästa" #: classes/pref/prefs.php:35 -#, fuzzy msgid "Enable e-mail digest" msgstr "Aktivera e-postsammanfattning" #: classes/pref/prefs.php:35 -msgid "This option enables sending daily digest of new (and unread) headlines on your configured e-mail address" -msgstr "Skicka dagliga sammanställningar över nya (och olästa) rubriker till din e-post" +msgid "" +"This option enables sending daily digest of new (and unread) headlines on " +"your configured e-mail address" +msgstr "" +"Skicka dagliga sammanställningar över nya (och olästa) rubriker till din e-" +"post" #: classes/pref/prefs.php:36 msgid "Try to send digests around specified time" -msgstr "Skicka sammanfattningar kring klockan" +msgstr "Skicka sammanfattningar runt specificerad tid" #: classes/pref/prefs.php:36 msgid "Uses UTC timezone" -msgstr "Använd UTC-tid" +msgstr "Använder tidszonen UTC" #: classes/pref/prefs.php:37 msgid "Enable API access" -msgstr "" +msgstr "Aktivera tillgÃ¥ng till API" #: classes/pref/prefs.php:37 msgid "Allows external clients to access this account through the API" -msgstr "" +msgstr "TillÃ¥ter externa klienter att fÃ¥ tillgÃ¥ng till detta konto via API" #: classes/pref/prefs.php:38 msgid "Enable feed categories" @@ -1868,21 +1759,19 @@ msgstr "Aktivera kategorier" #: classes/pref/prefs.php:39 msgid "Sort feeds by unread articles count" -msgstr "Sortera kanal efter antal olästa artiklar" +msgstr "Sortera flöde efter antal olästa artiklar" #: classes/pref/prefs.php:40 msgid "Maximum age of fresh articles (in hours)" -msgstr "MaxÃ¥lder för nya artiklar (i timmar)" +msgstr "Maximal Ã¥lder för nya artiklar (i timmar)" #: classes/pref/prefs.php:41 -#, fuzzy msgid "Hide feeds with no unread articles" -msgstr "Dölj feeds utan olästa artiklar" +msgstr "Dölj flöden utan olästa artiklar" #: classes/pref/prefs.php:42 -#, fuzzy msgid "Show special feeds when hiding read feeds" -msgstr "Visa specialkanaler när lästa feeds är dolda" +msgstr "Visa specialflöden när lästa feeds är dolda" #: classes/pref/prefs.php:43 msgid "Long date format" @@ -1890,22 +1779,24 @@ msgstr "LÃ¥nga datum" #: classes/pref/prefs.php:44 msgid "On catchup show next feed" -msgstr "Visa nästa kanal när vi är ikapp" +msgstr "Visa nästa flöde när vi är ikapp" #: classes/pref/prefs.php:44 -msgid "Automatically open next feed with unread articles after marking one as read" -msgstr "Öppna automatiskt nästa kanal som har olästa artiklar efter att du markerat en som läst" +msgid "" +"Automatically open next feed with unread articles after marking one as read" +msgstr "" +"Öppna automatiskt nästa flöde som har olästa artiklar efter att du markerat " +"ett som läst" #: classes/pref/prefs.php:45 msgid "Purge articles after this number of days (0 - disables)" -msgstr "Radera artikel efter X dagar (0 - deaktiverar)" +msgstr "Rensa artikel efter X antal dagar (0 - inaktiverar)" #: classes/pref/prefs.php:46 msgid "Purge unread articles" -msgstr "Radera olästa artiklar" +msgstr "Rensa olästa artiklar" -#: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: classes/pref/prefs.php:47 plugins/mobile/prefs.php:60 msgid "Reverse headline order (oldest first)" msgstr "Omvänd sortering (äldsta överst)" @@ -1919,11 +1810,11 @@ msgstr "Förhandsgranska text i rubriklistan" #: classes/pref/prefs.php:50 msgid "Sort headlines by feed date" -msgstr "Sortera rubriker efter kanalens datum" +msgstr "Sortera rubriker efter flödets datum" #: classes/pref/prefs.php:50 msgid "Use feed-specified date to sort headlines instead of local import date." -msgstr "Sortera efer kanaldatum istället för efter importdatum" +msgstr "Sortera efter flödesdatum istället för efter importdatum" #: classes/pref/prefs.php:51 msgid "Login with an SSL certificate" @@ -1931,12 +1822,11 @@ msgstr "Logga in med SSL-certifikat" #: classes/pref/prefs.php:51 msgid "Click to register your SSL client certificate with tt-rss" -msgstr "Registerar ditt SSL klientcertifikat i tt-rss" +msgstr "Registerar ditt SSL-klientcertifikat i tt-rss" #: classes/pref/prefs.php:52 -#, fuzzy msgid "Do not embed images in articles" -msgstr "Baka inte in bilder i artiklar" +msgstr "Bädda inte in bilder i artiklar" #: classes/pref/prefs.php:53 msgid "Strip unsafe tags from articles" @@ -1946,26 +1836,27 @@ msgstr "Ta bort osäkra taggar frÃ¥n artiklar" msgid "Strip all but most common HTML tags when reading articles." msgstr "Ta bort alla utom de vanligast HTML-taggarna frÃ¥n artiklarna." -#: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: classes/pref/prefs.php:54 js/prefs.js:1725 msgid "Customize stylesheet" -msgstr "Anpassa stylesheet" +msgstr "Anpassa stilmall" #: classes/pref/prefs.php:54 msgid "Customize CSS stylesheet to your liking" -msgstr "Anpassa CSS Stylesheet" +msgstr "Anpassa CSS-stilmall efter eget tycke" #: classes/pref/prefs.php:55 msgid "User timezone" -msgstr "Användarens tidszon" +msgstr "Tidszon" #: classes/pref/prefs.php:56 msgid "Group headlines in virtual feeds" -msgstr "Gruppera rubriker i virtuella kanaler" +msgstr "Gruppera rubriker i virtuella flöden" #: classes/pref/prefs.php:56 msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" +"Speciella flöden, etiketter och kategorier är grupperade efter " +"ursprungsflöden" #: classes/pref/prefs.php:57 msgid "Select theme" @@ -1973,7 +1864,7 @@ msgstr "Välj tema" #: classes/pref/prefs.php:57 msgid "Select one of the available CSS themes" -msgstr "" +msgstr "Välj ett av dom tillgängliga CSS-temana" #: classes/pref/prefs.php:68 msgid "Old password cannot be blank." @@ -1991,221 +1882,227 @@ msgstr "Lösenorden stämmer inte överens." msgid "Function not supported by authentication module." msgstr "Funktionen stöds inte av autenticeringsmodulen." -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:120 msgid "The configuration was saved." -msgstr "Konfigurationen sparad." +msgstr "Konfiguration sparad." -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:134 #, php-format msgid "Unknown option: %s" msgstr "Okänt alternativ: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:148 msgid "Your personal data has been saved." msgstr "Dina personliga data sparas." -#: classes/pref/prefs.php:184 -msgid "Your preferences are now set to default values." -msgstr "" - -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:188 msgid "Personal data / Authentication" -msgstr "Personlig info / Authenticering" +msgstr "Personlig information / Autentisering" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:208 msgid "Personal data" -msgstr "Personlig info" +msgstr "Personlig information" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:218 msgid "Full name" msgstr "Fullständigt namn" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:222 msgid "E-mail" msgstr "E-post" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:228 msgid "Access level" msgstr "BehörighetsnivÃ¥" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:238 msgid "Save data" msgstr "Spara" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:260 msgid "Your password is at default value, please change it." msgstr "Byt lösenord." -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:287 msgid "Changing your current password will disable OTP." -msgstr "" +msgstr "Att ändra nuvarande lösenord kommer att inaktivera OTP." -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:292 msgid "Old password" msgstr "Gammalt lösenord" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:295 msgid "New password" msgstr "Nytt lösenord" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:300 msgid "Confirm password" msgstr "Bekräfta lösenord" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:310 msgid "Change password" msgstr "Byt lösenord" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:316 msgid "One time passwords / Authenticator" -msgstr "(OTP) / Authentifikator" +msgstr "(OTP) / Autentifikator" -#: classes/pref/prefs.php:338 -msgid "One time passwords are currently enabled. Enter your current password below to disable." +#: classes/pref/prefs.php:320 +msgid "" +"One time passwords are currently enabled. Enter your current password below " +"to disable." msgstr "" +"EngÃ¥ngslösenord är för närvarande aktiverade. Ange ditt nuvarande lösenord " +"nedan för att inaktivera." -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:345 classes/pref/prefs.php:396 msgid "Enter your password" msgstr "Ange lösenord" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:356 msgid "Disable OTP" msgstr "Stäng av OTP" -#: classes/pref/prefs.php:380 -msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." -msgstr "Du behöver en kompatible Authenticator för att använda detta. Byter du lösenord inaktiverar automatiskt OTP" +#: classes/pref/prefs.php:362 +msgid "" +"You will need a compatible Authenticator to use this. Changing your password " +"would automatically disable OTP." +msgstr "" +"Du behöver en kompatibel autentifikator för att använda detta. Att byta " +"lösenord inaktiverar automatiskt OTP." -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:364 msgid "Scan the following code by the Authenticator application:" -msgstr "Läs in följande QR-kod med Authenticatorn:" +msgstr "Läs in följande QR-kod med autentifikator-applikationen:" -#: classes/pref/prefs.php:423 +#: classes/pref/prefs.php:405 msgid "I have scanned the code and would like to enable OTP" msgstr "Jag har läst av bilden och vill aktivera OTP" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:413 msgid "Enable OTP" msgstr "Aktivera OTP" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:451 msgid "Some preferences are only available in default profile." -msgstr "" +msgstr "Vissa inställningar är endast tillgängliga i standardprofilen." -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:545 msgid "Customize" msgstr "Anpassa" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:605 msgid "Register" msgstr "Registrera" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:609 msgid "Clear" msgstr "Rensa" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:615 #, php-format msgid "Current server time: %s (UTC)" msgstr "Aktuell servertid: %s (UTC)" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:648 msgid "Save configuration" msgstr "Spara konfiguration" -#: classes/pref/prefs.php:694 -#, fuzzy -msgid "Save and exit preferences" -msgstr "Lämna inställningarna" - -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:651 msgid "Manage profiles" msgstr "Hantera profiler" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:654 msgid "Reset to defaults" msgstr "Ã…terställ till standard" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:678 classes/pref/prefs.php:680 msgid "Plugins" -msgstr "Plugins" +msgstr "Tillägg" -#: classes/pref/prefs.php:730 -msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." +#: classes/pref/prefs.php:682 +msgid "" +"You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" +"Du kommer behöva ladda om Tiny Tiny RSS för att ändringarna för tillägg ska " +"träda i kraft." -#: classes/pref/prefs.php:732 -msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." +#: classes/pref/prefs.php:684 +msgid "" +"Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank" +"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a " +"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins" +"\">wiki</a>." msgstr "" +"Ladda ner fler tillägg via tt-rss.org <a class=\"visibleLink\" target=" +"\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forum</a> " +"eller <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/" +"wiki/Plugins\">wiki</a>." -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:710 msgid "System plugins" -msgstr "Systemplugins" +msgstr "Systemtillägg" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:714 classes/pref/prefs.php:768 msgid "Plugin" -msgstr "Plugin" +msgstr "Tillägg" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:715 classes/pref/prefs.php:769 msgid "Description" msgstr "Beskrivning" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:716 classes/pref/prefs.php:770 msgid "Version" msgstr "Version" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:717 classes/pref/prefs.php:771 msgid "Author" -msgstr "Av" +msgstr "Skapare" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:746 classes/pref/prefs.php:803 msgid "more info" -msgstr "" +msgstr "mer info" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:755 classes/pref/prefs.php:812 msgid "Clear data" msgstr "Rensa data" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:764 msgid "User plugins" -msgstr "Användarplugins" +msgstr "Användartillägg" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:827 msgid "Enable selected plugins" -msgstr "Aktivera valda plugins" +msgstr "Aktivera valda tillägg" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:882 classes/pref/prefs.php:900 msgid "Incorrect password" msgstr "Felaktigt lösenord" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:926 #, php-format -msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." -msgstr "Sie können Farben, Schriftarten und das Layout Ihres aktuell gewählten Themas mit einem eigenen CSS-Stylesheet überschreiben. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Diese Datei</a> kann als Grundlage benutzt werden." +msgid "" +"You can override colors, fonts and layout of your currently selected theme " +"with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink" +"\" href=\"%s\">This file</a> can be used as a baseline." +msgstr "" +"Du kan Ã¥sidosätta färger, typsnitt och layout för ditt för närvarande valda " +"tema med anpassade CSS-regler här. <a target=\"_blank\" class=\"visibleLink" +"\" href=\"%s\">Denna fil</a> kan användas som grund." -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:966 msgid "Create profile" msgstr "Skapa profil" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:989 classes/pref/prefs.php:1019 msgid "(active)" msgstr "(aktiva)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1053 msgid "Remove selected profiles" msgstr "Radera markerade profiler" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1055 msgid "Activate profile" msgstr "Aktivera profil" @@ -2215,51 +2112,47 @@ msgstr "Markera för att aktivera" #: classes/pref/feeds.php:527 msgid "Feed Title" -msgstr "Kanalens titel" +msgstr "Flödestitel" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:568 classes/pref/feeds.php:793 msgid "Update" msgstr "Uppdatera" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:583 classes/pref/feeds.php:809 msgid "Article purging:" msgstr "Artikelrensning:" #: classes/pref/feeds.php:606 -msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." -msgstr "<b>Tips:</b> du mÃ¥ste ange din inloggningsinformation till din kanal kräver autenticering (gäller ej Twitter-kanaler)." +msgid "" +"<b>Hint:</b> you need to fill in your login information if your feed " +"requires authentication, except for Twitter feeds." +msgstr "" +"<b>Tips:</b> du mÃ¥ste ange din inloggningsuppgifter om ditt flöde kräver " +"autentisering, dock ej för Twitter-flöden." -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:622 classes/pref/feeds.php:838 msgid "Hide from Popular feeds" -msgstr "Dölj frÃ¥n populära kanaler" +msgstr "Dölj frÃ¥n populära flöden" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:634 classes/pref/feeds.php:844 msgid "Include in e-mail digest" -msgstr "Inkludera i e-postsammanfattningen" +msgstr "Inkludera i e-postsammanfattning" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:647 classes/pref/feeds.php:850 msgid "Always display image attachments" msgstr "Visa alltid bilder" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:660 classes/pref/feeds.php:858 msgid "Do not embed images" msgstr "Bädda inte in bilder" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:673 classes/pref/feeds.php:866 msgid "Cache images locally" -msgstr "Cachea bilder lokalt" +msgstr "Cacha bilder lokalt" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:685 classes/pref/feeds.php:872 msgid "Mark updated articles as unread" -msgstr "Flagga uppdaterade artiklar som olästa" +msgstr "Makera uppdaterade artiklar som olästa" #: classes/pref/feeds.php:691 msgid "Icon" @@ -2277,25 +2170,23 @@ msgstr "Ã…terprenumerera pÃ¥ push-uppdateringar:" msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "Ã…terställ PubSubHubbub-prenumerationer för push-uppdaterade feeds." -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1112 classes/pref/feeds.php:1165 msgid "All done." -msgstr "Klar." +msgstr "Klart." #: classes/pref/feeds.php:1220 msgid "Feeds with errors" -msgstr "Kanaler med fel" +msgstr "Flöden med fel" #: classes/pref/feeds.php:1240 msgid "Inactive feeds" -msgstr "Inaktiva kanaler" +msgstr "Inaktiva flöden" #: classes/pref/feeds.php:1277 msgid "Edit selected feeds" -msgstr "Redigera valda kanaler" +msgstr "Redigera valda flöden" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1281 js/prefs.js:1770 msgid "Batch subscribe" msgstr "Massprenumerera" @@ -2305,35 +2196,39 @@ msgstr "Kategorier" #: classes/pref/feeds.php:1291 msgid "Add category" -msgstr "Lägg till kategorier" +msgstr "Lägg till kategori" #: classes/pref/feeds.php:1295 msgid "Remove selected" -msgstr "Ta bort valda kategorier" +msgstr "Ta bort markerade" #: classes/pref/feeds.php:1304 msgid "(Un)hide empty categories" -msgstr "Växla visning av tomma kategorier" +msgstr "Visa/dölj tomma kategorier" #: classes/pref/feeds.php:1309 msgid "More actions..." -msgstr "Fler aktiviteter..." +msgstr "Fler Ã¥tgärder..." #: classes/pref/feeds.php:1313 msgid "Manual purge" -msgstr "Manuell gallring" +msgstr "Manuell rensning" #: classes/pref/feeds.php:1317 msgid "Clear feed data" -msgstr "Gallra kanaldata" +msgstr "Rensa flödesdata" #: classes/pref/feeds.php:1368 msgid "OPML" msgstr "OPML" #: classes/pref/feeds.php:1370 -msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." -msgstr "Med OPML kan du importera och exportera dina kanaler, filter, etiketter och Tin Tiny RSS inställningar" +msgid "" +"Using OPML you can export and import your feeds, filters, labels and Tiny " +"Tiny RSS settings." +msgstr "" +"Med OPML kan du importera och exportera dina flöden, filter, etiketter och " +"Tin Tiny RSS-inställningar" #: classes/pref/feeds.php:1372 msgid "Only main settings profile can be migrated using OPML." @@ -2356,12 +2251,20 @@ msgid "Export OPML" msgstr "Exportera OPML" #: classes/pref/feeds.php:1399 -msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." -msgstr "Din OPML-fil kan publiceras publikt och den kan bli prenumererad pÃ¥ av alla som känner till URLen nedan" +msgid "" +"Your OPML can be published publicly and can be subscribed by anyone who " +"knows the URL below." +msgstr "" +"Din OPML-fil kan publiceras publikt och den kan bli prenumererad pÃ¥ av alla " +"som känner till URLen nedan" #: classes/pref/feeds.php:1401 -msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." -msgstr "Publicerad OPML inkluderar inte dina Tiny Tiny RSS-inställningar, kanaler som kräver autenticering eller kanaler som är dolda för populära kanaler" +msgid "" +"Published OPML does not include your Tiny Tiny RSS settings, feeds that " +"require authentication or feeds hidden from Popular feeds." +msgstr "" +"Publicerad OPML inkluderar inte dina Tiny Tiny RSS-inställningar, flöden som " +"kräver autentisering eller flöden som är dolda under populära flöden." #: classes/pref/feeds.php:1403 msgid "Public OPML URL" @@ -2376,24 +2279,32 @@ msgid "Firefox integration" msgstr "Firefox-integration" #: classes/pref/feeds.php:1416 -msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." -msgstr "Denna Tiny Tiny RSS-site kan användas som en kanalläsare för Firefox genom att klicka pÃ¥ länken nedan" +msgid "" +"This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the " +"link below." +msgstr "" +"Denna Tiny Tiny RSS-webbplats kan användas som en flödesläsare för Firefox " +"genom att klicka pÃ¥ länken nedan." #: classes/pref/feeds.php:1423 msgid "Click here to register this site as a feed reader." -msgstr "Klicka här för att registrera denna site som en kanalläsare." +msgstr "Klicka här för att registrera denna webbplats som en flödesläsare." #: classes/pref/feeds.php:1431 msgid "Published & shared articles / Generated feeds" -msgstr "Publicerade och delade artiklar / Genererade kanaler" +msgstr "Publicerade och delade artiklar / Genererade flöden" #: classes/pref/feeds.php:1433 msgid "Published articles and generated feeds" -msgstr "Publicerade artiklar och genererade kanaler" +msgstr "Publicerade artiklar och genererade flöden" #: classes/pref/feeds.php:1435 -msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." -msgstr "Publicerade artiklar exporteras som en publik RSS-kanal och kan bli prenumerarde pÃ¥ av alla med URLen nedan" +msgid "" +"Published articles are exported as a public RSS feed and can be subscribed " +"by anyone who knows the URL specified below." +msgstr "" +"Publicerade artiklar exporteras som ett publikt RSS-flöde och kan prenumeras " +"pÃ¥ av alla som har URLen nedan." #: classes/pref/feeds.php:1441 msgid "Display URL" @@ -2401,7 +2312,7 @@ msgstr "Visa URL" #: classes/pref/feeds.php:1444 msgid "Clear all generated URLs" -msgstr "Radera alla genererade URLer" +msgstr "Rensa alla genererade URLer" #: classes/pref/feeds.php:1446 msgid "Articles shared by URL" @@ -2416,39 +2327,44 @@ msgid "Unshare all articles" msgstr "Ta bort delning av alla artiklar" #: classes/pref/feeds.php:1529 -msgid "These feeds have not been updated with new content for 3 months (oldest first):" -msgstr "Följande kanaler har inte uppdaterats med nytt innehÃ¥ll pÃ¥ 3 mÃ¥nader (äldst först): " +msgid "" +"These feeds have not been updated with new content for 3 months (oldest " +"first):" +msgstr "" +"Följande flöden har inte uppdaterats med nytt innehÃ¥ll pÃ¥ 3 mÃ¥nader (äldst " +"först): " -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1566 classes/pref/feeds.php:1636 msgid "Click to edit feed" -msgstr "Klicka för att redigera kanal" +msgstr "Klicka för att redigera flöde" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1584 classes/pref/feeds.php:1656 msgid "Unsubscribe from selected feeds" -msgstr "Ta bort prenumeration för valda kanaler" +msgstr "Ta bort prenumeration för valda flöden" #: classes/pref/feeds.php:1595 msgid "These feeds have not been updated because of errors:" -msgstr "Följande kanaler har inte blivit uppdaterade pga fel:" +msgstr "Följande flöden har inte blivit uppdaterade pga fel:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1758 msgid "Add one valid RSS feed per line (no feed detection is done)" -msgstr "Lägg till en RSS-url per rad (ingen kanalupptäckt görs)" +msgstr "Lägg till ett giltigt RSS-flöde per rad (ingen flödesupptäckt görs)" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1767 msgid "Feeds to subscribe, One per line" -msgstr "Kanaler att prenumerera pÃ¥, en per rad" +msgstr "Flöden att prenumerera pÃ¥, ett per rad" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1789 msgid "Feeds require authentication." -msgstr "Kanalen kräver inloggning." +msgstr "Flödet kräver inloggning." #: plugins/digest/digest_body.php:59 -#, fuzzy -msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." -msgstr "Din webbläsare stöder inte Javascript, kontrollera dina inställningar" +msgid "" +"Your browser doesn't support Javascript, which is required for this " +"application to function properly. Please check your browser settings." +msgstr "" +"Din webbläsare stöder inte Javascript som krävs för att denna applikation " +"ska fungera som den ska. Kontrollera dina webbläsarinställningar." #: plugins/digest/digest_body.php:74 msgid "Hello," @@ -2462,8 +2378,7 @@ msgstr "Standardversion" msgid "Close article" msgstr "Stäng artikel" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:32 plugins/nsfw/init.php:43 msgid "Not work safe (click to toggle)" msgstr "NSFW (klicka för att växla)" @@ -2496,14 +2411,13 @@ msgstr "Felaktigt gammalt lösenord." #: plugins/mobile/mobile-functions.php:173 #: plugins/mobile/mobile-functions.php:200 #: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:373 plugins/mobile/prefs.php:29 msgid "Home" -msgstr "Startsidan" +msgstr "Hem" #: plugins/mobile/mobile-functions.php:409 msgid "Nothing found (click to reload feed)." -msgstr "Hittade inget (klicka för att ladda om kanal)" +msgstr "Inget kunde hittas (klicka för att ladda om flöde)" #: plugins/mobile/login_form.php:52 msgid "Open regular version" @@ -2513,27 +2427,21 @@ msgstr "Öppna normal version" msgid "Enable categories" msgstr "Aktivera kategorier" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:35 plugins/mobile/prefs.php:40 +#: plugins/mobile/prefs.php:46 plugins/mobile/prefs.php:51 +#: plugins/mobile/prefs.php:56 plugins/mobile/prefs.php:61 msgid "ON" msgstr "PÃ…" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:35 plugins/mobile/prefs.php:40 +#: plugins/mobile/prefs.php:46 plugins/mobile/prefs.php:51 +#: plugins/mobile/prefs.php:56 plugins/mobile/prefs.php:61 msgid "OFF" msgstr "AV" #: plugins/mobile/prefs.php:39 msgid "Browse categories like folders" -msgstr "Bläddra i kategorier som i foldrar" +msgstr "Bläddra i kategorier som i mappar" #: plugins/mobile/prefs.php:45 msgid "Show images in posts" @@ -2541,21 +2449,18 @@ msgstr "Visa bilder i artiklar" #: plugins/mobile/prefs.php:50 msgid "Hide read articles and feeds" -msgstr "Dölj lästa artiklar och kanaler" +msgstr "Dölj lästa artiklar och flöden" #: plugins/mobile/prefs.php:55 msgid "Sort feeds by unread count" -msgstr "Sortera kanaler efter antal olästa artiklar" +msgstr "Sortera flöden efter antal olästa artiklar" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:52 plugins/mailto/init.php:58 +#: plugins/mail/init.php:66 plugins/mail/init.php:72 msgid "[Forwarded]" msgstr "[Vidarebefordrat]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:52 plugins/mail/init.php:66 msgid "Multiple articles" msgstr "Flera artiklar" @@ -2568,7 +2473,8 @@ msgid "Forward selected article(s) by email." msgstr "Vidarebefordra markerade artiklar med e-post" #: plugins/mailto/init.php:81 -msgid "You should be able to edit the message before sending in your mail client." +msgid "" +"You should be able to edit the message before sending in your mail client." msgstr "Du bör kunna redigera ditt meddelande innan det skickas" #: plugins/mailto/init.php:86 @@ -2580,8 +2486,12 @@ msgid "Bookmarklets" msgstr "Bookmarklets" #: plugins/bookmarklets/init.php:24 -msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." -msgstr "Drag länken nedan till din webbläsares verktygsrad, öppna den kanal du är intresserad av i webbläsaren och klicka pÃ¥ länken för att prenumerara pÃ¥ det." +msgid "" +"Drag the link below to your browser toolbar, open the feed you're interested " +"in in your browser and click on the link to subscribe to it." +msgstr "" +"Dra länken nedan till din webbläsares verktygsrad, öppna det flöde du är " +"intresserad av i webbläsaren och klicka pÃ¥ länken för att prenumerara pÃ¥ det." #: plugins/bookmarklets/init.php:28 #, php-format @@ -2594,7 +2504,8 @@ msgstr "Prenumerera i Tiny Tiny RSS" #: plugins/bookmarklets/init.php:34 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" -msgstr "Använd denna bookmarklet för att publicera webbsidor genom Tiny Tiny RSS" +msgstr "" +"Använd denna bookmarklet för att publicera webbsidor genom Tiny Tiny RSS" #: plugins/import_export/init.php:61 msgid "Import and export" @@ -2605,8 +2516,12 @@ msgid "Article archive" msgstr "Artikelarkiv" #: plugins/import_export/init.php:65 -msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." -msgstr "Du kan importera och exportera dina stjärnmärkta och arkiverad artiklar sÃ¥ att du har en backup eller för att flytta mellan tt-rss instanser." +msgid "" +"You can export and import your Starred and Archived articles for safekeeping " +"or when migrating between tt-rss instances." +msgstr "" +"Du kan importera och exportera dina stjärnmärkta och arkiverad artiklar sÃ¥ " +"att du har en backup eller för att flytta mellan tt-rss instanser." #: plugins/import_export/init.php:68 msgid "Export my data" @@ -2626,28 +2541,28 @@ msgstr "Kunde inte importera: okänt filformat" #: plugins/import_export/init.php:382 msgid "Finished: " -msgstr "" +msgstr "Klart:" #: plugins/import_export/init.php:383 -#, fuzzy, php-format +#, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " -msgstr[0] "Redigera artikelkommentar" -msgstr[1] "Redigera artikelkommentar" +msgstr[0] "%d artikel bearbetad, " +msgstr[1] "%d artiklar bearbetade, " #: plugins/import_export/init.php:384 -#, fuzzy, php-format +#, php-format msgid "%d imported, " msgid_plural "%d imported, " -msgstr[0] "är redan importerad." -msgstr[1] "är redan importerad." +msgstr[0] "%d importerat, " +msgstr[1] "%d importerade, " #: plugins/import_export/init.php:385 -#, fuzzy, php-format +#, php-format msgid "%d feed created." msgid_plural "%d feeds created." -msgstr[0] "Ingen kanal vald." -msgstr[1] "Ingen kanal vald." +msgstr[0] "%d flöde skapat." +msgstr[1] "%d flöden skapade." #: plugins/import_export/init.php:390 msgid "Could not load XML document." @@ -2658,11 +2573,13 @@ msgid "Prepare data" msgstr "Förbered data" #: plugins/import_export/init.php:423 -#, fuzzy, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#, php-format +msgid "" +"Could not upload file. You might need to adjust upload_max_filesize in PHP." +"ini (current value = %s)" msgstr "" -"Filen kunde inte laddas upp. Kontrollera upload_max_filesize \n" -"\t\t\ti PHP.ini. (Nuvarande inställning = %s)" +"Filen kunde inte laddas upp. Kontrollera upload_max_filesize i PHP.ini " +"(nuvarande inställning = %s)" #: plugins/mail/init.php:87 msgid "From:" @@ -2674,16 +2591,15 @@ msgstr "Till:" #: plugins/mail/init.php:109 msgid "Subject:" -msgstr "Ärende:" +msgstr "Ämne:" #: plugins/mail/init.php:125 msgid "Send e-mail" msgstr "Skicka e-post" -#: plugins/note/init.php:28 -#: plugins/note/note.js:11 +#: plugins/note/init.php:28 plugins/note/note.js:11 msgid "Edit article note" -msgstr "Redigera artikelkommentar" +msgstr "Redigera artikelnotering" #: plugins/example/init.php:39 msgid "Example Pane" @@ -2699,62 +2615,56 @@ msgstr "Ange värde" #: plugins/googlereaderimport/init.php:72 msgid "No file uploaded." -msgstr "" +msgstr "Ingen fil uppladdad." -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:153 #, php-format msgid "All done. %d out of %d articles imported." -msgstr "" +msgstr "Allt klart. %d av %d artiklar importerade." -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:157 msgid "The document has incorrect format." -msgstr "" +msgstr "Dokumentet har ett felaktigt format." -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:326 msgid "Import starred or shared items from Google Reader" -msgstr "" +msgstr "Importera stjärnmärkta eller delade objekt frÃ¥n Google Reader" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:330 msgid "Paste your starred.json or shared.json into the form below." -msgstr "" +msgstr "Kopiera in din starred.json eller shared.json i fältet nedan." -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:344 msgid "Import my Starred items" -msgstr "" +msgstr "Importera mina stjärnmärkta objekt" #: plugins/instances/init.php:144 msgid "Linked" msgstr "Länkad" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:207 plugins/instances/init.php:399 msgid "Instance" msgstr "Instans" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 +#: plugins/instances/init.php:218 plugins/instances/init.php:315 #: plugins/instances/init.php:408 msgid "Instance URL" msgstr "Instans-URL" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:229 plugins/instances/init.php:418 msgid "Access key:" msgstr "Accessnyckel:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 +#: plugins/instances/init.php:232 plugins/instances/init.php:316 #: plugins/instances/init.php:421 msgid "Access key" msgstr "Accessnyckel" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:236 plugins/instances/init.php:425 msgid "Use one access key for both linked instances." msgstr "Använd samma accessnyckel för bägge länkade instanserna" -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:244 plugins/instances/init.php:433 msgid "Generate new key" msgstr "Skapa en ny nyckel" @@ -2763,8 +2673,12 @@ msgid "Link instance" msgstr "Länka instanser" #: plugins/instances/init.php:307 -msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" -msgstr "Du kan ansluta till andra instanser av Tiny Tiny RSS för att dela populära kanaler. Använd följande URL:" +msgid "" +"You can connect other instances of Tiny Tiny RSS to this one to share " +"Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" +msgstr "" +"Du kan ansluta till andra instanser av Tiny Tiny RSS för att dela populära " +"flöde. Länka till denna instans genom att använd följande URL:" #: plugins/instances/init.php:317 msgid "Last connected" @@ -2776,7 +2690,7 @@ msgstr "Status" #: plugins/instances/init.php:319 msgid "Stored feeds" -msgstr "Sparade kanaler" +msgstr "Sparade flöden" #: plugins/instances/init.php:437 msgid "Create link" @@ -2790,91 +2704,78 @@ msgstr "Dela via URL" msgid "You can share this article by the following unique URL:" msgstr "Du kan dela denna artikel genom följande unika URL:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "Uppdatera Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Din Tiny Tiny RSS är uppdaterad till senaste version." #: plugins/updater/init.php:351 -#, fuzzy -msgid "Do not close this dialog until updating is finished." -msgstr "Stäng inte denna dialog förrän uppdatering är klar. Gör en backup av din tt-rss-katalog innan du fortsätter." - -#: plugins/updater/init.php:360 -msgid "It is suggested to backup your tt-rss directory first." -msgstr "" - -#: plugins/updater/init.php:361 -msgid "Your database will not be modified." -msgstr "" - -#: plugins/updater/init.php:362 -msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." +msgid "" +"Do not close this dialog until updating is finished. Backup your tt-rss " +"directory before continuing." msgstr "" +"Stäng inte denna dialog förrän uppdatering är klar. Ta en backup av din tt-" +"rss-katalog innan du fortsätter." -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:354 msgid "Ready to update." msgstr "Redo att uppdatera." -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:359 msgid "Start update" msgstr "Starta uppdateringen" -#: js/feedlist.js:394 -#: js/feedlist.js:422 -#: plugins/digest/digest.js:26 +#: js/feedlist.js:392 js/feedlist.js:420 plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" -msgstr "Märk alla artiklar i %s som lästa??" +msgstr "Märk alla artiklar i %s som lästa?" -#: js/feedlist.js:413 -#, fuzzy +#: js/feedlist.js:411 msgid "Mark all articles in %s older than 1 day as read?" -msgstr "Märk alla artiklar i %s som lästa??" +msgstr "Markera alla artiklar i %s äldre än 1 dag som lästa?" -#: js/feedlist.js:416 -#, fuzzy +#: js/feedlist.js:414 msgid "Mark all articles in %s older than 1 week as read?" -msgstr "Märk alla artiklar i %s som lästa??" +msgstr "Markera alla artiklar i %s äldre än 1 vecka som lästa?" -#: js/feedlist.js:419 -#, fuzzy +#: js/feedlist.js:417 msgid "Mark all articles in %s older than 2 weeks as read?" -msgstr "Märk alla artiklar i %s som lästa??" +msgstr "Markera alla artiklar i %s äldre än 2 veckor som lästa?" #: js/functions.js:92 -msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." -msgstr "Vill du rapportera detta fel till tt-rss.org? Rapporten kommer innehÃ¥lla information om din webbläsare och din ip-adress." +msgid "" +"Are you sure to report this exception to tt-rss.org? The report will include " +"your browser information. Your IP would be saved in the database." +msgstr "" +"Vill du rapportera detta fel till tt-rss.org? Rapporten kommer innehÃ¥lla " +"information om din webbläsare och din ip-adress." #: js/functions.js:214 msgid "close" -msgstr "" +msgstr "stäng" #: js/functions.js:586 msgid "Error explained" -msgstr "" +msgstr "Fel förklarat" #: js/functions.js:668 msgid "Upload complete." -msgstr "" +msgstr "Uppladdning klar." #: js/functions.js:692 msgid "Remove stored feed icon?" -msgstr "Radera sparad ikon för kanalen?" +msgstr "Ta bort sparad ikon för flöden?" #: js/functions.js:697 -#, fuzzy msgid "Removing feed icon..." -msgstr "Radera sparad ikon för kanalen?" +msgstr "Tar bort flödesikon..." #: js/functions.js:702 -#, fuzzy msgid "Feed icon removed." -msgstr "Hittar inte kanal." +msgstr "Flödesikon borttagen." #: js/functions.js:724 msgid "Please select an image file to upload." @@ -2882,28 +2783,27 @@ msgstr "Välj en bild att ladda upp." #: js/functions.js:726 msgid "Upload new icon for this feed?" -msgstr "Ladda upp ny ikon för denna kanal?" +msgstr "Ladda upp ny ikon för detta flöde?" #: js/functions.js:727 -#, fuzzy msgid "Uploading, please wait..." -msgstr "Laddar, vänta..." +msgstr "Laddar upp, vänligen vänta..." #: js/functions.js:743 msgid "Please enter label caption:" -msgstr "Ange etikett-titel:" +msgstr "Ange titel för etikett:" #: js/functions.js:748 msgid "Can't create label: missing caption." -msgstr "Kan inte skapa etikett. Titel saknas" +msgstr "Kan inte skapa etikett: titel saknas" #: js/functions.js:791 msgid "Subscribe to Feed" -msgstr "Prenumerera pÃ¥ kanal" +msgstr "Prenumerera pÃ¥ flöde" #: js/functions.js:818 msgid "Subscribed to %s" -msgstr "Prenumererar nu pÃ¥ %s" +msgstr "Prenumererar pÃ¥ %s" #: js/functions.js:823 msgid "Specified URL seems to be invalid." @@ -2911,7 +2811,7 @@ msgstr "Den angivna URLen verkar vara felaktig." #: js/functions.js:826 msgid "Specified URL doesn't seem to contain any feeds." -msgstr "Den angivna URLen verkar inte innehÃ¥lla nÃ¥gon kanal." +msgstr "Den angivna URLen verkar inte innehÃ¥lla nÃ¥got flöde." #: js/functions.js:879 msgid "Couldn't download the specified URL: %s" @@ -2919,7 +2819,7 @@ msgstr "Kunde inte ladda ned följande URL: %s" #: js/functions.js:883 msgid "You are already subscribed to this feed." -msgstr "Du prenumererar redan pÃ¥ denna kanal." +msgstr "Du prenumererar redan pÃ¥ detta flöde." #: js/functions.js:1013 msgid "Edit rule" @@ -2927,29 +2827,31 @@ msgstr "Redigera regel" #: js/functions.js:1039 msgid "Edit action" -msgstr "Redigera aktivitet" +msgstr "Redigera Ã¥tgärd" #: js/functions.js:1076 msgid "Create Filter" msgstr "Skapa filter" #: js/functions.js:1191 -msgid "Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update." -msgstr "Ã…terställ prenumeration? Tiny Tiny RSS kommer försöka prenumerera pÃ¥ notifikationshubben igen vid nästa kanaluppdatering." +msgid "" +"Reset subscription? Tiny Tiny RSS will try to subscribe to the notification " +"hub again on next feed update." +msgstr "" +"Ã…terställ prenumeration? Tiny Tiny RSS kommer försöka prenumerera pÃ¥ " +"notifikationshubben igen vid nästa flödesuppdatering." #: js/functions.js:1202 -#, fuzzy msgid "Subscription reset." -msgstr "Prenumerera pÃ¥ kanal..." +msgstr "Prenumeration Ã¥terställd." -#: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/functions.js:1212 js/tt-rss.js:619 msgid "Unsubscribe from %s?" msgstr "Säg upp prenumeration pÃ¥ %s?" #: js/functions.js:1215 msgid "Removing feed..." -msgstr "" +msgstr "Tar bort flöde..." #: js/functions.js:1323 msgid "Please enter category title:" @@ -2957,64 +2859,53 @@ msgstr "Ange kategorititel:" #: js/functions.js:1354 msgid "Generate new syndication address for this feed?" -msgstr "Skapa ny syndikeringsadress för denna kanal?" +msgstr "Generera en ny syndikeringsadress för detta flöde?" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1358 js/prefs.js:1222 msgid "Trying to change address..." -msgstr "" +msgstr "Försöker ändra adress..." -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1545 js/tt-rss.js:396 js/tt-rss.js:600 msgid "You can't edit this kind of feed." -msgstr "Denna typ av kanal kan inte redigeras." +msgstr "Detta typ av flöde kan inte redigeras." #: js/functions.js:1560 msgid "Edit Feed" -msgstr "Redigera kanal" +msgstr "Redigera flöde" -#: js/functions.js:1566 -#: js/prefs.js:194 -#: js/prefs.js:749 -#, fuzzy +#: js/functions.js:1566 js/prefs.js:194 js/prefs.js:749 msgid "Saving data..." -msgstr "Spara" +msgstr "Sparar data..." #: js/functions.js:1598 msgid "More Feeds" -msgstr "Fler kanaler" - -#: js/functions.js:1659 -#: js/functions.js:1769 -#: js/prefs.js:397 -#: js/prefs.js:427 -#: js/prefs.js:459 -#: js/prefs.js:642 -#: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +msgstr "Fler flöden" + +#: js/functions.js:1659 js/functions.js:1769 js/prefs.js:397 js/prefs.js:427 +#: js/prefs.js:459 js/prefs.js:642 js/prefs.js:662 js/prefs.js:1198 +#: js/prefs.js:1343 msgid "No feeds are selected." -msgstr "Ingen kanal vald." +msgstr "Inget flöde valt." #: js/functions.js:1701 -msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." -msgstr "Radera markerade kanaler frÃ¥n arkivet? Kanaler med sparade artiklar kommer inte raderas.." +msgid "" +"Remove selected feeds from the archive? Feeds with stored articles will not " +"be removed." +msgstr "" +"Radera markerade flöden frÃ¥n arkivet? Flöden med sparade artiklar kommer " +"inte raderas." #: js/functions.js:1740 msgid "Feeds with update errors" -msgstr "Kanaler med uppdateringsfel" +msgstr "Flöden med uppdateringsfel" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1751 js/prefs.js:1180 msgid "Remove selected feeds?" -msgstr "Radera markerade kanaler?" +msgstr "Ta bort markerade flöden?" -#: js/functions.js:1754 -#: js/prefs.js:1178 -#, fuzzy +#: js/functions.js:1754 js/prefs.js:1183 msgid "Removing selected feeds..." -msgstr "Radera markerade kanaler?" +msgstr "Tar bort valda flöden..." #: js/functions.js:1852 msgid "Help" @@ -3041,9 +2932,8 @@ msgid "Can't create user: no login specified." msgstr "Kan inte skapa användare, ingen inloggning angiven." #: js/prefs.js:66 -#, fuzzy msgid "Adding user..." -msgstr "Lägger till filter..." +msgstr "Lägger till användare..." #: js/prefs.js:94 msgid "User Editor" @@ -3058,98 +2948,84 @@ msgid "Remove filter?" msgstr "Radera filter?" #: js/prefs.js:169 -#, fuzzy msgid "Removing filter..." -msgstr "Lägger till filter..." +msgstr "Tar bort filter..." #: js/prefs.js:279 msgid "Remove selected labels?" msgstr "Radera markerade etiketter?" #: js/prefs.js:282 -#, fuzzy msgid "Removing selected labels..." -msgstr "Radera markerade etiketter?" +msgstr "Tar bort valda etiketter..." -#: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:295 js/prefs.js:1384 msgid "No labels are selected." msgstr "Inga etiketter valda." #: js/prefs.js:309 -msgid "Remove selected users? Neither default admin nor your account will be removed." +msgid "" +"Remove selected users? Neither default admin nor your account will be " +"removed." msgstr "Radera markerade användare? Varken admin eller ditt konto kan raderas." #: js/prefs.js:312 -#, fuzzy msgid "Removing selected users..." -msgstr "Radera markerade filter?" +msgstr "Tar bort valda användare..." -#: js/prefs.js:326 -#: js/prefs.js:507 -#: js/prefs.js:528 -#: js/prefs.js:567 +#: js/prefs.js:326 js/prefs.js:507 js/prefs.js:528 js/prefs.js:567 msgid "No users are selected." -msgstr "Ingen användare markerad." +msgstr "Ingen användare vald." #: js/prefs.js:344 msgid "Remove selected filters?" msgstr "Radera markerade filter?" #: js/prefs.js:347 -#, fuzzy msgid "Removing selected filters..." -msgstr "Radera markerade filter?" +msgstr "Tar bort valda filter..." -#: js/prefs.js:359 -#: js/prefs.js:597 -#: js/prefs.js:616 +#: js/prefs.js:359 js/prefs.js:597 js/prefs.js:616 msgid "No filters are selected." msgstr "Inga filter valda." #: js/prefs.js:378 msgid "Unsubscribe from selected feeds?" -msgstr "Säg upp prenumeration pÃ¥ markerade kanaler?" +msgstr "Avsluta prenumeration pÃ¥ markerade flöden?" #: js/prefs.js:382 -#, fuzzy msgid "Unsubscribing from selected feeds..." -msgstr "Ta bort prenumeration för valda kanaler" +msgstr "Tar bort prenumeration för valda flöden..." #: js/prefs.js:412 msgid "Please select only one feed." -msgstr "Markera endast en kanal." +msgstr "Välj endast ett flöde." #: js/prefs.js:418 msgid "Erase all non-starred articles in selected feed?" -msgstr "Radera alla artiklar som inte är stjärnmärkta i markerad kanal?" +msgstr "Radera alla artiklar som inte är stjärnmärkta i valt flöde?" #: js/prefs.js:421 -#, fuzzy msgid "Clearing selected feed..." -msgstr "Redigera valda kanaler" +msgstr "Rensar valda flöden..." #: js/prefs.js:440 msgid "How many days of articles to keep (0 - use default)?" msgstr "Hur mÃ¥nga dagars artiklar ska sparas (0 - använda default)?" #: js/prefs.js:443 -#, fuzzy msgid "Purging selected feed..." -msgstr "Redigera valda kanaler" +msgstr "Rensar ut valda flöden..." #: js/prefs.js:478 msgid "Login field cannot be blank." msgstr "Användarnamnet kan inte vara tomt." #: js/prefs.js:482 -#, fuzzy msgid "Saving user..." -msgstr "Lägger till filter..." +msgstr "Sparar användare..." -#: js/prefs.js:512 -#: js/prefs.js:533 -#: js/prefs.js:572 +#: js/prefs.js:512 js/prefs.js:533 js/prefs.js:572 msgid "Please select only one user." msgstr "Markera endast en användare." @@ -3158,9 +3034,8 @@ msgid "Reset password of selected user?" msgstr "Ã…terställ lösenordet för markerad användare?" #: js/prefs.js:540 -#, fuzzy msgid "Resetting password for selected user..." -msgstr "Ã…terställ lösenordet för markerad användare?" +msgstr "Ã…terställer lösenord för vald användare..." #: js/prefs.js:585 msgid "User details" @@ -3175,371 +3050,335 @@ msgid "Combine selected filters?" msgstr "SlÃ¥ ihop markerade filter?" #: js/prefs.js:623 -#, fuzzy msgid "Joining filters..." -msgstr "Lägger till filter..." +msgstr "SlÃ¥r ihop filter..." #: js/prefs.js:684 msgid "Edit Multiple Feeds" -msgstr "Redigera flera kanaler" +msgstr "Redigera flera flöden" #: js/prefs.js:708 msgid "Save changes to selected feeds?" -msgstr "Spara ändringar i markerade kanaler?" +msgstr "Spara ändringar för valda flöden?" #: js/prefs.js:785 msgid "OPML Import" -msgstr "OPML Import" +msgstr "OPML-import" #: js/prefs.js:812 msgid "Please choose an OPML file first." msgstr "Välj en OPML-fil först." -#: js/prefs.js:815 -#: plugins/import_export/import_export.js:115 +#: js/prefs.js:815 plugins/import_export/import_export.js:115 #: plugins/googlereaderimport/init.js:45 -#, fuzzy msgid "Importing, please wait..." -msgstr "Laddar, vänta..." +msgstr "Importerar, vänligen vänta..." #: js/prefs.js:968 msgid "Reset to defaults?" msgstr "Ã…terställ till standardvärden?" -#: js/prefs.js:1082 -msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." -msgstr "Radera kategori %s? Nästlade kanaler placeras i Okategoriserat." +#: js/prefs.js:1087 +msgid "" +"Remove category %s? Any nested feeds would be placed into Uncategorized." +msgstr "Radera kategori %s? Nästlade flöden placeras i Okategoriserat." -#: js/prefs.js:1088 -#, fuzzy +#: js/prefs.js:1093 msgid "Removing category..." -msgstr "Ta bort kategori" +msgstr "Tar bort kategori..." -#: js/prefs.js:1109 +#: js/prefs.js:1114 msgid "Remove selected categories?" msgstr "Radera markekrade kategorier?" -#: js/prefs.js:1112 -#, fuzzy +#: js/prefs.js:1117 msgid "Removing selected categories..." -msgstr "Radera valda kategorier?" +msgstr "Raderar valda kategorier..." -#: js/prefs.js:1125 +#: js/prefs.js:1130 msgid "No categories are selected." msgstr "Inga kategorier valda." -#: js/prefs.js:1133 +#: js/prefs.js:1138 msgid "Category title:" msgstr "Kategorinamn:" -#: js/prefs.js:1137 -#, fuzzy +#: js/prefs.js:1142 msgid "Creating category..." -msgstr "Skapa filter..." +msgstr "Skapar kategori..." -#: js/prefs.js:1164 +#: js/prefs.js:1169 msgid "Feeds without recent updates" -msgstr "Kanaler som inte uppdaterats pÃ¥ länge" +msgstr "Flöden som inte uppdaterats pÃ¥ länge" -#: js/prefs.js:1213 +#: js/prefs.js:1218 msgid "Replace current OPML publishing address with a new one?" msgstr "Byt nuvarande OPML-adress med en ny?" -#: js/prefs.js:1302 -#, fuzzy +#: js/prefs.js:1307 msgid "Clearing feed..." -msgstr "Gallra kanaldata" +msgstr "Rensar flöde..." -#: js/prefs.js:1322 +#: js/prefs.js:1327 msgid "Rescore articles in selected feeds?" -msgstr "Beräkna värden pÃ¥ artiklarna i markerade kanaler pÃ¥ nytt?" +msgstr "Beräkna värde pÃ¥ artiklarna i vald flöden pÃ¥ nytt?" -#: js/prefs.js:1325 -#, fuzzy +#: js/prefs.js:1330 msgid "Rescoring selected feeds..." -msgstr "Beräkna värden pÃ¥ artiklarna i markerade kanaler pÃ¥ nytt?" +msgstr "Räknar om poäng för valda flöden..." -#: js/prefs.js:1345 +#: js/prefs.js:1350 msgid "Rescore all articles? This operation may take a lot of time." msgstr "Beräkna nya värden pÃ¥ alla artiklar? Detta kan ta mycket lÃ¥ng tid." -#: js/prefs.js:1348 -#, fuzzy +#: js/prefs.js:1353 msgid "Rescoring feeds..." -msgstr "Beräkna kanalens poäng pÃ¥ nytt" +msgstr "Räknar om flödets poäng..." -#: js/prefs.js:1365 +#: js/prefs.js:1370 msgid "Reset selected labels to default colors?" msgstr "Ã…terställ valda etiketter till standardfärger?" -#: js/prefs.js:1402 +#: js/prefs.js:1407 msgid "Settings Profiles" msgstr "Inställningsprofiler" -#: js/prefs.js:1411 -msgid "Remove selected profiles? Active and default profiles will not be removed." +#: js/prefs.js:1416 +msgid "" +"Remove selected profiles? Active and default profiles will not be removed." msgstr "Radera markerade profiler? Aktiva profiler tas inte bort." -#: js/prefs.js:1414 -#, fuzzy +#: js/prefs.js:1419 msgid "Removing selected profiles..." -msgstr "Radera markerade profiler" +msgstr "Raderar valda profiler...." -#: js/prefs.js:1429 +#: js/prefs.js:1434 msgid "No profiles are selected." msgstr "Inga profiler valda." -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1442 js/prefs.js:1495 msgid "Activate selected profile?" msgstr "Aktivera markerad profil?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1458 js/prefs.js:1511 msgid "Please choose a profile to activate." msgstr "Välj en profil att aktivera." -#: js/prefs.js:1458 -#, fuzzy +#: js/prefs.js:1463 msgid "Creating profile..." -msgstr "Skapa profil" +msgstr "Skapar profil..." -#: js/prefs.js:1514 +#: js/prefs.js:1519 msgid "This will invalidate all previously generated feed URLs. Continue?" -msgstr "Detta tar bort alla tidigare skapade kanal-URLer. Fortsätt?" +msgstr "Detta tar bort alla tidigare skapade flödes-URLer. Vill du fortsätta?" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1522 js/prefs.js:1541 msgid "Clearing URLs..." -msgstr "" +msgstr "Rensar URLer..." -#: js/prefs.js:1524 -#, fuzzy +#: js/prefs.js:1529 msgid "Generated URLs cleared." -msgstr "Skapa ny URL" +msgstr "Genererade URLer rensade." -#: js/prefs.js:1533 +#: js/prefs.js:1538 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "Detta tar bort alla tidigare delade artikel-URLer. Fortsätt?" -#: js/prefs.js:1543 +#: js/prefs.js:1548 msgid "Shared URLs cleared." -msgstr "" +msgstr "Delade URLer rensade." -#: js/prefs.js:1649 +#: js/prefs.js:1654 msgid "Label Editor" msgstr "Etikettseditor" -#: js/prefs.js:1771 +#: js/prefs.js:1776 msgid "Subscribing to feeds..." -msgstr "Prenumerera pÃ¥ kanaler..." +msgstr "Prenumererar pÃ¥ flöden..." -#: js/prefs.js:1808 +#: js/prefs.js:1813 msgid "Clear stored data for this plugin?" -msgstr "Radera lagrad data för denna plugin?" +msgstr "Radera lagrad data för detta tillägg?" #: js/tt-rss.js:124 msgid "Mark all articles as read?" msgstr "Flagga alla artiklar som lästa?" #: js/tt-rss.js:130 -#, fuzzy msgid "Marking all feeds as read..." -msgstr "Märk alla kanaler som lästa" +msgstr "Markerar alla flöden som lästa..." -#: js/tt-rss.js:371 +#: js/tt-rss.js:355 msgid "Please enable mail plugin first." -msgstr "Aktivera e-post-pluginen först." +msgstr "Aktivera e-post-tillägget först." -#: js/tt-rss.js:483 -#, fuzzy +#: js/tt-rss.js:461 msgid "Please enable embed_original plugin first." -msgstr "Aktivera plugin embed_original först." +msgstr "Vänligen aktivera tillägget embed_original först." -#: js/tt-rss.js:609 +#: js/tt-rss.js:587 msgid "Select item(s) by tags" -msgstr "Välj artiklar frÃ¥n taggar" +msgstr "Välj artiklar baserat pÃ¥ taggar" -#: js/tt-rss.js:630 +#: js/tt-rss.js:608 msgid "You can't unsubscribe from the category." msgstr "Du kan inte säga upp prenumeration pÃ¥ kategorin." -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:613 js/tt-rss.js:765 msgid "Please select some feed first." -msgstr "Markera nÃ¥gra kanaler först." +msgstr "Välj nÃ¥gra flöden först." -#: js/tt-rss.js:782 +#: js/tt-rss.js:760 msgid "You can't rescore this kind of feed." -msgstr "Den här typen av kanal kan inte poängsättas." +msgstr "Den här typen av flöden kan inte poängsättas." -#: js/tt-rss.js:792 +#: js/tt-rss.js:770 msgid "Rescore articles in %s?" msgstr "Beräkna om poängen för artiklarna i %s?" -#: js/tt-rss.js:795 -#, fuzzy +#: js/tt-rss.js:773 msgid "Rescoring articles..." -msgstr "Poängsätt pÃ¥ nytt" +msgstr "Räknar om artikelpoäng..." -#: js/tt-rss.js:929 +#: js/tt-rss.js:907 msgid "New version available!" msgstr "Ny version tillgänglig!" -#: js/viewfeed.js:106 +#: js/viewfeed.js:104 msgid "Cancel search" msgstr "Avbryt sökning" -#: js/viewfeed.js:455 -#: plugins/digest/digest.js:258 +#: js/viewfeed.js:438 plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "Ta bort stjärnmarkering frÃ¥n artikeln" -#: js/viewfeed.js:459 -#: plugins/digest/digest.js:260 +#: js/viewfeed.js:443 plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" -msgstr "Stjärnmärk artikeln" +msgstr "Stjärnmärk artikel" -#: js/viewfeed.js:499 -#: plugins/digest/digest.js:263 +#: js/viewfeed.js:476 plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "Avpublicera artikeln" -#: js/viewfeed.js:503 -#: plugins/digest/digest.js:265 +#: js/viewfeed.js:481 plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "Publicera artikel" -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 -#: plugins/mailto/init.js:7 +#: js/viewfeed.js:677 js/viewfeed.js:705 js/viewfeed.js:732 js/viewfeed.js:795 +#: js/viewfeed.js:829 js/viewfeed.js:949 js/viewfeed.js:992 +#: js/viewfeed.js:1045 js/viewfeed.js:2051 plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "Inga artiklar valda." -#: js/viewfeed.js:983 -#, fuzzy +#: js/viewfeed.js:957 msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" -msgstr[0] "Radera %d markerade artiklar i %s?" -msgstr[1] "Radera %d markerade artiklar i %s?" +msgstr[0] "Radera %d vald artikel i %s?" +msgstr[1] "Radera %d valda artiklar i %s?" -#: js/viewfeed.js:985 -#, fuzzy +#: js/viewfeed.js:959 msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" -msgstr[0] "Radera %d markerade artiklar?" -msgstr[1] "Radera %d markerade artiklar?" +msgstr[0] "Radera %d vald artikel?" +msgstr[1] "Radera %d valda artiklar?" -#: js/viewfeed.js:1027 -#, fuzzy +#: js/viewfeed.js:1001 msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" -msgstr[0] "Arkivera %d markerade artiklar i %s?" -msgstr[1] "Arkivera %d markerade artiklar i %s?" +msgstr[0] "Arkivera %d vald artikel i %s?" +msgstr[1] "Arkivera %d valda artiklar i %s?" -#: js/viewfeed.js:1030 -#, fuzzy +#: js/viewfeed.js:1004 msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" -msgstr[0] "Flyta tillbaka %d arkiverade artiklar?" -msgstr[1] "Flyta tillbaka %d arkiverade artiklar?" +msgstr[0] "Flytta tillbaka %d arkiverad artikel?" +msgstr[1] "Flytta tillbaka %d arkiverade artiklar?" -#: js/viewfeed.js:1032 -msgid "Please note that unstarred articles might get purged on next feed update." +#: js/viewfeed.js:1006 +msgid "" +"Please note that unstarred articles might get purged on next feed update." msgstr "" +"Vänligen notera att icke stjärnmärkta artiklar kanske rensas vid nästa " +"flödesuppdatering." -#: js/viewfeed.js:1077 -#, fuzzy +#: js/viewfeed.js:1051 msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" -msgstr[0] "Flagga %d markerade artiklar i %s som lästa?" -msgstr[1] "Flagga %d markerade artiklar i %s som lästa?" +msgstr[0] "Markera %d vald artikel i %s som läst?" +msgstr[1] "Markera %d valda artiklar i %s som läst?" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1075 msgid "Edit article Tags" msgstr "Redigera artikeltaggar" -#: js/viewfeed.js:1107 -#, fuzzy +#: js/viewfeed.js:1081 msgid "Saving article tags..." -msgstr "Redigera artikeltaggar" +msgstr "Sparar artikeltaggar..." -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1278 msgid "No article is selected." msgstr "Ingen artikel vald." -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1313 msgid "No articles found to mark" msgstr "Hittade inga artiklar att flagga" -#: js/viewfeed.js:1347 -#, fuzzy +#: js/viewfeed.js:1315 msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" -msgstr[0] "Flagga %d artiklar som lästa?" -msgstr[1] "Flagga %d artiklar som lästa?" +msgstr[0] "Markera %d artikel som läst?" +msgstr[1] "Markera %d artiklar som lästa?" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1827 msgid "Open original article" msgstr "Öppna orginalartikeln" -#: js/viewfeed.js:1888 -#, fuzzy +#: js/viewfeed.js:1833 msgid "Display article URL" -msgstr "Visa artikelns URL" +msgstr "Visa artikel-URL" -#: js/viewfeed.js:1907 -#, fuzzy +#: js/viewfeed.js:1852 msgid "Toggle marked" -msgstr "Växla stjärnmarkering" +msgstr "Växla markerade" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:1933 msgid "Assign label" msgstr "Ange etikett" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:1938 msgid "Remove label" -msgstr "Radera etikett" +msgstr "Ta bort etikett" -#: js/viewfeed.js:2017 +#: js/viewfeed.js:1962 msgid "Playing..." msgstr "Spelar..." -#: js/viewfeed.js:2018 +#: js/viewfeed.js:1963 msgid "Click to pause" msgstr "Klicka för att pausa" -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2020 msgid "Please enter new score for selected articles:" msgstr "Ange ny poäng för markerade artiklar:" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2062 msgid "Please enter new score for this article:" msgstr "Ange ny poäng för denna artikel:" -#: js/viewfeed.js:2150 -#, fuzzy +#: js/viewfeed.js:2095 msgid "Article URL:" -msgstr "Artikel URL" +msgstr "URL för artikel:" #: plugins/digest/digest.js:72 -#, fuzzy msgid "Mark %d displayed article as read?" msgid_plural "Mark %d displayed articles as read?" -msgstr[0] "Flagga %d artiklar som lästa?" -msgstr[1] "Flagga %d artiklar som lästa?" +msgstr[0] "Markera %d visad artikel som läst?" +msgstr[1] "Markera %d visade artiklar som lästa?" #: plugins/digest/digest.js:290 msgid "Error: unable to load article." @@ -3550,26 +3389,24 @@ msgid "Click to expand article." msgstr "Klicka för att expandera artikeln." #: plugins/digest/digest.js:535 -#, fuzzy msgid "%d more..." msgid_plural "%d more..." -msgstr[0] "%d fler..." -msgstr[1] "%d fler..." +msgstr[0] "%d mer..." +msgstr[1] "%d mer..." #: plugins/digest/digest.js:542 msgid "No unread feeds." -msgstr "Inga olästa kanaler." +msgstr "Inga olästa flöden." #: plugins/digest/digest.js:649 msgid "Load more..." -msgstr "Ladda fler..." +msgstr "Ladda mer..." #: plugins/embed_original/init.js:6 msgid "Sorry, your browser does not support sandboxed iframes." msgstr "Din webbläsare stöder inte sandboxade iframes" -#: plugins/mailto/init.js:21 -#: plugins/mail/mail.js:21 +#: plugins/mailto/init.js:21 plugins/mail/mail.js:21 msgid "Forward article by email" msgstr "Vidarebefordra artikel via e-post" @@ -3578,11 +3415,18 @@ msgid "Export Data" msgstr "Exportera data" #: plugins/import_export/import_export.js:40 -#, fuzzy -msgid "Finished, exported %d article. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgid_plural "Finished, exported %d articles. You can download the data <a class='visibleLink' href='%u'>here</a>." -msgstr[0] "Färdig, %d artiklar exporterades. <a class='visibleLink' href='%u'>Här</a> kan du ladda ned dem." -msgstr[1] "Färdig, %d artiklar exporterades. <a class='visibleLink' href='%u'>Här</a> kan du ladda ned dem." +msgid "" +"Finished, exported %d article. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgid_plural "" +"Finished, exported %d articles. You can download the data <a " +"class='visibleLink' href='%u'>here</a>." +msgstr[0] "" +"Klart, %d artikel exporterades. Du kan ladda ner datan <a " +"class='visibleLink' href='%u'>här</a>." +msgstr[1] "" +"Klart, %d artiklar exporterades. Du kan ladda ner datan <a " +"class='visibleLink' href='%u'>här</a>." #: plugins/import_export/import_export.js:93 msgid "Data Import" @@ -3593,18 +3437,16 @@ msgid "Please choose the file first." msgstr "Välj fil först." #: plugins/note/note.js:17 -#, fuzzy msgid "Saving article note..." -msgstr "Redigera artikelkommentar" +msgstr "Sparar artikelnotering..." #: plugins/googlereaderimport/init.js:18 msgid "Google Reader Import" -msgstr "" +msgstr "Google Reader-import" #: plugins/googlereaderimport/init.js:42 -#, fuzzy msgid "Please choose a file first." -msgstr "Välj fil först." +msgstr "Vänligen välj en fil först." #: plugins/instances/instances.js:10 msgid "Link Instance" @@ -3619,12 +3461,10 @@ msgid "Remove selected instances?" msgstr "Ta bort markerade instanser?" #: plugins/instances/instances.js:125 -#, fuzzy msgid "Removing selected instances..." -msgstr "Ta bort markerade instanser?" +msgstr "Tar bort markerade instanser..." -#: plugins/instances/instances.js:139 -#: plugins/instances/instances.js:151 +#: plugins/instances/instances.js:139 plugins/instances/instances.js:151 msgid "No instances are selected." msgstr "Inga instanser valda." @@ -3637,73 +3477,126 @@ msgid "Share article by URL" msgstr "Dela artikel via URL" #: plugins/updater/updater.js:58 +msgid "" +"Live updating is considered experimental. Backup your tt-rss directory " +"before continuing. Please type 'yes' to continue." +msgstr "" +"Live-uppdatering anses experimentell. Ta backup pÃ¥ din tt-rss-katalog innan " +"du fortsätter. Skriv 'ja' för att fortsätta." + +#~ msgid "Title" +#~ msgstr "Titel" + +#~ msgid "System" +#~ msgstr "System" + #, fuzzy -msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." -msgstr "Liveuppdatering är en experimentell funktion. Gör backup pÃ¥ din tt-rss-katalog innan du fortsätter. Skriv 'ja' för att fortsätta." +#~ msgid "Move to next article (don't expand or mark read)" +#~ msgstr "Öppna nästa artikel (skrolla inte lÃ¥nga artiklar)" -#~ msgid "Default interval between feed updates" -#~ msgstr "Standardintervall mellan kanaluppdateringar" +#, fuzzy +#~ msgid "Move to previous article (don't expand or mark read)" +#~ msgstr "Öppna föregÃ¥ende artikel (skrolla inte lÃ¥nga artiklar)" -#~ msgid "Could not update database" -#~ msgstr "Kunde inte uppdatera databasen" +#, fuzzy +#~ msgid "Toggle article expansion (combined mode)" +#~ msgstr "Expandera artiklar automatiskt i kombinerat läge" -#~ msgid "Could not find necessary schema file, need version:" -#~ msgstr "Kunde inte hitta rätt schemafil, behöver version:" +#~ msgid "LibXML error %s at line %d (column %d): %s" +#~ msgstr "LibXML-fel %s pÃ¥ rad %d (kolumn %d): %s" -#~ msgid ", found: " -#~ msgstr ", hittade: " +#~ msgid "Does not display images in articles, reduces automatic refreshes." +#~ msgstr "Visar inte bilder i artiklar, reducerar automatiska omladdningar." -#~ msgid "Tiny Tiny RSS database is up to date." -#~ msgstr "Tiny Tiny RSS databas är uppdaterad." +#~ msgid "Last updated: %s" +#~ msgstr "Senast uppdaterat: %s" -#~ msgid "Please backup your database before proceeding." -#~ msgstr "Gör en backup av databasen innan du forsätter." +#~ msgid "Never" +#~ msgstr "Aldrig" -#~ msgid "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to <b>%d</b>)." -#~ msgstr "Ihre Tiny Tiny RSS Datenbank benötigt eine Aktualisierung auf die neuste Version (<b>%d</b> nach <b>%d</b>)." +#~ msgid "Upload failed with error code %d" +#~ msgstr "Uppladdningen misslyckades med felkod %d" -#~ msgid "Performing updates..." -#~ msgstr "Uppdatering pÃ¥gÃ¥r..." +#, fuzzy +#~ msgid "Unable to move uploaded file." +#~ msgstr "Fel: kunde inte ladda artikel." -#~ msgid "Updating to version %d..." -#~ msgstr "Uppdaterar till version %d..." +#, fuzzy +#~ msgid "Error: unable to find moved OPML file." +#~ msgstr "Fel: kunde inte ladda artikel." + +#, fuzzy +#~ msgid "Default feed update interval" +#~ msgstr "Standardintervall" -#~ msgid "Checking version... " -#~ msgstr "Kontrollerar version..." +#~ msgid "Time zone" +#~ msgstr "Tidszon" -#~ msgid "OK!" -#~ msgstr "OK!" +#~ msgid "Theme" +#~ msgstr "Tema" -#~ msgid "ERROR!" -#~ msgstr "FEL!" +#~ msgid "Your preferences are now set to default values." +#~ msgstr "Dina inställningar är nu satta till standardvärdena." #, fuzzy -#~ msgid "Finished. Performed <b>%d</b> update up to schema version <b>%d</b>." -#~ msgid_plural "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>." -#~ msgstr[0] "" -#~ "Klart. <b>%d</b> Implementerar nu schema\n" -#~ "\t\t\tVersion <b>%d</b>." -#~ msgstr[1] "" -#~ "Klart. <b>%d</b> Implementerar nu schema\n" -#~ "\t\t\tVersion <b>%d</b>." +#~ msgid "Enter the generated one time password" +#~ msgstr "Ange ditt engÃ¥ngslösenord:" -#~ msgid "Your database schema is from a newer version of Tiny Tiny RSS." -#~ msgstr "Ditt databasschema är för en nyare Tiny Tiny RSS Version." +#, fuzzy +#~ msgid "Save and exit preferences" +#~ msgstr "Lämna inställningarna" -#~ msgid "Found schema version: <b>%d</b>, required: <b>%d</b>." -#~ msgstr "Fann schemaversion: <b>%d</b>, behöver version: <b>%d</b>." +#, fuzzy +#~ msgid "Incorrect one time password" +#~ msgstr "Felaktigt lösenord" -#~ msgid "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer version and continue." -#~ msgstr "Kan inte uppdatera schema. Uppdatera Tiny Tiny RSS pÃ¥ filsystemet till en ny version " +#~ msgid "Error Log" +#~ msgstr "Fellogg" -#~ msgid "Mark feed as read" -#~ msgstr "Flagga kanal som läst" +#~ msgid "Refresh" +#~ msgstr "Uppdatera" -#~ msgid "Enable external API" -#~ msgstr "Aktivera externt API" +#~ msgid "Error" +#~ msgstr "Fel" -#~ msgid "When this option is enabled, headlines in Special feeds and Labels are grouped by feeds" -#~ msgstr "Gruppera rubriker efter kanaler i Etiketter och Specialkanaler" +#~ msgid "Filename" +#~ msgstr "Filnamn" + +#~ msgid "Message" +#~ msgstr "Meddelande" + +#~ msgid "Date" +#~ msgstr "Datum" + +#~ msgid "It is suggested to backup your tt-rss directory first." +#~ msgstr "Det är rekommenderat att ta backup av din tt-rss-katalog först." + +#~ msgid "Your database will not be modified." +#~ msgstr "Din databas kommer inte att modifieras." + +#, fuzzy +#~ msgid "Click to close" +#~ msgstr "Klicka för att pausa" + +#~ msgid "Expand to select feed" +#~ msgstr "Expandera för att välja flöde" + +#~ msgid "XML validation failed: %s" +#~ msgstr "Validering av XML misslyckades: %s" + +#~ msgid "%d article selected" +#~ msgid_plural "%d articles selected" +#~ msgstr[0] "%d artikel vald" +#~ msgstr[1] "%d artiklar valda" + +#~ msgid "Updated" +#~ msgstr "Uppdaterade" + +#~ msgid "Score" +#~ msgstr "Poäng" + +#~ msgid "Related" +#~ msgstr "Relaterade" #~ msgid "Title or Content" #~ msgstr "Titel eller innehÃ¥ll" @@ -3729,26 +3622,22 @@ msgstr "Liveuppdatering är en experimentell funktion. Gör backup pÃ¥ din tt-rs #~ msgid "Modify score" #~ msgstr "Redigera poäng" -#~ msgid "This option is useful when you are reading several planet-type aggregators with partially colliding userbase. When disabled, it forces same posts from different feeds to appear only once." -#~ msgstr "Detta är användbart när du läser flera sammanslagna kanaler som har delvis samma användarbas. När inaktiverad sÃ¥ visas samma artikel frÃ¥n flera olika kanaler endast en gÃ¥ng." - -#~ msgid "Date syntax appears to be correct:" -#~ msgstr "Datumsyntaxen verkar vara korrekt:" - -#~ msgid "Date syntax is incorrect." -#~ msgstr "Datumsyntaxen är felaktig." - -#~ msgid "Updated" -#~ msgstr "Uppdaterade" - -#~ msgid "Date" -#~ msgstr "Datum" - -#~ msgid "Score" -#~ msgstr "Poäng" +#~ msgid "" +#~ "This option is useful when you are reading several planet-type " +#~ "aggregators with partially colliding userbase. When disabled, it forces " +#~ "same posts from different feeds to appear only once." +#~ msgstr "" +#~ "Detta är användbart när du läser flera sammanslagna kanaler som har " +#~ "delvis samma användarbas. När inaktiverad sÃ¥ visas samma artikel frÃ¥n " +#~ "flera olika kanaler endast en gÃ¥ng." + +#~ msgid "" +#~ "When this option is enabled, headlines in Special feeds and Labels are " +#~ "grouped by feeds" +#~ msgstr "Gruppera rubriker efter kanaler i Etiketter och Specialkanaler" -#~ msgid "Related" -#~ msgstr "Relaterade" +#~ msgid "Enable external API" +#~ msgstr "Aktivera externt API" #~ msgid "Notice" #~ msgstr "Notering" @@ -3804,8 +3693,17 @@ msgstr "Liveuppdatering är en experimentell funktion. Gör backup pÃ¥ din tt-rs #~ msgid "New articles available in this feed (click to show)" #~ msgstr "Ny artikel i denna kanal (klicka för att visa)" -#~ msgid "This will clear your stored authentication information for Twitter. Continue?" -#~ msgstr "Detta raderar din lagrade inloggningsinformation till Twitter. Fortsätt?" +#~ msgid "Date syntax appears to be correct:" +#~ msgstr "Datumsyntaxen verkar vara korrekt:" + +#~ msgid "Date syntax is incorrect." +#~ msgstr "Datumsyntaxen är felaktig." + +#~ msgid "" +#~ "This will clear your stored authentication information for Twitter. " +#~ "Continue?" +#~ msgstr "" +#~ "Detta raderar din lagrade inloggningsinformation till Twitter. Fortsätt?" #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "Flagga alla artiklar i %s som lästa?" @@ -3864,6 +3762,9 @@ msgstr "Liveuppdatering är en experimentell funktion. Gör backup pÃ¥ din tt-rs #~ msgid "Feed actions" #~ msgstr "Kanalalternativ" +#~ msgid "Mark feed as read" +#~ msgstr "Flagga kanal som läst" + #~ msgid "If viewing category, (un)collapse it" #~ msgstr "Öppna/stäng visad kategori" @@ -3889,8 +3790,12 @@ msgstr "Liveuppdatering är en experimentell funktion. Gör backup pÃ¥ din tt-rs #~ msgid "Focus search (if present)" #~ msgstr "Fokusera sökning (om vald)" -#~ msgid "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS configuration and your access level." -#~ msgstr "<b>OBS:</b> Beroende pÃ¥ konfiguration och behörigheter sÃ¥ kanske inte alla alternativ är tillgängliga." +#~ msgid "" +#~ "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS " +#~ "configuration and your access level." +#~ msgstr "" +#~ "<b>OBS:</b> Beroende pÃ¥ konfiguration och behörigheter sÃ¥ kanske inte " +#~ "alla alternativ är tillgängliga." #~ msgid "Open article in new tab" #~ msgstr "Öppna artikel i ny flik" @@ -3965,7 +3870,8 @@ msgstr "Liveuppdatering är en experimentell funktion. Gör backup pÃ¥ din tt-rs #~ msgstr "Registera hos Twitter" #~ msgid "Could not connect to Twitter. Refresh the page or try again later." -#~ msgstr "Kunde inte ansluta till Twitter. Ladda om sidan eller försök igen senare." +#~ msgstr "" +#~ "Kunde inte ansluta till Twitter. Ladda om sidan eller försök igen senare." #~ msgid "Congratulations! You have successfully registered with Twitter." #~ msgstr "Grattis! Du är nu registrerad med Twitter." @@ -3997,11 +3903,19 @@ msgstr "Liveuppdatering är en experimentell funktion. Gör backup pÃ¥ din tt-rs #~ msgid "Twitter" #~ msgstr "Twitter" -#~ msgid "Before you can update your Twitter feeds, you must register this instance of Tiny Tiny RSS with Twitter.com." -#~ msgstr "Innan du kan uppdatera dina Twitterkanaler mÃ¥ste du registrera denna instans av Tiny Tiny RSS hos Twitter." +#~ msgid "" +#~ "Before you can update your Twitter feeds, you must register this instance " +#~ "of Tiny Tiny RSS with Twitter.com." +#~ msgstr "" +#~ "Innan du kan uppdatera dina Twitterkanaler mÃ¥ste du registrera denna " +#~ "instans av Tiny Tiny RSS hos Twitter." -#~ msgid "You have been successfully registered with Twitter.com and should be able to access your Twitter feeds." -#~ msgstr "Du är registerad hos Twitter och ska nu ha Ã¥tkomst till dina Twitterkanaler " +#~ msgid "" +#~ "You have been successfully registered with Twitter.com and should be able " +#~ "to access your Twitter feeds." +#~ msgstr "" +#~ "Du är registerad hos Twitter och ska nu ha Ã¥tkomst till dina " +#~ "Twitterkanaler " #~ msgid "Register with Twitter.com" #~ msgstr "Registrera hos Twitter" @@ -4021,5 +3935,9 @@ msgstr "Liveuppdatering är en experimentell funktion. Gör backup pÃ¥ din tt-rs #~ msgid "Filter Test Results" #~ msgstr "Filtertestresultat" -#~ msgid "When \"Mark as read\" button is clicked in toolbar, automatically open next feed with unread articles." -#~ msgstr "Växla automatiskt till nästa kanal när du klickar pÃ¥ \"Markera alla som lästa\"i verktygsraden." +#~ msgid "" +#~ "When \"Mark as read\" button is clicked in toolbar, automatically open " +#~ "next feed with unread articles." +#~ msgstr "" +#~ "Växla automatiskt till nästa kanal när du klickar pÃ¥ \"Markera alla som " +#~ "lästa\"i verktygsraden." diff --git a/locale/zh_CN/LC_MESSAGES/messages.mo b/locale/zh_CN/LC_MESSAGES/messages.mo Binary files differindex a6e1ee66e..8e3651999 100644 --- a/locale/zh_CN/LC_MESSAGES/messages.mo +++ b/locale/zh_CN/LC_MESSAGES/messages.mo diff --git a/locale/zh_CN/LC_MESSAGES/messages.po b/locale/zh_CN/LC_MESSAGES/messages.po index 229b0d56d..2572a1bb2 100644 --- a/locale/zh_CN/LC_MESSAGES/messages.po +++ b/locale/zh_CN/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Tiny Tiny RSS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: 2012-02-14 08:32+0000\n" "Last-Translator: Sai <lazycai.ffsky@gmail.com>\n" "Language-Team: Chinese (China) (http://www.transifex.net/projects/p/tt-rss/language/zh_CN/)\n" @@ -18,88 +18,89 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "使用默认" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "ä»Žä¸æ¸…ç†" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "1周å‰" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "2周å‰" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "1个月å‰" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "2个月å‰" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "3个月å‰" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "默认间隔" -#: backend.php:79 -#: backend.php:89 +#: backend.php:83 +#: backend.php:93 msgid "Disable updates" msgstr "ç¦ç”¨æ›´æ–°" -#: backend.php:80 -#: backend.php:90 +#: backend.php:84 +#: backend.php:94 msgid "Each 15 minutes" msgstr "æ¯15分钟" -#: backend.php:81 -#: backend.php:91 +#: backend.php:85 +#: backend.php:95 msgid "Each 30 minutes" msgstr "æ¯30分钟" -#: backend.php:82 -#: backend.php:92 +#: backend.php:86 +#: backend.php:96 msgid "Hourly" msgstr "æ¯å°æ—¶" -#: backend.php:83 -#: backend.php:93 +#: backend.php:87 +#: backend.php:97 msgid "Each 4 hours" msgstr "æ¯4å°æ—¶" -#: backend.php:84 -#: backend.php:94 +#: backend.php:88 +#: backend.php:98 msgid "Each 12 hours" msgstr "æ¯12å°æ—¶" -#: backend.php:85 -#: backend.php:95 +#: backend.php:89 +#: backend.php:99 msgid "Daily" msgstr "æ¯å¤©" -#: backend.php:86 -#: backend.php:96 +#: backend.php:90 +#: backend.php:100 msgid "Weekly" msgstr "æ¯å‘¨" -#: backend.php:99 +#: backend.php:103 #: classes/pref/users.php:123 +#: classes/pref/system.php:44 msgid "User" msgstr "用户" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "Power User" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "管ç†å‘˜" @@ -155,352 +156,348 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "SQL 脱出测试失败,请检查您的数æ®åº“å’Œ PHP 设置。" -#: index.php:135 -#: index.php:152 -#: index.php:277 -#: prefs.php:103 +#: index.php:128 +#: index.php:145 +#: index.php:265 +#: prefs.php:98 #: classes/backend.php:5 #: classes/pref/labels.php:296 #: classes/pref/filters.php:680 -#: classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 +#: classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 #: js/feedlist.js:128 -#: js/feedlist.js:438 -#: js/functions.js:420 -#: js/functions.js:758 +#: js/feedlist.js:439 +#: js/functions.js:446 +#: js/functions.js:784 #: js/functions.js:1194 -#: js/functions.js:1329 -#: js/functions.js:1641 +#: js/functions.js:1330 +#: js/functions.js:1642 #: js/prefs.js:86 #: js/prefs.js:576 #: js/prefs.js:666 -#: js/prefs.js:858 -#: js/prefs.js:1440 -#: js/prefs.js:1493 -#: js/prefs.js:1552 -#: js/prefs.js:1569 -#: js/prefs.js:1585 -#: js/prefs.js:1601 -#: js/prefs.js:1620 -#: js/prefs.js:1793 -#: js/prefs.js:1809 -#: js/tt-rss.js:497 -#: js/tt-rss.js:514 -#: js/viewfeed.js:800 -#: js/viewfeed.js:1224 +#: js/prefs.js:867 +#: js/prefs.js:1454 +#: js/prefs.js:1507 +#: js/prefs.js:1566 +#: js/prefs.js:1583 +#: js/prefs.js:1599 +#: js/prefs.js:1615 +#: js/prefs.js:1634 +#: js/prefs.js:1807 +#: js/prefs.js:1823 +#: js/tt-rss.js:506 +#: js/tt-rss.js:523 +#: js/viewfeed.js:820 +#: js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 #: plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "读å–ä¸ï¼Œè¯·ç¨å€™â€¦â€¦" -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "收缩侧边æ " -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "æ˜¾ç¤ºæ–‡ç« " -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "自动适应" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "å…¨éƒ¨æ–‡ç« " -#: index.php:174 -#: include/functions.php:1961 -#: classes/feeds.php:106 +#: index.php:167 +#: include/functions.php:2007 +#: classes/feeds.php:98 msgid "Starred" msgstr "åŠ æ˜Ÿæ ‡çš„" -#: index.php:175 -#: include/functions.php:1962 -#: classes/feeds.php:107 +#: index.php:168 +#: include/functions.php:2008 +#: classes/feeds.php:99 msgid "Published" msgstr "å·²å‘布" -#: index.php:176 -#: classes/feeds.php:93 -#: classes/feeds.php:105 +#: index.php:169 +#: classes/feeds.php:85 +#: classes/feeds.php:97 msgid "Unread" msgstr "未读" -#: index.php:177 +#: index.php:170 #, fuzzy msgid "Unread First" msgstr "未读" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "忽略评分" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "æŽ’åºæ–‡ç« " -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "默认" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "æ ‡é¢˜" -#: index.php:192 -#: index.php:241 -#: include/functions.php:1951 -#: classes/feeds.php:111 -#: classes/feeds.php:440 +#: index.php:185 +#: index.php:233 +#: include/functions.php:1997 +#: classes/feeds.php:103 +#: classes/feeds.php:441 #: js/FeedTree.js:128 #: js/FeedTree.js:156 #: plugins/digest/digest.js:647 msgid "Mark as read" msgstr "æ ‡è®°ä¸ºå·²è¯»" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "Tiny Tiny RSS 有新版本啦ï¼" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "动作" -#: index.php:233 +#: index.php:225 #, fuzzy msgid "Preferences..." msgstr "å好设置" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "æœç´¢" -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "ä¿¡æ¯æºæ“作:" -#: index.php:236 -#: classes/handler/public.php:578 +#: index.php:228 +#: classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "è®¢é˜…ä¿¡æ¯æº" -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "ç¼–è¾‘ä¿¡æ¯æº" -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "ä¸ºä¿¡æ¯æºé‡æ–°è¯„分" -#: index.php:239 -#: classes/pref/feeds.php:717 -#: classes/pref/feeds.php:1283 +#: index.php:231 +#: classes/pref/feeds.php:759 +#: classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "å–æ¶ˆè®¢é˜…" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "å…¨éƒ¨ä¿¡æ¯æºï¼š" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "éšè—(显示)已读信æ¯" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "å…¶ä»–æ“作:" -#: index.php:245 -msgid "Switch to digest..." -msgstr "切æ¢è‡³æ‘˜è¦æ¨¡å¼" - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "æ˜¾ç¤ºæ ‡ç¾äº‘" - -#: index.php:248 -#: include/functions.php:1937 +#: index.php:236 +#: include/functions.php:1983 #, fuzzy msgid "Toggle widescreen mode" msgstr "é”å®šåŠ æ˜Ÿæ ‡çš„é¡¹" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "é€šè¿‡è‡ªå®šä¹‰æ ‡ç¾é€‰æ‹©" -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "åˆ›å»ºé¢„å®šä¹‰æ ‡ç¾" -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "创建过滤器" -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "å¿«æ·é”®å¸®åŠ©" -#: index.php:261 -#: plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 +#: plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "注销" -#: prefs.php:36 -#: prefs.php:121 -#: include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 +#: prefs.php:116 +#: include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "å好设置" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "å¿«æ·é”®" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "退出å好设置" -#: prefs.php:124 +#: prefs.php:119 #: classes/pref/feeds.php:107 -#: classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "ä¿¡æ¯æº" -#: prefs.php:127 +#: prefs.php:122 #: classes/pref/filters.php:156 msgid "Filters" msgstr "过滤器" -#: prefs.php:130 -#: include/functions.php:1150 -#: include/functions.php:1787 +#: prefs.php:125 +#: include/functions.php:1176 +#: include/functions.php:1831 #: classes/pref/labels.php:90 -#: plugins/mobile/mobile-functions.php:198 +#: plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "é¢„å®šä¹‰æ ‡ç¾" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "用户" -#: register.php:186 +#: prefs.php:132 +msgid "System" +msgstr "" + +#: register.php:184 #: include/login_form.php:238 msgid "Create new account" msgstr "创建新的å¸å·" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "新用户注册功能被管ç†å‘˜ç¦ç”¨ã€‚" -#: register.php:196 -#: register.php:241 -#: register.php:254 -#: register.php:269 -#: register.php:288 -#: register.php:336 -#: register.php:346 -#: register.php:358 -#: classes/handler/public.php:648 -#: classes/handler/public.php:736 -#: classes/handler/public.php:818 -#: classes/handler/public.php:893 -#: classes/handler/public.php:907 -#: classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 +#: register.php:239 +#: register.php:252 +#: register.php:267 +#: register.php:286 +#: register.php:334 +#: register.php:344 +#: register.php:356 +#: classes/handler/public.php:629 +#: classes/handler/public.php:717 +#: classes/handler/public.php:799 +#: classes/handler/public.php:874 +#: classes/handler/public.php:888 +#: classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "返回 Tiny Tiny RSS" -#: register.php:217 +#: register.php:215 msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent." msgstr "您的临时密ç 将被å‘é€è‡³æ‚¨çš„邮箱。24å°æ—¶ä¹‹å†…没有登录的å¸å·ä¼šè¢«è‡ªåŠ¨æ¸…ç†ã€‚" -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "希望使用的用户å:" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "检查å¯ç”¨æ€§" -#: register.php:228 -#: classes/handler/public.php:776 +#: register.php:226 +#: classes/handler/public.php:757 msgid "Email:" msgstr "电å邮箱:" -#: register.php:231 -#: classes/handler/public.php:781 +#: register.php:229 +#: classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "äºŒåŠ äºŒç‰äºŽå‡ :" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "æäº¤æ³¨å†Œä¿¡æ¯" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "您的注册信æ¯ä¸å®Œæ•´ã€‚" -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "抱æ‰ï¼Œè¯¥ç”¨æˆ·å已被å 用。" -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "注册失败。" -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "å¸å·åˆ›å»ºæˆåŠŸã€‚" -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "ç”¨æˆ·æ³¨å†ŒåŠŸèƒ½ç›®å‰æ²¡æœ‰å¯ç”¨ã€‚" -#: update.php:56 +#: update.php:55 #, fuzzy msgid "Tiny Tiny RSS data update script." msgstr "Tiny Tiny RSS æ•°æ®åº“是最新版。" #: include/digest.php:109 -#: include/functions.php:1159 -#: include/functions.php:1688 -#: include/functions.php:1773 -#: include/functions.php:1795 +#: include/functions.php:1185 +#: include/functions.php:1732 +#: include/functions.php:1817 +#: include/functions.php:1839 #: classes/opml.php:416 -#: classes/pref/feeds.php:222 +#: classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "未分类" @@ -514,341 +511,331 @@ msgstr[0] "%d ä¸ªå˜æ¡£çš„æ–‡ç« " msgid "No feeds found." msgstr "æœªæ‰¾åˆ°ä¿¡æ¯æºã€‚" -#: include/functions.php:1148 -#: include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 +#: include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "特殊区域" -#: include/functions.php:1637 +#: include/functions.php:1681 #: classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "å…¨éƒ¨ä¿¡æ¯æº" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "åŠ æ˜Ÿæ ‡æ–‡ç« " -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "å·²å‘å¸ƒæ–‡ç« " -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "æœ€æ–°æ›´æ–°çš„æ–‡ç« " -#: include/functions.php:1844 -#: include/functions.php:1959 +#: include/functions.php:1890 +#: include/functions.php:2005 msgid "All articles" msgstr "å…¨éƒ¨æ–‡ç« " -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "å˜æ¡£çš„æ–‡ç« " -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "导航" -#: include/functions.php:1912 +#: include/functions.php:1958 #, fuzzy msgid "Open next feed" msgstr "è‡ªåŠ¨æ˜¾ç¤ºä¸‹ä¸€ä¸ªä¿¡æ¯æº" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "" -#: include/functions.php:1914 +#: include/functions.php:1960 #, fuzzy msgid "Open next article" msgstr "打开原文" -#: include/functions.php:1915 +#: include/functions.php:1961 #, fuzzy msgid "Open previous article" msgstr "打开原文" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "" -#: include/functions.php:1918 +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" msgstr "" -#: include/functions.php:1919 +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" msgstr "" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "显示æœç´¢å¯¹è¯æ¡†" -#: include/functions.php:1921 +#: include/functions.php:1967 #, fuzzy msgid "Article" msgstr "å…¨éƒ¨æ–‡ç« " -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "é”å®šåŠ æ˜Ÿæ ‡çš„é¡¹" -#: include/functions.php:1923 -#: js/viewfeed.js:1918 +#: include/functions.php:1969 +#: js/viewfeed.js:1931 msgid "Toggle published" msgstr "é”定å‘布的项" -#: include/functions.php:1924 -#: js/viewfeed.js:1896 +#: include/functions.php:1970 +#: js/viewfeed.js:1909 msgid "Toggle unread" msgstr "é”定未读项" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "ç¼–è¾‘è‡ªå®šä¹‰æ ‡ç¾" -#: include/functions.php:1926 +#: include/functions.php:1972 #, fuzzy msgid "Dismiss selected" msgstr "ä¸å†æ˜¾ç¤ºæ‰€é€‰çš„æ–‡ç« " -#: include/functions.php:1927 +#: include/functions.php:1973 #, fuzzy msgid "Dismiss read" msgstr "ä¸å†æ˜¾ç¤ºå·²è¯»æ–‡ç« " -#: include/functions.php:1928 +#: include/functions.php:1974 #, fuzzy msgid "Open in new window" msgstr "åœ¨æ–°çª—å£æ‰“å¼€æ–‡ç« " -#: include/functions.php:1929 -#: js/viewfeed.js:1937 +#: include/functions.php:1975 +#: js/viewfeed.js:1950 msgid "Mark below as read" msgstr "" -#: include/functions.php:1930 -#: js/viewfeed.js:1931 +#: include/functions.php:1976 +#: js/viewfeed.js:1944 msgid "Mark above as read" msgstr "" -#: include/functions.php:1931 +#: include/functions.php:1977 #, fuzzy msgid "Scroll down" msgstr "全部完æˆã€‚" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "" -#: include/functions.php:1933 +#: include/functions.php:1979 #, fuzzy msgid "Select article under cursor" msgstr "é€‰æ‹©é¼ æ ‡æŒ‡å‘çš„æ–‡ç« " -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "通过邮件å‘逿–‡ç« " -#: include/functions.php:1935 +#: include/functions.php:1981 #, fuzzy msgid "Close/collapse article" msgstr "é€‰æ‹©æ‰€æœ‰æ–‡ç« " -#: include/functions.php:1936 +#: include/functions.php:1982 #, fuzzy msgid "Toggle article expansion (combined mode)" msgstr "é”定å‘布的项" -#: include/functions.php:1938 -#: plugins/embed_original/init.php:33 +#: include/functions.php:1984 +#: plugins/embed_original/init.php:31 #, fuzzy msgid "Toggle embed original" msgstr "é”定å‘布的项" -#: include/functions.php:1939 +#: include/functions.php:1985 #, fuzzy msgid "Article selection" msgstr "åé€‰æ–‡ç« " -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "é€‰æ‹©æ‰€æœ‰æ–‡ç« " -#: include/functions.php:1941 +#: include/functions.php:1987 #, fuzzy msgid "Select unread" msgstr "é€‰æ‹©æœªè¯»æ–‡ç« " -#: include/functions.php:1942 +#: include/functions.php:1988 #, fuzzy msgid "Select starred" msgstr "åŠ æ˜Ÿæ ‡" -#: include/functions.php:1943 +#: include/functions.php:1989 #, fuzzy msgid "Select published" msgstr "é€‰æ‹©æœªè¯»æ–‡ç« " -#: include/functions.php:1944 +#: include/functions.php:1990 #, fuzzy msgid "Invert selection" msgstr "åé€‰æ–‡ç« " -#: include/functions.php:1945 +#: include/functions.php:1991 #, fuzzy msgid "Deselect everything" msgstr "å–æ¶ˆé€‰æ‹©æ‰€æœ‰æ–‡ç« " -#: include/functions.php:1946 -#: classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 +#: classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "ä¿¡æ¯æº" -#: include/functions.php:1947 +#: include/functions.php:1993 #, fuzzy msgid "Refresh current feed" msgstr "åˆ·æ–°æ´»åŠ¨çš„ä¿¡æ¯æº" -#: include/functions.php:1948 +#: include/functions.php:1994 #, fuzzy msgid "Un/hide read feeds" msgstr "éšè—(显示)已读信æ¯" -#: include/functions.php:1949 -#: classes/pref/feeds.php:1275 +#: include/functions.php:1995 +#: classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "è®¢é˜…ä¿¡æ¯æº" -#: include/functions.php:1950 +#: include/functions.php:1996 #: js/FeedTree.js:135 #: js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "ç¼–è¾‘ä¿¡æ¯æº" -#: include/functions.php:1952 +#: include/functions.php:1998 #, fuzzy msgid "Reverse headlines" msgstr "å呿ޒåº" -#: include/functions.php:1953 +#: include/functions.php:1999 #, fuzzy msgid "Debug feed update" msgstr "ç¦ç”¨æ›´æ–°" -#: include/functions.php:1954 +#: include/functions.php:2000 #: js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "æ ‡è®°æ‰€æœ‰ä¿¡æ¯æºä¸ºå·²è¯»" -#: include/functions.php:1955 +#: include/functions.php:2001 #, fuzzy msgid "Un/collapse current category" msgstr "åŠ å…¥åˆ°ç±»åˆ«ï¼š" -#: include/functions.php:1956 +#: include/functions.php:2002 #, fuzzy msgid "Toggle combined mode" msgstr "é”定å‘布的项" -#: include/functions.php:1957 +#: include/functions.php:2003 #, fuzzy msgid "Toggle auto expand in combined mode" msgstr "é”定å‘布的项" -#: include/functions.php:1958 +#: include/functions.php:2004 #, fuzzy msgid "Go to" msgstr "跳转至……" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "" -#: include/functions.php:1963 -#: js/tt-rss.js:447 -#: js/tt-rss.js:606 +#: include/functions.php:2009 +#: js/tt-rss.js:456 +#: js/tt-rss.js:615 msgid "Tag cloud" msgstr "æ ‡ç¾äº‘" -#: include/functions.php:1965 +#: include/functions.php:2011 #, fuzzy msgid "Other" msgstr "å…¶ä»–ä¿¡æ¯æº" -#: include/functions.php:1966 +#: include/functions.php:2012 #: classes/pref/labels.php:281 msgid "Create label" msgstr "åˆ›å»ºé¢„å®šä¹‰æ ‡ç¾" -#: include/functions.php:1967 +#: include/functions.php:2013 #: classes/pref/filters.php:654 msgid "Create filter" msgstr "创建过滤器" -#: include/functions.php:1968 +#: include/functions.php:2014 #, fuzzy msgid "Un/collapse sidebar" msgstr "折å ä¾§è¾¹æ " -#: include/functions.php:1969 +#: include/functions.php:2015 #, fuzzy msgid "Show help dialog" msgstr "显示æœç´¢å¯¹è¯æ¡†" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "" -#: include/functions.php:2985 -#: js/viewfeed.js:2024 -msgid "Click to play" -msgstr "ç‚¹å‡»æ’æ”¾" - -#: include/functions.php:2986 -#: js/viewfeed.js:2023 -msgid "Play" -msgstr "æ’æ”¾" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr " - " -#: include/functions.php:3126 -#: include/functions.php:3426 +#: include/functions.php:3155 +#: include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "æ— æ ‡ç¾" -#: include/functions.php:3136 +#: include/functions.php:3165 #: classes/feeds.php:689 msgid "Edit tags for this article" msgstr "ä¸ºæœ¬æ–‡ç¼–è¾‘è‡ªå®šä¹‰æ ‡ç¾" -#: include/functions.php:3170 +#: include/functions.php:3197 #: classes/feeds.php:641 msgid "Originally from:" msgstr "æ¥æºï¼š" -#: include/functions.php:3183 +#: include/functions.php:3210 #: classes/feeds.php:654 -#: classes/pref/feeds.php:540 +#: classes/pref/feeds.php:572 msgid "Feed URL" msgstr "ä¿¡æ¯æº URL" -#: include/functions.php:3215 +#: include/functions.php:3242 #: classes/dlg.php:37 #: classes/dlg.php:60 #: classes/dlg.php:93 @@ -860,80 +847,83 @@ msgstr "ä¿¡æ¯æº URL" #: classes/backend.php:105 #: classes/pref/users.php:99 #: classes/pref/filters.php:147 -#: classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 -#: classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 -#: plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 -#: plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 +#: classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 +#: plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 +#: plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "关闿œ¬çª—å£" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "(编辑注记)" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "未知类型" -#: include/functions.php:3742 +#: include/functions.php:3749 #, fuzzy msgid "Attachments" msgstr "附件:" +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + #: include/login_form.php:183 -#: classes/handler/public.php:483 -#: classes/handler/public.php:771 +#: classes/handler/public.php:475 +#: classes/handler/public.php:752 #: plugins/mobile/login_form.php:40 msgid "Login:" msgstr "登陆:" -#: include/login_form.php:192 -#: classes/handler/public.php:486 +#: include/login_form.php:194 +#: classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "密ç :" -#: include/login_form.php:197 +#: include/login_form.php:199 #, fuzzy msgid "I forgot my password" msgstr "ç”¨æˆ·åæˆ–密ç 错误" -#: include/login_form.php:201 -#: classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "è¯è¨€ï¼š" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "å好:" -#: include/login_form.php:213 +#: include/login_form.php:209 #: classes/handler/public.php:233 -#: classes/rpc.php:64 -#: classes/pref/prefs.php:1043 +#: classes/rpc.php:63 +#: classes/pref/prefs.php:1036 msgid "Default profile" msgstr "默认å好设置" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "使用较少æµé‡" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" #: include/login_form.php:235 -#: classes/handler/public.php:499 +#: classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "登录" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "æ— æ³•éªŒè¯ä¼šè¯ï¼ˆIP 错误)" @@ -949,168 +939,168 @@ msgstr "æœ¬æ–‡çš„æ ‡ç¾ï¼Œè¯·ç”¨é€—å·åˆ†å¼€ï¼š" #: classes/pref/users.php:176 #: classes/pref/labels.php:79 #: classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 -#: classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 -#: plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 -#: plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 +#: classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 +#: plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 +#: plugins/instances/init.php:245 msgid "Save" msgstr "ä¿å˜" #: classes/article.php:206 -#: classes/handler/public.php:460 -#: classes/handler/public.php:502 +#: classes/handler/public.php:452 +#: classes/handler/public.php:486 #: classes/feeds.php:1037 #: classes/feeds.php:1089 #: classes/feeds.php:1149 #: classes/pref/users.php:178 #: classes/pref/labels.php:81 #: classes/pref/filters.php:408 -#: classes/pref/filters.php:804 -#: classes/pref/filters.php:880 -#: classes/pref/filters.php:947 -#: classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 -#: classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 -#: plugins/mail/init.php:126 -#: plugins/note/init.php:55 -#: plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 +#: classes/pref/filters.php:879 +#: classes/pref/filters.php:946 +#: classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 +#: classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 +#: plugins/mail/init.php:124 +#: plugins/note/init.php:53 +#: plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "å–æ¶ˆ" -#: classes/handler/public.php:424 -#: plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 +#: plugins/bookmarklets/init.php:36 #, fuzzy msgid "Share with Tiny Tiny RSS" msgstr "在 Tiny Tiny RSS ä¸è®¢é˜…" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 #, fuzzy msgid "Title:" msgstr "æ ‡é¢˜" -#: classes/handler/public.php:434 -#: classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 -#: plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 +#: classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 +#: plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "URL:" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 #, fuzzy msgid "Content:" msgstr "内容" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 #, fuzzy msgid "Labels:" msgstr "é¢„å®šä¹‰æ ‡ç¾" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "" -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 #, fuzzy msgid "Not logged in" msgstr "上次登录" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "ç”¨æˆ·åæˆ–密ç 错误" -#: classes/handler/public.php:584 -#: classes/handler/public.php:681 +#: classes/handler/public.php:565 +#: classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "å·²ç»è®¢é˜…到 <b>%s</b>." -#: classes/handler/public.php:587 -#: classes/handler/public.php:672 +#: classes/handler/public.php:568 +#: classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "订阅到 <b>%s</b>." -#: classes/handler/public.php:590 -#: classes/handler/public.php:675 +#: classes/handler/public.php:571 +#: classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "æ— æ³•è®¢é˜… <b>%s</b>。" -#: classes/handler/public.php:593 -#: classes/handler/public.php:678 +#: classes/handler/public.php:574 +#: classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "在 <b>%s</b> 䏿²¡æœ‰æ‰¾åˆ°ä¿¡æ¯æºã€‚" -#: classes/handler/public.php:596 -#: classes/handler/public.php:684 +#: classes/handler/public.php:577 +#: classes/handler/public.php:665 #, fuzzy msgid "Multiple feed URLs found." msgstr "æœªæ‰¾åˆ°ä¿¡æ¯æºã€‚" -#: classes/handler/public.php:600 -#: classes/handler/public.php:689 +#: classes/handler/public.php:581 +#: classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "æ— æ³•è®¢é˜… <b>%s</b>。<br>æ— æ³•ä¸‹è½½ä¿¡æ¯æºçš„ URL。" -#: classes/handler/public.php:618 -#: classes/handler/public.php:707 +#: classes/handler/public.php:599 +#: classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "订阅选ä¸çš„ä¿¡æ¯æº" -#: classes/handler/public.php:643 -#: classes/handler/public.php:731 +#: classes/handler/public.php:624 +#: classes/handler/public.php:712 msgid "Edit subscription options" msgstr "编辑订阅选项" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 #, fuzzy msgid "Password recovery" msgstr "密ç " -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "You will need to provide valid account name and email. New password will be sent on your email address." msgstr "" -#: classes/handler/public.php:786 +#: classes/handler/public.php:767 #: classes/pref/users.php:360 msgid "Reset password" msgstr "é‡ç½®å¯†ç " -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "" -#: classes/handler/public.php:800 -#: classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 +#: classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 #, fuzzy msgid "Go back" msgstr "移回原ä½" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "访问级别ä¸è¶³ï¼Œæ— 法è¿è¡Œè„šæœ¬ã€‚" -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "æ•°æ®åº“更新管ç†å™¨" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "执行更新" @@ -1166,7 +1156,7 @@ msgid "You can view this feed as RSS using the following URL:" msgstr "您å¯ä»¥é€šè¿‡å¦‚下 URL 以 RSS æ–¹å¼æŸ¥çœ‹æœ¬ä¿¡æ¯æºï¼š" #: classes/dlg.php:233 -#: plugins/updater/init.php:333 +#: plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "Tiny Tiny RSS 有å¯ç”¨çš„æ–°ç‰ˆæœ¬ (%s)。" @@ -1176,7 +1166,7 @@ msgid "You can update using built-in updater in the Preferences or by using upda msgstr "" #: classes/dlg.php:245 -#: plugins/updater/init.php:337 +#: plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1188,116 +1178,122 @@ msgstr "下载" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -msgid "Visit the website" -msgstr "访问网站" +#: classes/feeds.php:56 +#, fuzzy, php-format +msgid "Last updated: %s" +msgstr "上次更新:" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "以RSSä¿¡æ¯æºæ–¹å¼é˜…读" -#: classes/feeds.php:84 -#: classes/feeds.php:138 -#: classes/pref/feeds.php:1440 +#: classes/feeds.php:76 +#: classes/feeds.php:128 +#: classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "以 RSS å½¢å¼é˜…读" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "选择:" -#: classes/feeds.php:92 +#: classes/feeds.php:84 #: classes/pref/users.php:345 #: classes/pref/labels.php:275 #: classes/pref/filters.php:282 #: classes/pref/filters.php:330 #: classes/pref/filters.php:648 -#: classes/pref/filters.php:737 -#: classes/pref/filters.php:764 -#: classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 -#: classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 -#: plugins/instances/init.php:290 +#: classes/pref/filters.php:736 +#: classes/pref/filters.php:763 +#: classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 +#: classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 +#: plugins/instances/init.php:287 msgid "All" msgstr "全部" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "å选" -#: classes/feeds.php:95 +#: classes/feeds.php:87 #: classes/pref/users.php:347 #: classes/pref/labels.php:277 #: classes/pref/filters.php:284 #: classes/pref/filters.php:332 #: classes/pref/filters.php:650 -#: classes/pref/filters.php:739 -#: classes/pref/filters.php:766 -#: classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 -#: classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 -#: plugins/instances/init.php:292 +#: classes/pref/filters.php:738 +#: classes/pref/filters.php:765 +#: classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 +#: classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 +#: plugins/instances/init.php:289 msgid "None" msgstr "æ— " -#: classes/feeds.php:101 +#: classes/feeds.php:93 #, fuzzy msgid "More..." msgstr "下é¢çš„ %d 篇……" -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "é”定选择:" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "选择:" -#: classes/feeds.php:112 +#: classes/feeds.php:104 #, fuzzy msgid "Set score" msgstr "评分" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "å˜æ¡£" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "移回原ä½" -#: classes/feeds.php:118 +#: classes/feeds.php:110 #: classes/pref/filters.php:291 #: classes/pref/filters.php:339 -#: classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "åˆ é™¤" -#: classes/feeds.php:125 -#: classes/feeds.php:130 -#: plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 +#: classes/feeds.php:120 +#: plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "通过邮件转å‘" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "ä¿¡æ¯æºï¼š" -#: classes/feeds.php:205 +#: classes/feeds.php:197 #: classes/feeds.php:837 msgid "Feed not found." msgstr "找ä¸åˆ°ä¿¡æ¯æºã€‚" -#: classes/feeds.php:387 +#: classes/feeds.php:254 +#, fuzzy +msgid "Never" +msgstr "ä»Žä¸æ¸…ç†" + +#: classes/feeds.php:360 #, fuzzy, php-format msgid "Imported at %s" msgstr "导入" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "æ ‡è®°ä¸ºå·²è¯»" @@ -1349,9 +1345,9 @@ msgid "Feed or site URL" msgstr "ä¿¡æ¯æº URL" #: classes/feeds.php:989 -#: classes/pref/feeds.php:560 -#: classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/pref/feeds.php:592 +#: classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "åŠ å…¥åˆ°ç±»åˆ«ï¼š" @@ -1361,24 +1357,24 @@ msgstr "å¯ç”¨çš„ä¿¡æ¯æº" #: classes/feeds.php:1009 #: classes/pref/users.php:139 -#: classes/pref/feeds.php:590 -#: classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 +#: classes/pref/feeds.php:860 msgid "Authentication" msgstr "登录密ç " #: classes/feeds.php:1013 #: classes/pref/users.php:402 -#: classes/pref/feeds.php:596 -#: classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 +#: classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "登陆" #: classes/feeds.php:1016 -#: classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 -#: classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 +#: classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "密ç " @@ -1388,7 +1384,7 @@ msgstr "è¿™ä¸ªä¿¡æ¯æºéœ€è¦è®¤è¯" #: classes/feeds.php:1031 #: classes/feeds.php:1087 -#: classes/pref/feeds.php:1799 +#: classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "订阅" @@ -1400,8 +1396,8 @@ msgstr "æ›´å¤šä¿¡æ¯æº" #: classes/feeds.php:1148 #: classes/pref/users.php:332 #: classes/pref/filters.php:641 -#: classes/pref/feeds.php:1259 -#: js/tt-rss.js:170 +#: classes/pref/feeds.php:1316 +#: js/tt-rss.js:173 msgid "Search" msgstr "æœç´¢" @@ -1422,8 +1418,8 @@ msgstr "é™åˆ¶ï¼š" #: classes/pref/labels.php:284 #: classes/pref/filters.php:398 #: classes/pref/filters.php:667 -#: classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "移除" @@ -1507,17 +1503,39 @@ msgstr "创建过滤器" msgid "Processing category: %s" msgstr "åŠ å…¥åˆ°ç±»åˆ«ï¼š" -#: classes/opml.php:468 +#: classes/opml.php:465 +#: plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 +#: plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +#, fuzzy +msgid "Unable to move uploaded file." +msgstr "é”™è¯¯ï¼šæ— æ³•åŠ è½½æ–‡ç« ã€‚" + +#: classes/opml.php:483 +#: plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "é”™è¯¯ï¼šè¯·ä¸Šä¼ OPML 文件。" -#: classes/opml.php:475 -#: plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +#, fuzzy +msgid "Error: unable to find moved OPML file." +msgstr "é”™è¯¯ï¼šæ— æ³•åŠ è½½æ–‡ç« ã€‚" + +#: classes/opml.php:499 +#: plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "è§£æžæ–‡æ¡£æ—¶å‘生错误。" #: classes/pref/users.php:6 -#: plugins/instances/init.php:157 +#: classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "您的访问级别ä¸å¤Ÿï¼Œæ— 法打开这个舌ç¾ã€‚" @@ -1551,8 +1569,8 @@ msgid "Change password to" msgstr "更改密ç 为:" #: classes/pref/users.php:161 -#: classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "选项" @@ -1594,13 +1612,13 @@ msgstr "[tt-rss] å¯†ç æ›´æ¢æé†’" #: classes/pref/filters.php:279 #: classes/pref/filters.php:327 #: classes/pref/filters.php:645 -#: classes/pref/filters.php:734 -#: classes/pref/filters.php:761 -#: classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 -#: classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 -#: plugins/instances/init.php:287 +#: classes/pref/filters.php:733 +#: classes/pref/filters.php:760 +#: classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 +#: classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 +#: plugins/instances/init.php:284 msgid "Select" msgstr "选择" @@ -1614,7 +1632,7 @@ msgstr "详细" #: classes/pref/users.php:356 #: classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "编辑" @@ -1627,7 +1645,7 @@ msgid "Last login" msgstr "最åŽç™»é™†" #: classes/pref/users.php:426 -#: plugins/instances/init.php:337 +#: plugins/instances/init.php:334 msgid "Click to edit" msgstr "点击进行编辑" @@ -1641,7 +1659,7 @@ msgstr "没有匹é…的用户。" #: classes/pref/labels.php:22 #: classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "æ ‡é¢˜" @@ -1680,42 +1698,42 @@ msgid "Complex expressions might not give results while testing due to issues wi msgstr "" #: classes/pref/filters.php:274 -#: classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "匹é…" #: classes/pref/filters.php:288 #: classes/pref/filters.php:336 -#: classes/pref/filters.php:743 -#: classes/pref/filters.php:770 +#: classes/pref/filters.php:742 +#: classes/pref/filters.php:769 msgid "Add" msgstr "" #: classes/pref/filters.php:322 -#: classes/pref/filters.php:756 +#: classes/pref/filters.php:755 #, fuzzy msgid "Apply actions" msgstr "ä¿¡æ¯æºåŠ¨ä½œ" #: classes/pref/filters.php:372 -#: classes/pref/filters.php:785 +#: classes/pref/filters.php:784 msgid "Enabled" msgstr "å·²å¯ç”¨" #: classes/pref/filters.php:381 -#: classes/pref/filters.php:788 +#: classes/pref/filters.php:787 msgid "Match any rule" msgstr "" #: classes/pref/filters.php:390 -#: classes/pref/filters.php:791 +#: classes/pref/filters.php:790 #, fuzzy msgid "Inverse matching" msgstr "åå‘匹é…" #: classes/pref/filters.php:402 -#: classes/pref/filters.php:798 +#: classes/pref/filters.php:797 msgid "Test" msgstr "测试" @@ -1734,64 +1752,64 @@ msgid "Combine" msgstr "" #: classes/pref/filters.php:663 -#: classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "é‡ç½®æŽ’åº" #: classes/pref/filters.php:671 -#: classes/pref/feeds.php:1318 +#: classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "ä¸ºæ–‡ç« é‡æ–°è¯„分" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "创建" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "on field" -#: classes/pref/filters.php:864 +#: classes/pref/filters.php:863 #: js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "在" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #, fuzzy msgid "Save rule" msgstr "ä¿å˜" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 #: js/functions.js:1013 msgid "Add rule" msgstr "" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "执行动作" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "æŒ‡å®šå‚æ•°ï¼š" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #, fuzzy msgid "Save action" msgstr "版é¢åŠ¨ä½œ" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 #: js/functions.js:1039 #, fuzzy msgid "Add action" msgstr "ä¿¡æ¯æºåŠ¨ä½œ" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 #, fuzzy msgid "[No caption]" msgstr "æ ‡é¢˜" @@ -1942,7 +1960,7 @@ msgid "Purge unread articles" msgstr "æ¸…é™¤æœªè¯»æ–‡ç« " #: classes/pref/prefs.php:47 -#: plugins/mobile/prefs.php:60 +#: plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "åè½¬æ ‡é¢˜åˆ—è¡¨é¡ºåºï¼ˆæœ€æ—§çš„在上é¢ï¼‰" @@ -1984,7 +2002,7 @@ msgid "Strip all but most common HTML tags when reading articles." msgstr "ä»…åŠ è½½å‡ ä¸ªæœ€å¸¸ç”¨çš„ HTML æ ‡ç¾" #: classes/pref/prefs.php:54 -#: js/prefs.js:1720 +#: js/prefs.js:1734 msgid "Customize stylesheet" msgstr "è‡ªå®šä¹‰æ ·å¼" @@ -1993,7 +2011,8 @@ msgid "Customize CSS stylesheet to your liking" msgstr "自定义 CSS æ ·å¼" #: classes/pref/prefs.php:55 -msgid "User timezone" +#, fuzzy +msgid "Time zone" msgstr "用户所在时区" #: classes/pref/prefs.php:56 @@ -2005,22 +2024,27 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" -msgstr "选择主题" +#, fuzzy +msgid "Language" +msgstr "è¯è¨€ï¼š" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "请输入之å‰ä½¿ç”¨çš„密ç 。" -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "请输入一个新密ç 。" -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "两次输入的密ç ä¸ä¸€è‡´ã€‚" @@ -2028,228 +2052,238 @@ msgstr "两次输入的密ç ä¸ä¸€è‡´ã€‚" msgid "Function not supported by authentication module." msgstr "" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "设置已ä¿å˜ã€‚" -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "未知选项: %s" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "您的个人数æ®å·²ä¿å˜ã€‚" -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 #, fuzzy msgid "Personal data / Authentication" msgstr "登录密ç " -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "å§“å" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "电å邮件" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "访问级别" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "ä¿å˜ä¿¡æ¯" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "您还在使用系统默认的密ç ,请修改。" -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "原密ç " -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "新密ç " -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "确认密ç " -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "更改密ç " -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "One time passwords are currently enabled. Enter your current password below to disable." msgstr "" -#: classes/pref/prefs.php:363 -#: classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 +#: classes/pref/prefs.php:403 #, fuzzy msgid "Enter your password" msgstr "ç”¨æˆ·åæˆ–密ç 错误" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 #, fuzzy msgid "Disable OTP" msgstr "ç¦ç”¨æ›´æ–°" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP." msgstr "" -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" -msgstr "" +#: classes/pref/prefs.php:408 +#, fuzzy +msgid "Enter the generated one time password" +msgstr "请填写类别å称:" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 #, fuzzy msgid "Enable OTP" msgstr "å·²å¯ç”¨" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "自定义" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "注册" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "清空" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "ä¿å˜è®¾ç½®" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 #, fuzzy msgid "Save and exit preferences" msgstr "退出å好设置" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "管ç†å好文件" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "æ¢å¤åˆ°é»˜è®¤" -#: classes/pref/prefs.php:726 -#: classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 +#: classes/pref/prefs.php:708 msgid "Plugins" msgstr "" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "" -#: classes/pref/prefs.php:762 -#: classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 +#: classes/pref/prefs.php:796 msgid "Plugin" msgstr "" -#: classes/pref/prefs.php:763 -#: classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 +#: classes/pref/prefs.php:797 msgid "Description" msgstr "" -#: classes/pref/prefs.php:764 -#: classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 +#: classes/pref/prefs.php:798 msgid "Version" msgstr "" -#: classes/pref/prefs.php:765 -#: classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 +#: classes/pref/prefs.php:799 msgid "Author" msgstr "" -#: classes/pref/prefs.php:794 -#: classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 +#: classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 -#: classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 +#: classes/pref/prefs.php:840 #, fuzzy msgid "Clear data" msgstr "æ¸…ç©ºä¿¡æ¯æºæ•°æ®" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 #, fuzzy msgid "Enable selected plugins" msgstr "å¯ç”¨ä¿¡æ¯æºåˆ†ç±»" -#: classes/pref/prefs.php:930 -#: classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +#, fuzzy +msgid "Incorrect one time password" +msgstr "ç”¨æˆ·åæˆ–密ç 错误" + +#: classes/pref/prefs.php:925 +#: classes/pref/prefs.php:942 #, fuzzy msgid "Incorrect password" msgstr "ç”¨æˆ·åæˆ–密ç 错误" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline." msgstr "您å¯ä»¥é€šè¿‡è‡ªå®šä¹‰ CSS æ¥æ›´æ”¹é¢œè‰²ï¼Œå—体和版å¼ã€‚具体å¯å‚考 <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">本文件</a>。" -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "创建å好文件" -#: classes/pref/prefs.php:1037 -#: classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 +#: classes/pref/prefs.php:1060 msgid "(active)" msgstr "(当å‰ä½¿ç”¨çš„)" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "移除选ä¸çš„å好文件" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "å¯ç”¨å好文件" @@ -2257,280 +2291,305 @@ msgstr "å¯ç”¨å好文件" msgid "Check to enable field" msgstr "勾选以å¯ç”¨" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "ä¿¡æ¯æºæ ‡é¢˜" -#: classes/pref/feeds.php:568 -#: classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 +#: classes/pref/feeds.php:835 msgid "Update" msgstr "更新列表" -#: classes/pref/feeds.php:583 -#: classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 +#: classes/pref/feeds.php:851 msgid "Article purging:" msgstr "æ–‡ç« æ¸…ç†ï¼š" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds." msgstr "<b>æç¤ºï¼š</b>å¦‚æžœæ‚¨çš„ä¿¡æ¯æºéœ€è¦éªŒè¯ï¼Œé‚£ä¹ˆæ‚¨éœ€è¦å¡«å†™ç™»å½•ä¿¡æ¯ã€‚Twitter ä¿¡æ¯æºé™¤å¤–。" -#: classes/pref/feeds.php:622 -#: classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 +#: classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "ä»Žæœ€å—æ¬¢è¿Žçš„ä¿¡æ¯æºä¸éšè—" -#: classes/pref/feeds.php:634 -#: classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 +#: classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "包å«ç”µå邮件摘è¦" -#: classes/pref/feeds.php:647 -#: classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 +#: classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "始终显示图片附件" -#: classes/pref/feeds.php:660 -#: classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 +#: classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "" -#: classes/pref/feeds.php:673 -#: classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 +#: classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "本地缓å˜å›¾ç‰‡" -#: classes/pref/feeds.php:685 -#: classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "å°†å·²æ›´æ–°çš„æ–‡ç« æ ‡è®°ä¸ºæœªè¯»" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "å›¾æ ‡" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "替æ¢" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "釿–°è®¢é˜…ä»¥æŽ¨é€æ›´æ–°" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "为å¯ç”¨æŽ¨é€çš„ä¿¡æ¯æºé‡ç½® PubSubHubbub 订阅。" -#: classes/pref/feeds.php:1112 -#: classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 +#: classes/pref/feeds.php:1222 msgid "All done." msgstr "全部完æˆã€‚" -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "æœ‰é”™è¯¯çš„ä¿¡æ¯æº" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 #, fuzzy msgid "Inactive feeds" msgstr "åˆ·æ–°æ´»åŠ¨çš„ä¿¡æ¯æº" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "ç¼–è¾‘é€‰å®šçš„ä¿¡æ¯æº" -#: classes/pref/feeds.php:1281 -#: js/prefs.js:1765 +#: classes/pref/feeds.php:1338 +#: js/prefs.js:1779 msgid "Batch subscribe" msgstr "" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 #, fuzzy msgid "Categories" msgstr "ä¿¡æ¯æºç±»åˆ«" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 #, fuzzy msgid "Add category" msgstr "编辑类别" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 #, fuzzy msgid "Remove selected" msgstr "移除选ä¸çš„ä¿¡æ¯æºï¼Ÿ" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 #, fuzzy msgid "(Un)hide empty categories" msgstr "编辑类别" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "更多动作" -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "手动清除" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "æ¸…ç©ºä¿¡æ¯æºæ•°æ®" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "OPML" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings." msgstr "" -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "" -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 #, fuzzy msgid "Import my OPML" msgstr "æ£åœ¨å¯¼å…¥ OPML ……" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "文件å:" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "包å«è®¾ç½®" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 #, fuzzy msgid "Export OPML" msgstr "æ£åœ¨å¯¼å…¥ OPML ……" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below." msgstr "您å¯ä»¥å…¬å¼€å‘布您的 OPML 。网上的任何人都å¯ä»¥é€šè¿‡å¦‚下 URL 订阅该文件。" -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds." msgstr "" -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "公开的 OPML URL" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 #, fuzzy msgid "Display published OPML URL" msgstr "公开的 OPML URL" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "Firefox 集æˆ" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below." msgstr "点击如下链接,å¯ä»¥å°†æœ¬ Tiny Tiny RSS 站点作为一个 Firefox 阅读器使用。" -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "点击æ¤å¤„å°†æœ¬ç«™æ³¨å†Œä¸ºä¿¡æ¯æºé˜…读器。" -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 #, fuzzy msgid "Published & shared articles / Generated feeds" msgstr "å·²å‘å¸ƒçš„æ–‡ç« å’Œç”Ÿæˆçš„ä¿¡æ¯æº" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "å·²å‘å¸ƒçš„æ–‡ç« å’Œç”Ÿæˆçš„ä¿¡æ¯æº" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below." msgstr "å·²å‘å¸ƒçš„æ–‡ç« å°†ä¼šè¾“å‡ºä¸ºå…¬å¼€çš„ RSS ä¿¡æ¯æºï¼Œç½‘上的任何人å¯ä»¥é€šè¿‡å¦‚下 URL 进行订阅。" -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "显示 URL" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "清空所有生æˆçš„ URL" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "通过 URL åˆ†äº«çš„æ–‡ç« " -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "您å¯ä»¥å–消所有通过 URL åˆ†äº«çš„æ–‡ç« ã€‚" -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "å–æ¶ˆæ‰€æœ‰åˆ†äº«" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "These feeds have not been updated with new content for 3 months (oldest first):" msgstr "ä»¥ä¸‹ä¿¡æ¯æºå·²ç»æœ‰ä¸‰ä¸ªæœˆæ²¡æœ‰å†…容更新了(最旧的在最上):" -#: classes/pref/feeds.php:1566 -#: classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 +#: classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "ç‚¹å‡»ä»¥ç¼–è¾‘ä¿¡æ¯æº" -#: classes/pref/feeds.php:1584 -#: classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 +#: classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "å–æ¶ˆè®¢é˜…选ä¸çš„ä¿¡æ¯æº" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "ä¿¡æ¯æºå› 为如下错误未能更新:" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "" -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +#, fuzzy +msgid "Filename" +msgstr "文件å:" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "日期" + +#: plugins/digest/digest_body.php:57 #, fuzzy msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings." msgstr "" "本页é¢éœ€è¦JavaScript支æŒã€‚\n" "\t\t\t请检查您的æµè§ˆå™¨è®¾ç½®ã€‚" -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "您好," -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "" -#: plugins/nsfw/init.php:32 -#: plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 +#: plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 #, fuzzy msgid "Configuration saved." msgstr "设置已ä¿å˜ã€‚" @@ -2548,17 +2607,17 @@ msgstr "å¯†ç æ›´æ”¹æˆåŠŸã€‚" msgid "Old password is incorrect." msgstr "原密ç 输入错误。" -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 -#: plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 +#: plugins/mobile/prefs.php:25 msgid "Home" msgstr "主页" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "å•¥ä¹Ÿæ²¡æ‰¾åˆ°ï¼ˆç‚¹å‡»ä»¥é‡æ–°åŠ è½½ä¿¡æ¯æºï¼‰ã€‚" @@ -2566,417 +2625,427 @@ msgstr "å•¥ä¹Ÿæ²¡æ‰¾åˆ°ï¼ˆç‚¹å‡»ä»¥é‡æ–°åŠ è½½ä¿¡æ¯æºï¼‰ã€‚" msgid "Open regular version" msgstr "" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "å¯ç”¨ç±»åˆ«" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "ON" msgstr "ON" -#: plugins/mobile/prefs.php:35 -#: plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 -#: plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 -#: plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 +#: plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 +#: plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 +#: plugins/mobile/prefs.php:57 msgid "OFF" msgstr "OFF" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "ä»¥æ–‡ä»¶å¤¹æ–¹å¼æµè§ˆç±»åˆ«" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "在帖å里显示图åƒ" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "éšè—å·²è¯»çš„æ–‡ç« å’Œä¿¡æ¯æº" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "ä»¥æœªè¯»æ–‡ç« æ•°é‡æŽ’åˆ—ä¿¡æ¯æº" -#: plugins/mailto/init.php:52 -#: plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 -#: plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 +#: plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 +#: plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "[已转å‘]" -#: plugins/mailto/init.php:52 -#: plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 +#: plugins/mail/init.php:64 msgid "Multiple articles" msgstr "å¤šä¸ªæ–‡ç« " -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 #, fuzzy msgid "Forward selected article(s) by email." msgstr "ç”¨é‚®ä»¶è½¬å‘æ–‡ç« " -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 #, fuzzy msgid "Close this dialog" msgstr "关闿œ¬ç•Œé¢" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it." msgstr "将以下链接拖拽至您的æµè§ˆå™¨å·¥å…·æ¡ï¼Œåœ¨æµè§ˆå™¨ä¸æ‰“å¼€æ‚¨æƒ³çœ‹çš„ä¿¡æ¯æºï¼Œç„¶åŽç‚¹å‡»é“¾æŽ¥ä»¥è®¢é˜…。" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "在 Tiny Tiny RSS ä¸è®¢é˜… %s ?" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "在 Tiny Tiny RSS ä¸è®¢é˜…" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 #, fuzzy msgid "Article archive" msgstr "æ–‡ç« å‘布时间" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances." msgstr "" -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "导入" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "" -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "" -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, fuzzy, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "ç¼–è¾‘æ–‡ç« æ³¨è®°" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, fuzzy, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "å·²ç»å¯¼å…¥è¿‡ã€‚" -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, fuzzy, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "没有选ä¸çš„ä¿¡æ¯æºã€‚" -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "" -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "" -#: plugins/import_export/init.php:423 -#, php-format -msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)" +#: plugins/import_export/init.php:444 +#: plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." msgstr "" -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "å‘信人:" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "收信人:" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "主题:" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "å‘é€é‚®ä»¶" -#: plugins/note/init.php:28 +#: plugins/note/init.php:26 #: plugins/note/note.js:11 msgid "Edit article note" msgstr "ç¼–è¾‘æ–‡ç« æ³¨è®°" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 #, fuzzy msgid "Set value" msgstr "åŠ æ˜Ÿæ ‡" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "" - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "链接" -#: plugins/instances/init.php:207 -#: plugins/instances/init.php:399 +#: plugins/instances/init.php:204 +#: plugins/instances/init.php:395 msgid "Instance" msgstr "实例" -#: plugins/instances/init.php:218 -#: plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 +#: plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "实例 URL:" -#: plugins/instances/init.php:229 -#: plugins/instances/init.php:418 +#: plugins/instances/init.php:226 +#: plugins/instances/init.php:414 msgid "Access key:" msgstr "访问密钥:" -#: plugins/instances/init.php:232 -#: plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 +#: plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "访问密钥" -#: plugins/instances/init.php:236 -#: plugins/instances/init.php:425 +#: plugins/instances/init.php:233 +#: plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "为两个相è”的实例使用一个访问密钥。" -#: plugins/instances/init.php:244 -#: plugins/instances/init.php:433 +#: plugins/instances/init.php:241 +#: plugins/instances/init.php:429 msgid "Generate new key" msgstr "ç”Ÿæˆæ–°çš„密钥" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "链接实例" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "您å¯ä»¥ä¸Žå…¶ä»–çš„ Tiny Tiny RSS 实例相è”ï¼Œä»¥å…±äº«æœ€å—æ¬¢è¿Žçš„ä¿¡æ¯æºåˆ—表。通过这个 URL 为本实例建立链接:" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "上次连接" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "ä¿å˜çš„ä¿¡æ¯æº" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "创建链接" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "通过 URL 分享" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "您å¯ä»¥é€šè¿‡ä»¥ä¸‹å”¯ä¸€ URL 分享本文:" -#: plugins/updater/init.php:323 -#: plugins/updater/init.php:340 +#: plugins/updater/init.php:321 +#: plugins/updater/init.php:338 #: plugins/updater/updater.js:10 #, fuzzy msgid "Update Tiny Tiny RSS" msgstr "返回 Tiny Tiny RSS" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 #, fuzzy msgid "Your Tiny Tiny RSS installation is up to date." msgstr "Tiny Tiny RSS æ•°æ®åº“是最新版。" -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." msgstr "" -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 #, fuzzy msgid "Ready to update." msgstr "上次更新:" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 #, fuzzy msgid "Start update" msgstr "上次更新:" -#: js/feedlist.js:394 -#: js/feedlist.js:422 +#: js/feedlist.js:395 +#: js/feedlist.js:423 #: plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "å°† %s ä¸çš„å…¨éƒ¨æ–‡ç« æ ‡è®°ä¸ºå·²è¯»ï¼Ÿ" -#: js/feedlist.js:413 +#: js/feedlist.js:414 #, fuzzy msgid "Mark all articles in %s older than 1 day as read?" msgstr "å°† %s ä¸çš„å…¨éƒ¨æ–‡ç« æ ‡è®°ä¸ºå·²è¯»ï¼Ÿ" -#: js/feedlist.js:416 +#: js/feedlist.js:417 #, fuzzy msgid "Mark all articles in %s older than 1 week as read?" msgstr "å°† %s ä¸çš„å…¨éƒ¨æ–‡ç« æ ‡è®°ä¸ºå·²è¯»ï¼Ÿ" -#: js/feedlist.js:419 +#: js/feedlist.js:420 #, fuzzy msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "å°† %s ä¸çš„å…¨éƒ¨æ–‡ç« æ ‡è®°ä¸ºå·²è¯»ï¼Ÿ" -#: js/functions.js:92 +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "" + +#: js/functions.js:107 msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database." msgstr "您确认将该异常报告至 tt-rss.org ï¼ŸæŠ¥å‘Šå°†åŒ…å«æ‚¨çš„æµè§ˆå™¨ä¿¡æ¯ã€‚您的IP将被å˜å…¥æ•°æ®åº“。" -#: js/functions.js:214 -msgid "close" -msgstr "" +#: js/functions.js:236 +#, fuzzy +msgid "Click to close" +msgstr "点击暂åœ" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "" -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "移除已ä¿å˜çš„ä¿¡æ¯æºå›¾æ ‡ï¼Ÿ" -#: js/functions.js:697 +#: js/functions.js:723 #, fuzzy msgid "Removing feed icon..." msgstr "移除已ä¿å˜çš„ä¿¡æ¯æºå›¾æ ‡ï¼Ÿ" -#: js/functions.js:702 +#: js/functions.js:728 #, fuzzy msgid "Feed icon removed." msgstr "找ä¸åˆ°ä¿¡æ¯æºã€‚" -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "è¯·é€‰æ‹©å›¾ç‰‡æ–‡ä»¶ä¸Šä¼ ã€‚" -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "ä¸ºæœ¬ä¿¡æ¯æºä¸Šä¼ ä¸€ä¸ªæ–°çš„å›¾æ ‡ï¼Ÿ" -#: js/functions.js:727 +#: js/functions.js:753 #, fuzzy msgid "Uploading, please wait..." msgstr "读å–ä¸ï¼Œè¯·ç¨å€™â€¦â€¦" -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "è¯·å¡«å†™é¢„å®šä¹‰æ ‡ç¾çš„说明:" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "åˆ›å»ºæ ‡ç¾å¤±è´¥ï¼šæ²¡æœ‰æ ‡é¢˜ã€‚" -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "è®¢é˜…ä¿¡æ¯æº" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "已订阅至 %s" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "指定的 URL æ— æ•ˆã€‚" -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "指定的 URL 没有包å«ä»»ä½•ä¿¡æ¯æºã€‚" -#: js/functions.js:879 +#: js/functions.js:862 +#, fuzzy +msgid "Expand to select feed" +msgstr "ç¼–è¾‘é€‰å®šçš„ä¿¡æ¯æº" + +#: js/functions.js:874 #, fuzzy msgid "Couldn't download the specified URL: %s" msgstr "æ— æ³•ä¸‹è½½æŒ‡å®šçš„ URL 。" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "您已ç»è®¢é˜…è¿‡è¿™ä¸ªä¿¡æ¯æºå•¦ã€‚" @@ -3005,7 +3074,7 @@ msgid "Subscription reset." msgstr "è®¢é˜…ä¿¡æ¯æº" #: js/functions.js:1212 -#: js/tt-rss.js:641 +#: js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "从 %s å–æ¶ˆè®¢é˜…?" @@ -3013,72 +3082,72 @@ msgstr "从 %s å–æ¶ˆè®¢é˜…?" msgid "Removing feed..." msgstr "" -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "请填写类别å称:" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "ä¸ºæœ¬ä¿¡æ¯æºç”Ÿæˆæ–°çš„群地å€ï¼Ÿ" -#: js/functions.js:1358 -#: js/prefs.js:1217 +#: js/functions.js:1359 +#: js/prefs.js:1231 msgid "Trying to change address..." msgstr "" -#: js/functions.js:1545 -#: js/tt-rss.js:412 -#: js/tt-rss.js:622 +#: js/functions.js:1546 +#: js/tt-rss.js:421 +#: js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "æ‚¨æ— æ³•ç¼–è¾‘è¿™ç§ç±»åž‹çš„ä¿¡æ¯æºã€‚" -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "ç¼–è¾‘ä¿¡æ¯æº" -#: js/functions.js:1566 +#: js/functions.js:1567 #: js/prefs.js:194 #: js/prefs.js:749 #, fuzzy msgid "Saving data..." msgstr "ä¿å˜ä¿¡æ¯" -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "æ›´å¤šä¿¡æ¯æº" -#: js/functions.js:1659 -#: js/functions.js:1769 +#: js/functions.js:1660 +#: js/functions.js:1770 #: js/prefs.js:397 #: js/prefs.js:427 #: js/prefs.js:459 #: js/prefs.js:642 #: js/prefs.js:662 -#: js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "æ²¡æœ‰é€‰æ‹©ä»»ä½•ä¿¡æ¯æºã€‚" -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed." msgstr "将选ä¸çš„ä¿¡æ¯æºä»Žå˜æ¡£ä¸ç§»é™¤ï¼ŸåŒ…å«å·²ä¿å˜æ–‡ç« çš„ä¿¡æ¯æºä¸ä¼šè¢«ç§»é™¤ã€‚" -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "æ›´æ–°é”™è¯¯çš„ä¿¡æ¯æº" -#: js/functions.js:1751 -#: js/prefs.js:1175 +#: js/functions.js:1752 +#: js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "移除选ä¸çš„ä¿¡æ¯æºï¼Ÿ" -#: js/functions.js:1754 -#: js/prefs.js:1178 +#: js/functions.js:1755 +#: js/prefs.js:1192 #, fuzzy msgid "Removing selected feeds..." msgstr "移除选ä¸çš„ä¿¡æ¯æºï¼Ÿ" -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "" @@ -3137,7 +3206,7 @@ msgid "Removing selected labels..." msgstr "移除选ä¸çš„é¢„å®šä¹‰æ ‡ç¾ï¼Ÿ" #: js/prefs.js:295 -#: js/prefs.js:1379 +#: js/prefs.js:1393 msgid "No labels are selected." msgstr "æ²¡æœ‰é€‰æ‹©ä»»ä½•é¢„å®šä¹‰æ ‡ç¾ã€‚" @@ -3268,333 +3337,331 @@ msgstr "请先选择一个 OPML 文件。" msgid "Importing, please wait..." msgstr "读å–ä¸ï¼Œè¯·ç¨å€™â€¦â€¦" -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "é‡ç½®ä¸ºé»˜è®¤çжæ€ï¼Ÿ" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "" -#: js/prefs.js:1088 +#: js/prefs.js:1102 #, fuzzy msgid "Removing category..." msgstr "创建类别" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "移除选ä¸çš„类别?" -#: js/prefs.js:1112 +#: js/prefs.js:1126 #, fuzzy msgid "Removing selected categories..." msgstr "移除选定的类别" -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "没有选ä¸ä»»ä½•类别。" -#: js/prefs.js:1133 +#: js/prefs.js:1147 #, fuzzy msgid "Category title:" msgstr "类别" -#: js/prefs.js:1137 +#: js/prefs.js:1151 #, fuzzy msgid "Creating category..." msgstr "创建过滤器" -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "æœ€è¿‘æ²¡æ›´æ–°çš„ä¿¡æ¯æº" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "将当å‰çš„ OPML å‘å¸ƒåœ°å€æ›´æ”¹æ›¿æ¢ä¸ºæ–°åœ°å€ï¼Ÿ" -#: js/prefs.js:1302 +#: js/prefs.js:1316 #, fuzzy msgid "Clearing feed..." msgstr "æ¸…ç©ºä¿¡æ¯æºæ•°æ®" -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "为选ä¸ä¿¡æ¯æºä¸çš„æ–‡ç« é‡ç½®è¯„分?" -#: js/prefs.js:1325 +#: js/prefs.js:1339 #, fuzzy msgid "Rescoring selected feeds..." msgstr "为选ä¸ä¿¡æ¯æºä¸çš„æ–‡ç« é‡ç½®è¯„分?" -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "é‡ç½®æ‰€æœ‰æ–‡ç« 的评分?这å¯èƒ½å°†èŠ±è´¹å¾ˆé•¿æ—¶é—´ã€‚" -#: js/prefs.js:1348 +#: js/prefs.js:1362 #, fuzzy msgid "Rescoring feeds..." msgstr "ä¸ºä¿¡æ¯æºé‡æ–°è¯„分" -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "将选ä¸çš„å¯é€‰æ ‡ç¾é‡ç½®ä¸ºé»˜è®¤é¢œè‰²ï¼Ÿ" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "å好文件的设置" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "Remove selected profiles? Active and default profiles will not be removed." msgstr "移除选ä¸çš„å好文件?当å‰å好与默认å好ä¸ä¼šè¢«ç§»é™¤ã€‚" -#: js/prefs.js:1414 +#: js/prefs.js:1428 #, fuzzy msgid "Removing selected profiles..." msgstr "移除选ä¸çš„å好文件" -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "未选择å好文件。" -#: js/prefs.js:1437 -#: js/prefs.js:1490 +#: js/prefs.js:1451 +#: js/prefs.js:1504 msgid "Activate selected profile?" msgstr "å¯ç”¨é€‰ä¸çš„å好文件?" -#: js/prefs.js:1453 -#: js/prefs.js:1506 +#: js/prefs.js:1467 +#: js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "请选择希望å¯ç”¨çš„å好文件。" -#: js/prefs.js:1458 +#: js/prefs.js:1472 #, fuzzy msgid "Creating profile..." msgstr "创建å好文件" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "之å‰ç”Ÿæˆçš„ä¿¡æ¯æº URL 将会回到未认è¯çжæ€ã€‚是å¦ç»§ç»ï¼Ÿ" -#: js/prefs.js:1517 -#: js/prefs.js:1536 +#: js/prefs.js:1531 +#: js/prefs.js:1550 msgid "Clearing URLs..." msgstr "" -#: js/prefs.js:1524 +#: js/prefs.js:1538 #, fuzzy msgid "Generated URLs cleared." msgstr "生æˆä¸€ä¸ªæ–°çš„ URL" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "之å‰å…±äº«æ–‡ç« çš„ URL 将会回到未认è¯çжæ€ã€‚是å¦ç»§ç»ï¼Ÿ" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "ç¼–è¾‘é¢„å®šä¹‰æ ‡ç¾" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "" -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "å°†æ‰€æœ‰æ–‡ç« æ ‡è®°ä¸ºå·²è¯»ï¼Ÿ" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 #, fuzzy msgid "Marking all feeds as read..." msgstr "æ ‡è®°æ‰€æœ‰ä¿¡æ¯æºä¸ºå·²è¯»" -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 #, fuzzy msgid "Please enable mail plugin first." msgstr "è¯·å…ˆé€‰å‡ ä¸ªä¿¡æ¯æºå§ã€‚" -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 #, fuzzy msgid "Please enable embed_original plugin first." msgstr "è¯·å…ˆé€‰å‡ ä¸ªä¿¡æ¯æºå§ã€‚" -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "é€šè¿‡è‡ªå®šä¹‰æ ‡ç¾é€‰æ‹©" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "您ä¸èƒ½å–消订阅一个类别。" -#: js/tt-rss.js:635 -#: js/tt-rss.js:787 +#: js/tt-rss.js:644 +#: js/tt-rss.js:798 msgid "Please select some feed first." msgstr "è¯·å…ˆé€‰å‡ ä¸ªä¿¡æ¯æºå§ã€‚" -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "æ— æ³•é‡ç½®æœ¬ç±»ä¿¡æ¯æºçš„评分。" -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "é‡ç½® %s 䏿–‡ç« 的评分?" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 #, fuzzy msgid "Rescoring articles..." msgstr "ä¸ºæ–‡ç« é‡æ–°è¯„分" -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "有å¯ç”¨çš„æ–°ç‰ˆæœ¬å•¦ï¼" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 #, fuzzy msgid "Cancel search" msgstr "å–æ¶ˆ" -#: js/viewfeed.js:455 +#: js/viewfeed.js:453 #: plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "å–æ¶ˆæ˜Ÿæ ‡" -#: js/viewfeed.js:459 +#: js/viewfeed.js:457 #: plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "åŠ æ˜Ÿæ ‡" -#: js/viewfeed.js:499 +#: js/viewfeed.js:497 #: plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "å–æ¶ˆå‘å¸ƒæ–‡ç« " -#: js/viewfeed.js:503 +#: js/viewfeed.js:501 #: plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "å‘å¸ƒæ–‡ç« " -#: js/viewfeed.js:705 -#: js/viewfeed.js:733 -#: js/viewfeed.js:760 -#: js/viewfeed.js:823 -#: js/viewfeed.js:857 -#: js/viewfeed.js:975 -#: js/viewfeed.js:1018 -#: js/viewfeed.js:1071 -#: js/viewfeed.js:2106 +#: js/viewfeed.js:653 +#, fuzzy +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "未选ä¸ä»»ä½•æ–‡ç« ã€‚" + +#: js/viewfeed.js:725 +#: js/viewfeed.js:753 +#: js/viewfeed.js:780 +#: js/viewfeed.js:843 +#: js/viewfeed.js:877 +#: js/viewfeed.js:997 +#: js/viewfeed.js:1040 +#: js/viewfeed.js:1093 +#: js/viewfeed.js:2091 #: plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "没有选ä¸ä»»ä½•æ–‡ç« ã€‚" -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 #, fuzzy msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "åˆ é™¤ %s ä¸é€‰æ‹©çš„ %d ç¯‡æ–‡ç« ï¼Ÿ" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 #, fuzzy msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "åˆ é™¤é€‰ä¸çš„ %d ç¯‡æ–‡ç« ï¼Ÿ" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 #, fuzzy msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "å°† %s ä¸çš„ %d 篇选ä¸çš„æ–‡ç« å˜æ¡£ï¼Ÿ" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 #, fuzzy msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "å°†å˜æ¡£çš„ %d ç¯‡æ–‡ç« ç§»å›žåŽŸå¤„ï¼Ÿ" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 #, fuzzy msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "å°† %s ä¸é€‰ä¸çš„ %d ç¯‡æ–‡ç« æ ‡è®°ä¸ºå·²è¯»ï¼Ÿ" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "ç¼–è¾‘æ–‡ç« çš„è‡ªå®šä¹‰æ ‡ç¾" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 #, fuzzy msgid "Saving article tags..." msgstr "ç¼–è¾‘æ–‡ç« çš„è‡ªå®šä¹‰æ ‡ç¾" -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "未选ä¸ä»»ä½•æ–‡ç« ã€‚" -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "æœªæ‰¾åˆ°éœ€è¦æ ‡è®°çš„æ–‡ç« " -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 #, fuzzy msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "å°† %d ç¯‡æ–‡ç« æ ‡è®°ä¸ºå·²è¯»ï¼Ÿ" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "打开原文" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 #, fuzzy msgid "Display article URL" msgstr "显示 URL" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 #, fuzzy msgid "Toggle marked" msgstr "é”å®šåŠ æ˜Ÿæ ‡çš„é¡¹" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "æ·»åŠ é¢„å®šä¹‰æ ‡ç¾" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "ç§»é™¤é¢„å®šä¹‰æ ‡ç¾" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "æ’æ”¾ä¸â€¦â€¦" - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "点击暂åœ" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 #, fuzzy msgid "Please enter new score for selected articles:" msgstr "åˆ é™¤é€‰ä¸çš„ %d ç¯‡æ–‡ç« ï¼Ÿ" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 #, fuzzy msgid "Please enter new score for this article:" msgstr "请填写类别å称:" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 #, fuzzy msgid "Article URL:" msgstr "å…¨éƒ¨æ–‡ç« " @@ -3701,6 +3768,27 @@ msgstr "通过 URL åˆ†äº«æ–‡ç« " msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue." msgstr "" +#~ msgid "Switch to digest..." +#~ msgstr "切æ¢è‡³æ‘˜è¦æ¨¡å¼" + +#~ msgid "Show tag cloud..." +#~ msgstr "æ˜¾ç¤ºæ ‡ç¾äº‘" + +#~ msgid "Click to play" +#~ msgstr "ç‚¹å‡»æ’æ”¾" + +#~ msgid "Play" +#~ msgstr "æ’æ”¾" + +#~ msgid "Visit the website" +#~ msgstr "访问网站" + +#~ msgid "Select theme" +#~ msgstr "选择主题" + +#~ msgid "Playing..." +#~ msgstr "æ’æ”¾ä¸â€¦â€¦" + #~ msgid "Default interval between feed updates" #~ msgstr "ä¿¡æ¯æºæ›´æ–°çš„默认时间间隔" @@ -3806,9 +3894,6 @@ msgstr "" #~ msgid "Mark all visible articles in %s as read?" #~ msgstr "æ ‡è®° %s 䏿‰€æœ‰å¯è§çš„æ–‡ç« 为已读?" -#~ msgid "Date" -#~ msgstr "日期" - #~ msgid "Score" #~ msgstr "评分" diff --git a/messages.pot b/messages.pot index 7727d7762..3376a0280 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-04-09 22:28+0400\n" +"POT-Creation-Date: 2013-04-29 15:58+0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,79 +18,79 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: backend.php:69 +#: backend.php:73 msgid "Use default" msgstr "" -#: backend.php:70 +#: backend.php:74 msgid "Never purge" msgstr "" -#: backend.php:71 +#: backend.php:75 msgid "1 week old" msgstr "" -#: backend.php:72 +#: backend.php:76 msgid "2 weeks old" msgstr "" -#: backend.php:73 +#: backend.php:77 msgid "1 month old" msgstr "" -#: backend.php:74 +#: backend.php:78 msgid "2 months old" msgstr "" -#: backend.php:75 +#: backend.php:79 msgid "3 months old" msgstr "" -#: backend.php:78 +#: backend.php:82 msgid "Default interval" msgstr "" -#: backend.php:79 backend.php:89 +#: backend.php:83 backend.php:93 msgid "Disable updates" msgstr "" -#: backend.php:80 backend.php:90 +#: backend.php:84 backend.php:94 msgid "Each 15 minutes" msgstr "" -#: backend.php:81 backend.php:91 +#: backend.php:85 backend.php:95 msgid "Each 30 minutes" msgstr "" -#: backend.php:82 backend.php:92 +#: backend.php:86 backend.php:96 msgid "Hourly" msgstr "" -#: backend.php:83 backend.php:93 +#: backend.php:87 backend.php:97 msgid "Each 4 hours" msgstr "" -#: backend.php:84 backend.php:94 +#: backend.php:88 backend.php:98 msgid "Each 12 hours" msgstr "" -#: backend.php:85 backend.php:95 +#: backend.php:89 backend.php:99 msgid "Daily" msgstr "" -#: backend.php:86 backend.php:96 +#: backend.php:90 backend.php:100 msgid "Weekly" msgstr "" -#: backend.php:99 classes/pref/users.php:123 +#: backend.php:103 classes/pref/users.php:123 classes/pref/system.php:44 msgid "User" msgstr "" -#: backend.php:100 +#: backend.php:104 msgid "Power User" msgstr "" -#: backend.php:101 +#: backend.php:105 msgid "Administrator" msgstr "" @@ -152,287 +152,283 @@ msgstr "" msgid "SQL escaping test failed, check your database and PHP configuration" msgstr "" -#: index.php:135 index.php:152 index.php:277 prefs.php:103 +#: index.php:128 index.php:145 index.php:265 prefs.php:98 #: classes/backend.php:5 classes/pref/labels.php:296 -#: classes/pref/filters.php:680 classes/pref/feeds.php:1331 -#: plugins/digest/digest_body.php:63 js/feedlist.js:128 js/feedlist.js:438 -#: js/functions.js:420 js/functions.js:758 js/functions.js:1194 -#: js/functions.js:1329 js/functions.js:1641 js/prefs.js:86 js/prefs.js:576 -#: js/prefs.js:666 js/prefs.js:858 js/prefs.js:1440 js/prefs.js:1493 -#: js/prefs.js:1552 js/prefs.js:1569 js/prefs.js:1585 js/prefs.js:1601 -#: js/prefs.js:1620 js/prefs.js:1793 js/prefs.js:1809 js/tt-rss.js:497 -#: js/tt-rss.js:514 js/viewfeed.js:800 js/viewfeed.js:1224 +#: classes/pref/filters.php:680 classes/pref/feeds.php:1388 +#: plugins/digest/digest_body.php:61 js/feedlist.js:128 js/feedlist.js:439 +#: js/functions.js:446 js/functions.js:784 js/functions.js:1194 +#: js/functions.js:1330 js/functions.js:1642 js/prefs.js:86 js/prefs.js:576 +#: js/prefs.js:666 js/prefs.js:867 js/prefs.js:1454 js/prefs.js:1507 +#: js/prefs.js:1566 js/prefs.js:1583 js/prefs.js:1599 js/prefs.js:1615 +#: js/prefs.js:1634 js/prefs.js:1807 js/prefs.js:1823 js/tt-rss.js:506 +#: js/tt-rss.js:523 js/viewfeed.js:820 js/viewfeed.js:1249 #: plugins/import_export/import_export.js:17 plugins/updater/updater.js:17 msgid "Loading, please wait..." msgstr "" -#: index.php:166 +#: index.php:159 msgid "Collapse feedlist" msgstr "" -#: index.php:169 +#: index.php:162 msgid "Show articles" msgstr "" -#: index.php:172 +#: index.php:165 msgid "Adaptive" msgstr "" -#: index.php:173 +#: index.php:166 msgid "All Articles" msgstr "" -#: index.php:174 include/functions.php:1961 classes/feeds.php:106 +#: index.php:167 include/functions.php:2007 classes/feeds.php:98 msgid "Starred" msgstr "" -#: index.php:175 include/functions.php:1962 classes/feeds.php:107 +#: index.php:168 include/functions.php:2008 classes/feeds.php:99 msgid "Published" msgstr "" -#: index.php:176 classes/feeds.php:93 classes/feeds.php:105 +#: index.php:169 classes/feeds.php:85 classes/feeds.php:97 msgid "Unread" msgstr "" -#: index.php:177 +#: index.php:170 msgid "Unread First" msgstr "" -#: index.php:178 +#: index.php:171 msgid "With Note" msgstr "" -#: index.php:179 +#: index.php:172 msgid "Ignore Scoring" msgstr "" -#: index.php:182 +#: index.php:175 msgid "Sort articles" msgstr "" -#: index.php:185 +#: index.php:178 msgid "Default" msgstr "" -#: index.php:186 +#: index.php:179 msgid "Newest first" msgstr "" -#: index.php:187 +#: index.php:180 msgid "Oldest first" msgstr "" -#: index.php:188 +#: index.php:181 msgid "Title" msgstr "" -#: index.php:192 index.php:241 include/functions.php:1951 -#: classes/feeds.php:111 classes/feeds.php:440 js/FeedTree.js:128 +#: index.php:185 index.php:233 include/functions.php:1997 +#: classes/feeds.php:103 classes/feeds.php:441 js/FeedTree.js:128 #: js/FeedTree.js:156 plugins/digest/digest.js:647 msgid "Mark as read" msgstr "" -#: index.php:195 +#: index.php:188 msgid "Older than one day" msgstr "" -#: index.php:198 +#: index.php:191 msgid "Older than one week" msgstr "" -#: index.php:201 +#: index.php:194 msgid "Older than two weeks" msgstr "" -#: index.php:218 +#: index.php:210 msgid "Communication problem with server." msgstr "" -#: index.php:226 +#: index.php:218 msgid "New version of Tiny Tiny RSS is available!" msgstr "" -#: index.php:231 +#: index.php:223 msgid "Actions..." msgstr "" -#: index.php:233 +#: index.php:225 msgid "Preferences..." msgstr "" -#: index.php:234 +#: index.php:226 msgid "Search..." msgstr "" -#: index.php:235 +#: index.php:227 msgid "Feed actions:" msgstr "" -#: index.php:236 classes/handler/public.php:578 +#: index.php:228 classes/handler/public.php:559 msgid "Subscribe to feed..." msgstr "" -#: index.php:237 +#: index.php:229 msgid "Edit this feed..." msgstr "" -#: index.php:238 +#: index.php:230 msgid "Rescore feed" msgstr "" -#: index.php:239 classes/pref/feeds.php:717 classes/pref/feeds.php:1283 +#: index.php:231 classes/pref/feeds.php:759 classes/pref/feeds.php:1340 #: js/PrefFeedTree.js:73 msgid "Unsubscribe" msgstr "" -#: index.php:240 +#: index.php:232 msgid "All feeds:" msgstr "" -#: index.php:242 +#: index.php:234 msgid "(Un)hide read feeds" msgstr "" -#: index.php:243 +#: index.php:235 msgid "Other actions:" msgstr "" -#: index.php:245 -msgid "Switch to digest..." -msgstr "" - -#: index.php:247 -msgid "Show tag cloud..." -msgstr "" - -#: index.php:248 include/functions.php:1937 +#: index.php:236 include/functions.php:1983 msgid "Toggle widescreen mode" msgstr "" -#: index.php:249 +#: index.php:237 msgid "Select by tags..." msgstr "" -#: index.php:250 +#: index.php:238 msgid "Create label..." msgstr "" -#: index.php:251 +#: index.php:239 msgid "Create filter..." msgstr "" -#: index.php:252 +#: index.php:240 msgid "Keyboard shortcuts help" msgstr "" -#: index.php:261 plugins/digest/digest_body.php:77 -#: plugins/mobile/mobile-functions.php:62 -#: plugins/mobile/mobile-functions.php:237 +#: index.php:249 plugins/digest/digest_body.php:75 +#: plugins/mobile/mobile-functions.php:65 +#: plugins/mobile/mobile-functions.php:240 msgid "Logout" msgstr "" -#: prefs.php:36 prefs.php:121 include/functions.php:1964 -#: classes/pref/prefs.php:446 +#: prefs.php:33 prefs.php:116 include/functions.php:2010 +#: classes/pref/prefs.php:440 msgid "Preferences" msgstr "" -#: prefs.php:112 +#: prefs.php:107 msgid "Keyboard shortcuts" msgstr "" -#: prefs.php:113 +#: prefs.php:108 msgid "Exit preferences" msgstr "" -#: prefs.php:124 classes/pref/feeds.php:107 classes/pref/feeds.php:1209 -#: classes/pref/feeds.php:1272 +#: prefs.php:119 classes/pref/feeds.php:107 classes/pref/feeds.php:1266 +#: classes/pref/feeds.php:1329 msgid "Feeds" msgstr "" -#: prefs.php:127 classes/pref/filters.php:156 +#: prefs.php:122 classes/pref/filters.php:156 msgid "Filters" msgstr "" -#: prefs.php:130 include/functions.php:1150 include/functions.php:1787 -#: classes/pref/labels.php:90 plugins/mobile/mobile-functions.php:198 +#: prefs.php:125 include/functions.php:1176 include/functions.php:1831 +#: classes/pref/labels.php:90 plugins/mobile/mobile-functions.php:201 msgid "Labels" msgstr "" -#: prefs.php:134 +#: prefs.php:129 msgid "Users" msgstr "" -#: register.php:186 include/login_form.php:238 +#: prefs.php:132 +msgid "System" +msgstr "" + +#: register.php:184 include/login_form.php:238 msgid "Create new account" msgstr "" -#: register.php:192 +#: register.php:190 msgid "New user registrations are administratively disabled." msgstr "" -#: register.php:196 register.php:241 register.php:254 register.php:269 -#: register.php:288 register.php:336 register.php:346 register.php:358 -#: classes/handler/public.php:648 classes/handler/public.php:736 -#: classes/handler/public.php:818 classes/handler/public.php:893 -#: classes/handler/public.php:907 classes/handler/public.php:914 -#: classes/handler/public.php:939 +#: register.php:194 register.php:239 register.php:252 register.php:267 +#: register.php:286 register.php:334 register.php:344 register.php:356 +#: classes/handler/public.php:629 classes/handler/public.php:717 +#: classes/handler/public.php:799 classes/handler/public.php:874 +#: classes/handler/public.php:888 classes/handler/public.php:895 +#: classes/handler/public.php:920 msgid "Return to Tiny Tiny RSS" msgstr "" -#: register.php:217 +#: register.php:215 msgid "" "Your temporary password will be sent to the specified email. Accounts, which " "were not logged in once, are erased automatically 24 hours after temporary " "password is sent." msgstr "" -#: register.php:223 +#: register.php:221 msgid "Desired login:" msgstr "" -#: register.php:226 +#: register.php:224 msgid "Check availability" msgstr "" -#: register.php:228 classes/handler/public.php:776 +#: register.php:226 classes/handler/public.php:757 msgid "Email:" msgstr "" -#: register.php:231 classes/handler/public.php:781 +#: register.php:229 classes/handler/public.php:762 msgid "How much is two plus two:" msgstr "" -#: register.php:234 +#: register.php:232 msgid "Submit registration" msgstr "" -#: register.php:252 +#: register.php:250 msgid "Your registration information is incomplete." msgstr "" -#: register.php:267 +#: register.php:265 msgid "Sorry, this username is already taken." msgstr "" -#: register.php:286 +#: register.php:284 msgid "Registration failed." msgstr "" -#: register.php:333 +#: register.php:331 msgid "Account created successfully." msgstr "" -#: register.php:355 +#: register.php:353 msgid "New user registrations are currently closed." msgstr "" -#: update.php:56 +#: update.php:55 msgid "Tiny Tiny RSS data update script." msgstr "" -#: include/digest.php:109 include/functions.php:1159 -#: include/functions.php:1688 include/functions.php:1773 -#: include/functions.php:1795 classes/opml.php:416 classes/pref/feeds.php:222 +#: include/digest.php:109 include/functions.php:1185 +#: include/functions.php:1732 include/functions.php:1817 +#: include/functions.php:1839 classes/opml.php:416 classes/pref/feeds.php:220 msgid "Uncategorized" msgstr "" @@ -447,353 +443,349 @@ msgstr[1] "" msgid "No feeds found." msgstr "" -#: include/functions.php:1148 include/functions.php:1785 -#: plugins/mobile/mobile-functions.php:171 +#: include/functions.php:1174 include/functions.php:1829 +#: plugins/mobile/mobile-functions.php:174 msgid "Special" msgstr "" -#: include/functions.php:1637 classes/feeds.php:1110 +#: include/functions.php:1681 classes/feeds.php:1110 #: classes/pref/filters.php:427 msgid "All feeds" msgstr "" -#: include/functions.php:1838 +#: include/functions.php:1884 msgid "Starred articles" msgstr "" -#: include/functions.php:1840 +#: include/functions.php:1886 msgid "Published articles" msgstr "" -#: include/functions.php:1842 +#: include/functions.php:1888 msgid "Fresh articles" msgstr "" -#: include/functions.php:1844 include/functions.php:1959 +#: include/functions.php:1890 include/functions.php:2005 msgid "All articles" msgstr "" -#: include/functions.php:1846 +#: include/functions.php:1892 msgid "Archived articles" msgstr "" -#: include/functions.php:1848 +#: include/functions.php:1894 msgid "Recently read" msgstr "" -#: include/functions.php:1911 +#: include/functions.php:1957 msgid "Navigation" msgstr "" -#: include/functions.php:1912 +#: include/functions.php:1958 msgid "Open next feed" msgstr "" -#: include/functions.php:1913 +#: include/functions.php:1959 msgid "Open previous feed" msgstr "" -#: include/functions.php:1914 +#: include/functions.php:1960 msgid "Open next article" msgstr "" -#: include/functions.php:1915 +#: include/functions.php:1961 msgid "Open previous article" msgstr "" -#: include/functions.php:1916 +#: include/functions.php:1962 msgid "Open next article (don't scroll long articles)" msgstr "" -#: include/functions.php:1917 +#: include/functions.php:1963 msgid "Open previous article (don't scroll long articles)" msgstr "" -#: include/functions.php:1918 +#: include/functions.php:1964 msgid "Move to next article (don't expand or mark read)" msgstr "" -#: include/functions.php:1919 +#: include/functions.php:1965 msgid "Move to previous article (don't expand or mark read)" msgstr "" -#: include/functions.php:1920 +#: include/functions.php:1966 msgid "Show search dialog" msgstr "" -#: include/functions.php:1921 +#: include/functions.php:1967 msgid "Article" msgstr "" -#: include/functions.php:1922 +#: include/functions.php:1968 msgid "Toggle starred" msgstr "" -#: include/functions.php:1923 js/viewfeed.js:1918 +#: include/functions.php:1969 js/viewfeed.js:1931 msgid "Toggle published" msgstr "" -#: include/functions.php:1924 js/viewfeed.js:1896 +#: include/functions.php:1970 js/viewfeed.js:1909 msgid "Toggle unread" msgstr "" -#: include/functions.php:1925 +#: include/functions.php:1971 msgid "Edit tags" msgstr "" -#: include/functions.php:1926 +#: include/functions.php:1972 msgid "Dismiss selected" msgstr "" -#: include/functions.php:1927 +#: include/functions.php:1973 msgid "Dismiss read" msgstr "" -#: include/functions.php:1928 +#: include/functions.php:1974 msgid "Open in new window" msgstr "" -#: include/functions.php:1929 js/viewfeed.js:1937 +#: include/functions.php:1975 js/viewfeed.js:1950 msgid "Mark below as read" msgstr "" -#: include/functions.php:1930 js/viewfeed.js:1931 +#: include/functions.php:1976 js/viewfeed.js:1944 msgid "Mark above as read" msgstr "" -#: include/functions.php:1931 +#: include/functions.php:1977 msgid "Scroll down" msgstr "" -#: include/functions.php:1932 +#: include/functions.php:1978 msgid "Scroll up" msgstr "" -#: include/functions.php:1933 +#: include/functions.php:1979 msgid "Select article under cursor" msgstr "" -#: include/functions.php:1934 +#: include/functions.php:1980 msgid "Email article" msgstr "" -#: include/functions.php:1935 +#: include/functions.php:1981 msgid "Close/collapse article" msgstr "" -#: include/functions.php:1936 +#: include/functions.php:1982 msgid "Toggle article expansion (combined mode)" msgstr "" -#: include/functions.php:1938 plugins/embed_original/init.php:33 +#: include/functions.php:1984 plugins/embed_original/init.php:31 msgid "Toggle embed original" msgstr "" -#: include/functions.php:1939 +#: include/functions.php:1985 msgid "Article selection" msgstr "" -#: include/functions.php:1940 +#: include/functions.php:1986 msgid "Select all articles" msgstr "" -#: include/functions.php:1941 +#: include/functions.php:1987 msgid "Select unread" msgstr "" -#: include/functions.php:1942 +#: include/functions.php:1988 msgid "Select starred" msgstr "" -#: include/functions.php:1943 +#: include/functions.php:1989 msgid "Select published" msgstr "" -#: include/functions.php:1944 +#: include/functions.php:1990 msgid "Invert selection" msgstr "" -#: include/functions.php:1945 +#: include/functions.php:1991 msgid "Deselect everything" msgstr "" -#: include/functions.php:1946 classes/pref/feeds.php:521 -#: classes/pref/feeds.php:754 +#: include/functions.php:1992 classes/pref/feeds.php:553 +#: classes/pref/feeds.php:796 msgid "Feed" msgstr "" -#: include/functions.php:1947 +#: include/functions.php:1993 msgid "Refresh current feed" msgstr "" -#: include/functions.php:1948 +#: include/functions.php:1994 msgid "Un/hide read feeds" msgstr "" -#: include/functions.php:1949 classes/pref/feeds.php:1275 +#: include/functions.php:1995 classes/pref/feeds.php:1332 msgid "Subscribe to feed" msgstr "" -#: include/functions.php:1950 js/FeedTree.js:135 js/PrefFeedTree.js:67 +#: include/functions.php:1996 js/FeedTree.js:135 js/PrefFeedTree.js:67 msgid "Edit feed" msgstr "" -#: include/functions.php:1952 +#: include/functions.php:1998 msgid "Reverse headlines" msgstr "" -#: include/functions.php:1953 +#: include/functions.php:1999 msgid "Debug feed update" msgstr "" -#: include/functions.php:1954 js/FeedTree.js:178 +#: include/functions.php:2000 js/FeedTree.js:178 msgid "Mark all feeds as read" msgstr "" -#: include/functions.php:1955 +#: include/functions.php:2001 msgid "Un/collapse current category" msgstr "" -#: include/functions.php:1956 +#: include/functions.php:2002 msgid "Toggle combined mode" msgstr "" -#: include/functions.php:1957 +#: include/functions.php:2003 msgid "Toggle auto expand in combined mode" msgstr "" -#: include/functions.php:1958 +#: include/functions.php:2004 msgid "Go to" msgstr "" -#: include/functions.php:1960 +#: include/functions.php:2006 msgid "Fresh" msgstr "" -#: include/functions.php:1963 js/tt-rss.js:447 js/tt-rss.js:606 +#: include/functions.php:2009 js/tt-rss.js:456 js/tt-rss.js:615 msgid "Tag cloud" msgstr "" -#: include/functions.php:1965 +#: include/functions.php:2011 msgid "Other" msgstr "" -#: include/functions.php:1966 classes/pref/labels.php:281 +#: include/functions.php:2012 classes/pref/labels.php:281 msgid "Create label" msgstr "" -#: include/functions.php:1967 classes/pref/filters.php:654 +#: include/functions.php:2013 classes/pref/filters.php:654 msgid "Create filter" msgstr "" -#: include/functions.php:1968 +#: include/functions.php:2014 msgid "Un/collapse sidebar" msgstr "" -#: include/functions.php:1969 +#: include/functions.php:2015 msgid "Show help dialog" msgstr "" -#: include/functions.php:2492 +#: include/functions.php:2536 #, php-format msgid "Search results: %s" msgstr "" -#: include/functions.php:2985 js/viewfeed.js:2024 -msgid "Click to play" -msgstr "" - -#: include/functions.php:2986 js/viewfeed.js:2023 -msgid "Play" -msgstr "" - -#: include/functions.php:3104 +#: include/functions.php:3133 msgid " - " msgstr "" -#: include/functions.php:3126 include/functions.php:3426 +#: include/functions.php:3155 include/functions.php:3431 #: classes/article.php:281 msgid "no tags" msgstr "" -#: include/functions.php:3136 classes/feeds.php:689 +#: include/functions.php:3165 classes/feeds.php:689 msgid "Edit tags for this article" msgstr "" -#: include/functions.php:3170 classes/feeds.php:641 +#: include/functions.php:3197 classes/feeds.php:641 msgid "Originally from:" msgstr "" -#: include/functions.php:3183 classes/feeds.php:654 classes/pref/feeds.php:540 +#: include/functions.php:3210 classes/feeds.php:654 classes/pref/feeds.php:572 msgid "Feed URL" msgstr "" -#: include/functions.php:3215 classes/dlg.php:37 classes/dlg.php:60 +#: include/functions.php:3242 classes/dlg.php:37 classes/dlg.php:60 #: classes/dlg.php:93 classes/dlg.php:159 classes/dlg.php:190 #: classes/dlg.php:217 classes/dlg.php:250 classes/dlg.php:262 #: classes/backend.php:105 classes/pref/users.php:99 -#: classes/pref/filters.php:147 classes/pref/prefs.php:1107 -#: classes/pref/feeds.php:1588 classes/pref/feeds.php:1660 -#: plugins/import_export/init.php:406 plugins/import_export/init.php:429 -#: plugins/googlereaderimport/init.php:173 plugins/share/init.php:67 -#: plugins/updater/init.php:370 +#: classes/pref/filters.php:147 classes/pref/prefs.php:1100 +#: classes/pref/feeds.php:1641 classes/pref/feeds.php:1713 +#: plugins/import_export/init.php:405 plugins/import_export/init.php:450 +#: plugins/googlereaderimport/init.php:193 plugins/share/init.php:65 +#: plugins/updater/init.php:368 msgid "Close this window" msgstr "" -#: include/functions.php:3451 +#: include/functions.php:3458 msgid "(edit note)" msgstr "" -#: include/functions.php:3686 +#: include/functions.php:3693 msgid "unknown type" msgstr "" -#: include/functions.php:3742 +#: include/functions.php:3749 msgid "Attachments" msgstr "" -#: include/login_form.php:183 classes/handler/public.php:483 -#: classes/handler/public.php:771 plugins/mobile/login_form.php:40 +#: include/functions.php:4248 +#, php-format +msgid "LibXML error %s at line %d (column %d): %s" +msgstr "" + +#: include/login_form.php:183 classes/handler/public.php:475 +#: classes/handler/public.php:752 plugins/mobile/login_form.php:40 msgid "Login:" msgstr "" -#: include/login_form.php:192 classes/handler/public.php:486 +#: include/login_form.php:194 classes/handler/public.php:478 #: plugins/mobile/login_form.php:45 msgid "Password:" msgstr "" -#: include/login_form.php:197 +#: include/login_form.php:199 msgid "I forgot my password" msgstr "" -#: include/login_form.php:201 classes/handler/public.php:489 -#: classes/pref/prefs.php:554 -msgid "Language:" -msgstr "" - -#: include/login_form.php:209 +#: include/login_form.php:205 msgid "Profile:" msgstr "" -#: include/login_form.php:213 classes/handler/public.php:233 -#: classes/rpc.php:64 classes/pref/prefs.php:1043 +#: include/login_form.php:209 classes/handler/public.php:233 +#: classes/rpc.php:63 classes/pref/prefs.php:1036 msgid "Default profile" msgstr "" -#: include/login_form.php:221 +#: include/login_form.php:217 msgid "Use less traffic" msgstr "" +#: include/login_form.php:221 +msgid "Does not display images in articles, reduces automatic refreshes." +msgstr "" + #: include/login_form.php:229 msgid "Remember me" msgstr "" -#: include/login_form.php:235 classes/handler/public.php:499 +#: include/login_form.php:235 classes/handler/public.php:483 #: plugins/mobile/login_form.php:28 msgid "Log in" msgstr "" -#: include/sessions.php:62 +#: include/sessions.php:61 msgid "Session failed to validate (incorrect IP)" msgstr "" @@ -807,136 +799,136 @@ msgstr "" #: classes/article.php:204 classes/pref/users.php:176 #: classes/pref/labels.php:79 classes/pref/filters.php:405 -#: classes/pref/prefs.php:989 classes/pref/feeds.php:733 -#: classes/pref/feeds.php:881 plugins/nsfw/init.php:86 -#: plugins/note/init.php:53 plugins/instances/init.php:248 +#: classes/pref/prefs.php:982 classes/pref/feeds.php:775 +#: classes/pref/feeds.php:923 plugins/nsfw/init.php:83 +#: plugins/note/init.php:51 plugins/instances/init.php:245 msgid "Save" msgstr "" -#: classes/article.php:206 classes/handler/public.php:460 -#: classes/handler/public.php:502 classes/feeds.php:1037 +#: classes/article.php:206 classes/handler/public.php:452 +#: classes/handler/public.php:486 classes/feeds.php:1037 #: classes/feeds.php:1089 classes/feeds.php:1149 classes/pref/users.php:178 #: classes/pref/labels.php:81 classes/pref/filters.php:408 -#: classes/pref/filters.php:804 classes/pref/filters.php:880 -#: classes/pref/filters.php:947 classes/pref/prefs.php:991 -#: classes/pref/feeds.php:734 classes/pref/feeds.php:884 -#: classes/pref/feeds.php:1800 plugins/mail/init.php:126 -#: plugins/note/init.php:55 plugins/instances/init.php:251 -#: plugins/instances/init.php:440 +#: classes/pref/filters.php:803 classes/pref/filters.php:879 +#: classes/pref/filters.php:946 classes/pref/prefs.php:984 +#: classes/pref/feeds.php:776 classes/pref/feeds.php:926 +#: classes/pref/feeds.php:1853 plugins/mail/init.php:124 +#: plugins/note/init.php:53 plugins/instances/init.php:248 +#: plugins/instances/init.php:436 msgid "Cancel" msgstr "" -#: classes/handler/public.php:424 plugins/bookmarklets/init.php:38 +#: classes/handler/public.php:416 plugins/bookmarklets/init.php:36 msgid "Share with Tiny Tiny RSS" msgstr "" -#: classes/handler/public.php:432 +#: classes/handler/public.php:424 msgid "Title:" msgstr "" -#: classes/handler/public.php:434 classes/pref/feeds.php:538 -#: classes/pref/feeds.php:769 plugins/instances/init.php:215 -#: plugins/instances/init.php:405 +#: classes/handler/public.php:426 classes/pref/feeds.php:570 +#: classes/pref/feeds.php:811 plugins/instances/init.php:212 +#: plugins/instances/init.php:401 msgid "URL:" msgstr "" -#: classes/handler/public.php:436 +#: classes/handler/public.php:428 msgid "Content:" msgstr "" -#: classes/handler/public.php:438 +#: classes/handler/public.php:430 msgid "Labels:" msgstr "" -#: classes/handler/public.php:457 +#: classes/handler/public.php:449 msgid "Shared article will appear in the Published feed." msgstr "" -#: classes/handler/public.php:459 +#: classes/handler/public.php:451 msgid "Share" msgstr "" -#: classes/handler/public.php:481 +#: classes/handler/public.php:473 msgid "Not logged in" msgstr "" -#: classes/handler/public.php:548 +#: classes/handler/public.php:529 msgid "Incorrect username or password" msgstr "" -#: classes/handler/public.php:584 classes/handler/public.php:681 +#: classes/handler/public.php:565 classes/handler/public.php:662 #, php-format msgid "Already subscribed to <b>%s</b>." msgstr "" -#: classes/handler/public.php:587 classes/handler/public.php:672 +#: classes/handler/public.php:568 classes/handler/public.php:653 #, php-format msgid "Subscribed to <b>%s</b>." msgstr "" -#: classes/handler/public.php:590 classes/handler/public.php:675 +#: classes/handler/public.php:571 classes/handler/public.php:656 #, php-format msgid "Could not subscribe to <b>%s</b>." msgstr "" -#: classes/handler/public.php:593 classes/handler/public.php:678 +#: classes/handler/public.php:574 classes/handler/public.php:659 #, php-format msgid "No feeds found in <b>%s</b>." msgstr "" -#: classes/handler/public.php:596 classes/handler/public.php:684 +#: classes/handler/public.php:577 classes/handler/public.php:665 msgid "Multiple feed URLs found." msgstr "" -#: classes/handler/public.php:600 classes/handler/public.php:689 +#: classes/handler/public.php:581 classes/handler/public.php:670 #, php-format msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL." msgstr "" -#: classes/handler/public.php:618 classes/handler/public.php:707 +#: classes/handler/public.php:599 classes/handler/public.php:688 msgid "Subscribe to selected feed" msgstr "" -#: classes/handler/public.php:643 classes/handler/public.php:731 +#: classes/handler/public.php:624 classes/handler/public.php:712 msgid "Edit subscription options" msgstr "" -#: classes/handler/public.php:758 +#: classes/handler/public.php:739 msgid "Password recovery" msgstr "" -#: classes/handler/public.php:764 +#: classes/handler/public.php:745 msgid "" "You will need to provide valid account name and email. New password will be " "sent on your email address." msgstr "" -#: classes/handler/public.php:786 classes/pref/users.php:360 +#: classes/handler/public.php:767 classes/pref/users.php:360 msgid "Reset password" msgstr "" -#: classes/handler/public.php:796 +#: classes/handler/public.php:777 msgid "Some of the required form parameters are missing or incorrect." msgstr "" -#: classes/handler/public.php:800 classes/handler/public.php:826 -#: plugins/digest/digest_body.php:69 +#: classes/handler/public.php:781 classes/handler/public.php:807 +#: plugins/digest/digest_body.php:67 msgid "Go back" msgstr "" -#: classes/handler/public.php:822 +#: classes/handler/public.php:803 msgid "Sorry, login and email combination not found." msgstr "" -#: classes/handler/public.php:842 +#: classes/handler/public.php:823 msgid "Your access level is insufficient to run this script." msgstr "" -#: classes/handler/public.php:866 +#: classes/handler/public.php:847 msgid "Database Updater" msgstr "" -#: classes/handler/public.php:931 +#: classes/handler/public.php:912 msgid "Perform updates" msgstr "" @@ -996,7 +988,7 @@ msgstr "" msgid "You can view this feed as RSS using the following URL:" msgstr "" -#: classes/dlg.php:233 plugins/updater/init.php:333 +#: classes/dlg.php:233 plugins/updater/init.php:331 #, php-format msgid "New version of Tiny Tiny RSS is available (%s)." msgstr "" @@ -1007,7 +999,7 @@ msgid "" "php" msgstr "" -#: classes/dlg.php:245 plugins/updater/init.php:337 +#: classes/dlg.php:245 plugins/updater/init.php:335 msgid "See the release notes" msgstr "" @@ -1019,93 +1011,98 @@ msgstr "" msgid "Error receiving version information or no new version available." msgstr "" -#: classes/feeds.php:68 -msgid "Visit the website" +#: classes/feeds.php:56 +#, php-format +msgid "Last updated: %s" msgstr "" -#: classes/feeds.php:83 +#: classes/feeds.php:75 msgid "View as RSS feed" msgstr "" -#: classes/feeds.php:84 classes/feeds.php:138 classes/pref/feeds.php:1440 +#: classes/feeds.php:76 classes/feeds.php:128 classes/pref/feeds.php:1496 msgid "View as RSS" msgstr "" -#: classes/feeds.php:91 +#: classes/feeds.php:83 msgid "Select:" msgstr "" -#: classes/feeds.php:92 classes/pref/users.php:345 classes/pref/labels.php:275 +#: classes/feeds.php:84 classes/pref/users.php:345 classes/pref/labels.php:275 #: classes/pref/filters.php:282 classes/pref/filters.php:330 -#: classes/pref/filters.php:648 classes/pref/filters.php:737 -#: classes/pref/filters.php:764 classes/pref/prefs.php:1003 -#: classes/pref/feeds.php:1266 classes/pref/feeds.php:1536 -#: classes/pref/feeds.php:1606 plugins/instances/init.php:290 +#: classes/pref/filters.php:648 classes/pref/filters.php:736 +#: classes/pref/filters.php:763 classes/pref/prefs.php:996 +#: classes/pref/feeds.php:1323 classes/pref/feeds.php:1589 +#: classes/pref/feeds.php:1659 plugins/instances/init.php:287 msgid "All" msgstr "" -#: classes/feeds.php:94 +#: classes/feeds.php:86 msgid "Invert" msgstr "" -#: classes/feeds.php:95 classes/pref/users.php:347 classes/pref/labels.php:277 +#: classes/feeds.php:87 classes/pref/users.php:347 classes/pref/labels.php:277 #: classes/pref/filters.php:284 classes/pref/filters.php:332 -#: classes/pref/filters.php:650 classes/pref/filters.php:739 -#: classes/pref/filters.php:766 classes/pref/prefs.php:1005 -#: classes/pref/feeds.php:1268 classes/pref/feeds.php:1538 -#: classes/pref/feeds.php:1608 plugins/instances/init.php:292 +#: classes/pref/filters.php:650 classes/pref/filters.php:738 +#: classes/pref/filters.php:765 classes/pref/prefs.php:998 +#: classes/pref/feeds.php:1325 classes/pref/feeds.php:1591 +#: classes/pref/feeds.php:1661 plugins/instances/init.php:289 msgid "None" msgstr "" -#: classes/feeds.php:101 +#: classes/feeds.php:93 msgid "More..." msgstr "" -#: classes/feeds.php:103 +#: classes/feeds.php:95 msgid "Selection toggle:" msgstr "" -#: classes/feeds.php:109 +#: classes/feeds.php:101 msgid "Selection:" msgstr "" -#: classes/feeds.php:112 +#: classes/feeds.php:104 msgid "Set score" msgstr "" -#: classes/feeds.php:115 +#: classes/feeds.php:107 msgid "Archive" msgstr "" -#: classes/feeds.php:117 +#: classes/feeds.php:109 msgid "Move back" msgstr "" -#: classes/feeds.php:118 classes/pref/filters.php:291 -#: classes/pref/filters.php:339 classes/pref/filters.php:746 -#: classes/pref/filters.php:773 +#: classes/feeds.php:110 classes/pref/filters.php:291 +#: classes/pref/filters.php:339 classes/pref/filters.php:745 +#: classes/pref/filters.php:772 msgid "Delete" msgstr "" -#: classes/feeds.php:125 classes/feeds.php:130 plugins/mailto/init.php:28 -#: plugins/mail/init.php:28 +#: classes/feeds.php:115 classes/feeds.php:120 plugins/mailto/init.php:25 +#: plugins/mail/init.php:26 msgid "Forward by email" msgstr "" -#: classes/feeds.php:134 +#: classes/feeds.php:124 msgid "Feed:" msgstr "" -#: classes/feeds.php:205 classes/feeds.php:837 +#: classes/feeds.php:197 classes/feeds.php:837 msgid "Feed not found." msgstr "" -#: classes/feeds.php:387 +#: classes/feeds.php:254 +msgid "Never" +msgstr "" + +#: classes/feeds.php:360 #, php-format msgid "Imported at %s" msgstr "" -#: classes/feeds.php:534 +#: classes/feeds.php:535 msgid "mark as read" msgstr "" @@ -1153,8 +1150,8 @@ msgstr "" msgid "Feed or site URL" msgstr "" -#: classes/feeds.php:989 classes/pref/feeds.php:560 classes/pref/feeds.php:782 -#: classes/pref/feeds.php:1764 +#: classes/feeds.php:989 classes/pref/feeds.php:592 classes/pref/feeds.php:824 +#: classes/pref/feeds.php:1817 msgid "Place in category:" msgstr "" @@ -1163,19 +1160,19 @@ msgid "Available feeds" msgstr "" #: classes/feeds.php:1009 classes/pref/users.php:139 -#: classes/pref/feeds.php:590 classes/pref/feeds.php:818 +#: classes/pref/feeds.php:622 classes/pref/feeds.php:860 msgid "Authentication" msgstr "" #: classes/feeds.php:1013 classes/pref/users.php:402 -#: classes/pref/feeds.php:596 classes/pref/feeds.php:822 -#: classes/pref/feeds.php:1778 +#: classes/pref/feeds.php:628 classes/pref/feeds.php:864 +#: classes/pref/feeds.php:1831 msgid "Login" msgstr "" -#: classes/feeds.php:1016 classes/pref/prefs.php:271 -#: classes/pref/feeds.php:602 classes/pref/feeds.php:828 -#: classes/pref/feeds.php:1781 +#: classes/feeds.php:1016 classes/pref/prefs.php:260 +#: classes/pref/feeds.php:641 classes/pref/feeds.php:870 +#: classes/pref/feeds.php:1834 msgid "Password" msgstr "" @@ -1183,7 +1180,7 @@ msgstr "" msgid "This feed requires authentication." msgstr "" -#: classes/feeds.php:1031 classes/feeds.php:1087 classes/pref/feeds.php:1799 +#: classes/feeds.php:1031 classes/feeds.php:1087 classes/pref/feeds.php:1852 msgid "Subscribe" msgstr "" @@ -1192,7 +1189,7 @@ msgid "More feeds" msgstr "" #: classes/feeds.php:1057 classes/feeds.php:1148 classes/pref/users.php:332 -#: classes/pref/filters.php:641 classes/pref/feeds.php:1259 js/tt-rss.js:170 +#: classes/pref/filters.php:641 classes/pref/feeds.php:1316 js/tt-rss.js:173 msgid "Search" msgstr "" @@ -1210,8 +1207,8 @@ msgstr "" #: classes/feeds.php:1088 classes/pref/users.php:358 #: classes/pref/labels.php:284 classes/pref/filters.php:398 -#: classes/pref/filters.php:667 classes/pref/feeds.php:707 -#: plugins/instances/init.php:297 +#: classes/pref/filters.php:667 classes/pref/feeds.php:746 +#: plugins/instances/init.php:294 msgid "Remove" msgstr "" @@ -1293,15 +1290,32 @@ msgstr "" msgid "Processing category: %s" msgstr "" -#: classes/opml.php:468 +#: classes/opml.php:465 plugins/import_export/init.php:418 +#: plugins/googlereaderimport/init.php:66 +#, php-format +msgid "Upload failed with error code %d" +msgstr "" + +#: classes/opml.php:479 plugins/import_export/init.php:432 +#: plugins/googlereaderimport/init.php:80 +msgid "Unable to move uploaded file." +msgstr "" + +#: classes/opml.php:483 plugins/import_export/init.php:436 +#: plugins/googlereaderimport/init.php:84 msgid "Error: please upload OPML file." msgstr "" -#: classes/opml.php:475 plugins/googlereaderimport/init.php:166 +#: classes/opml.php:492 +msgid "Error: unable to find moved OPML file." +msgstr "" + +#: classes/opml.php:499 plugins/googlereaderimport/init.php:186 msgid "Error while parsing document." msgstr "" -#: classes/pref/users.php:6 plugins/instances/init.php:157 +#: classes/pref/users.php:6 classes/pref/system.php:8 +#: plugins/instances/init.php:154 msgid "Your access level is insufficient to open this tab." msgstr "" @@ -1333,8 +1347,8 @@ msgstr "" msgid "Change password to" msgstr "" -#: classes/pref/users.php:161 classes/pref/feeds.php:610 -#: classes/pref/feeds.php:834 +#: classes/pref/users.php:161 classes/pref/feeds.php:649 +#: classes/pref/feeds.php:876 msgid "Options" msgstr "" @@ -1373,10 +1387,10 @@ msgstr "" #: classes/pref/users.php:342 classes/pref/labels.php:272 #: classes/pref/filters.php:279 classes/pref/filters.php:327 -#: classes/pref/filters.php:645 classes/pref/filters.php:734 -#: classes/pref/filters.php:761 classes/pref/prefs.php:1000 -#: classes/pref/feeds.php:1263 classes/pref/feeds.php:1533 -#: classes/pref/feeds.php:1603 plugins/instances/init.php:287 +#: classes/pref/filters.php:645 classes/pref/filters.php:733 +#: classes/pref/filters.php:760 classes/pref/prefs.php:993 +#: classes/pref/feeds.php:1320 classes/pref/feeds.php:1586 +#: classes/pref/feeds.php:1656 plugins/instances/init.php:284 msgid "Select" msgstr "" @@ -1389,7 +1403,7 @@ msgid "Details" msgstr "" #: classes/pref/users.php:356 classes/pref/filters.php:660 -#: plugins/instances/init.php:296 +#: plugins/instances/init.php:293 msgid "Edit" msgstr "" @@ -1401,7 +1415,7 @@ msgstr "" msgid "Last login" msgstr "" -#: classes/pref/users.php:426 plugins/instances/init.php:337 +#: classes/pref/users.php:426 plugins/instances/init.php:334 msgid "Click to edit" msgstr "" @@ -1414,7 +1428,7 @@ msgid "No matching users found." msgstr "" #: classes/pref/labels.php:22 classes/pref/filters.php:268 -#: classes/pref/filters.php:725 +#: classes/pref/filters.php:724 msgid "Caption" msgstr "" @@ -1453,33 +1467,33 @@ msgid "" "database server regexp implementation." msgstr "" -#: classes/pref/filters.php:274 classes/pref/filters.php:729 -#: classes/pref/filters.php:844 +#: classes/pref/filters.php:274 classes/pref/filters.php:728 +#: classes/pref/filters.php:843 msgid "Match" msgstr "" #: classes/pref/filters.php:288 classes/pref/filters.php:336 -#: classes/pref/filters.php:743 classes/pref/filters.php:770 +#: classes/pref/filters.php:742 classes/pref/filters.php:769 msgid "Add" msgstr "" -#: classes/pref/filters.php:322 classes/pref/filters.php:756 +#: classes/pref/filters.php:322 classes/pref/filters.php:755 msgid "Apply actions" msgstr "" -#: classes/pref/filters.php:372 classes/pref/filters.php:785 +#: classes/pref/filters.php:372 classes/pref/filters.php:784 msgid "Enabled" msgstr "" -#: classes/pref/filters.php:381 classes/pref/filters.php:788 +#: classes/pref/filters.php:381 classes/pref/filters.php:787 msgid "Match any rule" msgstr "" -#: classes/pref/filters.php:390 classes/pref/filters.php:791 +#: classes/pref/filters.php:390 classes/pref/filters.php:790 msgid "Inverse matching" msgstr "" -#: classes/pref/filters.php:402 classes/pref/filters.php:798 +#: classes/pref/filters.php:402 classes/pref/filters.php:797 msgid "Test" msgstr "" @@ -1496,57 +1510,57 @@ msgstr "" msgid "Combine" msgstr "" -#: classes/pref/filters.php:663 classes/pref/feeds.php:1279 -#: classes/pref/feeds.php:1293 +#: classes/pref/filters.php:663 classes/pref/feeds.php:1336 +#: classes/pref/feeds.php:1350 msgid "Reset sort order" msgstr "" -#: classes/pref/filters.php:671 classes/pref/feeds.php:1318 +#: classes/pref/filters.php:671 classes/pref/feeds.php:1375 msgid "Rescore articles" msgstr "" -#: classes/pref/filters.php:801 +#: classes/pref/filters.php:800 msgid "Create" msgstr "" -#: classes/pref/filters.php:856 +#: classes/pref/filters.php:855 msgid "Inverse regular expression matching" msgstr "" -#: classes/pref/filters.php:858 +#: classes/pref/filters.php:857 msgid "on field" msgstr "" -#: classes/pref/filters.php:864 js/PrefFilterTree.js:45 +#: classes/pref/filters.php:863 js/PrefFilterTree.js:45 #: plugins/digest/digest.js:242 msgid "in" msgstr "" -#: classes/pref/filters.php:877 +#: classes/pref/filters.php:876 msgid "Save rule" msgstr "" -#: classes/pref/filters.php:877 js/functions.js:1013 +#: classes/pref/filters.php:876 js/functions.js:1013 msgid "Add rule" msgstr "" -#: classes/pref/filters.php:900 +#: classes/pref/filters.php:899 msgid "Perform Action" msgstr "" -#: classes/pref/filters.php:926 +#: classes/pref/filters.php:925 msgid "with parameters:" msgstr "" -#: classes/pref/filters.php:944 +#: classes/pref/filters.php:943 msgid "Save action" msgstr "" -#: classes/pref/filters.php:944 js/functions.js:1039 +#: classes/pref/filters.php:943 js/functions.js:1039 msgid "Add action" msgstr "" -#: classes/pref/filters.php:967 +#: classes/pref/filters.php:966 msgid "[No caption]" msgstr "" @@ -1697,7 +1711,7 @@ msgstr "" msgid "Purge unread articles" msgstr "" -#: classes/pref/prefs.php:47 plugins/mobile/prefs.php:60 +#: classes/pref/prefs.php:47 plugins/mobile/prefs.php:56 msgid "Reverse headline order (oldest first)" msgstr "" @@ -1737,7 +1751,7 @@ msgstr "" msgid "Strip all but most common HTML tags when reading articles." msgstr "" -#: classes/pref/prefs.php:54 js/prefs.js:1720 +#: classes/pref/prefs.php:54 js/prefs.js:1734 msgid "Customize stylesheet" msgstr "" @@ -1746,7 +1760,7 @@ msgid "Customize CSS stylesheet to your liking" msgstr "" #: classes/pref/prefs.php:55 -msgid "User timezone" +msgid "Time zone" msgstr "" #: classes/pref/prefs.php:56 @@ -1758,22 +1772,26 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds" msgstr "" #: classes/pref/prefs.php:57 -msgid "Select theme" +msgid "Language" msgstr "" -#: classes/pref/prefs.php:57 +#: classes/pref/prefs.php:58 +msgid "Theme" +msgstr "" + +#: classes/pref/prefs.php:58 msgid "Select one of the available CSS themes" msgstr "" -#: classes/pref/prefs.php:68 +#: classes/pref/prefs.php:69 msgid "Old password cannot be blank." msgstr "" -#: classes/pref/prefs.php:73 +#: classes/pref/prefs.php:74 msgid "New password cannot be blank." msgstr "" -#: classes/pref/prefs.php:78 +#: classes/pref/prefs.php:79 msgid "Entered passwords do not match." msgstr "" @@ -1781,154 +1799,158 @@ msgstr "" msgid "Function not supported by authentication module." msgstr "" -#: classes/pref/prefs.php:135 +#: classes/pref/prefs.php:127 msgid "The configuration was saved." msgstr "" -#: classes/pref/prefs.php:150 +#: classes/pref/prefs.php:142 #, php-format msgid "Unknown option: %s" msgstr "" -#: classes/pref/prefs.php:164 +#: classes/pref/prefs.php:156 msgid "Your personal data has been saved." msgstr "" -#: classes/pref/prefs.php:184 +#: classes/pref/prefs.php:176 msgid "Your preferences are now set to default values." msgstr "" -#: classes/pref/prefs.php:206 +#: classes/pref/prefs.php:198 msgid "Personal data / Authentication" msgstr "" -#: classes/pref/prefs.php:226 +#: classes/pref/prefs.php:218 msgid "Personal data" msgstr "" -#: classes/pref/prefs.php:236 +#: classes/pref/prefs.php:228 msgid "Full name" msgstr "" -#: classes/pref/prefs.php:240 +#: classes/pref/prefs.php:232 msgid "E-mail" msgstr "" -#: classes/pref/prefs.php:246 +#: classes/pref/prefs.php:238 msgid "Access level" msgstr "" -#: classes/pref/prefs.php:256 +#: classes/pref/prefs.php:248 msgid "Save data" msgstr "" -#: classes/pref/prefs.php:278 +#: classes/pref/prefs.php:267 msgid "Your password is at default value, please change it." msgstr "" -#: classes/pref/prefs.php:305 +#: classes/pref/prefs.php:294 msgid "Changing your current password will disable OTP." msgstr "" -#: classes/pref/prefs.php:310 +#: classes/pref/prefs.php:299 msgid "Old password" msgstr "" -#: classes/pref/prefs.php:313 +#: classes/pref/prefs.php:302 msgid "New password" msgstr "" -#: classes/pref/prefs.php:318 +#: classes/pref/prefs.php:307 msgid "Confirm password" msgstr "" -#: classes/pref/prefs.php:328 +#: classes/pref/prefs.php:317 msgid "Change password" msgstr "" -#: classes/pref/prefs.php:334 +#: classes/pref/prefs.php:323 msgid "One time passwords / Authenticator" msgstr "" -#: classes/pref/prefs.php:338 +#: classes/pref/prefs.php:327 msgid "" "One time passwords are currently enabled. Enter your current password below " "to disable." msgstr "" -#: classes/pref/prefs.php:363 classes/pref/prefs.php:414 +#: classes/pref/prefs.php:352 classes/pref/prefs.php:403 msgid "Enter your password" msgstr "" -#: classes/pref/prefs.php:374 +#: classes/pref/prefs.php:363 msgid "Disable OTP" msgstr "" -#: classes/pref/prefs.php:380 +#: classes/pref/prefs.php:369 msgid "" "You will need a compatible Authenticator to use this. Changing your password " "would automatically disable OTP." msgstr "" -#: classes/pref/prefs.php:382 +#: classes/pref/prefs.php:371 msgid "Scan the following code by the Authenticator application:" msgstr "" -#: classes/pref/prefs.php:423 -msgid "I have scanned the code and would like to enable OTP" +#: classes/pref/prefs.php:408 +msgid "Enter the generated one time password" msgstr "" -#: classes/pref/prefs.php:431 +#: classes/pref/prefs.php:422 msgid "Enable OTP" msgstr "" -#: classes/pref/prefs.php:477 +#: classes/pref/prefs.php:428 +msgid "PHP GD functions are required for OTP support." +msgstr "" + +#: classes/pref/prefs.php:471 msgid "Some preferences are only available in default profile." msgstr "" -#: classes/pref/prefs.php:587 +#: classes/pref/prefs.php:569 msgid "Customize" msgstr "" -#: classes/pref/prefs.php:647 +#: classes/pref/prefs.php:629 msgid "Register" msgstr "" -#: classes/pref/prefs.php:651 +#: classes/pref/prefs.php:633 msgid "Clear" msgstr "" -#: classes/pref/prefs.php:657 +#: classes/pref/prefs.php:639 #, php-format msgid "Current server time: %s (UTC)" msgstr "" -#: classes/pref/prefs.php:690 +#: classes/pref/prefs.php:671 msgid "Save configuration" msgstr "" -#: classes/pref/prefs.php:694 +#: classes/pref/prefs.php:675 msgid "Save and exit preferences" msgstr "" -#: classes/pref/prefs.php:699 +#: classes/pref/prefs.php:680 msgid "Manage profiles" msgstr "" -#: classes/pref/prefs.php:702 +#: classes/pref/prefs.php:683 msgid "Reset to defaults" msgstr "" -#: classes/pref/prefs.php:726 classes/pref/prefs.php:728 +#: classes/pref/prefs.php:706 classes/pref/prefs.php:708 msgid "Plugins" msgstr "" -#: classes/pref/prefs.php:730 +#: classes/pref/prefs.php:710 msgid "" "You will need to reload Tiny Tiny RSS for plugin changes to take effect." msgstr "" -#: classes/pref/prefs.php:732 +#: classes/pref/prefs.php:712 msgid "" "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank" "\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a " @@ -1936,47 +1958,51 @@ msgid "" "\">wiki</a>." msgstr "" -#: classes/pref/prefs.php:758 +#: classes/pref/prefs.php:738 msgid "System plugins" msgstr "" -#: classes/pref/prefs.php:762 classes/pref/prefs.php:816 +#: classes/pref/prefs.php:742 classes/pref/prefs.php:796 msgid "Plugin" msgstr "" -#: classes/pref/prefs.php:763 classes/pref/prefs.php:817 +#: classes/pref/prefs.php:743 classes/pref/prefs.php:797 msgid "Description" msgstr "" -#: classes/pref/prefs.php:764 classes/pref/prefs.php:818 +#: classes/pref/prefs.php:744 classes/pref/prefs.php:798 msgid "Version" msgstr "" -#: classes/pref/prefs.php:765 classes/pref/prefs.php:819 +#: classes/pref/prefs.php:745 classes/pref/prefs.php:799 msgid "Author" msgstr "" -#: classes/pref/prefs.php:794 classes/pref/prefs.php:851 +#: classes/pref/prefs.php:774 classes/pref/prefs.php:831 msgid "more info" msgstr "" -#: classes/pref/prefs.php:803 classes/pref/prefs.php:860 +#: classes/pref/prefs.php:783 classes/pref/prefs.php:840 msgid "Clear data" msgstr "" -#: classes/pref/prefs.php:812 +#: classes/pref/prefs.php:792 msgid "User plugins" msgstr "" -#: classes/pref/prefs.php:875 +#: classes/pref/prefs.php:855 msgid "Enable selected plugins" msgstr "" -#: classes/pref/prefs.php:930 classes/pref/prefs.php:948 +#: classes/pref/prefs.php:922 +msgid "Incorrect one time password" +msgstr "" + +#: classes/pref/prefs.php:925 classes/pref/prefs.php:942 msgid "Incorrect password" msgstr "" -#: classes/pref/prefs.php:974 +#: classes/pref/prefs.php:967 #, php-format msgid "" "You can override colors, fonts and layout of your currently selected theme " @@ -1984,19 +2010,19 @@ msgid "" "\" href=\"%s\">This file</a> can be used as a baseline." msgstr "" -#: classes/pref/prefs.php:1014 +#: classes/pref/prefs.php:1007 msgid "Create profile" msgstr "" -#: classes/pref/prefs.php:1037 classes/pref/prefs.php:1067 +#: classes/pref/prefs.php:1030 classes/pref/prefs.php:1060 msgid "(active)" msgstr "" -#: classes/pref/prefs.php:1101 +#: classes/pref/prefs.php:1094 msgid "Remove selected profiles" msgstr "" -#: classes/pref/prefs.php:1103 +#: classes/pref/prefs.php:1096 msgid "Activate profile" msgstr "" @@ -2004,271 +2030,295 @@ msgstr "" msgid "Check to enable field" msgstr "" -#: classes/pref/feeds.php:527 +#: classes/pref/feeds.php:559 msgid "Feed Title" msgstr "" -#: classes/pref/feeds.php:568 classes/pref/feeds.php:793 +#: classes/pref/feeds.php:600 classes/pref/feeds.php:835 msgid "Update" msgstr "" -#: classes/pref/feeds.php:583 classes/pref/feeds.php:809 +#: classes/pref/feeds.php:615 classes/pref/feeds.php:851 msgid "Article purging:" msgstr "" -#: classes/pref/feeds.php:606 +#: classes/pref/feeds.php:645 msgid "" "<b>Hint:</b> you need to fill in your login information if your feed " "requires authentication, except for Twitter feeds." msgstr "" -#: classes/pref/feeds.php:622 classes/pref/feeds.php:838 +#: classes/pref/feeds.php:661 classes/pref/feeds.php:880 msgid "Hide from Popular feeds" msgstr "" -#: classes/pref/feeds.php:634 classes/pref/feeds.php:844 +#: classes/pref/feeds.php:673 classes/pref/feeds.php:886 msgid "Include in e-mail digest" msgstr "" -#: classes/pref/feeds.php:647 classes/pref/feeds.php:850 +#: classes/pref/feeds.php:686 classes/pref/feeds.php:892 msgid "Always display image attachments" msgstr "" -#: classes/pref/feeds.php:660 classes/pref/feeds.php:858 +#: classes/pref/feeds.php:699 classes/pref/feeds.php:900 msgid "Do not embed images" msgstr "" -#: classes/pref/feeds.php:673 classes/pref/feeds.php:866 +#: classes/pref/feeds.php:712 classes/pref/feeds.php:908 msgid "Cache images locally" msgstr "" -#: classes/pref/feeds.php:685 classes/pref/feeds.php:872 +#: classes/pref/feeds.php:724 classes/pref/feeds.php:914 msgid "Mark updated articles as unread" msgstr "" -#: classes/pref/feeds.php:691 +#: classes/pref/feeds.php:730 msgid "Icon" msgstr "" -#: classes/pref/feeds.php:705 +#: classes/pref/feeds.php:744 msgid "Replace" msgstr "" -#: classes/pref/feeds.php:724 +#: classes/pref/feeds.php:766 msgid "Resubscribe to push updates" msgstr "" -#: classes/pref/feeds.php:731 +#: classes/pref/feeds.php:773 msgid "Resets PubSubHubbub subscription status for push-enabled feeds." msgstr "" -#: classes/pref/feeds.php:1112 classes/pref/feeds.php:1165 +#: classes/pref/feeds.php:1169 classes/pref/feeds.php:1222 msgid "All done." msgstr "" -#: classes/pref/feeds.php:1220 +#: classes/pref/feeds.php:1277 msgid "Feeds with errors" msgstr "" -#: classes/pref/feeds.php:1240 +#: classes/pref/feeds.php:1297 msgid "Inactive feeds" msgstr "" -#: classes/pref/feeds.php:1277 +#: classes/pref/feeds.php:1334 msgid "Edit selected feeds" msgstr "" -#: classes/pref/feeds.php:1281 js/prefs.js:1765 +#: classes/pref/feeds.php:1338 js/prefs.js:1779 msgid "Batch subscribe" msgstr "" -#: classes/pref/feeds.php:1288 +#: classes/pref/feeds.php:1345 msgid "Categories" msgstr "" -#: classes/pref/feeds.php:1291 +#: classes/pref/feeds.php:1348 msgid "Add category" msgstr "" -#: classes/pref/feeds.php:1295 +#: classes/pref/feeds.php:1352 msgid "Remove selected" msgstr "" -#: classes/pref/feeds.php:1304 +#: classes/pref/feeds.php:1361 msgid "(Un)hide empty categories" msgstr "" -#: classes/pref/feeds.php:1309 +#: classes/pref/feeds.php:1366 msgid "More actions..." msgstr "" -#: classes/pref/feeds.php:1313 +#: classes/pref/feeds.php:1370 msgid "Manual purge" msgstr "" -#: classes/pref/feeds.php:1317 +#: classes/pref/feeds.php:1374 msgid "Clear feed data" msgstr "" -#: classes/pref/feeds.php:1368 +#: classes/pref/feeds.php:1425 msgid "OPML" msgstr "" -#: classes/pref/feeds.php:1370 +#: classes/pref/feeds.php:1427 msgid "" "Using OPML you can export and import your feeds, filters, labels and Tiny " "Tiny RSS settings." msgstr "" -#: classes/pref/feeds.php:1372 +#: classes/pref/feeds.php:1429 msgid "Only main settings profile can be migrated using OPML." msgstr "" -#: classes/pref/feeds.php:1385 +#: classes/pref/feeds.php:1442 msgid "Import my OPML" msgstr "" -#: classes/pref/feeds.php:1389 +#: classes/pref/feeds.php:1446 msgid "Filename:" msgstr "" -#: classes/pref/feeds.php:1391 +#: classes/pref/feeds.php:1448 msgid "Include settings" msgstr "" -#: classes/pref/feeds.php:1395 +#: classes/pref/feeds.php:1452 msgid "Export OPML" msgstr "" -#: classes/pref/feeds.php:1399 +#: classes/pref/feeds.php:1456 msgid "" "Your OPML can be published publicly and can be subscribed by anyone who " "knows the URL below." msgstr "" -#: classes/pref/feeds.php:1401 +#: classes/pref/feeds.php:1458 msgid "" "Published OPML does not include your Tiny Tiny RSS settings, feeds that " "require authentication or feeds hidden from Popular feeds." msgstr "" -#: classes/pref/feeds.php:1403 +#: classes/pref/feeds.php:1460 msgid "Public OPML URL" msgstr "" -#: classes/pref/feeds.php:1404 +#: classes/pref/feeds.php:1461 msgid "Display published OPML URL" msgstr "" -#: classes/pref/feeds.php:1414 +#: classes/pref/feeds.php:1470 msgid "Firefox integration" msgstr "" -#: classes/pref/feeds.php:1416 +#: classes/pref/feeds.php:1472 msgid "" "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the " "link below." msgstr "" -#: classes/pref/feeds.php:1423 +#: classes/pref/feeds.php:1479 msgid "Click here to register this site as a feed reader." msgstr "" -#: classes/pref/feeds.php:1431 +#: classes/pref/feeds.php:1487 msgid "Published & shared articles / Generated feeds" msgstr "" -#: classes/pref/feeds.php:1433 +#: classes/pref/feeds.php:1489 msgid "Published articles and generated feeds" msgstr "" -#: classes/pref/feeds.php:1435 +#: classes/pref/feeds.php:1491 msgid "" "Published articles are exported as a public RSS feed and can be subscribed " "by anyone who knows the URL specified below." msgstr "" -#: classes/pref/feeds.php:1441 +#: classes/pref/feeds.php:1497 msgid "Display URL" msgstr "" -#: classes/pref/feeds.php:1444 +#: classes/pref/feeds.php:1500 msgid "Clear all generated URLs" msgstr "" -#: classes/pref/feeds.php:1446 +#: classes/pref/feeds.php:1502 msgid "Articles shared by URL" msgstr "" -#: classes/pref/feeds.php:1448 +#: classes/pref/feeds.php:1504 msgid "You can disable all articles shared by unique URLs here." msgstr "" -#: classes/pref/feeds.php:1451 +#: classes/pref/feeds.php:1507 msgid "Unshare all articles" msgstr "" -#: classes/pref/feeds.php:1529 +#: classes/pref/feeds.php:1582 msgid "" "These feeds have not been updated with new content for 3 months (oldest " "first):" msgstr "" -#: classes/pref/feeds.php:1566 classes/pref/feeds.php:1636 +#: classes/pref/feeds.php:1619 classes/pref/feeds.php:1689 msgid "Click to edit feed" msgstr "" -#: classes/pref/feeds.php:1584 classes/pref/feeds.php:1656 +#: classes/pref/feeds.php:1637 classes/pref/feeds.php:1709 msgid "Unsubscribe from selected feeds" msgstr "" -#: classes/pref/feeds.php:1595 +#: classes/pref/feeds.php:1648 msgid "These feeds have not been updated because of errors:" msgstr "" -#: classes/pref/feeds.php:1761 +#: classes/pref/feeds.php:1814 msgid "Add one valid RSS feed per line (no feed detection is done)" msgstr "" -#: classes/pref/feeds.php:1770 +#: classes/pref/feeds.php:1823 msgid "Feeds to subscribe, One per line" msgstr "" -#: classes/pref/feeds.php:1792 +#: classes/pref/feeds.php:1845 msgid "Feeds require authentication." msgstr "" -#: plugins/digest/digest_body.php:59 +#: classes/pref/system.php:25 +msgid "Error Log" +msgstr "" + +#: classes/pref/system.php:36 +msgid "Refresh" +msgstr "" + +#: classes/pref/system.php:41 +msgid "Error" +msgstr "" + +#: classes/pref/system.php:42 +msgid "Filename" +msgstr "" + +#: classes/pref/system.php:43 +msgid "Message" +msgstr "" + +#: classes/pref/system.php:45 +msgid "Date" +msgstr "" + +#: plugins/digest/digest_body.php:57 msgid "" "Your browser doesn't support Javascript, which is required for this " "application to function properly. Please check your browser settings." msgstr "" -#: plugins/digest/digest_body.php:74 +#: plugins/digest/digest_body.php:72 msgid "Hello," msgstr "" -#: plugins/digest/digest_body.php:80 +#: plugins/digest/digest_body.php:78 msgid "Regular version" msgstr "" -#: plugins/close_button/init.php:24 +#: plugins/close_button/init.php:22 msgid "Close article" msgstr "" -#: plugins/nsfw/init.php:32 plugins/nsfw/init.php:43 +#: plugins/nsfw/init.php:29 plugins/nsfw/init.php:40 msgid "Not work safe (click to toggle)" msgstr "" -#: plugins/nsfw/init.php:53 +#: plugins/nsfw/init.php:50 msgid "NSFW Plugin" msgstr "" -#: plugins/nsfw/init.php:80 +#: plugins/nsfw/init.php:77 msgid "Tags to consider NSFW (comma-separated)" msgstr "" -#: plugins/nsfw/init.php:101 +#: plugins/nsfw/init.php:98 msgid "Configuration saved." msgstr "" @@ -2284,16 +2334,16 @@ msgstr "" msgid "Old password is incorrect." msgstr "" -#: plugins/mobile/mobile-functions.php:61 -#: plugins/mobile/mobile-functions.php:137 -#: plugins/mobile/mobile-functions.php:173 -#: plugins/mobile/mobile-functions.php:200 -#: plugins/mobile/mobile-functions.php:236 -#: plugins/mobile/mobile-functions.php:373 plugins/mobile/prefs.php:29 +#: plugins/mobile/mobile-functions.php:64 +#: plugins/mobile/mobile-functions.php:140 +#: plugins/mobile/mobile-functions.php:176 +#: plugins/mobile/mobile-functions.php:203 +#: plugins/mobile/mobile-functions.php:239 +#: plugins/mobile/mobile-functions.php:376 plugins/mobile/prefs.php:25 msgid "Home" msgstr "" -#: plugins/mobile/mobile-functions.php:409 +#: plugins/mobile/mobile-functions.php:412 msgid "Nothing found (click to reload feed)." msgstr "" @@ -2301,400 +2351,405 @@ msgstr "" msgid "Open regular version" msgstr "" -#: plugins/mobile/prefs.php:34 +#: plugins/mobile/prefs.php:30 msgid "Enable categories" msgstr "" -#: plugins/mobile/prefs.php:35 plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "ON" msgstr "" -#: plugins/mobile/prefs.php:35 plugins/mobile/prefs.php:40 -#: plugins/mobile/prefs.php:46 plugins/mobile/prefs.php:51 -#: plugins/mobile/prefs.php:56 plugins/mobile/prefs.php:61 +#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36 +#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47 +#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57 msgid "OFF" msgstr "" -#: plugins/mobile/prefs.php:39 +#: plugins/mobile/prefs.php:35 msgid "Browse categories like folders" msgstr "" -#: plugins/mobile/prefs.php:45 +#: plugins/mobile/prefs.php:41 msgid "Show images in posts" msgstr "" -#: plugins/mobile/prefs.php:50 +#: plugins/mobile/prefs.php:46 msgid "Hide read articles and feeds" msgstr "" -#: plugins/mobile/prefs.php:55 +#: plugins/mobile/prefs.php:51 msgid "Sort feeds by unread count" msgstr "" -#: plugins/mailto/init.php:52 plugins/mailto/init.php:58 -#: plugins/mail/init.php:66 plugins/mail/init.php:72 +#: plugins/mailto/init.php:49 plugins/mailto/init.php:55 +#: plugins/mail/init.php:64 plugins/mail/init.php:70 msgid "[Forwarded]" msgstr "" -#: plugins/mailto/init.php:52 plugins/mail/init.php:66 +#: plugins/mailto/init.php:49 plugins/mail/init.php:64 msgid "Multiple articles" msgstr "" -#: plugins/mailto/init.php:74 +#: plugins/mailto/init.php:71 msgid "Clicking the following link to invoke your mail client:" msgstr "" -#: plugins/mailto/init.php:78 +#: plugins/mailto/init.php:75 msgid "Forward selected article(s) by email." msgstr "" -#: plugins/mailto/init.php:81 +#: plugins/mailto/init.php:78 msgid "" "You should be able to edit the message before sending in your mail client." msgstr "" -#: plugins/mailto/init.php:86 +#: plugins/mailto/init.php:83 msgid "Close this dialog" msgstr "" -#: plugins/bookmarklets/init.php:22 +#: plugins/bookmarklets/init.php:20 msgid "Bookmarklets" msgstr "" -#: plugins/bookmarklets/init.php:24 +#: plugins/bookmarklets/init.php:22 msgid "" "Drag the link below to your browser toolbar, open the feed you're interested " "in in your browser and click on the link to subscribe to it." msgstr "" -#: plugins/bookmarklets/init.php:28 +#: plugins/bookmarklets/init.php:26 #, php-format msgid "Subscribe to %s in Tiny Tiny RSS?" msgstr "" -#: plugins/bookmarklets/init.php:32 +#: plugins/bookmarklets/init.php:30 msgid "Subscribe in Tiny Tiny RSS" msgstr "" -#: plugins/bookmarklets/init.php:34 +#: plugins/bookmarklets/init.php:32 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS" msgstr "" -#: plugins/import_export/init.php:61 +#: plugins/import_export/init.php:58 msgid "Import and export" msgstr "" -#: plugins/import_export/init.php:63 +#: plugins/import_export/init.php:60 msgid "Article archive" msgstr "" -#: plugins/import_export/init.php:65 +#: plugins/import_export/init.php:62 msgid "" "You can export and import your Starred and Archived articles for safekeeping " "or when migrating between tt-rss instances." msgstr "" -#: plugins/import_export/init.php:68 +#: plugins/import_export/init.php:65 msgid "Export my data" msgstr "" -#: plugins/import_export/init.php:84 +#: plugins/import_export/init.php:81 msgid "Import" msgstr "" -#: plugins/import_export/init.php:218 +#: plugins/import_export/init.php:217 msgid "Could not import: incorrect schema version." msgstr "" -#: plugins/import_export/init.php:223 +#: plugins/import_export/init.php:222 msgid "Could not import: unrecognized document format." msgstr "" -#: plugins/import_export/init.php:382 +#: plugins/import_export/init.php:381 msgid "Finished: " msgstr "" -#: plugins/import_export/init.php:383 +#: plugins/import_export/init.php:382 #, php-format msgid "%d article processed, " msgid_plural "%d articles processed, " msgstr[0] "" msgstr[1] "" -#: plugins/import_export/init.php:384 +#: plugins/import_export/init.php:383 #, php-format msgid "%d imported, " msgid_plural "%d imported, " msgstr[0] "" msgstr[1] "" -#: plugins/import_export/init.php:385 +#: plugins/import_export/init.php:384 #, php-format msgid "%d feed created." msgid_plural "%d feeds created." msgstr[0] "" msgstr[1] "" -#: plugins/import_export/init.php:390 +#: plugins/import_export/init.php:389 msgid "Could not load XML document." msgstr "" -#: plugins/import_export/init.php:402 +#: plugins/import_export/init.php:401 msgid "Prepare data" msgstr "" -#: plugins/import_export/init.php:423 -#, php-format -msgid "" -"Could not upload file. You might need to adjust upload_max_filesize in PHP." -"ini (current value = %s)" +#: plugins/import_export/init.php:444 plugins/googlereaderimport/init.php:92 +msgid "No file uploaded." msgstr "" -#: plugins/mail/init.php:87 +#: plugins/mail/init.php:85 msgid "From:" msgstr "" -#: plugins/mail/init.php:96 +#: plugins/mail/init.php:94 msgid "To:" msgstr "" -#: plugins/mail/init.php:109 +#: plugins/mail/init.php:107 msgid "Subject:" msgstr "" -#: plugins/mail/init.php:125 +#: plugins/mail/init.php:123 msgid "Send e-mail" msgstr "" -#: plugins/note/init.php:28 plugins/note/note.js:11 +#: plugins/note/init.php:26 plugins/note/note.js:11 msgid "Edit article note" msgstr "" -#: plugins/example/init.php:39 +#: plugins/example/init.php:36 msgid "Example Pane" msgstr "" -#: plugins/example/init.php:70 +#: plugins/example/init.php:67 msgid "Sample value" msgstr "" -#: plugins/example/init.php:76 +#: plugins/example/init.php:73 msgid "Set value" msgstr "" -#: plugins/googlereaderimport/init.php:72 -msgid "No file uploaded." -msgstr "" - -#: plugins/googlereaderimport/init.php:158 +#: plugins/googlereaderimport/init.php:178 #, php-format msgid "All done. %d out of %d articles imported." msgstr "" -#: plugins/googlereaderimport/init.php:162 +#: plugins/googlereaderimport/init.php:182 msgid "The document has incorrect format." msgstr "" -#: plugins/googlereaderimport/init.php:333 +#: plugins/googlereaderimport/init.php:353 msgid "Import starred or shared items from Google Reader" msgstr "" -#: plugins/googlereaderimport/init.php:337 +#: plugins/googlereaderimport/init.php:357 msgid "Paste your starred.json or shared.json into the form below." msgstr "" -#: plugins/googlereaderimport/init.php:351 +#: plugins/googlereaderimport/init.php:371 msgid "Import my Starred items" msgstr "" -#: plugins/instances/init.php:144 +#: plugins/instances/init.php:141 msgid "Linked" msgstr "" -#: plugins/instances/init.php:207 plugins/instances/init.php:399 +#: plugins/instances/init.php:204 plugins/instances/init.php:395 msgid "Instance" msgstr "" -#: plugins/instances/init.php:218 plugins/instances/init.php:315 -#: plugins/instances/init.php:408 +#: plugins/instances/init.php:215 plugins/instances/init.php:312 +#: plugins/instances/init.php:404 msgid "Instance URL" msgstr "" -#: plugins/instances/init.php:229 plugins/instances/init.php:418 +#: plugins/instances/init.php:226 plugins/instances/init.php:414 msgid "Access key:" msgstr "" -#: plugins/instances/init.php:232 plugins/instances/init.php:316 -#: plugins/instances/init.php:421 +#: plugins/instances/init.php:229 plugins/instances/init.php:313 +#: plugins/instances/init.php:417 msgid "Access key" msgstr "" -#: plugins/instances/init.php:236 plugins/instances/init.php:425 +#: plugins/instances/init.php:233 plugins/instances/init.php:421 msgid "Use one access key for both linked instances." msgstr "" -#: plugins/instances/init.php:244 plugins/instances/init.php:433 +#: plugins/instances/init.php:241 plugins/instances/init.php:429 msgid "Generate new key" msgstr "" -#: plugins/instances/init.php:295 +#: plugins/instances/init.php:292 msgid "Link instance" msgstr "" -#: plugins/instances/init.php:307 +#: plugins/instances/init.php:304 msgid "" "You can connect other instances of Tiny Tiny RSS to this one to share " "Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:" msgstr "" -#: plugins/instances/init.php:317 +#: plugins/instances/init.php:314 msgid "Last connected" msgstr "" -#: plugins/instances/init.php:318 +#: plugins/instances/init.php:315 msgid "Status" msgstr "" -#: plugins/instances/init.php:319 +#: plugins/instances/init.php:316 msgid "Stored feeds" msgstr "" -#: plugins/instances/init.php:437 +#: plugins/instances/init.php:433 msgid "Create link" msgstr "" -#: plugins/share/init.php:27 +#: plugins/share/init.php:25 msgid "Share by URL" msgstr "" -#: plugins/share/init.php:49 +#: plugins/share/init.php:47 msgid "You can share this article by the following unique URL:" msgstr "" -#: plugins/updater/init.php:323 plugins/updater/init.php:340 +#: plugins/updater/init.php:321 plugins/updater/init.php:338 #: plugins/updater/updater.js:10 msgid "Update Tiny Tiny RSS" msgstr "" -#: plugins/updater/init.php:343 +#: plugins/updater/init.php:341 msgid "Your Tiny Tiny RSS installation is up to date." msgstr "" -#: plugins/updater/init.php:351 +#: plugins/updater/init.php:349 msgid "Do not close this dialog until updating is finished." msgstr "" -#: plugins/updater/init.php:360 +#: plugins/updater/init.php:358 msgid "It is suggested to backup your tt-rss directory first." msgstr "" -#: plugins/updater/init.php:361 +#: plugins/updater/init.php:359 msgid "Your database will not be modified." msgstr "" -#: plugins/updater/init.php:362 +#: plugins/updater/init.php:360 msgid "" "Your current tt-rss installation directory will not be modified. It will be " "renamed and left in the parent directory. You will be able to migrate all " "your customized files after update finishes." msgstr "" -#: plugins/updater/init.php:363 +#: plugins/updater/init.php:361 msgid "Ready to update." msgstr "" -#: plugins/updater/init.php:368 +#: plugins/updater/init.php:366 msgid "Start update" msgstr "" -#: js/feedlist.js:394 js/feedlist.js:422 plugins/digest/digest.js:26 +#: js/feedlist.js:395 js/feedlist.js:423 plugins/digest/digest.js:26 msgid "Mark all articles in %s as read?" msgstr "" -#: js/feedlist.js:413 +#: js/feedlist.js:414 msgid "Mark all articles in %s older than 1 day as read?" msgstr "" -#: js/feedlist.js:416 +#: js/feedlist.js:417 msgid "Mark all articles in %s older than 1 week as read?" msgstr "" -#: js/feedlist.js:419 +#: js/feedlist.js:420 msgid "Mark all articles in %s older than 2 weeks as read?" msgstr "" -#: js/functions.js:92 +#: js/functions.js:65 +msgid "The error will be reported to the configured log destination." +msgstr "" + +#: js/functions.js:107 msgid "" "Are you sure to report this exception to tt-rss.org? The report will include " "your browser information. Your IP would be saved in the database." msgstr "" -#: js/functions.js:214 -msgid "close" +#: js/functions.js:236 +msgid "Click to close" msgstr "" -#: js/functions.js:586 +#: js/functions.js:612 msgid "Error explained" msgstr "" -#: js/functions.js:668 +#: js/functions.js:694 msgid "Upload complete." msgstr "" -#: js/functions.js:692 +#: js/functions.js:718 msgid "Remove stored feed icon?" msgstr "" -#: js/functions.js:697 +#: js/functions.js:723 msgid "Removing feed icon..." msgstr "" -#: js/functions.js:702 +#: js/functions.js:728 msgid "Feed icon removed." msgstr "" -#: js/functions.js:724 +#: js/functions.js:750 msgid "Please select an image file to upload." msgstr "" -#: js/functions.js:726 +#: js/functions.js:752 msgid "Upload new icon for this feed?" msgstr "" -#: js/functions.js:727 +#: js/functions.js:753 msgid "Uploading, please wait..." msgstr "" -#: js/functions.js:743 +#: js/functions.js:769 msgid "Please enter label caption:" msgstr "" -#: js/functions.js:748 +#: js/functions.js:774 msgid "Can't create label: missing caption." msgstr "" -#: js/functions.js:791 +#: js/functions.js:817 msgid "Subscribe to Feed" msgstr "" -#: js/functions.js:818 +#: js/functions.js:844 msgid "Subscribed to %s" msgstr "" -#: js/functions.js:823 +#: js/functions.js:849 msgid "Specified URL seems to be invalid." msgstr "" -#: js/functions.js:826 +#: js/functions.js:852 msgid "Specified URL doesn't seem to contain any feeds." msgstr "" -#: js/functions.js:879 +#: js/functions.js:862 +msgid "Expand to select feed" +msgstr "" + +#: js/functions.js:874 msgid "Couldn't download the specified URL: %s" msgstr "" +#: js/functions.js:878 +msgid "XML validation failed: %s" +msgstr "" + #: js/functions.js:883 msgid "You are already subscribed to this feed." msgstr "" @@ -2721,7 +2776,7 @@ msgstr "" msgid "Subscription reset." msgstr "" -#: js/functions.js:1212 js/tt-rss.js:641 +#: js/functions.js:1212 js/tt-rss.js:650 msgid "Unsubscribe from %s?" msgstr "" @@ -2729,59 +2784,59 @@ msgstr "" msgid "Removing feed..." msgstr "" -#: js/functions.js:1323 +#: js/functions.js:1324 msgid "Please enter category title:" msgstr "" -#: js/functions.js:1354 +#: js/functions.js:1355 msgid "Generate new syndication address for this feed?" msgstr "" -#: js/functions.js:1358 js/prefs.js:1217 +#: js/functions.js:1359 js/prefs.js:1231 msgid "Trying to change address..." msgstr "" -#: js/functions.js:1545 js/tt-rss.js:412 js/tt-rss.js:622 +#: js/functions.js:1546 js/tt-rss.js:421 js/tt-rss.js:631 msgid "You can't edit this kind of feed." msgstr "" -#: js/functions.js:1560 +#: js/functions.js:1561 msgid "Edit Feed" msgstr "" -#: js/functions.js:1566 js/prefs.js:194 js/prefs.js:749 +#: js/functions.js:1567 js/prefs.js:194 js/prefs.js:749 msgid "Saving data..." msgstr "" -#: js/functions.js:1598 +#: js/functions.js:1599 msgid "More Feeds" msgstr "" -#: js/functions.js:1659 js/functions.js:1769 js/prefs.js:397 js/prefs.js:427 -#: js/prefs.js:459 js/prefs.js:642 js/prefs.js:662 js/prefs.js:1193 -#: js/prefs.js:1338 +#: js/functions.js:1660 js/functions.js:1770 js/prefs.js:397 js/prefs.js:427 +#: js/prefs.js:459 js/prefs.js:642 js/prefs.js:662 js/prefs.js:1207 +#: js/prefs.js:1352 msgid "No feeds are selected." msgstr "" -#: js/functions.js:1701 +#: js/functions.js:1702 msgid "" "Remove selected feeds from the archive? Feeds with stored articles will not " "be removed." msgstr "" -#: js/functions.js:1740 +#: js/functions.js:1741 msgid "Feeds with update errors" msgstr "" -#: js/functions.js:1751 js/prefs.js:1175 +#: js/functions.js:1752 js/prefs.js:1189 msgid "Remove selected feeds?" msgstr "" -#: js/functions.js:1754 js/prefs.js:1178 +#: js/functions.js:1755 js/prefs.js:1192 msgid "Removing selected feeds..." msgstr "" -#: js/functions.js:1852 +#: js/functions.js:1853 msgid "Help" msgstr "" @@ -2833,7 +2888,7 @@ msgstr "" msgid "Removing selected labels..." msgstr "" -#: js/prefs.js:295 js/prefs.js:1379 +#: js/prefs.js:295 js/prefs.js:1393 msgid "No labels are selected." msgstr "" @@ -2948,301 +3003,299 @@ msgstr "" msgid "Importing, please wait..." msgstr "" -#: js/prefs.js:968 +#: js/prefs.js:982 msgid "Reset to defaults?" msgstr "" -#: js/prefs.js:1082 +#: js/prefs.js:1096 msgid "" "Remove category %s? Any nested feeds would be placed into Uncategorized." msgstr "" -#: js/prefs.js:1088 +#: js/prefs.js:1102 msgid "Removing category..." msgstr "" -#: js/prefs.js:1109 +#: js/prefs.js:1123 msgid "Remove selected categories?" msgstr "" -#: js/prefs.js:1112 +#: js/prefs.js:1126 msgid "Removing selected categories..." msgstr "" -#: js/prefs.js:1125 +#: js/prefs.js:1139 msgid "No categories are selected." msgstr "" -#: js/prefs.js:1133 +#: js/prefs.js:1147 msgid "Category title:" msgstr "" -#: js/prefs.js:1137 +#: js/prefs.js:1151 msgid "Creating category..." msgstr "" -#: js/prefs.js:1164 +#: js/prefs.js:1178 msgid "Feeds without recent updates" msgstr "" -#: js/prefs.js:1213 +#: js/prefs.js:1227 msgid "Replace current OPML publishing address with a new one?" msgstr "" -#: js/prefs.js:1302 +#: js/prefs.js:1316 msgid "Clearing feed..." msgstr "" -#: js/prefs.js:1322 +#: js/prefs.js:1336 msgid "Rescore articles in selected feeds?" msgstr "" -#: js/prefs.js:1325 +#: js/prefs.js:1339 msgid "Rescoring selected feeds..." msgstr "" -#: js/prefs.js:1345 +#: js/prefs.js:1359 msgid "Rescore all articles? This operation may take a lot of time." msgstr "" -#: js/prefs.js:1348 +#: js/prefs.js:1362 msgid "Rescoring feeds..." msgstr "" -#: js/prefs.js:1365 +#: js/prefs.js:1379 msgid "Reset selected labels to default colors?" msgstr "" -#: js/prefs.js:1402 +#: js/prefs.js:1416 msgid "Settings Profiles" msgstr "" -#: js/prefs.js:1411 +#: js/prefs.js:1425 msgid "" "Remove selected profiles? Active and default profiles will not be removed." msgstr "" -#: js/prefs.js:1414 +#: js/prefs.js:1428 msgid "Removing selected profiles..." msgstr "" -#: js/prefs.js:1429 +#: js/prefs.js:1443 msgid "No profiles are selected." msgstr "" -#: js/prefs.js:1437 js/prefs.js:1490 +#: js/prefs.js:1451 js/prefs.js:1504 msgid "Activate selected profile?" msgstr "" -#: js/prefs.js:1453 js/prefs.js:1506 +#: js/prefs.js:1467 js/prefs.js:1520 msgid "Please choose a profile to activate." msgstr "" -#: js/prefs.js:1458 +#: js/prefs.js:1472 msgid "Creating profile..." msgstr "" -#: js/prefs.js:1514 +#: js/prefs.js:1528 msgid "This will invalidate all previously generated feed URLs. Continue?" msgstr "" -#: js/prefs.js:1517 js/prefs.js:1536 +#: js/prefs.js:1531 js/prefs.js:1550 msgid "Clearing URLs..." msgstr "" -#: js/prefs.js:1524 +#: js/prefs.js:1538 msgid "Generated URLs cleared." msgstr "" -#: js/prefs.js:1533 +#: js/prefs.js:1547 msgid "This will invalidate all previously shared article URLs. Continue?" msgstr "" -#: js/prefs.js:1543 +#: js/prefs.js:1557 msgid "Shared URLs cleared." msgstr "" -#: js/prefs.js:1649 +#: js/prefs.js:1663 msgid "Label Editor" msgstr "" -#: js/prefs.js:1771 +#: js/prefs.js:1785 msgid "Subscribing to feeds..." msgstr "" -#: js/prefs.js:1808 +#: js/prefs.js:1822 msgid "Clear stored data for this plugin?" msgstr "" -#: js/tt-rss.js:124 +#: js/tt-rss.js:126 msgid "Mark all articles as read?" msgstr "" -#: js/tt-rss.js:130 +#: js/tt-rss.js:132 msgid "Marking all feeds as read..." msgstr "" -#: js/tt-rss.js:371 +#: js/tt-rss.js:380 msgid "Please enable mail plugin first." msgstr "" -#: js/tt-rss.js:483 +#: js/tt-rss.js:492 msgid "Please enable embed_original plugin first." msgstr "" -#: js/tt-rss.js:609 +#: js/tt-rss.js:618 msgid "Select item(s) by tags" msgstr "" -#: js/tt-rss.js:630 +#: js/tt-rss.js:639 msgid "You can't unsubscribe from the category." msgstr "" -#: js/tt-rss.js:635 js/tt-rss.js:787 +#: js/tt-rss.js:644 js/tt-rss.js:798 msgid "Please select some feed first." msgstr "" -#: js/tt-rss.js:782 +#: js/tt-rss.js:793 msgid "You can't rescore this kind of feed." msgstr "" -#: js/tt-rss.js:792 +#: js/tt-rss.js:803 msgid "Rescore articles in %s?" msgstr "" -#: js/tt-rss.js:795 +#: js/tt-rss.js:806 msgid "Rescoring articles..." msgstr "" -#: js/tt-rss.js:929 +#: js/tt-rss.js:940 msgid "New version available!" msgstr "" -#: js/viewfeed.js:106 +#: js/viewfeed.js:102 msgid "Cancel search" msgstr "" -#: js/viewfeed.js:455 plugins/digest/digest.js:258 +#: js/viewfeed.js:453 plugins/digest/digest.js:258 #: plugins/digest/digest.js:714 msgid "Unstar article" msgstr "" -#: js/viewfeed.js:459 plugins/digest/digest.js:260 +#: js/viewfeed.js:457 plugins/digest/digest.js:260 #: plugins/digest/digest.js:718 msgid "Star article" msgstr "" -#: js/viewfeed.js:499 plugins/digest/digest.js:263 +#: js/viewfeed.js:497 plugins/digest/digest.js:263 #: plugins/digest/digest.js:749 msgid "Unpublish article" msgstr "" -#: js/viewfeed.js:503 plugins/digest/digest.js:265 +#: js/viewfeed.js:501 plugins/digest/digest.js:265 #: plugins/digest/digest.js:754 msgid "Publish article" msgstr "" -#: js/viewfeed.js:705 js/viewfeed.js:733 js/viewfeed.js:760 js/viewfeed.js:823 -#: js/viewfeed.js:857 js/viewfeed.js:975 js/viewfeed.js:1018 -#: js/viewfeed.js:1071 js/viewfeed.js:2106 plugins/mailto/init.js:7 +#: js/viewfeed.js:653 +msgid "%d article selected" +msgid_plural "%d articles selected" +msgstr[0] "" +msgstr[1] "" + +#: js/viewfeed.js:725 js/viewfeed.js:753 js/viewfeed.js:780 js/viewfeed.js:843 +#: js/viewfeed.js:877 js/viewfeed.js:997 js/viewfeed.js:1040 +#: js/viewfeed.js:1093 js/viewfeed.js:2091 plugins/mailto/init.js:7 #: plugins/mail/mail.js:7 msgid "No articles are selected." msgstr "" -#: js/viewfeed.js:983 +#: js/viewfeed.js:1005 msgid "Delete %d selected article in %s?" msgid_plural "Delete %d selected articles in %s?" msgstr[0] "" msgstr[1] "" -#: js/viewfeed.js:985 +#: js/viewfeed.js:1007 msgid "Delete %d selected article?" msgid_plural "Delete %d selected articles?" msgstr[0] "" msgstr[1] "" -#: js/viewfeed.js:1027 +#: js/viewfeed.js:1049 msgid "Archive %d selected article in %s?" msgid_plural "Archive %d selected articles in %s?" msgstr[0] "" msgstr[1] "" -#: js/viewfeed.js:1030 +#: js/viewfeed.js:1052 msgid "Move %d archived article back?" msgid_plural "Move %d archived articles back?" msgstr[0] "" msgstr[1] "" -#: js/viewfeed.js:1032 +#: js/viewfeed.js:1054 msgid "" "Please note that unstarred articles might get purged on next feed update." msgstr "" -#: js/viewfeed.js:1077 +#: js/viewfeed.js:1099 msgid "Mark %d selected article in %s as read?" msgid_plural "Mark %d selected articles in %s as read?" msgstr[0] "" msgstr[1] "" -#: js/viewfeed.js:1101 +#: js/viewfeed.js:1123 msgid "Edit article Tags" msgstr "" -#: js/viewfeed.js:1107 +#: js/viewfeed.js:1129 msgid "Saving article tags..." msgstr "" -#: js/viewfeed.js:1310 +#: js/viewfeed.js:1335 msgid "No article is selected." msgstr "" -#: js/viewfeed.js:1345 +#: js/viewfeed.js:1370 msgid "No articles found to mark" msgstr "" -#: js/viewfeed.js:1347 +#: js/viewfeed.js:1372 msgid "Mark %d article as read?" msgid_plural "Mark %d articles as read?" msgstr[0] "" msgstr[1] "" -#: js/viewfeed.js:1882 +#: js/viewfeed.js:1895 msgid "Open original article" msgstr "" -#: js/viewfeed.js:1888 +#: js/viewfeed.js:1901 msgid "Display article URL" msgstr "" -#: js/viewfeed.js:1907 +#: js/viewfeed.js:1920 msgid "Toggle marked" msgstr "" -#: js/viewfeed.js:1988 +#: js/viewfeed.js:2001 msgid "Assign label" msgstr "" -#: js/viewfeed.js:1993 +#: js/viewfeed.js:2006 msgid "Remove label" msgstr "" -#: js/viewfeed.js:2017 -msgid "Playing..." -msgstr "" - -#: js/viewfeed.js:2018 -msgid "Click to pause" -msgstr "" - -#: js/viewfeed.js:2075 +#: js/viewfeed.js:2060 msgid "Please enter new score for selected articles:" msgstr "" -#: js/viewfeed.js:2117 +#: js/viewfeed.js:2102 msgid "Please enter new score for this article:" msgstr "" -#: js/viewfeed.js:2150 +#: js/viewfeed.js:2135 msgid "Article URL:" msgstr "" @@ -2,6 +2,7 @@ set_include_path(dirname(__FILE__) ."/include" . PATH_SEPARATOR . get_include_path()); + require_once "autoload.php"; require_once "functions.php"; require_once "sessions.php"; require_once "sanity_check.php"; @@ -9,23 +10,21 @@ require_once "db.php"; require_once "db-prefs.php"; - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!init_connection($link)) return; + if (!init_plugins()) return; $op = $_REQUEST['op']; if ($op == "publish"){ - $key = db_escape_string($link, $_REQUEST["key"]); + $key = db_escape_string( $_REQUEST["key"]); - $result = db_query($link, "SELECT owner_uid + $result = db_query( "SELECT owner_uid FROM ttrss_access_keys WHERE access_key = '$key' AND feed_id = 'OPML:Publish'"); if (db_num_rows($result) == 1) { $owner_uid = db_fetch_result($result, 0, "owner_uid"); - $opml = new Opml($link, $_REQUEST); + $opml = new Opml($_REQUEST); $opml->opml_export("", $owner_uid, true, false); } else { @@ -33,6 +32,4 @@ } } - db_close($link); - ?> diff --git a/plugins/af_buttersafe/init.php b/plugins/af_buttersafe/init.php index c9f6505cd..05e684aa0 100644 --- a/plugins/af_buttersafe/init.php +++ b/plugins/af_buttersafe/init.php @@ -1,7 +1,6 @@ <?php class Af_Buttersafe extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Af_Buttersafe extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -55,5 +53,10 @@ class Af_Buttersafe extends Plugin { return $article; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/af_explosm/init.php b/plugins/af_explosm/init.php index 2a8fab491..dd106653a 100644 --- a/plugins/af_explosm/init.php +++ b/plugins/af_explosm/init.php @@ -1,7 +1,6 @@ <?php class Af_Explosm extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Af_Explosm extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -55,5 +53,9 @@ class Af_Explosm extends Plugin { return $article; } + + function api_version() { + return 2; + } } ?> diff --git a/plugins/af_gocomics/init.php b/plugins/af_gocomics/init.php index 466ec9687..e95de9f14 100644 --- a/plugins/af_gocomics/init.php +++ b/plugins/af_gocomics/init.php @@ -1,7 +1,5 @@ <?php class Af_GoComics extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class Af_GoComics extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -55,5 +52,10 @@ class Af_GoComics extends Plugin { return $article; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/af_pennyarcade/init.php b/plugins/af_pennyarcade/init.php index 06c1230a6..8ad02e14c 100644 --- a/plugins/af_pennyarcade/init.php +++ b/plugins/af_pennyarcade/init.php @@ -1,7 +1,6 @@ <?php class Af_PennyArcade extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Af_PennyArcade extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -22,11 +20,11 @@ class Af_PennyArcade extends Plugin { if (strpos($article["link"], "penny-arcade.com") !== FALSE && strpos($article["title"], "Comic:") !== FALSE) { if (strpos($article["plugin_data"], "pennyarcade,$owner_uid:") === FALSE) { - + if ($debug_enabled) { _debug("af_pennyarcade: Processing comic"); } - + $doc = new DOMDocument(); $doc->loadHTML(fetch_file_contents($article["link"])); @@ -49,7 +47,7 @@ class Af_PennyArcade extends Plugin { $article["content"] = $article["stored"]["content"]; } } - + if (strpos($article["link"], "penny-arcade.com") !== FALSE && strpos($article["title"], "News Post:") !== FALSE) { if (strpos($article["plugin_data"], "pennyarcade,$owner_uid:") === FALSE) { if ($debug_enabled) { @@ -57,22 +55,22 @@ class Af_PennyArcade extends Plugin { } $doc = new DOMDocument(); $doc->loadHTML(fetch_file_contents($article["link"])); - + if ($doc) { $xpath = new DOMXPath($doc); $entries = $xpath->query('(//div[@class="post"])'); - + $basenode = false; - + foreach ($entries as $entry) { $basenode = $entry; } - + $uninteresting = $xpath->query('(//div[@class="heading"])'); foreach ($uninteresting as $i) { $i->parentNode->removeChild($i); } - + if ($basenode){ $article["content"] = $doc->saveXML($basenode); $article["plugin_data"] = "pennyarcade,$owner_uid:" . $article["plugin_data"]; @@ -85,5 +83,10 @@ class Af_PennyArcade extends Plugin { return $article; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index f2d5c7b67..39a20784c 100644 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -1,7 +1,5 @@ <?php class Af_RedditImgur extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class Af_RedditImgur extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -136,5 +133,10 @@ class Af_RedditImgur extends Plugin { return $article; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/af_unburn/init.php b/plugins/af_unburn/init.php index 9f0b6cb0d..a97502b12 100644 --- a/plugins/af_unburn/init.php +++ b/plugins/af_unburn/init.php @@ -1,7 +1,5 @@ <?php class Af_Unburn extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class Af_Unburn extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -29,7 +26,7 @@ class Af_Unburn extends Plugin { if (strpos($article["plugin_data"], "unburn,$owner_uid:") === FALSE) { - if (ini_get("safe_mode")) { + if (ini_get("safe_mode") || ini_get("open_basedir")) { $ch = curl_init(geturl($article["link"])); } else { $ch = curl_init($article["link"]); @@ -38,7 +35,7 @@ class Af_Unburn extends Plugin { curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("safe_mode")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("safe_mode") && !ini_get("open_basedir")); curl_setopt($ch, CURLOPT_USERAGENT, SELF_USER_AGENT); $contents = @curl_exec($ch); @@ -117,7 +114,7 @@ class Af_Unburn extends Plugin { preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches); $url = trim(str_replace($matches[1],"",$matches[0])); $url_parsed = parse_url($url); - return (isset($url_parsed))? geturl($url, $referer):''; + return (isset($url_parsed))? geturl($url):''; } $oline=''; foreach($status as $key=>$eline){$oline.='['.$key.']'.$eline.' ';} @@ -128,5 +125,10 @@ class Af_Unburn extends Plugin { } return $url; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/auth_internal/init.php b/plugins/auth_internal/init.php index e910e52aa..87c8555c0 100644 --- a/plugins/auth_internal/init.php +++ b/plugins/auth_internal/init.php @@ -1,7 +1,5 @@ <?php class Auth_Internal extends Plugin implements IAuthModule { - - private $link; private $host; function about() { @@ -12,7 +10,6 @@ class Auth_Internal extends Plugin implements IAuthModule { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_AUTH_USER, $this); @@ -22,15 +19,17 @@ class Auth_Internal extends Plugin implements IAuthModule { $pwd_hash1 = encrypt_password($password); $pwd_hash2 = encrypt_password($password, $login); - $login = db_escape_string($this->link, $login); - $otp = db_escape_string($this->link, $_REQUEST["otp"]); + $login = db_escape_string($login); + $otp = db_escape_string($_REQUEST["otp"]); - if (get_schema_version($this->link) > 96) { + if (get_schema_version() > 96) { if (!defined('AUTH_DISABLE_OTP') || !AUTH_DISABLE_OTP) { - $result = db_query($this->link, "SELECT otp_enabled,salt FROM ttrss_users WHERE + + $result = db_query("SELECT otp_enabled,salt FROM ttrss_users WHERE login = '$login'"); if (db_num_rows($result) > 0) { + require_once "lib/otphp/vendor/base32.php"; require_once "lib/otphp/lib/otp.php"; require_once "lib/otphp/lib/totp.php"; @@ -52,17 +51,18 @@ class Auth_Internal extends Plugin implements IAuthModule { $return = urlencode($_REQUEST["return"]); ?><html> <head><title>Tiny Tiny RSS</title></head> - <body> + <?php stylesheet_tag("utility.css") ?> + <body class="otp"><div class="content"> <form action="public.php?return=<?php echo $return ?>" - method="POST"> + method="POST" class="otpform"> <input type="hidden" name="op" value="login"> <input type="hidden" name="login" value="<?php echo htmlspecialchars($login) ?>"> <input type="hidden" name="password" value="<?php echo htmlspecialchars($password) ?>"> <label><?php echo __("Please enter your one time password:") ?></label> - <input type="password" size="6" name="otp"/> + <input autocomplete="off" size="6" name="otp" value=""/> <input type="submit" value="Continue"/> - </form> + </form></div> <script type="text/javascript"> document.forms[0].otp.focus(); </script> @@ -74,9 +74,9 @@ class Auth_Internal extends Plugin implements IAuthModule { } } - if (get_schema_version($this->link) > 87) { + if (get_schema_version() > 87) { - $result = db_query($this->link, "SELECT salt FROM ttrss_users WHERE + $result = db_query("SELECT salt FROM ttrss_users WHERE login = '$login'"); if (db_num_rows($result) != 1) { @@ -94,7 +94,7 @@ class Auth_Internal extends Plugin implements IAuthModule { // verify and upgrade password to new salt base - $result = db_query($this->link, $query); + $result = db_query($query); if (db_num_rows($result) == 1) { // upgrade password to MODE2 @@ -102,7 +102,7 @@ class Auth_Internal extends Plugin implements IAuthModule { $salt = substr(bin2hex(get_random_bytes(125)), 0, 250); $pwd_hash = encrypt_password($password, $salt, true); - db_query($this->link, "UPDATE ttrss_users SET + db_query("UPDATE ttrss_users SET pwd_hash = '$pwd_hash', salt = '$salt' WHERE login = '$login'"); $query = "SELECT id @@ -130,7 +130,7 @@ class Auth_Internal extends Plugin implements IAuthModule { pwd_hash = '$pwd_hash2')"; } - $result = db_query($this->link, $query); + $result = db_query($query); if (db_num_rows($result) == 1) { return db_fetch_result($result, 0, "id"); @@ -140,9 +140,9 @@ class Auth_Internal extends Plugin implements IAuthModule { } function check_password($owner_uid, $password) { - $owner_uid = db_escape_string($this->link, $owner_uid); + $owner_uid = db_escape_string($owner_uid); - $result = db_query($this->link, "SELECT salt,login FROM ttrss_users WHERE + $result = db_query("SELECT salt,login FROM ttrss_users WHERE id = '$owner_uid'"); $salt = db_fetch_result($result, 0, "salt"); @@ -163,20 +163,20 @@ class Auth_Internal extends Plugin implements IAuthModule { id = '$owner_uid' AND pwd_hash = '$password_hash'"; } - $result = db_query($this->link, $query); + $result = db_query($query); return db_num_rows($result) != 0; } function change_password($owner_uid, $old_password, $new_password) { - $owner_uid = db_escape_string($this->link, $owner_uid); + $owner_uid = db_escape_string($owner_uid); if ($this->check_password($owner_uid, $old_password)) { $new_salt = substr(bin2hex(get_random_bytes(125)), 0, 250); $new_password_hash = encrypt_password($new_password, $new_salt, true); - db_query($this->link, "UPDATE ttrss_users SET + db_query("UPDATE ttrss_users SET pwd_hash = '$new_password_hash', salt = '$new_salt', otp_enabled = false WHERE id = '$owner_uid'"); @@ -187,5 +187,10 @@ class Auth_Internal extends Plugin implements IAuthModule { return "ERROR: ".__('Old password is incorrect.'); } } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/auth_remote/init.php b/plugins/auth_remote/init.php index 7e4638fb2..2ec2c87b2 100644 --- a/plugins/auth_remote/init.php +++ b/plugins/auth_remote/init.php @@ -1,7 +1,6 @@ <?php class Auth_Remote extends Plugin implements IAuthModule { - private $link; private $host; private $base; @@ -13,23 +12,22 @@ class Auth_Remote extends Plugin implements IAuthModule { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; - $this->base = new Auth_Base($this->link); + $this->base = new Auth_Base(); $host->add_hook($host::HOOK_AUTH_USER, $this); } function get_login_by_ssl_certificate() { - $cert_serial = db_escape_string($this->link, get_ssl_certificate_id()); + $cert_serial = db_escape_string(get_ssl_certificate_id()); if ($cert_serial) { - $result = db_query($this->link, "SELECT login FROM ttrss_user_prefs, ttrss_users + $result = db_query("SELECT login FROM ttrss_user_prefs, ttrss_users WHERE pref_name = 'SSL_CERT_SERIAL' AND value = '$cert_serial' AND owner_uid = ttrss_users.id"); if (db_num_rows($result) != 0) { - return db_escape_string($this->link, db_fetch_result($result, 0, "login")); + return db_escape_string(db_fetch_result($result, 0, "login")); } } @@ -38,16 +36,16 @@ class Auth_Remote extends Plugin implements IAuthModule { function authenticate($login, $password) { - $try_login = db_escape_string($this->link, $_SERVER["REMOTE_USER"]); + $try_login = db_escape_string($_SERVER["REMOTE_USER"]); // php-cgi - if (!$try_login) $try_login = db_escape_string($this->link, $_SERVER["REDIRECT_REMOTE_USER"]); + if (!$try_login) $try_login = db_escape_string($_SERVER["REDIRECT_REMOTE_USER"]); if (!$try_login) $try_login = $this->get_login_by_ssl_certificate(); # if (!$try_login) $try_login = "test_qqq"; if ($try_login) { - $user_id = $this->base->auto_create_user($try_login); + $user_id = $this->base->auto_create_user($try_login, $password); if ($user_id) { $_SESSION["fake_login"] = $try_login; @@ -60,15 +58,15 @@ class Auth_Remote extends Plugin implements IAuthModule { // update user name $fullname = $_SERVER['HTTP_USER_NAME'] ? $_SERVER['HTTP_USER_NAME'] : $_SERVER['AUTHENTICATE_CN']; if ($fullname){ - $fullname = db_escape_string($this->link, $fullname); - db_query($this->link, "UPDATE ttrss_users SET full_name = '$fullname' WHERE id = " . + $fullname = db_escape_string($fullname); + db_query("UPDATE ttrss_users SET full_name = '$fullname' WHERE id = " . $user_id); } // update user mail $email = $_SERVER['HTTP_USER_MAIL'] ? $_SERVER['HTTP_USER_MAIL'] : $_SERVER['AUTHENTICATE_MAIL']; if ($email){ - $email = db_escape_string($this->link, $email); - db_query($this->link, "UPDATE ttrss_users SET email = '$email' WHERE id = " . + $email = db_escape_string($email); + db_query("UPDATE ttrss_users SET email = '$email' WHERE id = " . $user_id); } } @@ -79,6 +77,11 @@ class Auth_Remote extends Plugin implements IAuthModule { return false; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/bookmarklets/init.php b/plugins/bookmarklets/init.php index 22f4f05a7..e45605558 100644 --- a/plugins/bookmarklets/init.php +++ b/plugins/bookmarklets/init.php @@ -1,6 +1,5 @@ <?php class Bookmarklets extends Plugin { - private $link; private $host; function about() { @@ -10,7 +9,6 @@ class Bookmarklets extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_PREFS_TAB, $this); @@ -40,8 +38,11 @@ class Bookmarklets extends Plugin { print "</div>"; #pane } - } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/close_button/init.php b/plugins/close_button/init.php index ff2027bc7..7911642c3 100644 --- a/plugins/close_button/init.php +++ b/plugins/close_button/init.php @@ -1,10 +1,8 @@ <?php class Close_Button extends Plugin { - private $link; private $host; function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -17,7 +15,7 @@ class Close_Button extends Plugin { } function hook_article_button($line) { - if (!get_pref($this->link, "COMBINED_DISPLAY_MODE")) { + if (!get_pref("COMBINED_DISPLAY_MODE")) { $rv = "<img src=\"plugins/close_button/button.png\" class='tagsPic' style=\"cursor : pointer\" onclick=\"closeArticlePanel()\" @@ -26,5 +24,10 @@ class Close_Button extends Plugin { return $rv; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/digest/digest.css b/plugins/digest/digest.css deleted file mode 100644 index 54568e3bc..000000000 --- a/plugins/digest/digest.css +++ /dev/null @@ -1,337 +0,0 @@ -body#ttrssDigest { - color : black; - font-family : sans-serif; - font-size : 12px; - margin : 0px; - background : url("images/tile.png"); -} - -a { - color : #0069D8; - text-decoration : none; -} - -a:hover { - color : gray; -} - -#header a, #footer a { - color : gray; -} - -#header a:hover, #footer a:hover { - color : #0069D8; -} - -#header { - font-size : 13px; - font-family : "Segoe UI", Tahoma, sans-serif; - padding : 5px 5px 5px 1.5em; - color : gray; - position : absolute; - top : 0px; - height : 30px; - left : 0px; - right : 0px; - color : #a0a0a0; -} - -#header span.title { - font-weight : bold; - font-style : italic; -} - -#header div.links { - position : absolute; - right : 1.5em; -} - -#search { - float : right; - clear : left; - -} - -#title { -} - -#latest { - padding : 5px; -} - -#content { - position : absolute; - left : 0px; - top : 30px; - right : 0px; - bottom : 0px; - -webkit-transition: left 0.2s linear, right 0.2s linear; - -moz-transition: left 0.2s linear, right 0.2s linear; - transition: left 0.2s linear, right 0.2s linear; -} - -#article { - position : absolute; - overflow : auto; - right : 0px; - width : 60%; - bottom : 0px; - top : 30px; - background : white; - z-index : -1; - opacity : 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; -} - -#article.visible { - opacity : 1; -} - -#article #article-content h1 { - margin : 0px 0px 10px 0px; - padding : 0px 0px 5px 0px; - font-family : "Segoe UI", Tahoma, sans-serif; - font-size : 21px; - font-weight : bold; - border-width : 0px 0px 3px 0px; - border-style : solid; - border-color : #e0e0e0; - color : gray; -} - -#article #article-content #toolbar { - border-width : 0px 0px 1px 0px; - border-color : #e0e0e0; - border-style : solid; - background : #fafafa; - font-size : 14px; - font-weight : bold; - padding : 5px 10px 5px 10px; - margin : 0px 0px 0px 0px; -} - -#article #article-content { - padding : 0px; - font-size : 16px; -} - -#article #article-content #tags { - color : #a0a0a0; -} - -#article #article-content #ops { - float : right; -} - -#article #article-content #ops img { - cursor : pointer; - margin-right : 0px; - margin-left : 10px; -} - -#article #article-content #inner { - padding : 20px; -} - -#article #article-content img { - max-width : 90%; -} - -#content.move { - left : -300px; - right : 60% -} - -#feeds { - position : absolute; - left : 0px; - width : 300px; - top : -30px; - bottom : 0px; - font-size : 14px; - overflow : auto; - border-width : 0px 3px 0px 0px; - border-color : #88b0f0; - border-style : solid; - background : #eee; -} - -#feeds ul#feeds-content img { - width : 16px; - height : 16px; - vertical-align : middle; - margin-right : 5px; -} - -#feeds ul#feeds-content div.unread-ctr { - color : #d0d0d0; - padding-left : 10px; - float : right; -} - -#feeds ul#feeds-content li { - padding : 10px; - clear : both; - cursor : pointer; - color : #303030; - white-space : nowrap; -} - -#feeds ul#feeds-content li.selected { - background : white; -} - -#feeds ul#feeds-content { - list-style-type : none; - font-weight : bold; - margin : 0px; - padding : 0px; -} - -#headlines { - font-size : 14px; - position : absolute; - left : 303px; - top : 0px; - bottom : 0px; - right : 0px; - overflow : auto; - border-width : 0px 3px 0px 0px; - border-style : solid; - border-color : #88b0f0; -} - -#headlines h1 a { - color : #684C99; -} - -#headlines ul#headlines-content .cb { - vertical-align : middle; - margin-right : 5px; - float : left; -} - -#headlines ul#headlines-content img.icon { - width : 16px; - height : 16px; - vertical-align : middle; - margin-right : 5px; - float : right; -} - -#headlines ul#headlines-content { - list-style-type : none; - color : gray; - margin : 0px; - padding : 0px; -} - -#headlines ul#headlines-content li { - margin : 0px 0px 0px 0px; - padding : 10px; - color : gray; - clear : left; - border-width : 0px 0px 1px 0px; - border-style : solid; - border-color : #e0e0e0; - background : #eee; -} - -#headlines ul#headlines-content a.title { - font-size : 14px; - font-weight : bold; - display : block; - margin-left : 21px; - position : relative; -} - -#headlines ul#headlines-content li.fresh a.title { - color : #007FFF; -} - -#headlines ul#headlines-content li.unread a.title { - color : black; - /* color : #8DB1D6; */ -} - -#headlines ul#headlines-content li.read a.title { - color : gray; -} - -#headlines ul#headlines-content li.unread, -#headlines ul#headlines-content li.fresh { - background-color : white; -} - -#headlines ul#headlines-content li.selected { - background-color : #fff7d5; - border-color : white white #e0e0e0; -} - -#headlines ul#headlines-content img#H-LOADING-IMG { - margin-left : 5px; -} - -#headlines ul#headlines-content div.excerpt { - color : #404040; - cursor : pointer; - margin-top : 5px; -} - -#headlines ul#headlines-content div.content { - color : #404040; -} - -#headlines ul#headlines-content div.content img { - max-width : 75%; -} - -#headlines ul#headlines-content div.body { - margin-left : 21px; - /*margin-left : 42px;*/ -} - -#headlines ul#headlines-content div.info { - font-size : 11px; - margin-top : 5px; -} - -#headlines ul#headlines-content div.info a { - color : gray; -} - -#overlay { - background : white; - left : 0; - top : 0; - height : 100%; - width : 100%; - z-index : 100; - position : absolute; - text-align : center; -} - -#overlay_inner { - margin : 1em; -} - -#overlay img { - vertical-align : middle; -} - -div.fatalError button { - margin-top : 5px; -} - -div.fatalError textarea { - width : 100%; - height : 100px; -} - -div.insensitive { - color : gray; -} - - diff --git a/plugins/digest/digest.js b/plugins/digest/digest.js deleted file mode 100644 index e3cb1e299..000000000 --- a/plugins/digest/digest.js +++ /dev/null @@ -1,924 +0,0 @@ -var last_feeds = []; -var init_params = {}; -var hotkeys_map = false; -var hotkey_prefix = false; -var mobile_mode = false; - -var _active_feed_id = false; -var _update_timeout = false; -var _view_update_timeout = false; -var _feedlist_expanded = false; -var _update_seq = 1; - -function article_appear(article_id) { - try { - new Effect.Appear('A-' + article_id); - } catch (e) { - exception_error("article_appear", e); - } -} - -function catchup_feed(feed_id, callback) { - try { - - var fn = find_feed(last_feeds, feed_id).title; - - if (confirm(__("Mark all articles in %s as read?").replace("%s", fn))) { - - var is_cat = ""; - - if (feed_id < 0) is_cat = "true"; // KLUDGE - - var query = "op=rpc&method=catchupFeed&feed_id=" + - feed_id + "&is_cat=" + is_cat; - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - if (callback) callback(transport); - - update(); - } }); - } - - } catch (e) { - exception_error("catchup_article", e); - } -} - -function get_visible_article_ids() { - try { - var elems = $("headlines-content").getElementsByTagName("LI"); - var ids = []; - - for (var i = 0; i < elems.length; i++) { - if (elems[i].id && elems[i].id.match("A-")) { - ids.push(elems[i].id.replace("A-", "")); - } - } - - return ids; - - } catch (e) { - exception_error("get_visible_article_ids", e); - } -} - -function catchup_visible_articles(callback) { - try { - - var ids = get_visible_article_ids(); - - if (confirm(ngettext("Mark %d displayed article as read?", "Mark %d displayed articles as read?", ids.length).replace("%d", ids.length))) { - - var query = "op=rpc&method=catchupSelected" + - "&cmode=0&ids=" + param_escape(ids); - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - if (callback) callback(transport); - - viewfeed(_active_feed_id, 0); - } }); - - } - - } catch (e) { - exception_error("catchup_visible_articles", e); - } -} - -function catchup_article(article_id, callback) { - try { - var query = "op=rpc&method=catchupSelected" + - "&cmode=0&ids=" + article_id; - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - if (callback) callback(transport); - } }); - - } catch (e) { - exception_error("catchup_article", e); - } -} - -function set_selected_article(article_id) { - try { - $$("#headlines-content > li[id*=A-]").each(function(article) { - var id = article.id.replace("A-", ""); - - var cb = article.getElementsByTagName("INPUT")[0]; - - if (id == article_id) { - article.addClassName("selected"); - cb.checked = true; - } else { - article.removeClassName("selected"); - cb.checked = false; - } - - }); - - } catch (e) { - exception_error("set_selected_article", e); - } -} - - -function set_selected_feed(feed_id) { - try { - var feeds = $("feeds-content").getElementsByTagName("LI"); - - for (var i = 0; i < feeds.length; i++) { - if (feeds[i].id == "F-" + feed_id) - feeds[i].className = "selected"; - else - feeds[i].className = ""; - } - - _active_feed_id = feed_id; - - } catch (e) { - exception_error("set_selected_feed", e); - } -} - -function load_more() { - try { - var pr = $("H-LOADING-IMG"); - - if (pr) Element.show(pr); - - var offset = $$("#headlines-content > li[id*=A-][class*=fresh],li[id*=A-][class*=unread]").length; - - viewfeed(false, offset, false, false, true, - function() { - var pr = $("H-LOADING-IMG"); - - if (pr) Element.hide(pr); - }); - } catch (e) { - exception_error("load_more", e); - } -} - -function update(callback) { - try { - console.log('updating feeds...'); - - window.clearTimeout(_update_timeout); - - new Ajax.Request("backend.php", { - parameters: "op=digest&method=digestinit", - onComplete: function(transport) { - fatal_error_check(transport); - parse_feeds(transport); - set_selected_feed(_active_feed_id); - - if (callback) callback(transport); - } }); - - _update_timeout = window.setTimeout('update()', 5*1000); - } catch (e) { - exception_error("update", e); - } -} - -function remove_headline_entry(article_id) { - try { - var elem = $('A-' + article_id); - - if (elem) { - elem.parentNode.removeChild(elem); - } - - } catch (e) { - exception_error("remove_headline_entry", e); - } -} - -function view_update() { - try { - viewfeed(_active_feed_id, _active_feed_offset, false, true, true); - update(); - } catch (e) { - exception_error("view_update", e); - } -} - -function view(article_id) { - try { - $("content").addClassName("move"); - - var a = $("A-" + article_id); - var h = $("headlines"); - - setTimeout(function() { - // below or above viewport, reposition headline - if (a.offsetTop > h.scrollTop + h.offsetHeight || a.offsetTop+a.offsetHeight < h.scrollTop+a.offsetHeight) - h.scrollTop = a.offsetTop - (h.offsetHeight/2 - a.offsetHeight/2); - }, 500); - - new Ajax.Request("backend.php", { - parameters: "op=digest&method=digestgetcontents&article_id=" + - article_id, - onComplete: function(transport) { - fatal_error_check(transport); - - var reply = JSON.parse(transport.responseText); - - if (reply) { - var article = reply['article']; - - var mark_part = ""; - var publ_part = ""; - - var tags_part = ""; - - if (article.tags.length > 0) { - tags_part = " " + __("in") + " "; - - for (var i = 0; i < Math.min(5, article.tags.length); i++) { - //tags_part += "<a href=\"#\" onclick=\"viewfeed('" + - // article.tags[i] + "')\">" + - // article.tags[i] + "</a>, "; - - tags_part += article.tags[i] + ", "; - } - - tags_part = tags_part.replace(/, $/, ""); - tags_part = "<span class=\"tags\">" + tags_part + "</span>"; - - } - - if (article.marked) - mark_part = "<img title='"+ __("Unstar article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_set.svg'>"; - else - mark_part = "<img title='"+__("Star article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_unset.svg'>"; - - if (article.published) - publ_part = "<img title='"+__("Unpublish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_set.svg'>"; - else - publ_part = "<img title='"+__("Publish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_unset.svg'>"; - - var tmp = "<div id=\"inner\">" + - "<div id=\"ops\">" + - mark_part + - publ_part + - "</div>" + - "<h1>" + "<a target=\"_blank\" href=\""+article.url+"\">" + - article.title + "</a>" + "</h1>" + - "<div id=\"tags\">" + - tags_part + - "</div>" + - article.content + "</div>"; - - $("article-content").innerHTML = tmp; - $("article").addClassName("visible"); - - set_selected_article(article.id); - - catchup_article(article_id, - function() { - $("A-" + article_id).addClassName("read"); - }); - - } else { - elem.innerHTML = __("Error: unable to load article."); - } - } - }); - - - return false; - } catch (e) { - exception_error("view", e); - } -} - -function close_feed() { - $("headlines").removeClassName("move"); - - if (mobile_mode) set_selected_feed(false); -} - -function go_back() { - if ($("article").hasClassName("visible")) { - close_article(); - } else { - close_feed(); - } -} - -function close_article() { - $("content").removeClassName("move"); - $("article").removeClassName("visible"); -} - -function viewfeed(feed_id, offset, replace, no_effects, no_indicator, callback) { - try { - - $("headlines").addClassName("move"); - - if (!feed_id) feed_id = _active_feed_id; - if (offset == undefined) offset = 0; - if (replace == undefined) replace = (offset == 0); - - _update_seq = _update_seq + 1; - - if (!offset) $("headlines").scrollTop = 0; - - var query = "op=digest&method=digestupdate&feed_id=" + - param_escape(feed_id) + "&offset=" + offset + - "&seq=" + _update_seq; - - console.log(query); - - var img = false; - - if ($("F-" + feed_id)) { - img = $("F-" + feed_id).getElementsByTagName("IMG")[0]; - - if (img && !no_indicator) { - img.setAttribute("orig_src", img.src); - img.src = 'images/indicator_tiny.gif'; - } - } - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - Element.hide("overlay"); - - fatal_error_check(transport); - parse_headlines(transport, replace, no_effects); - set_selected_feed(feed_id); - _active_feed_offset = offset; - - if (img && !no_indicator) - img.src = img.getAttribute("orig_src"); - - if (callback) callback(transport); - - } }); - - } catch (e) { - exception_error("view", e); - } -} - -function find_article(articles, article_id) { - try { - for (var i = 0; i < articles.length; i++) { - if (articles[i].id == article_id) - return articles[i]; - } - - return false; - - } catch (e) { - exception_error("find_article", e); - } -} - -function find_feed(feeds, feed_id) { - try { - for (var i = 0; i < feeds.length; i++) { - if (feeds[i].id == feed_id) - return feeds[i]; - } - - return false; - - } catch (e) { - exception_error("find_feed", e); - } -} - -function get_feed_icon(feed) { - try { - if (feed.has_icon) - return getInitParam('icons_url') + "/" + feed.id + '.ico'; - - if (feed.id == -1) - return 'images/mark_set.svg'; - - if (feed.id == -2) - return 'images/pub_set.svg'; - - if (feed.id == -3) - return 'images/fresh.png'; - - if (feed.id == -4) - return 'images/tag.png'; - - if (feed.id < -10) - return 'images/label.png'; - - return 'images/blank_icon.gif'; - - } catch (e) { - exception_error("get_feed_icon", e); - } -} - -function add_feed_entry(feed) { - try { - var icon_part = ""; - - icon_part = "<img src='" + get_feed_icon(feed) + "'/>"; - - var title = (feed.title.length > 30) ? - feed.title.substring(0, 30) + "…" : - feed.title; - - var tmp_html = "<li id=\"F-"+feed.id+"\" onclick=\"viewfeed("+feed.id+")\">" + - "<div class='unread-ctr'>" + "<span class=\"unread\">" + feed.unread + "</span></div>" + - icon_part + title + - "</li>"; - - $("feeds-content").innerHTML += tmp_html; - - - } catch (e) { - exception_error("add_feed_entry", e); - } -} - -function add_headline_entry(article, feed, no_effects) { - try { - - var icon_part = ""; - - icon_part = "<img class='icon' src='" + get_feed_icon(feed) + "'/>"; - - - var style = ""; - - //if (!no_effects) style = "style=\"display : none\""; - - if (article.excerpt.trim() == "") - article.excerpt = __("Click to expand article."); - - var li_class = "unread"; - - var fresh_max = getInitParam("fresh_article_max_age") * 60 * 60; - var d = new Date(); - - if (d.getTime() / 1000 - article.updated < fresh_max) - li_class = "fresh"; - - var checkbox_part = "<input type=\"checkbox\" class=\"cb\" onclick=\"toggle_select_article(this)\"/>"; - - var date = new Date(article.updated * 1000); - - var date_part = date.toString().substring(0,21); - - var tmp_html = "<li id=\"A-"+article.id+"\" "+style+" class=\""+li_class+"\">" + - checkbox_part + - icon_part + - "<a target=\"_blank\" href=\""+article.link+"\""+ - "onclick=\"return view("+article.id+")\" class='title'>" + - article.title + "</a>" + - "<div class='body'>" + - "<div onclick=\"view("+article.id+")\" class='excerpt'>" + - article.excerpt + "</div>" + - "<div onclick=\"view("+article.id+")\" class='info'>"; - -/* tmp_html += "<a href=\#\" onclick=\"viewfeed("+feed.id+")\">" + - feed.title + "</a> " + " @ "; */ - - tmp_html += date_part + "</div>" + - "</div></li>"; - - $("headlines-content").innerHTML += tmp_html; - - if (!no_effects) - window.setTimeout('article_appear(' + article.id + ')', 100); - - } catch (e) { - exception_error("add_headline_entry", e); - } -} - -function expand_feeds() { - try { - _feedlist_expanded = true; - - redraw_feedlist(last_feeds); - - } catch (e) { - exception_error("expand_feeds", e); - } -} - -function redraw_feedlist(feeds) { - try { - - $('feeds-content').innerHTML = ""; - - var limit = 10; - - if (_feedlist_expanded) limit = feeds.length; - - for (var i = 0; i < Math.min(limit, feeds.length); i++) { - add_feed_entry(feeds[i]); - } - - if (feeds.length > limit) { - $('feeds-content').innerHTML += "<li id='F-MORE-PROMPT'>" + - "<img src='images/blank_icon.gif'>" + - "<a href=\"#\" onclick=\"expand_feeds()\">" + - ngettext("%d more...", "%d more...", feeds.length-10).replace("%d", feeds.length-10) + - "</a>" + "</li>"; - } - - if (feeds.length == 0) { - $('feeds-content').innerHTML = - "<div class='insensitive' style='text-align : center'>" + - __("No unread feeds.") + "</div>"; - } - - if (_active_feed_id) - set_selected_feed(_active_feed_id); - - } catch (e) { - exception_error("redraw_feedlist", e); - } -} - -function parse_feeds(transport) { - try { - var reply = JSON.parse(transport.responseText); - - if (!reply) return; - - var feeds = reply['feeds']; - - if (feeds) { - - feeds.sort( function (a,b) - { - if (b.unread != a.unread) - return (b.unread - a.unread); - else - if (a.title > b.title) - return 1; - else if (a.title < b.title) - return -1; - else - return 0; - }); - - var all_articles = find_feed(feeds, -4); - - update_title(all_articles.unread); - - last_feeds = feeds; - - redraw_feedlist(feeds); - } - - if (reply['hotkeys']) { - hotkeys_map = reply['hotkeys']; - } - - } catch (e) { - console.log(e); - //exception_error("parse_feeds", e); - } -} - -function parse_headlines(transport, replace, no_effects) { - try { - var reply = JSON.parse(transport.responseText); - if (!reply) return; - - var seq = reply['seq']; - - if (seq) { - if (seq != _update_seq) { - console.log("parse_headlines: wrong sequence received."); - return; - } - } else { - return; - } - - var headlines = reply['headlines']['content']; - var headlines_title = reply['headlines']['title']; - - if (headlines && headlines_title) { - - if (replace) { - $('headlines-content').innerHTML = ''; - } - - var pr = $('H-MORE-PROMPT'); - - if (pr) pr.parentNode.removeChild(pr); - - var inserted = false; - - for (var i = 0; i < headlines.length; i++) { - - if (!$('A-' + headlines[i].id)) { - add_headline_entry(headlines[i], - find_feed(last_feeds, headlines[i].feed_id), !no_effects); - - } - } - - console.log(inserted.id); - - var ids = get_visible_article_ids(); - - if (ids.length > 0) { - if (pr) { - $('headlines-content').appendChild(pr); - - } else { - $('headlines-content').innerHTML += "<li id='H-MORE-PROMPT'>" + - "<div class='body'>" + - "<a href=\"#\" onclick=\"catchup_visible_articles()\">" + - __("Mark as read") + "</a> | " + - "<a href=\"javascript:load_more()\">" + - __("Load more...") + "</a>" + - "<img style=\"display : none\" "+ - "id=\"H-LOADING-IMG\" src='images/indicator_tiny.gif'>" + - "</div></li>"; - } - } else { - // FIXME : display some kind of "nothing to see here" prompt here - } - -// if (replace && !no_effects) -// new Effect.Appear('headlines-content', {duration : 0.3}); - - //new Effect.Appear('headlines-content'); - } - - } catch (e) { - exception_error("parse_headlines", e); - } -} - -function init_second_stage() { - try { - new Ajax.Request("backend.php", { - parameters: "op=digest&method=digestinit&init=1", - onComplete: function(transport) { - parse_feeds(transport); - Element.hide("overlay"); - - document.onkeydown = hotkey_handler; - - if (!mobile_mode) - window.setTimeout('viewfeed(-4)', 100); - _update_timeout = window.setTimeout('update()', 5*1000); - } }); - - } catch (e) { - exception_error("init_second_stage", e); - } -} - -function init(mobile) { - try { - mobile_mode = mobile; - - new Ajax.Request("backend.php", { - parameters: {op: "rpc", method: "sanityCheck"}, - onComplete: function(transport) { - backend_sanity_check_callback(transport); - } }); - - } catch (e) { - exception_error("digest_init", e); - } -} - -function toggle_mark(img, id) { - - try { - - var query = "op=rpc&id=" + id + "&method=mark"; - - if (!img) return; - - if (img.src.match("mark_unset")) { - img.src = img.src.replace("mark_unset", "mark_set"); - img.alt = __("Unstar article"); - query = query + "&mark=1"; - } else { - img.src = img.src.replace("mark_set", "mark_unset"); - img.alt = __("Star article"); - query = query + "&mark=0"; - } - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - update(); - } }); - - } catch (e) { - exception_error("toggle_mark", e); - } -} - -function toggle_pub(img, id, note) { - - try { - - var query = "op=rpc&id=" + id + "&method=publ"; - - if (note != undefined) { - query = query + "¬e=" + param_escape(note); - } else { - query = query + "¬e=undefined"; - } - - if (!img) return; - - if (img.src.match("pub_unset") || note != undefined) { - img.src = img.src.replace("pub_unset", "pub_set"); - img.alt = __("Unpublish article"); - query = query + "&pub=1"; - - } else { - img.src = img.src.replace("pub_set", "pub_unset"); - img.alt = __("Publish article"); - query = query + "&pub=0"; - } - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - update(); - } }); - - } catch (e) { - exception_error("toggle_pub", e); - } -} - -function fatal_error(code, msg) { - try { - - if (code == 6) { - window.location.href = "digest.php"; - } else if (code == 5) { - window.location.href = "public.php?op=dbupdate"; - } else { - - if (msg == "") msg = "Unknown error"; - - console.error("Fatal error: " + code + "\n" + - msg); - - } - - } catch (e) { - exception_error("fatalError", e); - } -} - -function fatal_error_check(transport) { - try { - if (transport.responseXML) { - var error = transport.responseXML.getElementsByTagName("error")[0]; - - if (error) { - var code = error.getAttribute("error-code"); - var msg = error.getAttribute("error-msg"); - if (code != 0) { - fatal_error(code, msg); - return false; - } - } - } - } catch (e) { - exception_error("fatal_error_check", e); - } - return true; -} - -function update_title(unread) { - try { - document.title = "Tiny Tiny RSS"; - - if (unread > 0) - document.title += " (" + unread + ")"; - - } catch (e) { - exception_error("update_title", e); - } -} - -function toggle_select_article(elem) { - try { - var article = elem.parentNode; - - if (article.hasClassName("selected")) - article.removeClassName("selected"); - else - article.addClassName("selected"); - - } catch (e) { - exception_error("toggle_select_article", e); - } -} - -function hotkey_handler(e) { - try { - - if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return; - - var keycode = false; - var shift_key = false; - - var cmdline = $('cmdline'); - - try { - shift_key = e.shiftKey; - } catch (e) { - - } - - if (window.event) { - keycode = window.event.keyCode; - } else if (e) { - keycode = e.which; - } - - var keychar = String.fromCharCode(keycode); - - if (!shift_key) keychar = keychar.toLowerCase(); - - if (keycode == 16) return; // ignore lone shift - if (keycode == 17) return; // ignore lone ctrl - - var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")"; - hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey; - hotkey_prefix = false; - - var hotkey_action = false; - var hotkeys = getInitParam("hotkeys"); - - for (sequence in hotkeys[1]) { - if (sequence == hotkey) { - hotkey_action = hotkeys[1][sequence]; - break; - } - } - - switch (keycode) { - case 27: // esc - go_back(); - return false; - } - - switch (hotkey_action) { - case "next_feed": - var feeds = $$("#feeds li"); - for (var i = 0; i < feeds.length; i++) { - var base_id = feeds[i].id.replace("F-", ""); - - if (base_id == _active_feed_id) { - if (feeds[i+1]) { - viewfeed(feeds[i+1].id.replace("F-", "")); - } - break; - } - } - return false; - case "prev_feed": - var feeds = $$("#feeds li"); - for (var i = 0; i < feeds.length; i++) { - var base_id = feeds[i].id.replace("F-", ""); - - if (base_id == _active_feed_id) { - if (feeds[i-1]) { - viewfeed(feeds[i-1].id.replace("F-", "")); - } - break; - } - } - return false; - case "next_article": - return false; - case "prev_article": - return false; - default: - console.log("unhandled action: " + hotkey_action + "; hotkey: " + hotkey); - } - - - } catch (e) { - exception_error("hotkey_handler", e); - } -} diff --git a/plugins/digest/digest_body.php b/plugins/digest/digest_body.php deleted file mode 100644 index e7434fe70..000000000 --- a/plugins/digest/digest_body.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php global $link; ?> - -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html> -<head> - <title>Tiny Tiny RSS</title> - - <?php - require_once "lib/Mobile_Detect.php"; - $mobile = new Mobile_Detect(); - - if ($mobile->isMobile() || @$_REQUEST['mode'] == 'mobile') { - $_SESSION["digest_mobile"] = 1; - echo stylesheet_tag("plugins/digest/mobile.css"); - } else { - $_SESSION["digest_mobile"] = 0; - echo stylesheet_tag("plugins/digest/digest.css"); - } - ?> - - <meta name="viewport" content="width=device-width, - minimum-scale=1.0, maximum-scale=1.0" /> - - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - - <?php print_user_stylesheet($link) ?> - - <link rel="shortcut icon" type="image/png" href="images/favicon.png"/> - - <?php - foreach (array("lib/prototype.js", - "lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls", - "js/functions.js", - "plugins/digest/digest.js", - "errors.php?mode=js") as $jsfile) { - - echo javascript_tag($jsfile); - } ?> - - <script type="text/javascript"> - <?php init_js_translations(); ?> - </script> - - <script type="text/javascript" src="plugins/digest/digest.js"></script> - - <script type="text/javascript"> - Event.observe(window, 'load', function() { - init(<?php echo $_SESSION["digest_mobile"] ?>); - }); - </script> -</head> -<body id="ttrssDigest"> - <div id="overlay" style="display : block"> - <div id="overlay_inner"> - <noscript> - <p> - <?php print_error(__("Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings.")) ?></p> - </noscript> - - <img src="images/indicator_white.gif"/> - <?php echo __("Loading, please wait...") ?> - </div> - </div> - - <div id="header"> - <a style="float : left" href="#" onclick="go_back()"> - <?php echo __("Go back") ?></a> - - <div class="links"> - - <?php if (!$_SESSION["hide_hello"]) { ?> - <?php echo __('Hello,') ?> <b><?php echo $_SESSION["name"] ?></b> | - <?php } ?> - <?php if (!$_SESSION["hide_logout"]) { ?> - <a href="backend.php?op=logout"><?php echo __('Logout') ?></a> | - <?php } ?> - <a href='<?php echo get_self_url_prefix() ?>/index.php?mobile=false'> - <?php echo __("Regular version") ?></a> - - </div> - </div> - - <div id="article"><div id="article-content"> </div></div> - - <div id="content"> - - <div id="feeds"> - <ul id="feeds-content"> </ul> - </div> - - <div id="headlines"> - <ul id="headlines-content"> </ul> - </div> - </div> - -</body> -</html> diff --git a/plugins/digest/images/tile.png b/plugins/digest/images/tile.png Binary files differdeleted file mode 100644 index 72f2f4553..000000000 --- a/plugins/digest/images/tile.png +++ /dev/null diff --git a/plugins/digest/init.php b/plugins/digest/init.php deleted file mode 100644 index e65ae13d7..000000000 --- a/plugins/digest/init.php +++ /dev/null @@ -1,110 +0,0 @@ -<?php -// TODO: digest should register digest specific hotkey actions within tt-rss -class Digest extends Plugin implements IHandler { - - private $link; - private $host; - - function about() { - return array(1.0, - "Digest mode for tt-rss (tablet friendly UI)", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_handler("digest", "*", $this); - } - - function index() { - header("Content-type: text/html; charset=utf-8"); - - login_sequence($this->link); - - global $link; - $link = $this->link; - - require_once dirname(__FILE__) . "/digest_body.php"; - } - - /* function get_js() { - return file_get_contents(dirname(__FILE__) . "/digest.js"); - } */ - - function csrf_ignore($method) { - return in_array($method, array("index")); - } - - function before($method) { - return true; - } - - function after() { - - } - - function digestgetcontents() { - $article_id = db_escape_string($this->link, $_REQUEST['article_id']); - - $result = db_query($this->link, "SELECT content,title,link,marked,published - FROM ttrss_entries, ttrss_user_entries - WHERE id = '$article_id' AND ref_id = id AND owner_uid = ".$_SESSION['uid']); - - $content = sanitize($this->link, db_fetch_result($result, 0, "content")); - $title = strip_tags(db_fetch_result($result, 0, "title")); - $article_url = htmlspecialchars(db_fetch_result($result, 0, "link")); - $marked = sql_bool_to_bool(db_fetch_result($result, 0, "marked")); - $published = sql_bool_to_bool(db_fetch_result($result, 0, "published")); - - print json_encode(array("article" => - array("id" => $article_id, "url" => $article_url, - "tags" => get_article_tags($this->link, $article_id), - "marked" => $marked, "published" => $published, - "title" => $title, "content" => $content))); - } - - function digestupdate() { - $feed_id = db_escape_string($this->link, $_REQUEST['feed_id']); - $offset = db_escape_string($this->link, $_REQUEST['offset']); - $seq = db_escape_string($this->link, $_REQUEST['seq']); - - if (!$feed_id) $feed_id = -4; - if (!$offset) $offset = 0; - - $reply = array(); - - $reply['seq'] = $seq; - - $headlines = API::api_get_headlines($this->link, $feed_id, 30, $offset, - '', ($feed_id == -4), true, false, "unread", "updated DESC", 0, 0); - - $reply['headlines'] = array(); - $reply['headlines']['title'] = getFeedTitle($this->link, $feed_id); - $reply['headlines']['content'] = $headlines; - - print json_encode($reply); - } - - function digestinit() { - $tmp_feeds = API::api_get_feeds($this->link, -4, true, false, 0); - - $params = array(); - $feeds = array(); - - foreach ($tmp_feeds as $f) { - if ($f['id'] > 0 || $f['id'] == -4) array_push($feeds, $f); - } - - if ($_REQUEST["init"] == 1) { - $params["hotkeys"] = get_hotkeys_map($this->link); - } - $params["feeds"] = $feeds; - - print json_encode($params); - } - -} -?> diff --git a/plugins/digest/mobile.css b/plugins/digest/mobile.css deleted file mode 100644 index 89989dfe6..000000000 --- a/plugins/digest/mobile.css +++ /dev/null @@ -1,345 +0,0 @@ -body#ttrssDigest { - color : black; - font-family : sans-serif; - font-size : 12px; - margin : 0px; - background : url("images/tile.png"); -} - -a { - color : #0069D8; - text-decoration : none; -} - -a:hover { - color : gray; -} - -#header a, #footer a { - color : gray; -} - -#header a:hover, #footer a:hover { - color : #0069D8; -} - -#header { - font-size : 14px; - font-weight : bold; - font-family : "Segoe UI", Tahoma, sans-serif; - padding : 5px 5px 5px 1.5em; - color : gray; - position : absolute; - top : 0px; - height : 30px; - left : 0px; - right : 0px; - color : #a0a0a0; -} - -#header span.title { - font-weight : bold; - font-style : italic; -} - -#header div.links { - position : absolute; - right : 1.5em; -} - -#search { - float : right; - clear : left; - -} - -#title { -} - -#latest { - padding : 5px; -} - -#content { - position : absolute; - left : 0px; - top : 30px; - right : 0px; - bottom : 0px; - -webkit-transition: left 0.2s linear, right 0.2s linear; - -moz-transition: left 0.2s linear, right 0.2s linear; - transition: left 0.2s linear, right 0.2s linear; -} - -#article { - position : absolute; - overflow : auto; - right : 0px; - width : 100%; - bottom : 0px; - top : 30px; - background : white; - opacity : 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; -} - -#article.visible { - opacity : 1; -} - -#article #article-content h1 { - margin : 0px; - padding : 0px; - font-family : "Segoe UI", Tahoma, sans-serif; - font-size : 21px; - font-weight : bold; - border-width : 0px 0px 3px 0px; - border-style : solid; - border-color : #e0e0e0; - color : gray; -} - -#article #article-content #toolbar { - border-width : 0px 0px 1px 0px; - border-color : #e0e0e0; - border-style : solid; - background : #fafafa; - font-size : 14px; - font-weight : bold; - padding : 5px 10px 5px 10px; - margin : 0px 0px 0px 0px; -} - -#article #article-content { - padding : 0px; - font-size : 16px; -} - -#article #article-content #tags { - color : #a0a0a0; - margin-bottom : 5px; -} - -#article #article-content #ops { - float : right; -} - -#article #article-content #ops img { - cursor : pointer; - margin-right : 0px; - margin-left : 10px; -} - -#article #article-content #inner { - padding : 10px; -} - -#article #article-content img { - max-width : 90%; -} - -#content.move { - left : 0px; - right : 100%; -} - -#feeds { - position : absolute; - left : 0px; - top : 0px; - right : 0px; - bottom : 0px; - font-size : 14px; - overflow : auto; - background : white; -} - -#feeds ul#feeds-content img { - width : 16px; - height : 16px; - vertical-align : middle; - margin-right : 5px; -} - -#feeds ul#feeds-content div.unread-ctr { - color : #d0d0d0; - padding-left : 10px; - float : right; -} - -#feeds ul#feeds-content li { - padding : 10px; - clear : both; - cursor : pointer; - color : #303030; - white-space : nowrap; -} - -#feeds ul#feeds-content li.selected { - background : white; -} - -#feeds ul#feeds-content { - list-style-type : none; - font-weight : bold; - margin : 0px; - padding : 0px; -} - -#headlines { - font-size : 14px; - position : absolute; - top : 0px; - bottom : 0px; - right : 0px; - overflow : auto; - background : white; - border-width : 0px 3px 0px 0px; - border-style : solid; - border-color : #88b0f0; - left : 100%; - - -webkit-transition: left 0.2s linear, right 0.2s linear; - -moz-transition: left 0.2s linear, right 0.2s linear; - transition: left 0.2s linear, right 0.2s linear; - -} - -#headlines.move { - left : 0px; -} - -#headlines h1 a { - color : #684C99; -} - -#headlines ul#headlines-content .cb { - vertical-align : middle; - margin-right : 5px; - float : left; -} - -#headlines ul#headlines-content img.icon { - width : 16px; - height : 16px; - vertical-align : middle; - margin-right : 5px; - float : right; -} - -#headlines ul#headlines-content { - list-style-type : none; - color : gray; - margin : 0px; - padding : 0px; -} - -#headlines ul#headlines-content li { - margin : 0px 0px 0px 0px; - padding : 10px; - color : gray; - clear : left; - border-width : 0px 0px 1px 0px; - border-style : solid; - border-color : #e0e0e0; - background : #eee; -} - -#headlines ul#headlines-content a.title { - font-size : 14px; - font-weight : bold; - display : block; - margin-left : 21px; - position : relative; -} - -#headlines ul#headlines-content li.fresh a.title { - color : #007FFF; -} - -#headlines ul#headlines-content li.unread a.title { - color : black; - /* color : #8DB1D6; */ -} - -#headlines ul#headlines-content li.read a.title { - color : gray; -} - -#headlines ul#headlines-content li.unread, -#headlines ul#headlines-content li.fresh { - background-color : white; -} - -#headlines ul#headlines-content li.selected { - background-color : #fff7d5; - border-color : white white #e0e0e0; -} - -#headlines ul#headlines-content img#H-LOADING-IMG { - margin-left : 5px; -} - -#headlines ul#headlines-content div.excerpt { - color : #404040; - cursor : pointer; - margin-top : 5px; -} - -#headlines ul#headlines-content div.content { - color : #404040; -} - -#headlines ul#headlines-content div.content img { - max-width : 75%; -} - -#headlines ul#headlines-content div.body { - margin-left : 21px; - /*margin-left : 42px;*/ -} - -#headlines ul#headlines-content div.info { - font-size : 11px; - margin-top : 5px; -} - -#headlines ul#headlines-content div.info a { - color : gray; -} - -#overlay { - background : white; - left : 0; - top : 0; - height : 100%; - width : 100%; - z-index : 100; - position : absolute; - text-align : center; -} - -#overlay_inner { - margin : 1em; -} - -#overlay img { - vertical-align : middle; -} - -div.fatalError button { - margin-top : 5px; -} - -div.fatalError textarea { - width : 100%; - height : 100px; -} - -div.insensitive { - color : gray; -} - - diff --git a/plugins/embed_original/init.php b/plugins/embed_original/init.php index 0e0eb9603..df803d38b 100644 --- a/plugins/embed_original/init.php +++ b/plugins/embed_original/init.php @@ -1,10 +1,8 @@ <?php class Embed_Original extends Plugin { - private $link; private $host; function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -36,9 +34,9 @@ class Embed_Original extends Plugin { } function getUrl() { - $id = db_escape_string($this->link, $_REQUEST['id']); + $id = db_escape_string($_REQUEST['id']); - $result = db_query($this->link, "SELECT link + $result = db_query("SELECT link FROM ttrss_entries, ttrss_user_entries WHERE id = '$id' AND ref_id = id AND owner_uid = " .$_SESSION['uid']); @@ -52,5 +50,9 @@ class Embed_Original extends Plugin { print json_encode(array("url" => $url, "id" => $id)); } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/example/example.js b/plugins/example/example.js deleted file mode 100644 index a31f2c2a2..000000000 --- a/plugins/example/example.js +++ /dev/null @@ -1,3 +0,0 @@ -function example(value) { - alert("Value saved: " + value); -} diff --git a/plugins/example/init.php b/plugins/example/init.php deleted file mode 100644 index 333efd92d..000000000 --- a/plugins/example/init.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php -class Example extends Plugin { - - // Demonstrates how to add a separate panel to the preferences screen and inject Javascript/save data using Dojo forms. - - private $link; - private $host; - - function about() { - return array(1.0, - "Example plugin #1", - "fox", - true, - "http://site.com"); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_hook($host::HOOK_PREFS_TAB, $this); - } - - function save() { - $example_value = db_escape_string($this->link, $_POST["example_value"]); - - $this->host->set($this, "example", $example_value); - - echo "Value set to $example_value"; - } - - function get_prefs_js() { - return file_get_contents(dirname(__FILE__) . "/example.js"); - } - - function hook_prefs_tab($args) { - if ($args != "prefPrefs") return; - - print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__("Example Pane")."\">"; - - print "<br/>"; - -// print_r($this->host->set($this, "example", rand(0,100))); -// print_r($this->host->get_all($this)); - - $value = $this->host->get($this, "example"); - - print "<form dojoType=\"dijit.form.Form\">"; - - print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\"> - evt.preventDefault(); - if (this.validate()) { - console.log(dojo.objectToQuery(this.getValues())); - new Ajax.Request('backend.php', { - parameters: dojo.objectToQuery(this.getValues()), - onComplete: function(transport) { - notify_info(transport.responseText); - } - }); - //this.reset(); - } - </script>"; - - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pluginhandler\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"save\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"plugin\" value=\"example\">"; - - print "<table width=\"100%\" class=\"prefPrefsList\">"; - - print "<tr><td width=\"40%\">".__("Sample value")."</td>"; - print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\" name=\"example_value\" value=\"$value\"></td></tr>"; - - print "</table>"; - - print "<p><button dojoType=\"dijit.form.Button\" type=\"submit\">". - __("Set value")."</button>"; - - print "</form>"; - - print "</div>"; #pane - } -} -?> diff --git a/plugins/example_article/init.php b/plugins/example_article/init.php deleted file mode 100644 index 05f95a40a..000000000 --- a/plugins/example_article/init.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -class Example_Article extends Plugin { - - private $link; - private $host; - - function about() { - return array(1.0, - "Example plugin for HOOK_RENDER_ARTICLE", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_hook($host::HOOK_RENDER_ARTICLE, $this); - } - - function get_prefs_js() { - return file_get_contents(dirname(__FILE__) . "/init.js"); - } - - function hook_render_article($article) { - $article["content"] = "Content changed: " . $article["content"]; - - return $article; - } -} -?> diff --git a/plugins/example_feed/init.php b/plugins/example_feed/init.php deleted file mode 100644 index af14d3ff3..000000000 --- a/plugins/example_feed/init.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -class Example_Feed extends Plugin { - - // Demonstrates how to query data from the parsed feed object (SimplePie) - // don't enable unless debugging feed through f D hotkey or manually. - - private $link; - private $host; - - function about() { - return array(1.0, - "Example feed plugin", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_hook($host::HOOK_FEED_PARSED, $this); - } - - function hook_feed_parsed($feed) { - _debug("I'm a little feed short and stout, here's my title: " . $feed->get_title()); - _debug("... here's my link element: " . $feed->get_link()); - } -} -?> diff --git a/plugins/example_routing/init.php b/plugins/example_routing/init.php deleted file mode 100644 index 31c5b6f28..000000000 --- a/plugins/example_routing/init.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -class Example_Routing extends Plugin implements IHandler { - - // Demonstrates adding a custom handler and method: - // backend.php?op=test&method=example - // and masking a system builtin public method: - // public.php?op=getUnread - - // Plugin class must implelement IHandler interface and has - // a public method of same name as being registered. - // - // Any system method may be masked by plugins. You can mask - // entire handler by supplying "*" instead of a method name. - - private $link; - private $host; - - function about() { - return array(1.0, - "Example routing plugin", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_handler("test", "example", $this); - $host->add_handler("public", "getunread", $this); - } - - function getunread() { - print rand(0,100); # yeah right - } - - function example() { - print "example method called"; - } - - function csrf_ignore($method) { - return true; - } - - function before($method) { - return true; - } - - function after() { - return true; - } - -} -?> diff --git a/plugins/example_vfeed/init.php b/plugins/example_vfeed/init.php deleted file mode 100644 index e646809a4..000000000 --- a/plugins/example_vfeed/init.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php -class Example_VFeed extends Plugin { - - // Demonstrates how to create a dummy special feed and chain - // headline generation to queryFeedHeadlines(); - - // Not implemented yet: stuff for 3 panel mode - - private $link; - private $host; - private $dummy_id; - - function about() { - return array(1.0, - "Example vfeed plugin", - "fox", - false); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $this->dummy_id = $host->add_feed(-1, 'Dummy feed', 'images/pub_set.svg', $this); - } - - function get_unread($feed_id) { - return 1234; - } - - function get_headlines($feed_id, $options) { - $qfh_ret = queryFeedHeadlines($this->link, -4, - $options['limit'], - $options['view_mode'], $options['cat_view'], - $options['search'], - $options['search_mode'], - $options['override_order'], - $options['offset'], - $options['owner_uid'], - $options['filter'], - $options['since_id'], - $options['include_children']); - - $qfh_ret[1] = 'Dummy feed'; - - return $qfh_ret; - } -} -?> diff --git a/plugins/googlereaderimport/init.php b/plugins/googlereaderimport/init.php index ac7a872f2..2e22161b9 100644 --- a/plugins/googlereaderimport/init.php +++ b/plugins/googlereaderimport/init.php @@ -1,8 +1,5 @@ <?php class GoogleReaderImport extends Plugin { - - - private $link; private $host; function about() { @@ -14,7 +11,6 @@ class GoogleReaderImport extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_command("greader-import", @@ -34,11 +30,11 @@ class GoogleReaderImport extends Plugin { _debug("please enter your username:"); - $username = db_escape_string($this->link, trim(read_stdin())); + $username = db_escape_string(trim(read_stdin())); _debug("looking up user: $username..."); - $result = db_query($this->link, "SELECT id FROM ttrss_users + $result = db_query("SELECT id FROM ttrss_users WHERE login = '$username'"); if (db_num_rows($result) == 0) { @@ -59,15 +55,39 @@ class GoogleReaderImport extends Plugin { function import($file = false, $owner_uid = 0) { - purge_orphans($this->link); + purge_orphans(); if (!$file) { header("Content-Type: text/html"); $owner_uid = $_SESSION["uid"]; - if (is_file($_FILES['starred_file']['tmp_name'])) { - $doc = json_decode(file_get_contents($_FILES['starred_file']['tmp_name']), true); + if ($_FILES['starred_file']['error'] != 0) { + print_error(T_sprintf("Upload failed with error code %d", + $_FILES['starred_file']['error'])); + return; + } + + $tmp_file = false; + + if (is_uploaded_file($_FILES['starred_file']['tmp_name'])) { + $tmp_file = tempnam(CACHE_DIR . '/upload', 'starred'); + + $result = move_uploaded_file($_FILES['starred_file']['tmp_name'], + $tmp_file); + + if (!$result) { + print_error(__("Unable to move uploaded file.")); + return; + } + } else { + print_error(__('Error: please upload OPML file.')); + return; + } + + if (is_file($tmp_file)) { + $doc = json_decode(file_get_contents($tmp_file), true); + unlink($tmp_file); } else { print_error(__('No file uploaded.')); return; @@ -91,30 +111,30 @@ class GoogleReaderImport extends Plugin { foreach ($doc['items'] as $item) { // print_r($item); - $guid = db_escape_string($this->link, mb_substr($item['id'], 0, 250)); - $title = db_escape_string($this->link, $item['title']); + $guid = db_escape_string(mb_substr($item['id'], 0, 250)); + $title = db_escape_string($item['title']); $updated = date('Y-m-d h:i:s', $item['updated']); $link = ''; $content = ''; - $author = db_escape_string($this->link, $item['author']); + $author = db_escape_string($item['author']); $tags = array(); $orig_feed_data = array(); if (is_array($item['alternate'])) { foreach ($item['alternate'] as $alt) { if (isset($alt['type']) && $alt['type'] == 'text/html') { - $link = db_escape_string($this->link, $alt['href']); + $link = db_escape_string($alt['href']); } } } if (is_array($item['summary'])) { - $content = db_escape_string($this->link, + $content = db_escape_string( $item['summary']['content'], false); } if (is_array($item['content'])) { - $content = db_escape_string($this->link, + $content = db_escape_string( $item['content']['content'], false); } @@ -129,14 +149,14 @@ class GoogleReaderImport extends Plugin { if (is_array($item['origin'])) { if (strpos($item['origin']['streamId'], 'feed/') === 0) { - $orig_feed_data['feed_url'] = db_escape_string($this->link, + $orig_feed_data['feed_url'] = db_escape_string( mb_substr(preg_replace("/^feed\//", "", $item['origin']['streamId']), 0, 200)); - $orig_feed_data['title'] = db_escape_string($this->link, + $orig_feed_data['title'] = db_escape_string( mb_substr($item['origin']['title'], 0, 200)); - $orig_feed_data['site_url'] = db_escape_string($this->link, + $orig_feed_data['site_url'] = db_escape_string( mb_substr($item['origin']['htmlUrl'], 0, 200)); } } @@ -144,7 +164,7 @@ class GoogleReaderImport extends Plugin { $processed++; $imported += (int) $this->create_article($owner_uid, $guid, $title, - $updated, $link, $content, $author, $sql_set_marked, $tags, + $link, $updated, $content, $author, $sql_set_marked, $tags, $orig_feed_data); if ($file && $processed % 25 == 0) { @@ -176,7 +196,7 @@ class GoogleReaderImport extends Plugin { } // expects ESCAPED data - private function create_article($owner_uid, $guid, $title, $updated, $link, $content, $author, $marked, $tags, $orig_feed_data) { + private function create_article($owner_uid, $guid, $title, $link, $updated, $content, $author, $marked, $tags, $orig_feed_data) { if (!$guid) $guid = sha1($link); @@ -186,9 +206,9 @@ class GoogleReaderImport extends Plugin { $content_hash = sha1($content); - if (filter_var($link, FILTER_VALIDATE_URL) === FALSE) return false; + if (filter_var(FILTER_VALIDATE_URL) === FALSE) return false; - db_query($this->link, "BEGIN"); + db_query("BEGIN"); $feed_id = 'NULL'; @@ -199,7 +219,7 @@ class GoogleReaderImport extends Plugin { // before dealing with archived feeds we must check ttrss_feeds to maintain id consistency if ($orig_feed_data['feed_url'] && $create_archived_feeds) { - $result = db_query($this->link, + $result = db_query( "SELECT id FROM ttrss_feeds WHERE feed_url = '".$orig_feed_data['feed_url']."' AND owner_uid = $owner_uid"); @@ -210,7 +230,7 @@ class GoogleReaderImport extends Plugin { if (!$orig_feed_data['title']) $orig_feed_data['title'] = '[Unknown]'; - $result = db_query($this->link, + $result = db_query( "INSERT INTO ttrss_feeds (owner_uid,feed_url,site_url,title,cat_id,auth_login,auth_pass,update_method) VALUES ($owner_uid, @@ -219,7 +239,7 @@ class GoogleReaderImport extends Plugin { '".$orig_feed_data['title']."', NULL, '', '', 0)"); - $result = db_query($this->link, + $result = db_query( "SELECT id FROM ttrss_feeds WHERE feed_url = '".$orig_feed_data['feed_url']."' AND owner_uid = $owner_uid"); @@ -234,18 +254,18 @@ class GoogleReaderImport extends Plugin { // locate archived entry to file entries in, we don't want to file them in actual feeds because of purging // maybe file marked in real feeds because eh - $result = db_query($this->link, "SELECT id FROM ttrss_archived_feeds WHERE + $result = db_query("SELECT id FROM ttrss_archived_feeds WHERE feed_url = '".$orig_feed_data['feed_url']."' AND owner_uid = $owner_uid"); if (db_num_rows($result) != 0) { $orig_feed_id = db_fetch_result($result, 0, "id"); } else { - db_query($this->link, "INSERT INTO ttrss_archived_feeds + db_query("INSERT INTO ttrss_archived_feeds (id, owner_uid, title, feed_url, site_url) SELECT id, owner_uid, title, feed_url, site_url from ttrss_feeds WHERE id = '$feed_id'"); - $result = db_query($this->link, "SELECT id FROM ttrss_archived_feeds WHERE + $result = db_query("SELECT id FROM ttrss_archived_feeds WHERE feed_url = '".$orig_feed_data['feed_url']."' AND owner_uid = $owner_uid"); if (db_num_rows($result) != 0) { @@ -256,32 +276,32 @@ class GoogleReaderImport extends Plugin { // delete temporarily inserted feed if ($feed_id && $feed_inserted) { - db_query($this->link, "DELETE FROM ttrss_feeds WHERE id = $feed_id"); + db_query("DELETE FROM ttrss_feeds WHERE id = $feed_id"); } if (!$orig_feed_id) $orig_feed_id = 'NULL'; - $result = db_query($this->link, "SELECT id FROM ttrss_entries, ttrss_user_entries WHERE + $result = db_query("SELECT id FROM ttrss_entries, ttrss_user_entries WHERE guid = '$guid' AND ref_id = id AND owner_uid = '$owner_uid' LIMIT 1"); if (db_num_rows($result) == 0) { - $result = db_query($this->link, "INSERT INTO ttrss_entries + $result = db_query("INSERT INTO ttrss_entries (title, guid, link, updated, content, content_hash, date_entered, date_updated, author) VALUES ('$title', '$guid', '$link', '$updated', '$content', '$content_hash', NOW(), NOW(), '$author')"); - $result = db_query($this->link, "SELECT id FROM ttrss_entries WHERE guid = '$guid'"); + $result = db_query("SELECT id FROM ttrss_entries WHERE guid = '$guid'"); if (db_num_rows($result) != 0) { $ref_id = db_fetch_result($result, 0, "id"); - db_query($this->link, "INSERT INTO ttrss_user_entries + db_query("INSERT INTO ttrss_user_entries (ref_id, uuid, feed_id, orig_feed_id, owner_uid, marked, tag_cache, label_cache, last_read, note, unread, last_marked) VALUES ('$ref_id', '', NULL, $orig_feed_id, $owner_uid, $marked, '', '', NOW(), '', false, NOW())"); - $result = db_query($this->link, "SELECT int_id FROM ttrss_user_entries, ttrss_entries + $result = db_query("SELECT int_id FROM ttrss_user_entries, ttrss_entries WHERE owner_uid = $owner_uid AND ref_id = id AND ref_id = $ref_id"); if (db_num_rows($result) != 0 && is_array($tags)) { @@ -291,16 +311,16 @@ class GoogleReaderImport extends Plugin { foreach ($tags as $tag) { - $tag = db_escape_string($this->link, sanitize_tag($tag)); + $tag = db_escape_string(sanitize_tag($tag)); if (!tag_is_valid($tag)) continue; - $result = db_query($this->link, "SELECT id FROM ttrss_tags + $result = db_query("SELECT id FROM ttrss_tags WHERE tag_name = '$tag' AND post_int_id = '$entry_int_id' AND owner_uid = '$owner_uid' LIMIT 1"); if ($result && db_num_rows($result) == 0) { - db_query($this->link, "INSERT INTO ttrss_tags + db_query("INSERT INTO ttrss_tags (owner_uid,tag_name,post_int_id) VALUES ('$owner_uid','$tag', '$entry_int_id')"); } @@ -311,9 +331,9 @@ class GoogleReaderImport extends Plugin { /* update the cache */ $tags_to_cache = array_unique($tags_to_cache); - $tags_str = db_escape_string($this->link, join(",", $tags_to_cache)); + $tags_str = db_escape_string(join(",", $tags_to_cache)); - db_query($this->link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET tag_cache = '$tags_str' WHERE ref_id = '$ref_id' AND owner_uid = $owner_uid"); } @@ -322,7 +342,7 @@ class GoogleReaderImport extends Plugin { } } - db_query($this->link, "COMMIT"); + db_query("COMMIT"); return $rc; } @@ -350,8 +370,14 @@ class GoogleReaderImport extends Plugin { <button dojoType=\"dijit.form.Button\" onclick=\"return starredImport();\" type=\"submit\">" . __('Import my Starred items') . "</button>"; + print "</form>"; print "</div>"; #pane } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/googlereaderkeys/init.php b/plugins/googlereaderkeys/init.php index afdc58ec7..c8e7d7a38 100644 --- a/plugins/googlereaderkeys/init.php +++ b/plugins/googlereaderkeys/init.php @@ -1,7 +1,5 @@ <?php class GoogleReaderKeys extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class GoogleReaderKeys extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_HOTKEY_MAP, $this); @@ -31,7 +28,11 @@ class GoogleReaderKeys extends Plugin { $hotkeys["(40)|down"] = "article_scroll_down"; return $hotkeys; + } + function api_version() { + return 2; } + } ?> diff --git a/plugins/import_export/init.php b/plugins/import_export/init.php index 1d7a8e55f..15c7dea9b 100644 --- a/plugins/import_export/init.php +++ b/plugins/import_export/init.php @@ -1,11 +1,8 @@ <?php class Import_Export extends Plugin implements IHandler { - - private $link; private $host; function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_PREFS_TAB, $this); @@ -29,11 +26,11 @@ class Import_Export extends Plugin implements IHandler { _debug("please enter your username:"); - $username = db_escape_string($this->link, trim(read_stdin())); + $username = db_escape_string(trim(read_stdin())); _debug("importing $filename for user $username...\n"); - $result = db_query($this->link, "SELECT id FROM ttrss_users WHERE login = '$username'"); + $result = db_query("SELECT id FROM ttrss_users WHERE login = '$username'"); if (db_num_rows($result) == 0) { print "error: could not find user $username.\n"; @@ -42,11 +39,11 @@ class Import_Export extends Plugin implements IHandler { $owner_uid = db_fetch_result($result, 0, "id"); - $this->perform_data_import($this->link, $filename, $owner_uid); + $this->perform_data_import($filename, $owner_uid); } function save() { - $example_value = db_escape_string($this->link, $_POST["example_value"]); + $example_value = db_escape_string($_POST["example_value"]); echo "Value set to $example_value (not really)"; } @@ -83,6 +80,7 @@ class Import_Export extends Plugin implements IHandler { <button dojoType=\"dijit.form.Button\" onclick=\"return importData();\" type=\"submit\">" . __('Import') . "</button>"; + print "</form>"; print "</div>"; # pane } @@ -119,12 +117,12 @@ class Import_Export extends Plugin implements IHandler { } function exportrun() { - $offset = (int) db_escape_string($this->link, $_REQUEST['offset']); + $offset = (int) db_escape_string($_REQUEST['offset']); $exported = 0; $limit = 250; if ($offset < 10000 && is_writable(CACHE_DIR . "/export")) { - $result = db_query($this->link, "SELECT + $result = db_query("SELECT ttrss_entries.guid, ttrss_entries.title, content, @@ -183,7 +181,7 @@ class Import_Export extends Plugin implements IHandler { print json_encode(array("exported" => $exported)); } - function perform_data_import($link, $filename, $owner_uid) { + function perform_data_import($filename, $owner_uid) { $num_imported = 0; $num_processed = 0; @@ -236,7 +234,7 @@ class Import_Export extends Plugin implements IHandler { foreach ($article_node->childNodes as $child) { if ($child->nodeName != 'label_cache') - $article[$child->nodeName] = db_escape_string($this->link, $child->nodeValue); + $article[$child->nodeName] = db_escape_string($child->nodeValue); else $article[$child->nodeName] = $child->nodeValue; } @@ -247,16 +245,16 @@ class Import_Export extends Plugin implements IHandler { ++$num_processed; - //db_query($link, "BEGIN"); + //db_query("BEGIN"); //print 'GUID:' . $article['guid'] . "\n"; - $result = db_query($link, "SELECT id FROM ttrss_entries + $result = db_query("SELECT id FROM ttrss_entries WHERE guid = '".$article['guid']."'"); if (db_num_rows($result) == 0) { - $result = db_query($link, + $result = db_query( "INSERT INTO ttrss_entries (title, guid, @@ -284,7 +282,7 @@ class Import_Export extends Plugin implements IHandler { '0', '')"); - $result = db_query($link, "SELECT id FROM ttrss_entries + $result = db_query("SELECT id FROM ttrss_entries WHERE guid = '".$article['guid']."'"); if (db_num_rows($result) != 0) { @@ -305,7 +303,7 @@ class Import_Export extends Plugin implements IHandler { $feed = 'NULL'; if ($feed_url && $feed_title) { - $result = db_query($link, "SELECT id FROM ttrss_feeds + $result = db_query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = '$owner_uid'"); if (db_num_rows($result) != 0) { @@ -313,10 +311,10 @@ class Import_Export extends Plugin implements IHandler { } else { // try autocreating feed in Uncategorized... - $result = db_query($link, "INSERT INTO ttrss_feeds (owner_uid, + $result = db_query("INSERT INTO ttrss_feeds (owner_uid, feed_url, title) VALUES ($owner_uid, '$feed_url', '$feed_title')"); - $result = db_query($link, "SELECT id FROM ttrss_feeds + $result = db_query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = '$owner_uid'"); if (db_num_rows($result) != 0) { @@ -334,7 +332,7 @@ class Import_Export extends Plugin implements IHandler { //print "$ref_id / $feed / " . $article['title'] . "\n"; - $result = db_query($link, "SELECT int_id FROM ttrss_user_entries + $result = db_query("SELECT int_id FROM ttrss_user_entries WHERE ref_id = '$ref_id' AND owner_uid = '$owner_uid' AND $feed_qpart"); if (db_num_rows($result) == 0) { @@ -344,14 +342,14 @@ class Import_Export extends Plugin implements IHandler { $score = (int) $article['score']; $tag_cache = $article['tag_cache']; - $label_cache = db_escape_string($this->link, $article['label_cache']); + $label_cache = db_escape_string($article['label_cache']); $note = $article['note']; //print "Importing " . $article['title'] . "<br/>"; ++$num_imported; - $result = db_query($link, + $result = db_query( "INSERT INTO ttrss_user_entries (ref_id, owner_uid, feed_id, unread, last_read, marked, published, score, tag_cache, label_cache, uuid, note) @@ -364,15 +362,15 @@ class Import_Export extends Plugin implements IHandler { if (is_array($label_cache) && $label_cache["no-labels"] != 1) { foreach ($label_cache as $label) { - label_create($link, $label[1], + label_create($label[1], $label[2], $label[3], $owner_uid); - label_add_article($link, $ref_id, $label[1], $owner_uid); + label_add_article($ref_id, $label[1], $owner_uid); } } - //db_query($link, "COMMIT"); + //db_query("COMMIT"); } } } @@ -416,13 +414,35 @@ class Import_Export extends Plugin implements IHandler { print "<div style='text-align : center'>"; - if (is_file($_FILES['export_file']['tmp_name'])) { + if ($_FILES['export_file']['error'] != 0) { + print_error(T_sprintf("Upload failed with error code %d", + $_FILES['export_file']['error'])); + return; + } + + $tmp_file = false; + + if (is_uploaded_file($_FILES['export_file']['tmp_name'])) { + $tmp_file = tempnam(CACHE_DIR . '/upload', 'export'); - $this->perform_data_import($this->link, $_FILES['export_file']['tmp_name'], $_SESSION['uid']); + $result = move_uploaded_file($_FILES['export_file']['tmp_name'], + $tmp_file); + if (!$result) { + print_error(__("Unable to move uploaded file.")); + return; + } } else { - print "<p>" . T_sprintf("Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)", ini_get("upload_max_filesize")) . " or use CLI import tool.</p>"; + print_error(__('Error: please upload OPML file.')); + return; + } + if (is_file($tmp_file)) { + $this->perform_data_import($tmp_file, $_SESSION['uid']); + unlink($tmp_file); + } else { + print_error(__('No file uploaded.')); + return; } print "<button dojoType=\"dijit.form.Button\" @@ -433,6 +453,9 @@ class Import_Export extends Plugin implements IHandler { } + function api_version() { + return 2; + } } ?> diff --git a/plugins/index.html b/plugins/index.html new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/plugins/index.html diff --git a/plugins/instances/init.php b/plugins/instances/init.php index 7f822c7bf..aac28196f 100644 --- a/plugins/instances/init.php +++ b/plugins/instances/init.php @@ -1,7 +1,5 @@ <?php class Instances extends Plugin implements IHandler { - - private $link; private $host; private $status_codes = array( @@ -18,7 +16,6 @@ class Instances extends Plugin implements IHandler { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_PREFS_TABS, $this); @@ -30,7 +27,7 @@ class Instances extends Plugin implements IHandler { function hook_update_task($args) { _debug("Get linked feeds..."); - $this->get_linked_feeds($this->link); + $this->get_linked_feeds(); } // Status codes: @@ -40,7 +37,7 @@ class Instances extends Plugin implements IHandler { // 2 - did not receive valid data // >10 - server error, code + 10 (e.g. 16 means server error 6) - function get_linked_feeds($link, $instance_id = false) { + function get_linked_feeds($instance_id = false) { if ($instance_id) $instance_qpart = "id = '$instance_id' AND "; else @@ -52,7 +49,7 @@ class Instances extends Plugin implements IHandler { $date_qpart = "last_connected < DATE_SUB(NOW(), INTERVAL 6 HOUR)"; } - $result = db_query($link, "SELECT id, access_key, access_url FROM ttrss_linked_instances + $result = db_query("SELECT id, access_key, access_url FROM ttrss_linked_instances WHERE $instance_qpart $date_qpart ORDER BY last_connected"); while ($line = db_fetch_assoc($result)) { @@ -80,7 +77,7 @@ class Instances extends Plugin implements IHandler { // access denied if ($status == 16) { - db_query($link, "DELETE FROM ttrss_linked_feeds + db_query("DELETE FROM ttrss_linked_feeds WHERE instance_id = '$id'"); } } else { @@ -88,16 +85,16 @@ class Instances extends Plugin implements IHandler { if (count($feeds['feeds']) > 0) { - db_query($link, "DELETE FROM ttrss_linked_feeds + db_query("DELETE FROM ttrss_linked_feeds WHERE instance_id = '$id'"); foreach ($feeds['feeds'] as $feed) { - $feed_url = db_escape_string($this->link, $feed['feed_url']); - $title = db_escape_string($this->link, $feed['title']); - $subscribers = db_escape_string($this->link, $feed['subscribers']); - $site_url = db_escape_string($this->link, $feed['site_url']); + $feed_url = db_escape_string($feed['feed_url']); + $title = db_escape_string($feed['title']); + $subscribers = db_escape_string($feed['subscribers']); + $site_url = db_escape_string($feed['site_url']); - db_query($link, "INSERT INTO ttrss_linked_feeds + db_query("INSERT INTO ttrss_linked_feeds (feed_url, site_url, title, subscribers, instance_id, created, updated) VALUES ('$feed_url', '$site_url', '$title', '$subscribers', '$id', NOW(), NOW())"); @@ -122,7 +119,7 @@ class Instances extends Plugin implements IHandler { _debug("Status: $status"); - db_query($link, "UPDATE ttrss_linked_instances SET + db_query("UPDATE ttrss_linked_instances SET last_status_out = '$status', last_connected = NOW() WHERE id = '$id'"); } @@ -130,7 +127,7 @@ class Instances extends Plugin implements IHandler { function get_feeds() { - $this->get_linked_feeds($this->link, false); + $this->get_linked_feeds(false); } function get_prefs_js() { @@ -167,37 +164,37 @@ class Instances extends Plugin implements IHandler { } function remove() { - $ids = db_escape_string($this->link, $_REQUEST['ids']); + $ids = db_escape_string($_REQUEST['ids']); - db_query($this->link, "DELETE FROM ttrss_linked_instances WHERE + db_query("DELETE FROM ttrss_linked_instances WHERE id IN ($ids)"); } function add() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $access_url = db_escape_string($this->link, $_REQUEST["access_url"]); - $access_key = db_escape_string($this->link, $_REQUEST["access_key"]); + $id = db_escape_string($_REQUEST["id"]); + $access_url = db_escape_string($_REQUEST["access_url"]); + $access_key = db_escape_string($_REQUEST["access_key"]); - db_query($this->link, "BEGIN"); + db_query("BEGIN"); - $result = db_query($this->link, "SELECT id FROM ttrss_linked_instances + $result = db_query("SELECT id FROM ttrss_linked_instances WHERE access_url = '$access_url'"); if (db_num_rows($result) == 0) { - db_query($this->link, "INSERT INTO ttrss_linked_instances + db_query("INSERT INTO ttrss_linked_instances (access_url, access_key, last_connected, last_status_in, last_status_out) VALUES ('$access_url', '$access_key', '1970-01-01', -1, -1)"); } - db_query($this->link, "COMMIT"); + db_query("COMMIT"); } function edit() { - $id = db_escape_string($this->link, $_REQUEST["id"]); + $id = db_escape_string($_REQUEST["id"]); - $result = db_query($this->link, "SELECT * FROM ttrss_linked_instances WHERE + $result = db_query("SELECT * FROM ttrss_linked_instances WHERE id = '$id'"); print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"$id\">"; @@ -253,11 +250,11 @@ class Instances extends Plugin implements IHandler { } function editSave() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $access_url = db_escape_string($this->link, $_REQUEST["access_url"]); - $access_key = db_escape_string($this->link, $_REQUEST["access_key"]); + $id = db_escape_string($_REQUEST["id"]); + $access_url = db_escape_string($_REQUEST["access_url"]); + $access_key = db_escape_string($_REQUEST["access_key"]); - db_query($this->link, "UPDATE ttrss_linked_instances SET + db_query("UPDATE ttrss_linked_instances SET access_key = '$access_key', access_url = '$access_url', last_connected = '1970-01-01' WHERE id = '$id'"); @@ -277,7 +274,7 @@ class Instances extends Plugin implements IHandler { print "<div id=\"pref-instance-toolbar\" dojoType=\"dijit.Toolbar\">"; - $sort = db_escape_string($this->link, $_REQUEST["sort"]); + $sort = db_escape_string($_REQUEST["sort"]); if (!$sort || $sort == "undefined") { $sort = "access_url"; @@ -298,7 +295,7 @@ class Instances extends Plugin implements IHandler { print "</div>"; #toolbar - $result = db_query($this->link, "SELECT *, + $result = db_query("SELECT *, (SELECT COUNT(*) FROM ttrss_linked_feeds WHERE instance_id = ttrss_linked_instances.id) AS num_feeds FROM ttrss_linked_instances @@ -327,7 +324,7 @@ class Instances extends Plugin implements IHandler { $id = $line['id']; $this_row_id = "id=\"LIRR-$id\""; - $line["last_connected"] = make_local_datetime($this->link, $line["last_connected"], false); + $line["last_connected"] = make_local_datetime($line["last_connected"], false); print "<tr class=\"$class\" $this_row_id>"; @@ -354,8 +351,7 @@ class Instances extends Plugin implements IHandler { print "</div>"; #pane - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB, "hook_prefs_tab", "prefInstances"); print "</div>"; #container @@ -364,17 +360,17 @@ class Instances extends Plugin implements IHandler { function fbexport() { - $access_key = db_escape_string($this->link, $_POST["key"]); + $access_key = db_escape_string($_POST["key"]); // TODO: rate limit checking using last_connected - $result = db_query($this->link, "SELECT id FROM ttrss_linked_instances + $result = db_query("SELECT id FROM ttrss_linked_instances WHERE access_key = '$access_key'"); if (db_num_rows($result) == 1) { $instance_id = db_fetch_result($result, 0, "id"); - $result = db_query($this->link, "SELECT feed_url, site_url, title, subscribers + $result = db_query("SELECT feed_url, site_url, title, subscribers FROM ttrss_feedbrowser_cache ORDER BY subscribers DESC LIMIT 100"); $feeds = array(); @@ -383,7 +379,7 @@ class Instances extends Plugin implements IHandler { array_push($feeds, $line); } - db_query($this->link, "UPDATE ttrss_linked_instances SET + db_query("UPDATE ttrss_linked_instances SET last_status_in = 1 WHERE id = '$instance_id'"); print json_encode(array("feeds" => $feeds)); @@ -448,6 +444,9 @@ class Instances extends Plugin implements IHandler { print json_encode(array("hash" => $hash)); } + function api_version() { + return 2; + } } ?> diff --git a/plugins/mail/init.php b/plugins/mail/init.php index 40da8720c..80bc7d417 100644 --- a/plugins/mail/init.php +++ b/plugins/mail/init.php @@ -1,7 +1,6 @@ <?php class Mail extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Mail extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -30,13 +28,13 @@ class Mail extends Plugin { function emailArticle() { - $param = db_escape_string($this->link, $_REQUEST['param']); + $param = db_escape_string($_REQUEST['param']); print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pluginhandler\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"plugin\" value=\"mail\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"sendEmail\">"; - $result = db_query($this->link, "SELECT email, full_name FROM ttrss_users WHERE + $result = db_query("SELECT email, full_name FROM ttrss_users WHERE id = " . $_SESSION["uid"]); $user_email = htmlspecialchars(db_fetch_result($result, 0, "email")); @@ -44,8 +42,8 @@ class Mail extends Plugin { if (!$user_name) $user_name = $_SESSION['name']; - $_SESSION['email_replyto'] = $user_email; - $_SESSION['email_fromname'] = $user_name; + print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"from_email\" value=\"$user_email\">"; + print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"from_name\" value=\"$user_name\">"; require_once "lib/MiniTemplator.class.php"; @@ -58,7 +56,7 @@ class Mail extends Plugin { $tpl->setVariable('USER_EMAIL', $user_email, true); $tpl->setVariable('TTRSS_HOST', $_SERVER["HTTP_HOST"], true); - $result = db_query($this->link, "SELECT link, content, title + $result = db_query("SELECT link, content, title FROM ttrss_user_entries, ttrss_entries WHERE id = ref_id AND id IN ($param) AND owner_uid = " . $_SESSION["uid"]); @@ -134,15 +132,10 @@ class Mail extends Plugin { $reply = array(); - $_SESSION['email_secretkey'] = ''; - - $replyto = strip_tags($_SESSION['email_replyto']); - $fromname = strip_tags($_SESSION['email_fromname']); - $mail = new ttrssMailer(); - $mail->From = $replyto; - $mail->FromName = $fromname; + $mail->From = strip_tags($_REQUEST['from_email']); + $mail->FromName = strip_tags($_REQUEST['from_name']); $mail->AddAddress($_REQUEST['destination']); $mail->IsHTML(false); @@ -154,7 +147,7 @@ class Mail extends Plugin { if (!$rc) { $reply['error'] = $mail->ErrorInfo; } else { - save_email_address($this->link, db_escape_string($this->link, $destination)); + save_email_address(db_escape_string($destination)); $reply['message'] = "UPDATE_COUNTERS"; } @@ -162,7 +155,7 @@ class Mail extends Plugin { } function completeEmails() { - $search = db_escape_string($this->link, $_REQUEST["search"]); + $search = db_escape_string($_REQUEST["search"]); print "<ul>"; @@ -175,6 +168,9 @@ class Mail extends Plugin { print "</ul>"; } + function api_version() { + return 2; + } } ?> diff --git a/plugins/mail/mail.js b/plugins/mail/mail.js index 39f753cc0..6166f01c1 100644 --- a/plugins/mail/mail.js +++ b/plugins/mail/mail.js @@ -26,6 +26,7 @@ function emailArticle(id) { new Ajax.Request("backend.php", { parameters: dojo.objectToQuery(this.attr('value')), onComplete: function(transport) { + console.log(transport.responseText); var reply = JSON.parse(transport.responseText); diff --git a/plugins/mailto/init.php b/plugins/mailto/init.php index e140bbea7..aa6d173f8 100644 --- a/plugins/mailto/init.php +++ b/plugins/mailto/init.php @@ -1,7 +1,5 @@ <?php class MailTo extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class MailTo extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -30,7 +27,7 @@ class MailTo extends Plugin { function emailArticle() { - $param = db_escape_string($this->link, $_REQUEST['param']); + $param = db_escape_string($_REQUEST['param']); require_once "lib/MiniTemplator.class.php"; @@ -44,7 +41,7 @@ class MailTo extends Plugin { $tpl->setVariable('TTRSS_HOST', $_SERVER["HTTP_HOST"], true); - $result = db_query($this->link, "SELECT link, content, title + $result = db_query("SELECT link, content, title FROM ttrss_user_entries, ttrss_entries WHERE id = ref_id AND id IN ($param) AND owner_uid = " . $_SESSION["uid"]); @@ -68,8 +65,8 @@ class MailTo extends Plugin { $content = ""; $tpl->generateOutputToString($content); - $mailto_link = htmlspecialchars("mailto: ?subject=".urlencode($subject). - "&body=".urlencode($content)); + $mailto_link = htmlspecialchars("mailto: ?subject=".rawurlencode($subject). + "&body=".rawurlencode($content)); print __("Clicking the following link to invoke your mail client:"); @@ -89,5 +86,9 @@ class MailTo extends Plugin { //return; } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/mark_button/init.php b/plugins/mark_button/init.php index 4cf1c5949..971b12932 100644 --- a/plugins/mark_button/init.php +++ b/plugins/mark_button/init.php @@ -1,10 +1,8 @@ <?php class Mark_Button extends Plugin { - private $link; private $host; function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -20,7 +18,7 @@ class Mark_Button extends Plugin { $marked_pic = ""; $id = $line["id"]; - if (get_pref($this->link, "COMBINED_DISPLAY_MODE")) { + if (get_pref("COMBINED_DISPLAY_MODE")) { if (sql_bool_to_bool($line["marked"])) { $marked_pic = "<img src=\"images/mark_set.svg\" @@ -36,5 +34,10 @@ class Mark_Button extends Plugin { return $marked_pic; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/mobile/article.php b/plugins/mobile/article.php deleted file mode 100644 index f6aed994f..000000000 --- a/plugins/mobile/article.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); - - $id = db_escape_string($link, $_REQUEST["id"]); - $feed_id = db_escape_string($link, $_REQUEST["feed"]); - $cat_id = db_escape_string($link, $_REQUEST["cat"]); - $is_cat = db_escape_string($link, $_REQUEST["is_cat"]); - - render_article($link, $id, $feed_id, $cat_id, $is_cat); -?> - diff --git a/plugins/mobile/backend.php b/plugins/mobile/backend.php deleted file mode 100644 index a88e02a92..000000000 --- a/plugins/mobile/backend.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - define('MOBILE_VERSION', true); - - require_once "config.php"; - require_once "mobile-functions.php"; - - require_once "functions.php"; - require_once "sessions.php"; - require_once "version.php"; - require_once "db-prefs.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - if (!$_SESSION["uid"]) return; - - $op = $_REQUEST["op"]; - - switch ($op) { - case "toggleMarked": - $cmode = db_escape_string($link, $_REQUEST["mark"]); - $id = db_escape_string($link, $_REQUEST["id"]); - - markArticlesById($link, array($id), $cmode); - break; - case "togglePublished": - $cmode = db_escape_string($link, $_REQUEST["pub"]); - $id = db_escape_string($link, $_REQUEST["id"]); - - publishArticlesById($link, array($id), $cmode); - break; - case "toggleUnread": - $cmode = db_escape_string($link, $_REQUEST["unread"]); - $id = db_escape_string($link, $_REQUEST["id"]); - - catchupArticlesById($link, array($id), $cmode); - break; - - case "setPref": - $id = db_escape_string($link, $_REQUEST["id"]); - $value = db_escape_string($link, $_REQUEST["to"]); - mobile_set_pref($link, $id, $value); - print_r($_SESSION); - break; - default: - print json_encode(array("error", "UNKNOWN_METHOD")); - break; - } -?> - diff --git a/plugins/mobile/cat.php b/plugins/mobile/cat.php deleted file mode 100644 index 7b5cf43f9..000000000 --- a/plugins/mobile/cat.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); - - $cat_id = db_escape_string($link, $_REQUEST["id"]); - - render_category($link, $cat_id); -?> - diff --git a/plugins/mobile/feed.php b/plugins/mobile/feed.php deleted file mode 100644 index 6eae741ac..000000000 --- a/plugins/mobile/feed.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); - - $feed_id = db_escape_string($link, $_REQUEST["id"]); - $cat_id = db_escape_string($link, $_REQUEST["cat"]); - $offset = (int) db_escape_string($link, $_REQUEST["skip"]); - $search = db_escape_string($link, $_REQUEST["search"]); - $is_cat = (bool) db_escape_string($link, $_REQUEST["is_cat"]); - - render_headlines_list($link, $feed_id, $cat_id, $offset, $search, $is_cat); -?> - diff --git a/plugins/mobile/home.php b/plugins/mobile/home.php deleted file mode 100644 index 03fccb3e2..000000000 --- a/plugins/mobile/home.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); - - $use_cats = mobile_get_pref($link, 'ENABLE_CATS'); - $offset = (int) db_escape_string($link, $_REQUEST["skip"]); - - if ($use_cats) { - render_categories_list($link); - } else { - render_flat_feed_list($link, $offset); - } -?> diff --git a/plugins/mobile/index.php b/plugins/mobile/index.php deleted file mode 100644 index 3feec7531..000000000 --- a/plugins/mobile/index.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); -?> -<!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"> -<head> -<title>Tiny Tiny RSS</title> -<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/> -<link rel="apple-touch-icon" href="iui/iui-logo-touch-icon.png" /> -<meta name="apple-touch-fullscreen" content="YES" /> -<style type="text/css" media="screen">@import "iui/iui.css";</style> -<script type="application/x-javascript" src="iui/iui.js"></script> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> -<script type="text/javascript" src="../../lib/prototype.js"></script> -<script type="text/javascript" src="mobile.js"></script> -<style type="text/css" media="screen">@import "mobile.css";</style> -</head> - -<style type="text/css"> - img { max-width : 75%; } - - li.oldItem { - color : gray; - } - - #myBackButton { - display: none; - left: 6px; - right: auto; - padding: 0; - max-width: 55px; - border-width: 0 8px 0 14px; - -webkit-border-image: url(iui/backButton.png) 0 8 0 14; - } - - img.tinyIcon { - max-width : 16px; - max-height : 16px; - margin-right : 10px; - vertical-align : middle; - } - - a img { - border-width : 0px; - } -</style> - -<body> - <div class="toolbar"> - <h1 id="pageTitle"></h1> - <a id="myBackButton" class="button" href="#"></a> - <a class="button" href="prefs.php">Preferences</a> - </div> - - <?php - $use_cats = mobile_get_pref($link, 'ENABLE_CATS'); - $offset = (int) db_escape_string($link, $_REQUEST["skip"]); - - if ($use_cats) { - render_categories_list($link); - } else { - render_flat_feed_list($link, $offset); - } - ?> - -</body> -</html> diff --git a/plugins/mobile/init.php b/plugins/mobile/init.php deleted file mode 100644 index 0ebbcced1..000000000 --- a/plugins/mobile/init.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php -class Mobile extends Plugin implements IHandler { - - private $link; - private $host; - - function about() { - return array(1.0, - "Classic mobile version for tt-rss (unsupported)", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_handler("mobile", "index", $this); - } - - function index() { - header("Content-type: text/html; charset=utf-8"); - - header("Location: plugins/mobile/index.php"); - } - - /* function get_js() { - return file_get_contents(dirname(__FILE__) . "/digest.js"); - } */ - - function csrf_ignore($method) { - return true; //in_array($method, array("index")); - } - - function before($method) { - return true; - } - - function after() { - - } - - -} -?> diff --git a/plugins/mobile/iui/LICENSE.txt b/plugins/mobile/iui/LICENSE.txt deleted file mode 100644 index c9d2a0d65..000000000 --- a/plugins/mobile/iui/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2007-2009, iUI Project Members - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the iUI Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugins/mobile/iui/NOTICE.txt b/plugins/mobile/iui/NOTICE.txt deleted file mode 100644 index 3a23f563b..000000000 --- a/plugins/mobile/iui/NOTICE.txt +++ /dev/null @@ -1,33 +0,0 @@ -NOTICE.txt - iUI credits and copyright notices - - iUI is Copyright (c) 2007-2009 by the iUI project members: - M. Sean Gilligan (msgilligan) - Past members: - Joe Hewitt (joehewitt) - Christopher Allen (ChristopherA) - -CREDITS - schlueter - committed fixes for issues #9, #11, #63 -- added samples - ??? - created iUI icon - kris.tate - named it "iUI", created Google Code project, initial checkin - others - let us know if we missed you - iUI users - thanks for your patience, feedback, and bug reports - -THIRD PARTY COMPONENTS - - * iUI includes software developed by the Mozilla Project - Copyright (c) 1997-2007, Netscape Communications Corporation and others. - All rights reserved. - http://www.mozilla.org/rhino/ - - * iUI includes software developed by the Dojo Foundation - http://dojotoolkit.org/docs/shrinksafe - - * iUI includes software developed by LCA Soft Ltd. - http://www.lcasoft.com/compress-js.html - - * iUI includes software developed by the ant-googlcode Project - http://code.google.com/p/ant-googlecode/ - - - diff --git a/plugins/mobile/iui/backButton.png b/plugins/mobile/iui/backButton.png Binary files differdeleted file mode 100644 index e27ea8cdf..000000000 --- a/plugins/mobile/iui/backButton.png +++ /dev/null diff --git a/plugins/mobile/iui/blueButton.png b/plugins/mobile/iui/blueButton.png Binary files differdeleted file mode 100644 index 0f92dfd94..000000000 --- a/plugins/mobile/iui/blueButton.png +++ /dev/null diff --git a/plugins/mobile/iui/cancel.png b/plugins/mobile/iui/cancel.png Binary files differdeleted file mode 100644 index 5f6dcc87d..000000000 --- a/plugins/mobile/iui/cancel.png +++ /dev/null diff --git a/plugins/mobile/iui/grayButton.png b/plugins/mobile/iui/grayButton.png Binary files differdeleted file mode 100644 index 0ce6a30d4..000000000 --- a/plugins/mobile/iui/grayButton.png +++ /dev/null diff --git a/plugins/mobile/iui/iui-logo-touch-icon.png b/plugins/mobile/iui/iui-logo-touch-icon.png Binary files differdeleted file mode 100644 index 8817b3022..000000000 --- a/plugins/mobile/iui/iui-logo-touch-icon.png +++ /dev/null diff --git a/plugins/mobile/iui/iui.css b/plugins/mobile/iui/iui.css deleted file mode 100644 index 3933dbad9..000000000 --- a/plugins/mobile/iui/iui.css +++ /dev/null @@ -1,398 +0,0 @@ -/* iui.css (c) 2007-9 by iUI Project Members, see LICENSE.txt for license */ -body { - margin: 0; - font-family: Helvetica; - background: #FFFFFF; - color: #000000; - overflow-x: hidden; - -webkit-user-select: none; - -webkit-text-size-adjust: none; -} - -body > *:not(.toolbar) { - display: none; - position: absolute; - margin: 0; - padding: 0; - left: 0; - top: 45px; - width: 100%; - min-height: 372px; - -webkit-transition-duration: 300ms; - -webkit-transition-property: -webkit-transform; - -webkit-transform: translateX(0%); -} - -body[orient="landscape"] > *:not(.toolbar) { - min-height: 268px; -} - -body > *[selected="true"] { - display: block; -} - -a[selected], a:active { - background-color: #194fdb !important; - background-image: url(listArrowSel.png), url(selection.png) !important; - background-repeat: no-repeat, repeat-x; - background-position: right center, left top; - color: #FFFFFF !important; -} - -a[selected="progress"] { - background-image: url(loading.gif), url(selection.png) !important; -} - -/************************************************************************************************/ - -body > .toolbar { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - border-bottom: 1px solid #2d3642; - border-top: 1px solid #6d84a2; - padding: 10px; - height: 45px; - background: url(toolbar.png) #6d84a2 repeat-x; -} - -.toolbar > h1 { - position: absolute; - overflow: hidden; - left: 50%; - margin: 1px 0 0 -75px; - height: 45px; - font-size: 20px; - width: 150px; - font-weight: bold; - text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - color: #FFFFFF; -} - -body[orient="landscape"] > .toolbar > h1 { - margin-left: -125px; - width: 250px; -} - -.button { - position: absolute; - overflow: hidden; - top: 8px; - right: 6px; - margin: 0; - border-width: 0 5px; - padding: 0 3px; - width: auto; - height: 30px; - line-height: 30px; - font-family: inherit; - font-size: 12px; - font-weight: bold; - color: #FFFFFF; - text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0; - text-overflow: ellipsis; - text-decoration: none; - white-space: nowrap; - background: none; - -webkit-border-image: url(toolButton.png) 0 5 0 5; -} - -.blueButton { - -webkit-border-image: url(blueButton.png) 0 5 0 5; - border-width: 0 5px; -} - -.leftButton { - left: 6px; - right: auto; -} - -#backButton { - display: none; - left: 6px; - right: auto; - padding: 0; - max-width: 55px; - border-width: 0 8px 0 14px; - -webkit-border-image: url(backButton.png) 0 8 0 14; -} - -.whiteButton, -.redButton, -.grayButton { - display: block; - border-width: 0 12px; - padding: 10px; - text-align: center; - font-size: 20px; - font-weight: bold; - text-decoration: inherit; - color: inherit; -} - -.whiteButton { - -webkit-border-image: url(whiteButton.png) 0 12 0 12; - text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0; -} - -.redButton { - -webkit-border-image: url(redButton.png) 0 12 0 12; - color:#fff; - text-shadow: #7a0001 0 -1px 0; -} - -.grayButton { - -webkit-border-image: url(grayButton.png) 0 12 0 12; - color: #FFFFFF; -} - -/************************************************************************************************/ - -body > ul > li { - position: relative; - margin: 0; - border-bottom: 1px solid #E0E0E0; - padding: 8px 0 8px 10px; - font-size: 20px; - font-weight: bold; - list-style: none; -} - -body > ul > li.group { - position: relative; - top: -1px; - margin-bottom: -2px; - border-top: 1px solid #7d7d7d; - border-bottom: 1px solid #999999; - padding: 1px 10px; - background: url(listGroup.png) repeat-x; - font-size: 17px; - font-weight: bold; - text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0; - color: #FFFFFF; -} - -body > ul > li.group:first-child { - top: 0; - border-top: none; -} - -body > ul > li > a { - display: block; - margin: -8px 0 -8px -10px; - padding: 8px 32px 8px 10px; - text-decoration: none; - color: inherit; - background: url(listArrow.png) no-repeat right center; -} - -a[target="_replace"] { - box-sizing: border-box; - -webkit-box-sizing: border-box; - padding-top: 25px; - padding-bottom: 25px; - font-size: 18px; - color: cornflowerblue; - background-color: #FFFFFF; - background-image: none; -} - -/************************************************************************************************/ - -body > .dialog { - top: 0; - width: 100%; - min-height: 417px; - z-index: 2; - background: rgba(0, 0, 0, 0.8); - padding: 0; - text-align: right; -} - -.dialog > fieldset { - box-sizing: border-box; - -webkit-box-sizing: border-box; - width: 100%; - margin: 0; - border: none; - border-top: 1px solid #6d84a2; - padding: 10px 6px; - background: url(toolbar.png) #7388a5 repeat-x; -} - -.dialog > fieldset > h1 { - margin: 0 10px 0 10px; - padding: 0; - font-size: 20px; - font-weight: bold; - color: #FFFFFF; - text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; - text-align: center; -} - -.dialog > fieldset > label { - position: absolute; - margin: 16px 0 0 6px; - font-size: 14px; - color: #999999; -} - -/*input:not(input[type|=radio]):not(input[type|=checkbox]) {*/ -input[type|=text], input[type|=password] { - box-sizing: border-box; - -webkit-box-sizing: border-box; - width: 100%; - margin: 8px 0 0 0; - padding: 6px 6px 6px 44px; - font-size: 16px; - font-weight: normal; -} - -/************************************************************************************************/ - -body > .panel { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - padding: 10px; - background: #c8c8c8 url(pinstripes.png); -} - -.panel > fieldset { - position: relative; - margin: 0 0 20px 0; - padding: 0; - background: #FFFFFF; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border: 1px solid #999999; - text-align: right; - font-size: 16px; -} - -.row { - position: relative; - min-height: 42px; - border-bottom: 1px solid #999999; - -webkit-border-radius: 0; - text-align: left; -} - -fieldset > .row:last-child { - border-bottom: none !important; -} - -/*.row > input:not(input[type|=radio]):not(input[type|=checkbox]) {*/ -.row > input[type|=text], .row > input[type|=password] { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - margin: 0; - border: none; - padding: 12px 10px 0 110px; -/* height: 42px;*/ - background: none; -} -.row > input[type|=radio], .row > input[type|=checkbox] { - margin: 7px 7px 0 0; - height: 25px; - width: 25px; -} - -.row > label { - position: absolute; - margin: 0 0 0 14px; - line-height: 42px; - font-weight: bold; -} - -.row > span { - position: absolute; - padding: 12px 10px 0 110px; - margin: 0; -} - -.row > .toggle { - position: absolute; - top: 6px; - right: 6px; - width: 100px; - height: 28px; -} - -.toggle { - border: 1px solid #888888; - -webkit-border-radius: 6px; - background: #FFFFFF url(toggle.png) repeat-x; - font-size: 19px; - font-weight: bold; - line-height: 30px; -} - -.toggle[toggled="true"] { - border: 1px solid #143fae; - background: #194fdb url(toggleOn.png) repeat-x; -} - -.toggleOn { - display: none; - position: absolute; - width: 60px; - text-align: center; - left: 0; - top: 0; - color: #FFFFFF; - text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; -} - -.toggleOff { - position: absolute; - width: 60px; - text-align: center; - right: 0; - top: 0; - color: #666666; -} - -.toggle[toggled="true"] > .toggleOn { - display: block; -} - -.toggle[toggled="true"] > .toggleOff { - display: none; -} - -.thumb { - position: absolute; - top: -1px; - left: -1px; - width: 40px; - height: 28px; - border: 1px solid #888888; - -webkit-border-radius: 6px; - background: #ffffff url(thumb.png) repeat-x; -} - -.toggle[toggled="true"] > .thumb { - left: auto; - right: -1px; -} - -.panel > h2 { - margin: 0 0 8px 14px; - font-size: inherit; - font-weight: bold; - color: #4d4d70; - text-shadow: rgba(255, 255, 255, 0.75) 2px 2px 0; -} - -/************************************************************************************************/ - -#preloader { - display: none; - background-image: url(loading.gif), url(selection.png), - url(blueButton.png), url(listArrowSel.png), url(listGroup.png); -} diff --git a/plugins/mobile/iui/iui.js b/plugins/mobile/iui/iui.js deleted file mode 100644 index 0937afe05..000000000 --- a/plugins/mobile/iui/iui.js +++ /dev/null @@ -1,542 +0,0 @@ -/* - Copyright (c) 2007-9, iUI Project Members - See LICENSE.txt for licensing terms - */ - - -(function() { - -var slideSpeed = 20; -var slideInterval = 0; - -var currentPage = null; -var currentDialog = null; -var currentWidth = 0; -var currentHash = location.hash; -var hashPrefix = "#_"; -var pageHistory = []; -var newPageCount = 0; -var checkTimer; -var hasOrientationEvent = false; -var portraitVal = "portrait"; -var landscapeVal = "landscape"; - -// ************************************************************************************************* - -window.iui = -{ - animOn: true, // Slide animation with CSS transition is now enabled by default where supported - - showPage: function(page, backwards) - { - if (page) - { - if (currentDialog) - { - currentDialog.removeAttribute("selected"); - currentDialog = null; - } - - if (hasClass(page, "dialog")) - showDialog(page); - else - { - var fromPage = currentPage; - currentPage = page; - - if (fromPage) - setTimeout(slidePages, 0, fromPage, page, backwards); - else - updatePage(page, fromPage); - } - } - }, - - showPageById: function(pageId) - { - var page = $(pageId); - if (page) - { - var index = pageHistory.indexOf(pageId); - var backwards = index != -1; - if (backwards) - pageHistory.splice(index, pageHistory.length); - - iui.showPage(page, backwards); - } - }, - - showPageByHref: function(href, args, method, replace, cb, bw) - { - var req = new XMLHttpRequest(); - req.onerror = function() - { - if (cb) - cb(false); - }; - - req.onreadystatechange = function() - { - if (req.readyState == 4) - { - if (replace) - replaceElementWithSource(replace, req.responseText); - else - { - var frag = document.createElement("div"); - frag.innerHTML = req.responseText; - iui.insertPages(frag.childNodes, bw); - } - if (cb) - setTimeout(cb, 1000, true); - } - }; - - if (args) - { - req.open(method || "GET", href, true); - req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - req.setRequestHeader("Content-Length", args.length); - req.send(args.join("&")); - } - else - { - req.open(method || "GET", href, true); - req.send(null); - } - }, - - insertPages: function(nodes, bw) - { - var targetPage; - for (var i = 0; i < nodes.length; ++i) - { - var child = nodes[i]; - if (child.nodeType == 1) - { - if (!child.id) - child.id = "__" + (++newPageCount) + "__"; - - var clone = $(child.id); - if (clone) - clone.parentNode.replaceChild(child, clone); - else - document.body.appendChild(child); - - if (child.getAttribute("selected") == "true" || !targetPage) - targetPage = child; - - --i; - } - } - - if (targetPage) - iui.showPage(targetPage, bw); - }, - - getSelectedPage: function() - { - for (var child = document.body.firstChild; child; child = child.nextSibling) - { - if (child.nodeType == 1 && child.getAttribute("selected") == "true") - return child; - } - }, - isNativeUrl: function(href) - { - for(var i = 0; i < iui.nativeUrlPatterns.length; i++) - { - if(href.match(iui.nativeUrlPatterns[i])) return true; - } - return false; - }, - nativeUrlPatterns: [ - new RegExp("^http:\/\/maps.google.com\/maps\?"), - new RegExp("^mailto:"), - new RegExp("^tel:"), - new RegExp("^http:\/\/www.youtube.com\/watch\\?v="), - new RegExp("^http:\/\/www.youtube.com\/v\/"), - new RegExp("^javascript:"), - - ] -}; - -// ************************************************************************************************* - -addEventListener("load", function(event) -{ - var page = iui.getSelectedPage(); - var locPage = getPageFromLoc(); - - if (page) - iui.showPage(page); - - if (locPage && (locPage != page)) - iui.showPage(locPage); - - setTimeout(preloadImages, 0); - if (typeof window.onorientationchange == "object") - { - window.onorientationchange=orientChangeHandler; - hasOrientationEvent = true; - setTimeout(orientChangeHandler, 0); - } - setTimeout(checkOrientAndLocation, 0); - checkTimer = setInterval(checkOrientAndLocation, 300); -}, false); - -addEventListener("unload", function(event) -{ - return; -}, false); - -addEventListener("click", function(event) -{ - var link = findParent(event.target, "a"); - if (link) - { - function unselect() { link.removeAttribute("selected"); } - - if (link.href && link.hash && link.hash != "#" && !link.target) - { - link.setAttribute("selected", "true"); - iui.showPage($(link.hash.substr(1))); - setTimeout(unselect, 500); - } - else if (link == $("backButton")) - history.back(); - else if (link.getAttribute("type") == "submit") - { - var form = findParent(link, "form"); - if (form.target == "_self") - { - form.submit(); - return; // return so we don't preventDefault - } - submitForm(form); - } - else if (link.getAttribute("type") == "cancel") - cancelDialog(findParent(link, "form")); - else if (link.target == "_replace") - { - link.setAttribute("selected", "progress"); - iui.showPageByHref(link.href, null, null, link, unselect); - } - else if (iui.isNativeUrl(link.href)) - { - return; - } - else if (link.target == "_webapp") - { - location.href = link.href; - } - else if (!link.target) - { - link.setAttribute("selected", "progress"); - var bw = link.getAttribute("backwards"); - iui.showPageByHref(link.href, null, null, null, unselect, bw); - } - else - return; - - event.preventDefault(); - } -}, true); - -addEventListener("click", function(event) -{ - var div = findParent(event.target, "div"); - if (div && hasClass(div, "toggle")) - { - div.setAttribute("toggled", div.getAttribute("toggled") != "true"); - event.preventDefault(); - } -}, true); - -function getPageFromLoc() -{ - var page; - var result = location.hash.match(/#_([^\?_]+)/); - if (result) - page = result[1]; - if (page) - page = $(page); - return page; -} - -function orientChangeHandler() -{ - var orientation=window.orientation; - switch(orientation) - { - case 0: - setOrientation(portraitVal); - break; - - case 90: - case -90: - setOrientation(landscapeVal); - break; - } -} - - -function checkOrientAndLocation() -{ - if (!hasOrientationEvent) - { - if (window.innerWidth != currentWidth) - { - currentWidth = window.innerWidth; - var orient = currentWidth == 320 ? portraitVal : landscapeVal; - setOrientation(orient); - } - } - - if (location.hash != currentHash) - { - var pageId = location.hash.substr(hashPrefix.length); - iui.showPageById(pageId); - } -} - -function setOrientation(orient) -{ - document.body.setAttribute("orient", orient); - setTimeout(scrollTo, 100, 0, 1); -} - -function showDialog(page) -{ - currentDialog = page; - page.setAttribute("selected", "true"); - - if (hasClass(page, "dialog") && !page.target) - showForm(page); -} - -function showForm(form) -{ - form.onsubmit = function(event) - { - event.preventDefault(); - submitForm(form); - }; - - form.onclick = function(event) - { - if (event.target == form && hasClass(form, "dialog")) - cancelDialog(form); - }; -} - -function cancelDialog(form) -{ - form.removeAttribute("selected"); -} - -function updatePage(page, fromPage) -{ - if (!page.id) - page.id = "__" + (++newPageCount) + "__"; - - location.hash = currentHash = hashPrefix + page.id; - pageHistory.push(page.id); - - var pageTitle = $("pageTitle"); - if (page.title) - pageTitle.innerHTML = page.title; - - if (page.localName.toLowerCase() == "form" && !page.target) - showForm(page); - - var backButton = $("backButton"); - if (backButton) - { - var prevPage = $(pageHistory[pageHistory.length-2]); - if (prevPage && !page.getAttribute("hideBackButton")) - { - backButton.style.display = "inline"; - backButton.innerHTML = prevPage.title ? prevPage.title : "Back"; - } - else - backButton.style.display = "none"; - } - - var backButton = $("myBackButton"); - if (backButton) - { - var label = page.getAttribute("myBackLabel"); - - if (label) - { - backButton.style.display = "inline"; - backButton.innerHTML = label; - backButton.href = page.getAttribute("myBackHref"); - //backButton.target = page.getAttribute("myBackTarget"); - target = page.getAttribute("myBackTarget"); - if (target == null) - backButton.target = ''; - else - backButton.target = target; - backButton.setAttribute("backwards", "true"); - } - else - backButton.style.display = "none"; - } - -} - -function slidePages(fromPage, toPage, backwards) -{ - var axis = (backwards ? fromPage : toPage).getAttribute("axis"); - - clearInterval(checkTimer); - - if (canDoSlideAnim() && axis != 'y') - { - slide2(fromPage, toPage, backwards, slideDone); - } - else - { - slide1(fromPage, toPage, backwards, axis, slideDone); - } - - function slideDone() - { - if (!hasClass(toPage, "dialog")) - fromPage.removeAttribute("selected"); - checkTimer = setInterval(checkOrientAndLocation, 300); - setTimeout(updatePage, 0, toPage, fromPage); - fromPage.removeEventListener('webkitTransitionEnd', slideDone, false); - } -} - -function canDoSlideAnim() -{ - return (iui.animOn) && (typeof WebKitCSSMatrix == "object"); -} - -function slide1(fromPage, toPage, backwards, axis, cb) -{ - if (axis == "y") - (backwards ? fromPage : toPage).style.top = "100%"; - else - toPage.style.left = "100%"; - - scrollTo(0, 1); - toPage.setAttribute("selected", "true"); - var percent = 100; - slide(); - var timer = setInterval(slide, slideInterval); - - function slide() - { - percent -= slideSpeed; - if (percent <= 0) - { - percent = 0; - clearInterval(timer); - cb(); - } - - if (axis == "y") - { - backwards - ? fromPage.style.top = (100-percent) + "%" - : toPage.style.top = percent + "%"; - } - else - { - fromPage.style.left = (backwards ? (100-percent) : (percent-100)) + "%"; - toPage.style.left = (backwards ? -percent : percent) + "%"; - } - } -} - - -function slide2(fromPage, toPage, backwards, cb) -{ - toPage.style.webkitTransitionDuration = '0ms'; // Turn off transitions to set toPage start offset - // fromStart is always 0% and toEnd is always 0% - // iPhone won't take % width on toPage - var toStart = 'translateX(' + (backwards ? '-' : '') + window.innerWidth + 'px)'; - var fromEnd = 'translateX(' + (backwards ? '100%' : '-100%') + ')'; - toPage.style.webkitTransform = toStart; - toPage.setAttribute("selected", "true"); - toPage.style.webkitTransitionDuration = ''; // Turn transitions back on - function startTrans() - { - fromPage.style.webkitTransform = fromEnd; - toPage.style.webkitTransform = 'translateX(0%)'; //toEnd - } - fromPage.addEventListener('webkitTransitionEnd', cb, false); - setTimeout(startTrans, 0); -} - -function preloadImages() -{ - var preloader = document.createElement("div"); - preloader.id = "preloader"; - document.body.appendChild(preloader); -} - -function submitForm(form) -{ - iui.showPageByHref(form.action || "POST", encodeForm(form), form.method); -} - -function encodeForm(form) -{ - function encode(inputs) - { - for (var i = 0; i < inputs.length; ++i) - { - if (inputs[i].name) - args.push(inputs[i].name + "=" + escape(inputs[i].value)); - } - } - - var args = []; - encode(form.getElementsByTagName("input")); - encode(form.getElementsByTagName("textarea")); - encode(form.getElementsByTagName("select")); - return args; -} - -function findParent(node, localName) -{ - while (node && (node.nodeType != 1 || node.localName.toLowerCase() != localName)) - node = node.parentNode; - return node; -} - -function hasClass(self, name) -{ - var re = new RegExp("(^|\\s)"+name+"($|\\s)"); - return re.exec(self.getAttribute("class")) != null; -} - -function replaceElementWithSource(replace, source) -{ - var page = replace.parentNode; - var parent = replace; - while (page.parentNode != document.body) - { - page = page.parentNode; - parent = parent.parentNode; - } - - var frag = document.createElement(parent.localName); - frag.innerHTML = source; - - page.removeChild(parent); - - while (frag.firstChild) - page.appendChild(frag.firstChild); -} - -function $(id) { return document.getElementById(id); } -function ddd() { console.log.apply(console, arguments); } - -})(); diff --git a/plugins/mobile/iui/iuix.css b/plugins/mobile/iui/iuix.css deleted file mode 100644 index 1df7e8a00..000000000 --- a/plugins/mobile/iui/iuix.css +++ /dev/null @@ -1 +0,0 @@ -body{margin:0;font-family:Helvetica;background:#FFF;color:#000;overflow-x:hidden;-webkit-user-select:none;-webkit-text-size-adjust:none;}body>*:not(.toolbar){display:none;position:absolute;margin:0;padding:0;left:0;top:45px;width:100%;min-height:372px;-webkit-transition-duration:300ms;-webkit-transition-property:-webkit-transform;-webkit-transform:translateX(0%);}body[orient="landscape"]>*:not(.toolbar){min-height:268px;}body>*[selected="true"]{display:block;}a[selected],a:active{background-color:#194fdb!important;background-image:url(listArrowSel.png),url(selection.png)!important;background-repeat:no-repeat,repeat-x;background-position:right center,left top;color:#FFF!important;}a[selected="progress"]{background-image:url(loading.gif),url(selection.png)!important;}body>.toolbar{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border-bottom:1px solid #2d3642;border-top:1px solid #6d84a2;padding:10px;height:45px;background:url(toolbar.png) #6d84a2 repeat-x;}.toolbar>h1{position:absolute;overflow:hidden;left:50%;margin:1px 0 0 -75px;height:45px;font-size:20px;width:150px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;text-overflow:ellipsis;white-space:nowrap;color:#FFF;}body[orient="landscape"]>.toolbar>h1{margin-left:-125px;width:250px;}.button{position:absolute;overflow:hidden;top:8px;right:6px;margin:0;border-width:0 5px;padding:0 3px;width:auto;height:30px;line-height:30px;font-family:inherit;font-size:12px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.6) 0 -1px 0;text-overflow:ellipsis;text-decoration:none;white-space:nowrap;background:none;-webkit-border-image:url(toolButton.png) 0 5 0 5;}.blueButton{-webkit-border-image:url(blueButton.png) 0 5 0 5;border-width:0 5px;}.leftButton{left:6px;right:auto;}#backButton{display:none;left:6px;right:auto;padding:0;max-width:55px;border-width:0 8px 0 14px;-webkit-border-image:url(backButton.png) 0 8 0 14;}.whiteButton,.redButton,.grayButton{display:block;border-width:0 12px;padding:10px;text-align:center;font-size:20px;font-weight:bold;text-decoration:inherit;color:inherit;}.whiteButton{-webkit-border-image:url(whiteButton.png) 0 12 0 12;text-shadow:rgba(255,255,255,0.7) 0 1px 0;}.redButton{-webkit-border-image:url(redButton.png) 0 12 0 12;color:#fff;text-shadow:#7a0001 0 -1px 0;}.grayButton{-webkit-border-image:url(grayButton.png) 0 12 0 12;color:#FFF;}body>ul>li{position:relative;margin:0;border-bottom:1px solid #E0E0E0;padding:8px 0 8px 10px;font-size:20px;font-weight:bold;list-style:none;}body>ul>li.group{position:relative;top:-1px;margin-bottom:-2px;border-top:1px solid #7d7d7d;border-bottom:1px solid #999;padding:1px 10px;background:url(listGroup.png) repeat-x;font-size:17px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 1px 0;color:#FFF;}body>ul>li.group:first-child{top:0;border-top:none;}body>ul>li>a{display:block;margin:-8px 0 -8px -10px;padding:8px 32px 8px 10px;text-decoration:none;color:inherit;background:url(listArrow.png) no-repeat right center;}a[target="_replace"]{box-sizing:border-box;-webkit-box-sizing:border-box;padding-top:25px;padding-bottom:25px;font-size:18px;color:cornflowerblue;background-color:#FFF;background-image:none;}body>.dialog{top:0;width:100%;min-height:417px;z-index:2;background:rgba(0,0,0,0.8);padding:0;text-align:right;}.dialog>fieldset{box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:0;border:none;border-top:1px solid #6d84a2;padding:10px 6px;background:url(toolbar.png) #7388a5 repeat-x;}.dialog>fieldset>h1{margin:0 10px 0 10px;padding:0;font-size:20px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;}.dialog>fieldset>label{position:absolute;margin:16px 0 0 6px;font-size:14px;color:#999;}input:not(input[type|=radio]):not(input[type|=checkbox]){box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:8px 0 0 0;padding:6px 6px 6px 44px;font-size:16px;font-weight:normal;}body>.panel{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:10px;background:#c8c8c8 url(pinstripes.png);}.panel>fieldset{position:relative;margin:0 0 20px 0;padding:0;background:#FFF;-webkit-border-radius:10px;-moz-border-radius:10px;border:1px solid #999;text-align:right;font-size:16px;}.row{position:relative;min-height:42px;border-bottom:1px solid #999;-webkit-border-radius:0;text-align:right;}fieldset>.row:last-child{border-bottom:none!important;}.row>input:not(input[type|=radio]):not(input[type|=checkbox]){box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin:0;border:none;padding:12px 10px 0 110px;height:42px;background:none;}.row>input[type|=radio],.row>input[type|=checkbox]{margin:7px 7px 0 0;height:25px;width:25px;}.row>label{position:absolute;margin:0 0 0 14px;line-height:42px;font-weight:bold;}.row>span{position:absolute;padding:12px 10px 0 110px;margin:0;}.row>.toggle{position:absolute;top:6px;right:6px;width:100px;height:28px;}.toggle{border:1px solid #888;-webkit-border-radius:6px;background:#FFF url(toggle.png) repeat-x;font-size:19px;font-weight:bold;line-height:30px;}.toggle[toggled="true"]{border:1px solid #143fae;background:#194fdb url(toggleOn.png) repeat-x;}.toggleOn{display:none;position:absolute;width:60px;text-align:center;left:0;top:0;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;}.toggleOff{position:absolute;width:60px;text-align:center;right:0;top:0;color:#666;}.toggle[toggled="true"]>.toggleOn{display:block;}.toggle[toggled="true"]>.toggleOff{display:none;}.thumb{position:absolute;top:-1px;left:-1px;width:40px;height:28px;border:1px solid #888;-webkit-border-radius:6px;background:#fff url(thumb.png) repeat-x;}.toggle[toggled="true"]>.thumb{left:auto;right:-1px;}.panel>h2{margin:0 0 8px 14px;font-size:inherit;font-weight:bold;color:#4d4d70;text-shadow:rgba(255,255,255,0.75) 2px 2px 0;}#preloader{display:none;background-image:url(loading.gif),url(selection.png),url(blueButton.png),url(listArrowSel.png),url(listGroup.png);}
\ No newline at end of file diff --git a/plugins/mobile/iui/iuix.js b/plugins/mobile/iui/iuix.js deleted file mode 100644 index 09d2eb993..000000000 --- a/plugins/mobile/iui/iuix.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var _1=20;var _2=0;var _3=null;var _4=null;var _5=0;var _6=location.hash;var _7="#_";var _8=[];var _9=0;var _a;var _b=false;var _c="portrait";var _d="landscape";window.iui={animOn:true,showPage:function(_e,_f){if(_e){if(_4){_4.removeAttribute("selected");_4=null;}if(hasClass(_e,"dialog")){showDialog(_e);}else{var _10=_3;_3=_e;if(_10){setTimeout(slidePages,0,_10,_e,_f);}else{updatePage(_e,_10);}}}},showPageById:function(_11){var _12=$(_11);if(_12){var _13=_8.indexOf(_11);var _14=_13!=-1;if(_14){_8.splice(_13,_8.length);}iui.showPage(_12,_14);}},showPageByHref:function(_15,_16,_17,_18,cb){var req=new XMLHttpRequest();req.onerror=function(){if(cb){cb(false);}};req.onreadystatechange=function(){if(req.readyState==4){if(_18){replaceElementWithSource(_18,req.responseText);}else{var _1b=document.createElement("div");_1b.innerHTML=req.responseText;iui.insertPages(_1b.childNodes);}if(cb){setTimeout(cb,1000,true);}}};if(_16){req.open(_17||"GET",_15,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.setRequestHeader("Content-Length",_16.length);req.send(_16.join("&"));}else{req.open(_17||"GET",_15,true);req.send(null);}},insertPages:function(_1c){var _1d;for(var i=0;i<_1c.length;++i){var _1f=_1c[i];if(_1f.nodeType==1){if(!_1f.id){_1f.id="__"+(++_9)+"__";}var _20=$(_1f.id);if(_20){_20.parentNode.replaceChild(_1f,_20);}else{document.body.appendChild(_1f);}if(_1f.getAttribute("selected")=="true"||!_1d){_1d=_1f;}--i;}}if(_1d){iui.showPage(_1d);}},getSelectedPage:function(){for(var _21=document.body.firstChild;_21;_21=_21.nextSibling){if(_21.nodeType==1&&_21.getAttribute("selected")=="true"){return _21;}}},isNativeUrl:function(_22){for(var i=0;i<iui.nativeUrlPatterns.length;i++){if(_22.match(iui.nativeUrlPatterns[i])){return true;}}return false;},nativeUrlPatterns:[new RegExp("^http://maps.google.com/maps?"),new RegExp("^mailto:"),new RegExp("^tel:"),new RegExp("^http://www.youtube.com/watch\\?v="),new RegExp("^http://www.youtube.com/v/"),new RegExp("^javascript:"),]};addEventListener("load",function(_24){var _25=iui.getSelectedPage();var _26=getPageFromLoc();if(_25){iui.showPage(_25);}if(_26&&(_26!=_25)){iui.showPage(_26);}setTimeout(preloadImages,0);if(typeof window.onorientationchange=="object"){window.onorientationchange=orientChangeHandler;_b=true;setTimeout(orientChangeHandler,0);}setTimeout(checkOrientAndLocation,0);_a=setInterval(checkOrientAndLocation,300);},false);addEventListener("unload",function(_27){return;},false);addEventListener("click",function(_28){var _29=findParent(_28.target,"a");if(_29){function unselect(){_29.removeAttribute("selected");}if(_29.href&&_29.hash&&_29.hash!="#"&&!_29.target){_29.setAttribute("selected","true");iui.showPage($(_29.hash.substr(1)));setTimeout(unselect,500);}else{if(_29==$("backButton")){history.back();}else{if(_29.getAttribute("type")=="submit"){var _2a=findParent(_29,"form");if(_2a.target=="_self"){_2a.submit();return;}submitForm(_2a);}else{if(_29.getAttribute("type")=="cancel"){cancelDialog(findParent(_29,"form"));}else{if(_29.target=="_replace"){_29.setAttribute("selected","progress");iui.showPageByHref(_29.href,null,null,_29,unselect);}else{if(iui.isNativeUrl(_29.href)){return;}else{if(_29.target=="_webapp"){location.href=_29.href;}else{if(!_29.target){_29.setAttribute("selected","progress");iui.showPageByHref(_29.href,null,null,null,unselect);}else{return;}}}}}}}}_28.preventDefault();}},true);addEventListener("click",function(_2b){var div=findParent(_2b.target,"div");if(div&&hasClass(div,"toggle")){div.setAttribute("toggled",div.getAttribute("toggled")!="true");_2b.preventDefault();}},true);function getPageFromLoc(){var _2d;var _2e=location.hash.match(/#_([^\?_]+)/);if(_2e){_2d=_2e[1];}if(_2d){_2d=$(_2d);}return _2d;}function orientChangeHandler(){var _2f=window.orientation;switch(_2f){case 0:setOrientation(_c);break;case 90:case -90:setOrientation(_d);break;}}function checkOrientAndLocation(){if(!_b){if(window.innerWidth!=_5){_5=window.innerWidth;var _30=_5==320?_c:_d;setOrientation(_30);}}if(location.hash!=_6){var _31=location.hash.substr(_7.length);iui.showPageById(_31);}}function setOrientation(_32){document.body.setAttribute("orient",_32);setTimeout(scrollTo,100,0,1);}function showDialog(_33){_4=_33;_33.setAttribute("selected","true");if(hasClass(_33,"dialog")&&!_33.target){showForm(_33);}}function showForm(_34){_34.onsubmit=function(_35){_35.preventDefault();submitForm(_34);};_34.onclick=function(_36){if(_36.target==_34&&hasClass(_34,"dialog")){cancelDialog(_34);}};}function cancelDialog(_37){_37.removeAttribute("selected");}function updatePage(_38,_39){if(!_38.id){_38.id="__"+(++_9)+"__";}location.hash=_6=_7+_38.id;_8.push(_38.id);var _3a=$("pageTitle");if(_38.title){_3a.innerHTML=_38.title;}if(_38.localName.toLowerCase()=="form"&&!_38.target){showForm(_38);}var _3b=$("backButton");if(_3b){var _3c=$(_8[_8.length-2]);if(_3c&&!_38.getAttribute("hideBackButton")){_3b.style.display="inline";_3b.innerHTML=_3c.title?_3c.title:"Back";}else{_3b.style.display="none";}}}function slidePages(_3d,_3e,_3f){var _40=(_3f?_3d:_3e).getAttribute("axis");clearInterval(_a);if(canDoSlideAnim()&&_40!="y"){slide2(_3d,_3e,_3f,slideDone);}else{slide1(_3d,_3e,_3f,_40,slideDone);}function slideDone(){if(!hasClass(_3e,"dialog")){_3d.removeAttribute("selected");}_a=setInterval(checkOrientAndLocation,300);setTimeout(updatePage,0,_3e,_3d);_3d.removeEventListener("webkitTransitionEnd",slideDone,false);}}function canDoSlideAnim(){return (iui.animOn)&&(typeof WebKitCSSMatrix=="object");}function slide1(_41,_42,_43,_44,cb){if(_44=="y"){(_43?_41:_42).style.top="100%";}else{_42.style.left="100%";}scrollTo(0,1);_42.setAttribute("selected","true");var _46=100;slide();var _47=setInterval(slide,_2);function slide(){_46-=_1;if(_46<=0){_46=0;clearInterval(_47);cb();}if(_44=="y"){_43?_41.style.top=(100-_46)+"%":_42.style.top=_46+"%";}else{_41.style.left=(_43?(100-_46):(_46-100))+"%";_42.style.left=(_43?-_46:_46)+"%";}}}function slide2(_48,_49,_4a,cb){_49.style.webkitTransitionDuration="0ms";var _4c="translateX("+(_4a?"-":"")+window.innerWidth+"px)";var _4d="translateX("+(_4a?"100%":"-100%")+")";_49.style.webkitTransform=_4c;_49.setAttribute("selected","true");_49.style.webkitTransitionDuration="";function startTrans(){_48.style.webkitTransform=_4d;_49.style.webkitTransform="translateX(0%)";}_48.addEventListener("webkitTransitionEnd",cb,false);setTimeout(startTrans,0);}function preloadImages(){var _4e=document.createElement("div");_4e.id="preloader";document.body.appendChild(_4e);}function submitForm(_4f){iui.showPageByHref(_4f.action||"POST",encodeForm(_4f),_4f.method);}function encodeForm(_50){function encode(_51){for(var i=0;i<_51.length;++i){if(_51[i].name){args.push(_51[i].name+"="+escape(_51[i].value));}}}var _53=[];encode(_50.getElementsByTagName("input"));encode(_50.getElementsByTagName("textarea"));encode(_50.getElementsByTagName("select"));return _53;}function findParent(_54,_55){while(_54&&(_54.nodeType!=1||_54.localName.toLowerCase()!=_55)){_54=_54.parentNode;}return _54;}function hasClass(_56,_57){var re=new RegExp("(^|\\s)"+_57+"($|\\s)");return re.exec(_56.getAttribute("class"))!=null;}function replaceElementWithSource(_59,_5a){var _5b=_59.parentNode;var _5c=_59;while(_5b.parentNode!=document.body){_5b=_5b.parentNode;_5c=_5c.parentNode;}var _5d=document.createElement(_5c.localName);_5d.innerHTML=_5a;_5b.removeChild(_5c);while(_5d.firstChild){_5b.appendChild(_5d.firstChild);}}function $(id){return document.getElementById(id);}function ddd(){console.log.apply(console,arguments);}})();
\ No newline at end of file diff --git a/plugins/mobile/iui/listArrow.png b/plugins/mobile/iui/listArrow.png Binary files differdeleted file mode 100644 index 6421a1676..000000000 --- a/plugins/mobile/iui/listArrow.png +++ /dev/null diff --git a/plugins/mobile/iui/listArrowSel.png b/plugins/mobile/iui/listArrowSel.png Binary files differdeleted file mode 100644 index 86832ebc7..000000000 --- a/plugins/mobile/iui/listArrowSel.png +++ /dev/null diff --git a/plugins/mobile/iui/listGroup.png b/plugins/mobile/iui/listGroup.png Binary files differdeleted file mode 100644 index 221553ae9..000000000 --- a/plugins/mobile/iui/listGroup.png +++ /dev/null diff --git a/plugins/mobile/iui/loading.gif b/plugins/mobile/iui/loading.gif Binary files differdeleted file mode 100644 index 8522ddf1a..000000000 --- a/plugins/mobile/iui/loading.gif +++ /dev/null diff --git a/plugins/mobile/iui/pinstripes.png b/plugins/mobile/iui/pinstripes.png Binary files differdeleted file mode 100644 index c99777512..000000000 --- a/plugins/mobile/iui/pinstripes.png +++ /dev/null diff --git a/plugins/mobile/iui/redButton.png b/plugins/mobile/iui/redButton.png Binary files differdeleted file mode 100644 index 210f156af..000000000 --- a/plugins/mobile/iui/redButton.png +++ /dev/null diff --git a/plugins/mobile/iui/selection.png b/plugins/mobile/iui/selection.png Binary files differdeleted file mode 100644 index 537e3f0b1..000000000 --- a/plugins/mobile/iui/selection.png +++ /dev/null diff --git a/plugins/mobile/iui/thumb.png b/plugins/mobile/iui/thumb.png Binary files differdeleted file mode 100644 index cefa8fc5e..000000000 --- a/plugins/mobile/iui/thumb.png +++ /dev/null diff --git a/plugins/mobile/iui/toggle.png b/plugins/mobile/iui/toggle.png Binary files differdeleted file mode 100644 index 3b62ebf26..000000000 --- a/plugins/mobile/iui/toggle.png +++ /dev/null diff --git a/plugins/mobile/iui/toggleOn.png b/plugins/mobile/iui/toggleOn.png Binary files differdeleted file mode 100644 index b016814de..000000000 --- a/plugins/mobile/iui/toggleOn.png +++ /dev/null diff --git a/plugins/mobile/iui/toolButton.png b/plugins/mobile/iui/toolButton.png Binary files differdeleted file mode 100644 index afe4d7a3e..000000000 --- a/plugins/mobile/iui/toolButton.png +++ /dev/null diff --git a/plugins/mobile/iui/toolbar.png b/plugins/mobile/iui/toolbar.png Binary files differdeleted file mode 100644 index 3dde94c07..000000000 --- a/plugins/mobile/iui/toolbar.png +++ /dev/null diff --git a/plugins/mobile/iui/whiteButton.png b/plugins/mobile/iui/whiteButton.png Binary files differdeleted file mode 100644 index 5514b2700..000000000 --- a/plugins/mobile/iui/whiteButton.png +++ /dev/null diff --git a/plugins/mobile/login_form.php b/plugins/mobile/login_form.php deleted file mode 100644 index be44ef1ab..000000000 --- a/plugins/mobile/login_form.php +++ /dev/null @@ -1,58 +0,0 @@ -<!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"> -<head> -<title>Tiny Tiny RSS</title> -<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/> -<link rel="apple-touch-icon" href="iui/iui-logo-touch-icon.png" /> -<meta name="apple-touch-fullscreen" content="YES" /> -<style type="text/css" media="screen">@import "iui/iui.css";</style> -<script type="application/x-javascript" src="iui/iui.js"></script> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> -</head> - - -<script type="text/javascript"> -function do_login() { - var f = document.forms['login']; - f.submit(); -} -</script> - -<body> - - <div class="toolbar"> - <h1 id="pageTitle"></h1> - <a id="backButton" class="button" href="#"></a> - <a class="button blueButton" onclick='do_login()'><?php echo __('Log in') ?></a> - </div> - - <form target="_self" title="Login" id="login" class="panel" name="login" selected="true" - action="../../public.php?return=<?php echo htmlspecialchars($_SERVER["REQUEST_URI"]) ?>" - method="post"> - - <input type="hidden" name="op" value="login"> - - <fieldset> - - <div class="row"> - <label><?php echo __("Login:") ?></label> - <input type="text" autocapitalize="off" name="login"> - </div> - - <div class="row"> - <label><?php echo __("Password:") ?></label> - <input type="password" name="password"> - </div> - - </fieldset> - - <div align='center'><a target='_self' href='<?php echo get_self_url_prefix() ?>/index.php?mobile=false'> - <?php echo __("Open regular version") ?></a> - - </form> - -</body> -</html> - diff --git a/plugins/mobile/logout.php b/plugins/mobile/logout.php deleted file mode 100644 index afc411abc..000000000 --- a/plugins/mobile/logout.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "mobile-functions.php"; - - logout_user(); - - header("Location: index.php"); -?> diff --git a/plugins/mobile/mobile-functions.php b/plugins/mobile/mobile-functions.php deleted file mode 100644 index 8e5cb7010..000000000 --- a/plugins/mobile/mobile-functions.php +++ /dev/null @@ -1,539 +0,0 @@ -<?php - require_once "functions.php"; - require_once "sessions.php"; - require_once "version.php"; - require_once "db-prefs.php"; - - define('TTRSS_SESSION_NAME', 'ttrss_m_sid'); - - /* TODO replace with interface to db-prefs */ - - function mobile_pref_toggled($link, $id) { - if (get_pref($link, "_MOBILE_$id")) - return "true"; - else - return ""; - } - - function mobile_get_pref($link, $id) { - //return $_SESSION["mobile-prefs"][$id]; - return get_pref($link, "_MOBILE_$id"); - } - - function mobile_set_pref($link, $id, $value) { - //$_SESSION["mobile-prefs"][$id] = $value; - return set_pref($link, "_MOBILE_$id", $value); - } - - function mobile_feed_has_icon($id) { - return file_exists("../../".ICONS_DIR."/$id.ico"); - } - - function render_flat_feed_list($link, $offset) { - $owner_uid = $_SESSION["uid"]; - $limit = 0; - - if (!$offset) $offset = 0; - - if (mobile_get_pref($link, "SORT_FEEDS_UNREAD")) { - $order_by = "unread DESC, title"; - } else { - $order_by = "title"; - } - - if ($limit > 0) { - $limit_qpart = "LIMIT $limit OFFSET $offset"; - } else { - $limit_qpart = ""; - } - - $result = db_query($link, "SELECT id, - title, - (SELECT COUNT(id) FROM ttrss_entries,ttrss_user_entries - WHERE feed_id = ttrss_feeds.id AND unread = true - AND ttrss_user_entries.ref_id = ttrss_entries.id - AND owner_uid = '$owner_uid') AS unread - FROM ttrss_feeds - WHERE - ttrss_feeds.owner_uid = '$owner_uid' - ORDER BY $order_by $limit_qpart"); - - if (!$offset) print '<ul id="home" title="'.__('Home').'" selected="true" - myBackLabel="'.__('Logout').'" myBackHref="logout.php" myBackTarget="_self">'; - - - // print "<li><a href='#cat-actions'>".__('Actions...')."</a></li>"; - - $num_feeds = 0; - - while ($line = db_fetch_assoc($result)) { - $id = $line["id"]; - $unread = $line["unread"]; - - // $unread = rand(0, 100); - - if ($unread > 0) { - $line["title"] = $line["title"] . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if (mobile_feed_has_icon($id)) { - $icon_url = "../../".ICONS_URL."/$id.ico"; - } else { - $icon_url = "../../images/blank_icon.gif"; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - print "<li class='$class'><a href='feed.php?id=$id'>" . - "<img class='tinyIcon' src='$icon_url'/>". - $line["title"] . "</a></li>"; - } - - ++$num_feeds; - } - -/* $next_offset = $offset + $num_feeds; - - print "<li><a href=\"home.php?skip=$next_offset\" - target=\"_replace\">Show more feeds...</a></li>"; */ - - if (!$offset) print "</ul>"; - - } - - function render_category($link, $cat_id, $offset) { - $owner_uid = $_SESSION["uid"]; - - if ($cat_id >= 0) { - - if ($cat_id != 0) { - $cat_query = "cat_id = '$cat_id'"; - } else { - $cat_query = "cat_id IS NULL"; - } - - if (mobile_get_pref($link, "SORT_FEEDS_UNREAD")) { - $order_by = "unread DESC, title"; - } else { - $order_by = "title"; - } - - $result = db_query($link, "SELECT id, - title, - (SELECT COUNT(id) FROM ttrss_entries,ttrss_user_entries - WHERE feed_id = ttrss_feeds.id AND unread = true - AND ttrss_user_entries.ref_id = ttrss_entries.id - AND owner_uid = '$owner_uid') as unread - FROM ttrss_feeds - WHERE - ttrss_feeds.owner_uid = '$owner_uid' AND - $cat_query - ORDER BY $order_by"); - - $title = getCategoryTitle($link, $cat_id); - - print "<ul id='cat-$cat_id' title='$title' myBackLabel='".__("Home")."' - myBackHref='home.php'>"; - - // print "<li><a href='#cat-actions'>".__('Actions...')."</a></li>"; - - while ($line = db_fetch_assoc($result)) { - $id = $line["id"]; - $unread = $line["unread"]; - - // $unread = rand(0, 100); - - if ($unread > 0) { - $line["title"] = $line["title"] . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if (mobile_feed_has_icon($id)) { - $icon_url = "../../".ICONS_URL."/$id.ico"; - } else { - $icon_url = "../../images/blank_icon.gif"; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - print "<li class='$class'><a href='feed.php?id=$id&cat=$cat_id'>" . - "<img class='tinyIcon' src='$icon_url'/>". - $line["title"] . "</a></li>"; - } - } - - print "</ul>"; - } else if ($cat_id == -1) { - - $title = __('Special'); - - print "<ul id='cat--1' title='$title' myBackLabel='".__("Home")."' - myBackHref='home.php'>"; - - foreach (array(-4, -3, -1, -2, 0) as $id) { - $title = getFeedTitle($link, $id); - $unread = getFeedUnread($link, $id, false); - $icon = getFeedIcon($id); - - if ($unread > 0) { - $title = $title . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - print "<li class='$class'> - <a href='feed.php?id=$id&cat=-1'> - <img class='tinyIcon' src='../$icon'/>$title</a></li>"; - } - } - - print "</ul>"; - } else if ($cat_id == -2) { - - $title = __('Labels'); - - print "<ul id='cat--2' title='$title' myBackLabel='".__("Home")."' - myBackHref='home.php'>"; - - $result = db_query($link, "SELECT id, caption FROM ttrss_labels2 - WHERE owner_uid = '$owner_uid'"); - - $label_data = array(); - - while ($line = db_fetch_assoc($result)) { - - $id = label_to_feed_id($line["id"]); - - $unread = getFeedUnread($link, $id); - $title = $line["caption"]; - - if ($unread > 0) { - $title = $title . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - print "<li class='$class'> - <a href='feed.php?id=$id&cat=-2'>$title</a></li>"; - } - } - print "</ul>"; - } - } - - function render_categories_list($link) { - $owner_uid = $_SESSION["uid"]; - - $cat_browse = mobile_get_pref($link, "BROWSE_CATS"); - - print '<ul id="home" title="'.__('Home').'" selected="true" - myBackLabel="'.__('Logout').'" myBackHref="logout.php" myBackTarget="_self">'; - -// print "<li><a href='#searchForm'>Search...</a></li>"; - - foreach (array(-1, -2) as $id) { - $title = getCategoryTitle($link, $id); - $unread = getFeedUnread($link, $id, true); - if ($unread > 0) { - $title = $title . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($cat_browse) - print "<li class='$class'><a href='cat.php?id=$id'>$title</a></li>"; - else - print "<li class='$class'><a href='feed.php?id=$id&is_cat=true'>$title</a></li>"; - } - - $result = db_query($link, "SELECT - ttrss_feed_categories.id, - ttrss_feed_categories.title, - COUNT(ttrss_feeds.id) AS num_feeds - FROM ttrss_feed_categories, ttrss_feeds - WHERE ttrss_feed_categories.owner_uid = $owner_uid - AND ttrss_feed_categories.id = cat_id - GROUP BY ttrss_feed_categories.id, - ttrss_feed_categories.title - ORDER BY ttrss_feed_categories.title"); - - while ($line = db_fetch_assoc($result)) { - - if ($line["num_feeds"] > 0) { - - $unread = getFeedUnread($link, $line["id"], true); - $id = $line["id"]; - - if ($unread > 0) { - $line["title"] = $line["title"] . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - - if ($cat_browse) - print "<li class='$class'><a href='cat.php?id=$id'>" . - $line["title"] . "</a></li>"; - else - print "<li class='$class'><a href='feed.php?id=$id&is_cat=true'>". - $line["title"] . "</a></li>"; - } - } - } - - - $result = db_query($link, "SELECT COUNT(*) AS nf FROM ttrss_feeds WHERE - cat_id IS NULL and owner_uid = '$owner_uid'"); - - $num_feeds = db_fetch_result($result, 0, "nf"); - - if ($num_feeds > 0) { - $unread = getFeedUnread($link, 0, true); - $title = "Uncategorized"; - - if ($unread > 0) { - $title = "$title ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - if ($cat_browse) - print "<li class='$class'><a href='cat.php?id=0'>$title</a></li>"; - else - print "<li class='$class'><a href='feed.php?id=0&is_cat=true'>$title</a></li>"; - - } - } - - print "</ul>"; - } - - function render_headlines_list($link, $feed_id, $cat_id, $offset, $search, - $is_cat = false) { - - $feed_id = $feed_id; - $limit = 15; - $filter = ''; - - if (!mobile_get_pref($link, "HIDE_READ")) - $view_mode = "all_articles"; - else - $view_mode = 'adaptive'; - - if ($search) { - $search_mode = 'this_feed'; - } else { - $search_mode = ''; - } - - $qfh_ret = queryFeedHeadlines($link, $feed_id, $limit, - $view_mode, $is_cat, $search, $search_mode, - "score DESC, date_entered ".(mobile_get_pref($link, 'REVERSE_HEADLINES') ? 'ASC' : 'DESC'), $offset); - - $result = $qfh_ret[0]; - $feed_title = $qfh_ret[1]; - - if (!$offset) { - - print "<form id=\"searchForm-$feed_id-$cat_id\" class=\"dialog\" method=\"POST\" - action=\"feed.php\"> - - <input type=\"hidden\" name=\"id\" value=\"$feed_id\"> - <input type=\"hidden\" name=\"cat\" value=\"$cat_id\"> - - <fieldset> - <h1>Search</h1> - <a class=\"button leftButton\" type=\"cancel\">Cancel</a> - <a class=\"button blueButton\" type=\"submit\">Search</a> - - <label>Search:</label> - <input id=\"search\" type=\"text\" name=\"search\"/> - </fieldset> - </form>"; - - if ($cat_id) { - $cat_title = getCategoryTitle($link, $cat_id); - - print "<ul id=\"feed-$feed_id\" title=\"$feed_title\" selected=\"true\" - myBackLabel='$cat_title' myBackHref='cat.php?id=$cat_id'>"; - } else { - print "<ul id=\"feed-$feed_id\" title=\"$feed_title\" selected=\"true\" - myBackLabel='".__("Home")."' myBackHref='home.php'>"; - } - - print "<li><a href='#searchForm-$feed_id-$cat_id'>Search...</a></li>"; - } - - $num_headlines = 0; - - while ($line = db_fetch_assoc($result)) { - $id = $line["id"]; - $real_feed_id = $line["feed_id"]; - - if (sql_bool_to_bool($line["unread"])) { - $class = ''; - } else { - $class = 'oldItem'; - } - - if (mobile_feed_has_icon($real_feed_id)) { - $icon_url = "../../".ICONS_URL."/$real_feed_id.ico"; - } else { - $icon_url = "../../images/blank_icon.gif"; - } - - print "<li class='$class'><a href='article.php?id=$id&feed=$feed_id&cat=$cat_id&is_cat=$is_cat'> - <img class='tinyIcon' src='$icon_url'>"; - print $line["title"]; - print "</a></li>"; - - ++$num_headlines; - - } - - if ($num_headlines == 0 && $search) { - $articles_url = "feed.php?id=$feed_id&cat=$cat_id&skip=$next_offset"; - - print "<li><a href=\"$articles_url\">" . __("Nothing found (click to reload feed).") . "</a></li>"; - - } - -// print "<a target='_replace' href='feed.php?id=$feed_id&cat=$cat_id&skip=0'>Next $limit articles...</a>"; - - $next_offset = $offset + $num_headlines; - $num_unread = getFeedUnread($link, $feed_id, $is_cat); - - /* FIXME needs normal implementation */ - - if ($num_headlines > 0 && ($num_unread == 0 || $num_unread > $next_offset)) { - - if ($is_cat) { - $articles_url = "feed.php?id=$feed_id&skip=$next_offset". - "&search=$search&is_cat=true"; - } else { - $articles_url = "feed.php?id=$feed_id&cat=$cat_id&skip=$next_offset". - "&search=$search"; - } - - print "<li><a href=\"$articles_url\" - target=\"_replace\">Get more articles...</a></li>"; - } - - if (!$offset) print "</ul>"; - - } - - function render_article($link, $id, $feed_id, $cat_id, $is_cat) { - - $query = "SELECT title,link,content,feed_id,comments,int_id, - marked,unread,published, - ".SUBSTRING_FOR_DATE."(updated,1,16) as updated, - author - FROM ttrss_entries,ttrss_user_entries - WHERE id = '$id' AND ref_id = id AND owner_uid = " . - $_SESSION["uid"] ; - - $result = db_query($link, $query); - - if (db_num_rows($result) != 0) { - - $line = db_fetch_assoc($result); - - $tmp_result = db_query($link, "UPDATE ttrss_user_entries - SET unread = false,last_read = NOW() - WHERE ref_id = '$id' - AND owner_uid = " . $_SESSION["uid"]); - - $updated_fmt = make_local_datetime($link, $line['updated'], false); - - $title = $line["title"]; - $article_link = $line["link"]; - - if (!$is_cat) - $feed_title = getFeedTitle($link, $feed_id); - else - $feed_title = getCategoryTitle($link, $feed_id); - - print "<div class=\"panel\" id=\"article-$id\" title=\"$title\" - selected=\"true\" - myBackLabel='$feed_title' myBackHref='feed.php?id=$feed_id&cat=$cat_id&is_cat=$is_cat'>"; - - if ($line['feed_id'] != $feed_id) { - $real_feed_title = getFeedTitle($link, $line['feed_id']); - $real_feed_id = $line['feed_id']; - $feed_link = "(<a href=\"feed.php?id=$real_feed_id\">$real_feed_title</a>)"; - } -// print "<fieldset>"; - - print "<div style='float : right'>($updated_fmt)</div>"; - - print "<h2><a target='_blank' href='$article_link'>$title</a> $feed_link</h2>"; - - print "<hr>"; - -/* print "<div class=\"row\">"; - print "<label id='title'><a target='_blank' href='$article_link'>$title</a></label>"; - print "</div>"; */ - - $is_starred = (sql_bool_to_bool($line["marked"])) ? "true" : "false"; - $is_published = (sql_bool_to_bool($line["published"])) ? "true" : "false"; - - //print "<div class=\"row\">"; - //print "<label id='updated'>Updated:</label>"; - //print "<input type='text' enabled='false' name='updated' disabled value='$updated_fmt'/>"; - //print "</div>"; - -// print "</fieldset>"; - - $content = sanitize($link, $line["content"]); - $content = preg_replace("/href=/i", "target=\"_blank\" href=", $content); - - if (!mobile_get_pref($link, "SHOW_IMAGES")) { - $content = preg_replace('/<img[^>]+>/is', '', $content); - } - - print "<p>$content</p>"; - - print "<div class='nav'> - <label>Navigation</label> - <div class='button left' onclick='goPrev($id, $feed_id, this)'>Prev</div> - <div class='button right' onclick='goNext($id, $feed_id, this)'>Next</div> - </div>"; - - print "<fieldset>"; - - print "<div class=\"row\"> - <label>Starred</label> - <div class=\"toggle\" onclick=\"toggleMarked($id, this)\" toggled=\"$is_starred\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div> - </div>"; - - print "<div class=\"row\"> - <label>Published</label> - <div class=\"toggle\" onclick=\"togglePublished($id, this)\" toggled=\"$is_published\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div> - </div>"; - - print "<div class=\"row\"> - <label>Unread</label> - <div class=\"toggle\" onclick=\"toggleUnread($id, this)\" toggled=\"$is_unread\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div> - </div>"; - - - print "</fieldset>"; - - print "</div>"; - - } - } -?> diff --git a/plugins/mobile/mobile.css b/plugins/mobile/mobile.css deleted file mode 100644 index 8068e3d38..000000000 --- a/plugins/mobile/mobile.css +++ /dev/null @@ -1,38 +0,0 @@ -div.nav { - height: 40px; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - background-color: #ffffff; - border: 1px solid #999999; - text-align: center; - margin-bottom: 1em; -} -div.nav label { - line-height: 40px; - color: black; - font-weight: bold; -} -div.nav .button { - position: static; - margin: 5px 10px; - -webkit-border-image: url(../lib/iui/whiteButton.png) 0 12 0 12; - text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0; - color: black; - cursor: pointer; /* On a touch screen ? */ -} -div.nav .button.left { - float: left; -} -div.nav .button.right { - float: right; -} - -ul li a.read { - color: #666666; -} - -ul li span.browse { - color : #909090; - text-align : right; - float : right; -} diff --git a/plugins/mobile/mobile.js b/plugins/mobile/mobile.js deleted file mode 100644 index 3fed3a1d7..000000000 --- a/plugins/mobile/mobile.js +++ /dev/null @@ -1,163 +0,0 @@ -var backend = "backend.php"; - -function toggleMarked(id, elem) { - - var toggled = false; - - if (elem.getAttribute("toggled") == "true") { - toggled = 1; - } else { - toggled = 0; - } - - var query = "op=toggleMarked&id=" + id + "&mark=" + toggled; - - new Ajax.Request(backend, { - parameters: query, - onComplete: function (transport) { - // - } }); -} - -function togglePublished(id, elem) { - - var toggled = false; - - if (elem.getAttribute("toggled") == "true") { - toggled = 1; - } else { - toggled = 0; - } - - var query = "op=togglePublished&id=" + id + "&pub=" + toggled; - - new Ajax.Request(backend, { - parameters: query, - onComplete: function (transport) { - // - } }); - -} - -function toggleUnread(id, elem) { - - var toggled = false; - - if (elem.getAttribute("toggled") == "true") { - toggled = 1; - } else { - toggled = 0; - } - - var query = "op=toggleUnread&id=" + id + "&unread=" + toggled; - - new Ajax.Request(backend, { - parameters: query, - onComplete: function (transport) { - // - } }); - -} - -function setPref(elem) { - var toggled = false; - var id = elem.id; - - if (elem.getAttribute("toggled") == "true") { - toggled = 1; - } else { - toggled = 0; - } - - var query = "op=setPref&id=" + id + "&to=" + toggled; - - new Ajax.Request(backend, { - parameters: query, - onComplete: function (transport) { - // - } }); - -} - -// Go directly to another item in the same feed -function goToSibling(article_id, feed_id, link, step) { - var links = linksInFeed(feed_id); - for (var i=0 ; i<links.length ; i++) { - var re = new RegExp(".*article\\.php\\?id="+article_id+"&.*"); - if (!re.test(links[i].href)) continue; - // here, we've found the current article - var index = i + step; - if (index < 0) { - markAsRead(feed_id); - iui.showPage($("feed-"+feed_id), true); - return false; - } - if (index >= links.length) { - showRestOfFeed(feed_id); - return false; - } - console.log(links[index]); - var match = links[index].href.match(/.*article\.php\?(.*)/); - var qs = match[1]; - var backwards = false; - if (step < 0) backwards = true; - link.setAttribute("selected", "progress"); - function unselect() { link.removeAttribute("selected"); } - iui.showPageByHref("article.php?"+qs, null, null, null, unselect, backwards); - return false; - } - return false; -} -function goPrev(article_id, feed_id, link) { - return goToSibling(article_id, feed_id, link, -1); -} -function goNext(article_id, feed_id, link) { - return goToSibling(article_id, feed_id, link, 1); -} - -// Get all the links in the feed. The all_links variable includes the "get more article" link -function linksInFeed(feed_id, all_links) { - var feed_content = $("feed-"+feed_id); - var links_raw = feed_content.getElementsByTagName("a"); - if (all_links) return links_raw; - var links = []; - // filter the array to remove the "get more articles" link - // and the "search" link (which is always first) - for (var i=1 ; i<links_raw.length ; i++) { - if (links_raw[i].href.match(/.*article\.php\?id=.*/)) { - links.push(links_raw[i]); - } - } - return links; -} - -// Adds the "read" class to all read links in the feed -function markAsRead(feed_id) { - var links = linksInFeed(feed_id); - for (var j=0 ; j<links.length ; j++) { - var match = links[j].href.match(/.*article\.php\?id=(\d+)&.*/); - if ($("article-"+match[1])) { - links[j].className = "read"; - } - } -} - -// Go the the articles list and expand the "get more articles" link -function showRestOfFeed(feed_id) { - var links_raw = linksInFeed(feed_id, true); - var lastlink = links_raw[links_raw.length - 1]; - if (lastlink.target == "_replace") { - // It's a "get more articles" link - iui.showPage($("feed-"+feed_id), true); - // Mark old items a "read" - markAsRead(feed_id); - // Simulate click on the "get more articles" link - lastlink.setAttribute("selected", "progress"); - function unselect() { lastlink.removeAttribute("selected"); } - setTimeout(window.scrollTo, 0, 0, 1000); - iui.showPageByHref(lastlink.href, null, null, lastlink, unselect); - } else { - iui.showPage($("home"), true); - } -} - diff --git a/plugins/mobile/prefs.php b/plugins/mobile/prefs.php deleted file mode 100644 index 323196254..000000000 --- a/plugins/mobile/prefs.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - $basedir = dirname(dirname(__FILE__)); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); -?> - -<div class="panel" id="prefs" selected="yes" title="Preferences" - myBackLabel="<?php echo __('Home') ?>" myBackHref="home.php"> - -<fieldset> - -<div class="row"> - <label><?php echo __('Enable categories') ?></label> - <div class="toggle" id="ENABLE_CATS" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "ENABLE_CATS") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -<div class="row"> - <label><?php echo __('Browse categories like folders') ?></label> - <div class="toggle" id="BROWSE_CATS" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "BROWSE_CATS") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - - -<div class="row"> - <label><?php echo __('Show images in posts') ?></label> - <div class="toggle" id="SHOW_IMAGES" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "SHOW_IMAGES") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -<div class="row"> - <label><?php echo __('Hide read articles and feeds') ?></label> - <div class="toggle" id="HIDE_READ" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "HIDE_READ") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -<div class="row"> - <label><?php echo __('Sort feeds by unread count') ?></label> - <div class="toggle" id="SORT_FEEDS_UNREAD" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "SORT_FEEDS_UNREAD") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -<div class="row"> - <label><?php echo __('Reverse headline order (oldest first)') ?></label> - <div class="toggle" id="REVERSE_HEADLINES" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "REVERSE_HEADLINES") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -</fieldset> diff --git a/plugins/note/init.php b/plugins/note/init.php index 7e8cfb57f..2a32961fc 100644 --- a/plugins/note/init.php +++ b/plugins/note/init.php @@ -1,6 +1,5 @@ <?php class Note extends Plugin { - private $link; private $host; function about() { @@ -10,7 +9,6 @@ class Note extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -29,9 +27,9 @@ class Note extends Plugin { } function edit() { - $param = db_escape_string($this->link, $_REQUEST['param']); + $param = db_escape_string($_REQUEST['param']); - $result = db_query($this->link, "SELECT note FROM ttrss_user_entries WHERE + $result = db_query("SELECT note FROM ttrss_user_entries WHERE ref_id = '$param' AND owner_uid = " . $_SESSION['uid']); $note = db_fetch_result($result, 0, "note"); @@ -58,10 +56,10 @@ class Note extends Plugin { } function setNote() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $note = trim(strip_tags(db_escape_string($this->link, $_REQUEST["note"]))); + $id = db_escape_string($_REQUEST["id"]); + $note = trim(strip_tags(db_escape_string($_REQUEST["note"]))); - db_query($this->link, "UPDATE ttrss_user_entries SET note = '$note' + db_query("UPDATE ttrss_user_entries SET note = '$note' WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); $formatted_note = format_article_note($id, $note); @@ -70,5 +68,9 @@ class Note extends Plugin { "raw_length" => mb_strlen($note))); } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/nsfw/init.php b/plugins/nsfw/init.php index 247d56a1e..a57aa4456 100644 --- a/plugins/nsfw/init.php +++ b/plugins/nsfw/init.php @@ -1,7 +1,5 @@ <?php class NSFW extends Plugin { - - private $link; private $host; function about() { @@ -12,7 +10,6 @@ class NSFW extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_RENDER_ARTICLE, $this); @@ -91,7 +88,7 @@ class NSFW extends Plugin { } function save() { - $tags = explode(",", db_escape_string($this->link, $_POST["tags"])); + $tags = explode(",", db_escape_string($_POST["tags"])); $tags = array_map("trim", $tags); $tags = array_map("mb_strtolower", $tags); $tags = join(", ", $tags); @@ -101,5 +98,9 @@ class NSFW extends Plugin { echo __("Configuration saved."); } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/share/init.php b/plugins/share/init.php index 4d7e0437c..72a4d4bf9 100644 --- a/plugins/share/init.php +++ b/plugins/share/init.php @@ -1,6 +1,5 @@ <?php class Share extends Plugin { - private $link; private $host; function about() { @@ -10,7 +9,6 @@ class Share extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -28,9 +26,9 @@ class Share extends Plugin { } function shareArticle() { - $param = db_escape_string($this->link, $_REQUEST['param']); + $param = db_escape_string($_REQUEST['param']); - $result = db_query($this->link, "SELECT uuid, ref_id FROM ttrss_user_entries WHERE int_id = '$param' + $result = db_query("SELECT uuid, ref_id FROM ttrss_user_entries WHERE int_id = '$param' AND owner_uid = " . $_SESSION['uid']); if (db_num_rows($result) == 0) { @@ -41,8 +39,8 @@ class Share extends Plugin { $ref_id = db_fetch_result($result, 0, "ref_id"); if (!$uuid) { - $uuid = db_escape_string($this->link, sha1(uniqid(rand(), true))); - db_query($this->link, "UPDATE ttrss_user_entries SET uuid = '$uuid' WHERE int_id = '$param' + $uuid = db_escape_string(sha1(uniqid(rand(), true))); + db_query("UPDATE ttrss_user_entries SET uuid = '$uuid' WHERE int_id = '$param' AND owner_uid = " . $_SESSION['uid']); } @@ -55,10 +53,10 @@ class Share extends Plugin { print "<a id='pub_opml_url' href='$url_path' target='_blank'>$url_path</a>"; print "</div>"; - /* if (!label_find_id($this->link, __('Shared'), $_SESSION["uid"])) - label_create($this->link, __('Shared'), $_SESSION["uid"]); + /* if (!label_find_id(__('Shared'), $_SESSION["uid"])) + label_create(__('Shared'), $_SESSION["uid"]); - label_add_article($this->link, $ref_id, __('Shared'), $_SESSION['uid']); */ + label_add_article($ref_id, __('Shared'), $_SESSION['uid']); */ } print "<div align='center'>"; @@ -69,6 +67,9 @@ class Share extends Plugin { print "</div>"; } + function api_version() { + return 2; + } } ?> diff --git a/plugins/swap_jk/init.php b/plugins/swap_jk/init.php index 34b09bd77..e60e7201f 100644 --- a/plugins/swap_jk/init.php +++ b/plugins/swap_jk/init.php @@ -1,7 +1,6 @@ <?php class Swap_JK extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Swap_JK extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_HOTKEY_MAP, $this); @@ -23,7 +21,11 @@ class Swap_JK extends Plugin { $hotkeys["k"] = "prev_feed"; return $hotkeys; + } + function api_version() { + return 2; } + } ?> diff --git a/plugins/updater/init.php b/plugins/updater/init.php index 6bfaa82c4..fa283c8be 100644 --- a/plugins/updater/init.php +++ b/plugins/updater/init.php @@ -1,7 +1,6 @@ <?php class Updater extends Plugin { - private $link; private $host; function about() { @@ -12,7 +11,6 @@ class Updater extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_PREFS_TAB, $this); @@ -22,7 +20,7 @@ class Updater extends Plugin { $this); } - function update_self_step($link, $step, $params, $force = false) { + function update_self_step($step, $params, $force = false) { // __FILE__ is in plugins/updater so we need to go one level up $work_dir = dirname(dirname(dirname(__FILE__))); $parent_dir = dirname($work_dir); @@ -279,13 +277,13 @@ class Updater extends Plugin { return array("step" => $step, "stop" => $stop, "params" => $params, "log" => $log); } - function update_self_cli($link, $force = false) { + function update_self_cli($force = false) { $step = 0; $stop = false; $params = array(); while (!$stop) { - $rc = $this->update_self_step($link, $step, $params, $force); + $rc = $this->update_self_step($step, $params, $force); $params = $rc['params']; $stop = $rc['stop']; @@ -309,7 +307,7 @@ class Updater extends Plugin { if ($input != 'yes' && $input != 'force') exit; - $this->update_self_cli($link, $input == 'force'); + $this->update_self_cli($input == 'force'); } function get_prefs_js() { @@ -323,7 +321,7 @@ class Updater extends Plugin { print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Update Tiny Tiny RSS')."\">"; if ($_SESSION["pref_last_version_check"] + 86400 + rand(-1000, 1000) < time()) { - $_SESSION["version_data"] = @check_for_update($this->link); + $_SESSION["version_data"] = @check_for_update(); $_SESSION["pref_last_version_check"] = time(); } @@ -378,9 +376,13 @@ class Updater extends Plugin { $force = (bool) $_REQUEST["force"]; if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) { - print json_encode($this->update_self_step($this->link, $step, $params, $force)); + print json_encode($this->update_self_step($step, $params, $force)); } } + function api_version() { + return 2; + } + } ?> @@ -125,4 +125,17 @@ ul.userFeedList { padding : 0px; } +table.prefErrorLog tr.errrow td { + font-size : 10px; +} + +table.prefErrorLog tr.errrow td.errno { + font-style : italic; + font-weight : bold; + white-space : nowrap; +} + +table.prefErrorLog td.filename, table.prefErrorLog td.login, table.prefErrorLog td.timestamp { + color : gray; +} @@ -12,6 +12,7 @@ exit; } + require_once "autoload.php"; require_once "sessions.php"; require_once "functions.php"; require_once "sanity_check.php"; @@ -19,13 +20,9 @@ require_once "config.php"; require_once "db-prefs.php"; - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); + if (!init_plugins()) return; - if (!init_connection($link)) return; - - login_sequence($link); - - no_cache_incantation(); + login_sequence(); header('Content-Type: text/html; charset=utf-8'); ?> @@ -35,19 +32,19 @@ <head> <title>Tiny Tiny RSS : <?php echo __("Preferences") ?></title> - <?php echo stylesheet_tag("lib/dijit/themes/claro/claro.css"); ?> - <?php echo stylesheet_tag("tt-rss.css"); ?> - <?php echo stylesheet_tag("prefs.css"); ?> + <?php stylesheet_tag("lib/dijit/themes/claro/claro.css"); ?> + <?php stylesheet_tag("tt-rss.css"); ?> + <?php stylesheet_tag("prefs.css"); ?> <?php if ($_SESSION["uid"]) { - $theme = get_pref($link, "USER_CSS_THEME", $_SESSION["uid"], false); + $theme = get_pref( "USER_CSS_THEME", $_SESSION["uid"], false); if ($theme) { - echo stylesheet_tag("themes/$theme"); + stylesheet_tag("themes/$theme"); } } ?> - <?php print_user_stylesheet($link) ?> + <?php print_user_stylesheet() ?> <link rel="shortcut icon" type="image/png" href="images/favicon.png"/> <link rel="icon" type="image/png" sizes="72x72" href="images/favicon-72px.png" /> @@ -61,7 +58,7 @@ "lib/dojo/tt-rss-layer.js", "errors.php?mode=js") as $jsfile) { - echo javascript_tag($jsfile); + javascript_tag($jsfile); } ?> @@ -69,9 +66,7 @@ <?php require 'lib/jshrink/Minifier.php'; - global $pluginhost; - - foreach ($pluginhost->get_plugins() as $n => $p) { + foreach (PluginHost::getInstance()->get_plugins() as $n => $p) { if (method_exists($p, "get_prefs_js")) { echo JShrink\Minifier::minify($p->get_prefs_js()); } @@ -95,7 +90,7 @@ <body id="ttrssPrefs" class="claro"> -<div id="notify" class="notify"><span id="notify_body"> </span></div> +<div id="notify" class="notify" style="display : none"></div> <div id="cmdline" style="display : none"></div> <div id="overlay"> @@ -132,9 +127,12 @@ <div id="userConfigTab" dojoType="dijit.layout.ContentPane" href="backend.php?op=pref-users" title="<?php echo __('Users') ?>"></div> + <div id="systemConfigTab" dojoType="dijit.layout.ContentPane" + href="backend.php?op=pref-system" + title="<?php echo __('System') ?>"></div> <?php } ?> <?php - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TABS, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TABS, "hook_prefs_tabs", false); ?> </div> @@ -152,7 +150,5 @@ </div> -<?php db_close($link); ?> - </body> </html> diff --git a/public.php b/public.php index 8477f95fc..33f5af757 100644 --- a/public.php +++ b/public.php @@ -17,6 +17,7 @@ $_REQUEST = array_map('stripslashes_deep', $_REQUEST); } + require_once "autoload.php"; require_once "sessions.php"; require_once "functions.php"; require_once "sanity_check.php"; @@ -28,9 +29,7 @@ $script_started = microtime(true); - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!init_connection($link)) return; + if (!init_plugins()) return; if (ENABLE_GZIP_OUTPUT && function_exists("ob_gzhandler")) { ob_start("ob_gzhandler"); @@ -38,13 +37,12 @@ $method = $_REQUEST["op"]; - global $pluginhost; - $override = $pluginhost->lookup_handler("public", $method); + $override = PluginHost::getInstance()->lookup_handler("public", $method); if ($override) { $handler = $override; } else { - $handler = new Handler_Public($link, $_REQUEST); + $handler = new Handler_Public($_REQUEST); } if (implements_interface($handler, "IHandler") && $handler->before($method)) { @@ -60,6 +58,4 @@ header("Content-Type: text/plain"); print json_encode(array("error" => array("code" => 7))); - // We close the connection to database. - db_close($link); ?> diff --git a/register.php b/register.php index 53627d912..5bc6563b0 100644 --- a/register.php +++ b/register.php @@ -8,7 +8,7 @@ get_include_path()); require_once 'classes/ttrssmailer.php'; - + require_once "autoload.php"; require_once "functions.php"; require_once "sessions.php"; require_once "sanity_check.php"; @@ -17,9 +17,7 @@ $action = $_REQUEST["action"]; - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!init_connection($link)) return; + if (!init_plugins()) return; if ($_REQUEST["format"] == "feed") { header("Content-Type: text/xml"); @@ -32,7 +30,7 @@ <link rel=\"alternate\" href=\"".htmlspecialchars(SELF_URL_PATH)."\"/>"; if (ENABLE_REGISTRATION) { - $result = db_query($link, "SELECT COUNT(*) AS cu FROM ttrss_users"); + $result = db_query( "SELECT COUNT(*) AS cu FROM ttrss_users"); $num_users = db_fetch_result($result, 0, "cu"); $num_users = REG_MAX_USERS - $num_users; @@ -60,10 +58,10 @@ /* Remove users which didn't login after receiving their registration information */ if (DB_TYPE == "pgsql") { - db_query($link, "DELETE FROM ttrss_users WHERE last_login IS NULL + db_query( "DELETE FROM ttrss_users WHERE last_login IS NULL AND created < NOW() - INTERVAL '1 day' AND access_level = 0"); } else { - db_query($link, "DELETE FROM ttrss_users WHERE last_login IS NULL + db_query( "DELETE FROM ttrss_users WHERE last_login IS NULL AND created < DATE_SUB(NOW(), INTERVAL 1 DAY) AND access_level = 0"); } @@ -74,9 +72,9 @@ if ($action == "check") { header("Content-Type: application/xml"); - $login = trim(db_escape_string($link, $_REQUEST['login'])); + $login = trim(db_escape_string( $_REQUEST['login'])); - $result = db_query($link, "SELECT id FROM ttrss_users WHERE + $result = db_query( "SELECT id FROM ttrss_users WHERE LOWER(login) = LOWER('$login')"); $is_registered = db_num_rows($result) > 0; @@ -200,7 +198,7 @@ ?> <?php if (REG_MAX_USERS > 0) { - $result = db_query($link, "SELECT COUNT(*) AS cu FROM ttrss_users"); + $result = db_query( "SELECT COUNT(*) AS cu FROM ttrss_users"); $num_users = db_fetch_result($result, 0, "cu"); } ?> @@ -244,9 +242,9 @@ <?php } else if ($action == "do_register") { ?> <?php - $login = mb_strtolower(trim(db_escape_string($link, $_REQUEST["login"]))); - $email = trim(db_escape_string($link, $_REQUEST["email"])); - $test = trim(db_escape_string($link, $_REQUEST["turing_test"])); + $login = mb_strtolower(trim(db_escape_string( $_REQUEST["login"]))); + $email = trim(db_escape_string( $_REQUEST["email"])); + $test = trim(db_escape_string( $_REQUEST["turing_test"])); if (!$login || !$email || !$test) { print_error(__("Your registration information is incomplete.")); @@ -258,7 +256,7 @@ if ($test == "four" || $test == "4") { - $result = db_query($link, "SELECT id FROM ttrss_users WHERE + $result = db_query( "SELECT id FROM ttrss_users WHERE login = '$login'"); $is_registered = db_num_rows($result) > 0; @@ -275,11 +273,11 @@ $salt = substr(bin2hex(get_random_bytes(125)), 0, 250); $pwd_hash = encrypt_password($password, $salt, true); - db_query($link, "INSERT INTO ttrss_users + db_query( "INSERT INTO ttrss_users (login,pwd_hash,access_level,last_login, email, created, salt) VALUES ('$login', '$pwd_hash', 0, null, '$email', NOW(), '$salt')"); - $result = db_query($link, "SELECT id FROM ttrss_users WHERE + $result = db_query( "SELECT id FROM ttrss_users WHERE login = '$login' AND pwd_hash = '$pwd_hash'"); if (db_num_rows($result) != 1) { @@ -291,7 +289,7 @@ $new_uid = db_fetch_result($result, 0, "id"); - initialize_user($link, $new_uid); + initialize_user( $new_uid); $reg_text = "Hi!\n". "\n". diff --git a/schema/.htaccess b/schema/.htaccess new file mode 100644 index 000000000..93169e4eb --- /dev/null +++ b/schema/.htaccess @@ -0,0 +1,2 @@ +Order deny,allow +Deny from all diff --git a/schema/ttrss_schema_mysql.sql b/schema/ttrss_schema_mysql.sql index 9ed63f42a..aa1197091 100644 --- a/schema/ttrss_schema_mysql.sql +++ b/schema/ttrss_schema_mysql.sql @@ -1,6 +1,7 @@ SET NAMES utf8; SET CHARACTER SET utf8; +drop table if exists ttrss_error_log; drop table if exists ttrss_plugin_storage; drop table if exists ttrss_linked_feeds; drop table if exists ttrss_linked_instances; @@ -108,6 +109,7 @@ create table ttrss_feeds (id integer not null auto_increment primary key, purge_interval integer not null default 0, last_updated datetime default 0, last_error varchar(250) not null default '', + favicon_avg_color varchar(11) default null, site_url varchar(250) not null default '', auth_login varchar(250) not null default '', auth_pass varchar(250) not null default '', @@ -298,7 +300,7 @@ create table ttrss_tags (id integer primary key auto_increment, create table ttrss_version (schema_version int not null) ENGINE=InnoDB DEFAULT CHARSET=UTF8; -insert into ttrss_version values (116); +insert into ttrss_version values (120); create table ttrss_enclosures (id integer primary key auto_increment, content_url text not null, @@ -383,7 +385,7 @@ insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_HIDE_READ', 1, 'false', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_SORT_FEEDS_UNREAD', 1, 'false', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_THEME_ID', 2, '0', 1); -insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_TIMEZONE', 2, 'UTC', 1); +insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_TIMEZONE', 2, 'Automatic', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_STYLESHEET', 2, '', 2); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('SORT_HEADLINES_BY_FEED_DATE', 1, 'false', 2); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_BROWSE_CATS', 1, 'true', 1); @@ -395,6 +397,7 @@ insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('AUTO_AS insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_ENABLED_PLUGINS', 2, '', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_REVERSE_HEADLINES', 1, 'false', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_CSS_THEME', 2, '', 2); +insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_LANGUAGE', 2, '', 2); update ttrss_prefs set access_level = 1 where pref_name in ('ON_CATCHUP_SHOW_NEXT_FEED', 'SORT_HEADLINES_BY_FEED_DATE', @@ -477,5 +480,15 @@ create table ttrss_plugin_storage ( content longtext not null, foreign key (owner_uid) references ttrss_users(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=UTF8; +create table ttrss_error_log( + id integer not null auto_increment primary key, + owner_uid integer, + errno integer not null, + errstr text not null, + filename text not null, + lineno integer not null, + context text not null, + created_at datetime not null, + foreign key (owner_uid) references ttrss_users(id) ON DELETE SET NULL) ENGINE=InnoDB DEFAULT CHARSET=UTF8; commit; diff --git a/schema/ttrss_schema_pgsql.sql b/schema/ttrss_schema_pgsql.sql index ec3b778cc..79634678d 100644 --- a/schema/ttrss_schema_pgsql.sql +++ b/schema/ttrss_schema_pgsql.sql @@ -1,3 +1,4 @@ +drop table if exists ttrss_error_log; drop table if exists ttrss_plugin_storage; drop table if exists ttrss_linked_feeds; drop table if exists ttrss_linked_instances; @@ -70,6 +71,7 @@ create table ttrss_feeds (id serial not null primary key, purge_interval integer not null default 0, last_updated timestamp default null, last_error text not null default '', + favicon_avg_color varchar(11) default null, site_url varchar(250) not null default '', auth_login varchar(250) not null default '', parent_feed integer default null references ttrss_feeds(id) on delete set null, @@ -256,7 +258,7 @@ create index ttrss_tags_post_int_id_idx on ttrss_tags(post_int_id); create table ttrss_version (schema_version int not null); -insert into ttrss_version values (116); +insert into ttrss_version values (120); create table ttrss_enclosures (id serial not null primary key, content_url text not null, @@ -334,7 +336,7 @@ insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_HIDE_READ', 1, 'false', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_SORT_FEEDS_UNREAD', 1, 'false', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_THEME_ID', 2, '0', 1); -insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_TIMEZONE', 2, 'UTC', 1); +insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_TIMEZONE', 2, 'Automatic', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_STYLESHEET', 2, '', 2); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('SORT_HEADLINES_BY_FEED_DATE', 1, 'false', 2); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_BROWSE_CATS', 1, 'true', 1); @@ -346,6 +348,7 @@ insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('AUTO_AS insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_ENABLED_PLUGINS', 2, '', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('_MOBILE_REVERSE_HEADLINES', 1, 'false', 1); insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_CSS_THEME', 2, '', 2); +insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_LANGUAGE', 2, '', 2); update ttrss_prefs set access_level = 1 where pref_name in ('ON_CATCHUP_SHOW_NEXT_FEED', 'SORT_HEADLINES_BY_FEED_DATE', @@ -420,4 +423,14 @@ create table ttrss_plugin_storage ( owner_uid integer not null references ttrss_users(id) ON DELETE CASCADE, content text not null); +create table ttrss_error_log( + id serial not null primary key, + owner_uid integer references ttrss_users(id) ON DELETE SET NULL, + errno integer not null, + errstr text not null, + filename text not null, + lineno integer not null, + context text not null, + created_at timestamp not null); + commit; diff --git a/schema/versions/mysql/117.sql b/schema/versions/mysql/117.sql new file mode 100644 index 000000000..da3d056cc --- /dev/null +++ b/schema/versions/mysql/117.sql @@ -0,0 +1,8 @@ +begin; + +ALTER TABLE ttrss_feeds ADD COLUMN favicon_avg_color VARCHAR(11); +alter table ttrss_feeds alter column favicon_avg_color set default null; + +update ttrss_version set schema_version = 117; + +commit; diff --git a/schema/versions/mysql/118.sql b/schema/versions/mysql/118.sql new file mode 100644 index 000000000..add2b0c1f --- /dev/null +++ b/schema/versions/mysql/118.sql @@ -0,0 +1,16 @@ +begin; + +create table ttrss_error_log( + id integer not null auto_increment primary key, + owner_uid integer, + errno integer not null, + errstr text not null, + filename text not null, + lineno integer not null, + context text not null, + created_at datetime not null, + foreign key (owner_uid) references ttrss_users(id) ON DELETE SET NULL) ENGINE=InnoDB DEFAULT CHARSET=UTF8; + +update ttrss_version set schema_version = 118; + +commit; diff --git a/schema/versions/mysql/119.sql b/schema/versions/mysql/119.sql new file mode 100644 index 000000000..ddb7d64de --- /dev/null +++ b/schema/versions/mysql/119.sql @@ -0,0 +1,7 @@ +begin; + +update ttrss_prefs set def_value = 'Automatic' where pref_name = 'USER_TIMEZONE'; + +update ttrss_version set schema_version = 119; + +commit; diff --git a/schema/versions/mysql/120.sql b/schema/versions/mysql/120.sql new file mode 100644 index 000000000..34971146e --- /dev/null +++ b/schema/versions/mysql/120.sql @@ -0,0 +1,7 @@ +begin; + +insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_LANGUAGE', 2, '', 2); + +update ttrss_version set schema_version = 120; + +commit; diff --git a/schema/versions/pgsql/117.sql b/schema/versions/pgsql/117.sql new file mode 100644 index 000000000..da3d056cc --- /dev/null +++ b/schema/versions/pgsql/117.sql @@ -0,0 +1,8 @@ +begin; + +ALTER TABLE ttrss_feeds ADD COLUMN favicon_avg_color VARCHAR(11); +alter table ttrss_feeds alter column favicon_avg_color set default null; + +update ttrss_version set schema_version = 117; + +commit; diff --git a/schema/versions/pgsql/118.sql b/schema/versions/pgsql/118.sql new file mode 100644 index 000000000..161cf4e3c --- /dev/null +++ b/schema/versions/pgsql/118.sql @@ -0,0 +1,15 @@ +begin; + +create table ttrss_error_log( + id serial not null primary key, + owner_uid integer references ttrss_users(id) ON DELETE SET NULL, + errno integer not null, + errstr text not null, + filename text not null, + lineno integer not null, + context text not null, + created_at timestamp not null); + +update ttrss_version set schema_version = 118; + +commit; diff --git a/schema/versions/pgsql/119.sql b/schema/versions/pgsql/119.sql new file mode 100644 index 000000000..ddb7d64de --- /dev/null +++ b/schema/versions/pgsql/119.sql @@ -0,0 +1,7 @@ +begin; + +update ttrss_prefs set def_value = 'Automatic' where pref_name = 'USER_TIMEZONE'; + +update ttrss_version set schema_version = 119; + +commit; diff --git a/schema/versions/pgsql/120.sql b/schema/versions/pgsql/120.sql new file mode 100644 index 000000000..34971146e --- /dev/null +++ b/schema/versions/pgsql/120.sql @@ -0,0 +1,7 @@ +begin; + +insert into ttrss_prefs (pref_name,type_id,def_value,section_id) values('USER_LANGUAGE', 2, '', 2); + +update ttrss_version set schema_version = 120; + +commit; diff --git a/templates/.htaccess b/templates/.htaccess new file mode 100644 index 000000000..93169e4eb --- /dev/null +++ b/templates/.htaccess @@ -0,0 +1,2 @@ +Order deny,allow +Deny from all diff --git a/tt-rss.css b/tt-rss.css index c328822f5..09a3505af 100644 --- a/tt-rss.css +++ b/tt-rss.css @@ -41,6 +41,7 @@ div.postReply div.postHeader { div.postReply div.postTitle { overflow : hidden; + text-overflow: ellipsis; white-space : nowrap; } @@ -56,6 +57,7 @@ div.postReply div.postContent { div.postReply div.postContent img { border-width : 0px; max-width : 98%; + height: auto; } div.postReply div.postEnclosures { @@ -130,14 +132,12 @@ a:hover { } #notify { - top : 25px; + bottom : 10px; right : 10px; border-width : 1px; border-style : solid; position : absolute; - display : none; - float : right; - font-size : 11px; + font-size : 12px; z-index : 99; padding : 5px; min-width : 200px; @@ -146,7 +146,21 @@ a:hover { #notify img { vertical-align : middle; - margin-right : 4px; + max-height : 14px; +} + +#notify span.msg { + width : 100%; +} + +#notify span.close { + text-align : right; +} + +#notify span { + display : table-cell; + vertical-align : middle; + padding : 4px; } .notify { @@ -169,26 +183,16 @@ a:hover { border-color : #ff0000; } -.notify.error span:hover { - color : red; - cursor : pointer; -} - .hl.Unread div.hlTitle { font-weight : bold; } -.hl.even.Grayed { - background : #f0f0f0; +.hl.Grayed { color : #909090; - border-width : 0px 0px 1px 0px; - border-style : solid; - border-color : #c0c0c0; - border-collapse : collapse; } -.hl.odd.Grayed { - color : #909090; +#headlines-frame div.hl:nth-child(even) { + background : #f0f0f0; } .hl { @@ -201,15 +205,6 @@ a:hover { background : #ecf4ff ! important; } -.hl.even { - background : #f0f0f0; - border-collapse : collapse; -} - -.hl.odd { - background : white; -} - div.filterTestHolder { height : 300px; overflow : auto; @@ -278,10 +273,15 @@ div.error { div.warning img, div.notice img, div.error img { margin-right : 4px; - float : left; vertical-align : middle; } +div.warning span, div.notice span, div.error span { + display : table-cell; + vertical-align : middle; + +} + ul.nomarks { list-style-type : none; margin : 0px; @@ -766,7 +766,7 @@ div.fatalError textarea { #feeds-holder { padding : 0px; - border-color : #88b0f0; + border-color : #c0c0c0; border-left-width : 0px; border-bottom-width : 0px; border-top-width : 0px; @@ -779,13 +779,9 @@ div.fatalError textarea { border-width : 0px; } -#feedTree { - overflow : visible; -} - #headlines-frame { padding : 0px; - border-color : #88b0f0; + border-color : #c0c0c0; border-left-width : 0px; border-right-width : 0px; margin-top : 0px; @@ -825,7 +821,7 @@ div.fatalError textarea { #content-insert { padding : 0px; - border-color : #88b0f0; + border-color : #c0c0c0; border-bottom-width : 0px; border-right-width : 0px; border-left-width : 0px; @@ -998,6 +994,11 @@ body#ttrssZoom div.footer { text-align : center; } +body#ttrssZoom div.postContent img { + max-width : 650px; + height : auto; +} + select.attachments { display : block; margin-top : 10px; @@ -1012,22 +1013,22 @@ div.hl.active a.title { color : #4684ff; } -#feedTree .dijitTreeRow span.counterNode { - display : none; -} - -#feedTree .dijitTreeRow.Unread span.counterNode { - display : inline; +#selected_prompt { + margin-right : 25px; } -#feedTree span.counterNode:before { - content: "("; +#feedTree .dijitTreeRow, #feedTree .dijitFocused { + padding : 1px 0px 1px; + border-width : 1px; + border-color : transparent; } -#feedTree span.counterNode:after { - content: ")"; +#feedTree .dijitTreeNode { + padding : 0px; + border-width : 0px; } -#feedTree span.counterNode { - font-weight : bold; +#feedTree { + height : 100%; + overflow-x : hidden; } diff --git a/update.php b/update.php index e1afb6bd6..f542a390b 100755 --- a/update.php +++ b/update.php @@ -7,6 +7,7 @@ chdir(dirname(__FILE__)); + require_once "autoload.php"; require_once "functions.php"; require_once "rssfuncs.php"; require_once "config.php"; @@ -17,10 +18,7 @@ if (!defined('PHP_EXECUTABLE')) define('PHP_EXECUTABLE', '/usr/bin/php'); - // Create a database connection. - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); + init_plugins(); $longopts = array("feeds", "feedbrowser", @@ -31,13 +29,14 @@ "quiet", "log:", "indexes", + "pidlock:", "update-schema", "convert-filters", "force-update", "list-plugins", "help"); - foreach ($pluginhost->get_commands() as $command => $data) { + foreach (PluginHost::getInstance()->get_commands() as $command => $data) { array_push($longopts, $command . $data["suffix"]); } @@ -80,7 +79,7 @@ print " --help - show this help\n"; print "Plugin options:\n"; - foreach ($pluginhost->get_commands() as $command => $data) { + foreach (PluginHost::getInstance()->get_commands() as $command => $data) { $args = $data['arghelp']; printf(" --%-19s - %s\n", "$command $args", $data["description"]); } @@ -88,6 +87,18 @@ return; } + if (!isset($options['daemon'])) { + require_once "errorhandler.php"; + } + + if (!isset($options['update-schema'])) { + $schema_version = get_schema_version(); + + if ($schema_version != SCHEMA_VERSION) { + die("Schema version is wrong, please upgrade the database.\n"); + } + } + define('QUIET', isset($options['quiet'])); if (isset($options["log"])) { @@ -106,9 +117,23 @@ $lock_filename = $lock_filename . "-task_" . $options["task"]; } + if (isset($options["pidlock"])) { + $my_pid = $options["pidlock"]; + $lock_filename = "update_daemon-$my_pid.lock"; + + } + + _debug("Lock: $lock_filename"); + $lock_handle = make_lockfile($lock_filename); $must_exit = false; + if (isset($options["task"]) && isset($options["pidlock"])) { + $waits = $options["task"] * 5; + _debug("Waiting before update ($waits)"); + sleep($waits); + } + // Try to lock a file in order to avoid concurrent update. if (!$lock_handle) { die("error: Can't create lockfile ($lock_filename). ". @@ -118,30 +143,19 @@ if (isset($options["force-update"])) { _debug("marking all feeds as needing update..."); - db_query($link, "UPDATE ttrss_feeds SET last_update_started = '1970-01-01', + db_query( "UPDATE ttrss_feeds SET last_update_started = '1970-01-01', last_updated = '1970-01-01'"); } if (isset($options["feeds"])) { - // Update all feeds needing a update. - update_daemon_common($link); - - // Update feedbrowser - $count = update_feedbrowser_cache($link); - _debug("Feedbrowser updated, $count feeds processed."); - - // Purge orphans and cleanup tags - purge_orphans($link, true); + update_daemon_common(); + housekeeping_common(true); - $rc = cleanup_tags($link, 14, 50000); - _debug("Cleaned $rc cached tags."); - - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op); + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $op); } if (isset($options["feedbrowser"])) { - $count = update_feedbrowser_cache($link); + $count = update_feedbrowser_cache(); print "Finished, $count feeds processed.\n"; } @@ -160,29 +174,14 @@ _debug("warning: unable to create stampfile\n"); } - // Call to the feed batch update function - // or regenerate feedbrowser cache - - if (rand(0,100) > 30) { - update_daemon_common($link); - } else { - $count = update_feedbrowser_cache($link); - _debug("Feedbrowser updated, $count feeds processed."); - - purge_orphans($link, true); - - $rc = cleanup_tags($link, 14, 50000); - - _debug("Cleaned $rc cached tags."); - - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op); - } + update_daemon_common(isset($options["pidlock"]) ? 50 : DAEMON_FEED_LIMIT); + housekeeping_common(true); + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $op); } if (isset($options["cleanup-tags"])) { - $rc = cleanup_tags($link, 14, 50000); + $rc = cleanup_tags( 14, 50000); _debug("$rc tags deleted.\n"); } @@ -196,12 +195,12 @@ _debug("clearing existing indexes..."); if (DB_TYPE == "pgsql") { - $result = db_query($link, "SELECT relname FROM + $result = db_query( "SELECT relname FROM pg_catalog.pg_class WHERE relname LIKE 'ttrss_%' AND relname NOT LIKE '%_pkey' AND relkind = 'i'"); } else { - $result = db_query($link, "SELECT index_name,table_name FROM + $result = db_query( "SELECT index_name,table_name FROM information_schema.statistics WHERE index_name LIKE 'ttrss_%'"); } @@ -214,7 +213,7 @@ $line['table_name']." DROP INDEX ".$line['index_name']; _debug($statement); } - db_query($link, $statement, false); + db_query( $statement, false); } _debug("reading indexes from schema for: " . DB_TYPE); @@ -231,7 +230,7 @@ $statement = "CREATE INDEX $index ON $table"; _debug($statement); - db_query($link, $statement); + db_query( $statement); } } fclose($fp); @@ -250,9 +249,9 @@ _debug("converting filters..."); - db_query($link, "DELETE FROM ttrss_filters2"); + db_query( "DELETE FROM ttrss_filters2"); - $result = db_query($link, "SELECT * FROM ttrss_filters ORDER BY id"); + $result = db_query( "SELECT * FROM ttrss_filters ORDER BY id"); while ($line = db_fetch_assoc($result)) { $owner_uid = $line["owner_uid"]; @@ -285,7 +284,7 @@ $_REQUEST = $filter; $_SESSION["uid"] = $owner_uid; - $filters = new Pref_Filters($link, $_REQUEST); + $filters = new Pref_Filters($_REQUEST); $filters->add(); } } @@ -295,7 +294,7 @@ if (isset($options["update-schema"])) { _debug("checking for updates (" . DB_TYPE . ")..."); - $updater = new DbUpdater($link, DB_TYPE, SCHEMA_VERSION); + $updater = new DbUpdater(Db::get(), DB_TYPE, SCHEMA_VERSION); if ($updater->isUpdateRequired()) { _debug("schema update required, version " . $updater->getSchemaVersion() . " to " . SCHEMA_VERSION); @@ -322,7 +321,7 @@ } if (isset($options["list-plugins"])) { - $tmppluginhost = new PluginHost($link); + $tmppluginhost = new PluginHost(); $tmppluginhost->load_all($tmppluginhost::KIND_ALL); $enabled = array_map("trim", explode(",", PLUGINS)); @@ -343,9 +342,7 @@ } - $pluginhost->run_commands($options); - - db_close($link); + PluginHost::getInstance()->run_commands($options); if ($lock_handle != false) { fclose($lock_handle); @@ -353,4 +350,4 @@ if (file_exists(LOCK_DIRECTORY . "/$lock_filename")) unlink(LOCK_DIRECTORY . "/$lock_filename"); -g?> +?> diff --git a/update_daemon2.php b/update_daemon2.php index c6e215a29..d5b6a45e3 100755 --- a/update_daemon2.php +++ b/update_daemon2.php @@ -9,23 +9,21 @@ define('DISABLE_SESSIONS', true); require_once "version.php"; - - if (strpos(VERSION, ".99") !== false || getenv('DAEMON_XDEBUG')) { - define('DAEMON_EXTENDED_DEBUG', true); - } - + require_once "config.php"; + require_once "autoload.php"; require_once "functions.php"; require_once "rssfuncs.php"; + + // defaults + define_default('PURGE_INTERVAL', 3600); // seconds + define_default('MAX_CHILD_RUNTIME', 1800); // seconds + define_default('MAX_JOBS', 2); + define_default('SPAWN_INTERVAL', DAEMON_SLEEP_INTERVAL); // seconds + require_once "sanity_check.php"; - require_once "config.php"; require_once "db.php"; require_once "db-prefs.php"; - // defaults - define('PURGE_INTERVAL', 3600); // seconds - define('MAX_CHILD_RUNTIME', 600); // seconds - define('MAX_JOBS', 2); - define('SPAWN_INTERVAL', DAEMON_SLEEP_INTERVAL); // seconds if (!function_exists('pcntl_fork')) { die("error: This script requires PHP compiled with PCNTL module.\n"); @@ -172,15 +170,14 @@ "Maybe another daemon is already running.\n"); } - // Testing database connection. - // It is unnecessary to start the fork loop if database is not ok. - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!init_connection($link)) die("Can't initialize db connection.\n"); + $schema_version = get_schema_version(); - $schema_version = get_schema_version($link); + if ($schema_version != SCHEMA_VERSION) { + die("Schema version is wrong, please upgrade the database.\n"); + } - db_close($link); + // Protip: children close shared database handle when terminating, it's a bad idea to + // do database stuff on main process from now on. while (true) { @@ -194,20 +191,6 @@ } if ($last_checkpoint + $spawn_interval < time()) { - - /* Check if schema version changed */ - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - if (!init_connection($link)) die("Can't initialize db connection.\n"); - $test_schema_version = get_schema_version($link); - db_close($link); - - if ($test_schema_version != $schema_version) { - echo "Expected schema version: $schema_version, got: $test_schema_version\n"; - echo "Schema version changed while we were running, bailing out\n"; - exit(100); - } - check_ctimes(); reap_children(); @@ -233,72 +216,14 @@ register_shutdown_function('task_shutdown'); - $my_pid = posix_getpid(); - $lock_filename = "update_daemon-$my_pid.lock"; - - $lock_handle = make_lockfile($lock_filename); - - if (!$lock_handle) { - die("error: Can't create lockfile ($lock_filename). ". - "Maybe another daemon is already running.\n"); - } - - // ****** Updating RSS code ******* - // Only run in fork process. - - $start_timestamp = time(); - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - if (!init_connection($link)) return; - - // We disable stamp file, since it is of no use in a multiprocess update. - // not really, tho for the time being -fox - if (!make_stampfile('update_daemon.stamp')) { - _debug("warning: unable to create stampfile\n"); - } - - // Call to the feed batch update function - // and maybe regenerate feedbrowser cache - - $nf = 0; - - _debug("Waiting before update [$j].."); - sleep($j*5); - $nf = update_daemon_common($link); - - if (rand(0,100) > 50) { - $count = update_feedbrowser_cache($link); - _debug("Feedbrowser updated, $count feeds processed."); + $quiet = (isset($options["quiet"])) ? "--quiet" : ""; - purge_orphans($link, true); - - $rc = cleanup_tags($link, 14, 50000); - - _debug("Cleaned $rc cached tags."); - - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op); - } - - _debug("Elapsed time: " . (time() - $start_timestamp) . " second(s)"); - - if ($nf > 0) { - _debug("Feeds processed: $nf"); - - if (time() - $start_timestamp > 0) { - _debug("Feeds/minute: " . sprintf("%.2d", $nf/((time()-$start_timestamp)/60))); - } - } + $my_pid = posix_getpid(); - db_close($link); + passthru(PHP_EXECUTABLE . " update.php --daemon-loop $quiet --task $j --pidlock $my_pid"); - // We are in a fork. - // We wait a little before exiting to avoid to be faster than our parent process. sleep(1); - unlink(LOCK_DIRECTORY . "/$lock_filename"); - // We exit in order to avoid fork bombing. exit(0); } diff --git a/utility.css b/utility.css index 308b71fd0..50a54e154 100644 --- a/utility.css +++ b/utility.css @@ -73,7 +73,11 @@ div.error { div.warning img, div.notice img, div.error img { margin-right : 4px; - float : left; + vertical-align : middle; +} + +div.warning span, div.notice span, div.error span { + display : table-cell; vertical-align : middle; } @@ -221,3 +225,27 @@ fieldset label { color : gray; } +body.otp { + margin : 1em; + padding : 0px; +} + +form.otpform { + margin : 0px; + padding : 0px; +} + +form.otpform label { + margin : 0px; + padding : 0px; +} + +body.otp div.content { + display : inline-block; + width : auto; +} + +span.hint { + font-size : 10px; + color : gray; +} diff --git a/utils/.htaccess b/utils/.htaccess new file mode 100644 index 000000000..93169e4eb --- /dev/null +++ b/utils/.htaccess @@ -0,0 +1,2 @@ +Order deny,allow +Deny from all |