summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--.htaccess3
-rw-r--r--api/index.php9
-rw-r--r--backend.php23
-rw-r--r--cache/upload/.empty (renamed from plugins/example_article/init.js)0
-rw-r--r--cdm.css1
-rw-r--r--classes/.htaccess2
-rw-r--r--classes/api.php300
-rw-r--r--classes/article.php118
-rw-r--r--classes/auth/base.php22
-rw-r--r--classes/backend.php6
-rw-r--r--classes/db.php98
-rw-r--r--classes/db/mysql.php73
-rw-r--r--classes/db/mysqli.php77
-rw-r--r--classes/db/pdo.php100
-rw-r--r--classes/db/pgsql.php82
-rw-r--r--classes/db/prefs.php190
-rw-r--r--classes/db/stmt.php32
-rw-r--r--classes/dbupdater.php16
-rw-r--r--classes/dlg.php26
-rw-r--r--classes/feedenclosure.php7
-rw-r--r--classes/feeditem.php15
-rw-r--r--classes/feeditem/atom.php109
-rw-r--r--classes/feeditem/common.php51
-rw-r--r--classes/feeditem/rss.php107
-rw-r--r--classes/feedparser.php180
-rw-r--r--classes/feeds.php279
-rw-r--r--classes/handler.php6
-rw-r--r--classes/handler/public.php219
-rw-r--r--classes/idb.php13
-rw-r--r--classes/logger.php65
-rw-r--r--classes/logger/sql.php28
-rw-r--r--classes/logger/syslog.php31
-rw-r--r--classes/opml.php160
-rw-r--r--classes/plugin.php10
-rw-r--r--classes/pluginhandler.php4
-rw-r--r--classes/pluginhost.php88
-rw-r--r--classes/pref/feeds.php465
-rw-r--r--classes/pref/filters.php185
-rw-r--r--classes/pref/labels.php79
-rw-r--r--classes/pref/prefs.php195
-rw-r--r--classes/pref/system.php90
-rw-r--r--classes/pref/users.php107
-rw-r--r--classes/rpc.php292
-rw-r--r--classes/sanitizedummy.php7
-rw-r--r--classes/ttrssmailer.php34
-rw-r--r--config.php-dist34
-rw-r--r--feed-icons/index.html0
-rw-r--r--images/close_notify.svg76
-rw-r--r--include/autoload.php14
-rw-r--r--include/ccache.php78
-rw-r--r--include/colors.php82
-rw-r--r--include/crypt.php36
-rw-r--r--include/db-prefs.php183
-rw-r--r--include/db.php126
-rw-r--r--include/digest.php36
-rw-r--r--include/errorhandler.php37
-rw-r--r--include/feedbrowser.php8
-rw-r--r--include/functions.php884
-rw-r--r--include/labels.php82
-rw-r--r--include/login_form.php16
-rw-r--r--include/rssfuncs.php697
-rw-r--r--include/sanity_check.php32
-rw-r--r--include/sanity_config.php4
-rw-r--r--include/sessions.php95
-rw-r--r--include/version.php18
-rw-r--r--index.php54
-rw-r--r--install/index.php77
-rw-r--r--js/FeedTree.js2
-rw-r--r--js/PluginHost.js34
-rw-r--r--js/feedlist.js3
-rw-r--r--js/functions.js143
-rw-r--r--js/index.html0
-rw-r--r--js/prefs.js49
-rw-r--r--js/tt-rss.js27
-rw-r--r--js/viewfeed.js138
-rw-r--r--lib/MiniTemplator.class.php4
-rw-r--r--lib/floIcon.php849
-rw-r--r--lib/index.html0
-rw-r--r--lib/phpqrcode/bindings/tcpdf/qrcode.php8
-rw-r--r--lib/phpqrcode/phpqrcode.php12
-rw-r--r--lib/phpqrcode/qrencode.php2
-rw-r--r--lib/phpqrcode/qrmask.php4
-rw-r--r--lib/phpqrcode/qrsplit.php8
-rw-r--r--lib/simplepie/simplepie.inc17772
-rw-r--r--lib/timezones.txt1
-rw-r--r--locale/.htaccess2
-rw-r--r--locale/ca_CA/LC_MESSAGES/messages.mobin23989 -> 23924 bytes
-rw-r--r--locale/ca_CA/LC_MESSAGES/messages.po1786
-rw-r--r--locale/cs_CZ/LC_MESSAGES/messages.mobin59643 -> 62404 bytes
-rw-r--r--locale/cs_CZ/LC_MESSAGES/messages.po1839
-rwxr-xr-xlocale/de_DE/LC_MESSAGES/messages.mobin63479 -> 66102 bytes
-rwxr-xr-xlocale/de_DE/LC_MESSAGES/messages.po2369
-rw-r--r--locale/es_ES/LC_MESSAGES/messages.mobin65163 -> 68105 bytes
-rw-r--r--locale/es_ES/LC_MESSAGES/messages.po2562
-rw-r--r--locale/fi_FI/LC_MESSAGES/messages.mobin38710 -> 42356 bytes
-rw-r--r--locale/fi_FI/LC_MESSAGES/messages.po2179
-rw-r--r--locale/fr_FR/LC_MESSAGES/messages.mobin65256 -> 68002 bytes
-rw-r--r--locale/fr_FR/LC_MESSAGES/messages.po2404
-rw-r--r--locale/hu_HU/LC_MESSAGES/messages.mobin52604 -> 51926 bytes
-rw-r--r--locale/hu_HU/LC_MESSAGES/messages.po1781
-rw-r--r--locale/it_IT/LC_MESSAGES/messages.mobin36379 -> 35860 bytes
-rw-r--r--locale/it_IT/LC_MESSAGES/messages.po1764
-rw-r--r--locale/ja_JP/LC_MESSAGES/messages.mobin24719 -> 24564 bytes
-rw-r--r--locale/ja_JP/LC_MESSAGES/messages.po1791
-rw-r--r--locale/lv_LV/LC_MESSAGES/messages.mobin45255 -> 44585 bytes
-rw-r--r--locale/lv_LV/LC_MESSAGES/messages.po1775
-rw-r--r--locale/nb_NO/LC_MESSAGES/messages.mobin22722 -> 22671 bytes
-rw-r--r--locale/nb_NO/LC_MESSAGES/messages.po1785
-rw-r--r--locale/nl_NL/LC_MESSAGES/messages.mobin50361 -> 65016 bytes
-rw-r--r--locale/nl_NL/LC_MESSAGES/messages.po2683
-rw-r--r--locale/pl_PL/LC_MESSAGES/messages.mobin59961 -> 66402 bytes
-rw-r--r--locale/pl_PL/LC_MESSAGES/messages.po1915
-rw-r--r--locale/pt_BR/LC_MESSAGES/messages.mobin6662 -> 6580 bytes
-rw-r--r--locale/pt_BR/LC_MESSAGES/messages.po1770
-rw-r--r--locale/ru_RU/LC_MESSAGES/messages.mobin38198 -> 37584 bytes
-rw-r--r--locale/ru_RU/LC_MESSAGES/messages.po1785
-rw-r--r--locale/sv_SE/LC_MESSAGES/messages.mobin47672 -> 62802 bytes
-rw-r--r--locale/sv_SE/LC_MESSAGES/messages.po2648
-rw-r--r--locale/zh_CN/LC_MESSAGES/messages.mobin34292 -> 33808 bytes
-rw-r--r--locale/zh_CN/LC_MESSAGES/messages.po1763
-rw-r--r--messages.pot1373
-rw-r--r--opml.php13
-rw-r--r--plugins/af_buttersafe/init.php7
-rw-r--r--plugins/af_explosm/init.php6
-rw-r--r--plugins/af_gocomics/init.php8
-rw-r--r--plugins/af_pennyarcade/init.php23
-rw-r--r--plugins/af_redditimgur/init.php8
-rw-r--r--plugins/af_unburn/init.php14
-rw-r--r--plugins/auth_internal/init.php47
-rw-r--r--plugins/auth_remote/init.php29
-rw-r--r--plugins/bookmarklets/init.php7
-rw-r--r--plugins/close_button/init.php9
-rw-r--r--plugins/digest/digest.css337
-rw-r--r--plugins/digest/digest.js924
-rw-r--r--plugins/digest/digest_body.php99
-rw-r--r--plugins/digest/images/tile.pngbin958 -> 0 bytes
-rw-r--r--plugins/digest/init.php110
-rw-r--r--plugins/digest/mobile.css345
-rw-r--r--plugins/embed_original/init.php10
-rw-r--r--plugins/example/example.js3
-rw-r--r--plugins/example/init.php83
-rw-r--r--plugins/example_article/init.php31
-rw-r--r--plugins/example_feed/init.php29
-rw-r--r--plugins/example_routing/init.php54
-rw-r--r--plugins/example_vfeed/init.php49
-rw-r--r--plugins/googlereaderimport/init.php106
-rw-r--r--plugins/googlereaderkeys/init.php7
-rw-r--r--plugins/import_export/init.php77
-rw-r--r--plugins/index.html0
-rw-r--r--plugins/instances/init.php77
-rw-r--r--plugins/mail/init.php28
-rw-r--r--plugins/mail/mail.js1
-rw-r--r--plugins/mailto/init.php15
-rw-r--r--plugins/mark_button/init.php9
-rw-r--r--plugins/mobile/article.php32
-rw-r--r--plugins/mobile/backend.php63
-rw-r--r--plugins/mobile/cat.php29
-rw-r--r--plugins/mobile/feed.php33
-rw-r--r--plugins/mobile/home.php33
-rw-r--r--plugins/mobile/index.php90
-rw-r--r--plugins/mobile/init.php45
-rw-r--r--plugins/mobile/iui/LICENSE.txt21
-rw-r--r--plugins/mobile/iui/NOTICE.txt33
-rw-r--r--plugins/mobile/iui/backButton.pngbin816 -> 0 bytes
-rw-r--r--plugins/mobile/iui/blueButton.pngbin517 -> 0 bytes
-rw-r--r--plugins/mobile/iui/cancel.pngbin362 -> 0 bytes
-rw-r--r--plugins/mobile/iui/grayButton.pngbin943 -> 0 bytes
-rw-r--r--plugins/mobile/iui/iui-logo-touch-icon.pngbin2887 -> 0 bytes
-rw-r--r--plugins/mobile/iui/iui.css398
-rw-r--r--plugins/mobile/iui/iui.js542
-rw-r--r--plugins/mobile/iui/iuix.css1
-rw-r--r--plugins/mobile/iui/iuix.js1
-rw-r--r--plugins/mobile/iui/listArrow.pngbin259 -> 0 bytes
-rw-r--r--plugins/mobile/iui/listArrowSel.pngbin308 -> 0 bytes
-rw-r--r--plugins/mobile/iui/listGroup.pngbin2867 -> 0 bytes
-rw-r--r--plugins/mobile/iui/loading.gifbin1435 -> 0 bytes
-rw-r--r--plugins/mobile/iui/pinstripes.pngbin117 -> 0 bytes
-rw-r--r--plugins/mobile/iui/redButton.pngbin947 -> 0 bytes
-rw-r--r--plugins/mobile/iui/selection.pngbin159 -> 0 bytes
-rw-r--r--plugins/mobile/iui/thumb.pngbin2835 -> 0 bytes
-rw-r--r--plugins/mobile/iui/toggle.pngbin2815 -> 0 bytes
-rw-r--r--plugins/mobile/iui/toggleOn.pngbin163 -> 0 bytes
-rw-r--r--plugins/mobile/iui/toolButton.pngbin531 -> 0 bytes
-rw-r--r--plugins/mobile/iui/toolbar.pngbin171 -> 0 bytes
-rw-r--r--plugins/mobile/iui/whiteButton.pngbin978 -> 0 bytes
-rw-r--r--plugins/mobile/login_form.php58
-rw-r--r--plugins/mobile/logout.php15
-rw-r--r--plugins/mobile/mobile-functions.php539
-rw-r--r--plugins/mobile/mobile.css38
-rw-r--r--plugins/mobile/mobile.js163
-rw-r--r--plugins/mobile/prefs.php64
-rw-r--r--plugins/note/init.php16
-rw-r--r--plugins/nsfw/init.php9
-rw-r--r--plugins/share/init.php19
-rw-r--r--plugins/swap_jk/init.php6
-rw-r--r--plugins/updater/init.php18
-rw-r--r--prefs.css13
-rw-r--r--prefs.php36
-rw-r--r--public.php12
-rw-r--r--register.php32
-rw-r--r--schema/.htaccess2
-rw-r--r--schema/ttrss_schema_mysql.sql17
-rw-r--r--schema/ttrss_schema_pgsql.sql17
-rw-r--r--schema/versions/mysql/117.sql8
-rw-r--r--schema/versions/mysql/118.sql16
-rw-r--r--schema/versions/mysql/119.sql7
-rw-r--r--schema/versions/mysql/120.sql7
-rw-r--r--schema/versions/pgsql/117.sql8
-rw-r--r--schema/versions/pgsql/118.sql15
-rw-r--r--schema/versions/pgsql/119.sql7
-rw-r--r--schema/versions/pgsql/120.sql7
-rw-r--r--templates/.htaccess2
-rw-r--r--tt-rss.css95
-rwxr-xr-xupdate.php105
-rwxr-xr-xupdate_daemon2.php111
-rw-r--r--utility.css30
-rw-r--r--utils/.htaccess2
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
diff --git a/cdm.css b/cdm.css
index 9893f43fc..657950140 100644
--- a/cdm.css
+++ b/cdm.css
@@ -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 = " &mdash; $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'] .= "&nbsp;";
- $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 "&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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'>&alpha;</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 "&nbsp;<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&nbsp;<a href=\"".$line["site_url"]."\">".$line["title"]."</a></li>";
-
- $row_class = $row_class == "even" ? "odd" : "even";
+ print "<li>$feed_icon&nbsp;<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\">&nbsp;...</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 .= ", &hellip;";
- }
+ if (count($tags) > $maxtags)
+ $tags_str .= ", &hellip;";
- 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>&nbsp;</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());
?>
diff --git a/index.php b/index.php
index b3f63d461..29b8b173d 100644
--- a/index.php
+++ b/index.php
@@ -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">&nbsp;</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>&amp;</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 <[email protected]>
- * @author elfrink at introweb dot nl
- * @author Josh Peck <jmp at joshpeck dot org>
- * @author Geoffrey Sneddon <[email protected]>
- */
-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 <[email protected]>
- * @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>&amp;</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 "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
- }
- 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
index 396309460..a6410560f 100644
--- a/locale/ca_CA/LC_MESSAGES/messages.mo
+++ b/locale/ca_CA/LC_MESSAGES/messages.mo
Binary files differ
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ó <[email protected]>\n"
"Language-Team: Català <[email protected]>\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&nbsp;:"
-#: 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&nbsp;:"
-#: 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&nbsp;:"
-#: 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&nbsp;:"
-#: 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&nbsp;:"
-#, fuzzy
-#~ msgid "Last updated:"
-#~ msgstr "Dernière mise à jour&nbsp;:"
-
#~ msgid "Other feeds: Top 25"
#~ msgstr "Autres flux&nbsp;: Top 25"
diff --git a/locale/cs_CZ/LC_MESSAGES/messages.mo b/locale/cs_CZ/LC_MESSAGES/messages.mo
index 23b0c1a52..40447152d 100644
--- a/locale/cs_CZ/LC_MESSAGES/messages.mo
+++ b/locale/cs_CZ/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\n"
"Language-Team: Czech <[email protected]>\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
index e0dfca1eb..c1f0b383e 100755
--- a/locale/de_DE/LC_MESSAGES/messages.mo
+++ b/locale/de_DE/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\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. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;."
-msgstr "Falsche Version des Datenbankschemas. &lt;a href='update.php'&gt;Bitte aktualisieren&lt;/a&gt;."
+msgid ""
+"Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please "
+"update&lt;/a&gt;."
+msgstr ""
+"Falsche Version des Datenbankschemas. &lt;a href='update.php'&gt;Bitte "
+"aktualisieren&lt;/a&gt;."
#: 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
index b46d46933..8d749b9e2 100644
--- a/locale/es_ES/LC_MESSAGES/messages.mo
+++ b/locale/es_ES/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\n"
"Language-Team: Español <[email protected]>\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. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;."
-msgstr "La versión del esquema de la base de datos es incorrecta. &lt;a href='update.php'&gt;Por favor, actualice&lt;/a&gt;."
+msgid ""
+"Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please "
+"update&lt;/a&gt;."
+msgstr ""
+"La versión del esquema de la base de datos es incorrecta. &lt;a href='update."
+"php'&gt;Por favor, actualice&lt;/a&gt;."
#: 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
index dd7f3ea16..34ccc85fd 100644
--- a/locale/fi_FI/LC_MESSAGES/messages.mo
+++ b/locale/fi_FI/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\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
index 4d50abe90..bcbef187a 100644
--- a/locale/fr_FR/LC_MESSAGES/messages.mo
+++ b/locale/fr_FR/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\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. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;."
-msgstr "Version non valable pour le schéma de la base de données. &lt;a href='db-updater.php'&gt;Veuillez le mettre à jour&lt;/a&gt;."
+msgid ""
+"Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please "
+"update&lt;/a&gt;."
+msgstr ""
+"Version non valable pour le schéma de la base de données. &lt;a href='db-"
+"updater.php'&gt;Veuillez le mettre à jour&lt;/a&gt;."
#: 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
index 6c9c1c3bf..aa0d5abd5 100644
--- a/locale/hu_HU/LC_MESSAGES/messages.mo
+++ b/locale/hu_HU/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\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
index b252f8b94..8c19af828 100644
--- a/locale/it_IT/LC_MESSAGES/messages.mo
+++ b/locale/it_IT/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\n"
"Language-Team: LANGUAGE <[email protected]>\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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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
index ce593d426..0b0bc9221 100644
--- a/locale/ja_JP/LC_MESSAGES/messages.mo
+++ b/locale/ja_JP/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\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
index a4d1d92b3..800c2fb6c 100644
--- a/locale/lv_LV/LC_MESSAGES/messages.mo
+++ b/locale/lv_LV/LC_MESSAGES/messages.mo
Binary files differ
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ņš <[email protected]>\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
index 4aaff6f12..b12aac593 100644
--- a/locale/nb_NO/LC_MESSAGES/messages.mo
+++ b/locale/nb_NO/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\n"
"Language-Team: Norwegian Bokmål <[email protected]>\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
index 16175a8af..e4537668d 100644
--- a/locale/nl_NL/LC_MESSAGES/messages.mo
+++ b/locale/nl_NL/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\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 <[email protected]>\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. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;."
-msgstr "Onjuiste database schema versie. &lt;a href='db-updater.php'&gt;Bijwerken aub!&lt;/a&gt;."
+msgid ""
+"Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please "
+"update&lt;/a&gt;."
+msgstr ""
+"Onjuiste database schema versie. &lt;a href='db-updater.php'&gt;Bijwerken "
+"aub!&lt;/a&gt;."
#: 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
index ec391e011..86b35841d 100644
--- a/locale/pl_PL/LC_MESSAGES/messages.mo
+++ b/locale/pl_PL/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\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
index 5bf59fa44..3add14d83 100644
--- a/locale/pt_BR/LC_MESSAGES/messages.mo
+++ b/locale/pt_BR/LC_MESSAGES/messages.mo
Binary files differ
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) <[email protected]>\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 "&nbsp;&nbsp;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 "&nbsp;&nbsp;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
index de9d096eb..58731f8f3 100644
--- a/locale/ru_RU/LC_MESSAGES/messages.mo
+++ b/locale/ru_RU/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\n"
"Language-Team: Русский <[email protected]>\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 "&nbsp;&nbsp;Показать/скрыть прочитанные"
-#: 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
index fbad313e9..0783eb2d2 100644
--- a/locale/sv_SE/LC_MESSAGES/messages.mo
+++ b/locale/sv_SE/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>, 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 <[email protected]>\n"
+"Language-Team: Mattias Tengblad <[email protected]>\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. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;."
-msgstr "Fel version av datenbasschema. &lt;a href='update.php'&gt;Vänligen uppdatera&lt;/a&gt;."
+msgid ""
+"Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please "
+"update&lt;/a&gt;."
+msgstr ""
+"Felaktig version för databasshema. &lt;a href='db-updater.php'&gt;Vänligen "
+"uppdatera&lt;/a&gt;."
#: 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
index a6e1ee66e..8e3651999 100644
--- a/locale/zh_CN/LC_MESSAGES/messages.mo
+++ b/locale/zh_CN/LC_MESSAGES/messages.mo
Binary files differ
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 <[email protected]>\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 <[email protected]>\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 ""
diff --git a/opml.php b/opml.php
index b8c9fb6c5..af3694051 100644
--- a/opml.php
+++ b/opml.php
@@ -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) + "&hellip;" :
- 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 + "&note=" + param_escape(note);
- } else {
- query = query + "&note=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">&nbsp;</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
deleted file mode 100644
index 72f2f4553..000000000
--- a/plugins/digest/images/tile.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index e27ea8cdf..000000000
--- a/plugins/mobile/iui/backButton.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/blueButton.png b/plugins/mobile/iui/blueButton.png
deleted file mode 100644
index 0f92dfd94..000000000
--- a/plugins/mobile/iui/blueButton.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/cancel.png b/plugins/mobile/iui/cancel.png
deleted file mode 100644
index 5f6dcc87d..000000000
--- a/plugins/mobile/iui/cancel.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/grayButton.png b/plugins/mobile/iui/grayButton.png
deleted file mode 100644
index 0ce6a30d4..000000000
--- a/plugins/mobile/iui/grayButton.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/iui-logo-touch-icon.png b/plugins/mobile/iui/iui-logo-touch-icon.png
deleted file mode 100644
index 8817b3022..000000000
--- a/plugins/mobile/iui/iui-logo-touch-icon.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 6421a1676..000000000
--- a/plugins/mobile/iui/listArrow.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/listArrowSel.png b/plugins/mobile/iui/listArrowSel.png
deleted file mode 100644
index 86832ebc7..000000000
--- a/plugins/mobile/iui/listArrowSel.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/listGroup.png b/plugins/mobile/iui/listGroup.png
deleted file mode 100644
index 221553ae9..000000000
--- a/plugins/mobile/iui/listGroup.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/loading.gif b/plugins/mobile/iui/loading.gif
deleted file mode 100644
index 8522ddf1a..000000000
--- a/plugins/mobile/iui/loading.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/pinstripes.png b/plugins/mobile/iui/pinstripes.png
deleted file mode 100644
index c99777512..000000000
--- a/plugins/mobile/iui/pinstripes.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/redButton.png b/plugins/mobile/iui/redButton.png
deleted file mode 100644
index 210f156af..000000000
--- a/plugins/mobile/iui/redButton.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/selection.png b/plugins/mobile/iui/selection.png
deleted file mode 100644
index 537e3f0b1..000000000
--- a/plugins/mobile/iui/selection.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/thumb.png b/plugins/mobile/iui/thumb.png
deleted file mode 100644
index cefa8fc5e..000000000
--- a/plugins/mobile/iui/thumb.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/toggle.png b/plugins/mobile/iui/toggle.png
deleted file mode 100644
index 3b62ebf26..000000000
--- a/plugins/mobile/iui/toggle.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/toggleOn.png b/plugins/mobile/iui/toggleOn.png
deleted file mode 100644
index b016814de..000000000
--- a/plugins/mobile/iui/toggleOn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/toolButton.png b/plugins/mobile/iui/toolButton.png
deleted file mode 100644
index afe4d7a3e..000000000
--- a/plugins/mobile/iui/toolButton.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/toolbar.png b/plugins/mobile/iui/toolbar.png
deleted file mode 100644
index 3dde94c07..000000000
--- a/plugins/mobile/iui/toolbar.png
+++ /dev/null
Binary files differ
diff --git a/plugins/mobile/iui/whiteButton.png b/plugins/mobile/iui/whiteButton.png
deleted file mode 100644
index 5514b2700..000000000
--- a/plugins/mobile/iui/whiteButton.png
+++ /dev/null
Binary files differ
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;
+ }
+
}
?>
diff --git a/prefs.css b/prefs.css
index 353fbe80b..254de4f34 100644
--- a/prefs.css
+++ b/prefs.css
@@ -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;
+}
diff --git a/prefs.php b/prefs.php
index ea531e2c6..b617d94bc 100644
--- a/prefs.php
+++ b/prefs.php
@@ -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">&nbsp;</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