From 1fe66ad020ca8f0560bb9c6e311852ed77228f78 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 28 Feb 2022 20:22:43 +0100 Subject: Implement Web scraping "HTML + XPath" (#4220) * More PHP type hints for Fever Follow-up of https://github.com/FreshRSS/FreshRSS/pull/4201 Related to https://github.com/FreshRSS/FreshRSS/issues/4200 * Detail * Draft * Progress * More draft * Fix thumbnail PHP type hint https://github.com/FreshRSS/FreshRSS/issues/4215 * More types * A bit more * Refactor FreshRSS_Entry::fromArray * Progress * Starts to work * Categories * Fonctional * Layout update * Fix relative URLs * Cache system * Forgotten files * Remove a debug line * Automatic form validation of XPath expressions * data-leave-validation * Fix reload action * Simpler examples * Fix column type for PostgreSQL * Enforce HTTP encoding * Readme * Fix get full content * target="_blank" * gitignore * htmlspecialchars_utf8 * Implement HTML And fix/revert `xml:base` support in SimplePie https://github.com/simplepie/simplepie/commit/e49c578817aa504d8d05cd7f33857aeda9d41908 * SimplePie upstream PR merged https://github.com/simplepie/simplepie/pull/723 --- app/i18n/cz/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/de/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/en-us/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/en/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/es/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/fr/admin.php | 6 +++--- app/i18n/fr/conf.php | 4 ++-- app/i18n/fr/install.php | 6 +++--- app/i18n/fr/sub.php | 45 ++++++++++++++++++++++++++++++++++++++++++++- app/i18n/fr/user.php | 20 ++++++++++---------- app/i18n/he/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/it/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/ja/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/ko/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/nl/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/oc/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/pl/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/pt-br/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/ru/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/sk/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/tr/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/zh-cn/sub.php | 43 +++++++++++++++++++++++++++++++++++++++++++ 22 files changed, 793 insertions(+), 19 deletions(-) (limited to 'app/i18n') diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php index 8b896586d..2eff49030 100644 --- a/app/i18n/cz/sub.php +++ b/app/i18n/cz/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Informace', 'keep_min' => 'Minimální počet článků pro ponechání', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Vymazat mezipaměť', 'clear_cache_help' => 'Vymazat mezipaměť pro tento kanál.', diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php index 2b52b59ee..52323221d 100644 --- a/app/i18n/de/sub.php +++ b/app/i18n/de/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Information', // IGNORE 'keep_min' => 'Minimale Anzahl an Artikeln, die behalten wird', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Zwischenspeicher leeren', 'clear_cache_help' => 'Zwischenspeicher für diesen Feed leeren.', diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php index fc1c8358e..41b8c377b 100644 --- a/app/i18n/en-us/sub.php +++ b/app/i18n/en-us/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Information', // IGNORE 'keep_min' => 'Minimum number of articles to keep', // IGNORE + 'kind' => array( + '_' => 'Type of feed source', // IGNORE + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // IGNORE + 'feed_title' => array( + '_' => 'feed title', // IGNORE + 'help' => 'Example: //title or a static string: "My custom feed"', // IGNORE + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // IGNORE + 'item' => array( + '_' => 'finding news items
(most important)', // IGNORE + 'help' => 'Example: //div[@class="news-item"]', // IGNORE + ), + 'item_author' => array( + '_' => 'item author', // IGNORE + 'help' => 'Can also be a static string. Example: "Anonymous"', // IGNORE + ), + 'item_categories' => 'items tags', // IGNORE + 'item_content' => array( + '_' => 'item content', // IGNORE + 'help' => 'Example to take the full item: .', // IGNORE + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // IGNORE + 'help' => 'Example: descendant::img/@src', // IGNORE + ), + 'item_timestamp' => array( + '_' => 'item date', // IGNORE + 'help' => 'The result will be parsed by strtotime()', // IGNORE + ), + 'item_title' => array( + '_' => 'item title', // IGNORE + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // IGNORE + ), + 'item_uri' => array( + '_' => 'item link (URL)', // IGNORE + 'help' => 'Example: descendant::a/@href', // IGNORE + ), + 'relative' => 'XPath (relative to item) for:', // IGNORE + 'xpath' => 'XPath for:', // IGNORE + ), + 'rss' => 'RSS / Atom (default)', // IGNORE + ), 'maintenance' => array( 'clear_cache' => 'Clear cache', // IGNORE 'clear_cache_help' => 'Clear the cache for this feed.', // IGNORE diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php index 2548916cf..902deb1b5 100644 --- a/app/i18n/en/sub.php +++ b/app/i18n/en/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Information', 'keep_min' => 'Minimum number of articles to keep', + 'kind' => array( + '_' => 'Type of feed source', + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', + 'feed_title' => array( + '_' => 'feed title', + 'help' => 'Example: //title or a static string: "My custom feed"', + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', + 'item' => array( + '_' => 'finding news items
(most important)', + 'help' => 'Example: //div[@class="news-item"]', + ), + 'item_author' => array( + '_' => 'item author', + 'help' => 'Can also be a static string. Example: "Anonymous"', + ), + 'item_categories' => 'items tags', + 'item_content' => array( + '_' => 'item content', + 'help' => 'Example to take the full item: .', + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', + 'help' => 'Example: descendant::img/@src', + ), + 'item_timestamp' => array( + '_' => 'item date', + 'help' => 'The result will be parsed by strtotime()', + ), + 'item_title' => array( + '_' => 'item title', + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', + ), + 'item_uri' => array( + '_' => 'item link (URL)', + 'help' => 'Example: descendant::a/@href', + ), + 'relative' => 'XPath (relative to item) for:', + 'xpath' => 'XPath for:', + ), + 'rss' => 'RSS / Atom (default)', + ), 'maintenance' => array( 'clear_cache' => 'Clear cache', 'clear_cache_help' => 'Clear the cache for this feed.', diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php index ce29e369e..f55e0cbbb 100755 --- a/app/i18n/es/sub.php +++ b/app/i18n/es/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Información', 'keep_min' => 'Número mínimo de artículos a conservar', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Borrar caché', 'clear_cache_help' => 'Borrar la memoria caché de esta fuente.', diff --git a/app/i18n/fr/admin.php b/app/i18n/fr/admin.php index 706fa984d..4a628e2fe 100644 --- a/app/i18n/fr/admin.php +++ b/app/i18n/fr/admin.php @@ -72,8 +72,8 @@ return array( ), 'files' => 'Installation des fichiers', 'json' => array( - 'nok' => 'Vous ne disposez pas de l’extension recommendée JSON (paquet php-json).', - 'ok' => 'Vous disposez de l’extension recommendée JSON.', + 'nok' => 'Vous ne disposez pas de l’extension recommandée JSON (paquet php-json).', + 'ok' => 'Vous disposez de l’extension recommandée JSON.', ), 'mbstring' => array( 'nok' => 'Impossible de trouver la librairie recommandée mbstring pour Unicode.', @@ -199,7 +199,7 @@ return array( 'back_to_manage' => '← Revenir à la liste des utilisateurs', 'create' => 'Créer un nouvel utilisateur', 'database_size' => 'Volumétrie', - 'email' => 'Adresse email', + 'email' => 'adresse électronique', 'enabled' => 'Actif', 'feed_count' => 'Flux', 'is_admin' => 'Admin', diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index 4ebf7895b..8d097fa59 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -73,7 +73,7 @@ return array( '_' => 'Suppression du compte', 'warn' => 'Le compte et toutes les données associées vont être supprimées.', ), - 'email' => 'Adresse email', + 'email' => 'adresse électronique', 'password_api' => 'Mot de passe API
(ex. : pour applis mobiles)', 'password_form' => 'Mot de passe
(pour connexion par formulaire)', 'password_format' => '7 caractères minimum', @@ -185,7 +185,7 @@ return array( 'email' => 'Courriel', 'facebook' => 'Facebook', // IGNORE 'more_information' => 'Plus d’informations', - 'print' => 'Print', // IGNORE + 'print' => 'Imprimer', 'raindrop' => 'Raindrop.io', // IGNORE 'remove' => 'Supprimer la méthode de partage', 'shaarli' => 'Shaarli', // IGNORE diff --git a/app/i18n/fr/install.php b/app/i18n/fr/install.php index b9157ff53..d27fa6049 100644 --- a/app/i18n/fr/install.php +++ b/app/i18n/fr/install.php @@ -71,8 +71,8 @@ return array( 'ok' => 'Vous disposez de fileinfo.', ), 'json' => array( - 'nok' => 'Vous ne disposez pas de l’extension recommendée JSON (paquet php-json).', - 'ok' => 'Vous disposez de l’extension recommendée JSON.', + 'nok' => 'Vous ne disposez pas de l’extension recommandée JSON (paquet php-json).', + 'ok' => 'Vous disposez de l’extension recommandée JSON.', ), 'mbstring' => array( 'nok' => 'Impossible de trouver la librairie recommandée mbstring pour Unicode.', @@ -124,7 +124,7 @@ return array( 'missing_applied_migrations' => 'Quelque chose s’est mal passé, vous devriez créer le fichier %s à la main.', 'ok' => 'L’installation s’est bien passée.', 'session' => array( - 'nok' => 'Le serveur Web semble mal configué pour les cookies nécessaires aux sessions PHP!', + 'nok' => 'Le serveur Web semble mal configuré pour les cookies nécessaires aux sessions PHP!', ), 'step' => 'étape %d', 'steps' => 'Étapes', diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php index 710d75918..c8528504a 100644 --- a/app/i18n/fr/sub.php +++ b/app/i18n/fr/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Informations', 'keep_min' => 'Nombre minimum d’articles à conserver', + 'kind' => array( + '_' => 'Type de source de flux', + 'html_xpath' => array( + '_' => 'HTML + XPath (Moissonnage du Web)', + 'feed_title' => array( + '_' => 'titre de flux', + 'help' => 'Exemple : //title ou un text statique : "Mon flux personnalisé"', + ), + 'help' => 'XPath 1.0 est un langage de requête pour les utilisateurs avancés, supporté par FreshRSS pour le moissonnage du Web (Web scraping).', + 'item' => array( + '_' => 'trouver les articles', + 'help' => 'Exemple : //div[@class="article"]', + ), + 'item_author' => array( + '_' => 'auteur de l’article', + 'help' => 'Peut aussi être une chaîne de texte statique. Exemple : "Anonyme"', + ), + 'item_categories' => 'catégories (tags) de l’article', + 'item_content' => array( + '_' => 'contenu de l’article', + 'help' => 'Exemple pour prendre l’article complet : .', + ), + 'item_thumbnail' => array( + '_' => 'miniature de l’article', + 'help' => 'Exemple : descendant::img/@src', + ), + 'item_timestamp' => array( + '_' => 'date de l’article', + 'help' => 'Le résultat sera passé à la fonction strtotime()', + ), + 'item_title' => array( + '_' => 'titre de l’article', + 'help' => 'Utiliser en particulier l’axe XPath descendant:: comme descendant::h2', + ), + 'item_uri' => array( + '_' => 'lien (URL) de l’article', + 'help' => 'Exemple : descendant::a/@href', + ), + 'relative' => 'XPath (relatif à l’article) pour :', + 'xpath' => 'XPath pour :', + ), + 'rss' => 'RSS / Atom (par défaut)', + ), 'maintenance' => array( 'clear_cache' => 'Vider le cache', 'clear_cache_help' => 'Supprime le cache de ce flux.', @@ -100,7 +143,7 @@ return array( 'ttl' => 'Ne pas automatiquement rafraîchir plus souvent que', 'url' => 'URL du flux', 'useragent' => 'Sélectionner l’agent utilisateur pour télécharger ce flux', - 'useragent_help' => 'Exemple: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', + 'useragent_help' => 'Exemple : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', 'validator' => 'Vérifier la validité du flux', 'website' => 'URL du site', 'websub' => 'Notification instantanée par WebSub', diff --git a/app/i18n/fr/user.php b/app/i18n/fr/user.php index e51c2910b..dabc5fab6 100644 --- a/app/i18n/fr/user.php +++ b/app/i18n/fr/user.php @@ -13,28 +13,28 @@ return array( 'email' => array( 'feedback' => array( - 'invalid' => 'L’adresse email est invalide.', - 'required' => 'L’adresse email est requise.', + 'invalid' => 'L’adresse électronique est invalide.', + 'required' => 'L’adresse électronique est requise.', ), 'validation' => array( - 'change_email' => 'Vous pouvez changer votre adresse email dans votre profil.', + 'change_email' => 'Vous pouvez changer votre adresse électronique dans votre profil.', 'email_sent_to' => 'Nous venons d’envoyer un email à %s, veuillez suivre ses indications pour valider votre adresse.', 'feedback' => array( 'email_failed' => 'Nous n’avons pas pu vous envoyer d’email à cause d’une mauvaise configuration du serveur.', 'email_sent' => 'Un email a été envoyé à votre adresse.', - 'error' => 'L’adresse email n’a pas pu être validée.', - 'ok' => 'L’adresse email a été validée.', - 'unnecessary' => 'L’adresse email a déjà été validée.', - 'wrong_token' => 'L’adresse email n’a pas pu être validée à cause d’un mauvais token.', + 'error' => 'L’adresse électronique n’a pas pu être validée.', + 'ok' => 'L’adresse électronique a été validée.', + 'unnecessary' => 'L’adresse électronique a déjà été validée.', + 'wrong_token' => 'L’adresse électronique n’a pas pu être validée à cause d’un mauvais token.', ), - 'need_to' => 'Vous devez valider votre adresse email avant de pouvoir utiliser %s.', + 'need_to' => 'Vous devez valider votre adresse électronique avant de pouvoir utiliser %s.', 'resend_email' => 'Renvoyer l’email', - 'title' => 'Validation de l’adresse email', + 'title' => 'Validation de l’adresse électronique', ), ), 'mailer' => array( 'email_need_validation' => array( - 'body' => 'Vous venez de vous inscrire sur %s mais vous devez encore valider votre adresse email. Pour cela, veuillez cliquer sur ce lien :', + 'body' => 'Vous venez de vous inscrire sur %s mais vous devez encore valider votre adresse électronique. Pour cela, veuillez cliquer sur ce lien :', 'title' => 'Vous devez valider votre compte', 'welcome' => 'Bienvenue %s,', ), diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php index 1f4dc019f..6068a63c0 100644 --- a/app/i18n/he/sub.php +++ b/app/i18n/he/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'מידע', 'keep_min' => 'מסםר מינימלי של מאמרים לשמור', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Clear cache', // TODO 'clear_cache_help' => 'Clear the cache for this feed.', // TODO diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php index ac5080ffb..cab35180e 100644 --- a/app/i18n/it/sub.php +++ b/app/i18n/it/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Informazioni', 'keep_min' => 'Numero minimo di articoli da mantenere', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Clear cache', // TODO 'clear_cache_help' => 'Clear the cache for this feed.', // TODO diff --git a/app/i18n/ja/sub.php b/app/i18n/ja/sub.php index 4b68e46fd..ba7fa23b1 100644 --- a/app/i18n/ja/sub.php +++ b/app/i18n/ja/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'インフォメーション', 'keep_min' => '最小数の記事は保持されます', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'キャッシュのクリア', 'clear_cache_help' => 'このフィードのキャッシュをクリアします。', diff --git a/app/i18n/ko/sub.php b/app/i18n/ko/sub.php index 27b1f8bfa..ff9af8c39 100644 --- a/app/i18n/ko/sub.php +++ b/app/i18n/ko/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => '정보', 'keep_min' => '최소 유지 글 개수', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => '캐쉬 지우기', 'clear_cache_help' => '이 피드의 캐쉬 지우기.', diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php index 611e97497..b8439f0b5 100644 --- a/app/i18n/nl/sub.php +++ b/app/i18n/nl/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Informatie', 'keep_min' => 'Minimum aantal artikelen om te houden', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Cache leegmaken', 'clear_cache_help' => 'Cache voor deze feed leegmaken.', diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php index fe4b38776..5cc7c792a 100644 --- a/app/i18n/oc/sub.php +++ b/app/i18n/oc/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Informacions', 'keep_min' => 'Nombre minimum d’articles de servar', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Escafar lo cache', 'clear_cache_help' => 'Escafar lo cache d’aqueste flux sul disc', diff --git a/app/i18n/pl/sub.php b/app/i18n/pl/sub.php index 3c2f7b815..204d9ffef 100644 --- a/app/i18n/pl/sub.php +++ b/app/i18n/pl/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Informacja', 'keep_min' => 'Minimalna liczba wiadomości do do przechowywania', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Wyczyść pamięć podręczną', 'clear_cache_help' => 'Czyści pamięć podręczną tego kanału.', diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php index bc512e867..25d76ad9f 100644 --- a/app/i18n/pt-br/sub.php +++ b/app/i18n/pt-br/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Informações', 'keep_min' => 'Número mínimo de artigos para manter', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Limpar o cache', 'clear_cache_help' => 'Limpar o cache em disco deste feed', diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php index e11404674..1be761ab6 100644 --- a/app/i18n/ru/sub.php +++ b/app/i18n/ru/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Информация', 'keep_min' => 'Оставлять статей не менее', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Очистить кэш', 'clear_cache_help' => 'Очистить кэш для этой ленты.', diff --git a/app/i18n/sk/sub.php b/app/i18n/sk/sub.php index 3da71a24c..ef6e037fb 100644 --- a/app/i18n/sk/sub.php +++ b/app/i18n/sk/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Informácia', 'keep_min' => 'Minimálny počet článkov na uchovanie', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Vymazať vyrovnáciu pamäť', 'clear_cache_help' => 'Vymazať vyrovnáciu pamäť pre tento kanál.', diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php index 4704b401c..e9f58f895 100644 --- a/app/i18n/tr/sub.php +++ b/app/i18n/tr/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => 'Bilgi', 'keep_min' => 'En az tutulacak makale sayısı', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => 'Önbelleği temizle', 'clear_cache_help' => 'Bu akışın önbelleğini temizler.', diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index 3fcdbf5c8..d45ba91eb 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -61,6 +61,49 @@ return array( ), 'information' => '信息', 'keep_min' => '至少保存的文章数', + 'kind' => array( + '_' => 'Type of feed source', // TODO + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // TODO + 'feed_title' => array( + '_' => 'feed title', // TODO + 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'item' => array( + '_' => 'finding news items
(most important)', // TODO + 'help' => 'Example: //div[@class="news-item"]', // TODO + ), + 'item_author' => array( + '_' => 'item author', // TODO + 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + ), + 'item_categories' => 'items tags', // TODO + 'item_content' => array( + '_' => 'item content', // TODO + 'help' => 'Example to take the full item: .', // TODO + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // TODO + 'help' => 'Example: descendant::img/@src', // TODO + ), + 'item_timestamp' => array( + '_' => 'item date', // TODO + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => array( + '_' => 'item title', // TODO + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + ), + 'item_uri' => array( + '_' => 'item link (URL)', // TODO + 'help' => 'Example: descendant::a/@href', // TODO + ), + 'relative' => 'XPath (relative to item) for:', // TODO + 'xpath' => 'XPath for:', // TODO + ), + 'rss' => 'RSS / Atom (default)', // TODO + ), 'maintenance' => array( 'clear_cache' => '清理缓存', 'clear_cache_help' => '清除该feed的缓存', -- cgit v1.2.3