From a52dc33353665be0d5f59231539c0143a35d55ec Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sun, 4 Jun 2017 09:58:11 +0200 Subject: Add a subscription tools page See #1354 It's missing translations. Only English and French are available. Contributions wanted. --- app/Controllers/subscriptionController.php | 7 +++++++ app/i18n/cz/sub.php | 11 +++++++++++ app/i18n/de/sub.php | 11 +++++++++++ app/i18n/en/sub.php | 11 +++++++++++ app/i18n/fr/sub.php | 11 +++++++++++ app/i18n/it/sub.php | 11 +++++++++++ app/i18n/nl/sub.php | 11 +++++++++++ app/i18n/ru/sub.php | 11 +++++++++++ app/i18n/tr/sub.php | 11 +++++++++++ app/i18n/zh-cn/sub.php | 11 +++++++++++ app/layout/aside_subscription.phtml | 6 ++---- app/views/subscription/bookmarklet.phtml | 13 +++++++++++++ 12 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 app/views/subscription/bookmarklet.phtml diff --git a/app/Controllers/subscriptionController.php b/app/Controllers/subscriptionController.php index aa9f18663..6af048b84 100644 --- a/app/Controllers/subscriptionController.php +++ b/app/Controllers/subscriptionController.php @@ -113,4 +113,11 @@ class FreshRSS_subscription_Controller extends Minz_ActionController { } } } + + /** + * This action displays the bookmarklet page. + */ + public function bookmarkletAction() { + Minz_View::prependTitle(_t('sub.title.subscription_tools') . ' . '); + } } diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php index 274cf16e1..4fa790107 100644 --- a/app/i18n/cz/sub.php +++ b/app/i18n/cz/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', + 'label' => 'Subscribe', + 'title' => 'Bookmarklet', + ), 'category' => array( '_' => 'Kategorie', 'add' => 'Přidat kategorii', @@ -39,6 +44,10 @@ return array( 'website' => 'URL webové stránky', 'pubsubhubbub' => 'Okamžité oznámení s PubSubHubbub', ), + 'firefox' => array( + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', + 'title' => 'Firefox feed reader', + ), 'import_export' => array( 'export' => 'Export', 'export_opml' => 'Exportovat seznam kanálů (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => 'Přihlásit (FreshRSS bookmark)', 'import_export' => 'Import / export', 'subscription_management' => 'Správa subskripcí', + 'subscription_tools' => 'Subscription tools', ), 'title' => array( '_' => 'Správa subskripcí', 'feed_management' => 'Správa RSS kanálů', + 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php index cc98fd25c..aed931ab7 100644 --- a/app/i18n/de/sub.php +++ b/app/i18n/de/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', + 'label' => 'Subscribe', + 'title' => 'Bookmarklet', + ), 'category' => array( '_' => 'Kategorie', 'add' => 'Eine Kategorie hinzufügen', @@ -39,6 +44,10 @@ return array( 'website' => 'Webseiten-URL', 'pubsubhubbub' => 'Sofortbenachrichtigung mit PubSubHubbub', ), + 'firefox' => array( + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', + 'title' => 'Firefox feed reader', + ), 'import_export' => array( 'export' => 'Exportieren', 'export_opml' => 'Liste der Feeds exportieren (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => 'Abonnieren (FreshRSS-Lesezeichen)', 'import_export' => 'Importieren / Exportieren', 'subscription_management' => 'Abonnementverwaltung', + 'subscription_tools' => 'Subscription tools', ), 'title' => array( '_' => 'Abonnementverwaltung', 'feed_management' => 'Verwaltung der RSS-Feeds', + 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php index 86600e882..ca696280a 100644 --- a/app/i18n/en/sub.php +++ b/app/i18n/en/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', + 'label' => 'Subscribe', + 'title' => 'Bookmarklet', + ), 'category' => array( '_' => 'Category', 'add' => 'Add a category', @@ -39,6 +44,10 @@ return array( 'website' => 'Website URL', 'pubsubhubbub' => 'Instant notification with PubSubHubbub', ), + 'firefox' => array( + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', + 'title' => 'Firefox feed reader', + ), 'import_export' => array( 'export' => 'Export', 'export_opml' => 'Export list of feeds (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => 'Subscribe (FreshRSS bookmark)', 'import_export' => 'Import / export', 'subscription_management' => 'Subscriptions management', + 'subscription_tools' => 'Subscription tools', ), 'title' => array( '_' => 'Subscriptions management', 'feed_management' => 'RSS feeds management', + 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php index bb3f2fefc..db31259af 100644 --- a/app/i18n/fr/sub.php +++ b/app/i18n/fr/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => 'Glisser ce bouton dans la barre des favoris ou cliquer droit dessus et choisir "Enregistrer ce lien". Ensuite, cliquer sur le bouton "S\'abonner" sur les pages auxquelles vous voulez vous abonner.', + 'label' => 'S\'abonner', + 'title' => 'Bookmarklet', + ), 'category' => array( '_' => 'Catégorie', 'add' => 'Ajouter une catégorie', @@ -39,6 +44,10 @@ return array( 'website' => 'URL du site', 'pubsubhubbub' => 'Notification instantanée par PubSubHubbub', ), + 'firefox' => array( + 'documentation' => 'Suivre les étapes décritent ici pour ajouter FreshRSS à la liste des lecteurs de flux dans Firefox.', + 'title' => 'Lecteur de flux dans Firefox', + ), 'import_export' => array( 'export' => 'Exporter', 'export_opml' => 'Exporter la liste des flux (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => 'S’abonner (bookmark FreshRSS)', 'import_export' => 'Importer / exporter', 'subscription_management' => 'Gestion des abonnements', + 'subscription_tools' => 'Outils d\'abonnement', ), 'title' => array( '_' => 'Gestion des abonnements', 'feed_management' => 'Gestion des flux RSS', + 'subscription_tools' => 'Outils d\'abonnement', ), ); diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php index 758e322c5..d1ae44e0f 100644 --- a/app/i18n/it/sub.php +++ b/app/i18n/it/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', + 'label' => 'Subscribe', + 'title' => 'Bookmarklet', + ), 'category' => array( '_' => 'Categoria', 'add' => 'Aggiungi una categoria', @@ -39,6 +44,10 @@ return array( 'website' => 'URL del sito', 'pubsubhubbub' => 'Notifica istantanea con PubSubHubbub', ), + 'firefox' => array( + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', + 'title' => 'Firefox feed reader', + ), 'import_export' => array( 'export' => 'Esporta', 'export_opml' => 'Esporta tutta la lista dei feed (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => 'Bookmark (trascina nei preferiti)', 'import_export' => 'Importa / esporta', 'subscription_management' => 'Gestione sottoscrizioni', + 'subscription_tools' => 'Subscription tools', ), 'title' => array( '_' => 'Gestione sottoscrizioni', 'feed_management' => 'Gestione RSS feeds', + 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php index e0cebbb4e..8af40e1a8 100644 --- a/app/i18n/nl/sub.php +++ b/app/i18n/nl/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', + 'label' => 'Subscribe', + 'title' => 'Bookmarklet', + ), 'category' => array( '_' => 'Categorie', 'add' => 'Voeg categorie toe', @@ -39,6 +44,10 @@ return array( 'validator' => 'Controleer de geldigheid van de feed', 'website' => 'Website URL', ), + 'firefox' => array( + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', + 'title' => 'Firefox feed reader', + ), 'import_export' => array( 'export' => 'Exporteer', 'export_opml' => 'Exporteer lijst van feeds (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => 'Abonneer (FreshRSS bladwijzer)', 'import_export' => 'Importeer / exporteer', 'subscription_management' => 'Abonnementenbeheer', + 'subscription_tools' => 'Subscription tools', ), 'title' => array( '_' => 'Abonnementenbeheer', 'feed_management' => 'RSS-feedbeheer', + 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php index 789433ee6..c6cf4e8b3 100644 --- a/app/i18n/ru/sub.php +++ b/app/i18n/ru/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', + 'label' => 'Subscribe', + 'title' => 'Bookmarklet', + ), 'category' => array( '_' => 'Category', 'add' => 'Add a category', @@ -39,6 +44,10 @@ return array( 'website' => 'Website URL', 'pubsubhubbub' => 'Instant notification with PubSubHubbub', ), + 'firefox' => array( + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', + 'title' => 'Firefox feed reader', + ), 'import_export' => array( 'export' => 'Export', 'export_opml' => 'Export list of feeds (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => 'Subscribe (FreshRSS bookmark)', 'import_export' => 'Import / export', 'subscription_management' => 'Subscriptions management', + 'subscription_tools' => 'Subscription tools', ), 'title' => array( '_' => 'Subscriptions management', 'feed_management' => 'RSS feeds management', + 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php index 7592096d9..ab9b6caa5 100644 --- a/app/i18n/tr/sub.php +++ b/app/i18n/tr/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', + 'label' => 'Subscribe', + 'title' => 'Bookmarklet', + ), 'category' => array( '_' => 'Kategori', 'add' => 'Kategori ekle', @@ -39,6 +44,10 @@ return array( 'website' => 'Site URL', 'pubsubhubbub' => 'PubSubHubbub ile anlık bildirim', ), + 'firefox' => array( + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', + 'title' => 'Firefox feed reader', + ), 'import_export' => array( 'export' => 'Dışa aktar', 'export_opml' => 'Akış listesini dışarı aktar (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => 'Abonelik (FreshRSS yer imleri)', 'import_export' => 'İçe / dışa aktar', 'subscription_management' => 'Abonelik yönetimi', + 'subscription_tools' => 'Subscription tools', ), 'title' => array( '_' => 'Abonelik yönetimi', 'feed_management' => 'RSS akış yönetimi', + 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index 0c599e986..d30472f81 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', + 'label' => 'Subscribe', + 'title' => 'Bookmarklet', + ), 'category' => array( '_' => '分类', 'add' => '添加分类', @@ -39,6 +44,10 @@ return array( 'website' => '网站 URL', 'pubsubhubbub' => 'PubSubHubbub 即时通知', ), + 'firefox' => array( + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', + 'title' => 'Firefox feed reader', + ), 'import_export' => array( 'export' => '导出', 'export_opml' => '导出 RSS 源列表 (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => '订阅 (FreshRSS 书签)', 'import_export' => '导入/导出', 'subscription_management' => '订阅管理', + 'subscription_tools' => 'Subscription tools', ), 'title' => array( '_' => '订阅管理', 'feed_management' => 'RSS 源管理', + 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/layout/aside_subscription.phtml b/app/layout/aside_subscription.phtml index e14afe2a7..6d2a5ac8f 100644 --- a/app/layout/aside_subscription.phtml +++ b/app/layout/aside_subscription.phtml @@ -9,9 +9,7 @@ -
  • - - - +
  • +
  • diff --git a/app/views/subscription/bookmarklet.phtml b/app/views/subscription/bookmarklet.phtml new file mode 100644 index 000000000..162501be6 --- /dev/null +++ b/app/views/subscription/bookmarklet.phtml @@ -0,0 +1,13 @@ +partial('aside_subscription'); ?> + +
    + + + +

    + + + +

    +
    browser.contentHandlers.types.number.uri →  'feed', 'a' => 'add'), 'html', true); ?>&url_rss=%s
    +
    \ No newline at end of file -- cgit v1.2.3 From 1eaea0e8c7d34271207dc0de74defdc5534b02b5 Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sun, 4 Jun 2017 10:12:27 +0200 Subject: Add to-do comments in translation files --- app/i18n/cz/sub.php | 14 +++---- app/i18n/de/sub.php | 14 +++---- app/i18n/it/sub.php | 14 +++---- app/i18n/nl/sub.php | 14 +++---- app/i18n/ru/sub.php | 106 ++++++++++++++++++++++++------------------------- app/i18n/tr/sub.php | 14 +++---- app/i18n/zh-cn/sub.php | 14 +++---- 7 files changed, 95 insertions(+), 95 deletions(-) diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php index 4fa790107..09b23d222 100644 --- a/app/i18n/cz/sub.php +++ b/app/i18n/cz/sub.php @@ -2,9 +2,9 @@ return array( 'bookmarklet' => array( - 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', - 'label' => 'Subscribe', - 'title' => 'Bookmarklet', + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',// TODO + 'label' => 'Subscribe',// TODO + 'title' => 'Bookmarklet',// TODO ), 'category' => array( '_' => 'Kategorie', @@ -45,8 +45,8 @@ return array( 'pubsubhubbub' => 'Okamžité oznámení s PubSubHubbub', ), 'firefox' => array( - 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', - 'title' => 'Firefox feed reader', + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.',// TODO + 'title' => 'Firefox feed reader',// TODO ), 'import_export' => array( 'export' => 'Export', @@ -63,11 +63,11 @@ return array( 'bookmark' => 'Přihlásit (FreshRSS bookmark)', 'import_export' => 'Import / export', 'subscription_management' => 'Správa subskripcí', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), 'title' => array( '_' => 'Správa subskripcí', 'feed_management' => 'Správa RSS kanálů', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), ); diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php index aed931ab7..c16d09db1 100644 --- a/app/i18n/de/sub.php +++ b/app/i18n/de/sub.php @@ -2,9 +2,9 @@ return array( 'bookmarklet' => array( - 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', - 'label' => 'Subscribe', - 'title' => 'Bookmarklet', + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',// TODO + 'label' => 'Subscribe',// TODO + 'title' => 'Bookmarklet',// TODO ), 'category' => array( '_' => 'Kategorie', @@ -45,8 +45,8 @@ return array( 'pubsubhubbub' => 'Sofortbenachrichtigung mit PubSubHubbub', ), 'firefox' => array( - 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', - 'title' => 'Firefox feed reader', + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.',// TODO + 'title' => 'Firefox feed reader',// TODO ), 'import_export' => array( 'export' => 'Exportieren', @@ -63,11 +63,11 @@ return array( 'bookmark' => 'Abonnieren (FreshRSS-Lesezeichen)', 'import_export' => 'Importieren / Exportieren', 'subscription_management' => 'Abonnementverwaltung', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), 'title' => array( '_' => 'Abonnementverwaltung', 'feed_management' => 'Verwaltung der RSS-Feeds', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), ); diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php index d1ae44e0f..e730e2bc8 100644 --- a/app/i18n/it/sub.php +++ b/app/i18n/it/sub.php @@ -2,9 +2,9 @@ return array( 'bookmarklet' => array( - 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', - 'label' => 'Subscribe', - 'title' => 'Bookmarklet', + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',// TODO + 'label' => 'Subscribe',// TODO + 'title' => 'Bookmarklet',// TODO ), 'category' => array( '_' => 'Categoria', @@ -45,8 +45,8 @@ return array( 'pubsubhubbub' => 'Notifica istantanea con PubSubHubbub', ), 'firefox' => array( - 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', - 'title' => 'Firefox feed reader', + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.',// TODO + 'title' => 'Firefox feed reader',// TODO ), 'import_export' => array( 'export' => 'Esporta', @@ -63,11 +63,11 @@ return array( 'bookmark' => 'Bookmark (trascina nei preferiti)', 'import_export' => 'Importa / esporta', 'subscription_management' => 'Gestione sottoscrizioni', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), 'title' => array( '_' => 'Gestione sottoscrizioni', 'feed_management' => 'Gestione RSS feeds', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), ); diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php index 8af40e1a8..bfa0911b7 100644 --- a/app/i18n/nl/sub.php +++ b/app/i18n/nl/sub.php @@ -2,9 +2,9 @@ /* Dutch translation by Wanabo. http://www.nieuwskop.be */ return array( 'bookmarklet' => array( - 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', - 'label' => 'Subscribe', - 'title' => 'Bookmarklet', + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',// TODO + 'label' => 'Subscribe',// TODO + 'title' => 'Bookmarklet',// TODO ), 'category' => array( '_' => 'Categorie', @@ -45,8 +45,8 @@ return array( 'website' => 'Website URL', ), 'firefox' => array( - 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', - 'title' => 'Firefox feed reader', + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.',// TODO + 'title' => 'Firefox feed reader',// TODO ), 'import_export' => array( 'export' => 'Exporteer', @@ -63,11 +63,11 @@ return array( 'bookmark' => 'Abonneer (FreshRSS bladwijzer)', 'import_export' => 'Importeer / exporteer', 'subscription_management' => 'Abonnementenbeheer', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), 'title' => array( '_' => 'Abonnementenbeheer', 'feed_management' => 'RSS-feedbeheer', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), ); diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php index c6cf4e8b3..fa28a3ec4 100644 --- a/app/i18n/ru/sub.php +++ b/app/i18n/ru/sub.php @@ -2,72 +2,72 @@ return array( 'bookmarklet' => array( - 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', - 'label' => 'Subscribe', - 'title' => 'Bookmarklet', + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',// TODO + 'label' => 'Subscribe',// TODO + 'title' => 'Bookmarklet',// TODO ), 'category' => array( - '_' => 'Category', - 'add' => 'Add a category', - 'empty' => 'Empty category', - 'new' => 'New category', + '_' => 'Category',// TODO + 'add' => 'Add a category',// TODO + 'empty' => 'Empty category',// TODO + 'new' => 'New category',// TODO ), 'feed' => array( - 'add' => 'Add a RSS feed', - 'advanced' => 'Advanced', - 'archiving' => 'Archivage', + 'add' => 'Add a RSS feed',// TODO + 'advanced' => 'Advanced',// TODO + 'archiving' => 'Archivage',// TODO 'auth' => array( - 'configuration' => 'Login', - 'help' => 'Connection allows to access HTTP protected RSS feeds', - 'http' => 'HTTP Authentication', - 'password' => 'HTTP password', - 'username' => 'HTTP username', + 'configuration' => 'Login',// TODO + 'help' => 'Connection allows to access HTTP protected RSS feeds',// TODO + 'http' => 'HTTP Authentication',// TODO + 'password' => 'HTTP password',// TODO + 'username' => 'HTTP username',// TODO ), - 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', - 'css_path' => 'Articles CSS path on original website', - 'description' => 'Description', - 'empty' => 'This feed is empty. Please verify that it is still maintained.', - 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', - 'in_main_stream' => 'Show in main stream', - 'informations' => 'Information', - 'keep_history' => 'Minimum number of articles to keep', - 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', - 'no_selected' => 'No feed selected.', - 'number_entries' => '%d articles', - 'stats' => 'Statistics', - 'think_to_add' => 'You may add some feeds.', - 'title' => 'Title', - 'title_add' => 'Add a RSS feed', - 'ttl' => 'Do not automatically refresh more often than', - 'url' => 'Feed URL', - 'validator' => 'Check the validity of the feed', - 'website' => 'Website URL', - 'pubsubhubbub' => 'Instant notification with PubSubHubbub', + 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)',// TODO + 'css_path' => 'Articles CSS path on original website',// TODO + 'description' => 'Description',// TODO + 'empty' => 'This feed is empty. Please verify that it is still maintained.',// TODO + 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.',// TODO + 'in_main_stream' => 'Show in main stream',// TODO + 'informations' => 'Information',// TODO + 'keep_history' => 'Minimum number of articles to keep',// TODO + 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.',// TODO + 'no_selected' => 'No feed selected.',// TODO + 'number_entries' => '%d articles',// TODO + 'stats' => 'Statistics',// TODO + 'think_to_add' => 'You may add some feeds.',// TODO + 'title' => 'Title',// TODO + 'title_add' => 'Add a RSS feed',// TODO + 'ttl' => 'Do not automatically refresh more often than',// TODO + 'url' => 'Feed URL',// TODO + 'validator' => 'Check the validity of the feed',// TODO + 'website' => 'Website URL',// TODO + 'pubsubhubbub' => 'Instant notification with PubSubHubbub',// TODO ), 'firefox' => array( - 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', - 'title' => 'Firefox feed reader', + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.',// TODO + 'title' => 'Firefox feed reader',// TODO ), 'import_export' => array( - 'export' => 'Export', - 'export_opml' => 'Export list of feeds (OPML)', - 'export_starred' => 'Export your favourites', - 'feed_list' => 'List of %s articles', - 'file_to_import' => 'File to import
    (OPML, JSON or ZIP)', - 'file_to_import_no_zip' => 'File to import
    (OPML or JSON)', - 'import' => 'Import', - 'starred_list' => 'List of favourite articles', - 'title' => 'Import / export', + 'export' => 'Export',// TODO + 'export_opml' => 'Export list of feeds (OPML)',// TODO + 'export_starred' => 'Export your favourites',// TODO + 'feed_list' => 'List of %s articles',// TODO + 'file_to_import' => 'File to import
    (OPML, JSON or ZIP)',// TODO + 'file_to_import_no_zip' => 'File to import
    (OPML or JSON)',// TODO + 'import' => 'Import',// TODO + 'starred_list' => 'List of favourite articles',// TODO + 'title' => 'Import / export',// TODO ), 'menu' => array( - 'bookmark' => 'Subscribe (FreshRSS bookmark)', - 'import_export' => 'Import / export', - 'subscription_management' => 'Subscriptions management', - 'subscription_tools' => 'Subscription tools', + 'bookmark' => 'Subscribe (FreshRSS bookmark)',// TODO + 'import_export' => 'Import / export',// TODO + 'subscription_management' => 'Subscriptions management',// TODO + 'subscription_tools' => 'Subscription tools',// TODO ), 'title' => array( - '_' => 'Subscriptions management', - 'feed_management' => 'RSS feeds management', - 'subscription_tools' => 'Subscription tools', + '_' => 'Subscriptions management',// TODO + 'feed_management' => 'RSS feeds management',// TODO + 'subscription_tools' => 'Subscription tools',// TODO ), ); diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php index ab9b6caa5..e928fae72 100644 --- a/app/i18n/tr/sub.php +++ b/app/i18n/tr/sub.php @@ -2,9 +2,9 @@ return array( 'bookmarklet' => array( - 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', - 'label' => 'Subscribe', - 'title' => 'Bookmarklet', + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',// TODO + 'label' => 'Subscribe',// TODO + 'title' => 'Bookmarklet',// TODO ), 'category' => array( '_' => 'Kategori', @@ -45,8 +45,8 @@ return array( 'pubsubhubbub' => 'PubSubHubbub ile anlık bildirim', ), 'firefox' => array( - 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', - 'title' => 'Firefox feed reader', + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.',// TODO + 'title' => 'Firefox feed reader',// TODO ), 'import_export' => array( 'export' => 'Dışa aktar', @@ -63,11 +63,11 @@ return array( 'bookmark' => 'Abonelik (FreshRSS yer imleri)', 'import_export' => 'İçe / dışa aktar', 'subscription_management' => 'Abonelik yönetimi', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), 'title' => array( '_' => 'Abonelik yönetimi', 'feed_management' => 'RSS akış yönetimi', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), ); diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index d30472f81..159bcd919 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -2,9 +2,9 @@ return array( 'bookmarklet' => array( - 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.', - 'label' => 'Subscribe', - 'title' => 'Bookmarklet', + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',// TODO + 'label' => 'Subscribe',// TODO + 'title' => 'Bookmarklet',// TODO ), 'category' => array( '_' => '分类', @@ -45,8 +45,8 @@ return array( 'pubsubhubbub' => 'PubSubHubbub 即时通知', ), 'firefox' => array( - 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.', - 'title' => 'Firefox feed reader', + 'documentation' => 'Follow the steps described here to add FreshRSS to Firefox feed reader list.',// TODO + 'title' => 'Firefox feed reader',// TODO ), 'import_export' => array( 'export' => '导出', @@ -63,11 +63,11 @@ return array( 'bookmark' => '订阅 (FreshRSS 书签)', 'import_export' => '导入/导出', 'subscription_management' => '订阅管理', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), 'title' => array( '_' => '订阅管理', 'feed_management' => 'RSS 源管理', - 'subscription_tools' => 'Subscription tools', + 'subscription_tools' => 'Subscription tools',// TODO ), ); -- cgit v1.2.3 From 8af654f96281e1ee4708818839995383cee97b52 Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Tue, 6 Jun 2017 08:03:29 +0200 Subject: Fix outdated documentation --- README.fr.md | 7 +++---- README.md | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/README.fr.md b/README.fr.md index b7a28fd91..21ce50731 100644 --- a/README.fr.md +++ b/README.fr.md @@ -139,13 +139,12 @@ Créer `/etc/cron.d/FreshRSS` avec : # Sauvegarde -* Il faut conserver vos fichiers `./data/config.php` ainsi que `./data/*_user.php` -* Vous pouvez exporter votre liste de flux depuis FreshRSS au format OPML - * soit depuis l’interface Web, soit [en ligne de commande](./cli/README.md) +* Il faut conserver vos fichiers `./data/config.php` ainsi que `./data/users/*/config.php` +* Vous pouvez exporter votre liste de flux au format OPML soit depuis l’interface Web, soit [en ligne de commande](./cli/README.md) * Pour sauvegarder les articles eux-mêmes, vous pouvez utiliser [phpMyAdmin](http://www.phpmyadmin.net) ou les outils de MySQL : ```bash -mysqldump -u utilisateur -p --databases freshrss > freshrss.sql +mysqldump --skip-comments --disable-keys --user= --password --host --result-file=freshrss.dump.sql --databases ``` diff --git a/README.md b/README.md index 8b87ecb8f..a1a79653c 100644 --- a/README.md +++ b/README.md @@ -141,13 +141,12 @@ Create `/etc/cron.d/FreshRSS` with: # Backup -* You need to keep `./data/config.php`, and `./data/*_user.php` files -* You can export your feed list in OPML format from FreshRSS - * either from the Web interface, or from the [Command-Line Interface](./cli/README.md) +* You need to keep `./data/config.php`, and `./data/users/*/config.php` files +* You can export your feed list in OPML format either from the Web interface, or from the [Command-Line Interface](./cli/README.md) * To save articles, you can use [phpMyAdmin](http://www.phpmyadmin.net) or MySQL tools: ```bash -mysqldump -u user -p --databases freshrss > freshrss.sql +mysqldump --skip-comments --disable-keys --user= --password --host --result-file=freshrss.dump.sql --databases ``` -- cgit v1.2.3 From ec58055f1965d0267ca13231ee2c6ea497606d20 Mon Sep 17 00:00:00 2001 From: Alwaysin Date: Tue, 6 Jun 2017 11:32:28 +0200 Subject: Update README.fr.md --- README.fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.fr.md b/README.fr.md index b7a28fd91..7d485c99a 100644 --- a/README.fr.md +++ b/README.fr.md @@ -33,7 +33,7 @@ Nous sommes une communauté amicale. * Fonctionne même sur un Raspberry Pi 1 avec des temps de réponse < 1s (testé sur 150 flux, 22k articles) * Serveur Web Apache2 (recommandé), ou nginx, lighttpd (non testé sur les autres) * PHP 5.3.3+ (PHP 5.4+ recommandé, et PHP 5.5+ pour les performances, et PHP 7+ pour d’encore meilleures performances) - * Requis : [cURL](http://php.net/curl), [DOM](http://php.net/dom), [XML](http://php.net/xml), et [PDO_MySQL](http://php.net/pdo-mysql) ou [PDO_SQLite](http://php.net/pdo-sqlite) ou [PDO_PGSQL](http://php.net/pdo-pgsql) + * Requis : [cURL](http://php.net/curl), [DOM](http://php.net/dom), [XML](http://php.net/xml), [session](http://php.net/session), [ctype](http://php.net/ctype), et [PDO_MySQL](http://php.net/pdo-mysql) ou [PDO_SQLite](http://php.net/pdo-sqlite) ou [PDO_PGSQL](http://php.net/pdo-pgsql) * Recommandés : [JSON](http://php.net/json), [GMP](http://php.net/gmp) (pour accès API sur plateformes < 64 bits), [IDN](http://php.net/intl.idn) (pour les noms de domaines internationalisés), [mbstring](http://php.net/mbstring) et/ou [iconv](http://php.net/iconv) (pour conversion d’encodages), [ZIP](http://php.net/zip) (pour import/export), [zlib](http://php.net/zlib) (pour les flux compressés) * MySQL 5.5.3+ (recommandé), ou SQLite 3.7.4+, ou PostgreSQL 9.2+ * Un navigateur Web récent tel Firefox, Internet Explorer 11 / Edge, Chrome, Opera, Safari. -- cgit v1.2.3 From 83f20076a40aab58755d9d32cf2cdbff6c592e85 Mon Sep 17 00:00:00 2001 From: Alwaysin Date: Tue, 6 Jun 2017 11:33:29 +0200 Subject: Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b87ecb8f..c1bd64f7b 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ We are a friendly community. * It even works on Raspberry Pi 1 with response time under a second (tested with 150 feeds, 22k articles) * A web server: Apache2 (recommended), nginx, lighttpd (not tested on others) * PHP 5.3.3+ (PHP 5.4+ recommended, and PHP 5.5+ for performance, and PHP 7 for even higher performance) - * Required extensions: [cURL](http://php.net/curl), [DOM](http://php.net/dom), [XML](http://php.net/xml), and [PDO_MySQL](http://php.net/pdo-mysql) or [PDO_SQLite](http://php.net/pdo-sqlite) or [PDO_PGSQL](http://php.net/pdo-pgsql) + * Required extensions: [cURL](http://php.net/curl), [DOM](http://php.net/dom), [XML](http://php.net/xml), [session](http://php.net/session), [ctype](http://php.net/ctype), and [PDO_MySQL](http://php.net/pdo-mysql) or [PDO_SQLite](http://php.net/pdo-sqlite) or [PDO_PGSQL](http://php.net/pdo-pgsql) * Recommended extensions: [JSON](http://php.net/json), [GMP](http://php.net/gmp) (for API access on platforms < 64 bits), [IDN](http://php.net/intl.idn) (for Internationalized Domain Names), [mbstring](http://php.net/mbstring) and/or [iconv](http://php.net/iconv) (for charset conversion), [ZIP](http://php.net/zip) (for import/export), [zlib](http://php.net/zlib) (for compressed feeds) * MySQL 5.5.3+ (recommended), or SQLite 3.7.4+, or PostgreSQL 9.2+ * A recent browser like Firefox, Internet Explorer 11 / Edge, Chrome, Opera, Safari. -- cgit v1.2.3 From f5619e66deb83bf43d1aa063b0cff5caa04104ca Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Thu, 8 Jun 2017 03:36:28 +0900 Subject: Working on i18n/kr --- app/i18n/cz/gen.php | 1 + app/i18n/de/gen.php | 1 + app/i18n/en/gen.php | 3 +- app/i18n/fr/gen.php | 1 + app/i18n/it/gen.php | 1 + app/i18n/kr/admin.php | 181 +++++++++++++++++++++++++++++++++++++++++++++ app/i18n/kr/conf.php | 174 ++++++++++++++++++++++++++++++++++++++++++++ app/i18n/kr/feedback.php | 109 +++++++++++++++++++++++++++ app/i18n/kr/gen.php | 186 +++++++++++++++++++++++++++++++++++++++++++++++ app/i18n/kr/index.php | 61 ++++++++++++++++ app/i18n/kr/install.php | 119 ++++++++++++++++++++++++++++++ app/i18n/kr/sub.php | 62 ++++++++++++++++ app/i18n/nl/gen.php | 1 + app/i18n/ru/gen.php | 1 + app/i18n/tr/gen.php | 1 + app/i18n/zh-cn/gen.php | 3 +- 16 files changed, 903 insertions(+), 2 deletions(-) create mode 100644 app/i18n/kr/admin.php create mode 100644 app/i18n/kr/conf.php create mode 100644 app/i18n/kr/feedback.php create mode 100644 app/i18n/kr/gen.php create mode 100644 app/i18n/kr/index.php create mode 100644 app/i18n/kr/install.php create mode 100644 app/i18n/kr/sub.php diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index e6aadfc02..0e1e25ddd 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -121,6 +121,7 @@ return array( 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'kr' => '한국어', ), 'menu' => array( 'about' => 'O aplikaci', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 4b171a04d..032ff20bf 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -121,6 +121,7 @@ return array( 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'kr' => '한국어', ), 'menu' => array( 'about' => 'Über', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 05281769f..d386711db 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -121,7 +121,8 @@ return array( 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'zh-cn' => '简体中文' + 'zh-cn' => '简体中文', + 'kr' => '한국어', ), 'menu' => array( 'about' => 'About', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 43825f798..52a454564 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -121,6 +121,7 @@ return array( 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'kr' => '한국어', ), 'menu' => array( 'about' => 'À propos', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index ec6de84de..6169891bb 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -121,6 +121,7 @@ return array( 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'kr' => '한국어', ), 'menu' => array( 'about' => 'Informazioni', diff --git a/app/i18n/kr/admin.php b/app/i18n/kr/admin.php new file mode 100644 index 000000000..da207053f --- /dev/null +++ b/app/i18n/kr/admin.php @@ -0,0 +1,181 @@ + array( + 'allow_anonymous' => '누구나 기본 사용자의 글을 읽을 수 있도록 합니다(%s)', + 'allow_anonymous_refresh' => '누구나 피드를 갱신할 수 있도록 합니다', + 'api_enabled' => 'API 사용을 허가합니다(모바일 애플리케이션을 사용할 때 필요합니다)', + 'form' => '웹폼 (전통적인 방식, 자바스크립트 필요)', + 'http' => 'HTTP (HTTPS를 사용하는 고급 사용자용)', + 'none' => '사용하지 않음 (위험)', + 'title' => '인증', + 'title_reset' => 'Authentication reset', + 'token' => '인증 토큰', + 'token_help' => '기본 사용자의 RSS에 인증 없이 접근할 수 있도록 합니다:', + 'type' => '인증', + 'unsafe_autologin' => '다음과 같은 안전하지 않은 방식의 로그인을 허가합니다: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => './data/cache 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'ok' => '캐시 디렉토리의 권한이 올바르게 설정되었습니다.', + ), + 'categories' => array( + 'nok' => 'Category table is improperly configured.', + 'ok' => 'Category table is ok.', + ), + 'connection' => array( + 'nok' => 'Connection to the database cannot be established.', + 'ok' => 'Connection to the database is ok.', + ), + 'ctype' => array( + 'nok' => 'Cannot find a required library for character type checking (php-ctype).', + 'ok' => '문자열 타입 검사에 필요한 라이브러리가 설치되어 있습니다 (ctype).', + ), + 'curl' => array( + 'nok' => 'cURL 라이브러리를 찾을 수 없습니다 (php-curl package).', + 'ok' => 'cURL 라이브러리가 설치되어 있습니다.', + ), + 'data' => array( + 'nok' => './data 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'ok' => '데이터 디렉토리의 권한이 올바르게 설정되었습니다.', + ), + 'database' => '데이터베이스 설치 요구사항', + 'dom' => array( + 'nok' => 'DOM을 다룰 수 있는 라이브러리를 찾을 수 없습니다 (php-xml package).', + 'ok' => 'DOM을 다룰 수 있는 라이브러리가 설치되어 있습니다.', + ), + 'entries' => array( + 'nok' => 'Entry table is improperly configured.', + 'ok' => 'Entry table is ok.', + ), + 'favicons' => array( + 'nok' => './data/favicons 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'ok' => 'favicon 디렉토리의 권한이 올바르게 설정되어 있습니다.', + ), + 'feeds' => array( + 'nok' => 'Feed table is improperly configured.', + 'ok' => 'Feed table is ok.', + ), + 'fileinfo' => array( + 'nok' => 'fileinfo 라이브러리를 찾을 수 없습니다 (fileinfo package).', + 'ok' => 'fileinfo 라이브러리가 설치되어 있습니다.', + ), + 'files' => '파일 시스템 설치 요구사항', + 'json' => array( + 'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php5-json package).', + 'ok' => 'JSON 확장 기능이 설치되어 있습니다.', + ), + 'minz' => array( + 'nok' => 'Minz 프레임워크를 찾을 수 없습니다.', + 'ok' => 'Minz 프레임워크가 설치되어 있습니다.', + ), + 'pcre' => array( + 'nok' => '정규표현식을 위한 라이브러리를 찾을 수 없습니다 (php-pcre).', + 'ok' => '정규표현식을 위한 라이브러리가 설치되어 있습니다 (PCRE).', + ), + 'pdo' => array( + 'nok' => '지원가능한 드라이버나 PDO를 찾을 수 없습니다 (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => '최소 하나의 지원가능한 드라이버와 PDO가 설치되어 있습니다 (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + '_' => 'PHP 설치 요구사항', + 'nok' => 'PHP 버전은 %s 이지만, FreshRSS에는 최소 %s의 버전이 필요합니다.', + 'ok' => 'PHP 버전은 %s 이고, FreshRSS와 호환가능 합니다..', + ), + 'tables' => array( + 'nok' => 'There are one or more missing tables in the database.', + 'ok' => 'The appropriate tables exist in the database.', + ), + 'title' => '설치 요구사항 확인', + 'tokens' => array( + 'nok' => './data/tokens 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'ok' => '토큰 디렉토리의 권한이 올바르게 설정되어 있습니다', + ), + 'users' => array( + 'nok' => './data/users 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'ok' => '사용자 디렉토리의 권한이 올바르게 설정되어 있습니다.', + ), + 'zip' => array( + 'nok' => 'ZIP 확장 기능을 찾을 수 없습니다 (php-zip package).', + 'ok' => 'ZIP 확장 기능이 설치되어 있습니다.', + ), + ), + 'extensions' => array( + 'disabled' => '비활성화됨', + 'empty_list' => '설치된 확장 기능이 없습니다', + 'enabled' => '활성화됨', + 'no_configure_view' => '이 확장 기능은 설정이 없습니다.', + 'system' => array( + '_' => '시스템 확장 기능', + 'no_rights' => '시스템 확장 기능 (이 확장 기능에 대한 권한이 없습니다)', + ), + 'title' => '확장 기능', + 'user' => '사용자 확장 기능', + ), + 'stats' => array( + '_' => '통계', + 'all_feeds' => '모든 피드', + 'category' => '카테고리', + 'entry_count' => '글 개수', + 'entry_per_category' => '카테고리별 글 개수', + 'entry_per_day' => '일일 글 개수 (최근 30 일)', + 'entry_per_day_of_week' => 'Per day of week (average: %.2f messages)', + 'entry_per_hour' => 'Per hour (average: %.2f messages)', + 'entry_per_month' => 'Per month (average: %.2f messages)', + 'entry_repartition' => '글 분류', + 'feed' => '피드', + 'feed_per_category' => '카테고리별 피드 개수', + 'idle' => 'Idle feeds', + 'main' => 'Main statistics', + 'main_stream' => 'Main stream', + 'menu' => array( + 'idle' => 'Idle feeds', + 'main' => 'Main statistics', + 'repartition' => 'Articles repartition', + ), + 'no_idle' => 'There is no idle feed!', + 'number_entries' => '%d articles', + 'percent_of_total' => '전체에서의 비율 (%%)', + 'repartition' => 'Articles repartition', + 'status_favorites' => '즐겨찾기', + 'status_read' => '읽음', + 'status_total' => '전체', + 'status_unread' => '읽지 않음', + 'title' => '통계', + 'top_feed' => '상위 10 개 피드', + ), + 'system' => array( + '_' => '시스템 설정', + 'auto-update-url' => '자동 업데이트 서버 URL', + 'instance-name' => '인스턴스 이름', + 'max-categories' => '사용자별 카테고리 개수 제한', + 'max-feeds' => '사용자별 피드 개수 제한', + 'registration' => array( + 'help' => '0: 제한 없음', + 'number' => '계정 최대 개수', + ), + ), + 'update' => array( + '_' => '업데이트', + 'apply' => '업데이트 적용하기', + 'check' => '새 업데이트 확인하기', + 'current_version' => '현재 FreshRSS 버전은 %s 입니다.', + 'last' => '마지막 확인: %s', + 'none' => '적용 가능한 업데이트가 없습니다', + 'title' => '업데이트', + ), + 'user' => array( + 'articles_and_size' => '%s 개의 글 (%s)', + 'create' => '새 사용자 생성', + 'language' => '언어', + 'number' => '%d 개의 계정이 생성되었습니다', + 'numbers' => '%d 개의 계정이 생성되었습니다', + 'password_form' => '암호
    (웹폼 로그인 방식 사용시)', + 'password_format' => '7 글자 이상이어야 합니다', + 'title' => '사용자 관리', + 'user_list' => '사용자 목록', + 'username' => '사용자 이름', + 'users' => '전체 사용자', + ), +); diff --git a/app/i18n/kr/conf.php b/app/i18n/kr/conf.php new file mode 100644 index 000000000..e1139875d --- /dev/null +++ b/app/i18n/kr/conf.php @@ -0,0 +1,174 @@ + array( + '_' => '보관', + 'advanced' => '고급 설정', + 'delete_after' => '다음 기간보다 오래된 글 삭제', + 'help' => '더 자세한 옵션은 개별 피드 설정에 있습니다', + 'keep_history_by_feed' => '피드별 최소 유지 글 개수', + 'optimize' => '데이터베이스 최적화', + 'optimize_help' => '데이터베이스 크기를 줄이기 위해 가끔씩 수행해주세요', + 'purge_now' => '지금 삭제', + 'title' => '보관', + 'ttl' => '다음 시간이 지나기 전에 새로고침 금지', + ), + 'display' => array( + '_' => '표시', + 'icon' => array( + 'bottom_line' => '하단', + 'entry' => '문서 아이콘', + 'publication_date' => '발행일', + 'related_tags' => '관련 태그', + 'sharing' => '공유', + 'top_line' => '상단', + ), + 'language' => '언어', + 'notif_html5' => array( + 'seconds' => '초 (0: 타임아웃 없음)', + 'timeout' => 'HTML5 알림 타임아웃', + ), + 'theme' => '테마', + 'title' => '표시', + 'width' => array( + 'content' => '내용 표시 너비', + 'large' => '넓음', + 'medium' => '보통', + 'no_limit' => '제한 없음', + 'thin' => '얇음', + ), + ), + 'query' => array( + '_' => '사용자 쿼리', + 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', + 'filter' => 'Filter applied:', + 'get_all' => 'Display all articles', + 'get_category' => 'Display "%s" category', + 'get_favorite' => 'Display favourite articles', + 'get_feed' => 'Display "%s" feed', + 'no_filter' => 'No filter', + 'none' => '아직 사용자 쿼리를 만들지 않았습니다.', + 'number' => 'Query n°%d', + 'order_asc' => 'Display oldest articles first', + 'order_desc' => 'Display newest articles first', + 'search' => 'Search for "%s"', + 'state_0' => 'Display all articles', + 'state_1' => 'Display read articles', + 'state_2' => 'Display unread articles', + 'state_3' => 'Display all articles', + 'state_4' => 'Display favourite articles', + 'state_5' => 'Display read favourite articles', + 'state_6' => 'Display unread favourite articles', + 'state_7' => 'Display favourite articles', + 'state_8' => 'Display not favourite articles', + 'state_9' => 'Display read not favourite articles', + 'state_10' => 'Display unread not favourite articles', + 'state_11' => 'Display not favourite articles', + 'state_12' => 'Display all articles', + 'state_13' => 'Display read articles', + 'state_14' => 'Display unread articles', + 'state_15' => 'Display all articles', + 'title' => 'User queries', + ), + 'profile' => array( + '_' => '프로필 관리', + 'delete' => array( + '_' => 'Account deletion', + 'warn' => 'Your account and all related data will be deleted.', + ), + 'password_api' => 'API 암호
    (예: 모바일 애플리케이션)', + 'password_form' => '암호
    (웹폼 로그인 방식 사용시)', + 'password_format' => '7 글자 이상이어야 합니다', + 'title' => '프로필', + ), + 'reading' => array( + '_' => '읽기', + 'after_onread' => '“모두 읽음으로 표시” 후,', + 'articles_per_page' => '페이지당 글 수', + 'auto_load_more' => '페이지 하단에 다다르면 글 더 불러오기', + 'auto_remove_article' => '글을 읽은 후 숨기기', + 'mark_updated_article_unread' => 'Mark updated articles as unread', + 'confirm_enabled' => '“모두 읽음으로 표시” 실행시 확인 창 표시', + 'display_articles_unfolded' => '글을 펼쳐진 상태로 보여주기', + 'display_categories_unfolded' => '카테고리를 접힌 상태로 보여주기', + 'hide_read_feeds' => '읽지 않은 글이 없는 카테고리와 피드 감추기 (“모든 글 보이기”가 설정된 경우 동작하지 않습니다)', + 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', + 'sides_close_article' => '글 영역 바깥을 클릭하면 글 접기', + 'jump_next' => 'jump to next unread sibling (feed or category)', + 'number_divided_when_reader' => 'Divided by 2 in the reading view.', + 'read' => array( + 'article_open_on_website' => '글이 게재된 웹사이트를 방문했을 때', + 'article_viewed' => '글을 읽었을 때', + 'scroll' => 'while scrolling', + 'upon_reception' => 'upon receiving the article', + 'when' => '읽음으로 표시…', + ), + 'show' => array( + '_' => 'Articles to display', + 'adaptive' => 'Adjust showing', + 'all_articles' => 'Show all articles', + 'unread' => 'Show only unread', + ), + 'sort' => array( + '_' => '정렬 순서', + 'newer_first' => '최근 글 먼저', + 'older_first' => '오래된 글 먼저', + ), + 'sticky_post' => '글이 펼쳐진 경우 최상단에 고정하기', + 'title' => '읽기', + 'view' => array( + 'default' => 'Default view', + 'global' => 'Global view', + 'normal' => 'Normal view', + 'reader' => 'Reading view', + ), + ), + 'sharing' => array( + '_' => '공유', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'more_information' => 'More information', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'share_name' => 'Share name to display', + 'share_url' => 'Share URL to use', + 'title' => '공유', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'shortcut' => array( + '_' => '단축키', + 'article_action' => 'Article actions', + 'auto_share' => '공유', + 'auto_share_help' => '공유 옵션이 하나만 설정되어 있다면 해당 공유 옵션을 사용하고, 그렇지 않다면 공유 옵션을 번호로 선택할 수 있습니다.', + 'close_dropdown' => '메뉴 닫기', + 'collapse_article' => '접기', + 'first_article' => '첫 글 보기', + 'focus_search' => '검색창 사용하기', + 'help' => '도움말 보기', + 'javascript' => '단축키를 사용하기 위해선 자바스크립트를 사용하도록 설정하여야 합니다', + 'last_article' => '마지막 글 보기', + 'load_more' => '글 더 불러오기', + 'mark_read' => '읽음으로 표시', + 'mark_favorite' => '즐겨찾기에 등록', + 'navigation' => '탐색', + 'navigation_help' => '"Shift" 키를 누른 상태에선 탐색 단축키가 피드에 적용됩니다.
    "Alt" 키를 누른 상태에선 탐색 단축키가 카테고리에 적용됩니다.', + 'next_article' => '다음 글 보기', + 'other_action' => 'Other actions', + 'previous_article' => '이전 글 보기', + 'see_on_website' => '글이 게재된 웹사이트에서 보기', + 'shift_for_all_read' => '+ shift를 누른 상태에선 모두 읽음으로 표시', + 'title' => '단축키', + 'user_filter' => '사용자 필터 사용하기', + 'user_filter_help' => '사용자 필터가 하나만 설정되어 있다면 해당 필터를 사용하고, 그렇지 않다면 필터를 번호로 선택할 수 있습니다.', + ), + 'user' => array( + 'articles_and_size' => '%s articles (%s)', + 'current' => '현재 사용자', + 'is_admin' => '관리자입니다', + 'users' => '전체 사용자', + ), +); diff --git a/app/i18n/kr/feedback.php b/app/i18n/kr/feedback.php new file mode 100644 index 000000000..b25791024 --- /dev/null +++ b/app/i18n/kr/feedback.php @@ -0,0 +1,109 @@ + array( + 'optimization_complete' => 'Optimization complete', + ), + 'access' => array( + 'denied' => 'You don’t have permission to access this page', + 'not_found' => 'You are looking for a page which doesn’t exist', + ), + 'auth' => array( + 'form' => array( + 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', + 'set' => 'Form is now your default authentication system.', + ), + 'login' => array( + 'invalid' => 'Login is invalid', + 'success' => 'You are connected', + ), + 'logout' => array( + 'success' => 'You are disconnected', + ), + 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', + ), + 'conf' => array( + 'error' => 'An error occurred during configuration saving', + 'query_created' => 'Query "%s" has been created.', + 'shortcuts_updated' => 'Shortcuts have been updated', + 'updated' => '설정이 저장되었습니다', + ), + 'extensions' => array( + 'already_enabled' => '%s is already enabled', + 'disable' => array( + 'ko' => '%s cannot be disabled. Check FressRSS logs for details.', + 'ok' => '%s is now disabled', + ), + 'enable' => array( + 'ko' => '%s cannot be enabled. Check FressRSS logs for details.', + 'ok' => '%s is now enabled', + ), + 'no_access' => 'You have no access on %s', + 'not_enabled' => '%s is not enabled', + 'not_found' => '%s does not exist', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'ZIP extension is not present on your server. Please try to export files one by one.', + 'feeds_imported' => 'Your feeds have been imported and will now be updated', + 'feeds_imported_with_errors' => 'Your feeds have been imported, but some errors occurred', + 'file_cannot_be_uploaded' => 'File cannot be uploaded!', + 'no_zip_extension' => 'ZIP extension is not present on your server.', + 'zip_error' => 'An error occured during ZIP import.', + ), + 'sub' => array( + 'actualize' => 'Updating', + 'category' => array( + 'created' => 'Category %s has been created.', + 'deleted' => 'Category has been deleted.', + 'emptied' => 'Category has been emptied', + 'error' => 'Category cannot be updated', + 'name_exists' => 'Category name already exists.', + 'no_id' => 'You must specify the id of the category.', + 'no_name' => 'Category name cannot be empty.', + 'not_delete_default' => 'You cannot delete the default category!', + 'not_exist' => 'The category does not exist!', + 'over_max' => 'You have reached your limit of categories (%d)', + 'updated' => 'Category has been updated.', + ), + 'feed' => array( + 'actualized' => '%s has been updated', + 'actualizeds' => 'RSS feeds have been updated', + 'added' => 'RSS feed %s has been added', + 'already_subscribed' => 'You have already subscribed to %s', + 'deleted' => 'Feed has been deleted', + 'error' => 'Feed cannot be updated', + 'internal_problem' => 'The RSS feed could not be added. Check FressRSS logs for details.', + 'invalid_url' => 'URL %s is invalid', + 'marked_read' => 'Feeds have been marked as read', + 'n_actualized' => '%d feeds have been updated', + 'n_entries_deleted' => '%d articles have been deleted', + 'no_refresh' => 'There is no feed to refresh…', + 'not_added' => '%s could not be added', + 'over_max' => 'You have reached your limit of feeds (%d)', + 'updated' => 'Feed has been updated', + ), + 'purge_completed' => 'Purge completed (%d articles deleted)', + ), + 'update' => array( + 'can_apply' => 'FreshRSS will now be updated to the version %s.', + 'error' => 'The update process has encountered an error: %s', + 'file_is_nok' => 'New version %s available, but check permissions on %s directory. HTTP server must have rights to write into', + 'finished' => 'Update completed!', + 'none' => 'No update to apply', + 'server_not_found' => 'Update server cannot be found. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'User %s has been created', + 'error' => 'User %s cannot be created', + ), + 'deleted' => array( + '_' => 'User %s has been deleted', + 'error' => 'User %s cannot be deleted', + ), + ), + 'profile' => array( + 'error' => 'Your profile cannot be modified', + 'updated' => 'Your profile has been modified', + ), +); diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php new file mode 100644 index 000000000..a54a7f7f3 --- /dev/null +++ b/app/i18n/kr/gen.php @@ -0,0 +1,186 @@ + array( + 'actualize' => 'Actualize', + 'back_to_rss_feeds' => '← RSS 피드로 돌아가기', + 'cancel' => '취소', + 'create' => '생성', + 'disable' => 'Disable', + 'empty' => 'Empty', + 'enable' => 'Enable', + 'export' => '내보내기', + 'filter' => 'Filter', + 'import' => '불러오기', + 'manage' => 'Manage', + 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Mark as favourite', + 'remove' => '삭제', + 'see_website' => 'See website', + 'submit' => '설정 저장', + 'truncate' => 'Delete all articles', + ), + 'auth' => array( + 'email' => 'Email address', + 'keep_logged_in' => 'Keep me logged in (%s days)', + 'login' => '로그인', + 'logout' => '로그아웃', + 'password' => array( + '_' => 'Password', + 'format' => 'At least 7 characters', + ), + 'registration' => array( + '_' => 'New account', + 'ask' => 'Create an account?', + 'title' => 'Account creation', + ), + 'reset' => 'Authentication reset', + 'username' => array( + '_' => 'Username', + 'admin' => 'Administrator username', + 'format' => 'maximum 16 alphanumeric characters', + ), + ), + 'date' => array( + 'Apr' => '\\A\\p\\r\\i\\l', + 'Aug' => '\\A\\u\\g\\u\\s\\t', + 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', + 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', + 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', + 'Jul' => '\\J\\u\\l\\y', + 'Jun' => '\\J\\u\\n\\e', + 'Mar' => '\\M\\a\\r\\c\\h', + 'May' => '\\M\\a\\y', + 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', + 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', + 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', + 'apr' => 'apr', + 'april' => 'Apr', + 'aug' => 'aug', + 'august' => 'Aug', + 'before_yesterday' => '어제 이전', + 'dec' => 'dec', + 'december' => 'Dec', + 'feb' => 'feb', + 'february' => 'Feb', + 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', + 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', + 'fri' => 'Fri', + 'jan' => 'jan', + 'january' => 'Jan', + 'jul' => 'jul', + 'july' => 'Jul', + 'jun' => 'jun', + 'june' => 'Jun', + 'last_3_month' => 'Last three months', + 'last_6_month' => 'Last six months', + 'last_month' => 'Last month', + 'last_week' => 'Last week', + 'last_year' => 'Last year', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'May', + 'mon' => 'Mon', + 'month' => '개월', + 'nov' => 'nov', + 'november' => 'Nov', + 'oct' => 'oct', + 'october' => 'Oct', + 'sat' => 'Sat', + 'sep' => 'sep', + 'september' => 'Sep', + 'sun' => 'Sun', + 'thu' => 'Thu', + 'today' => 'Today', + 'tue' => 'Tue', + 'wed' => 'Wed', + 'yesterday' => 'Yesterday', + ), + 'freshrss' => array( + '_' => 'FreshRSS', + 'about' => 'About FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Empty category', + 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', + 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favourites and user queries. It cannot be cancelled!', + 'feedback' => array( + 'body_new_articles' => 'There are %%d new articles to read on FreshRSS.', + 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', + 'title_new_articles' => 'FreshRSS: new articles!', + ), + 'new_article' => 'There are new available articles, click to refresh the page.', + 'should_be_activated' => 'JavaScript must be enabled', + ), + 'lang' => array( + 'cz' => 'Čeština', + 'de' => 'Deutsch', + 'en' => 'English', + 'fr' => 'Français', + 'it' => 'Italiano', + 'nl' => 'Nederlands', + 'ru' => 'Русский', + 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', + 'kr' => '한국어', + ), + 'menu' => array( + 'about' => '정보', + 'admin' => '관리', + 'archiving' => '보관', + 'authentication' => '인증', + 'check_install' => '설치 요구사항 확인', + 'configuration' => '설정', + 'display' => '표시', + 'extensions' => '확장 기능', + 'logs' => '로그', + 'queries' => '사용자 쿼리', + 'reading' => '읽기', + 'search' => '단어 또는 #태그 검색', + 'sharing' => '공유', + 'shortcuts' => '단축키', + 'stats' => '통계', + 'system' => '시스템 설정', + 'update' => '업데이트', + 'user_management' => '사용자 관리', + 'user_profile' => '프로필', + ), + 'pagination' => array( + 'first' => 'First', + 'last' => 'Last', + 'load_more' => 'Load more articles', + 'mark_all_read' => 'Mark all as read', + 'next' => 'Next', + 'nothing_to_load' => 'There are no more articles', + 'previous' => 'Previous', + ), + 'share' => array( + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'movim' => 'Movim', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', + 'jdh' => 'Journal du hacker', + 'Known' => 'Known based sites', + 'gnusocial' => 'GNU social', + ), + 'short' => array( + 'attention' => 'Warning!', + 'blank_to_disable' => 'Leave blank to disable', + 'by_author' => 'By %s', + 'by_default' => '기본값', + 'damn' => 'Blast!', + 'default_category' => '분류 없음', + 'no' => 'No', + 'not_applicable' => '사용할 수 없음', + 'ok' => 'Ok!', + 'or' => 'or', + 'yes' => 'Yes', + ), +); diff --git a/app/i18n/kr/index.php b/app/i18n/kr/index.php new file mode 100644 index 000000000..622455bc0 --- /dev/null +++ b/app/i18n/kr/index.php @@ -0,0 +1,61 @@ + array( + '_' => 'About', + 'agpl3' => 'AGPL 3', + 'bugs_reports' => 'Bugs reports', + 'credits' => 'Credits', + 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. FreshRSS is based on Minz, a PHP framework.', + 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', + 'github' => 'on Github', + 'license' => 'License', + 'project_website' => 'Project website', + 'title' => 'About', + 'version' => 'Version', + 'website' => 'Website', + ), + 'feed' => array( + 'add' => 'You may add some feeds.', + 'empty' => 'There is no article to show.', + 'rss_of' => 'RSS feed of %s', + 'title' => 'Your RSS feeds', + 'title_global' => 'Global view', + 'title_fav' => 'Your favourites', + ), + 'log' => array( + '_' => '로그', + 'clear' => '로그 모두 지우기', + 'empty' => '로그 파일이 비어있습니다', + 'title' => '로그', + ), + 'menu' => array( + 'about' => 'About FreshRSS', + 'add_query' => 'Add a query', + 'before_one_day' => 'Before one day', + 'before_one_week' => 'Before one week', + 'favorites' => '즐겨찾기 (%s)', + 'global_view' => 'Global view', + 'main_stream' => 'Main stream', + 'mark_all_read' => 'Mark all as read', + 'mark_cat_read' => 'Mark category as read', + 'mark_feed_read' => 'Mark feed as read', + 'newer_first' => 'Newer first', + 'non-starred' => 'Show all but favourites', + 'normal_view' => 'Normal view', + 'older_first' => 'Oldest first', + 'queries' => 'User queries', + 'read' => 'Show only read', + 'reader_view' => 'Reading view', + 'rss_view' => 'RSS feed', + 'search_short' => 'Search', + 'starred' => 'Show only favourites', + 'stats' => 'Statistics', + 'subscription' => '구독 관리', + 'unread' => 'Show only unread', + ), + 'share' => 'Share', + 'tag' => array( + 'related' => 'Related tags', + ), +); diff --git a/app/i18n/kr/install.php b/app/i18n/kr/install.php new file mode 100644 index 000000000..40fff37dd --- /dev/null +++ b/app/i18n/kr/install.php @@ -0,0 +1,119 @@ + array( + 'finish' => 'Complete installation', + 'fix_errors_before' => 'Please fix errors before skipping to the next step.', + 'keep_install' => 'Keep previous configuration', + 'next_step' => 'Go to the next step', + 'reinstall' => 'Reinstall FreshRSS', + ), + 'auth' => array( + 'form' => 'Web form (traditional, requires JavaScript)', + 'http' => 'HTTP (for advanced users with HTTPS)', + 'none' => 'None (dangerous)', + 'password_form' => 'Password
    (for the Web-form login method)', + 'password_format' => 'At least 7 characters', + 'type' => 'Authentication method', + ), + 'bdd' => array( + '_' => 'Database', + 'conf' => array( + '_' => 'Database configuration', + 'ko' => 'Verify your database information.', + 'ok' => 'Database configuration has been saved.', + ), + 'host' => 'Host', + 'prefix' => 'Table prefix', + 'password' => 'Database password', + 'type' => 'Type of database', + 'username' => 'Database username', + ), + 'check' => array( + '_' => 'Checks', + 'already_installed' => 'We have detected that FreshRSS is already installed!', + 'cache' => array( + 'nok' => 'Check permissions on ./data/cache directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on cache directory are good.', + ), + 'ctype' => array( + 'nok' => 'Cannot find a required library for character type checking (php-ctype).', + 'ok' => 'You have the required library for character type checking (ctype).', + ), + 'curl' => array( + 'nok' => 'Cannot find the cURL library (php-curl package).', + 'ok' => 'You have the cURL library.', + ), + 'data' => array( + 'nok' => 'Check permissions on ./data directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on data directory are good.', + ), + 'dom' => array( + 'nok' => 'Cannot find a required library to browse the DOM.', + 'ok' => 'You have the required library to browse the DOM.', + ), + 'favicons' => array( + 'nok' => 'Check permissions on ./data/favicons directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on favicons directory are good.', + ), + 'fileinfo' => array( + 'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).', + 'ok' => 'You have the fileinfo library.', + ), + 'http_referer' => array( + 'nok' => 'Please check that you are not altering your HTTP REFERER.', + 'ok' => 'Your HTTP REFERER is known and corresponds to your server.', + ), + 'json' => array( + 'nok' => 'Cannot find a recommended library to parse JSON.', + 'ok' => 'You have a recommended library to parse JSON.', + ), + 'minz' => array( + 'nok' => 'Cannot find the Minz framework.', + 'ok' => 'You have the Minz framework.', + ), + 'pcre' => array( + 'nok' => 'Cannot find a required library for regular expressions (php-pcre).', + 'ok' => 'You have the required library for regular expressions (PCRE).', + ), + 'pdo' => array( + 'nok' => 'Cannot find PDO or one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + 'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.', + 'ok' => 'Your PHP version is %s, which is compatible with FreshRSS.', + ), + 'users' => array( + 'nok' => 'Check permissions on ./data/users directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on users directory are good.', + ), + 'xml' => array( + 'nok' => 'Cannot find the required library to parse XML.', + 'ok' => 'You have the required library to parse XML.', + ), + ), + 'conf' => array( + '_' => 'General configuration', + 'ok' => 'General configuration has been saved.', + ), + 'congratulations' => 'Congratulations!', + 'default_user' => 'Username of the default user (maximum 16 alphanumeric characters)', + 'delete_articles_after' => 'Remove articles after', + 'fix_errors_before' => 'Please fix errors before skipping to the next step.', + 'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled', + 'js' => array( + 'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?', + ), + 'language' => array( + '_' => 'Language', + 'choose' => 'Choose a language for FreshRSS', + 'defined' => 'Language has been defined.', + ), + 'not_deleted' => 'Something went wrong; you must delete the file %s manually.', + 'ok' => 'The installation process was successful.', + 'step' => 'step %d', + 'steps' => 'Steps', + 'title' => 'Installation · FreshRSS', + 'this_is_the_end' => 'This is the end', +); diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php new file mode 100644 index 000000000..882d7d4ae --- /dev/null +++ b/app/i18n/kr/sub.php @@ -0,0 +1,62 @@ + array( + '_' => 'Category', + 'add' => '카테고리 추가', + 'empty' => '빈 카테고리', + 'new' => '새 카테고리', + ), + 'feed' => array( + 'add' => 'RSS 피드 추가', + 'advanced' => 'Advanced', + 'archiving' => 'Archiving', + 'auth' => array( + 'configuration' => 'Login', + 'help' => 'Allows access to HTTP protected RSS feeds', + 'http' => 'HTTP Authentication', + 'password' => 'HTTP password', + 'username' => 'HTTP username', + ), + 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', + 'css_path' => 'Articles CSS path on original website', + 'description' => 'Description', + 'empty' => 'This feed is empty. Please verify that it is still maintained.', + 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then update it.', + 'in_main_stream' => 'Show in main stream', + 'informations' => 'Information', + 'keep_history' => 'Minimum number of articles to keep', + 'moved_category_deleted' => '카테고리를 삭제하면, 해당 카테고리 아래에 있던 피드들은 자동적으로 %s 아래로 분류됩니다.', + 'no_selected' => 'No feed selected.', + 'number_entries' => '%d articles', + 'stats' => 'Statistics', + 'think_to_add' => 'You may add some feeds.', + 'title' => 'Title', + 'title_add' => 'Add a RSS feed', + 'ttl' => 'Do not automatically refresh more often than', + 'url' => 'Feed URL', + 'validator' => 'Check the validity of the feed', + 'website' => 'Website URL', + 'pubsubhubbub' => 'Instant notification with PubSubHubbub', + ), + 'import_export' => array( + 'export' => '내보내기', + 'export_opml' => '피드 목록 내보내기 (OPML)', + 'export_starred' => '즐겨찾기 내보내기', + 'feed_list' => 'List of %s articles', + 'file_to_import' => '불러올 파일
    (OPML, JSON 또는 ZIP)', + 'file_to_import_no_zip' => '불러올 파일
    (OPML 또는 JSON)', + 'import' => '불러오기', + 'starred_list' => 'List of favourite articles', + 'title' => '불러오기 / 내보내기', + ), + 'menu' => array( + 'bookmark' => 'Subscribe (FreshRSS bookmark)', + 'import_export' => '불러오기 / 내보내기', + 'subscription_management' => '구독 관리', + ), + 'title' => array( + '_' => '구독 관리', + 'feed_management' => 'RSS 피드 관리', + ), +); diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 07d444ec3..56582447f 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -121,6 +121,7 @@ return array( 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'kr' => '한국어', ), 'menu' => array( 'about' => 'Over', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index c913b8720..7f8c77b59 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -121,6 +121,7 @@ return array( 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'kr' => '한국어', ), 'menu' => array( 'about' => 'About', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 4da0206ec..04fc5485f 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -121,6 +121,7 @@ return array( 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'kr' => '한국어', ), 'menu' => array( 'about' => 'Hakkında', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index a4ef03bc9..8c74e67ee 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -121,7 +121,8 @@ return array( 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'zh-cn' => '简体中文' + 'zh-cn' => '简体中文', + 'kr' => '한국어', ), 'menu' => array( 'about' => '关于', -- cgit v1.2.3 From 5e796a203649934c278d673be0c7264f3687fe71 Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Thu, 8 Jun 2017 16:09:42 +0900 Subject: Done admin.php --- app/i18n/kr/admin.php | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/app/i18n/kr/admin.php b/app/i18n/kr/admin.php index da207053f..fb999460d 100644 --- a/app/i18n/kr/admin.php +++ b/app/i18n/kr/admin.php @@ -21,15 +21,15 @@ return array( 'ok' => '캐시 디렉토리의 권한이 올바르게 설정되었습니다.', ), 'categories' => array( - 'nok' => 'Category table is improperly configured.', - 'ok' => 'Category table is ok.', + 'nok' => 'category 테이블 설정이 잘못되었습니다.', + 'ok' => 'category 테이블이 올바르게 설정되었습니다.', ), 'connection' => array( - 'nok' => 'Connection to the database cannot be established.', - 'ok' => 'Connection to the database is ok.', + 'nok' => '데이터베이스에 연결할 수 없습니다.', + 'ok' => '데이터베이스와의 연결이 올바르게 설정되었습니다.', ), 'ctype' => array( - 'nok' => 'Cannot find a required library for character type checking (php-ctype).', + 'nok' => '문자열 타입 검사에 필요한 라이브러리를 찾을 수 없습니다 (php-ctype).', 'ok' => '문자열 타입 검사에 필요한 라이브러리가 설치되어 있습니다 (ctype).', ), 'curl' => array( @@ -46,16 +46,16 @@ return array( 'ok' => 'DOM을 다룰 수 있는 라이브러리가 설치되어 있습니다.', ), 'entries' => array( - 'nok' => 'Entry table is improperly configured.', - 'ok' => 'Entry table is ok.', + 'nok' => 'entry 테이블 설정이 잘못되었습니다.', + 'ok' => 'entry 테이블이 올바르게 설정되었습니다Entry table is ok.', ), 'favicons' => array( 'nok' => './data/favicons 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', 'ok' => 'favicon 디렉토리의 권한이 올바르게 설정되어 있습니다.', ), 'feeds' => array( - 'nok' => 'Feed table is improperly configured.', - 'ok' => 'Feed table is ok.', + 'nok' => 'feed 테이블 설정이 잘못되었습니다.', + 'ok' => 'feed 테이블이 올바르게 설정되었습니다', ), 'fileinfo' => array( 'nok' => 'fileinfo 라이브러리를 찾을 수 없습니다 (fileinfo package).', @@ -84,8 +84,8 @@ return array( 'ok' => 'PHP 버전은 %s 이고, FreshRSS와 호환가능 합니다..', ), 'tables' => array( - 'nok' => 'There are one or more missing tables in the database.', - 'ok' => 'The appropriate tables exist in the database.', + 'nok' => '하나 이상의 테이블을 데이터베이스에서 찾을 수 없습니다.', + 'ok' => '데이터베이스에 모든 테이블이 존재합니다.', ), 'title' => '설치 요구사항 확인', 'tokens' => array( @@ -120,24 +120,24 @@ return array( 'entry_count' => '글 개수', 'entry_per_category' => '카테고리별 글 개수', 'entry_per_day' => '일일 글 개수 (최근 30 일)', - 'entry_per_day_of_week' => 'Per day of week (average: %.2f messages)', - 'entry_per_hour' => 'Per hour (average: %.2f messages)', - 'entry_per_month' => 'Per month (average: %.2f messages)', + 'entry_per_day_of_week' => '요일별 (평균: %.2f 개의 글)', + 'entry_per_hour' => '시간별 (평균: %.2f 개의 글)', + 'entry_per_month' => '월별 (평균: %.2f 개의 글)', 'entry_repartition' => '글 분류', 'feed' => '피드', 'feed_per_category' => '카테고리별 피드 개수', - 'idle' => 'Idle feeds', - 'main' => 'Main statistics', - 'main_stream' => 'Main stream', + 'idle' => '유휴 피드', + 'main' => '주요 통계', + 'main_stream' => '메인 스트림', 'menu' => array( - 'idle' => 'Idle feeds', - 'main' => 'Main statistics', - 'repartition' => 'Articles repartition', + 'idle' => '유휴 피드', + 'main' => '주요 통계', + 'repartition' => '글 분류', ), - 'no_idle' => 'There is no idle feed!', - 'number_entries' => '%d articles', + 'no_idle' => '유휴 피드가 없습니다!', + 'number_entries' => '%d 개의 글', 'percent_of_total' => '전체에서의 비율 (%%)', - 'repartition' => 'Articles repartition', + 'repartition' => '글 분류', 'status_favorites' => '즐겨찾기', 'status_read' => '읽음', 'status_total' => '전체', -- cgit v1.2.3 From 25cd808c44eb00696ea17029fad8afd7c7b2495f Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Thu, 8 Jun 2017 16:31:15 +0900 Subject: Working on other files --- app/i18n/kr/conf.php | 58 +++++++++++++++++++------------------- app/i18n/kr/feedback.php | 38 ++++++++++++------------- app/i18n/kr/gen.php | 72 ++++++++++++++++++++++++------------------------ app/i18n/kr/index.php | 52 +++++++++++++++++----------------- app/i18n/kr/sub.php | 42 ++++++++++++++-------------- 5 files changed, 131 insertions(+), 131 deletions(-) diff --git a/app/i18n/kr/conf.php b/app/i18n/kr/conf.php index e1139875d..ba0ad8ea8 100644 --- a/app/i18n/kr/conf.php +++ b/app/i18n/kr/conf.php @@ -41,14 +41,14 @@ return array( 'query' => array( '_' => '사용자 쿼리', 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', - 'filter' => 'Filter applied:', + 'filter' => '적용된 필터:', 'get_all' => 'Display all articles', 'get_category' => 'Display "%s" category', 'get_favorite' => 'Display favourite articles', 'get_feed' => 'Display "%s" feed', - 'no_filter' => 'No filter', + 'no_filter' => '필터가 없습니다', 'none' => '아직 사용자 쿼리를 만들지 않았습니다.', - 'number' => 'Query n°%d', + 'number' => '쿼리 n°%d', 'order_asc' => 'Display oldest articles first', 'order_desc' => 'Display newest articles first', 'search' => 'Search for "%s"', @@ -68,13 +68,13 @@ return array( 'state_13' => 'Display read articles', 'state_14' => 'Display unread articles', 'state_15' => 'Display all articles', - 'title' => 'User queries', + 'title' => '사용자 쿼리', ), 'profile' => array( '_' => '프로필 관리', 'delete' => array( - '_' => 'Account deletion', - 'warn' => 'Your account and all related data will be deleted.', + '_' => '계정 삭제', + 'warn' => '당신의 계정과 관련된 모든 데이터가 삭제됩니다.', ), 'password_api' => 'API 암호
    (예: 모바일 애플리케이션)', 'password_form' => '암호
    (웹폼 로그인 방식 사용시)', @@ -87,27 +87,27 @@ return array( 'articles_per_page' => '페이지당 글 수', 'auto_load_more' => '페이지 하단에 다다르면 글 더 불러오기', 'auto_remove_article' => '글을 읽은 후 숨기기', - 'mark_updated_article_unread' => 'Mark updated articles as unread', + 'mark_updated_article_unread' => '갱신 된 글을 읽지 않음으로 표시', 'confirm_enabled' => '“모두 읽음으로 표시” 실행시 확인 창 표시', 'display_articles_unfolded' => '글을 펼쳐진 상태로 보여주기', 'display_categories_unfolded' => '카테고리를 접힌 상태로 보여주기', - 'hide_read_feeds' => '읽지 않은 글이 없는 카테고리와 피드 감추기 (“모든 글 보이기”가 설정된 경우 동작하지 않습니다)', - 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', + 'hide_read_feeds' => '읽지 않은 글이 없는 카테고리와 피드 감추기 (“모든 글 표시”가 설정된 경우 동작하지 않습니다)', + 'img_with_lazyload' => '그림을 불러오는 데에 "lazy load" 모드 사용하기', 'sides_close_article' => '글 영역 바깥을 클릭하면 글 접기', - 'jump_next' => 'jump to next unread sibling (feed or category)', - 'number_divided_when_reader' => 'Divided by 2 in the reading view.', + 'jump_next' => '다음 읽지 않은 항목으로 이동 (피드 또는 카테고리)', + 'number_divided_when_reader' => '읽기 모드에서는 절반만 표시됩니다.', 'read' => array( 'article_open_on_website' => '글이 게재된 웹사이트를 방문했을 때', 'article_viewed' => '글을 읽었을 때', - 'scroll' => 'while scrolling', - 'upon_reception' => 'upon receiving the article', + 'scroll' => '스크롤을 하며 지나갈 때', + 'upon_reception' => '글을 가져오자마자', 'when' => '읽음으로 표시…', ), 'show' => array( - '_' => 'Articles to display', - 'adaptive' => 'Adjust showing', - 'all_articles' => 'Show all articles', - 'unread' => 'Show only unread', + '_' => '글 표시 방식', + 'adaptive' => '읽지 않은 글이 없으면 모든 글 표시', + 'all_articles' => '모든 글 표시', + 'unread' => '읽지 않은 글만 표시', ), 'sort' => array( '_' => '정렬 순서', @@ -117,31 +117,31 @@ return array( 'sticky_post' => '글이 펼쳐진 경우 최상단에 고정하기', 'title' => '읽기', 'view' => array( - 'default' => 'Default view', - 'global' => 'Global view', - 'normal' => 'Normal view', - 'reader' => 'Reading view', + 'default' => '기본 보기 모드', + 'global' => '전체 모드', + 'normal' => '일반 모드', + 'reader' => '읽기 모드', ), ), 'sharing' => array( '_' => '공유', 'blogotext' => 'Blogotext', 'diaspora' => 'Diaspora*', - 'email' => 'Email', + 'email' => '메일', 'facebook' => 'Facebook', 'g+' => 'Google+', - 'more_information' => 'More information', - 'print' => 'Print', + 'more_information' => '자세한 정보', + 'print' => '인쇄', 'shaarli' => 'Shaarli', - 'share_name' => 'Share name to display', - 'share_url' => 'Share URL to use', + 'share_name' => '표시할 이름', + 'share_url' => '사용할 공유 URL', 'title' => '공유', 'twitter' => 'Twitter', 'wallabag' => 'wallabag', ), 'shortcut' => array( '_' => '단축키', - 'article_action' => 'Article actions', + 'article_action' => '글 관련 동작', 'auto_share' => '공유', 'auto_share_help' => '공유 옵션이 하나만 설정되어 있다면 해당 공유 옵션을 사용하고, 그렇지 않다면 공유 옵션을 번호로 선택할 수 있습니다.', 'close_dropdown' => '메뉴 닫기', @@ -157,7 +157,7 @@ return array( 'navigation' => '탐색', 'navigation_help' => '"Shift" 키를 누른 상태에선 탐색 단축키가 피드에 적용됩니다.
    "Alt" 키를 누른 상태에선 탐색 단축키가 카테고리에 적용됩니다.', 'next_article' => '다음 글 보기', - 'other_action' => 'Other actions', + 'other_action' => '다른 동작', 'previous_article' => '이전 글 보기', 'see_on_website' => '글이 게재된 웹사이트에서 보기', 'shift_for_all_read' => '+ shift를 누른 상태에선 모두 읽음으로 표시', @@ -166,7 +166,7 @@ return array( 'user_filter_help' => '사용자 필터가 하나만 설정되어 있다면 해당 필터를 사용하고, 그렇지 않다면 필터를 번호로 선택할 수 있습니다.', ), 'user' => array( - 'articles_and_size' => '%s articles (%s)', + 'articles_and_size' => '%s 개의 글 (%s)', 'current' => '현재 사용자', 'is_admin' => '관리자입니다', 'users' => '전체 사용자', diff --git a/app/i18n/kr/feedback.php b/app/i18n/kr/feedback.php index b25791024..ddd017446 100644 --- a/app/i18n/kr/feedback.php +++ b/app/i18n/kr/feedback.php @@ -2,11 +2,11 @@ return array( 'admin' => array( - 'optimization_complete' => 'Optimization complete', + 'optimization_complete' => '최적화과 완료되었습니다', ), 'access' => array( - 'denied' => 'You don’t have permission to access this page', - 'not_found' => 'You are looking for a page which doesn’t exist', + 'denied' => '이 페이지에 접근할 수 있는 권한이 없습니다', + 'not_found' => '이 페이지는 존재하지 않습니다', ), 'auth' => array( 'form' => array( @@ -14,18 +14,18 @@ return array( 'set' => 'Form is now your default authentication system.', ), 'login' => array( - 'invalid' => 'Login is invalid', - 'success' => 'You are connected', + 'invalid' => '유효하지 않은 로그인입니다', + 'success' => '접속되었습니다', ), 'logout' => array( - 'success' => 'You are disconnected', + 'success' => '접속이 해제되었습니다', ), - 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', + 'no_password_set' => '관리자 암호가 설정되지 않았습니다. 이 기능은 사용할 수 없습니다.', ), 'conf' => array( - 'error' => 'An error occurred during configuration saving', - 'query_created' => 'Query "%s" has been created.', - 'shortcuts_updated' => 'Shortcuts have been updated', + 'error' => '설정을 저장하는 동안 문제가 발생했습니다', + 'query_created' => '쿼리 "%s" 가 생성되었습니다.', + 'shortcuts_updated' => '단축키가 갱신되었습니다', 'updated' => '설정이 저장되었습니다', ), 'extensions' => array( @@ -43,12 +43,12 @@ return array( 'not_found' => '%s does not exist', ), 'import_export' => array( - 'export_no_zip_extension' => 'ZIP extension is not present on your server. Please try to export files one by one.', - 'feeds_imported' => 'Your feeds have been imported and will now be updated', - 'feeds_imported_with_errors' => 'Your feeds have been imported, but some errors occurred', - 'file_cannot_be_uploaded' => 'File cannot be uploaded!', - 'no_zip_extension' => 'ZIP extension is not present on your server.', - 'zip_error' => 'An error occured during ZIP import.', + 'export_no_zip_extension' => 'ZIP 확장 기능을 서버에서 찾을 수 없습니다. 파일을 하나씩 내보내세요.', + 'feeds_imported' => '피드를 성공적으로 불러왔습니다', + 'feeds_imported_with_errors' => '피드를 불러왔지만, 문제가 발생했습니다', + 'file_cannot_be_uploaded' => '파일을 업로드할 수 없습니다!', + 'no_zip_extension' => 'ZIP 확장 기능을 서버에서 찾을 수 없습니다.', + 'zip_error' => 'ZIP 파일을 불러오는 동안 문제가 발생했습니다.', ), 'sub' => array( 'actualize' => 'Updating', @@ -68,7 +68,7 @@ return array( 'feed' => array( 'actualized' => '%s has been updated', 'actualizeds' => 'RSS feeds have been updated', - 'added' => 'RSS feed %s has been added', + 'added' => 'RSS 피드 %s 가 추가되었습니다', 'already_subscribed' => 'You have already subscribed to %s', 'deleted' => 'Feed has been deleted', 'error' => 'Feed cannot be updated', @@ -94,8 +94,8 @@ return array( ), 'user' => array( 'created' => array( - '_' => 'User %s has been created', - 'error' => 'User %s cannot be created', + '_' => '사용자 %s 가 생성되었습니다', + 'error' => '사용자 %s 를 생성할 수 없습니다', ), 'deleted' => array( '_' => 'User %s has been deleted', diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index a54a7f7f3..7d6302064 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -7,13 +7,13 @@ return array( 'cancel' => '취소', 'create' => '생성', 'disable' => 'Disable', - 'empty' => 'Empty', + 'empty' => '비우기', 'enable' => 'Enable', 'export' => '내보내기', - 'filter' => 'Filter', + 'filter' => '해당하는 글 보기', 'import' => '불러오기', - 'manage' => 'Manage', - 'mark_read' => 'Mark as read', + 'manage' => '관리', + 'mark_read' => '읽음으로 표시', 'mark_favorite' => 'Mark as favourite', 'remove' => '삭제', 'see_website' => 'See website', @@ -22,11 +22,11 @@ return array( ), 'auth' => array( 'email' => 'Email address', - 'keep_logged_in' => 'Keep me logged in (%s days)', + 'keep_logged_in' => '로그인 유지 (%s 일)', 'login' => '로그인', 'logout' => '로그아웃', 'password' => array( - '_' => 'Password', + '_' => '암호', 'format' => 'At least 7 characters', ), 'registration' => array( @@ -36,7 +36,7 @@ return array( ), 'reset' => 'Authentication reset', 'username' => array( - '_' => 'Username', + '_' => '사용자 이름', 'admin' => 'Administrator username', 'format' => 'maximum 16 alphanumeric characters', ), @@ -54,51 +54,51 @@ return array( 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', - 'apr' => 'apr', + 'apr' => '4월', 'april' => 'Apr', - 'aug' => 'aug', + 'aug' => '8월', 'august' => 'Aug', 'before_yesterday' => '어제 이전', - 'dec' => 'dec', + 'dec' => '12월', 'december' => 'Dec', - 'feb' => 'feb', + 'feb' => '2월', 'february' => 'Feb', 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', - 'fri' => 'Fri', - 'jan' => 'jan', + 'fri' => '금', + 'jan' => '1월', 'january' => 'Jan', - 'jul' => 'jul', + 'jul' => '7월', 'july' => 'Jul', - 'jun' => 'jun', + 'jun' => '6월', 'june' => 'Jun', - 'last_3_month' => 'Last three months', - 'last_6_month' => 'Last six months', - 'last_month' => 'Last month', - 'last_week' => 'Last week', - 'last_year' => 'Last year', - 'mar' => 'mar', + 'last_3_month' => '최근 3 개월', + 'last_6_month' => '최근 6 개월', + 'last_month' => '최근 한 달', + 'last_week' => '최근 한 주', + 'last_year' => '최근 일 년', + 'mar' => '3월', 'march' => 'Mar', - 'may' => 'May', - 'mon' => 'Mon', + 'may' => '5월', + 'mon' => '월', 'month' => '개월', - 'nov' => 'nov', + 'nov' => '11월', 'november' => 'Nov', - 'oct' => 'oct', + 'oct' => '10월', 'october' => 'Oct', - 'sat' => 'Sat', - 'sep' => 'sep', + 'sat' => '토', + 'sep' => '9월', 'september' => 'Sep', - 'sun' => 'Sun', - 'thu' => 'Thu', + 'sun' => '일', + 'thu' => '목', 'today' => 'Today', - 'tue' => 'Tue', - 'wed' => 'Wed', + 'tue' => '화', + 'wed' => '수', 'yesterday' => 'Yesterday', ), 'freshrss' => array( '_' => 'FreshRSS', - 'about' => 'About FreshRSS', + 'about' => '정보', ), 'js' => array( 'category_empty' => 'Empty category', @@ -157,11 +157,11 @@ return array( 'share' => array( 'blogotext' => 'Blogotext', 'diaspora' => 'Diaspora*', - 'email' => 'Email', + 'email' => '메일', 'facebook' => 'Facebook', 'g+' => 'Google+', 'movim' => 'Movim', - 'print' => 'Print', + 'print' => '인쇄', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', 'wallabag' => 'wallabag v1', @@ -171,8 +171,8 @@ return array( 'gnusocial' => 'GNU social', ), 'short' => array( - 'attention' => 'Warning!', - 'blank_to_disable' => 'Leave blank to disable', + 'attention' => '경고!', + 'blank_to_disable' => '빈 칸으로 두면 비활성화', 'by_author' => 'By %s', 'by_default' => '기본값', 'damn' => 'Blast!', diff --git a/app/i18n/kr/index.php b/app/i18n/kr/index.php index 622455bc0..a6b391098 100644 --- a/app/i18n/kr/index.php +++ b/app/i18n/kr/index.php @@ -2,24 +2,24 @@ return array( 'about' => array( - '_' => 'About', + '_' => '정보', 'agpl3' => 'AGPL 3', - 'bugs_reports' => 'Bugs reports', + 'bugs_reports' => '버그 제보하기', 'credits' => 'Credits', 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. FreshRSS is based on Minz, a PHP framework.', 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', 'github' => 'on Github', - 'license' => 'License', - 'project_website' => 'Project website', - 'title' => 'About', + 'license' => '라이센스', + 'project_website' => '프로젝트 웹사이트', + 'title' => '정보', 'version' => 'Version', 'website' => 'Website', ), 'feed' => array( - 'add' => 'You may add some feeds.', - 'empty' => 'There is no article to show.', + 'add' => '피드를 추가하세요.', + 'empty' => '글이 없습니다.', 'rss_of' => 'RSS feed of %s', - 'title' => 'Your RSS feeds', + 'title' => 'RSS 피드', 'title_global' => 'Global view', 'title_fav' => 'Your favourites', ), @@ -30,32 +30,32 @@ return array( 'title' => '로그', ), 'menu' => array( - 'about' => 'About FreshRSS', - 'add_query' => 'Add a query', - 'before_one_day' => 'Before one day', - 'before_one_week' => 'Before one week', + 'about' => 'FreshRSS 정보', + 'add_query' => '쿼리 만들기', + 'before_one_day' => '하루 이전', + 'before_one_week' => '한 주 이전', 'favorites' => '즐겨찾기 (%s)', 'global_view' => 'Global view', - 'main_stream' => 'Main stream', - 'mark_all_read' => 'Mark all as read', - 'mark_cat_read' => 'Mark category as read', + 'main_stream' => '메인 스트림', + 'mark_all_read' => '모두 읽음으로 표시', + 'mark_cat_read' => '이 카테고리를 읽음으로 표시', 'mark_feed_read' => 'Mark feed as read', - 'newer_first' => 'Newer first', - 'non-starred' => 'Show all but favourites', + 'newer_first' => '최근 글 먼저', + 'non-starred' => '즐겨찾기를 제외하고 표시', 'normal_view' => 'Normal view', - 'older_first' => 'Oldest first', - 'queries' => 'User queries', - 'read' => 'Show only read', + 'older_first' => '오래된 글 먼저', + 'queries' => '사용자 쿼리', + 'read' => '읽은 글만 표시', 'reader_view' => 'Reading view', - 'rss_view' => 'RSS feed', + 'rss_view' => 'RSS 피드', 'search_short' => 'Search', - 'starred' => 'Show only favourites', - 'stats' => 'Statistics', + 'starred' => '즐겨찾기만 표시', + 'stats' => '통계', 'subscription' => '구독 관리', - 'unread' => 'Show only unread', + 'unread' => '읽지 않은 글만 표시', ), - 'share' => 'Share', + 'share' => '공유', 'tag' => array( - 'related' => 'Related tags', + 'related' => '관련 태그', ), ); diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php index 882d7d4ae..6acc9722c 100644 --- a/app/i18n/kr/sub.php +++ b/app/i18n/kr/sub.php @@ -2,42 +2,42 @@ return array( 'category' => array( - '_' => 'Category', + '_' => '카테고리', 'add' => '카테고리 추가', 'empty' => '빈 카테고리', 'new' => '새 카테고리', ), 'feed' => array( 'add' => 'RSS 피드 추가', - 'advanced' => 'Advanced', - 'archiving' => 'Archiving', + 'advanced' => '고급 설정', + 'archiving' => '보관', 'auth' => array( - 'configuration' => 'Login', - 'help' => 'Allows access to HTTP protected RSS feeds', - 'http' => 'HTTP Authentication', - 'password' => 'HTTP password', - 'username' => 'HTTP username', + 'configuration' => '로그인', + 'help' => 'HTTP 접속이 제한되는 RSS 피드에 접근합니다', + 'http' => 'HTTP 인증', + 'password' => 'HTTP 암호', + 'username' => 'HTTP 사용자 이름', ), 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', 'css_path' => 'Articles CSS path on original website', - 'description' => 'Description', - 'empty' => 'This feed is empty. Please verify that it is still maintained.', - 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then update it.', - 'in_main_stream' => 'Show in main stream', - 'informations' => 'Information', - 'keep_history' => 'Minimum number of articles to keep', + 'description' => '설명', + 'empty' => '이 피드는 비어있습니다. 피드가 계속 운영되고 있는지 확인하세요.', + 'error' => '이 피드에 문제가 발생했습니다. 이 피드에 접근 권한이 있는지 확인하세요.', + 'in_main_stream' => '메인 스트림에 표시하기', + 'informations' => '정보', + 'keep_history' => '최소 유지 글 개수', 'moved_category_deleted' => '카테고리를 삭제하면, 해당 카테고리 아래에 있던 피드들은 자동적으로 %s 아래로 분류됩니다.', 'no_selected' => 'No feed selected.', 'number_entries' => '%d articles', - 'stats' => 'Statistics', + 'stats' => '통계', 'think_to_add' => 'You may add some feeds.', - 'title' => 'Title', + 'title' => '제목', 'title_add' => 'Add a RSS feed', - 'ttl' => 'Do not automatically refresh more often than', - 'url' => 'Feed URL', - 'validator' => 'Check the validity of the feed', - 'website' => 'Website URL', - 'pubsubhubbub' => 'Instant notification with PubSubHubbub', + 'ttl' => '다음 시간이 지나기 전에 새로고침 금지', + 'url' => '피드 URL', + 'validator' => '피드 유효성 검사', + 'website' => '웹사이트 URL', + 'pubsubhubbub' => 'PubSubHubbub을 사용한 즉시 알림', ), 'import_export' => array( 'export' => '내보내기', -- cgit v1.2.3 From 2eb93f276949fe5b999206c4b8e4e73cd97dc57a Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Fri, 9 Jun 2017 00:21:30 +0900 Subject: Still working on --- app/i18n/kr/gen.php | 12 ++++++------ app/i18n/kr/index.php | 18 +++++++++--------- app/i18n/kr/sub.php | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index 7d6302064..cea5532f9 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Actualize', + 'actualize' => '새 글 가져오기', 'back_to_rss_feeds' => '← RSS 피드로 돌아가기', 'cancel' => '취소', 'create' => '생성', @@ -16,9 +16,9 @@ return array( 'mark_read' => '읽음으로 표시', 'mark_favorite' => 'Mark as favourite', 'remove' => '삭제', - 'see_website' => 'See website', + 'see_website' => '웹사이트 열기', 'submit' => '설정 저장', - 'truncate' => 'Delete all articles', + 'truncate' => '모든 글 삭제', ), 'auth' => array( 'email' => 'Email address', @@ -148,10 +148,10 @@ return array( 'pagination' => array( 'first' => 'First', 'last' => 'Last', - 'load_more' => 'Load more articles', - 'mark_all_read' => 'Mark all as read', + 'load_more' => '글 더 불러오기', + 'mark_all_read' => '모두 읽음으로 표시', 'next' => 'Next', - 'nothing_to_load' => 'There are no more articles', + 'nothing_to_load' => '더 이상 글이 없습니다', 'previous' => 'Previous', ), 'share' => array( diff --git a/app/i18n/kr/index.php b/app/i18n/kr/index.php index a6b391098..c61071335 100644 --- a/app/i18n/kr/index.php +++ b/app/i18n/kr/index.php @@ -5,15 +5,15 @@ return array( '_' => '정보', 'agpl3' => 'AGPL 3', 'bugs_reports' => '버그 제보하기', - 'credits' => 'Credits', - 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. FreshRSS is based on Minz, a PHP framework.', - 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', - 'github' => 'on Github', + 'credits' => '크레딧', + 'credits_content' => 'FreshRSS는 Bootstrap 프레임워크를 사용하진 않지만, 일부 디자인 요소를 가져왔습니다. 아이콘들GNOME 프로젝트에서 가져왔습니다. Open Sans 글꼴은 Steve Matteson가 제작하였습니다. FreshRSS는 PHP 프레임워크인 Minz에 기반하고 있습니다.', + 'freshrss_description' => 'FreshRSS는 Kriss Feed 또는 Leed와 같은 셀프 호스팅 기반의 RSS 피드 수집기입니다. FreshRSS는 강력하고 다양한 설정을 할 수 있으면서 도 가볍고 사용하기 쉽습니다.', + 'github' => 'Github 저장소에 제보', 'license' => '라이센스', 'project_website' => '프로젝트 웹사이트', 'title' => '정보', - 'version' => 'Version', - 'website' => 'Website', + 'version' => '버전', + 'website' => '웹사이트', ), 'feed' => array( 'add' => '피드를 추가하세요.', @@ -35,18 +35,18 @@ return array( 'before_one_day' => '하루 이전', 'before_one_week' => '한 주 이전', 'favorites' => '즐겨찾기 (%s)', - 'global_view' => 'Global view', + 'global_view' => '전체 모드', 'main_stream' => '메인 스트림', 'mark_all_read' => '모두 읽음으로 표시', 'mark_cat_read' => '이 카테고리를 읽음으로 표시', 'mark_feed_read' => 'Mark feed as read', 'newer_first' => '최근 글 먼저', 'non-starred' => '즐겨찾기를 제외하고 표시', - 'normal_view' => 'Normal view', + 'normal_view' => '일반 모드', 'older_first' => '오래된 글 먼저', 'queries' => '사용자 쿼리', 'read' => '읽은 글만 표시', - 'reader_view' => 'Reading view', + 'reader_view' => '읽기 모드', 'rss_view' => 'RSS 피드', 'search_short' => 'Search', 'starred' => '즐겨찾기만 표시', diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php index 6acc9722c..8a365bf28 100644 --- a/app/i18n/kr/sub.php +++ b/app/i18n/kr/sub.php @@ -18,8 +18,8 @@ return array( 'password' => 'HTTP 암호', 'username' => 'HTTP 사용자 이름', ), - 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', - 'css_path' => 'Articles CSS path on original website', + 'css_help' => '글의 일부가 포함된 RSS 피드를 가져옵니다 (주의, 시간이 좀 더 걸립니다!)', + 'css_path' => '웹사이트 상의 글 본문에 해당하는 CSS 경로', 'description' => '설명', 'empty' => '이 피드는 비어있습니다. 피드가 계속 운영되고 있는지 확인하세요.', 'error' => '이 피드에 문제가 발생했습니다. 이 피드에 접근 권한이 있는지 확인하세요.', -- cgit v1.2.3 From cd0d5ce32ede7311da6f4aead7bc2fe2a983bf4b Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 8 Jun 2017 19:35:18 +0200 Subject: Prepare next version Will be 1.7.1 or 1.8 --- CHANGELOG.md | 3 +++ constants.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 620bccc92..21459f32d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 2017-XX-XX FreshRSS 1.7.1-dev + + ## 2017-06-03 FreshRSS 1.7.0 * Features: * Deferred insertion of new articles, for better chronological order [#530](https://github.com/FreshRSS/FreshRSS/issues/530) diff --git a/constants.php b/constants.php index ef60baea0..6819e8d2d 100644 --- a/constants.php +++ b/constants.php @@ -1,5 +1,5 @@ Date: Fri, 9 Jun 2017 16:28:40 +0900 Subject: Done admin.php --- app/i18n/kr/admin.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/i18n/kr/admin.php b/app/i18n/kr/admin.php index fb999460d..1c77d6cdb 100644 --- a/app/i18n/kr/admin.php +++ b/app/i18n/kr/admin.php @@ -9,7 +9,7 @@ return array( 'http' => 'HTTP (HTTPS를 사용하는 고급 사용자용)', 'none' => '사용하지 않음 (위험)', 'title' => '인증', - 'title_reset' => 'Authentication reset', + 'title_reset' => '인증 초기화', 'token' => '인증 토큰', 'token_help' => '기본 사용자의 RSS에 인증 없이 접근할 수 있도록 합니다:', 'type' => '인증', @@ -33,7 +33,7 @@ return array( 'ok' => '문자열 타입 검사에 필요한 라이브러리가 설치되어 있습니다 (ctype).', ), 'curl' => array( - 'nok' => 'cURL 라이브러리를 찾을 수 없습니다 (php-curl package).', + 'nok' => 'cURL 라이브러리를 찾을 수 없습니다 (php-curl 패키지).', 'ok' => 'cURL 라이브러리가 설치되어 있습니다.', ), 'data' => array( @@ -42,12 +42,12 @@ return array( ), 'database' => '데이터베이스 설치 요구사항', 'dom' => array( - 'nok' => 'DOM을 다룰 수 있는 라이브러리를 찾을 수 없습니다 (php-xml package).', + 'nok' => 'DOM을 다룰 수 있는 라이브러리를 찾을 수 없습니다 (php-xml 패키지).', 'ok' => 'DOM을 다룰 수 있는 라이브러리가 설치되어 있습니다.', ), 'entries' => array( 'nok' => 'entry 테이블 설정이 잘못되었습니다.', - 'ok' => 'entry 테이블이 올바르게 설정되었습니다Entry table is ok.', + 'ok' => 'entry 테이블이 올바르게 설정되었습니다.', ), 'favicons' => array( 'nok' => './data/favicons 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', @@ -58,12 +58,12 @@ return array( 'ok' => 'feed 테이블이 올바르게 설정되었습니다', ), 'fileinfo' => array( - 'nok' => 'fileinfo 라이브러리를 찾을 수 없습니다 (fileinfo package).', + 'nok' => 'fileinfo 라이브러리를 찾을 수 없습니다 (fileinfo 패키지).', 'ok' => 'fileinfo 라이브러리가 설치되어 있습니다.', ), 'files' => '파일 시스템 설치 요구사항', 'json' => array( - 'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php5-json package).', + 'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php5-json 패키지).', 'ok' => 'JSON 확장 기능이 설치되어 있습니다.', ), 'minz' => array( @@ -81,7 +81,7 @@ return array( 'php' => array( '_' => 'PHP 설치 요구사항', 'nok' => 'PHP 버전은 %s 이지만, FreshRSS에는 최소 %s의 버전이 필요합니다.', - 'ok' => 'PHP 버전은 %s 이고, FreshRSS와 호환가능 합니다..', + 'ok' => 'PHP 버전은 %s 이고, FreshRSS와 호환가능 합니다.', ), 'tables' => array( 'nok' => '하나 이상의 테이블을 데이터베이스에서 찾을 수 없습니다.', @@ -97,7 +97,7 @@ return array( 'ok' => '사용자 디렉토리의 권한이 올바르게 설정되어 있습니다.', ), 'zip' => array( - 'nok' => 'ZIP 확장 기능을 찾을 수 없습니다 (php-zip package).', + 'nok' => 'ZIP 확장 기능을 찾을 수 없습니다 (php-zip 패키지).', 'ok' => 'ZIP 확장 기능이 설치되어 있습니다.', ), ), -- cgit v1.2.3 From 3b8201387d41609d576387e35a9e6784d199dfa9 Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Fri, 9 Jun 2017 17:25:29 +0900 Subject: Done conf.php --- app/i18n/kr/conf.php | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/app/i18n/kr/conf.php b/app/i18n/kr/conf.php index ba0ad8ea8..e116a6456 100644 --- a/app/i18n/kr/conf.php +++ b/app/i18n/kr/conf.php @@ -40,34 +40,34 @@ return array( ), 'query' => array( '_' => '사용자 쿼리', - 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', + 'deprecated' => '이 쿼리는 더 이상 유효하지 않습니다. 해당하는 카테고리나 피드가 삭제되었습니다.', 'filter' => '적용된 필터:', - 'get_all' => 'Display all articles', - 'get_category' => 'Display "%s" category', - 'get_favorite' => 'Display favourite articles', - 'get_feed' => 'Display "%s" feed', + 'get_all' => '모든 글 표시', + 'get_category' => '"%s" 카테고리 표시', + 'get_favorite' => '즐겨찾기에 등록된 글 표시', + 'get_feed' => '"%s" 피드 표시', 'no_filter' => '필터가 없습니다', 'none' => '아직 사용자 쿼리를 만들지 않았습니다.', - 'number' => '쿼리 n°%d', - 'order_asc' => 'Display oldest articles first', - 'order_desc' => 'Display newest articles first', - 'search' => 'Search for "%s"', - 'state_0' => 'Display all articles', - 'state_1' => 'Display read articles', - 'state_2' => 'Display unread articles', - 'state_3' => 'Display all articles', - 'state_4' => 'Display favourite articles', - 'state_5' => 'Display read favourite articles', - 'state_6' => 'Display unread favourite articles', - 'state_7' => 'Display favourite articles', - 'state_8' => 'Display not favourite articles', - 'state_9' => 'Display read not favourite articles', - 'state_10' => 'Display unread not favourite articles', - 'state_11' => 'Display not favourite articles', - 'state_12' => 'Display all articles', - 'state_13' => 'Display read articles', - 'state_14' => 'Display unread articles', - 'state_15' => 'Display all articles', + 'number' => '쿼리 #%d', + 'order_asc' => '오래된 글 먼저 표시', + 'order_desc' => '최근 글 먼저 표시', + 'search' => '"%s"의 검색 결과', + 'state_0' => '모든 글 표시', + 'state_1' => '읽은 글 표시', + 'state_2' => '읽지 않은 글 표시', + 'state_3' => '모든 글 표시', + 'state_4' => '즐겨찾기에 등록된 글 표시', + 'state_5' => '즐겨찾기에 등록된 읽은 글 표시', + 'state_6' => '즐겨찾기에 등록된 읽지 않은 글 표시', + 'state_7' => '즐겨찾기에 등록된 글 표시', + 'state_8' => '즐겨찾기에 등록되지 않은 글 표시', + 'state_9' => '즐겨찾기에 등록되지 않고 읽은 글 표시', + 'state_10' => '즐겨찾기에 등록되지 않고 읽지 않은 글 표시', + 'state_11' => '즐겨찾기에 등록되지 않은 글 표시', + 'state_12' => '모든 글 표시', + 'state_13' => '읽은 글 표시', + 'state_14' => '읽지 않은 글 표시', + 'state_15' => '모든 글 표시', 'title' => '사용자 쿼리', ), 'profile' => array( -- cgit v1.2.3 From 98a5c6538ce2fe6b53b133801028160e9869c316 Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Fri, 9 Jun 2017 17:28:47 +0900 Subject: Done feedback.php --- app/i18n/kr/feedback.php | 100 +++++++++++++++++++++++------------------------ 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/app/i18n/kr/feedback.php b/app/i18n/kr/feedback.php index ddd017446..a70923761 100644 --- a/app/i18n/kr/feedback.php +++ b/app/i18n/kr/feedback.php @@ -2,7 +2,7 @@ return array( 'admin' => array( - 'optimization_complete' => '최적화과 완료되었습니다', + 'optimization_complete' => '최적화가 완료되었습니다', ), 'access' => array( 'denied' => '이 페이지에 접근할 수 있는 권한이 없습니다', @@ -10,8 +10,8 @@ return array( ), 'auth' => array( 'form' => array( - 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', - 'set' => 'Form is now your default authentication system.', + 'not_set' => '인증 시스템을 설정하는 동안 문제가 발생했습니다. 잠시 후 다시 시도하세요.', + 'set' => '웹폼이 이제 기본 인증 시스템으로 설정되었습니다.', ), 'login' => array( 'invalid' => '유효하지 않은 로그인입니다', @@ -29,18 +29,18 @@ return array( 'updated' => '설정이 저장되었습니다', ), 'extensions' => array( - 'already_enabled' => '%s is already enabled', + 'already_enabled' => '%s 확장 기능은 이미 활성화되어 있습니다', 'disable' => array( - 'ko' => '%s cannot be disabled. Check FressRSS logs for details.', - 'ok' => '%s is now disabled', + 'ko' => '%s 확장 기능을 비활성화 할 수 없습니다. 자세한 내용은 FressRSS 로그를 참고하세요.', + 'ok' => '%s 확장 기능이 비활성화되었습니다', ), 'enable' => array( - 'ko' => '%s cannot be enabled. Check FressRSS logs for details.', - 'ok' => '%s is now enabled', + 'ko' => '%s 확장 기능을 활성화 할 수 없습니다. 자세한 내용은 FressRSS 로그를 참고하세요.', + 'ok' => '%s 확장 기능이 활성화되었습니다', ), - 'no_access' => 'You have no access on %s', - 'not_enabled' => '%s is not enabled', - 'not_found' => '%s does not exist', + 'no_access' => '%s 확장 기능에 접근 권한이 없습니다', + 'not_enabled' => '%s 확장 기능이 활성화되지 않았습니다', + 'not_found' => '%s 확장 기능이 존재하지 않습니다', ), 'import_export' => array( 'export_no_zip_extension' => 'ZIP 확장 기능을 서버에서 찾을 수 없습니다. 파일을 하나씩 내보내세요.', @@ -53,57 +53,57 @@ return array( 'sub' => array( 'actualize' => 'Updating', 'category' => array( - 'created' => 'Category %s has been created.', - 'deleted' => 'Category has been deleted.', - 'emptied' => 'Category has been emptied', - 'error' => 'Category cannot be updated', - 'name_exists' => 'Category name already exists.', - 'no_id' => 'You must specify the id of the category.', - 'no_name' => 'Category name cannot be empty.', - 'not_delete_default' => 'You cannot delete the default category!', - 'not_exist' => 'The category does not exist!', - 'over_max' => 'You have reached your limit of categories (%d)', - 'updated' => 'Category has been updated.', + 'created' => '%s 카테고리가 생성되었습니다.', + 'deleted' => '카테고리가 삭제되었습니다.', + 'emptied' => '카테고리를 비웠습니다', + 'error' => '카테고리를 변경할 수 없습니다', + 'name_exists' => '같은 카테고리 이름이 이미 존재합니다.', + 'no_id' => '카테고리 id를 명시해야 합니다.', + 'no_name' => '카테고리 이름을 명시해야 합니다.', + 'not_delete_default' => '기본 카테고리는 삭제할 수 없습니다!', + 'not_exist' => '카테고리가 존재하지 않습니다!', + 'over_max' => '카테고리 개수 제한에 다다랐습니다 (%d)', + 'updated' => '카테고리가 변경되었습니다.', ), 'feed' => array( - 'actualized' => '%s has been updated', - 'actualizeds' => 'RSS feeds have been updated', - 'added' => 'RSS 피드 %s 가 추가되었습니다', - 'already_subscribed' => 'You have already subscribed to %s', - 'deleted' => 'Feed has been deleted', - 'error' => 'Feed cannot be updated', - 'internal_problem' => 'The RSS feed could not be added. Check FressRSS logs for details.', - 'invalid_url' => 'URL %s is invalid', - 'marked_read' => 'Feeds have been marked as read', - 'n_actualized' => '%d feeds have been updated', - 'n_entries_deleted' => '%d articles have been deleted', - 'no_refresh' => 'There is no feed to refresh…', - 'not_added' => '%s could not be added', - 'over_max' => 'You have reached your limit of feeds (%d)', - 'updated' => 'Feed has been updated', + 'actualized' => '%s 피드에서 새 글을 가져왔습니다', + 'actualizeds' => 'RSS 피드에서 새 글을 가져왔습니다', + 'added' => '%s 피드가 추가되었습니다', + 'already_subscribed' => '이미 %s 피드를 구독 중입니다', + 'deleted' => '피드가 삭제되었습니다', + 'error' => '피드를 변경할 수 없습니다', + 'internal_problem' => 'RSS 피드를 추가할 수 없습니다. 자세한 내용은 FressRSS 로그를 참고하세요.', + 'invalid_url' => 'URL (%s)이 유효하지 않습니다', + 'marked_read' => '피드가 읽음으로 표시되었습니다', + 'n_actualized' => '%d 개의 피드에서 새 글을 가져왔습니다', + 'n_entries_deleted' => '%d 개의 글을 삭제했습니다', + 'no_refresh' => '새 글을 가져올 피드가 없습니다…', + 'not_added' => '%s 피드를 추가할 수 없습니다', + 'over_max' => '피드 개수 제한에 다다랐습니다 (%d)', + 'updated' => '피드가 변경되었습니다', ), - 'purge_completed' => 'Purge completed (%d articles deleted)', + 'purge_completed' => '삭제 완료 (%d 개의 글을 삭제했습니다)', ), 'update' => array( - 'can_apply' => 'FreshRSS will now be updated to the version %s.', - 'error' => 'The update process has encountered an error: %s', - 'file_is_nok' => 'New version %s available, but check permissions on %s directory. HTTP server must have rights to write into', - 'finished' => 'Update completed!', - 'none' => 'No update to apply', - 'server_not_found' => 'Update server cannot be found. [%s]', + 'can_apply' => 'FreshRSS가 %s 버전으로 업데이트됩니다.', + 'error' => '업데이트 과정에서 문제가 발생했습니다: %s', + 'file_is_nok' => '%s 버전을 사용할 수 있지만, %s 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'finished' => '업데이트를 완료했습니다!', + 'none' => '적용할 업데이트가 없습니다', + 'server_not_found' => '업데이트 서버를 찾을 수 없습니다. [%s]', ), 'user' => array( 'created' => array( - '_' => '사용자 %s 가 생성되었습니다', - 'error' => '사용자 %s 를 생성할 수 없습니다', + '_' => '%s 사용자가 생성되었습니다', + 'error' => '%s 사용자를 생성할 수 없습니다', ), 'deleted' => array( - '_' => 'User %s has been deleted', - 'error' => 'User %s cannot be deleted', + '_' => '%s 사용자를 삭제했습니다', + 'error' => '%s 사용자를 삭제할 수 없습니다', ), ), 'profile' => array( - 'error' => 'Your profile cannot be modified', - 'updated' => 'Your profile has been modified', + 'error' => '프로필을 변경할 수 없습니다', + 'updated' => '프로필을 변경했습니다', ), ); -- cgit v1.2.3 From caf43d8ab2181406985488ad39cd183268ad840b Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Fri, 9 Jun 2017 17:29:38 +0900 Subject: Done gen.php --- app/i18n/kr/gen.php | 76 ++++++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index cea5532f9..f5ff3bebd 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -6,39 +6,39 @@ return array( 'back_to_rss_feeds' => '← RSS 피드로 돌아가기', 'cancel' => '취소', 'create' => '생성', - 'disable' => 'Disable', + 'disable' => '비활성화', 'empty' => '비우기', - 'enable' => 'Enable', + 'enable' => '활성화', 'export' => '내보내기', 'filter' => '해당하는 글 보기', 'import' => '불러오기', 'manage' => '관리', 'mark_read' => '읽음으로 표시', - 'mark_favorite' => 'Mark as favourite', + 'mark_favorite' => '즐겨찾기에 등록', 'remove' => '삭제', 'see_website' => '웹사이트 열기', 'submit' => '설정 저장', 'truncate' => '모든 글 삭제', ), 'auth' => array( - 'email' => 'Email address', + 'email' => '메일 주소', 'keep_logged_in' => '로그인 유지 (%s 일)', 'login' => '로그인', 'logout' => '로그아웃', 'password' => array( '_' => '암호', - 'format' => 'At least 7 characters', + 'format' => '7 글자 이상이어야 합니다', ), 'registration' => array( - '_' => 'New account', - 'ask' => 'Create an account?', - 'title' => 'Account creation', + '_' => '새 계정', + 'ask' => '새 계정을 만들까요?', + 'title' => '계정 생성', ), - 'reset' => 'Authentication reset', + 'reset' => '인증 초기화', 'username' => array( '_' => '사용자 이름', - 'admin' => 'Administrator username', - 'format' => 'maximum 16 alphanumeric characters', + 'admin' => '관리자 이름', + 'format' => '알파벳과 숫자를 포함할 수 있고 최대 16 글자', ), ), 'date' => array( @@ -55,62 +55,62 @@ return array( 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', 'apr' => '4월', - 'april' => 'Apr', + 'april' => '4월', 'aug' => '8월', - 'august' => 'Aug', + 'august' => '8월', 'before_yesterday' => '어제 이전', 'dec' => '12월', - 'december' => 'Dec', + 'december' => '12월', 'feb' => '2월', - 'february' => 'Feb', - 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', - 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', + 'february' => '2월', + 'format_date' => 'Y년 m월 d일', + 'format_date_hour' => 'Y년 m월 d일 H시 i분', 'fri' => '금', 'jan' => '1월', - 'january' => 'Jan', + 'january' => '1월', 'jul' => '7월', - 'july' => 'Jul', + 'july' => '7월', 'jun' => '6월', - 'june' => 'Jun', + 'june' => '6월', 'last_3_month' => '최근 3 개월', 'last_6_month' => '최근 6 개월', 'last_month' => '최근 한 달', 'last_week' => '최근 한 주', 'last_year' => '최근 일 년', 'mar' => '3월', - 'march' => 'Mar', + 'march' => '3월', 'may' => '5월', 'mon' => '월', 'month' => '개월', 'nov' => '11월', - 'november' => 'Nov', + 'november' => '11월', 'oct' => '10월', - 'october' => 'Oct', + 'october' => '10월', 'sat' => '토', 'sep' => '9월', - 'september' => 'Sep', + 'september' => '9월', 'sun' => '일', 'thu' => '목', - 'today' => 'Today', + 'today' => '오늘', 'tue' => '화', 'wed' => '수', - 'yesterday' => 'Yesterday', + 'yesterday' => '어제', ), 'freshrss' => array( '_' => 'FreshRSS', 'about' => '정보', ), 'js' => array( - 'category_empty' => 'Empty category', - 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', - 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favourites and user queries. It cannot be cancelled!', + 'category_empty' => '빈 카테고리', + 'confirm_action' => '정말 이 작업을 수행하시겠습니까? 이 작업은 되돌릴 수 없습니다!', + 'confirm_action_feed_cat' => '정말 이 작업을 수행하시겠습니까? 관련된 즐겨찾기와 사용자 쿼리가 삭제됩니다. 이 작업은 되돌릴 수 없습니다!!', 'feedback' => array( - 'body_new_articles' => 'There are %%d new articles to read on FreshRSS.', - 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', - 'title_new_articles' => 'FreshRSS: new articles!', + 'body_new_articles' => '%%d 개의 새 글이 FreshRSS에 있습니다.', + 'request_failed' => '요청한 작업을 수행할 수 없습니다. 인터넷 연결에 문제가 발생한 것 같습니다.', + 'title_new_articles' => 'FreshRSS: 새 글이 있습니다!', ), - 'new_article' => 'There are new available articles, click to refresh the page.', - 'should_be_activated' => 'JavaScript must be enabled', + 'new_article' => '새 글이 있습니다. 여기를 클릭하면 페이지를 다시 불러옵니다.', + 'should_be_activated' => '자바스크립트를 사용하도록 설정해야합니다', ), 'lang' => array( 'cz' => 'Čeština', @@ -175,12 +175,12 @@ return array( 'blank_to_disable' => '빈 칸으로 두면 비활성화', 'by_author' => 'By %s', 'by_default' => '기본값', - 'damn' => 'Blast!', + 'damn' => '이런!', 'default_category' => '분류 없음', - 'no' => 'No', + 'no' => '아니요', 'not_applicable' => '사용할 수 없음', 'ok' => 'Ok!', - 'or' => 'or', - 'yes' => 'Yes', + 'or' => '또는', + 'yes' => '네', ), ); -- cgit v1.2.3 From 9a65461490dfbbc6db3f89cdebab00a7bb922c7d Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Fri, 9 Jun 2017 17:31:51 +0900 Subject: Done index.php --- app/i18n/kr/index.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/i18n/kr/index.php b/app/i18n/kr/index.php index c61071335..cc03f91c2 100644 --- a/app/i18n/kr/index.php +++ b/app/i18n/kr/index.php @@ -18,10 +18,10 @@ return array( 'feed' => array( 'add' => '피드를 추가하세요.', 'empty' => '글이 없습니다.', - 'rss_of' => 'RSS feed of %s', + 'rss_of' => '%s의 피드', 'title' => 'RSS 피드', - 'title_global' => 'Global view', - 'title_fav' => 'Your favourites', + 'title_global' => '전체 모드', + 'title_fav' => '즐겨찾기', ), 'log' => array( '_' => '로그', @@ -38,8 +38,8 @@ return array( 'global_view' => '전체 모드', 'main_stream' => '메인 스트림', 'mark_all_read' => '모두 읽음으로 표시', - 'mark_cat_read' => '이 카테고리를 읽음으로 표시', - 'mark_feed_read' => 'Mark feed as read', + 'mark_cat_read' => '카테고리를 읽음으로 표시', + 'mark_feed_read' => '피드를 읽음으로 표시', 'newer_first' => '최근 글 먼저', 'non-starred' => '즐겨찾기를 제외하고 표시', 'normal_view' => '일반 모드', @@ -48,7 +48,7 @@ return array( 'read' => '읽은 글만 표시', 'reader_view' => '읽기 모드', 'rss_view' => 'RSS 피드', - 'search_short' => 'Search', + 'search_short' => '검색', 'starred' => '즐겨찾기만 표시', 'stats' => '통계', 'subscription' => '구독 관리', -- cgit v1.2.3 From 0da72bf22571441a97ed1457a47ee30363253b23 Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Fri, 9 Jun 2017 17:39:05 +0900 Subject: Working on install.php and sub.php --- app/i18n/kr/install.php | 8 ++++---- app/i18n/kr/sub.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/i18n/kr/install.php b/app/i18n/kr/install.php index 40fff37dd..d79810d32 100644 --- a/app/i18n/kr/install.php +++ b/app/i18n/kr/install.php @@ -106,14 +106,14 @@ return array( 'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?', ), 'language' => array( - '_' => 'Language', - 'choose' => 'Choose a language for FreshRSS', - 'defined' => 'Language has been defined.', + '_' => '언어', + 'choose' => 'FreshRSS에서 사용할 언어를 고르세요', + 'defined' => '언어가 설정되었습니다.', ), 'not_deleted' => 'Something went wrong; you must delete the file %s manually.', 'ok' => 'The installation process was successful.', 'step' => 'step %d', 'steps' => 'Steps', - 'title' => 'Installation · FreshRSS', + 'title' => '설치 · FreshRSS', 'this_is_the_end' => 'This is the end', ); diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php index 8a365bf28..2019c5d82 100644 --- a/app/i18n/kr/sub.php +++ b/app/i18n/kr/sub.php @@ -28,7 +28,7 @@ return array( 'keep_history' => '최소 유지 글 개수', 'moved_category_deleted' => '카테고리를 삭제하면, 해당 카테고리 아래에 있던 피드들은 자동적으로 %s 아래로 분류됩니다.', 'no_selected' => 'No feed selected.', - 'number_entries' => '%d articles', + 'number_entries' => '%d 개의 글', 'stats' => '통계', 'think_to_add' => 'You may add some feeds.', 'title' => '제목', -- cgit v1.2.3 From 3618cd7979c67c5c8d322bfcfce8ca4d33374577 Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Fri, 9 Jun 2017 17:54:33 +0900 Subject: Edit admin.php --- app/i18n/kr/admin.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/i18n/kr/admin.php b/app/i18n/kr/admin.php index 1c77d6cdb..13f4695e1 100644 --- a/app/i18n/kr/admin.php +++ b/app/i18n/kr/admin.php @@ -18,7 +18,7 @@ return array( 'check_install' => array( 'cache' => array( 'nok' => './data/cache 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', - 'ok' => '캐시 디렉토리의 권한이 올바르게 설정되었습니다.', + 'ok' => 'cache 디렉토리의 권한이 올바르게 설정되었습니다.', ), 'categories' => array( 'nok' => 'category 테이블 설정이 잘못되었습니다.', @@ -38,7 +38,7 @@ return array( ), 'data' => array( 'nok' => './data 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', - 'ok' => '데이터 디렉토리의 권한이 올바르게 설정되었습니다.', + 'ok' => 'data 디렉토리의 권한이 올바르게 설정되었습니다.', ), 'database' => '데이터베이스 설치 요구사항', 'dom' => array( @@ -51,7 +51,7 @@ return array( ), 'favicons' => array( 'nok' => './data/favicons 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', - 'ok' => 'favicon 디렉토리의 권한이 올바르게 설정되어 있습니다.', + 'ok' => 'favicons 디렉토리의 권한이 올바르게 설정되어 있습니다.', ), 'feeds' => array( 'nok' => 'feed 테이블 설정이 잘못되었습니다.', @@ -90,11 +90,11 @@ return array( 'title' => '설치 요구사항 확인', 'tokens' => array( 'nok' => './data/tokens 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', - 'ok' => '토큰 디렉토리의 권한이 올바르게 설정되어 있습니다', + 'ok' => 'tokens 디렉토리의 권한이 올바르게 설정되어 있습니다', ), 'users' => array( 'nok' => './data/users 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', - 'ok' => '사용자 디렉토리의 권한이 올바르게 설정되어 있습니다.', + 'ok' => 'users 디렉토리의 권한이 올바르게 설정되어 있습니다.', ), 'zip' => array( 'nok' => 'ZIP 확장 기능을 찾을 수 없습니다 (php-zip 패키지).', -- cgit v1.2.3 From 4e8acffcd71bce4a8d6660a2d63b7dee192be962 Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Fri, 9 Jun 2017 18:21:20 +0900 Subject: Done install.php --- app/i18n/kr/install.php | 132 ++++++++++++++++++++++++------------------------ 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/app/i18n/kr/install.php b/app/i18n/kr/install.php index d79810d32..2eea71ff9 100644 --- a/app/i18n/kr/install.php +++ b/app/i18n/kr/install.php @@ -2,118 +2,118 @@ return array( 'action' => array( - 'finish' => 'Complete installation', - 'fix_errors_before' => 'Please fix errors before skipping to the next step.', - 'keep_install' => 'Keep previous configuration', - 'next_step' => 'Go to the next step', - 'reinstall' => 'Reinstall FreshRSS', + 'finish' => '설치 완료', + 'fix_errors_before' => '다음 단계로 가기 전에 문제를 해결하세요.', + 'keep_install' => '이전 설정 유지', + 'next_step' => '다음 단계', + 'reinstall' => 'FreshRSS 다시 설치', ), 'auth' => array( - 'form' => 'Web form (traditional, requires JavaScript)', - 'http' => 'HTTP (for advanced users with HTTPS)', - 'none' => 'None (dangerous)', - 'password_form' => 'Password
    (for the Web-form login method)', - 'password_format' => 'At least 7 characters', - 'type' => 'Authentication method', + 'form' => '웹폼 (전통적인 방식, 자바스크립트 필요)', + 'http' => 'HTTP (HTTPS를 사용하는 고급 사용자용)', + 'none' => '사용하지 않음 (위험)', + 'password_form' => '암호
    (웹폼 로그인 방식 사용시)', + 'password_format' => '7 글자 이상이어야 합니다', + 'type' => '인증 방식', ), 'bdd' => array( - '_' => 'Database', + '_' => '데이터베이스', 'conf' => array( - '_' => 'Database configuration', - 'ko' => 'Verify your database information.', - 'ok' => 'Database configuration has been saved.', - ), - 'host' => 'Host', - 'prefix' => 'Table prefix', - 'password' => 'Database password', - 'type' => 'Type of database', - 'username' => 'Database username', + '_' => '데이터베이스 설정', + 'ko' => '데이터베이스 정보를 확인하세요.', + 'ok' => '데이터베이스 설정이 저장되었습니다.', + ), + 'host' => '데이터베이스 서버', + 'prefix' => '테이블 접두어', + 'password' => '데이터베이스 암호', + 'type' => '데이터베이스 종류', + 'username' => '데이터베이스 사용자 이름', ), 'check' => array( - '_' => 'Checks', - 'already_installed' => 'We have detected that FreshRSS is already installed!', + '_' => '설치 요구사항 확인', + 'already_installed' => 'FreshRSS가 이미 설치되어 있는 것을 감지했습니다!', 'cache' => array( - 'nok' => 'Check permissions on ./data/cache directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on cache directory are good.', + 'nok' => './data/cache 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'ok' => 'cache 디렉토리의 권한이 올바르게 설정되었습니다.', ), 'ctype' => array( - 'nok' => 'Cannot find a required library for character type checking (php-ctype).', - 'ok' => 'You have the required library for character type checking (ctype).', + 'nok' => '문자열 타입 검사에 필요한 라이브러리를 찾을 수 없습니다 (php-ctype).', + 'ok' => '문자열 타입 검사에 필요한 라이브러리가 설치되어 있습니다 (ctype).', ), 'curl' => array( - 'nok' => 'Cannot find the cURL library (php-curl package).', - 'ok' => 'You have the cURL library.', + 'nok' => 'cURL 라이브러리를 찾을 수 없습니다 (php-curl 패키지).', + 'ok' => 'cURL 라이브러리가 설치되어 있습니다.', ), 'data' => array( - 'nok' => 'Check permissions on ./data directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on data directory are good.', + 'nok' => './data 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'ok' => 'data 디렉토리의 권한이 올바르게 설정되었습니다.', ), 'dom' => array( - 'nok' => 'Cannot find a required library to browse the DOM.', - 'ok' => 'You have the required library to browse the DOM.', + 'nok' => 'DOM을 다룰 수 있는 라이브러리를 찾을 수 없습니다 (php-xml 패키지).', + 'ok' => 'DOM을 다룰 수 있는 라이브러리가 설치되어 있습니다.', ), 'favicons' => array( - 'nok' => 'Check permissions on ./data/favicons directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on favicons directory are good.', + 'nok' => './data/favicons 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'ok' => 'favicons 디렉토리의 권한이 올바르게 설정되어 있습니다.', ), 'fileinfo' => array( - 'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).', - 'ok' => 'You have the fileinfo library.', + 'nok' => 'fileinfo 라이브러리를 찾을 수 없습니다 (fileinfo 패키지).', + 'ok' => 'fileinfo 라이브러리가 설치되어 있습니다.', ), 'http_referer' => array( - 'nok' => 'Please check that you are not altering your HTTP REFERER.', - 'ok' => 'Your HTTP REFERER is known and corresponds to your server.', + 'nok' => 'HTTP REFERER가 변경되지 않았는지 확인해주세요.', + 'ok' => 'HTTP REFERER가 서버와 일치하는 것을 확인했습니다.', ), 'json' => array( - 'nok' => 'Cannot find a recommended library to parse JSON.', - 'ok' => 'You have a recommended library to parse JSON.', + 'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php5-json 패키지).', + 'ok' => 'JSON 확장 기능이 설치되어 있습니다.', ), 'minz' => array( - 'nok' => 'Cannot find the Minz framework.', - 'ok' => 'You have the Minz framework.', + 'nok' => 'Minz 프레임워크를 찾을 수 없습니다.', + 'ok' => 'Minz 프레임워크가 설치되어 있습니다.', ), 'pcre' => array( - 'nok' => 'Cannot find a required library for regular expressions (php-pcre).', - 'ok' => 'You have the required library for regular expressions (PCRE).', + 'nok' => '정규표현식을 위한 라이브러리를 찾을 수 없습니다 (php-pcre).', + 'ok' => '정규표현식을 위한 라이브러리가 설치되어 있습니다 (PCRE).', ), 'pdo' => array( - 'nok' => 'Cannot find PDO or one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', - 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'nok' => '지원가능한 드라이버나 PDO를 찾을 수 없습니다 (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => '최소 하나의 지원가능한 드라이버와 PDO가 설치되어 있습니다 (pdo_mysql, pdo_sqlite, pdo_pgsql).', ), 'php' => array( - 'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.', - 'ok' => 'Your PHP version is %s, which is compatible with FreshRSS.', + 'nok' => 'PHP 버전은 %s 이지만, FreshRSS에는 최소 %s의 버전이 필요합니다.', + 'ok' => 'PHP 버전은 %s 이고, FreshRSS와 호환가능 합니다.', ), 'users' => array( - 'nok' => 'Check permissions on ./data/users directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on users directory are good.', + 'nok' => './data/users 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다', + 'ok' => 'users 디렉토리의 권한이 올바르게 설정되어 있습니다.', ), 'xml' => array( - 'nok' => 'Cannot find the required library to parse XML.', - 'ok' => 'You have the required library to parse XML.', + 'nok' => 'XML 해석을 위한 라이브러리르 찾을 수 없습니다.', + 'ok' => 'XML 해석을 위한 라이브러리가 설치되어 있습니다.', ), ), 'conf' => array( - '_' => 'General configuration', - 'ok' => 'General configuration has been saved.', + '_' => '일반 설정', + 'ok' => '일반 설정이 저장되었습니다.', ), - 'congratulations' => 'Congratulations!', - 'default_user' => 'Username of the default user (maximum 16 alphanumeric characters)', - 'delete_articles_after' => 'Remove articles after', - 'fix_errors_before' => 'Please fix errors before skipping to the next step.', - 'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled', + 'congratulations' => '축하합니다!', + 'default_user' => '기본 사용자 이름(알파벳과 숫자를 포함할 수 있고 최대 16 글자)', + 'delete_articles_after' => '다음 기간보다 오래된 글 삭제', + 'fix_errors_before' => '다음 단계로 가기 전에 문제를 해결하세요.', + 'javascript_is_better' => 'FreshRSS는 자바스크립트를 사용할 때 더욱 쾌적하고 강력합니다', 'js' => array( - 'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?', + 'confirm_reinstall' => 'FreshRSS을 다시 설치하면 이전 설정이 사라집니다. 계속하시겠습니까?', ), 'language' => array( '_' => '언어', 'choose' => 'FreshRSS에서 사용할 언어를 고르세요', 'defined' => '언어가 설정되었습니다.', ), - 'not_deleted' => 'Something went wrong; you must delete the file %s manually.', - 'ok' => 'The installation process was successful.', - 'step' => 'step %d', - 'steps' => 'Steps', + 'not_deleted' => '무언가 잘못되었습니다; %s 파일을 직접 삭제해주세요.', + 'ok' => '설치 과정이 성공적으로 끝났습니다.', + 'step' => '단계 %d', + 'steps' => '단계', 'title' => '설치 · FreshRSS', - 'this_is_the_end' => 'This is the end', + 'this_is_the_end' => '마침', ); -- cgit v1.2.3 From 3ad491d058287ac8078871a25e774640f27d3ea6 Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Fri, 9 Jun 2017 22:24:17 +0900 Subject: Done sub.php (Complete i18n/kr) --- app/i18n/kr/sub.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php index 2019c5d82..af2979e5d 100644 --- a/app/i18n/kr/sub.php +++ b/app/i18n/kr/sub.php @@ -27,12 +27,12 @@ return array( 'informations' => '정보', 'keep_history' => '최소 유지 글 개수', 'moved_category_deleted' => '카테고리를 삭제하면, 해당 카테고리 아래에 있던 피드들은 자동적으로 %s 아래로 분류됩니다.', - 'no_selected' => 'No feed selected.', + 'no_selected' => '선택된 피드가 없습니다.', 'number_entries' => '%d 개의 글', 'stats' => '통계', - 'think_to_add' => 'You may add some feeds.', + 'think_to_add' => '피드를 추가할 수 있습니다.', 'title' => '제목', - 'title_add' => 'Add a RSS feed', + 'title_add' => 'RSS 피드 추가', 'ttl' => '다음 시간이 지나기 전에 새로고침 금지', 'url' => '피드 URL', 'validator' => '피드 유효성 검사', @@ -43,15 +43,15 @@ return array( 'export' => '내보내기', 'export_opml' => '피드 목록 내보내기 (OPML)', 'export_starred' => '즐겨찾기 내보내기', - 'feed_list' => 'List of %s articles', + 'feed_list' => '%s 개의 글 목록', 'file_to_import' => '불러올 파일
    (OPML, JSON 또는 ZIP)', 'file_to_import_no_zip' => '불러올 파일
    (OPML 또는 JSON)', 'import' => '불러오기', - 'starred_list' => 'List of favourite articles', + 'starred_list' => '즐겨찾기에 등록된 글 목록', 'title' => '불러오기 / 내보내기', ), 'menu' => array( - 'bookmark' => 'Subscribe (FreshRSS bookmark)', + 'bookmark' => '구독하기 (FreshRSS 북마클릿)', 'import_export' => '불러오기 / 내보내기', 'subscription_management' => '구독 관리', ), -- cgit v1.2.3 From da1708ccf7702c83db0d3519ae1b3ecf8f01bd3a Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Sun, 11 Jun 2017 00:23:13 +0900 Subject: Reorder alphabetically --- app/i18n/cz/gen.php | 2 +- app/i18n/de/gen.php | 2 +- app/i18n/en/gen.php | 2 +- app/i18n/fr/gen.php | 2 +- app/i18n/it/gen.php | 2 +- app/i18n/kr/gen.php | 2 +- app/i18n/nl/gen.php | 2 +- app/i18n/ru/gen.php | 2 +- app/i18n/tr/gen.php | 2 +- app/i18n/zh-cn/gen.php | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 0e1e25ddd..475cca29c 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -118,10 +118,10 @@ return array( 'en' => 'English', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'kr' => '한국어', ), 'menu' => array( 'about' => 'O aplikaci', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 032ff20bf..ff58ea64b 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -118,10 +118,10 @@ return array( 'en' => 'English', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'kr' => '한국어', ), 'menu' => array( 'about' => 'Über', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index d386711db..541ff394b 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -118,11 +118,11 @@ return array( 'en' => 'English', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', - 'kr' => '한국어', ), 'menu' => array( 'about' => 'About', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 52a454564..6f4099cf9 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -118,10 +118,10 @@ return array( 'en' => 'English', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'kr' => '한국어', ), 'menu' => array( 'about' => 'À propos', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 6169891bb..3e9bbbf23 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -118,10 +118,10 @@ return array( 'en' => 'English', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'kr' => '한국어', ), 'menu' => array( 'about' => 'Informazioni', diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index f5ff3bebd..381f81910 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -118,11 +118,11 @@ return array( 'en' => 'English', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', - 'kr' => '한국어', ), 'menu' => array( 'about' => '정보', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 56582447f..7547b190a 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -118,10 +118,10 @@ return array( 'en' => 'English', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'kr' => '한국어', ), 'menu' => array( 'about' => 'Over', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 7f8c77b59..2723b3340 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -118,10 +118,10 @@ return array( 'en' => 'English', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'kr' => '한국어', ), 'menu' => array( 'about' => 'About', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 04fc5485f..d4a3245b1 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -118,10 +118,10 @@ return array( 'en' => 'English', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'kr' => '한국어', ), 'menu' => array( 'about' => 'Hakkında', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 8c74e67ee..a74afa226 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -118,11 +118,11 @@ return array( 'en' => 'English1', 'fr' => 'Français', 'it' => 'Italiano1', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', - 'kr' => '한국어', ), 'menu' => array( 'about' => '关于', -- cgit v1.2.3 From 30fcf0a150a8cf50cb47d907191165f3b3be7870 Mon Sep 17 00:00:00 2001 From: Seokseong Jeon Date: Sun, 11 Jun 2017 00:39:11 +0900 Subject: Add i18n for subscription menu --- app/i18n/kr/sub.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php index af2979e5d..8af29422d 100644 --- a/app/i18n/kr/sub.php +++ b/app/i18n/kr/sub.php @@ -1,6 +1,11 @@ array( + 'documentation' => '이 버튼을 즐겨찾기 막대로 끌어다 놓거나 마우스 오른쪽 클릭으로 나타나는 메뉴에서 "이 링크를 즐겨찾기에 추가"를 선택하세요. 그리고 피드를 구독하길 원하는 페이지에서 "구독하기" 버튼을 클릭하세요.', + 'label' => '구독하기', + 'title' => '북마클릿', + ), 'category' => array( '_' => '카테고리', 'add' => '카테고리 추가', @@ -39,6 +44,10 @@ return array( 'website' => '웹사이트 URL', 'pubsubhubbub' => 'PubSubHubbub을 사용한 즉시 알림', ), + 'firefox' => array( + 'documentation' => 'FreshRSS를 Firefox 피드 리더에 추가하기 위해서는 여기의 설명을 따르세요.', + 'title' => 'Firefox 피드 리더', + ), 'import_export' => array( 'export' => '내보내기', 'export_opml' => '피드 목록 내보내기 (OPML)', @@ -54,9 +63,11 @@ return array( 'bookmark' => '구독하기 (FreshRSS 북마클릿)', 'import_export' => '불러오기 / 내보내기', 'subscription_management' => '구독 관리', + 'subscription_tools' => '구독 도구', ), 'title' => array( '_' => '구독 관리', 'feed_management' => 'RSS 피드 관리', + 'subscription_tools' => '구독 도구', ), ); -- cgit v1.2.3 From ef80a3be8d6fededb13b698f8e20ec9d4ce7bb8d Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 10 Jun 2017 17:42:35 +0200 Subject: i18n fr typo https://github.com/FreshRSS/FreshRSS/pull/1568 --- app/i18n/fr/sub.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php index db31259af..9135b2b7c 100644 --- a/app/i18n/fr/sub.php +++ b/app/i18n/fr/sub.php @@ -2,8 +2,8 @@ return array( 'bookmarklet' => array( - 'documentation' => 'Glisser ce bouton dans la barre des favoris ou cliquer droit dessus et choisir "Enregistrer ce lien". Ensuite, cliquer sur le bouton "S\'abonner" sur les pages auxquelles vous voulez vous abonner.', - 'label' => 'S\'abonner', + 'documentation' => 'Glisser ce bouton dans la barre des favoris ou cliquer droit dessus et choisir "Enregistrer ce lien". Ensuite, cliquer sur le bouton "S’abonner" sur les pages auxquelles vous voulez vous abonner.', + 'label' => 'S’abonner', 'title' => 'Bookmarklet', ), 'category' => array( @@ -45,7 +45,7 @@ return array( 'pubsubhubbub' => 'Notification instantanée par PubSubHubbub', ), 'firefox' => array( - 'documentation' => 'Suivre les étapes décritent ici pour ajouter FreshRSS à la liste des lecteurs de flux dans Firefox.', + 'documentation' => 'Suivre les étapes décrites ici pour ajouter FreshRSS à la liste des lecteurs de flux dans Firefox.', 'title' => 'Lecteur de flux dans Firefox', ), 'import_export' => array( @@ -63,11 +63,11 @@ return array( 'bookmark' => 'S’abonner (bookmark FreshRSS)', 'import_export' => 'Importer / exporter', 'subscription_management' => 'Gestion des abonnements', - 'subscription_tools' => 'Outils d\'abonnement', + 'subscription_tools' => 'Outils d’abonnement', ), 'title' => array( '_' => 'Gestion des abonnements', 'feed_management' => 'Gestion des flux RSS', - 'subscription_tools' => 'Outils d\'abonnement', + 'subscription_tools' => 'Outils d’abonnement', ), ); -- cgit v1.2.3 From 8af80091c74bfc406839bf5b7ed28c143fda2d5e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 14 Jun 2017 11:04:00 +0200 Subject: file_get_contents fix PHP 7.1 https://github.com/FreshRSS/FreshRSS/issues/1584 --- p/api/greader.php | 2 +- p/api/pshb.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/p/api/greader.php b/p/api/greader.php index e1f4202a7..262f9d0fa 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -23,7 +23,7 @@ Server-side API compatible with Google Reader API layer 2 require('../../constants.php'); require(LIB_PATH . '/lib_rss.php'); //Includes class autoloader -$ORIGINAL_INPUT = file_get_contents('php://input', false, null, -1, 1048576); +$ORIGINAL_INPUT = file_get_contents('php://input', false, null, 0, 1048576); if (PHP_INT_SIZE < 8) { //32-bit function dec2hex($dec) { diff --git a/p/api/pshb.php b/p/api/pshb.php index 4b546908a..ed8326cf5 100644 --- a/p/api/pshb.php +++ b/p/api/pshb.php @@ -11,7 +11,7 @@ function logMe($text) { file_put_contents(USERS_PATH . '/_/log_pshb.txt', date('c') . "\t" . $text . "\n", FILE_APPEND); } -$ORIGINAL_INPUT = file_get_contents('php://input', false, null, -1, MAX_PAYLOAD); +$ORIGINAL_INPUT = file_get_contents('php://input', false, null, 0, MAX_PAYLOAD); //logMe(print_r(array('_SERVER' => $_SERVER, '_GET' => $_GET, '_POST' => $_POST, 'INPUT' => $ORIGINAL_INPUT), true)); -- cgit v1.2.3 From 9f936b549b466d5dfe415a137572093356647ca2 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 20 Jun 2017 09:10:48 +0200 Subject: Changelog 1584 https://github.com/FreshRSS/FreshRSS/issues/1584 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21459f32d..c66c552a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,12 @@ ## 2017-XX-XX FreshRSS 1.7.1-dev +* Bug fixing + * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584) + ## 2017-06-03 FreshRSS 1.7.0 + * Features: * Deferred insertion of new articles, for better chronological order [#530](https://github.com/FreshRSS/FreshRSS/issues/530) * Better search: -- cgit v1.2.3 From d5c168b30810575b3e28a0dafd6acd68a035dec1 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 20 Jun 2017 09:19:12 +0200 Subject: Changelog 1354, 1568, 1578 https://github.com/FreshRSS/FreshRSS/issues/1354 https://github.com/FreshRSS/FreshRSS/pull/1568 https://github.com/FreshRSS/FreshRSS/pull/1578 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c66c552a5..4f6e74281 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## 2017-XX-XX FreshRSS 1.7.1-dev +* UI + * New page for subscription tools [#1534](https://github.com/FreshRSS/FreshRSS/issues/1354) +* I18n + * Korean [#1578](https://github.com/FreshRSS/FreshRSS/pull/1578) * Bug fixing * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584) -- cgit v1.2.3 From d4cd72dd21a8bb9c959ac23311b24bc334ee0f8e Mon Sep 17 00:00:00 2001 From: romibi Date: Wed, 21 Jun 2017 13:35:35 +0200 Subject: Make feedlist padding a bit dynamic --- p/scripts/main.js | 9 +++++++++ p/themes/base-theme/template.css | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index 5be7bc36b..0fc6ca30b 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -541,9 +541,18 @@ function init_column_categories() { feed_web = $(this).data('fweb'), template = $('#feed_config_template').html().replace(/------/g, feed_id).replace('http://example.net/', feed_web); $(this).attr('href', '#dropdown-' + feed_id).prev('.dropdown-target').attr('id', 'dropdown-' + feed_id).parent().append(template); + $('.tree-folder-items .dropdown-close a').click(function(){ + $('.tree').removeClass('treepadding'); + $(document.body).trigger("sticky_kit:recalc"); + }); } }); + $('.tree-folder-items .dropdown-toggle').click(function(){ + $('.tree').addClass('treepadding'); + $(document.body).trigger("sticky_kit:recalc"); + }); + init_sticky_column(); } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 277bb61b2..f1a09c50c 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -346,10 +346,15 @@ a.btn { /*=== Tree */ .tree { margin: 0; - padding: 0 0 15em 0; + padding: 0 0 2em 0; list-style: none; text-align: left; } + +.treepadding { + padding: 0 0 15em 0; +} + .tree-folder-items { padding: 0; list-style: none; -- cgit v1.2.3 From 93fa0662986a9af85ca27101c9322b9f8bea83a8 Mon Sep 17 00:00:00 2001 From: Anton Smirnov Date: Wed, 12 Jul 2017 18:58:12 +0300 Subject: Fix Illegal String Offset warning (PHP 7.1) in greader.php --- p/api/greader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p/api/greader.php b/p/api/greader.php index e1f4202a7..08cdfee06 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -86,7 +86,7 @@ function debugInfo() { if (function_exists('getallheaders')) { $ALL_HEADERS = getallheaders(); } else { //nginx http://php.net/getallheaders#84262 - $ALL_HEADERS = ''; + $ALL_HEADERS = []; foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) === 'HTTP_') { $ALL_HEADERS[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; -- cgit v1.2.3 From 78ca4341d13a829e55bc5b634489da2c5bf60eae Mon Sep 17 00:00:00 2001 From: Anton Smirnov Date: Thu, 13 Jul 2017 14:34:01 +0300 Subject: Use PHP <= 5.3 array syntax in greader.php fix --- p/api/greader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p/api/greader.php b/p/api/greader.php index 08cdfee06..d39ea0d59 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -86,7 +86,7 @@ function debugInfo() { if (function_exists('getallheaders')) { $ALL_HEADERS = getallheaders(); } else { //nginx http://php.net/getallheaders#84262 - $ALL_HEADERS = []; + $ALL_HEADERS = array(); foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) === 'HTTP_') { $ALL_HEADERS[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; -- cgit v1.2.3 From c3f2302be71d4b3bc2dd4cc67dd16c4505203498 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 22 Jul 2017 15:47:13 +0200 Subject: Update username constraints https://github.com/FreshRSS/FreshRSS/issues/1597 --- app/install.php | 4 ++-- cli/create-user.php | 2 +- cli/do-install.php | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/install.php b/app/install.php index 9e474ca73..cd276bb7b 100644 --- a/app/install.php +++ b/app/install.php @@ -124,7 +124,7 @@ function saveStep2() { $_SESSION['title'] = $system_default_config->title; $_SESSION['old_entries'] = param('old_entries', $user_default_config->old_entries); $_SESSION['auth_type'] = param('auth_type', 'form'); - $_SESSION['default_user'] = substr(preg_replace('/[^a-zA-Z0-9]/', '', param('default_user', '')), 0, 16); + $_SESSION['default_user'] = substr(preg_replace('/[^0-9a-zA-Z_]/', '', param('default_user', '')), 0, 38); $password_plain = param('passwordPlain', false); if ($password_plain !== false && cryptAvailable()) { @@ -631,7 +631,7 @@ function printStep3() {
    - +
    diff --git a/cli/create-user.php b/cli/create-user.php index c9e350c14..f44591cc9 100755 --- a/cli/create-user.php +++ b/cli/create-user.php @@ -18,7 +18,7 @@ if (empty($options['user'])) { } $username = $options['user']; if (!FreshRSS_user_Controller::checkUsername($username)) { - fail('FreshRSS error: invalid username “' . $username . '”'); + fail('FreshRSS error: invalid username “' . $username . '”! Must be matching ' . FreshRSS_user_Controller::USERNAME_PATTERN); } $usernames = listUsers(); diff --git a/cli/do-install.php b/cli/do-install.php index 143ca5c3e..54e3c3d4f 100755 --- a/cli/do-install.php +++ b/cli/do-install.php @@ -81,11 +81,11 @@ if ($requirements['all'] !== 'ok') { } if (!FreshRSS_user_Controller::checkUsername($options['default_user'])) { - fail('FreshRSS invalid default username (must be ASCII alphanumeric): ' . $options['default_user']); + fail('FreshRSS error: invalid default username “' . $options['default_user'] . '”! Must be matching ' . FreshRSS_user_Controller::USERNAME_PATTERN); } if (isset($options['auth_type']) && !in_array($options['auth_type'], array('form', 'http_auth', 'none'))) { - fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }: ' . $options['auth_type']); + fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }): ' . $options['auth_type']); } if (file_put_contents(join_path(DATA_PATH, 'config.php'), " Date: Sat, 22 Jul 2017 16:44:14 +0200 Subject: Changelog 1594 + credits https://github.com/FreshRSS/FreshRSS/pull/1594 @sandfoxme --- CHANGELOG.md | 2 +- CREDITS.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f6e74281..be38141d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ * I18n * Korean [#1578](https://github.com/FreshRSS/FreshRSS/pull/1578) * Bug fixing - * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584) + * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584), [#1594](https://github.com/FreshRSS/FreshRSS/pull/1594) ## 2017-06-03 FreshRSS 1.7.0 diff --git a/CREDITS.md b/CREDITS.md index 97651ab20..70c7437a9 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -10,6 +10,7 @@ People are sorted by name so please keep this order. * [Alexis Degrugillier](https://github.com/aledeg): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=aledeg) * [Alwaysin](https://github.com/Alwaysin): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Alwaysin) * [Amaury Carrade](https://github.com/AmauryCarrade): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=AmauryCarrade), [Web](https://amaury.carrade.eu/) +* [Anton Smirnov](https://github.com/sandfoxme): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:sandfoxme), [Web](http://sandfox.me/) * [ASMfreaK](https://github.com/ASMfreaK): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=ASMfreaK) * [Crupuk](https://github.com/Crupuk): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Crupuk) * [Damstre](https://github.com/Damstre): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Damstre) -- cgit v1.2.3 From e046791c9330ee80580494b8fce3f5fc0bf08f98 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 22 Jul 2017 20:05:36 +0200 Subject: CLI update user https://github.com/FreshRSS/FreshRSS/issues/1600 Not tested --- app/Controllers/userController.php | 50 +++++++++++++++++++++-------------- cli/README.md | 2 ++ cli/create-user.php | 1 + cli/update-user.php | 54 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 20 deletions(-) create mode 100644 cli/update-user.php diff --git a/app/Controllers/userController.php b/app/Controllers/userController.php index 3cbbd8633..a58501186 100644 --- a/app/Controllers/userController.php +++ b/app/Controllers/userController.php @@ -44,6 +44,29 @@ class FreshRSS_user_Controller extends Minz_ActionController { return preg_match('/^' . self::USERNAME_PATTERN . '$/', $username) === 1; } + public static function updateContextUser($passwordPlain, $apiPasswordPlain, $userConfigUpdated = array()) { + if ($passwordPlain != '') { + $passwordHash = self::hashPassword($passwordPlain); + FreshRSS_Context::$user_conf->passwordHash = $passwordHash; + } + + if ($apiPasswordPlain != '') { + $apiPasswordHash = self::hashPassword($apiPasswordPlain); + FreshRSS_Context::$user_conf->apiPasswordHash = $apiPasswordHash; + } + + if (is_array($userConfigUpdated)) { + foreach ($userConfigUpdated as $configName => $configValue) { + if ($configValue !== null) { + FreshRSS_Context::$user_conf->_param($configName, $configValue); + } + } + } + + $ok = FreshRSS_Context::$user_conf->save(); + return $ok; + } + /** * This action displays the user profile page. */ @@ -55,30 +78,17 @@ class FreshRSS_user_Controller extends Minz_ActionController { )); if (Minz_Request::isPost()) { - $ok = true; - $passwordPlain = Minz_Request::param('newPasswordPlain', '', true); - if ($passwordPlain != '') { - Minz_Request::_param('newPasswordPlain'); //Discard plain-text password ASAP - $_POST['newPasswordPlain'] = ''; - $passwordHash = self::hashPassword($passwordPlain); - $ok &= ($passwordHash != ''); - FreshRSS_Context::$user_conf->passwordHash = $passwordHash; - } - Minz_Session::_param('passwordHash', FreshRSS_Context::$user_conf->passwordHash); + Minz_Request::_param('newPasswordPlain'); //Discard plain-text password ASAP + $_POST['newPasswordPlain'] = ''; - $passwordPlain = Minz_Request::param('apiPasswordPlain', '', true); - if ($passwordPlain != '') { - $passwordHash = self::hashPassword($passwordPlain); - $ok &= ($passwordHash != ''); - FreshRSS_Context::$user_conf->apiPasswordHash = $passwordHash; - } + $apiPasswordPlain = Minz_Request::param('apiPasswordPlain', '', true); - $current_token = FreshRSS_Context::$user_conf->token; - $token = Minz_Request::param('token', $current_token); - FreshRSS_Context::$user_conf->token = $token; + $ok = self::updateContextUser($passwordPlain, $apiPasswordPlain, array( + 'token' => Minz_Request::param('token', null), + )); - $ok &= FreshRSS_Context::$user_conf->save(); + Minz_Session::_param('passwordHash', FreshRSS_Context::$user_conf->passwordHash); if ($ok) { Minz_Request::good(_t('feedback.profile.updated'), diff --git a/cli/README.md b/cli/README.md index 1ac8c95ce..6e120babe 100644 --- a/cli/README.md +++ b/cli/README.md @@ -46,6 +46,8 @@ cd /usr/share/FreshRSS ./cli/create-user.php --user username ( --password 'password' --api-password 'api_password' --language en --email user@example.net --token 'longRandomString' --no-default-feeds ) # --language can be: 'en' (default), 'fr', or one of the [supported languages](../app/i18n/) +./cli/update-user.php --user username ( --password 'password' --api-password 'api_password' --language en --email user@example.net --token 'longRandomString' --purge_after_months 3 --feed_min_articles_default 50 --feed_ttl_default 3600 --since_hours_posts_per_rss 168 --min_posts_per_rss 2 --max_posts_per_rss 400 ) + ./cli/delete-user.php --user username ./cli/list-users.php diff --git a/cli/create-user.php b/cli/create-user.php index c9e350c14..0b131ac35 100755 --- a/cli/create-user.php +++ b/cli/create-user.php @@ -33,6 +33,7 @@ $ok = FreshRSS_user_Controller::createUser($username, empty($options['api-password']) ? '' : $options['api-password'], array( 'language' => empty($options['language']) ? '' : $options['language'], + 'mail_login' => empty($options['email']) ? '' : $options['email'], 'token' => empty($options['token']) ? '' : $options['token'], ), !isset($options['no-default-feeds'])); diff --git a/cli/update-user.php b/cli/update-user.php new file mode 100644 index 000000000..5f3335f2e --- /dev/null +++ b/cli/update-user.php @@ -0,0 +1,54 @@ +#!/usr/bin/php + isset($options['language']) ? $options['language'] : null, + 'mail_login' => isset($options['email']) ? $options['email'] : null, + 'token' => isset($options['token']) ? $options['token'] : null, + 'old_entries' => intParam('purge_after_months'), + 'keep_history_default' => intParam('feed_min_articles_default'), + 'ttl_default' => intParam('feed_ttl_default'), + 'since_hours_posts_per_rss' => intParam('since_hours_posts_per_rss'), + 'min_posts_per_rss' => intParam('min_posts_per_rss'), + 'max_posts_per_rss' => intParam('max_posts_per_rss'), + )); + +if (!$ok) { + fail('FreshRSS could not update user!'); +} + +invalidateHttpCache($username); + +done($ok); -- cgit v1.2.3 From e6fadbe58094dec2d085564dd67505c2cc2cd184 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 22 Jul 2017 20:23:53 +0200 Subject: +x execution rights update-user --- cli/update-user.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 cli/update-user.php diff --git a/cli/update-user.php b/cli/update-user.php old mode 100644 new mode 100755 -- cgit v1.2.3 From a11517dc9a028d7f8be56680d07d49e0a6b4c551 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 22 Jul 2017 20:37:50 +0200 Subject: updateContextUser typo --- cli/update-user.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/update-user.php b/cli/update-user.php index 5f3335f2e..6b54f4038 100755 --- a/cli/update-user.php +++ b/cli/update-user.php @@ -30,7 +30,7 @@ function intParam($name) { return isset($options[$name]) && ctype_digit($options[$name]) ? intval($options[$name]) : null; } -$ok = FreshRSS_user_Controller::updateContextUser($username, +$ok = FreshRSS_user_Controller::updateContextUser( empty($options['password']) ? '' : $options['password'], empty($options['api-password']) ? '' : $options['api-password'], array( -- cgit v1.2.3 From e5b7586a3d354e388e11972ab3d9c4a6328f6ac4 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 23 Jul 2017 00:14:01 +0200 Subject: CLI update-user usage --- cli/update-user.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cli/update-user.php b/cli/update-user.php index 6b54f4038..f8ed26c8f 100755 --- a/cli/update-user.php +++ b/cli/update-user.php @@ -19,7 +19,8 @@ $options = getopt('', array( if (empty($options['user'])) { fail('Usage: ' . basename(__FILE__) . " --user username ( --password 'password' --api-password 'api_password'" . - " --language en --email user@example.net --token 'longRandomString' )"); + " --language en --email user@example.net --token 'longRandomString' --purge_after_months 3 " . + " --feed_min_articles_default 50 --feed_ttl_default 3600 --since_hours_posts_per_rss 168 --min_posts_per_rss 2 --max_posts_per_rss 400 )"); } $username = cliInitUser($options['user']); @@ -51,4 +52,6 @@ if (!$ok) { invalidateHttpCache($username); +accessRights(); + done($ok); -- cgit v1.2.3 From 46c31a75d746773c223c29c78211723170104189 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 23 Jul 2017 11:51:46 +0200 Subject: Fix timestamp format with PostgreSQL for EasyRSS https://github.com/Alkarex/EasyRSS/issues/31 --- p/api/greader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p/api/greader.php b/p/api/greader.php index 6b9ea4526..7f6f0b04f 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -503,7 +503,7 @@ function streamContents($path, $include_target, $start_time, $count, $order, $ex $item = array( 'id' => /*'tag:google.com,2005:reader/item/' .*/ dec2hex($entry->id()), //64-bit hexa http://code.google.com/p/google-reader-api/wiki/ItemId 'crawlTimeMsec' => substr($entry->id(), 0, -3), - 'timestampUsec' => $entry->id(), //EasyRSS + 'timestampUsec' => '' . $entry->id(), //EasyRSS 'published' => $entry->date(true), 'title' => $entry->title(), 'summary' => array('content' => $entry->content()), -- cgit v1.2.3 From 8b834527a2518703539857fac185ddace422e5b0 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 23 Jul 2017 18:33:52 +0200 Subject: Readme 1597 https://github.com/FreshRSS/FreshRSS/issues/1597 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index be38141d5..aad47721a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ * Korean [#1578](https://github.com/FreshRSS/FreshRSS/pull/1578) * Bug fixing * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584), [#1594](https://github.com/FreshRSS/FreshRSS/pull/1594) +* Misc. + * Allow longer database usernames [#1597](https://github.com/FreshRSS/FreshRSS/issues/1597) ## 2017-06-03 FreshRSS 1.7.0 -- cgit v1.2.3 From d0d0861e024efcedd388cb02cbada01d9eb984d5 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 24 Jul 2017 08:54:45 +0200 Subject: Changelog 1603 https://github.com/Alkarex/EasyRSS/issues/31 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aad47721a..22c11be1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * Korean [#1578](https://github.com/FreshRSS/FreshRSS/pull/1578) * Bug fixing * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584), [#1594](https://github.com/FreshRSS/FreshRSS/pull/1594) + * Fix API compatibility bug between PostgreSQL and EasyRSS [#1603](https://github.com/FreshRSS/FreshRSS/pull/1603) * Misc. * Allow longer database usernames [#1597](https://github.com/FreshRSS/FreshRSS/issues/1597) -- cgit v1.2.3 From 1138c8a63b1ff54eb96821d4f4ff829f5dc67a02 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 27 Jul 2017 09:40:47 +0200 Subject: CLI usage typo https://github.com/FreshRSS/FreshRSS/pull/1602#issuecomment-318188437 --- cli/create-user.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/create-user.php b/cli/create-user.php index 0b131ac35..c3a45cad8 100755 --- a/cli/create-user.php +++ b/cli/create-user.php @@ -14,7 +14,7 @@ $options = getopt('', array( if (empty($options['user'])) { fail('Usage: ' . basename(__FILE__) . " --user username ( --password 'password' --api-password 'api_password'" . - " --language en --email user@example.net --token 'longRandomString --no-default-feeds' )"); + " --language en --email user@example.net --token 'longRandomString' --no-default-feeds )"); } $username = $options['user']; if (!FreshRSS_user_Controller::checkUsername($username)) { -- cgit v1.2.3 From 673b6e48b0af5f2f6f92c501f82fe10281dbf20f Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 5 Aug 2017 18:27:47 +0200 Subject: Mutualise create-user and update-user --- cli/README.md | 5 +++-- cli/_update-or-create-user.php | 51 ++++++++++++++++++++++++++++++++++++++++++ cli/create-user.php | 27 +++++----------------- cli/update-user.php | 42 ++++------------------------------ 4 files changed, 63 insertions(+), 62 deletions(-) create mode 100644 cli/_update-or-create-user.php diff --git a/cli/README.md b/cli/README.md index 6e120babe..ce1be10a7 100644 --- a/cli/README.md +++ b/cli/README.md @@ -43,10 +43,11 @@ cd /usr/share/FreshRSS ./cli/reconfigure.php # Same parameters as for do-install.php. Used to update an existing installation. -./cli/create-user.php --user username ( --password 'password' --api-password 'api_password' --language en --email user@example.net --token 'longRandomString' --no-default-feeds ) +./cli/create-user.php --user username ( --password 'password' --api_password 'api_password' --language en --email user@example.net --token 'longRandomString' --no_default_feeds --purge_after_months 3 --feed_min_articles_default 50 --feed_ttl_default 3600 --since_hours_posts_per_rss 168 --min_posts_per_rss 2 --max_posts_per_rss 400 ) # --language can be: 'en' (default), 'fr', or one of the [supported languages](../app/i18n/) -./cli/update-user.php --user username ( --password 'password' --api-password 'api_password' --language en --email user@example.net --token 'longRandomString' --purge_after_months 3 --feed_min_articles_default 50 --feed_ttl_default 3600 --since_hours_posts_per_rss 168 --min_posts_per_rss 2 --max_posts_per_rss 400 ) +./cli/update-user.php --user username ( ... ) +# Same options as create-user.php, except --no_default_feeds which is only available for create-user.php ./cli/delete-user.php --user username diff --git a/cli/_update-or-create-user.php b/cli/_update-or-create-user.php new file mode 100644 index 000000000..951e28fa2 --- /dev/null +++ b/cli/_update-or-create-user.php @@ -0,0 +1,51 @@ + strParam('language'), + 'mail_login' => strParam('email'), + 'token' => strParam('token'), + 'old_entries' => intParam('purge_after_months'), + 'keep_history_default' => intParam('feed_min_articles_default'), + 'ttl_default' => intParam('feed_ttl_default'), + 'since_hours_posts_per_rss' => intParam('since_hours_posts_per_rss'), + 'min_posts_per_rss' => intParam('min_posts_per_rss'), + 'max_posts_per_rss' => intParam('max_posts_per_rss'), + ); diff --git a/cli/create-user.php b/cli/create-user.php index f710e8d66..add9c1b13 100755 --- a/cli/create-user.php +++ b/cli/create-user.php @@ -1,21 +1,8 @@ #!/usr/bin/php empty($options['language']) ? '' : $options['language'], - 'mail_login' => empty($options['email']) ? '' : $options['email'], - 'token' => empty($options['token']) ? '' : $options['token'], - ), + empty($options['api_password']) ? '' : $options['api_password'], + $values, !isset($options['no-default-feeds'])); if (!$ok) { diff --git a/cli/update-user.php b/cli/update-user.php index f8ed26c8f..ac674484c 100755 --- a/cli/update-user.php +++ b/cli/update-user.php @@ -1,50 +1,16 @@ #!/usr/bin/php isset($options['language']) ? $options['language'] : null, - 'mail_login' => isset($options['email']) ? $options['email'] : null, - 'token' => isset($options['token']) ? $options['token'] : null, - 'old_entries' => intParam('purge_after_months'), - 'keep_history_default' => intParam('feed_min_articles_default'), - 'ttl_default' => intParam('feed_ttl_default'), - 'since_hours_posts_per_rss' => intParam('since_hours_posts_per_rss'), - 'min_posts_per_rss' => intParam('min_posts_per_rss'), - 'max_posts_per_rss' => intParam('max_posts_per_rss'), - )); + empty($options['api_password']) ? '' : $options['api_password'], + $values); if (!$ok) { fail('FreshRSS could not update user!'); -- cgit v1.2.3 From 5d4e4a8dd0702e42088bd93dca2158a3cb05b7a4 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 5 Aug 2017 23:10:02 +0200 Subject: Fix script name in usage --- cli/_update-or-create-user.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/_update-or-create-user.php b/cli/_update-or-create-user.php index 951e28fa2..45bfee2cf 100644 --- a/cli/_update-or-create-user.php +++ b/cli/_update-or-create-user.php @@ -23,7 +23,7 @@ if (!$isUpdate) { $options = getopt('', $params); if (empty($options['user'])) { - fail('Usage: ' . basename(__FILE__) . " --user username ( --password 'password' --api_password 'api_password'" . + fail('Usage: ' . basename($_SERVER['SCRIPT_FILENAME']) . " --user username ( --password 'password' --api_password 'api_password'" . " --language en --email user@example.net --token 'longRandomString'" . ($isUpdate ? '' : '--no_default_feeds') . " --purge_after_months 3 --feed_min_articles_default 50 --feed_ttl_default 3600" . -- cgit v1.2.3 From 3b8b9eabd037130b4c05d6b615bd9ad8f02cc59f Mon Sep 17 00:00:00 2001 From: Adrien Dorsaz Date: Tue, 15 Aug 2017 10:44:54 +0200 Subject: commitNewEntries should ignore conflicting keys on migration from entrytmp to entry Fixes #1610 by first ignoring all entries from entrytmp which exists already inside the entry table. --- app/Models/EntryDAOPGSQL.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Models/EntryDAOPGSQL.php b/app/Models/EntryDAOPGSQL.php index b25993c47..f70c5f65c 100644 --- a/app/Models/EntryDAOPGSQL.php +++ b/app/Models/EntryDAOPGSQL.php @@ -30,7 +30,10 @@ maxrank bigint := (SELECT MAX(id) FROM `' . $this->prefix . 'entrytmp`); rank bigint := (SELECT maxrank - COUNT(*) FROM `' . $this->prefix . 'entrytmp`); BEGIN INSERT INTO `' . $this->prefix . 'entry` (id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags) - (SELECT rank + row_number() OVER(ORDER BY date) AS id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags FROM `' . $this->prefix . 'entrytmp` ORDER BY date); + (SELECT rank + row_number() OVER(ORDER BY date) AS id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags + FROM `' . $this->prefix . 'entrytmp` AS entrytmp + WHERE NOT EXISTS (SELECT 1 FROM `' . $this->prefix . 'entry` AS entry WHERE entrytmp.id_feed = entry.id_feed AND entrytmp.guid = entry.guid) + ORDER BY date); DELETE FROM `' . $this->prefix . 'entrytmp` WHERE id <= maxrank; END $$;'; $hadTransaction = $this->bd->inTransaction(); -- cgit v1.2.3 From 074ab63bb1e59d527576cb91ed2e9f484a37b216 Mon Sep 17 00:00:00 2001 From: Adrien Dorsaz Date: Tue, 15 Aug 2017 11:39:21 +0200 Subject: commitNewEntries: fixup to use unique aliases --- app/Models/EntryDAOPGSQL.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Models/EntryDAOPGSQL.php b/app/Models/EntryDAOPGSQL.php index f70c5f65c..6e6f9e658 100644 --- a/app/Models/EntryDAOPGSQL.php +++ b/app/Models/EntryDAOPGSQL.php @@ -31,8 +31,8 @@ rank bigint := (SELECT maxrank - COUNT(*) FROM `' . $this->prefix . 'entrytmp`); BEGIN INSERT INTO `' . $this->prefix . 'entry` (id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags) (SELECT rank + row_number() OVER(ORDER BY date) AS id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags - FROM `' . $this->prefix . 'entrytmp` AS entrytmp - WHERE NOT EXISTS (SELECT 1 FROM `' . $this->prefix . 'entry` AS entry WHERE entrytmp.id_feed = entry.id_feed AND entrytmp.guid = entry.guid) + FROM `' . $this->prefix . 'entrytmp` AS etmp + WHERE NOT EXISTS (SELECT 1 FROM `' . $this->prefix . 'entry` AS ereal WHERE etmp.id_feed = ereal.id_feed AND etmp.guid = ereal.guid) ORDER BY date); DELETE FROM `' . $this->prefix . 'entrytmp` WHERE id <= maxrank; END $$;'; -- cgit v1.2.3 From c23fd7782f4ea20bf7693a86c4d859a7520b01bc Mon Sep 17 00:00:00 2001 From: Adrien Dorsaz Date: Tue, 15 Aug 2017 14:06:17 +0200 Subject: Update changelog and add myself to contributors --- CHANGELOG.md | 1 + CREDITS.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22c11be1e..efb31a752 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * Bug fixing * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584), [#1594](https://github.com/FreshRSS/FreshRSS/pull/1594) * Fix API compatibility bug between PostgreSQL and EasyRSS [#1603](https://github.com/FreshRSS/FreshRSS/pull/1603) + * Fix PostgreSQL error when adding new entries [#1610](https://github.com/FreshRSS/FreshRSS/issues/1610), [#1613](https://github.com/FreshRSS/FreshRSS/pull/1613) * Misc. * Allow longer database usernames [#1597](https://github.com/FreshRSS/FreshRSS/issues/1597) diff --git a/CREDITS.md b/CREDITS.md index 70c7437a9..9d123f7c2 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -6,6 +6,7 @@ People are sorted by name so please keep this order. --- +* [Adrien Dorsaz](https://github.com/Trim): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Trim), [Web](https://adorsaz.ch/) * [Alexandre Alapetite](https://github.com/Alkarex): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Alkarex), [Web](http://alexandre.alapetite.fr/) * [Alexis Degrugillier](https://github.com/aledeg): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=aledeg) * [Alwaysin](https://github.com/Alwaysin): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Alwaysin) -- cgit v1.2.3 From 18285d27297da3a3eb08f8fb56144d5389567ef6 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 19 Aug 2017 13:48:47 +0200 Subject: Author HTML to text https://github.com/FreshRSS/FreshRSS/issues/1590#issuecomment-313914174 https://github.com/FreshRSS/FreshRSS/pull/1592#issuecomment-320290049 --- app/Models/Feed.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 52d49db6e..4f11d32e9 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -339,7 +339,7 @@ class FreshRSS_Feed extends Minz_Model { $this->id(), $item->get_id(false, false), $title === null ? '' : $title, - $author === null ? '' : html_only_entity_decode($author->name), + $author === null ? '' : html_only_entity_decode(strip_tags($author->name)), $content === null ? '' : $content, $link === null ? '' : $link, $date ? $date : time() -- cgit v1.2.3 From 94f4f67f3084eb81d792d8a9b9ae147ef14726d7 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 19 Aug 2017 13:55:04 +0200 Subject: Changelog 1590 https://github.com/FreshRSS/FreshRSS/issues/1590 --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index efb31a752..3caf39d3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,8 @@ * Bug fixing * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584), [#1594](https://github.com/FreshRSS/FreshRSS/pull/1594) * Fix API compatibility bug between PostgreSQL and EasyRSS [#1603](https://github.com/FreshRSS/FreshRSS/pull/1603) - * Fix PostgreSQL error when adding new entries [#1610](https://github.com/FreshRSS/FreshRSS/issues/1610), [#1613](https://github.com/FreshRSS/FreshRSS/pull/1613) + * Fix PostgreSQL error when adding entries with duplicated GUID [#1610](https://github.com/FreshRSS/FreshRSS/issues/1610) + * Fix for RSS feeds containing HTML in author field [#1590](https://github.com/FreshRSS/FreshRSS/issues/1590) * Misc. * Allow longer database usernames [#1597](https://github.com/FreshRSS/FreshRSS/issues/1597) -- cgit v1.2.3 From d0281a9f35fa5d4c607bac26ebabd43da6eb2ce2 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 19 Aug 2017 16:19:03 +0200 Subject: typo update-or-create-user --- cli/_update-or-create-user.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cli/_update-or-create-user.php b/cli/_update-or-create-user.php index 45bfee2cf..c7f1008cd 100644 --- a/cli/_update-or-create-user.php +++ b/cli/_update-or-create-user.php @@ -31,10 +31,12 @@ if (empty($options['user'])) { } function strParam($name) { + global $options; return isset($options[$name]) ? strval($options[$name]) : null; } function intParam($name) { + global $options; return isset($options[$name]) && ctype_digit($options[$name]) ? intval($options[$name]) : null; } @@ -49,3 +51,5 @@ $values = array( 'min_posts_per_rss' => intParam('min_posts_per_rss'), 'max_posts_per_rss' => intParam('max_posts_per_rss'), ); + +$values = array_filter($values); -- cgit v1.2.3 From 4a813ff06fc06d1ce6c9cda2d66ff9895152be89 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 19 Aug 2017 16:24:44 +0200 Subject: Changelog 1600 https://github.com/FreshRSS/FreshRSS/issues/1600 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3caf39d3a..8d2060d8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ * UI * New page for subscription tools [#1534](https://github.com/FreshRSS/FreshRSS/issues/1354) +* CLI + * New command `./cli/update-user` to update user settings [#1600](https://github.com/FreshRSS/FreshRSS/issues/1600) * I18n * Korean [#1578](https://github.com/FreshRSS/FreshRSS/pull/1578) * Bug fixing -- cgit v1.2.3 From d09fbdf43b4a439073da927b3a0fc28857a9c8e1 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 19 Aug 2017 17:08:28 +0200 Subject: Readme 1589 https://github.com/FreshRSS/FreshRSS/pull/1589 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d2060d8c..07aa74848 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * UI * New page for subscription tools [#1534](https://github.com/FreshRSS/FreshRSS/issues/1354) + * Adjustments to the padding of the tree of categories and feeds [1589](https://github.com/FreshRSS/FreshRSS/pull/1589) * CLI * New command `./cli/update-user` to update user settings [#1600](https://github.com/FreshRSS/FreshRSS/issues/1600) * I18n -- cgit v1.2.3 From 3108b2729f79ccaf5f8ba951a52ee35d28e2adb2 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 20 Aug 2017 10:18:54 +0200 Subject: Minor JS hints --- p/scripts/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index 0fc6ca30b..8081b7f38 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1,6 +1,6 @@ "use strict"; -/* globals context, i18n, shortcut, shortcuts, url */ -/* jshint globalstrict: true */ +/* globals $, jQuery, context, i18n, shortcut, shortcuts, url */ +/* jshint strict:global */ var $stream = null, isCollapsed = true, -- cgit v1.2.3 From eb84d4f8ff8a53f7eac52edf61951e5dba5906fc Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 20 Aug 2017 10:21:08 +0200 Subject: Recalc sticky column on lazy img load https://github.com/FreshRSS/FreshRSS/issues/1593 --- p/scripts/main.js | 1 + 1 file changed, 1 insertion(+) diff --git a/p/scripts/main.js b/p/scripts/main.js index 8081b7f38..117e8a598 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -227,6 +227,7 @@ function toggleContent(new_active, old_active) { if (context.does_lazyload) { new_active.find('img[data-original], iframe[data-original]').each(function () { + this.onload = function () { $(document.body).trigger("sticky_kit:recalc"); }; this.setAttribute('src', this.getAttribute('data-original')); this.removeAttribute('data-original'); }); -- cgit v1.2.3 From 4f74193b4a020c1ba9e329ff5d9a6841062a498b Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 20 Aug 2017 11:02:00 +0200 Subject: May abbreviation https://github.com/FreshRSS/FreshRSS/issues/1560 --- app/Models/StatsDAO.php | 2 +- app/i18n/cz/gen.php | 3 ++- app/i18n/de/gen.php | 1 + app/i18n/en/gen.php | 1 + app/i18n/fr/gen.php | 3 ++- app/i18n/it/gen.php | 43 ++++++++++++++++++++++--------------------- app/i18n/kr/gen.php | 1 + app/i18n/nl/gen.php | 1 + app/i18n/ru/gen.php | 1 + app/i18n/tr/gen.php | 3 ++- app/i18n/zh-cn/gen.php | 1 + 11 files changed, 35 insertions(+), 25 deletions(-) diff --git a/app/Models/StatsDAO.php b/app/Models/StatsDAO.php index 2ce4f2944..da57b7c03 100644 --- a/app/Models/StatsDAO.php +++ b/app/Models/StatsDAO.php @@ -364,7 +364,7 @@ SQL; 'feb', 'mar', 'apr', - 'may', + 'may.', 'jun', 'jul', 'aug', diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 475cca29c..517a92198 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -79,7 +79,8 @@ return array( 'last_year' => 'Minulý rok', 'mar' => 'bře', 'march' => 'Bře', - 'may' => 'Kvě', + 'may.' => 'Kvě', + 'may' => 'Květen', 'mon' => 'Po', 'month' => 'měsíce', 'nov' => 'lis', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index ff58ea64b..8fd73cac3 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -79,6 +79,7 @@ return array( 'last_year' => 'Letztes Jahr', 'mar' => 'Mär', 'march' => 'März', + 'may.' => 'Mai', 'may' => 'Mai', 'mon' => 'Mo', 'month' => 'Monat(en)', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 541ff394b..226403ab9 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -79,6 +79,7 @@ return array( 'last_year' => 'Last year', 'mar' => 'mar', 'march' => 'Mar', + 'may.' => 'May', 'may' => 'May', 'mon' => 'Mon', 'month' => 'months', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 6f4099cf9..a22ffff38 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -79,7 +79,8 @@ return array( 'last_year' => 'Depuis l’année dernière', 'mar' => 'mar.', 'march' => 'mars', - 'may' => 'mai.', + 'may.' => 'mai.', + 'may' => 'mai', 'mon' => 'lun.', 'month' => 'mois', 'nov' => 'nov.', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 3e9bbbf23..c748af85d 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -54,41 +54,42 @@ return array( 'Nov' => '\\N\\o\\v\\e\\m\\b\\r\\e', 'Oct' => '\\O\\t\\t\\o\\b\\r\\e', 'Sep' => '\\S\\e\\t\\t\\e\\m\\b\\r\\e', - 'apr' => 'apr', - 'april' => 'Apr', - 'aug' => 'aug', - 'august' => 'Aug', + 'apr' => 'apr.', + 'april' => 'aprile', + 'aug' => 'ag.', + 'august' => 'agosto', 'before_yesterday' => 'Meno recenti', - 'dec' => 'dec', - 'december' => 'Dec', - 'feb' => 'feb', - 'february' => 'Feb', + 'dec' => 'dic.', + 'december' => 'dicembre', + 'feb' => 'febbr.', + 'february' => 'febbraio', 'format_date' => 'j\\ %s Y', 'format_date_hour' => 'j\\ %s Y \\o\\r\\e H\\:i', 'fri' => 'Fri', - 'jan' => 'jan', - 'january' => 'Jan', + 'jan' => 'genn.', + 'january' => 'gennaio', 'jul' => 'jul', - 'july' => 'Jul', + 'july' => 'luglio', 'jun' => 'jun', - 'june' => 'Jun', + 'june' => 'giugno', 'last_3_month' => 'Ultimi 3 mesi', 'last_6_month' => 'Ultimi 6 mesi', 'last_month' => 'Ultimo mese', 'last_week' => 'Ultima settimana', 'last_year' => 'Ultimo anno', - 'mar' => 'mar', - 'march' => 'Mar', - 'may' => 'May', + 'mar' => 'mar.', + 'march' => 'marzo', + 'may.' => 'May', + 'may' => 'maggio', 'mon' => 'Mon', 'month' => 'mesi', - 'nov' => 'nov', - 'november' => 'Nov', - 'oct' => 'oct', - 'october' => 'Oct', + 'nov' => 'nov.', + 'november' => 'novembre', + 'oct' => 'ott.', + 'october' => 'ottobre', 'sat' => 'Sat', - 'sep' => 'sep', - 'september' => 'Sep', + 'sep' => 'sett.', + 'september' => 'settembre', 'sun' => 'Sun', 'thu' => 'Thu', 'today' => 'Oggi', diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index 381f81910..92bea7d46 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -79,6 +79,7 @@ return array( 'last_year' => '최근 일 년', 'mar' => '3월', 'march' => '3월', + 'may.' => '5월', 'may' => '5월', 'mon' => '월', 'month' => '개월', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 7547b190a..13bae36ba 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -79,6 +79,7 @@ return array( 'last_year' => 'Vorig jaar', 'mar' => 'mar', 'march' => 'Mar', + 'may.' => 'Mei', 'may' => 'Mei', 'mon' => 'Ma', 'month' => 'maanden', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 2723b3340..1e14c52c1 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -79,6 +79,7 @@ return array( 'last_year' => 'Last year', 'mar' => 'mar', 'march' => 'Mar', + 'may.' => 'May', 'may' => 'May', 'mon' => 'Mon', 'month' => 'months', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index d4a3245b1..09c0b646f 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -79,7 +79,8 @@ return array( 'last_year' => 'Geçen yıl', 'mar' => 'mar', 'march' => 'Mar', - 'may' => 'May', + 'may.' => 'May', + 'may' => 'Mayıs', 'mon' => 'Pzt', 'month' => 'ay', 'nov' => 'kas', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index a74afa226..c7d3ff10a 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -79,6 +79,7 @@ return array( 'last_year' => '去年', 'mar' => '三月', 'march' => '三月', + 'may.' => '五月', 'may' => '五月', 'mon' => '周一', 'month' => '个月', -- cgit v1.2.3 From 07cce02ad3f116095ad152423d63e4e4d43b9142 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 20 Aug 2017 11:10:22 +0200 Subject: May abbreviation conflict --- app/Models/StatsDAO.php | 2 +- app/i18n/cz/gen.php | 2 +- app/i18n/de/gen.php | 2 +- app/i18n/en/gen.php | 2 +- app/i18n/fr/gen.php | 4 ++-- app/i18n/it/gen.php | 2 +- app/i18n/kr/gen.php | 2 +- app/i18n/nl/gen.php | 2 +- app/i18n/ru/gen.php | 2 +- app/i18n/tr/gen.php | 2 +- app/i18n/zh-cn/gen.php | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/Models/StatsDAO.php b/app/Models/StatsDAO.php index da57b7c03..67ada73f7 100644 --- a/app/Models/StatsDAO.php +++ b/app/Models/StatsDAO.php @@ -364,7 +364,7 @@ SQL; 'feb', 'mar', 'apr', - 'may.', + 'may_', 'jun', 'jul', 'aug', diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 517a92198..f891f3f1d 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -79,7 +79,7 @@ return array( 'last_year' => 'Minulý rok', 'mar' => 'bře', 'march' => 'Bře', - 'may.' => 'Kvě', + 'may_' => 'Kvě', 'may' => 'Květen', 'mon' => 'Po', 'month' => 'měsíce', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 8fd73cac3..dccf38383 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -79,7 +79,7 @@ return array( 'last_year' => 'Letztes Jahr', 'mar' => 'Mär', 'march' => 'März', - 'may.' => 'Mai', + 'may_' => 'Mai', 'may' => 'Mai', 'mon' => 'Mo', 'month' => 'Monat(en)', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 226403ab9..d8421b16d 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -79,7 +79,7 @@ return array( 'last_year' => 'Last year', 'mar' => 'mar', 'march' => 'Mar', - 'may.' => 'May', + 'may_' => 'May', 'may' => 'May', 'mon' => 'Mon', 'month' => 'months', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index a22ffff38..705cbd4ea 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -77,9 +77,9 @@ return array( 'last_month' => 'Depuis le mois dernier', 'last_week' => 'Depuis la semaine dernière', 'last_year' => 'Depuis l’année dernière', - 'mar' => 'mar.', + 'mar' => 'mars', 'march' => 'mars', - 'may.' => 'mai.', + 'may_' => 'mai', 'may' => 'mai', 'mon' => 'lun.', 'month' => 'mois', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index c748af85d..e7403b603 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -79,7 +79,7 @@ return array( 'last_year' => 'Ultimo anno', 'mar' => 'mar.', 'march' => 'marzo', - 'may.' => 'May', + 'may_' => 'May', 'may' => 'maggio', 'mon' => 'Mon', 'month' => 'mesi', diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index 92bea7d46..0c19b5871 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -79,7 +79,7 @@ return array( 'last_year' => '최근 일 년', 'mar' => '3월', 'march' => '3월', - 'may.' => '5월', + 'may_' => '5월', 'may' => '5월', 'mon' => '월', 'month' => '개월', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 13bae36ba..921a782d9 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -79,7 +79,7 @@ return array( 'last_year' => 'Vorig jaar', 'mar' => 'mar', 'march' => 'Mar', - 'may.' => 'Mei', + 'may_' => 'Mei', 'may' => 'Mei', 'mon' => 'Ma', 'month' => 'maanden', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 1e14c52c1..2518e0d0e 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -79,7 +79,7 @@ return array( 'last_year' => 'Last year', 'mar' => 'mar', 'march' => 'Mar', - 'may.' => 'May', + 'may_' => 'May', 'may' => 'May', 'mon' => 'Mon', 'month' => 'months', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 09c0b646f..a6dda7478 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -79,7 +79,7 @@ return array( 'last_year' => 'Geçen yıl', 'mar' => 'mar', 'march' => 'Mar', - 'may.' => 'May', + 'may_' => 'May', 'may' => 'Mayıs', 'mon' => 'Pzt', 'month' => 'ay', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index c7d3ff10a..936f7d6ee 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -79,7 +79,7 @@ return array( 'last_year' => '去年', 'mar' => '三月', 'march' => '三月', - 'may.' => '五月', + 'may_' => '五月', 'may' => '五月', 'mon' => '周一', 'month' => '个月', -- cgit v1.2.3 From b80c2ee014827b2fcaa72676263359115a55230a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 20 Aug 2017 11:33:14 +0200 Subject: English month names https://github.com/FreshRSS/FreshRSS/pull/1617#discussion_r134110617 --- CHANGELOG.md | 1 + app/i18n/en/gen.php | 44 ++++++++++++++++++++++---------------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07aa74848..8137ea9dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * New command `./cli/update-user` to update user settings [#1600](https://github.com/FreshRSS/FreshRSS/issues/1600) * I18n * Korean [#1578](https://github.com/FreshRSS/FreshRSS/pull/1578) + * Fix month abbreviations [#1560](https://github.com/FreshRSS/FreshRSS/issues/1560) * Bug fixing * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584), [#1594](https://github.com/FreshRSS/FreshRSS/pull/1594) * Fix API compatibility bug between PostgreSQL and EasyRSS [#1603](https://github.com/FreshRSS/FreshRSS/pull/1603) diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index d8421b16d..0173b832f 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -54,42 +54,42 @@ return array( 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', - 'apr' => 'apr', - 'april' => 'Apr', - 'aug' => 'aug', - 'august' => 'Aug', + 'apr' => 'Apr.', + 'april' => 'April', + 'aug' => 'Aug.', + 'august' => 'August', 'before_yesterday' => 'Before yesterday', - 'dec' => 'dec', - 'december' => 'Dec', - 'feb' => 'feb', - 'february' => 'Feb', + 'dec' => 'Dec.', + 'december' => 'December', + 'feb' => 'Feb.', + 'february' => 'February', 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', 'fri' => 'Fri', - 'jan' => 'jan', - 'january' => 'Jan', - 'jul' => 'jul', - 'july' => 'Jul', - 'jun' => 'jun', - 'june' => 'Jun', + 'jan' => 'Jan.', + 'january' => 'January', + 'jul' => 'July', + 'july' => 'July', + 'jun' => 'June', + 'june' => 'June', 'last_3_month' => 'Last three months', 'last_6_month' => 'Last six months', 'last_month' => 'Last month', 'last_week' => 'Last week', 'last_year' => 'Last year', - 'mar' => 'mar', - 'march' => 'Mar', + 'mar' => 'Mar.', + 'march' => 'March', 'may_' => 'May', 'may' => 'May', 'mon' => 'Mon', 'month' => 'months', - 'nov' => 'nov', - 'november' => 'Nov', - 'oct' => 'oct', - 'october' => 'Oct', + 'nov' => 'Nov.', + 'november' => 'November', + 'oct' => 'Oct.', + 'october' => 'October', 'sat' => 'Sat', - 'sep' => 'sep', - 'september' => 'Sep', + 'sep' => 'Sept.', + 'september' => 'September', 'sun' => 'Sun', 'thu' => 'Thu', 'today' => 'Today', -- cgit v1.2.3 From a72ad940dff289f101be5bde60f85c18057fdb7a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 21 Aug 2017 12:29:12 +0200 Subject: Increase minimal support to PHP 5.3.8+ https://github.com/FreshRSS/FreshRSS/issues/1604 --- CHANGELOG.md | 2 ++ README.fr.md | 4 ++-- README.md | 4 ++-- app/install.php | 2 +- app/views/update/checkInstall.phtml | 2 +- docs/en/users/01_Installation.md | 7 ++----- docs/fr/users/01_Installation.md | 7 ++----- lib/lib_install.php | 2 +- lib/lib_rss.php | 6 +++++- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07aa74848..5f5a974ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 2017-XX-XX FreshRSS 1.7.1-dev +* Compatibility: + * Minimal PHP version increased to PHP 5.3.8+ to fix sanitize bug [#1604](https://github.com/FreshRSS/FreshRSS/issues/1604) * UI * New page for subscription tools [#1534](https://github.com/FreshRSS/FreshRSS/issues/1354) * Adjustments to the padding of the tree of categories and feeds [1589](https://github.com/FreshRSS/FreshRSS/pull/1589) diff --git a/README.fr.md b/README.fr.md index 18ac54d96..cc268dc5e 100644 --- a/README.fr.md +++ b/README.fr.md @@ -32,7 +32,7 @@ Nous sommes une communauté amicale. * Serveur modeste, par exemple sous Linux ou Windows * Fonctionne même sur un Raspberry Pi 1 avec des temps de réponse < 1s (testé sur 150 flux, 22k articles) * Serveur Web Apache2 (recommandé), ou nginx, lighttpd (non testé sur les autres) -* PHP 5.3.3+ (PHP 5.4+ recommandé, et PHP 5.5+ pour les performances, et PHP 7+ pour d’encore meilleures performances) +* PHP 5.3.8+ (PHP 5.4+ recommandé, et PHP 5.5+ pour les performances, et PHP 7+ pour d’encore meilleures performances) * Requis : [cURL](http://php.net/curl), [DOM](http://php.net/dom), [XML](http://php.net/xml), [session](http://php.net/session), [ctype](http://php.net/ctype), et [PDO_MySQL](http://php.net/pdo-mysql) ou [PDO_SQLite](http://php.net/pdo-sqlite) ou [PDO_PGSQL](http://php.net/pdo-pgsql) * Recommandés : [JSON](http://php.net/json), [GMP](http://php.net/gmp) (pour accès API sur plateformes < 64 bits), [IDN](http://php.net/intl.idn) (pour les noms de domaines internationalisés), [mbstring](http://php.net/mbstring) et/ou [iconv](http://php.net/iconv) (pour conversion d’encodages), [ZIP](http://php.net/zip) (pour import/export), [zlib](http://php.net/zlib) (pour les flux compressés) * MySQL 5.5.3+ (recommandé), ou SQLite 3.7.4+, ou PostgreSQL 9.2+ @@ -107,7 +107,7 @@ sudo chown -R :www-data . && sudo chmod -R g+r . && sudo chmod -R g+w ./data/ ## Contrôle d’accès Il est requis pour le mode multi-utilisateur, et recommandé dans tous les cas, de limiter l’accès à votre FreshRSS. Au choix : -* En utilisant l’identification par formulaire (requiert JavaScript, et PHP 5.3.7+ recommandé – fonctionne avec certaines versions de PHP 5.3.3+) +* En utilisant l’identification par formulaire (requiert JavaScript, et PHP 5.5+ recommandé) * En utilisant un contrôle d’accès HTTP défini par votre serveur Web * Voir par exemple la [documentation d’Apache sur l’authentification](http://httpd.apache.org/docs/trunk/howto/auth.html) * Créer dans ce cas un fichier `./p/i/.htaccess` avec un fichier `.htpasswd` correspondant. diff --git a/README.md b/README.md index 6246105bb..8595a26ec 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ We are a friendly community. * Light server running Linux or Windows * It even works on Raspberry Pi 1 with response time under a second (tested with 150 feeds, 22k articles) * A web server: Apache2 (recommended), nginx, lighttpd (not tested on others) -* PHP 5.3.3+ (PHP 5.4+ recommended, and PHP 5.5+ for performance, and PHP 7 for even higher performance) +* PHP 5.3.8+ (PHP 5.4+ recommended, and PHP 5.5+ for performance, and PHP 7 for even higher performance) * Required extensions: [cURL](http://php.net/curl), [DOM](http://php.net/dom), [XML](http://php.net/xml), [session](http://php.net/session), [ctype](http://php.net/ctype), and [PDO_MySQL](http://php.net/pdo-mysql) or [PDO_SQLite](http://php.net/pdo-sqlite) or [PDO_PGSQL](http://php.net/pdo-pgsql) * Recommended extensions: [JSON](http://php.net/json), [GMP](http://php.net/gmp) (for API access on platforms < 64 bits), [IDN](http://php.net/intl.idn) (for Internationalized Domain Names), [mbstring](http://php.net/mbstring) and/or [iconv](http://php.net/iconv) (for charset conversion), [ZIP](http://php.net/zip) (for import/export), [zlib](http://php.net/zlib) (for compressed feeds) * MySQL 5.5.3+ (recommended), or SQLite 3.7.4+, or PostgreSQL 9.2+ @@ -109,7 +109,7 @@ See more commands and git commands in the [Command-Line Interface documentation] ## Access control It is needed for the multi-user mode to limit access to FreshRSS. You can: -* use form authentication (need JavaScript and PHP 5.3.7+, works with some PHP 5.3.3+) +* use form authentication (needs JavaScript, and PHP 5.5+ recommended) * use HTTP authentication supported by your web server * See [Apache documentation](http://httpd.apache.org/docs/trunk/howto/auth.html) * In that case, create a `./p/i/.htaccess` file with a matching `.htpasswd` file. diff --git a/app/install.php b/app/install.php index cd276bb7b..e77eaa6a5 100644 --- a/app/install.php +++ b/app/install.php @@ -410,7 +410,7 @@ function printStep1() {

    -

    +

    diff --git a/app/views/update/checkInstall.phtml b/app/views/update/checkInstall.phtml index 543ab43de..33d78cbe7 100644 --- a/app/views/update/checkInstall.phtml +++ b/app/views/update/checkInstall.phtml @@ -9,7 +9,7 @@

    = 5.3.7 but some older version include the patch. -It all depends on the distribution: +FreshRSS **CAN** work with PHP 5.3.8+. To do so, we are using specific functions available in the [''password_compat'' library](https://github.com/ircmaxell/password_compat#requirements) for the form authentication. -* CentOS and RHEL 6.5 are supported. -* On the other hand, **Debian with PHP 5.3.3 is not**! ([For more information](https://github.com/ircmaxell/password_compat#requirements)) # Getting the appropriate version of FreshRSS diff --git a/docs/fr/users/01_Installation.md b/docs/fr/users/01_Installation.md index 86daa636a..765cb9481 100644 --- a/docs/fr/users/01_Installation.md +++ b/docs/fr/users/01_Installation.md @@ -7,17 +7,14 @@ Il est toutefois de votre responsabilité de vérifier que votre hébergement pe | Logiciel | Recommandé | Fonctionne aussi avec | | -------- | ----------- | --------------------- | | Serveur web | **Apache 2** | Nginx | - | PHP | **PHP 5.3.7+** | PHP 5.2+ | + | PHP | **PHP 5.5+** | PHP 5.3.8+ | | Modules PHP | Requis : libxml, cURL, PDO_MySQL, PCRE et ctype \\ Requis (32 bits seulement) : GMP \\ Recommandé : JSON, Zlib, mbstring et iconv, ZipArchive | | | Base de données | **MySQL 5.0.3+** | SQLite 3.7.4+ | | Navigateur | **Firefox** | Chrome, Opera, Safari or IE 9+ | ## Note importante -FreshRSS **PEUT** fonctionner sur la version de PHP 5.3.3. En effet, nous utilisons des fonctions spécifiques pour la connexion par formulaire et notamment la bibliothèque ''password_compat''. Celle-ci est compatible avec PHP >= 5.3.7 ou certaines versions plus anciennes incluant un patch spécifique. Cela dépend de la distribution : - -* CentOS et la Red Hat Enterprise Linux 6.5 sont supportés. -* En revanche, **Debian avec PHP 5.3.3 n'est pas supporté !** ([Plus d'informations](https://github.com/ircmaxell/password_compat#requirements)) +FreshRSS **PEUT** fonctionner sur la version de PHP 5.3.8+. En effet, nous utilisons des fonctions spécifiques pour la connexion par formulaire et notamment la [bibliothèque ''password_compat''](https://github.com/ircmaxell/password_compat#requirements). # Choisir la bonne version de FreshRSS diff --git a/lib/lib_install.php b/lib/lib_install.php index bf81c15b4..cc0dc3128 100644 --- a/lib/lib_install.php +++ b/lib/lib_install.php @@ -6,7 +6,7 @@ Minz_Configuration::register('default_system', join_path(FRESHRSS_PATH, 'config. Minz_Configuration::register('default_user', join_path(FRESHRSS_PATH, 'config-user.default.php')); function checkRequirements($dbType = '') { - $php = version_compare(PHP_VERSION, '5.3.3') >= 0; + $php = version_compare(PHP_VERSION, '5.3.8') >= 0; $minz = file_exists(join_path(LIB_PATH, 'Minz')); $curl = extension_loaded('curl'); $pdo_mysql = extension_loaded('pdo_mysql'); diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 22136854e..dcce8a02c 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -1,4 +1,8 @@ version_compare(PHP_VERSION, '5.3.3') >= 0, + 'php' => version_compare(PHP_VERSION, '5.3.8') >= 0, 'minz' => file_exists(LIB_PATH . '/Minz'), 'curl' => extension_loaded('curl'), 'pdo' => $pdo_mysql || $pdo_sqlite, -- cgit v1.2.3 From 306ec7c86ba65aeeaa926eb2f1c19361b9adc408 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 21 Aug 2017 13:32:16 +0200 Subject: Changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f5a974ac..6f34f2dc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * Compatibility: * Minimal PHP version increased to PHP 5.3.8+ to fix sanitize bug [#1604](https://github.com/FreshRSS/FreshRSS/issues/1604) + * Add support for PHP 7.1 in the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584), [#1594](https://github.com/FreshRSS/FreshRSS/pull/1594) * UI * New page for subscription tools [#1534](https://github.com/FreshRSS/FreshRSS/issues/1354) * Adjustments to the padding of the tree of categories and feeds [1589](https://github.com/FreshRSS/FreshRSS/pull/1589) @@ -12,7 +13,6 @@ * I18n * Korean [#1578](https://github.com/FreshRSS/FreshRSS/pull/1578) * Bug fixing - * PHP 7.1 compatibility for the API [#1584](https://github.com/FreshRSS/FreshRSS/issues/1584), [#1594](https://github.com/FreshRSS/FreshRSS/pull/1594) * Fix API compatibility bug between PostgreSQL and EasyRSS [#1603](https://github.com/FreshRSS/FreshRSS/pull/1603) * Fix PostgreSQL error when adding entries with duplicated GUID [#1610](https://github.com/FreshRSS/FreshRSS/issues/1610) * Fix for RSS feeds containing HTML in author field [#1590](https://github.com/FreshRSS/FreshRSS/issues/1590) -- cgit v1.2.3 From 3ce2b4d1a8d70309ed353105b3fef617541a4b08 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Fri, 25 Aug 2017 08:50:11 +0200 Subject: [i18n] gen.php: mar to mrt (#1623) See https://github.com/FreshRSS/FreshRSS/pull/1617#discussion_r134110655 --- app/i18n/nl/gen.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 921a782d9..2a1d40e7e 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -77,8 +77,8 @@ return array( 'last_month' => 'Vorige maand', 'last_week' => 'Vorige week', 'last_year' => 'Vorig jaar', - 'mar' => 'mar', - 'march' => 'Mar', + 'mar' => 'mrt', + 'march' => 'Mrt', 'may_' => 'Mei', 'may' => 'Mei', 'mon' => 'Ma', -- cgit v1.2.3 From 4e174ed9dd84ce4f8de410baf6a6e0fde9160055 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Fri, 22 Sep 2017 12:13:46 +0200 Subject: [ci] Add Travis (#1619) * [ci] Add Travis * Exclude some libs * Semi-auto whitespace fixes * line length in SQLite * Exclude tests from line length * Feed.php line length * Feed.php: get rid of unnecessary concat * Feed.php: line length * bootstrap.php: no newline at end of file * Allow concatenating across multiple lines * Add Travis badge * do-install line length * update-or-create-user line length * cli/create-user line length * tests/app/Models/SearchTest.php fix indentation * tests/app/Models/UserQueryTest.php fix indentation * tests/app/Models/CategoryTest.php fix indentation * [fix] PHP 5.3 on precise * cli/do-install no spaces * cli/list-users line length * cli/reconfigure line length * empty catch statements * api/index line length nonsense * spaces before semicolon * app/Models/EntryDAO bunch of indentation * extra blank lines * spaces before comma in function call * testing tabwidth * increase to 10 * comment out tabwidth line * try older phpcs version 3.0.0RC4 * line length exception for app/install.php * proper spaces * stray spaces in i18n * Minz/ModelPdo line length * Minz whitespace * greader line length * greader elseif placement * app/Models/Feed.php spacing in function argument * ignore php 5.3 * app/Models/ConfigurationSetter.php stray whitespace * EntryDAOSQLite line length * I vote for higher max line length =P * ignore SQL * remove classname complaint * line length/more legible SQL * ignore line length nonsense * greader line length * feedController issues * uppercase TRUE, FALSE, NULL * revert * importExportController lowercase null * Share.php default value not necessary because ! is_array () a few lines down * CategoryDAO constants should be UPPERCASE * EntryDAO reduce line length * contentious autofix * Allow failures on all versions of PHP except 7.1 because reasons --- .travis.yml | 34 ++++ README.md | 5 + app/Controllers/categoryController.php | 4 +- app/Controllers/feedController.php | 10 +- app/Controllers/importExportController.php | 10 +- app/Controllers/indexController.php | 4 +- app/Exceptions/ZipException.php | 2 +- app/Models/CategoryDAO.php | 10 +- app/Models/ConfigurationSetter.php | 10 +- app/Models/Context.php | 8 +- app/Models/DatabaseDAO.php | 2 +- app/Models/DatabaseDAOPGSQL.php | 2 +- app/Models/DatabaseDAOSQLite.php | 2 +- app/Models/Entry.php | 1 + app/Models/EntryDAO.php | 100 +++++----- app/Models/EntryDAOPGSQL.php | 2 +- app/Models/EntryDAOSQLite.php | 57 +++++- app/Models/Feed.php | 26 ++- app/Models/FeedDAO.php | 20 +- app/Models/Share.php | 2 +- app/Models/Themes.php | 8 +- app/Models/UserDAO.php | 6 +- app/SQL/install.sql.sqlite.php | 38 +++- app/i18n/cz/conf.php | 2 +- app/i18n/cz/gen.php | 2 +- app/i18n/de/conf.php | 2 +- app/i18n/en/conf.php | 2 +- app/i18n/it/conf.php | 2 +- app/i18n/kr/conf.php | 2 +- app/i18n/nl/conf.php | 2 +- app/i18n/ru/conf.php | 2 +- app/i18n/tr/conf.php | 2 +- app/i18n/zh-cn/conf.php | 2 +- app/install.php | 4 +- cli/_update-or-create-user.php | 3 +- cli/create-user.php | 3 +- cli/do-install.php | 9 +- cli/list-users.php | 3 +- cli/reconfigure.php | 3 +- data/shares.php | 2 +- lib/Minz/ActionController.php | 6 +- lib/Minz/ActionException.php | 2 +- lib/Minz/Configuration.php | 4 +- .../ControllerNotActionControllerException.php | 2 +- lib/Minz/ControllerNotExistException.php | 2 +- lib/Minz/CurrentPagePaginationException.php | 2 +- lib/Minz/Dispatcher.php | 2 +- lib/Minz/FileNotExistException.php | 2 +- lib/Minz/FrontController.php | 4 +- lib/Minz/Helper.php | 4 +- lib/Minz/Model.php | 2 +- lib/Minz/ModelArray.php | 3 +- lib/Minz/ModelPdo.php | 2 +- lib/Minz/PDOConnectionException.php | 2 +- lib/Minz/Paginator.php | 8 +- lib/Minz/Translate.php | 4 +- lib/Minz/View.php | 2 - lib/favicons.php | 1 + lib/lib_date.php | 3 +- lib/lib_install.php | 3 +- lib/lib_rss.php | 2 + p/api/greader.php | 52 +++-- p/api/index.php | 3 +- phpcs.xml | 100 ++++++++++ tests/app/Models/CategoryTest.php | 12 +- tests/app/Models/SearchTest.php | 216 ++++++++++----------- tests/app/Models/UserQueryTest.php | 62 +++--- tests/bootstrap.php | 2 +- 68 files changed, 593 insertions(+), 326 deletions(-) create mode 100644 .travis.yml create mode 100644 phpcs.xml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..5c43e5666 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,34 @@ +language: php +php: + - '5.4' + - '5.5' + - '5.6' + - '7.0' + - '7.1' + - hhvm + - nightly + +install: + # newest version without https://github.com/squizlabs/PHP_CodeSniffer/pull/1404 + - pear install PHP_CodeSniffer-3.0.0RC4 + +script: + - phpenv rehash + - phpcs . --standard=phpcs.xml --warning-severity=0 --extensions=php -p + +env: # important! otherwise no job will be allowed to fail +matrix: + # PHP 5.3 only runs on Ubuntu 12.04 (precise), not 14.04 (trusty) + include: + - php: "5.3" + dist: precise + fast_finish: true + allow_failures: + - php: "5.3" + dist: precise + - php: "5.4" + - php: "5.5" + - php: "5.6" + - php: "7.0" + - php: hhvm + - php: nightly diff --git a/README.md b/README.md index 8595a26ec..016794ffc 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![Build Status][travis-badge]][travis-link] + * [Version française](README.fr.md) # FreshRSS @@ -182,3 +184,6 @@ Any client supporting a Google Reader-like API. Selection: * [EasyRSS](https://github.com/Alkarex/EasyRSS) (Open source, F-Droid) * Linux * [FeedReader 2.0+](https://jangernert.github.io/FeedReader/) (Open source) + +[travis-badge]:https://travis-ci.org/FreshRSS/FreshRSS.svg?branch=master +[travis-link]:https://travis-ci.org/FreshRSS/FreshRSS diff --git a/app/Controllers/categoryController.php b/app/Controllers/categoryController.php index 922f92844..f3b35a323 100644 --- a/app/Controllers/categoryController.php +++ b/app/Controllers/categoryController.php @@ -127,11 +127,11 @@ class FreshRSS_category_Controller extends Minz_ActionController { Minz_Request::bad(_t('feedback.sub.category.no_id'), $url_redirect); } - if ($id === FreshRSS_CategoryDAO::defaultCategoryId) { + if ($id === FreshRSS_CategoryDAO::DEFAULTCATEGORYID) { Minz_Request::bad(_t('feedback.sub.category.not_delete_default'), $url_redirect); } - if ($feedDAO->changeCategory($id, FreshRSS_CategoryDAO::defaultCategoryId) === false) { + if ($feedDAO->changeCategory($id, FreshRSS_CategoryDAO::DEFAULTCATEGORYID) === false) { Minz_Request::bad(_t('feedback.sub.category.error'), $url_redirect); } diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index c9b6deaa7..66b1167a8 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -42,7 +42,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { if ($cat == null) { $catDAO->checkDefault(); } - $cat_id = $cat == null ? FreshRSS_CategoryDAO::defaultCategoryId : $cat->id(); + $cat_id = $cat == null ? FreshRSS_CategoryDAO::DEFAULTCATEGORYID : $cat->id(); $feed = new FreshRSS_Feed($url); //Throws FreshRSS_BadUrl_Exception $feed->_httpAuth($http_auth); @@ -420,8 +420,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { $feedDAO->updateFeed($feed->id(), array('url' => $feed->url())); } } - } - elseif ($feed->url() !== $url) { // HTTP 301 Moved Permanently + } elseif ($feed->url() !== $url) { // HTTP 301 Moved Permanently Minz_Log::notice('Feed ' . $url . ' moved permanently to ' . $feed->url()); $feedDAO->updateFeed($feed->id(), array('url' => $feed->url())); } @@ -537,7 +536,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { } if ($cat_id <= 1) { $catDAO->checkDefault(); - $cat_id = FreshRSS_CategoryDAO::defaultCategoryId; + $cat_id = FreshRSS_CategoryDAO::DEFAULTCATEGORYID; } $feedDAO = FreshRSS_Factory::createFeedDao(); @@ -566,6 +565,9 @@ class FreshRSS_feed_Controller extends Minz_ActionController { if (self::moveFeed($feed_id, $cat_id)) { // TODO: return something useful + // Log a notice to prevent "Empty IF statement" warning in PHP_CodeSniffer + Minz_Log::notice('Moved feed `' . $feed_id . '` ' . + 'in the category `' . $cat_id . '`');; } else { Minz_Log::warning('Cannot move feed `' . $feed_id . '` ' . 'in the category `' . $cat_id . '`'); diff --git a/app/Controllers/importExportController.php b/app/Controllers/importExportController.php index 2bc68848c..a69490e70 100644 --- a/app/Controllers/importExportController.php +++ b/app/Controllers/importExportController.php @@ -152,8 +152,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController { // And finally, we get import status and redirect to the home page Minz_Session::_param('actualize_feeds', true); - $content_notif = $error === true ? _t('feedback.import_export.feeds_imported_with_errors') : - _t('feedback.import_export.feeds_imported'); + $content_notif = $error === true ? _t('feedback.import_export.feeds_imported_with_errors') : _t('feedback.import_export.feeds_imported'); Minz_Request::good($content_notif); } @@ -439,8 +438,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController { $feed_id = $article_to_feed[$item['id']]; $author = isset($item['author']) ? $item['author'] : ''; - $key_content = ($google_compliant && !isset($item['content'])) ? - 'summary' : 'content'; + $key_content = ($google_compliant && !isset($item['content'])) ? 'summary' : 'content'; $tags = $item['categories']; if ($google_compliant) { // Remove tags containing "/state/com.google" which are useless. @@ -501,7 +499,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController { try { // Create a Feed object and add it in database. $feed = new FreshRSS_Feed($url); - $feed->_category(FreshRSS_CategoryDAO::defaultCategoryId); + $feed->_category(FreshRSS_CategoryDAO::DEFAULTCATEGORYID); $feed->_name($name); $feed->_website($website); @@ -640,7 +638,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController { * @param FreshRSS_Feed $feed feed of which we want to get entries. * @return string the JSON file content. */ - private function generateEntries($type, $feed = NULL, $maxFeedEntries = 50) { + private function generateEntries($type, $feed = null, $maxFeedEntries = 50) { $this->view->categories = $this->catDAO->listCategories(); if ($type == 'starred') { diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index 5ca147ff3..e8dde36fa 100755 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -46,9 +46,7 @@ class FreshRSS_index_Controller extends Minz_ActionController { } $first_entry = $nb_entries > 0 ? $entries[0] : null; - FreshRSS_Context::$id_max = $first_entry === null ? - (time() - 1) . '000000' : - $first_entry->id(); + FreshRSS_Context::$id_max = $first_entry === null ? (time() - 1) . '000000' : $first_entry->id(); if (FreshRSS_Context::$order === 'ASC') { // In this case we do not know but we guess id_max $id_max = (time() - 1) . '000000'; diff --git a/app/Exceptions/ZipException.php b/app/Exceptions/ZipException.php index 8441daedf..ad01b87ea 100644 --- a/app/Exceptions/ZipException.php +++ b/app/Exceptions/ZipException.php @@ -2,7 +2,7 @@ class FreshRSS_Zip_Exception extends Exception { private $zipErrorCode = 0; - + public function __construct($zipErrorCode) { parent::__construct('ZIP error! ' . $url, 2141); $this->zipErrorCode = $zipErrorCode; diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php index c2d57c241..f219c275f 100644 --- a/app/Models/CategoryDAO.php +++ b/app/Models/CategoryDAO.php @@ -2,7 +2,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { - const defaultCategoryId = 1; + const DEFAULTCATEGORYID = 1; public function addCategory($valuesTmp) { $sql = 'INSERT INTO `' . $this->prefix . 'category`(name) VALUES(?)'; @@ -53,7 +53,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable } public function deleteCategory($id) { - if ($id <= self::defaultCategoryId) { + if ($id <= self::DEFAULTCATEGORYID) { return false; } $sql = 'DELETE FROM `' . $this->prefix . 'category` WHERE id=?'; @@ -123,7 +123,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable } public function getDefault() { - $sql = 'SELECT * FROM `' . $this->prefix . 'category` WHERE id=' . self::defaultCategoryId; + $sql = 'SELECT * FROM `' . $this->prefix . 'category` WHERE id=' . self::DEFAULTCATEGORYID; $stm = $this->bd->prepare($sql); $stm->execute(); @@ -137,11 +137,11 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable } } public function checkDefault() { - $def_cat = $this->searchById(self::defaultCategoryId); + $def_cat = $this->searchById(self::DEFAULTCATEGORYID); if ($def_cat == null) { $cat = new FreshRSS_Category(_t('gen.short.default_category')); - $cat->_id(self::defaultCategoryId); + $cat->_id(self::DEFAULTCATEGORYID); $values = array( 'id' => $cat->id(), diff --git a/app/Models/ConfigurationSetter.php b/app/Models/ConfigurationSetter.php index 70e1dea2e..ca4709903 100644 --- a/app/Models/ConfigurationSetter.php +++ b/app/Models/ConfigurationSetter.php @@ -56,8 +56,7 @@ class FreshRSS_ConfigurationSetter { switch ($value) { case 'all': $data['default_view'] = $value; - $data['default_state'] = (FreshRSS_Entry::STATE_READ + - FreshRSS_Entry::STATE_NOT_READ); + $data['default_state'] = (FreshRSS_Entry::STATE_READ + FreshRSS_Entry::STATE_NOT_READ); break; case 'adaptive': case 'unread': @@ -163,7 +162,7 @@ class FreshRSS_ConfigurationSetter { if (!in_array($value, array('global', 'normal', 'reader'))) { $value = 'normal'; } - $data['view_mode'] = $value; + $data['view_mode'] = $value; } /** @@ -326,7 +325,7 @@ class FreshRSS_ConfigurationSetter { if (!in_array($value, array('silent', 'development', 'production'))) { $value = 'production'; } - $data['environment'] = $value; + $data['environment'] = $value; } private function _limits(&$data, $values) { @@ -361,8 +360,7 @@ class FreshRSS_ConfigurationSetter { $value = intval($value); $limits = $limits_keys[$key]; - if ( - (!isset($limits['min']) || $value >= $limits['min']) && + if ((!isset($limits['min']) || $value >= $limits['min']) && (!isset($limits['max']) || $value <= $limits['max']) ) { $data['limits'][$key] = $value; diff --git a/app/Models/Context.php b/app/Models/Context.php index fd0e79fc1..2ca8f80b0 100644 --- a/app/Models/Context.php +++ b/app/Models/Context.php @@ -250,9 +250,7 @@ class FreshRSS_Context { } // If no feed have been found, next_get is the current category. - self::$next_get = empty($another_unread_id) ? - 'c_' . self::$current_get['category'] : - 'f_' . $another_unread_id; + self::$next_get = empty($another_unread_id) ? 'c_' . self::$current_get['category'] : 'f_' . $another_unread_id; break; case 'c': // We search the next category with at least one unread article. @@ -275,9 +273,7 @@ class FreshRSS_Context { } // No unread category? The main stream will be our destination! - self::$next_get = empty($another_unread_id) ? - 'a' : - 'c_' . $another_unread_id; + self::$next_get = empty($another_unread_id) ? 'a' : 'c_' . $another_unread_id; break; } } diff --git a/app/Models/DatabaseDAO.php b/app/Models/DatabaseDAO.php index 0d85718e3..6ba5bca3e 100644 --- a/app/Models/DatabaseDAO.php +++ b/app/Models/DatabaseDAO.php @@ -9,7 +9,7 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo { $stm = $this->bd->prepare($sql); $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_ASSOC); - + $tables = array( $this->prefix . 'category' => false, $this->prefix . 'feed' => false, diff --git a/app/Models/DatabaseDAOPGSQL.php b/app/Models/DatabaseDAOPGSQL.php index a4edaa448..2a18db970 100644 --- a/app/Models/DatabaseDAOPGSQL.php +++ b/app/Models/DatabaseDAOPGSQL.php @@ -12,7 +12,7 @@ class FreshRSS_DatabaseDAOPGSQL extends FreshRSS_DatabaseDAO { $values = array($dbowner); $stm->execute($values); $res = $stm->fetchAll(PDO::FETCH_ASSOC); - + $tables = array( $this->prefix . 'category' => false, $this->prefix . 'feed' => false, diff --git a/app/Models/DatabaseDAOSQLite.php b/app/Models/DatabaseDAOSQLite.php index 7f53f967d..2e1df132e 100644 --- a/app/Models/DatabaseDAOSQLite.php +++ b/app/Models/DatabaseDAOSQLite.php @@ -9,7 +9,7 @@ class FreshRSS_DatabaseDAOSQLite extends FreshRSS_DatabaseDAO { $stm = $this->bd->prepare($sql); $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_ASSOC); - + $tables = array( 'category' => false, 'feed' => false, diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 26cd24797..df3d59bea 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -189,6 +189,7 @@ class FreshRSS_Entry extends Minz_Model { ); } catch (Exception $e) { // rien à faire, on garde l'ancien contenu(requête a échoué) + Minz_Log::warning($e->getMessage()); } } } diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index 7e836097a..bebafe500 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -146,13 +146,13 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { public function addEntry($valuesTmp) { if ($this->addEntryPrepared == null) { $sql = 'INSERT INTO `' . $this->prefix . 'entrytmp` (id, guid, title, author, ' - . ($this->isCompressed() ? 'content_bin' : 'content') - . ', link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags) ' - . 'VALUES(:id, :guid, :title, :author, ' - . ($this->isCompressed() ? 'COMPRESS(:content)' : ':content') - . ', :link, :date, :last_seen, ' - . $this->sqlHexDecode(':hash') - . ', :is_read, :is_favorite, :id_feed, :tags)'; + . ($this->isCompressed() ? 'content_bin' : 'content') + . ', link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags) ' + . 'VALUES(:id, :guid, :title, :author, ' + . ($this->isCompressed() ? 'COMPRESS(:content)' : ':content') + . ', :link, :date, :last_seen, ' + . $this->sqlHexDecode(':hash') + . ', :is_read, :is_favorite, :id_feed, :tags)'; $this->addEntryPrepared = $this->bd->prepare($sql); } if ($this->addEntryPrepared) { @@ -203,8 +203,13 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { public function commitNewEntries() { $sql = 'SET @rank=(SELECT MAX(id) - COUNT(*) FROM `' . $this->prefix . 'entrytmp`); ' . //MySQL-specific - 'INSERT IGNORE INTO `' . $this->prefix . 'entry` (id, guid, title, author, content_bin, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags) ' . - 'SELECT @rank:=@rank+1 AS id, guid, title, author, content_bin, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags FROM `' . $this->prefix . 'entrytmp` ORDER BY date; ' . + 'INSERT IGNORE INTO `' . $this->prefix . 'entry` + ( + id, guid, title, author, content_bin, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags + ) ' . + 'SELECT @rank:=@rank+1 AS id, guid, title, author, content_bin, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags + FROM `' . $this->prefix . 'entrytmp` + ORDER BY date; ' . 'DELETE FROM `' . $this->prefix . 'entrytmp` WHERE id <= @rank;'; $hadTransaction = $this->bd->inTransaction(); if (!$hadTransaction) { @@ -226,13 +231,13 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { if ($this->updateEntryPrepared === null) { $sql = 'UPDATE `' . $this->prefix . 'entry` ' - . 'SET title=:title, author=:author, ' - . ($this->isCompressed() ? 'content_bin=COMPRESS(:content)' : 'content=:content') - . ', link=:link, date=:date, `lastSeen`=:last_seen, ' - . 'hash=' . $this->sqlHexDecode(':hash') - . ', ' . ($valuesTmp['is_read'] === null ? '' : 'is_read=:is_read, ') - . 'tags=:tags ' - . 'WHERE id_feed=:id_feed AND guid=:guid'; + . 'SET title=:title, author=:author, ' + . ($this->isCompressed() ? 'content_bin=COMPRESS(:content)' : 'content=:content') + . ', link=:link, date=:date, `lastSeen`=:last_seen, ' + . 'hash=' . $this->sqlHexDecode(':hash') + . ', ' . ($valuesTmp['is_read'] === null ? '' : 'is_read=:is_read, ') + . 'tags=:tags ' + . 'WHERE id_feed=:id_feed AND guid=:guid'; $this->updateEntryPrepared = $this->bd->prepare($sql); } @@ -295,8 +300,8 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { } FreshRSS_UserDAO::touch(); $sql = 'UPDATE `' . $this->prefix . 'entry` ' - . 'SET is_favorite=? ' - . 'WHERE id IN (' . str_repeat('?,', count($ids) - 1). '?)'; + . 'SET is_favorite=? ' + . 'WHERE id IN (' . str_repeat('?,', count($ids) - 1). '?)'; $values = array($is_favorite ? 1 : 0); $values = array_merge($values, $ids); $stm = $this->bd->prepare($sql); @@ -322,14 +327,14 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { */ protected function updateCacheUnreads($catId = false, $feedId = false) { $sql = 'UPDATE `' . $this->prefix . 'feed` f ' - . 'LEFT OUTER JOIN (' - . 'SELECT e.id_feed, ' - . 'COUNT(*) AS nbUnreads ' - . 'FROM `' . $this->prefix . 'entry` e ' - . 'WHERE e.is_read=0 ' - . 'GROUP BY e.id_feed' - . ') x ON x.id_feed=f.id ' - . 'SET f.`cache_nbUnreads`=COALESCE(x.nbUnreads, 0)'; + . 'LEFT OUTER JOIN (' + . 'SELECT e.id_feed, ' + . 'COUNT(*) AS nbUnreads ' + . 'FROM `' . $this->prefix . 'entry` e ' + . 'WHERE e.is_read=0 ' + . 'GROUP BY e.id_feed' + . ') x ON x.id_feed=f.id ' + . 'SET f.`cache_nbUnreads`=COALESCE(x.nbUnreads, 0)'; $hasWhere = false; $values = array(); if ($feedId !== false) { @@ -558,9 +563,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { public function searchByGuid($id_feed, $guid) { // un guid est unique pour un flux donné $sql = 'SELECT id, guid, title, author, ' - . ($this->isCompressed() ? 'UNCOMPRESS(content_bin) AS content' : 'content') - . ', link, date, is_read, is_favorite, id_feed, tags ' - . 'FROM `' . $this->prefix . 'entry` WHERE id_feed=? AND guid=?'; + . ($this->isCompressed() ? 'UNCOMPRESS(content_bin) AS content' : 'content') + . ', link, date, is_read, is_favorite, id_feed, tags ' + . 'FROM `' . $this->prefix . 'entry` WHERE id_feed=? AND guid=?'; $stm = $this->bd->prepare($sql); $values = array( @@ -576,9 +581,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { public function searchById($id) { $sql = 'SELECT id, guid, title, author, ' - . ($this->isCompressed() ? 'UNCOMPRESS(content_bin) AS content' : 'content') - . ', link, date, is_read, is_favorite, id_feed, tags ' - . 'FROM `' . $this->prefix . 'entry` WHERE id=?'; + . ($this->isCompressed() ? 'UNCOMPRESS(content_bin) AS content' : 'content') + . ', link, date, is_read, is_favorite, id_feed, tags ' + . 'FROM `' . $this->prefix . 'entry` WHERE id=?'; $stm = $this->bd->prepare($sql); $values = array($id); @@ -600,16 +605,14 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { if (!($state & FreshRSS_Entry::STATE_READ)) { $search .= 'AND ' . $alias . 'is_read=0 '; } - } - elseif ($state & FreshRSS_Entry::STATE_READ) { + } elseif ($state & FreshRSS_Entry::STATE_READ) { $search .= 'AND ' . $alias . 'is_read=1 '; } if ($state & FreshRSS_Entry::STATE_FAVORITE) { if (!($state & FreshRSS_Entry::STATE_NOT_FAVORITE)) { $search .= 'AND ' . $alias . 'is_favorite=1 '; } - } - elseif ($state & FreshRSS_Entry::STATE_NOT_FAVORITE) { + } elseif ($state & FreshRSS_Entry::STATE_NOT_FAVORITE) { $search .= 'AND ' . $alias . 'is_favorite=0 '; } @@ -621,7 +624,8 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { throw new FreshRSS_EntriesGetter_Exception('Bad order in Entry->listByType: [' . $order . ']!'); } /*if ($firstId === '' && parent::$sharedDbType === 'mysql') { - $firstId = $order === 'DESC' ? '9000000000'. '000000' : '0'; //MySQL optimization. TODO: check if this is needed again, after the filtering for old articles has been removed in 0.9-dev + //MySQL optimization. TODO: check if this is needed again, after the filtering for old articles has been removed in 0.9-dev + $firstId = $order === 'DESC' ? '9000000000'. '000000' : '0'; }*/ if ($firstId !== '') { $search .= 'AND ' . $alias . 'id ' . ($order === 'DESC' ? '<=' : '>=') . $firstId . ' '; @@ -759,13 +763,13 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { list($values, $sql) = $this->sqlListWhere($type, $id, $state, $order, $limit, $firstId, $filter, $date_min); $sql = 'SELECT e0.id, e0.guid, e0.title, e0.author, ' - . ($this->isCompressed() ? 'UNCOMPRESS(content_bin) AS content' : 'content') - . ', e0.link, e0.date, e0.is_read, e0.is_favorite, e0.id_feed, e0.tags ' - . 'FROM `' . $this->prefix . 'entry` e0 ' - . 'INNER JOIN (' - . $sql - . ') e2 ON e2.id=e0.id ' - . 'ORDER BY e0.id ' . $order; + . ($this->isCompressed() ? 'UNCOMPRESS(content_bin) AS content' : 'content') + . ', e0.link, e0.date, e0.is_read, e0.is_favorite, e0.id_feed, e0.tags ' + . 'FROM `' . $this->prefix . 'entry` e0 ' + . 'INNER JOIN (' + . $sql + . ') e2 ON e2.id=e0.id ' + . 'ORDER BY e0.id ' . $order; $stm = $this->bd->prepare($sql); $stm->execute($values); @@ -839,7 +843,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { public function countUnreadRead() { $sql = 'SELECT COUNT(e.id) AS count FROM `' . $this->prefix . 'entry` e INNER JOIN `' . $this->prefix . 'feed` f ON e.id_feed=f.id WHERE priority > 0' - . ' UNION SELECT COUNT(e.id) AS count FROM `' . $this->prefix . 'entry` e INNER JOIN `' . $this->prefix . 'feed` f ON e.id_feed=f.id WHERE priority > 0 AND is_read=0'; + . ' UNION SELECT COUNT(e.id) AS count FROM `' . $this->prefix . 'entry` e INNER JOIN `' . $this->prefix . 'feed` f ON e.id_feed=f.id WHERE priority > 0 AND is_read=0'; $stm = $this->bd->prepare($sql); $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_COLUMN, 0); @@ -870,9 +874,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { public function countUnreadReadFavorites() { $sql = 'SELECT c FROM (' - . 'SELECT COUNT(id) AS c, 1 as o FROM `' . $this->prefix . 'entry` WHERE is_favorite=1 ' - . 'UNION SELECT COUNT(id) AS c, 2 AS o FROM `' . $this->prefix . 'entry` WHERE is_favorite=1 AND is_read=0' - . ') u ORDER BY o'; + . 'SELECT COUNT(id) AS c, 1 as o FROM `' . $this->prefix . 'entry` WHERE is_favorite=1 ' + . 'UNION SELECT COUNT(id) AS c, 2 AS o FROM `' . $this->prefix . 'entry` WHERE is_favorite=1 AND is_read=0' + . ') u ORDER BY o'; $stm = $this->bd->prepare($sql); $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_COLUMN, 0); diff --git a/app/Models/EntryDAOPGSQL.php b/app/Models/EntryDAOPGSQL.php index 6e6f9e658..405774abf 100644 --- a/app/Models/EntryDAOPGSQL.php +++ b/app/Models/EntryDAOPGSQL.php @@ -11,7 +11,7 @@ class FreshRSS_EntryDAOPGSQL extends FreshRSS_EntryDAOSQLite { } protected function autoUpdateDb($errorInfo) { - if (isset($errorInfo[0])) { + if (isset($errorInfo[0])) { if ($errorInfo[0] === '42P01' && stripos($errorInfo[2], 'entrytmp') !== false) { //undefined_table return $this->createEntryTempTable(); } diff --git a/app/Models/EntryDAOSQLite.php b/app/Models/EntryDAOSQLite.php index ad7bcd865..8dad54322 100644 --- a/app/Models/EntryDAOSQLite.php +++ b/app/Models/EntryDAOSQLite.php @@ -27,11 +27,58 @@ class FreshRSS_EntryDAOSQLite extends FreshRSS_EntryDAO { public function commitNewEntries() { $sql = ' -CREATE TEMP TABLE `tmp` AS SELECT id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags FROM `' . $this->prefix . 'entrytmp` ORDER BY date; -INSERT OR IGNORE INTO `' . $this->prefix . 'entry` (id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags) - SELECT rowid + (SELECT MAX(id) - COUNT(*) FROM `tmp`) AS id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags FROM `tmp` ORDER BY date; -DELETE FROM `' . $this->prefix . 'entrytmp` WHERE id <= (SELECT MAX(id) FROM `tmp`); -DROP TABLE `tmp`;'; + CREATE TEMP TABLE `tmp` AS + SELECT + id, + guid, + title, + author, + content, + link, + date, + `lastSeen`, + hash, is_read, + is_favorite, + id_feed, + tags + FROM `' . $this->prefix . 'entrytmp` + ORDER BY date; + INSERT OR IGNORE INTO `' . $this->prefix . 'entry` + ( + id, + guid, + title, + author, + content, + link, + date, + `lastSeen`, + hash, + is_read, + is_favorite, + id_feed, + tags + ) + SELECT rowid + (SELECT MAX(id) - COUNT(*) FROM `tmp`) AS + id, + guid, + title, + author, + content, + link, + date, + `lastSeen`, + hash, + is_read, + is_favorite, + id_feed, + tags + FROM `tmp` + ORDER BY date; + DELETE FROM `' . $this->prefix . 'entrytmp` + WHERE id <= (SELECT MAX(id) + FROM `tmp`); + DROP TABLE `tmp`;'; $hadTransaction = $this->bd->inTransaction(); if (!$hadTransaction) { $this->bd->beginTransaction(); diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 4f11d32e9..88ff9bf18 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -22,7 +22,7 @@ class FreshRSS_Feed extends Minz_Model { private $hubUrl = ''; private $selfUrl = ''; - public function __construct($url, $validate=true) { + public function __construct($url, $validate = true) { if ($validate) { $this->_url($url); } else { @@ -165,7 +165,7 @@ class FreshRSS_Feed extends Minz_Model { public function _id($value) { $this->id = $value; } - public function _url($value, $validate=true) { + public function _url($value, $validate = true) { $this->hash = null; if ($validate) { $value = checkUrl($value); @@ -182,7 +182,7 @@ class FreshRSS_Feed extends Minz_Model { public function _name($value) { $this->name = $value === null ? '' : $value; } - public function _website($value, $validate=true) { + public function _website($value, $validate = true) { if ($validate) { $value = checkUrl($value); } @@ -254,7 +254,9 @@ class FreshRSS_Feed extends Minz_Model { if ((!$mtime) || $feed->error()) { $errorMessage = $feed->error(); - throw new FreshRSS_Feed_Exception(($errorMessage == '' ? 'Unknown error for feed' : $errorMessage) . ' [' . $url . ']'); + throw new FreshRSS_Feed_Exception( + ($errorMessage == '' ? 'Unknown error for feed' : $errorMessage) . ' [' . $url . ']' + ); } $links = $feed->get_links('self'); @@ -324,9 +326,11 @@ class FreshRSS_Feed extends Minz_Model { if (strpos($mime, 'image/') === 0) { $content .= '

    '; } elseif (strpos($mime, 'audio/') === 0) { - $content .= '

    💾

    '; + $content .= '

    💾

    '; } elseif (strpos($mime, 'video/') === 0) { - $content .= '

    💾

    '; + $content .= '

    💾

    '; } elseif (strpos($mime, 'application/') === 0 || strpos($mime, 'text/') === 0) { $content .= '

    💾

    '; } else { @@ -481,10 +485,12 @@ class FreshRSS_Feed extends Minz_Model { CURLOPT_FOLLOWLOCATION => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => 'FreshRSS/' . FRESHRSS_VERSION . ' (' . PHP_OS . '; ' . FRESHRSS_WEBSITE . ')', - CURLOPT_POSTFIELDS => 'hub.verify=sync' - . '&hub.mode=' . ($state ? 'subscribe' : 'unsubscribe') - . '&hub.topic=' . urlencode($url) - . '&hub.callback=' . urlencode($callbackUrl) + CURLOPT_POSTFIELDS => http_build_query( + 'hub.verify' => 'sync', + 'hub.mode' => ($state ? 'subscribe' : 'unsubscribe'), + 'hub.topic' => urlencode($url), + 'hub.callback' => urlencode($callbackUrl), + ) ) ); $response = curl_exec($ch); diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php index d278122e3..0de6d98be 100644 --- a/app/Models/FeedDAO.php +++ b/app/Models/FeedDAO.php @@ -2,7 +2,23 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable { public function addFeed($valuesTmp) { - $sql = 'INSERT INTO `' . $this->prefix . 'feed` (url, category, name, website, description, `lastUpdate`, priority, `httpAuth`, error, keep_history, ttl) VALUES(?, ?, ?, ?, ?, ?, 10, ?, 0, -2, -2)'; + $sql = ' + INSERT INTO `' . $this->prefix . 'feed` + ( + url, + category, + name, + website, + description, + `lastUpdate`, + priority, + `httpAuth`, + error, + keep_history, + ttl + ) + VALUES + (?, ?, ?, ?, ?, ?, 10, ?, 0, -2, -2)'; $stm = $this->bd->prepare($sql); $valuesTmp['url'] = safe_ascii($valuesTmp['url']); @@ -380,7 +396,7 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable { if ($catID === null) { $category = isset($dao['category']) ? $dao['category'] : 0; } else { - $category = $catID ; + $category = $catID; } $myFeed = new FreshRSS_Feed(isset($dao['url']) ? $dao['url'] : '', false); diff --git a/app/Models/Share.php b/app/Models/Share.php index 1c8a7e767..86b1b9ed9 100644 --- a/app/Models/Share.php +++ b/app/Models/Share.php @@ -87,7 +87,7 @@ class FreshRSS_Share { * decentralized ones. * @param $help_url is an optional url to give help on this option. */ - private function __construct($type, $url_transform, $transform = array(), + private function __construct($type, $url_transform, $transform, $form_type, $help_url = '') { $this->type = $type; $this->name = _t('gen.share.' . $type); diff --git a/app/Models/Themes.php b/app/Models/Themes.php index 5a6ec0a05..8920fbf7e 100644 --- a/app/Models/Themes.php +++ b/app/Models/Themes.php @@ -25,7 +25,7 @@ class FreshRSS_Themes extends Minz_Model { } public static function get_infos($theme_id) { - $theme_dir = PUBLIC_PATH . self::$themesUrl . $theme_id ; + $theme_dir = PUBLIC_PATH . self::$themesUrl . $theme_id; if (is_dir($theme_dir)) { $json_filename = $theme_dir . '/metadata.json'; if (file_exists($json_filename)) { @@ -109,10 +109,8 @@ class FreshRSS_Themes extends Minz_Model { } $url = $name . '.svg'; - $url = isset(self::$themeIcons[$url]) ? (self::$themeIconsUrl . $url) : - (self::$defaultIconsUrl . $url); + $url = isset(self::$themeIcons[$url]) ? (self::$themeIconsUrl . $url) : (self::$defaultIconsUrl . $url); - return $urlOnly ? Minz_Url::display($url) : - '' . $alts[$name] . ''; + return $urlOnly ? Minz_Url::display($url) : '' . $alts[$name] . ''; } } diff --git a/app/Models/UserDAO.php b/app/Models/UserDAO.php index 310c7c096..c921d54c9 100644 --- a/app/Models/UserDAO.php +++ b/app/Models/UserDAO.php @@ -83,17 +83,17 @@ class FreshRSS_UserDAO extends Minz_ModelPdo { } public static function exist($username) { - return is_dir(join_path(DATA_PATH , 'users', $username)); + return is_dir(join_path(DATA_PATH, 'users', $username)); } public static function touch($username = '') { if (!FreshRSS_user_Controller::checkUsername($username)) { $username = Minz_Session::param('currentUser', '_'); } - return touch(join_path(DATA_PATH , 'users', $username, 'config.php')); + return touch(join_path(DATA_PATH, 'users', $username, 'config.php')); } public static function mtime($username) { - return @filemtime(join_path(DATA_PATH , 'users', $username, 'config.php')); + return @filemtime(join_path(DATA_PATH, 'users', $username, 'config.php')); } } diff --git a/app/SQL/install.sql.sqlite.php b/app/SQL/install.sql.sqlite.php index c4e4af006..d485e2120 100644 --- a/app/SQL/install.sql.sqlite.php +++ b/app/SQL/install.sql.sqlite.php @@ -82,8 +82,42 @@ $SQL_CREATE_TABLE_ENTRYTMP = array( global $SQL_INSERT_FEEDS; $SQL_INSERT_FEEDS = array( -'INSERT OR IGNORE INTO `feed` (url, category, name, website, description, ttl) VALUES("http://freshrss.org/feeds/all.atom.xml", 1, "FreshRSS.org", "http://freshrss.org/", "FreshRSS, a free, self-hostable aggregator…", 86400);', -'INSERT OR IGNORE INTO `feed` (url, category, name, website, description, ttl) VALUES("https://github.com/FreshRSS/FreshRSS/releases.atom", 1, "FreshRSS releases", "https://github.com/FreshRSS/FreshRSS/", "FreshRSS releases @ GitHub", 86400);', +'INSERT OR IGNORE INTO `feed` + ( + url, + category, + name, + website, + description, + ttl + ) + VALUES + ( + "http://freshrss.org/feeds/all.atom.xml", + 1, + "FreshRSS.org", + "http://freshrss.org/", + "FreshRSS, a free, self-hostable aggregator…", + 86400 + );', +'INSERT OR IGNORE INTO `feed` + ( + url, + category, + name, + website, + description, + ttl + ) + VALUES + ( + "https://github.com/FreshRSS/FreshRSS/releases.atom", + 1, + "FreshRSS releases", + "https://github.com/FreshRSS/FreshRSS/", + "FreshRSS releases @ GitHub", + 86400 + );', ); define('SQL_DROP_TABLES', 'DROP TABLE IF EXISTS `entrytmp`, `entry`, `feed`, `category`'); diff --git a/app/i18n/cz/conf.php b/app/i18n/cz/conf.php index fd414e246..9a4410679 100644 --- a/app/i18n/cz/conf.php +++ b/app/i18n/cz/conf.php @@ -104,7 +104,7 @@ return array( 'when' => 'Označit článek jako přečtený…', ), 'show' => array( - '_' => 'Počet zobrazených článků', + '_' => 'Počet zobrazených článků', 'adaptive' => 'Vyberte zobrazení', 'all_articles' => 'Zobrazit všechny články', 'unread' => 'Zobrazit jen nepřečtené', diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index f891f3f1d..405c05de9 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -25,7 +25,7 @@ return array( 'keep_logged_in' => 'Zapamatovat přihlášení (%s dny)', 'login' => 'Login', 'logout' => 'Odhlášení', - 'password' => array( + 'password' => array( '_' => 'Heslo', 'format' => 'Alespoň 7 znaků', ), diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index bfc24d2d2..ac7c08e98 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -104,7 +104,7 @@ return array( 'when' => 'Artikel als gelesen markieren…', ), 'show' => array( - '_' => 'Artikel zum Anzeigen', + '_' => 'Artikel zum Anzeigen', 'adaptive' => 'Anzeige anpassen', 'all_articles' => 'Alle Artikel zeigen', 'unread' => 'Nur ungelesene zeigen', diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index f4618a1ff..e4eeb74b7 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -104,7 +104,7 @@ return array( 'when' => 'Mark article as read…', ), 'show' => array( - '_' => 'Articles to display', + '_' => 'Articles to display', 'adaptive' => 'Adjust showing', 'all_articles' => 'Show all articles', 'unread' => 'Show only unread', diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index e6ce86ef9..15837ae8a 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -104,7 +104,7 @@ return array( 'when' => 'Segna articoli come letti…', ), 'show' => array( - '_' => 'Articoli da visualizzare', + '_' => 'Articoli da visualizzare', 'adaptive' => 'Adatta visualizzazione', 'all_articles' => 'Mostra tutti gli articoli', 'unread' => 'Mostra solo non letti', diff --git a/app/i18n/kr/conf.php b/app/i18n/kr/conf.php index e116a6456..35d412078 100644 --- a/app/i18n/kr/conf.php +++ b/app/i18n/kr/conf.php @@ -104,7 +104,7 @@ return array( 'when' => '읽음으로 표시…', ), 'show' => array( - '_' => '글 표시 방식', + '_' => '글 표시 방식', 'adaptive' => '읽지 않은 글이 없으면 모든 글 표시', 'all_articles' => '모든 글 표시', 'unread' => '읽지 않은 글만 표시', diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 77f6307ed..e4db5ec3d 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -104,7 +104,7 @@ return array( 'when' => 'Markeer artikel als gelezen…', ), 'show' => array( - '_' => 'Artikelen om te tonen', + '_' => 'Artikelen om te tonen', 'adaptive' => 'Pas weergave aan', 'all_articles' => 'Bekijk alle artikelen', 'unread' => 'Bekijk alleen ongelezen', diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index 3cf0a5ea9..9c61754ae 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -104,7 +104,7 @@ return array( 'when' => 'Mark article as read…', ), 'show' => array( - '_' => 'Articles to display', + '_' => 'Articles to display', 'adaptive' => 'Adjust showing', 'all_articles' => 'Show all articles', 'unread' => 'Show only unread', diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index 9930c3637..e4c094be2 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -104,7 +104,7 @@ return array( 'when' => 'Makaleyi okundu olarak işaretle…', ), 'show' => array( - '_' => 'Gösterilecek makaleler', + '_' => 'Gösterilecek makaleler', 'adaptive' => 'Ayarlanmış gösterim', 'all_articles' => 'Tüm makaleleri göster', 'unread' => 'Sadece okunmamış makaleleri göster', diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index 6ac0bb5e7..fb62c48ef 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -104,7 +104,7 @@ return array( 'when' => '将文章设为已读…', ), 'show' => array( - '_' => '文章显示', + '_' => '文章显示', 'adaptive' => '智能显示', 'all_articles' => '显示所有文章', 'unread' => '只显示未读', diff --git a/app/install.php b/app/install.php index e77eaa6a5..870c93908 100644 --- a/app/install.php +++ b/app/install.php @@ -11,7 +11,7 @@ session_set_cookie_params(0, dirname(empty($_SERVER['REQUEST_URI']) ? '/' : dirn session_start(); if (isset($_GET['step'])) { - define('STEP',(int)$_GET['step']); + define('STEP', (int)$_GET['step']); } else { define('STEP', 0); } @@ -652,7 +652,7 @@ function printStep3() {
    - +
    diff --git a/cli/_update-or-create-user.php b/cli/_update-or-create-user.php index c7f1008cd..15397f1f6 100644 --- a/cli/_update-or-create-user.php +++ b/cli/_update-or-create-user.php @@ -23,7 +23,8 @@ if (!$isUpdate) { $options = getopt('', $params); if (empty($options['user'])) { - fail('Usage: ' . basename($_SERVER['SCRIPT_FILENAME']) . " --user username ( --password 'password' --api_password 'api_password'" . + fail('Usage: ' . basename($_SERVER['SCRIPT_FILENAME']) . + " --user username ( --password 'password' --api_password 'api_password'" . " --language en --email user@example.net --token 'longRandomString'" . ($isUpdate ? '' : '--no_default_feeds') . " --purge_after_months 3 --feed_min_articles_default 50 --feed_ttl_default 3600" . diff --git a/cli/create-user.php b/cli/create-user.php index add9c1b13..1b6be3153 100755 --- a/cli/create-user.php +++ b/cli/create-user.php @@ -5,7 +5,8 @@ require('_update-or-create-user.php'); $username = $options['user']; if (!FreshRSS_user_Controller::checkUsername($username)) { - fail('FreshRSS error: invalid username “' . $username . '”! Must be matching ' . FreshRSS_user_Controller::USERNAME_PATTERN); + fail('FreshRSS error: invalid username “' . $username . + '”! Must be matching ' . FreshRSS_user_Controller::USERNAME_PATTERN); } $usernames = listUsers(); diff --git a/cli/do-install.php b/cli/do-install.php index 54e3c3d4f..74bbdfcd4 100755 --- a/cli/do-install.php +++ b/cli/do-install.php @@ -81,14 +81,17 @@ if ($requirements['all'] !== 'ok') { } if (!FreshRSS_user_Controller::checkUsername($options['default_user'])) { - fail('FreshRSS error: invalid default username “' . $options['default_user'] . '”! Must be matching ' . FreshRSS_user_Controller::USERNAME_PATTERN); + fail('FreshRSS error: invalid default username “' . $options['default_user'] + . '”! Must be matching ' . FreshRSS_user_Controller::USERNAME_PATTERN); } if (isset($options['auth_type']) && !in_array($options['auth_type'], array('form', 'http_auth', 'none'))) { - fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }): ' . $options['auth_type']); + fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }): ' + . $options['auth_type']); } -if (file_put_contents(join_path(DATA_PATH, 'config.php'), "default_user !== '' && in_array(FreshRSS_Context::$system_conf->default_user, $users, true)) { +if (FreshRSS_Context::$system_conf->default_user !== '' + && in_array(FreshRSS_Context::$system_conf->default_user, $users, true)) { array_unshift($users, FreshRSS_Context::$system_conf->default_user); $users = array_unique($users); } diff --git a/cli/reconfigure.php b/cli/reconfigure.php index c6902da67..466d35373 100755 --- a/cli/reconfigure.php +++ b/cli/reconfigure.php @@ -51,7 +51,8 @@ if (!FreshRSS_user_Controller::checkUsername($config->default_user)) { } if (isset($config->auth_type) && !in_array($config->auth_type, array('form', 'http_auth', 'none'))) { - fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }: ' . $config->auth_type); + fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }: ' + . $config->auth_type); } $config->save(); diff --git a/data/shares.php b/data/shares.php index 16e528d14..d73ae3826 100644 --- a/data/shares.php +++ b/data/shares.php @@ -4,7 +4,7 @@ * This is a configuration file. You shouldn't modify it unless you know what * you are doing. If you want to add a share type, this is where you need to do * it. - * + * * For each share there is different configuration options. Here is the description * of those options: * - url is a mandatory option. It is a string representing the share URL. It diff --git a/lib/Minz/ActionController.php b/lib/Minz/ActionController.php index b47c54554..232a4ef9b 100644 --- a/lib/Minz/ActionController.php +++ b/lib/Minz/ActionController.php @@ -1,5 +1,5 @@ */ @@ -24,7 +24,7 @@ class Minz_ActionController { public function view () { return $this->view; } - + /** * Méthodes à redéfinir (ou non) par héritage * firstAction est la première méthode exécutée par le Dispatcher @@ -34,5 +34,3 @@ class Minz_ActionController { public function firstAction () { } public function lastAction () { } } - - diff --git a/lib/Minz/ActionException.php b/lib/Minz/ActionException.php index c566a076f..f1f70c1bc 100644 --- a/lib/Minz/ActionException.php +++ b/lib/Minz/ActionException.php @@ -3,7 +3,7 @@ class Minz_ActionException extends Minz_Exception { public function __construct ($controller_name, $action_name, $code = self::ERROR) { $message = '`' . $action_name . '` cannot be invoked on `' . $controller_name . '`'; - + parent::__construct ($message, $code); } } diff --git a/lib/Minz/Configuration.php b/lib/Minz/Configuration.php index d695d4a53..5470dc85f 100644 --- a/lib/Minz/Configuration.php +++ b/lib/Minz/Configuration.php @@ -104,7 +104,7 @@ class Minz_Configuration { /** * Create a new Minz_Configuration object. - * + * * @param $namespace the name of the current configuration. * @param $config_filename the file containing configuration values. * @param $default_filename the file containing default values, null by default. @@ -145,7 +145,7 @@ class Minz_Configuration { /** * Return the value of the given param. - * + * * @param $key the name of the param. * @param $default default value to return if key does not exist. * @return the value corresponding to the key. diff --git a/lib/Minz/ControllerNotActionControllerException.php b/lib/Minz/ControllerNotActionControllerException.php index 535a1377e..1a8e0729c 100644 --- a/lib/Minz/ControllerNotActionControllerException.php +++ b/lib/Minz/ControllerNotActionControllerException.php @@ -3,7 +3,7 @@ class Minz_ControllerNotActionControllerException extends Minz_Exception { public function __construct ($controller_name, $code = self::ERROR) { $message = 'Controller `' . $controller_name . '` isn\'t instance of ActionController'; - + parent::__construct ($message, $code); } } diff --git a/lib/Minz/ControllerNotExistException.php b/lib/Minz/ControllerNotExistException.php index 523867d11..24a09a635 100644 --- a/lib/Minz/ControllerNotExistException.php +++ b/lib/Minz/ControllerNotExistException.php @@ -3,7 +3,7 @@ class Minz_ControllerNotExistException extends Minz_Exception { public function __construct ($controller_name, $code = self::ERROR) { $message = 'Controller `' . $controller_name . '` doesn\'t exist'; - + parent::__construct ($message, $code); } } diff --git a/lib/Minz/CurrentPagePaginationException.php b/lib/Minz/CurrentPagePaginationException.php index 74214d879..3e3d9d1b4 100644 --- a/lib/Minz/CurrentPagePaginationException.php +++ b/lib/Minz/CurrentPagePaginationException.php @@ -2,7 +2,7 @@ class Minz_CurrentPagePaginationException extends Minz_Exception { public function __construct ($page) { $message = 'Page number `' . $page . '` doesn\'t exist'; - + parent::__construct ($message, self::ERROR); } } diff --git a/lib/Minz/Dispatcher.php b/lib/Minz/Dispatcher.php index 125ce5757..bdb1c76f6 100644 --- a/lib/Minz/Dispatcher.php +++ b/lib/Minz/Dispatcher.php @@ -1,5 +1,5 @@ */ diff --git a/lib/Minz/FileNotExistException.php b/lib/Minz/FileNotExistException.php index f8dfbdf66..f97f161af 100644 --- a/lib/Minz/FileNotExistException.php +++ b/lib/Minz/FileNotExistException.php @@ -2,7 +2,7 @@ class Minz_FileNotExistException extends Minz_Exception { public function __construct ($file_name, $code = self::ERROR) { $message = 'File not found: `' . $file_name.'`'; - + parent::__construct ($message, $code); } } diff --git a/lib/Minz/FrontController.php b/lib/Minz/FrontController.php index 952d983c9..066278b7c 100644 --- a/lib/Minz/FrontController.php +++ b/lib/Minz/FrontController.php @@ -119,12 +119,12 @@ class Minz_FrontController { switch($conf->environment) { case 'production': error_reporting(E_ALL); - ini_set('display_errors','Off'); + ini_set('display_errors', 'Off'); ini_set('log_errors', 'On'); break; case 'development': error_reporting(E_ALL); - ini_set('display_errors','On'); + ini_set('display_errors', 'On'); ini_set('log_errors', 'On'); break; case 'silent': diff --git a/lib/Minz/Helper.php b/lib/Minz/Helper.php index f4a547c4e..c328d9e6b 100644 --- a/lib/Minz/Helper.php +++ b/lib/Minz/Helper.php @@ -1,5 +1,5 @@ */ @@ -13,7 +13,7 @@ class Minz_Helper { * @param $var variable à traiter (tableau ou simple variable) */ public static function stripslashes_r($var) { - if (is_array($var)){ + if (is_array($var)) { return array_map(array('Minz_Helper', 'stripslashes_r'), $var); } else { return stripslashes($var); diff --git a/lib/Minz/Model.php b/lib/Minz/Model.php index adbaba942..1310888cf 100644 --- a/lib/Minz/Model.php +++ b/lib/Minz/Model.php @@ -1,5 +1,5 @@ */ diff --git a/lib/Minz/ModelArray.php b/lib/Minz/ModelArray.php index ff23dbc83..1ac2b313d 100644 --- a/lib/Minz/ModelArray.php +++ b/lib/Minz/ModelArray.php @@ -25,8 +25,7 @@ class Minz_ModelArray { protected function loadArray() { if (!file_exists($this->filename)) { throw new Minz_FileNotExistException($this->filename, Minz_Exception::WARNING); - } - elseif (($handle = $this->getLock()) === false) { + } elseif (($handle = $this->getLock()) === false) { throw new Minz_PermissionDeniedException($this->filename); } else { $data = include($this->filename); diff --git a/lib/Minz/ModelPdo.php b/lib/Minz/ModelPdo.php index caab1d114..d769e0ff4 100644 --- a/lib/Minz/ModelPdo.php +++ b/lib/Minz/ModelPdo.php @@ -39,7 +39,7 @@ class Minz_ModelPdo { if ($currentUser === null) { $currentUser = Minz_Session::param('currentUser'); } - if (self::$useSharedBd && self::$sharedBd != null && + if (self::$useSharedBd && self::$sharedBd != null && ($currentUser == null || $currentUser === self::$sharedCurrentUser)) { $this->bd = self::$sharedBd; $this->prefix = self::$sharedPrefix; diff --git a/lib/Minz/PDOConnectionException.php b/lib/Minz/PDOConnectionException.php index faf2e0fe9..064748708 100644 --- a/lib/Minz/PDOConnectionException.php +++ b/lib/Minz/PDOConnectionException.php @@ -3,7 +3,7 @@ class Minz_PDOConnectionException extends Minz_Exception { public function __construct ($string_connection, $user, $code = self::ERROR) { $message = 'Access to database is denied for `' . $user . '`' . ' (`' . $string_connection . '`)'; - + parent::__construct ($message, $code); } } diff --git a/lib/Minz/Paginator.php b/lib/Minz/Paginator.php index 5858e76a5..795085a30 100644 --- a/lib/Minz/Paginator.php +++ b/lib/Minz/Paginator.php @@ -1,5 +1,5 @@ */ @@ -51,7 +51,7 @@ class Minz_Paginator { */ public function render ($view, $getteur) { $view = APP_PATH . '/views/helpers/'.$view; - + if (file_exists ($view)) { include ($view); } @@ -129,7 +129,7 @@ class Minz_Paginator { $begin = ($this->currentPage - 1) * $this->nbItemsPerPage; $counter = 0; $i = 0; - + foreach ($this->items as $key => $item) { if ($i >= $begin) { $array[$key] = $item; @@ -164,7 +164,7 @@ class Minz_Paginator { if (is_array ($items)) { $this->items = $items; } - + $this->_nbPage (); } public function _nbItemsPerPage ($nbItemsPerPage) { diff --git a/lib/Minz/Translate.php b/lib/Minz/Translate.php index baddcb424..d9cd59f7e 100644 --- a/lib/Minz/Translate.php +++ b/lib/Minz/Translate.php @@ -1,5 +1,5 @@ */ @@ -153,7 +153,7 @@ class Minz_Translate { * @param additional parameters for variable keys. * @return the value corresponding to the key. * If no value is found, return the key itself. - */ + */ public static function t($key) { $group = explode('.', $key); diff --git a/lib/Minz/View.php b/lib/Minz/View.php index 8c5230ab6..d6bf6ea2c 100644 --- a/lib/Minz/View.php +++ b/lib/Minz/View.php @@ -262,5 +262,3 @@ class Minz_View { } } } - - diff --git a/lib/favicons.php b/lib/favicons.php index 48f7c9fda..a7ed966a1 100644 --- a/lib/favicons.php +++ b/lib/favicons.php @@ -16,6 +16,7 @@ function isImgMime($content) { $isImage = strpos(finfo_buffer($fInfo, $content), 'image') !== false; finfo_close($fInfo); } catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; } return $isImage; } diff --git a/lib/lib_date.php b/lib/lib_date.php index 9533711e3..a3f7efb46 100644 --- a/lib/lib_date.php +++ b/lib/lib_date.php @@ -63,8 +63,7 @@ function _dateCeiling($isoDate) { } function _noDelimit($isoDate) { - return $isoDate === null || $isoDate === '' ? null : - str_replace(array('-', ':'), '', $isoDate); //FIXME: Bug with negative time zone + return $isoDate === null || $isoDate === '' ? null : str_replace(array('-', ':'), '', $isoDate); //FIXME: Bug with negative time zone } function _dateRelative($d1, $d2) { diff --git a/lib/lib_install.php b/lib/lib_install.php index cc0dc3128..7305d8e28 100644 --- a/lib/lib_install.php +++ b/lib/lib_install.php @@ -68,8 +68,7 @@ function checkRequirements($dbType = '') { 'http_referer' => $http_referer ? 'ok' : 'ko', 'message' => $message ?: 'ok', 'all' => $php && $minz && $curl && $pdo && $pcre && $ctype && $dom && $xml && - $data && $cache && $users && $favicons && $http_referer && $message == '' ? - 'ok' : 'ko' + $data && $cache && $users && $favicons && $http_referer && $message == '' ? 'ok' : 'ko' ); } diff --git a/lib/lib_rss.php b/lib/lib_rss.php index dcce8a02c..959cb064c 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -348,6 +348,7 @@ function get_user_configuration($username) { join_path(FRESHRSS_PATH, 'config-user.default.php')); } catch (Minz_ConfigurationNamespaceException $e) { // namespace already exists, do nothing. + Minz_Log::warning($e->getMessage()); } catch (Minz_FileNotExistException $e) { Minz_Log::warning($e->getMessage()); return null; @@ -366,6 +367,7 @@ function cryptAvailable() { $hash = '$2y$04$usesomesillystringfore7hnbRJHxXVLeakoG8K30oukPsA.ztMG'; return $hash === @crypt('password', $hash); } catch (Exception $e) { + Minz_Log::warning($e->getMessage()); } return false; } diff --git a/p/api/greader.php b/p/api/greader.php index 7f6f0b04f..e5275b3a3 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -94,7 +94,16 @@ function debugInfo() { } } global $ORIGINAL_INPUT; - return print_r(array('date' => date('c'), 'headers' => $ALL_HEADERS, '_SERVER' => $_SERVER, '_GET' => $_GET, '_POST' => $_POST, '_COOKIE' => $_COOKIE, 'INPUT' => $ORIGINAL_INPUT), true); + return print_r( + array( + 'date' => date('c'), + 'headers' => $ALL_HEADERS, + '_SERVER' => $_SERVER, + '_GET' => $_GET, + '_POST' => $_POST, + '_COOKIE' => $_COOKIE, + 'INPUT' => $ORIGINAL_INPUT + ), true); } function badRequest() { @@ -694,8 +703,8 @@ $pathInfo = empty($_SERVER['PATH_INFO']) ? '/Error' : urldecode($_SERVER['PATH_I $pathInfos = explode('/', $pathInfo); Minz_Configuration::register('system', - DATA_PATH . '/config.php', - FRESHRSS_PATH . '/config.default.php'); + DATA_PATH . '/config.php', + FRESHRSS_PATH . '/config.default.php'); FreshRSS_Context::$system_conf = Minz_Configuration::get('system'); if (!FreshRSS_Context::$system_conf->api_enabled) { serviceUnavailable(); @@ -715,24 +724,34 @@ Minz_Session::_param('currentUser', $user); if (count($pathInfos) < 3) { badRequest(); -} -elseif ($pathInfos[1] === 'accounts') { +} elseif ($pathInfos[1] === 'accounts') { if (($pathInfos[2] === 'ClientLogin') && isset($_REQUEST['Email']) && isset($_REQUEST['Passwd'])) { clientLogin($_REQUEST['Email'], $_REQUEST['Passwd']); } -} -elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfos[3]) && $pathInfos[3] === '0' && isset($pathInfos[4])) { +} elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfos[3]) && $pathInfos[3] === '0' && isset($pathInfos[4])) { if ($user == '') { unauthorized(); } $timestamp = isset($_GET['ck']) ? intval($_GET['ck']) : 0; //ck=[unix timestamp] : Use the current Unix time here, helps Google with caching. switch ($pathInfos[4]) { case 'stream': - $exclude_target = isset($_GET['xt']) ? $_GET['xt'] : ''; //xt=[exclude target] : Used to exclude certain items from the feed. For example, using xt=user/-/state/com.google/read will exclude items that the current user has marked as read, or xt=feed/[feedurl] will exclude items from a particular feed (obviously not useful in this request, but xt appears in other listing requests). + /* xt=[exclude target] : Used to exclude certain items from the feed. + * For example, using xt=user/-/state/com.google/read will exclude items + * that the current user has marked as read, or xt=feed/[feedurl] will + * exclude items from a particular feed (obviously not useful in this + * request, but xt appears in other listing requests). */ + $exclude_target = isset($_GET['xt']) ? $_GET['xt'] : ''; $count = isset($_GET['n']) ? intval($_GET['n']) : 20; //n=[integer] : The maximum number of results to return. $order = isset($_GET['r']) ? $_GET['r'] : 'd'; //r=[d|n|o] : Sort order of item results. d or n gives items in descending date order, o in ascending order. - $start_time = isset($_GET['ot']) ? intval($_GET['ot']) : 0; //ot=[unix timestamp] : The time from which you want to retrieve items. Only items that have been crawled by Google Reader after this time will be returned. - $continuation = isset($_GET['c']) ? $_GET['c'] : ''; //Continuation token. If a StreamContents response does not represent all items in a timestamp range, it will have a continuation attribute. The same request can be re-issued with the value of that attribute put in this parameter to get more items + /* ot=[unix timestamp] : The time from which you want to retrieve + * items. Only items that have been crawled by Google Reader after + * this time will be returned. */ + $start_time = isset($_GET['ot']) ? intval($_GET['ot']) : 0; + /* Continuation token. If a StreamContents response does not represent + * all items in a timestamp range, it will have a continuation attribute. + * The same request can be re-issued with the value of that attribute put + * in this parameter to get more items */ + $continuation = isset($_GET['c']) ? $_GET['c'] : ''; if (isset($pathInfos[5]) && $pathInfos[5] === 'contents' && isset($pathInfos[6])) { if (isset($pathInfos[7])) { if ($pathInfos[6] === 'feed') { @@ -757,7 +776,10 @@ elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfo } } elseif ($pathInfos[5] === 'items') { if ($pathInfos[6] === 'ids' && isset($_GET['s'])) { - $streamId = $_GET['s']; //StreamId for which to fetch the item IDs. The parameter may be repeated to fetch the item IDs from multiple streams at once (more efficient from a backend perspective than multiple requests). + /* StreamId for which to fetch the item IDs. The parameter may + * be repeated to fetch the item IDs from multiple streams at once + * (more efficient from a backend perspective than multiple requests). */ + $streamId = $_GET['s']; streamContentsItemsIds($streamId, $start_time, $count, $order, $exclude_target); } } @@ -779,8 +801,12 @@ elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfo break; case 'edit': if (isset($_POST['s']) && isset($_POST['ac'])) { - $streamNames = multiplePosts('s'); //StreamId to operate on. The parameter may be repeated to edit multiple subscriptions at once - $titles = multiplePosts('t'); //Title to use for the subscription. For the `subscribe` action, if not specified then the feed's current title will be used. Can be used with the `edit` action to rename a subscription + //StreamId to operate on. The parameter may be repeated to edit multiple subscriptions at once + $streamNames = multiplePosts('s'); + /* Title to use for the subscription. For the `subscribe` action, + * if not specified then the feed's current title will be used. Can + * be used with the `edit` action to rename a subscription */ + $titles = multiplePosts('t'); $action = $_POST['ac']; //Action to perform on the given StreamId. Possible values are `subscribe`, `unsubscribe` and `edit` $add = isset($_POST['a']) ? $_POST['a'] : ''; //StreamId to add the subscription to (generally a user label) $remove = isset($_POST['r']) ? $_POST['r'] : ''; //StreamId to remove the subscription from (generally a user label) diff --git a/p/api/index.php b/p/api/index.php index 580c90255..08f7b6b7b 100644 --- a/p/api/index.php +++ b/p/api/index.php @@ -22,7 +22,8 @@ echo Minz_Url::display('/api/greader.php', 'html', true); diff --git a/phpcs.xml b/phpcs.xml new file mode 100644 index 000000000..5743466ec --- /dev/null +++ b/phpcs.xml @@ -0,0 +1,100 @@ + + + Created with the PHP Coding Standard Generator. http://edorian.github.com/php-coding-standard-generator/ + + + ./static + ./vendor + ./lib/SimplePie/ + ./lib/http-conditional.php + ./lib/JSON.php + ./lib/lib_phpQuery.php + ./lib/password_compat.php + + + + + + + + + + + + + + + ./app/i18n/ + + ./app/install.php + + ./tests/app/ + + ./app/SQL/install.sql.mysql.php + ./app/SQL/install.sql.pgsql.php + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/app/Models/CategoryTest.php b/tests/app/Models/CategoryTest.php index 2fd153aee..a1edb17b6 100644 --- a/tests/app/Models/CategoryTest.php +++ b/tests/app/Models/CategoryTest.php @@ -20,12 +20,12 @@ class FreshRSS_CategoryTest extends PHPUnit\Framework\TestCase { public function provideValidNames() { return array( - array('', ''), - array('this string does not need trimming', 'this string does not need trimming'), - array(' this string needs trimming on left', 'this string needs trimming on left'), - array('this string needs trimming on right ', 'this string needs trimming on right'), - array(' this string needs trimming on both ends ', 'this string needs trimming on both ends'), - array(str_repeat('This string needs to be shortened because its length is way too long. ', 4), str_repeat('This string needs to be shortened because its length is way too long. ', 3) . 'This string needs to be shortened because its'), + array('', ''), + array('this string does not need trimming', 'this string does not need trimming'), + array(' this string needs trimming on left', 'this string needs trimming on left'), + array('this string needs trimming on right ', 'this string needs trimming on right'), + array(' this string needs trimming on both ends ', 'this string needs trimming on both ends'), + array(str_repeat('This string needs to be shortened because its length is way too long. ', 4), str_repeat('This string needs to be shortened because its length is way too long. ', 3) . 'This string needs to be shortened because its'), ); } diff --git a/tests/app/Models/SearchTest.php b/tests/app/Models/SearchTest.php index 4a7afc6f9..5c0469a48 100644 --- a/tests/app/Models/SearchTest.php +++ b/tests/app/Models/SearchTest.php @@ -28,8 +28,8 @@ class SearchTest extends PHPUnit\Framework\TestCase { */ public function provideEmptyInput() { return array( - array(''), - array(null), + array(''), + array(null), ); } @@ -50,22 +50,22 @@ class SearchTest extends PHPUnit\Framework\TestCase { */ public function provideIntitleSearch() { return array( - array('intitle:word1', array('word1'), null), - array('intitle:word1 word2', array('word1'), array('word2')), - array('intitle:"word1 word2"', array('word1 word2'), null), - array("intitle:'word1 word2'", array('word1 word2'), null), - array('word1 intitle:word2', array('word2'), array('word1')), - array('word1 intitle:word2 word3', array('word2'), array('word1', 'word3')), - array('word1 intitle:"word2 word3"', array('word2 word3'), array('word1')), - array("word1 intitle:'word2 word3'", array('word2 word3'), array('word1')), - array('intitle:word1 intitle:word2', array('word1', 'word2'), null), - array('intitle: word1 word2', array(), array('word1', 'word2')), - array('intitle:123', array('123'), null), - array('intitle:"word1 word2" word3"', array('word1 word2'), array('word3"')), - array("intitle:'word1 word2' word3'", array('word1 word2'), array("word3'")), - array('intitle:"word1 word2\' word3"', array("word1 word2' word3"), null), - array("intitle:'word1 word2\" word3'", array('word1 word2" word3'), null), - array("intitle:word1 'word2 word3' word4", array('word1'), array('word2 word3', 'word4')), + array('intitle:word1', array('word1'), null), + array('intitle:word1 word2', array('word1'), array('word2')), + array('intitle:"word1 word2"', array('word1 word2'), null), + array("intitle:'word1 word2'", array('word1 word2'), null), + array('word1 intitle:word2', array('word2'), array('word1')), + array('word1 intitle:word2 word3', array('word2'), array('word1', 'word3')), + array('word1 intitle:"word2 word3"', array('word2 word3'), array('word1')), + array("word1 intitle:'word2 word3'", array('word2 word3'), array('word1')), + array('intitle:word1 intitle:word2', array('word1', 'word2'), null), + array('intitle: word1 word2', array(), array('word1', 'word2')), + array('intitle:123', array('123'), null), + array('intitle:"word1 word2" word3"', array('word1 word2'), array('word3"')), + array("intitle:'word1 word2' word3'", array('word1 word2'), array("word3'")), + array('intitle:"word1 word2\' word3"', array("word1 word2' word3"), null), + array("intitle:'word1 word2\" word3'", array('word1 word2" word3'), null), + array("intitle:word1 'word2 word3' word4", array('word1'), array('word2 word3', 'word4')), ); } @@ -86,22 +86,22 @@ class SearchTest extends PHPUnit\Framework\TestCase { */ public function provideAuthorSearch() { return array( - array('author:word1', array('word1'), null), - array('author:word1 word2', array('word1'), array('word2')), - array('author:"word1 word2"', array('word1 word2'), null), - array("author:'word1 word2'", array('word1 word2'), null), - array('word1 author:word2', array('word2'), array('word1')), - array('word1 author:word2 word3', array('word2'), array('word1', 'word3')), - array('word1 author:"word2 word3"', array('word2 word3'), array('word1')), - array("word1 author:'word2 word3'", array('word2 word3'), array('word1')), - array('author:word1 author:word2', array('word1', 'word2'), null), - array('author: word1 word2', array(), array('word1', 'word2')), - array('author:123', array('123'), null), - array('author:"word1 word2" word3"', array('word1 word2'), array('word3"')), - array("author:'word1 word2' word3'", array('word1 word2'), array("word3'")), - array('author:"word1 word2\' word3"', array("word1 word2' word3"), null), - array("author:'word1 word2\" word3'", array('word1 word2" word3'), null), - array("author:word1 'word2 word3' word4", array('word1'), array('word2 word3', 'word4')), + array('author:word1', array('word1'), null), + array('author:word1 word2', array('word1'), array('word2')), + array('author:"word1 word2"', array('word1 word2'), null), + array("author:'word1 word2'", array('word1 word2'), null), + array('word1 author:word2', array('word2'), array('word1')), + array('word1 author:word2 word3', array('word2'), array('word1', 'word3')), + array('word1 author:"word2 word3"', array('word2 word3'), array('word1')), + array("word1 author:'word2 word3'", array('word2 word3'), array('word1')), + array('author:word1 author:word2', array('word1', 'word2'), null), + array('author: word1 word2', array(), array('word1', 'word2')), + array('author:123', array('123'), null), + array('author:"word1 word2" word3"', array('word1 word2'), array('word3"')), + array("author:'word1 word2' word3'", array('word1 word2'), array("word3'")), + array('author:"word1 word2\' word3"', array("word1 word2' word3"), null), + array("author:'word1 word2\" word3'", array('word1 word2" word3'), null), + array("author:word1 'word2 word3' word4", array('word1'), array('word2 word3', 'word4')), ); } @@ -122,13 +122,13 @@ class SearchTest extends PHPUnit\Framework\TestCase { */ public function provideInurlSearch() { return array( - array('inurl:word1', array('word1'), null), - array('inurl: word1', array(), array('word1')), - array('inurl:123', array('123'), null), - array('inurl:word1 word2', array('word1'), array('word2')), - array('inurl:"word1 word2"', array('"word1'), array('word2"')), - array('inurl:word1 word2 inurl:word3', array('word1', 'word3'), array('word2')), - array("inurl:word1 'word2 word3' word4", array('word1'), array('word2 word3', 'word4')), + array('inurl:word1', array('word1'), null), + array('inurl: word1', array(), array('word1')), + array('inurl:123', array('123'), null), + array('inurl:word1 word2', array('word1'), array('word2')), + array('inurl:"word1 word2"', array('"word1'), array('word2"')), + array('inurl:word1 word2 inurl:word3', array('word1', 'word3'), array('word2')), + array("inurl:word1 'word2 word3' word4", array('word1'), array('word2 word3', 'word4')), ); } @@ -149,12 +149,12 @@ class SearchTest extends PHPUnit\Framework\TestCase { */ public function provideDateSearch() { return array( - array('date:2007-03-01T13:00:00Z/2008-05-11T15:30:00Z', '1172754000', '1210519800'), - array('date:2007-03-01T13:00:00Z/P1Y2M10DT2H30M', '1172754000', '1210516199'), - array('date:P1Y2M10DT2H30M/2008-05-11T15:30:00Z', '1172757601', '1210519800'), - array('date:2007-03-01/2008-05-11', strtotime('2007-03-01'), strtotime('2008-05-12') - 1), - array('date:2007-03-01/', strtotime('2007-03-01'), ''), - array('date:/2008-05-11', '', strtotime('2008-05-12') - 1), + array('date:2007-03-01T13:00:00Z/2008-05-11T15:30:00Z', '1172754000', '1210519800'), + array('date:2007-03-01T13:00:00Z/P1Y2M10DT2H30M', '1172754000', '1210516199'), + array('date:P1Y2M10DT2H30M/2008-05-11T15:30:00Z', '1172757601', '1210519800'), + array('date:2007-03-01/2008-05-11', strtotime('2007-03-01'), strtotime('2008-05-12') - 1), + array('date:2007-03-01/', strtotime('2007-03-01'), ''), + array('date:/2008-05-11', '', strtotime('2008-05-12') - 1), ); } @@ -175,12 +175,12 @@ class SearchTest extends PHPUnit\Framework\TestCase { */ public function providePubdateSearch() { return array( - array('pubdate:2007-03-01T13:00:00Z/2008-05-11T15:30:00Z', '1172754000', '1210519800'), - array('pubdate:2007-03-01T13:00:00Z/P1Y2M10DT2H30M', '1172754000', '1210516199'), - array('pubdate:P1Y2M10DT2H30M/2008-05-11T15:30:00Z', '1172757601', '1210519800'), - array('pubdate:2007-03-01/2008-05-11', strtotime('2007-03-01'), strtotime('2008-05-12') - 1), - array('pubdate:2007-03-01/', strtotime('2007-03-01'), ''), - array('pubdate:/2008-05-11', '', strtotime('2008-05-12') - 1), + array('pubdate:2007-03-01T13:00:00Z/2008-05-11T15:30:00Z', '1172754000', '1210519800'), + array('pubdate:2007-03-01T13:00:00Z/P1Y2M10DT2H30M', '1172754000', '1210516199'), + array('pubdate:P1Y2M10DT2H30M/2008-05-11T15:30:00Z', '1172757601', '1210519800'), + array('pubdate:2007-03-01/2008-05-11', strtotime('2007-03-01'), strtotime('2008-05-12') - 1), + array('pubdate:2007-03-01/', strtotime('2007-03-01'), ''), + array('pubdate:/2008-05-11', '', strtotime('2008-05-12') - 1), ); } @@ -201,13 +201,13 @@ class SearchTest extends PHPUnit\Framework\TestCase { */ public function provideTagsSearch() { return array( - array('#word1', array('word1'), null), - array('# word1', array(), array('#', 'word1')), - array('#123', array('123'), null), - array('#word1 word2', array('word1'), array('word2')), - array('#"word1 word2"', array('"word1'), array('word2"')), - array('#word1 #word2', array('word1', 'word2'), null), - array("#word1 'word2 word3' word4", array('word1'), array('word2 word3', 'word4')), + array('#word1', array('word1'), null), + array('# word1', array(), array('#', 'word1')), + array('#123', array('123'), null), + array('#word1 word2', array('word1'), array('word2')), + array('#"word1 word2"', array('"word1'), array('word2"')), + array('#word1 #word2', array('word1', 'word2'), null), + array("#word1 'word2 word3' word4", array('word1'), array('word2 word3', 'word4')), ); } @@ -240,54 +240,54 @@ class SearchTest extends PHPUnit\Framework\TestCase { public function provideMultipleSearch() { return array( - array( - 'author:word1 date:2007-03-01/2008-05-11 intitle:word2 inurl:word3 pubdate:2007-03-01/2008-05-11 #word4 #word5', - array('word1'), - strtotime('2007-03-01'), - strtotime('2008-05-12') - 1, - array('word2'), - array('word3'), - strtotime('2007-03-01'), - strtotime('2008-05-12') - 1, - array('word4', 'word5'), - null, - ), - array( - 'word6 intitle:word2 inurl:word3 pubdate:2007-03-01/2008-05-11 #word4 author:word1 #word5 date:2007-03-01/2008-05-11', - array('word1'), - strtotime('2007-03-01'), - strtotime('2008-05-12') - 1, - array('word2'), - array('word3'), - strtotime('2007-03-01'), - strtotime('2008-05-12') - 1, - array('word4', 'word5'), - array('word6'), - ), - array( - 'word6 intitle:word2 inurl:word3 pubdate:2007-03-01/2008-05-11 #word4 author:word1 #word5 word7 date:2007-03-01/2008-05-11', - array('word1'), - strtotime('2007-03-01'), - strtotime('2008-05-12') - 1, - array('word2'), - array('word3'), - strtotime('2007-03-01'), - strtotime('2008-05-12') - 1, - array('word4', 'word5'), - array('word6', 'word7'), - ), - array( - 'word6 intitle:word2 inurl:word3 pubdate:2007-03-01/2008-05-11 #word4 author:word1 #word5 "word7 word8" date:2007-03-01/2008-05-11', - array('word1'), - strtotime('2007-03-01'), - strtotime('2008-05-12') - 1, - array('word2'), - array('word3'), - strtotime('2007-03-01'), - strtotime('2008-05-12') - 1, - array('word4', 'word5'), - array('word7 word8', 'word6'), - ), + array( + 'author:word1 date:2007-03-01/2008-05-11 intitle:word2 inurl:word3 pubdate:2007-03-01/2008-05-11 #word4 #word5', + array('word1'), + strtotime('2007-03-01'), + strtotime('2008-05-12') - 1, + array('word2'), + array('word3'), + strtotime('2007-03-01'), + strtotime('2008-05-12') - 1, + array('word4', 'word5'), + null, + ), + array( + 'word6 intitle:word2 inurl:word3 pubdate:2007-03-01/2008-05-11 #word4 author:word1 #word5 date:2007-03-01/2008-05-11', + array('word1'), + strtotime('2007-03-01'), + strtotime('2008-05-12') - 1, + array('word2'), + array('word3'), + strtotime('2007-03-01'), + strtotime('2008-05-12') - 1, + array('word4', 'word5'), + array('word6'), + ), + array( + 'word6 intitle:word2 inurl:word3 pubdate:2007-03-01/2008-05-11 #word4 author:word1 #word5 word7 date:2007-03-01/2008-05-11', + array('word1'), + strtotime('2007-03-01'), + strtotime('2008-05-12') - 1, + array('word2'), + array('word3'), + strtotime('2007-03-01'), + strtotime('2008-05-12') - 1, + array('word4', 'word5'), + array('word6', 'word7'), + ), + array( + 'word6 intitle:word2 inurl:word3 pubdate:2007-03-01/2008-05-11 #word4 author:word1 #word5 "word7 word8" date:2007-03-01/2008-05-11', + array('word1'), + strtotime('2007-03-01'), + strtotime('2008-05-12') - 1, + array('word2'), + array('word3'), + strtotime('2007-03-01'), + strtotime('2008-05-12') - 1, + array('word4', 'word5'), + array('word7 word8', 'word6'), + ), ); } diff --git a/tests/app/Models/UserQueryTest.php b/tests/app/Models/UserQueryTest.php index 5c12a12fc..1959fd492 100644 --- a/tests/app/Models/UserQueryTest.php +++ b/tests/app/Models/UserQueryTest.php @@ -33,14 +33,14 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { $category_name = 'some category name'; $cat = $this->getMock('FreshRSS_Category'); $cat->expects($this->atLeastOnce()) - ->method('name') - ->withAnyParameters() - ->willReturn($category_name); + ->method('name') + ->withAnyParameters() + ->willReturn($category_name); $cat_dao = $this->getMock('FreshRSS_Searchable'); $cat_dao->expects($this->atLeastOnce()) - ->method('searchById') - ->withAnyParameters() - ->willReturn($cat); + ->method('searchById') + ->withAnyParameters() + ->willReturn($cat); $query = array('get' => 'c_1'); $user_query = new FreshRSS_UserQuery($query, null, $cat_dao); $this->assertEquals($category_name, $user_query->getGetName()); @@ -61,14 +61,14 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { $feed_name = 'some feed name'; $feed = $this->getMock('FreshRSS_Feed', array(), array('', false)); $feed->expects($this->atLeastOnce()) - ->method('name') - ->withAnyParameters() - ->willReturn($feed_name); + ->method('name') + ->withAnyParameters() + ->willReturn($feed_name); $feed_dao = $this->getMock('FreshRSS_Searchable'); $feed_dao->expects($this->atLeastOnce()) - ->method('searchById') - ->withAnyParameters() - ->willReturn($feed); + ->method('searchById') + ->withAnyParameters() + ->willReturn($feed); $query = array('get' => 'f_1'); $user_query = new FreshRSS_UserQuery($query, $feed_dao, null); $this->assertEquals($feed_name, $user_query->getGetName()); @@ -118,12 +118,12 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { public function testToArray_whenData_returnsArray() { $query = array( - 'get' => 's', - 'name' => 'some name', - 'order' => 'some order', - 'search' => 'some search', - 'state' => 'some state', - 'url' => 'some url', + 'get' => 's', + 'name' => 'some name', + 'order' => 'some order', + 'search' => 'some search', + 'state' => 'some state', + 'url' => 'some url', ); $user_query = new FreshRSS_UserQuery($query); $this->assertInternalType('array', $user_query->toArray()); @@ -133,7 +133,7 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { public function testHasSearch_whenSearch_returnsTrue() { $query = array( - 'search' => 'some search', + 'search' => 'some search', ); $user_query = new FreshRSS_UserQuery($query); $this->assertTrue($user_query->hasSearch()); @@ -166,9 +166,9 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { $cat = $this->getMock('FreshRSS_Category'); $cat_dao = $this->getMock('FreshRSS_Searchable'); $cat_dao->expects($this->atLeastOnce()) - ->method('searchById') - ->withAnyParameters() - ->willReturn($cat); + ->method('searchById') + ->withAnyParameters() + ->willReturn($cat); $query = array('get' => 'c_1'); $user_query = new FreshRSS_UserQuery($query, null, $cat_dao); $this->assertFalse($user_query->isDeprecated()); @@ -177,9 +177,9 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { public function testIsDeprecated_whenCategoryDoesNotExist_returnTrue() { $cat_dao = $this->getMock('FreshRSS_Searchable'); $cat_dao->expects($this->atLeastOnce()) - ->method('searchById') - ->withAnyParameters() - ->willReturn(null); + ->method('searchById') + ->withAnyParameters() + ->willReturn(null); $query = array('get' => 'c_1'); $user_query = new FreshRSS_UserQuery($query, null, $cat_dao); $this->assertTrue($user_query->isDeprecated()); @@ -189,9 +189,9 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { $feed = $this->getMock('FreshRSS_Feed', array(), array('', false)); $feed_dao = $this->getMock('FreshRSS_Searchable'); $feed_dao->expects($this->atLeastOnce()) - ->method('searchById') - ->withAnyParameters() - ->willReturn($feed); + ->method('searchById') + ->withAnyParameters() + ->willReturn($feed); $query = array('get' => 'f_1'); $user_query = new FreshRSS_UserQuery($query, $feed_dao, null); $this->assertFalse($user_query->isDeprecated()); @@ -200,9 +200,9 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { public function testIsDeprecated_whenFeedDoesNotExist_returnTrue() { $feed_dao = $this->getMock('FreshRSS_Searchable'); $feed_dao->expects($this->atLeastOnce()) - ->method('searchById') - ->withAnyParameters() - ->willReturn(null); + ->method('searchById') + ->withAnyParameters() + ->willReturn(null); $query = array('get' => 'f_1'); $user_query = new FreshRSS_UserQuery($query, $feed_dao, null); $this->assertTrue($user_query->isDeprecated()); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 24340b15c..896929649 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -4,4 +4,4 @@ error_reporting(E_ALL); ini_set('display_errors', 1); require('../constants.php'); -require(LIB_PATH . '/lib_rss.php'); //Includes class autoloader \ No newline at end of file +require(LIB_PATH . '/lib_rss.php'); //Includes class autoloader -- cgit v1.2.3 From 2b11cbfe2c65c0f8485e105c0874c945d7c5f77e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 22 Sep 2017 12:39:29 +0200 Subject: Changelog 1616 and 1619 https://github.com/FreshRSS/FreshRSS/pull/1619 https://github.com/FreshRSS/FreshRSS/pull/1616 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb50fe253..3dd665a2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * UI * New page for subscription tools [#1534](https://github.com/FreshRSS/FreshRSS/issues/1354) * Adjustments to the padding of the tree of categories and feeds [1589](https://github.com/FreshRSS/FreshRSS/pull/1589) + * Fix feed column position after lazy-loading images [#1616](https://github.com/FreshRSS/FreshRSS/pull/1616) * CLI * New command `./cli/update-user` to update user settings [#1600](https://github.com/FreshRSS/FreshRSS/issues/1600) * I18n @@ -18,6 +19,7 @@ * Fix PostgreSQL error when adding entries with duplicated GUID [#1610](https://github.com/FreshRSS/FreshRSS/issues/1610) * Fix for RSS feeds containing HTML in author field [#1590](https://github.com/FreshRSS/FreshRSS/issues/1590) * Misc. + * Travis continuous integration [#1619](https://github.com/FreshRSS/FreshRSS/pull/1619) * Allow longer database usernames [#1597](https://github.com/FreshRSS/FreshRSS/issues/1597) -- cgit v1.2.3 From 2e8d8834c4045aae03c5a9e58ab937a6a4507326 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 22 Sep 2017 13:05:42 +0200 Subject: Quick fix small bug from 1619 (#1633) https://github.com/FreshRSS/FreshRSS/pull/1619 --- app/Models/Feed.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 88ff9bf18..002be711a 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -485,12 +485,12 @@ class FreshRSS_Feed extends Minz_Model { CURLOPT_FOLLOWLOCATION => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => 'FreshRSS/' . FRESHRSS_VERSION . ' (' . PHP_OS . '; ' . FRESHRSS_WEBSITE . ')', - CURLOPT_POSTFIELDS => http_build_query( + CURLOPT_POSTFIELDS => http_build_query(array( 'hub.verify' => 'sync', 'hub.mode' => ($state ? 'subscribe' : 'unsubscribe'), 'hub.topic' => urlencode($url), 'hub.callback' => urlencode($callbackUrl), - ) + )) ) ); $response = curl_exec($ch); -- cgit v1.2.3 From cb5d6997a34b9489282275af6d325e14b7a1d192 Mon Sep 17 00:00:00 2001 From: Ramón Cutanda Date: Fri, 22 Sep 2017 07:41:59 -0600 Subject: Spanish language (#1631) Based on the informal style spoken in Spain --- app/i18n/es/admin.php | 181 +++++++++++++++++++++++++++++++++++++++++++++ app/i18n/es/conf.php | 174 ++++++++++++++++++++++++++++++++++++++++++++ app/i18n/es/feedback.php | 109 +++++++++++++++++++++++++++ app/i18n/es/gen.php | 186 +++++++++++++++++++++++++++++++++++++++++++++++ app/i18n/es/index.php | 61 ++++++++++++++++ app/i18n/es/install.php | 119 ++++++++++++++++++++++++++++++ app/i18n/es/sub.php | 62 ++++++++++++++++ 7 files changed, 892 insertions(+) create mode 100755 app/i18n/es/admin.php create mode 100755 app/i18n/es/conf.php create mode 100755 app/i18n/es/feedback.php create mode 100755 app/i18n/es/gen.php create mode 100755 app/i18n/es/index.php create mode 100755 app/i18n/es/install.php create mode 100755 app/i18n/es/sub.php diff --git a/app/i18n/es/admin.php b/app/i18n/es/admin.php new file mode 100755 index 000000000..c9d9368eb --- /dev/null +++ b/app/i18n/es/admin.php @@ -0,0 +1,181 @@ + array( + 'allow_anonymous' => 'Permitir la lectura anónima de los artículos del usuario por defecto (%s)', + 'allow_anonymous_refresh' => 'Permitir la actualización anónima de los artículos', + 'api_enabled' => 'Concederle acceso a la API (necesario para apps de móvil)', + 'form' => 'Formulario Web (el más habitual, requiere JavaScript)', + 'http' => 'HTTP (para usuarios avanzados con HTTPS)', + 'none' => 'Ninguno (peligroso)', + 'title' => 'Identificación', + 'title_reset' => 'Reinicio de la identificación', + 'token' => 'Clave de identificación', + 'token_help' => 'Permite el acceso a la salida RSS del usuario por defecto sin necesidad de identificación:', + 'type' => 'Método de identificación', + 'unsafe_autologin' => 'Permite la identificación automática insegura usando el formato: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Comprueba los permisos en el directorio ./data/cache . El servidor HTTP debe contar con permiso de escritura', + 'ok' => 'Los permisos en el cache son correctos.', + ), + 'categories' => array( + 'nok' => 'La tabla Categorías está configurada de forma incorrecta.', + 'ok' => 'La tabla Categorías está correcta.', + ), + 'connection' => array( + 'nok' => 'No se pudo establecer una conexión con la base de datos.', + 'ok' => 'La conexión con la base de datos es correcta.', + ), + 'ctype' => array( + 'nok' => 'No se puedo encontrar la librería necesaria para compropbar el tipo de caracteres (php-ctype).', + 'ok' => 'Dispones de la librería necesaria para la verificación del tipo de caracteres (ctype).', + ), + 'curl' => array( + 'nok' => 'No se pudo encontrar la librería cURL (paquete php-curl).', + 'ok' => 'Dispones de la librería cURL.', + ), + 'data' => array( + 'nok' => 'Comprueba los permisos en el directorio ./data. El servidor HTTP debe contar con permisos de escritura.', + 'ok' => 'Los permisos en el directorio data son correctos.', + ), + 'database' => 'Instalación de la base de datos', + 'dom' => array( + 'nok' => 'No se ha podido localizar la librería necesaria para explorar el DOM (paquete php-xml).', + 'ok' => 'Dispones de la librería necesaria para explorar el DOM.', + ), + 'entries' => array( + 'nok' => 'La tabla de entrada no está configurada correctamente.', + 'ok' => 'La tabla de entrada está correcta.', + ), + 'favicons' => array( + 'nok' => 'Comprueba los permisos en el directorio ./data/favicons. El servidor HTTP debe contar con permisos de escritura.', + 'ok' => 'Los permisos en el directorio favicons son correctos.', + ), + 'feeds' => array( + 'nok' => 'La tabla Feed está configurada de forma incorrecta.', + 'ok' => 'La tabla Feed está correcta.', + ), + 'fileinfo' => array( + 'nok' => 'No se ha podido localizar la librería PHP fileinfo (paquete fileinfo).', + 'ok' => 'Dispones de la librería fileinfo.', + ), + 'files' => 'Instalación de Archivos', + 'json' => array( + 'nok' => 'No se ha podido localizar JSON (paquete php5-json).', + 'ok' => 'Dispones de la extensión JSON.', + ), + 'minz' => array( + 'nok' => 'No se ha podido localizar el entorno Minz.', + 'ok' => 'Dispones del entorno Minz.', + ), + 'pcre' => array( + 'nok' => 'No se ha podido localizar la librería para las expresiones regulares (php-pcre).', + 'ok' => 'Dispones de la librería necesaria para expresiones regulares (PCRE).', + ), + 'pdo' => array( + 'nok' => 'No se ha podido localiar PDO o uno de los controladores compatibles (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'Dispones de PDO y, al menos, de uno de los controladores compatibles (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + '_' => 'Instalación PHP', + 'nok' => 'Dispones de la versión PHP %s pero FreshRSS requiere de, al menos, la versión %s.', + 'ok' => 'Dispones de la versión PHP %s, que es compatible con FreshRSS.', + ), + 'tables' => array( + 'nok' => 'Falta al menos una tabla en la base de datos.', + 'ok' => 'Todas las tablas necesarias están disponibles en la base de datos.', + ), + 'title' => 'Verificación de instalación', + 'tokens' => array( + 'nok' => 'Comprueba los permisos en el directorio ./data/tokens. El servidor HTTP debe contar con permisos de escritura.', + 'ok' => 'Los permisos en el directorio de tokens de identificación son correctos.', + ), + 'users' => array( + 'nok' => 'Comprueba los permisos en el directorio ./data/users. El servidor HTTP debe contar con permisos de escritura.', + 'ok' => 'Los permisos en el directorio users son correctos.', + ), + 'zip' => array( + 'nok' => 'No se ha podido localizar la extensión ZIP (paquete php-zip).', + 'ok' => 'Dispones de la extensión ZIP.', + ), + ), + 'extensions' => array( + 'disabled' => 'Desactivado', + 'empty_list' => 'No hay extensiones instaladas', + 'enabled' => 'Activado', + 'no_configure_view' => 'Esta extensión no puede ser configurada.', + 'system' => array( + '_' => 'Sistema de extensiones', + 'no_rights' => 'Sistema de extensiones (careces de los permisos necesarios)', + ), + 'title' => 'Extensiones', + 'user' => 'Extensiones de usuario', + ), + 'stats' => array( + '_' => 'Estadísticas', + 'all_feeds' => 'Todas las fuentes', + 'category' => 'Categoría', + 'entry_count' => 'Cómputo total', + 'entry_per_category' => 'Entradas por categoría', + 'entry_per_day' => 'Entradas por día (últimos 30 días)', + 'entry_per_day_of_week' => 'Por día de la semana (mnedia: %.2f mensajes)', + 'entry_per_hour' => 'Por hora (media: %.2f mensajes)', + 'entry_per_month' => 'Por mes (media: %.2f mensajes)', + 'entry_repartition' => 'Reparto de entradas', + 'feed' => 'Fuente', + 'feed_per_category' => 'Fuentes por categoría', + 'idle' => 'Fuentes inactivas', + 'main' => 'Estadísticas principales', + 'main_stream' => 'Salida principal', + 'menu' => array( + 'idle' => 'Fuentes inactivas', + 'main' => 'Estadísticas principañes', + 'repartition' => 'Reparto de artículos', + ), + 'no_idle' => 'No hay fuentes inactivas', + 'number_entries' => '%d artículos', + 'percent_of_total' => '%% del total', + 'repartition' => 'Reprto de artículos', + 'status_favorites' => 'Favoritos', + 'status_read' => 'Leídos', + 'status_total' => 'Total', + 'status_unread' => 'Pendientes', + 'title' => 'Estadísticas', + 'top_feed' => 'Las 10 fuentes más activas', + ), + 'system' => array( + '_' => 'Configuración del sistema', + 'auto-update-url' => 'URL de auto-actualización', + 'instance-name' => 'Nombre de la fuente', + 'max-categories' => 'Límite de categorías por usuario', + 'max-feeds' => 'Límite de fuentes por usuario', + 'registration' => array( + 'help' => '0 significa que no hay límite en la cuenta', + 'number' => 'Número máximo de cuentas', + ), + ), + 'update' => array( + '_' => 'Actualizar sistema', + 'apply' => 'Aplicar', + 'check' => 'Buscar actualizaciones', + 'current_version' => 'Dispones de la versión %s de FreshRSS.', + 'last' => 'Última comprobación: %s', + 'none' => 'No hay actualizaciones disponibles', + 'title' => 'Actualizar sistema', + ), + 'user' => array( + 'articles_and_size' => '%s articles (%s)', + 'create' => 'Crear nuevo usuario', + 'language' => 'Idioma', + 'number' => 'Hay %d cuenta creada', + 'numbers' => 'Hay %d cuentas creadas', + 'password_form' => 'Contraseña
    (para el método de identificación por formulario web)', + 'password_format' => 'Mínimo de 7 caracteres', + 'title' => 'Administrar usuarios', + 'user_list' => 'Lista de usuarios', + 'username' => 'Nombre de usuario', + 'users' => 'Usuarios', + ), +); diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php new file mode 100755 index 000000000..1ccd76b2e --- /dev/null +++ b/app/i18n/es/conf.php @@ -0,0 +1,174 @@ + array( + '_' => 'Archivo', + 'advanced' => 'Avanzado', + 'delete_after' => 'Eliminar artículos tras', + 'help' => 'Hay más opciones disponibles en los ajustes de la fuente', + 'keep_history_by_feed' => 'Número mínimo de artículos a conservar por fuente', + 'optimize' => 'Optimizar la base de datos', + 'optimize_help' => 'Ejecuta la optimización de vez en cuando para reducir el tamaño de la base de datos', + 'purge_now' => 'Limpiar ahora', + 'title' => 'Archivo', + 'ttl' => 'No actualizar automáticamente más de', + ), + 'display' => array( + '_' => 'Visualización', + 'icon' => array( + 'bottom_line' => 'Línea inferior', + 'entry' => 'Iconos de artículos', + 'publication_date' => 'Fecha de publicación', + 'related_tags' => 'Etiquetas relacionadas', + 'sharing' => 'Compartir', + 'top_line' => 'Línea superior', + ), + 'language' => 'Idioma', + 'notif_html5' => array( + 'seconds' => 'segundos (0 significa sin límite de espera)', + 'timeout' => 'Notificación de fin de espera HTML5', + ), + 'theme' => 'Tema', + 'title' => 'Visualización', + 'width' => array( + 'content' => 'Ancho de contenido', + 'large' => 'Grande', + 'medium' => 'Mediano', + 'no_limit' => 'Sin límite', + 'thin' => 'Estrecho', + ), + ), + 'query' => array( + '_' => 'Consultas de usuario', + 'deprecated' => 'Esta consulta ya no es válida. La categoría referenciada o fuente ha sido eliminada.', + 'filter' => 'Filtro aplicado:', + 'get_all' => 'Mostrar todos los artículos', + 'get_category' => 'Mostrar la categoría "%s"', + 'get_favorite' => 'Mostrar artículos favoritos', + 'get_feed' => 'Mostrar fuente "%s"', + 'no_filter' => 'Sin filtro', + 'none' => 'Todavía no has creado ninguna consulta de usuario.', + 'number' => 'Consulta n° %d', + 'order_asc' => 'Mostrar primero los artículos más antiguos', + 'order_desc' => 'Mostrar primero los artículos más recientes', + 'search' => 'Buscar "%s"', + 'state_0' => 'Mostrar todos los artículos', + 'state_1' => 'Mostrar artículos leídos', + 'state_2' => 'Mostrar artículos pendientes', + 'state_3' => 'Mostrar todos los artículos', + 'state_4' => 'Mostrar artículos favoritos', + 'state_5' => 'Mostrar artículos favoritos leídos', + 'state_6' => 'Mostrar artículos favoritos pendientes', + 'state_7' => 'Mostrar artículos favoritos', + 'state_8' => 'Mostrar artículos no favoritos', + 'state_9' => 'Mostrar artículos no favoritos leídos', + 'state_10' => 'Mostrar artículos no favoritos pendientes', + 'state_11' => 'Mostrar artículos no favoritos', + 'state_12' => 'Mostrar todos los artículos', + 'state_13' => 'Mostrar artículos leídos', + 'state_14' => 'Mostrar artículos sin leer', + 'state_15' => 'Mostrar todos los artículos', + 'title' => 'Consultas de usuario', + ), + 'profile' => array( + '_' => 'Administración de perfiles', + 'delete' => array( + '_' => 'Borrar cuenta', + 'warn' => 'Tu cuenta y todos los datos asociados serán eliminados.', + ), + 'password_api' => 'Contraseña API
    (para apps móviles, por ej.)', + 'password_form' => 'Contraseña
    (para el método de identificación por formulario web)', + 'password_format' => 'Mínimo de 7 caracteres', + 'title' => 'Perfil', + ), + 'reading' => array( + '_' => 'Lectura', + 'after_onread' => 'Tras “marcar todo como leído”,', + 'articles_per_page' => 'Número de artículos por página', + 'auto_load_more' => 'Cargar más artículos al final de la página', + 'auto_remove_article' => 'Ocultar artículos tras la lectura', + 'mark_updated_article_unread' => 'Marcar artículos actualizados como no leídos', + 'confirm_enabled' => 'Mostrar ventana de confirmación al usar la función “marcar todos como leídos”', + 'display_articles_unfolded' => 'Mostrar los artículos sin expandir por defecto', + 'display_categories_unfolded' => 'Mostrar categorías expandidas por defecto', + 'hide_read_feeds' => 'Ocultar categorías & fuentes sin artículos no leídos (no funciona con la configuración "Mostrar todos los artículos")', + 'img_with_lazyload' => 'Usar el modo de "carga perezosa" para las imágenes', + 'sides_close_article' => 'Pinchar fuera del área de texto del artículo lo cerrará', + 'jump_next' => 'saltar al siguiente archivo sin leer emparentado (fuente o categoría)', + 'number_divided_when_reader' => 'Dividido en 2 en la vista de lectura.', + 'read' => array( + 'article_open_on_website' => 'cuando el artículo se abra en su web original', + 'article_viewed' => 'cuando se muestre el artículo', + 'scroll' => 'durante el desplazamiento', + 'upon_reception' => 'al recibir el artículo', + 'when' => 'Marcar el artículo como leído…', + ), + 'show' => array( + '_' => 'Artículos a mostrar', + 'adaptive' => 'Ajustar la visualización', + 'all_articles' => 'Mostrar todos los artículos', + 'unread' => 'Mostrar solo pendientes', + ), + 'sort' => array( + '_' => 'Orden', + 'newer_first' => 'Nuevos primero', + 'older_first' => 'Antiguos primero', + ), + 'sticky_post' => 'Pegar el artículo a la parte superior al abrirlo', + 'title' => 'Lectura', + 'view' => array( + 'default' => 'Vista por defecto', + 'global' => 'Vista Global', + 'normal' => 'Vista Normal', + 'reader' => 'Vista de Lectura', + ), + ), + 'sharing' => array( + '_' => 'Compartir', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'more_information' => 'Más información', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'share_name' => 'Compartir nombre a mostrar', + 'share_url' => 'Compatir URL a usar', + 'title' => 'Compartir', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'shortcut' => array( + '_' => 'Atajos de teclado', + 'article_action' => 'Acciones de artículo', + 'auto_share' => 'Compartir', + 'auto_share_help' => 'Si solo hay un modo para compartir, ese será el que se use. En caso contrario los modos quedarán accesibles por su numeración.', + 'close_dropdown' => 'Cerrar menús', + 'collapse_article' => 'Contraer', + 'first_article' => 'Saltar al primer artículo', + 'focus_search' => 'Acceso a la casilla de búsqueda', + 'help' => 'Mostrar documentación', + 'javascript' => 'JavaScript debe estar activado para poder usar atajos de teclado', + 'last_article' => 'Saltar al último artículo', + 'load_more' => 'Cargar más artículos', + 'mark_read' => 'Marcar como leído', + 'mark_favorite' => 'Marcar como favorito', + 'navigation' => 'Navegación', + 'navigation_help' => 'Con el modificador "Mayúsculas" es posible usar los atajos de teclado en las fuentes.
    Con el modificador "Alt" es posible aplicar los atajos de teclado en las categorías.', + 'next_article' => 'Saltar al siguiente artículo', + 'other_action' => 'Otras acciones', + 'previous_article' => 'Saltar al artículo anterior', + 'see_on_website' => 'Ver en la web original', + 'shift_for_all_read' => '+ mayúsculas para marcar todos los artículos como leídos', + 'title' => 'Atajos de teclado', + 'user_filter' => 'Acceso a filtros de usuario', + 'user_filter_help' => 'Si solo hay un filtro de usuario, ese será el que se use. En caso contrario, los filtros están accesibles por su númeración.', + ), + 'user' => array( + 'articles_and_size' => '%s artículos (%s)', + 'current' => 'Usuario actual', + 'is_admin' => 'es administrador', + 'users' => 'Usuarios', + ), +); diff --git a/app/i18n/es/feedback.php b/app/i18n/es/feedback.php new file mode 100755 index 000000000..136e70179 --- /dev/null +++ b/app/i18n/es/feedback.php @@ -0,0 +1,109 @@ + array( + 'optimization_complete' => 'Optimimización completada', + ), + 'access' => array( + 'denied' => 'No dispones de permiso para acceder a esta página', + 'not_found' => 'La página que buscas no existe', + ), + 'auth' => array( + 'form' => array( + 'not_set' => 'Hubo un problema durante la configuración del sistema de idenfificación. Por favor, inténtalo más tarde.', + 'set' => 'El formulario será desde ahora tu sistema de identificación por defecto.', + ), + 'login' => array( + 'invalid' => 'Identificación incorrecta', + 'success' => 'Conexión', + ), + 'logout' => array( + 'success' => 'Desconexión', + ), + 'no_password_set' => 'Esta opción no está disponible porque no se ha definido una contraseña de administrador.', + ), + 'conf' => array( + 'error' => 'Hubo un error durante el guardado de la configuración.', + 'query_created' => 'Se ha creado la petición "%s".', + 'shortcuts_updated' => 'Se han actualizado los atajos de teclado', + 'updated' => 'Se ha actualizado la configuración', + ), + 'extensions' => array( + 'already_enabled' => '%s ya está activado', + 'disable' => array( + 'ko' => '%s no se puede desactivar. Revisa el registro de FressRSS para más información.', + 'ok' => '%s ha quedado desactivado', + ), + 'enable' => array( + 'ko' => '%s no se puede activar. Revisa el registro de FressRSS para más información.', + 'ok' => '%s ha quedado activado', + ), + 'no_access' => 'No tienes acceso a %s', + 'not_enabled' => '%s no está activado', + 'not_found' => '%s no existe', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'La extensión ZIP no está disponible en tu servidor. Por favor, exporta estos archivos uno a uno.', + 'feeds_imported' => 'Se han importado tus fuentes y quedarán actualizadas', + 'feeds_imported_with_errors' => 'Se importaron tus fuentes; pero hubo algunos errores', + 'file_cannot_be_uploaded' => 'No es posible enviar el archivo', + 'no_zip_extension' => 'La extensión ZIP no está disponible en tu servidor.', + 'zip_error' => 'Hubo un error durante la importación ZIP.', + ), + 'sub' => array( + 'actualize' => 'Actualización', + 'category' => array( + 'created' => 'Se ha creado la categoría %s.', + 'deleted' => 'Se ha eliminado la categoría.', + 'emptied' => 'Se ha vaciado la categoría', + 'error' => 'No es posible actualizar la categoría', + 'name_exists' => 'Ya existe una categoría con ese nombre.', + 'no_id' => 'Debes especificar la id de la categoría.', + 'no_name' => '¡El nombre de la categoría no puede dejarse en blanco!.', + 'not_delete_default' => '¡No puedes borrar la categoría por defecto!', + 'not_exist' => 'La categoría no existe', + 'over_max' => 'Has alcanzado el límite de categorías (%d)', + 'updated' => 'La categoría se ha actualizado.', + ), + 'feed' => array( + 'actualized' => '%s ha sido actualizada', + 'actualizeds' => 'Las fuentes RSS se han actualizado', + 'added' => 'Fuente RSS agregada %s', + 'already_subscribed' => 'Ya estás suscrito a %s', + 'deleted' => 'Fuente eliminada', + 'error' => 'No es posible actualizar la fuente', + 'internal_problem' => 'No ha sido posible agregar la fuente RSS. Revisa el registro de FressRSS para más información.', + 'invalid_url' => 'La URL %s es inválida', + 'marked_read' => 'Fuentes marcadas como leídas', + 'n_actualized' => 'Se han actualiado %d fuentes', + 'n_entries_deleted' => 'Se han eliminado %d artículos', + 'no_refresh' => 'No hay fuente a actualizar…', + 'not_added' => '%s no ha podido se añadida', + 'over_max' => 'Has alcanzado tu límite de fuentes (%d)', + 'updated' => 'Fuente actualizada', + ), + 'purge_completed' => 'Limpieza completada (se han eliminado %d artículos)', + ), + 'update' => array( + 'can_apply' => 'FreshRSS se va a actualizar a la versión %s.', + 'error' => 'Hubo un error durante el proceso de actualización: %s', + 'file_is_nok' => 'Disponible la nueva versión %s. Sin embargo, debes revisar los permisos en el directorio %s. El servidor HTTP debe contar con permisos de escritura', + 'finished' => '¡Actualización completada!', + 'none' => 'No hay actualizaciones para procesar', + 'server_not_found' => 'No se ha podido conectar con el servidor de actualizaciones. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'Se ha creado el usuario %s', + 'error' => 'No se ha podido crear al usuario %s', + ), + 'deleted' => array( + '_' => 'El usuario %s ha sido eliminado', + 'error' => 'El usuario %s no ha podido ser eliminado', + ), + ), + 'profile' => array( + 'error' => 'Tu perfil no puede ser modificado', + 'updated' => 'Tu perfil ha sido modificado', + ), +); diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php new file mode 100755 index 000000000..41c591e1c --- /dev/null +++ b/app/i18n/es/gen.php @@ -0,0 +1,186 @@ + array( + 'actualize' => 'Actualizar', + 'back_to_rss_feeds' => '← regresar a tus fuentes RSS', + 'cancel' => 'Cancelar', + 'create' => 'Crear', + 'disable' => 'Desactivar', + 'empty' => 'Vaciar', + 'enable' => 'Activar', + 'export' => 'Exportar', + 'filter' => 'Filtrar', + 'import' => 'Importar', + 'manage' => 'Administrar', + 'mark_read' => 'Marcar como leído', + 'mark_favorite' => 'Marcar como favorita', + 'remove' => 'Borrar', + 'see_website' => 'Ver web', + 'submit' => 'Enviar', + 'truncate' => 'Borrar todos los artículos', + ), + 'auth' => array( + 'email' => 'Correo electrónico', + 'keep_logged_in' => 'Mantenerme identificado (%s días)', + 'login' => 'Conectar', + 'logout' => 'Desconectar', + 'password' => array( + '_' => 'Contraseña', + 'format' => 'Mínimo de 7 caracteres', + ), + 'registration' => array( + '_' => 'Nueva cuenta', + 'ask' => '¿Crear una cuenta?', + 'title' => 'Creación de cuenta', + ), + 'reset' => 'Reinicar identificación', + 'username' => array( + '_' => 'Nombre de usuario', + 'admin' => 'Nombre de usuario del Administrador', + 'format' => 'máximo 16 caracteres alfanuméricos', + ), + ), + 'date' => array( + 'Apr' => '\\A\\b\\r\\i\\l', + 'Aug' => '\\A\\g\\o\\s\\t\\o', + 'Dec' => '\\D\\i\\c\\i\\e\\m\\b\\r\\e', + 'Feb' => '\\F\\e\\b\\r\\e\\r\\o', + 'Jan' => '\\E\\n\\e\\r\\o', + 'Jul' => '\\J\\u\\l\\i\\o', + 'Jun' => '\\J\\u\\n\\i\\o', + 'Mar' => '\\M\\a\\r\\z\\o', + 'May' => '\\M\\a\\y\\o', + 'Nov' => '\\N\\o\\v\\i\\e\\m\\b\\r\\e', + 'Oct' => '\\O\\c\\t\\u\\b\\r\\e', + 'Sep' => '\\S\\e\\p\\t\\i\\e\\m\\b\\r\\e', + 'apr' => 'abr', + 'april' => 'Abr', + 'aug' => 'ago', + 'august' => 'Ago', + 'before_yesterday' => 'Anteayer', + 'dec' => 'dic', + 'december' => 'Dic', + 'feb' => 'feb', + 'february' => 'Feb', + 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', + 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', + 'fri' => 'Vie', + 'jan' => 'ene', + 'january' => 'Ene', + 'jul' => 'jul', + 'july' => 'Jul', + 'jun' => 'jun', + 'june' => 'Jun', + 'last_3_month' => 'Últimos tres meses', + 'last_6_month' => 'Últimos seis meses', + 'last_month' => 'Mes pasado', + 'last_week' => 'Semana pasada', + 'last_year' => 'Año pasado', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'May', + 'mon' => 'Lun', + 'month' => 'meses', + 'nov' => 'nov', + 'november' => 'Nov', + 'oct' => 'oct', + 'october' => 'Oct', + 'sat' => 'Sab', + 'sep' => 'sep', + 'september' => 'Sep', + 'sun' => 'Dom', + 'thu' => 'Jue', + 'today' => 'Hoy', + 'tue' => 'Mar', + 'wed' => 'Mie', + 'yesterday' => 'Ayer', + ), + 'freshrss' => array( + '_' => 'FreshRSS', + 'about' => 'Acerca de FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Vaciar categoría', + 'confirm_action' => '¿Seguyro que quieres hacerlo? No hay marcha atrás...', + 'confirm_action_feed_cat' => '¿Seguro que quieres hacerlo? Perderás todos los favoritos relacionados y las peticiones de usuario. ¡Y no hay marcha atrás!', + 'feedback' => array( + 'body_new_articles' => 'Hay %%d nuevos artículos para leer en FreshRSS.', + 'request_failed' => 'La petición ha fallado. Puede ser debido a problemas de conexión a internet.', + 'title_new_articles' => 'FreshRSS: ¡Nuevos artículos!', + ), + 'new_article' => 'Hay nuevos artículos disponibles. Pincha para refrescar la página.', + 'should_be_activated' => 'JavaScript debe estar activado', + ), + 'lang' => array( + 'cz' => 'Čeština', + 'de' => 'Deutsch', + 'en' => 'English', + 'fr' => 'Français', + 'it' => 'Italiano', + 'nl' => 'Nederlands', + 'ru' => 'Русский', + 'tr' => 'Türkçe', + 'zh-cn' => '简体中文' + 'es' => 'Español' + ), + 'menu' => array( + 'about' => 'Acerca de', + 'admin' => 'Administración', + 'archiving' => 'Archivo', + 'authentication' => 'Identificación', + 'check_install' => 'Verificación de instalación', + 'configuration' => 'Configuración', + 'display' => 'Visualización', + 'extensions' => 'Extensiones', + 'logs' => 'Registros', + 'queries' => 'Peticiones de usuario', + 'reading' => 'Lectura', + 'search' => 'Buscar palabras o #etiquetas', + 'sharing' => 'Compartir', + 'shortcuts' => 'Atajos', + 'stats' => 'Estadísticas', + 'system' => 'Configuración del sistema', + 'update' => 'Actualización', + 'user_management' => 'Administrar usuarios', + 'user_profile' => 'Perfil', + ), + 'pagination' => array( + 'first' => 'Primero', + 'last' => 'Último', + 'load_more' => 'Cargar más artículos', + 'mark_all_read' => 'Marcar todo como leído', + 'next' => 'Siguiente', + 'nothing_to_load' => 'No hay más artículos', + 'previous' => 'Anterior', + ), + 'share' => array( + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'movim' => 'Movim', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', + 'jdh' => 'Journal du hacker', + 'Known' => 'Known based sites', + 'gnusocial' => 'GNU social', + ), + 'short' => array( + 'attention' => '¡Aviso!', + 'blank_to_disable' => 'Deja en blanco para desactivar', + 'by_author' => 'Por %s', + 'by_default' => 'Por defecto', + 'damn' => '¡Córcholis!', + 'default_category' => 'Sin categorizar', + 'no' => 'No', + 'not_applicable' => 'No disponible', + 'ok' => '¡Vale!', + 'or' => 'o', + 'yes' => 'Sí', + ), +); diff --git a/app/i18n/es/index.php b/app/i18n/es/index.php new file mode 100755 index 000000000..03054e23a --- /dev/null +++ b/app/i18n/es/index.php @@ -0,0 +1,61 @@ + array( + '_' => 'Acerca de', + 'agpl3' => 'AGPL 3', + 'bugs_reports' => 'Informe de fallos', + 'credits' => 'Créditos', + 'credits_content' => 'Aunque FreshRSS no usa ese entorno, algunos elementos del diseño están obtenidos de Bootstrap. Los Iconos han sido obtenidos del proyecto GNOME. La fuente Open Sans es una creación de Steve Matteson. FreshRSS usa el entorno PHP Minz.', + 'freshrss_description' => 'FreshRSS es un agregador de fuentes RSS de alojamiento privado al estilo de Kriss Feed o Leed. Es una herramienta potente, pero ligera y fácil de usar y configurar.', + 'github' => 'en Github', + 'license' => 'Licencia', + 'project_website' => 'Web del proyecto', + 'title' => 'Acerca de', + 'version' => 'Versión', + 'website' => 'Web', + ), + 'feed' => array( + 'add' => 'Puedes añadir fuentes.', + 'empty' => 'No hay artículos a mostrar.', + 'rss_of' => 'Fuente RSS de %s', + 'title' => 'Tus fuentes RSS', + 'title_global' => 'Vista global', + 'title_fav' => 'Tus favoritos', + ), + 'log' => array( + '_' => 'Registros', + 'clear' => 'Limpiar registros', + 'empty' => 'El archivo de registro está vacío', + 'title' => 'Registros', + ), + 'menu' => array( + 'about' => 'Acerca de FreshRSS', + 'add_query' => 'Añadir petición', + 'before_one_day' => 'Con más de 1 día', + 'before_one_week' => 'Con más de una semana', + 'favorites' => 'Favoritos (%s)', + 'global_view' => 'Vista Global', + 'main_stream' => 'Salida Principal', + 'mark_all_read' => 'Marcar todo como leído', + 'mark_cat_read' => 'Marcar categoría como leída', + 'mark_feed_read' => 'Marcar fuente como leída', + 'newer_first' => 'Nuevos primero', + 'non-starred' => 'Mostrar todos menos los favoritos', + 'normal_view' => 'Vista normal', + 'older_first' => 'Más antiguos primero', + 'queries' => 'Peticiones de usuario', + 'read' => 'Mostrar solo los leídos', + 'reader_view' => 'Vista de lectura', + 'rss_view' => 'Fuente RSS', + 'search_short' => 'Buscar', + 'starred' => 'Mostrar solo los favoritos', + 'stats' => 'Estadísticas', + 'subscription' => 'Administración de suscripciones', + 'unread' => 'Mostar solo no leídos', + ), + 'share' => 'Compartir', + 'tag' => array( + 'related' => 'Etiquetas relacionadas', + ), +); diff --git a/app/i18n/es/install.php b/app/i18n/es/install.php new file mode 100755 index 000000000..cd6f63432 --- /dev/null +++ b/app/i18n/es/install.php @@ -0,0 +1,119 @@ + array( + 'finish' => 'Completar instalación', + 'fix_errors_before' => 'Por favor, soluciona los errores detectados antes de continuar con el siguiente paso.', + 'keep_install' => 'Conservar la configuración anterior', + 'next_step' => 'Ir al siguiente paso', + 'reinstall' => 'Reinstalar FreshRSS', + ), + 'auth' => array( + 'form' => 'Formulario Web (método más habitual, requiere JavaScript)', + 'http' => 'HTTP (para usuarios avanzados con HTTPS)', + 'none' => 'Ninguna (peligroso)', + 'password_form' => 'Contraseña
    (para el método de acceso mediante formulario web)', + 'password_format' => 'Al menos 7 caracteres', + 'type' => 'Método de identificación', + ), + 'bdd' => array( + '_' => 'Base de datos', + 'conf' => array( + '_' => 'Configuración de la base de datos', + 'ko' => 'Verificar la información de tu base de datos.', + 'ok' => 'La configuración de la base de datos ha sido guardada.', + ), + 'host' => 'Servidor', + 'prefix' => 'Prefijo de la tabla', + 'password' => 'Contraseña de la base de datos', + 'type' => 'Tipo de base de datos', + 'username' => 'Nombre de usuario de la base de datos', + ), + 'check' => array( + '_' => 'Verificaciones', + 'already_installed' => '¡FreshRSS ya está instalado!', + 'cache' => array( + 'nok' => 'Comprueba los permisos en el directorio ./data/cache. El servidor HTTP debe contar con permisos de escritura.', + 'ok' => 'Los permisos del directorio cache son correctos.', + ), + 'ctype' => array( + 'nok' => 'No se ha podido localizar la librería para la verificación del tipo de caracteres (php-ctype).', + 'ok' => 'Cuentas con la librería necesaria para la verificación del tipo de caracteres (ctype).', + ), + 'curl' => array( + 'nok' => 'No se ha podido localizar la librería cURL (paquete php-curl).', + 'ok' => 'Dispones de la librería cURL.', + ), + 'data' => array( + 'nok' => 'Comprueba los permisos del directorio ./data. El servidor HTTP debe contar con permisos de escritura.', + 'ok' => 'Los permisos del directorio data son correctos.', + ), + 'dom' => array( + 'nok' => 'No se ha podido localizar la librería necesaria para explorar la DOM.', + 'ok' => 'Dispones de la librería necesaria para explorar la DOM.', + ), + 'favicons' => array( + 'nok' => 'Verifica los permisos en el directorio ./data/favicons. El servidor HTTP debe contar con permisos de escritura.', + 'ok' => 'Los permisos del directorio favicons son correctos.', + ), + 'fileinfo' => array( + 'nok' => 'No se ha podido localizar la librería PHP fileinfo (paquete fileinfo).', + 'ok' => 'Dispones de la librería fileinfo.', + ), + 'http_referer' => array( + 'nok' => 'Por favor, comprueba que no estás alterando tu configuración HTTP REFERER.', + 'ok' => 'La configuración HTTP REFERER es conocida y se corresponde con la de tu servidor.', + ), + 'json' => array( + 'nok' => 'No se ha podido localizar la librería para procesar JSON.', + 'ok' => 'Dispones de la librería recomendada para procesar JSON.', + ), + 'minz' => array( + 'nok' => 'No se ha podido localizar el entorno Minz.', + 'ok' => 'Dispones del entorno Minz.', + ), + 'pcre' => array( + 'nok' => 'No se ha podido encontrar la librería necesaria para las expresiones regulares (php-pcre).', + 'ok' => 'Dispones de la librería necesaria para las expresiones regulares (PCRE).', + ), + 'pdo' => array( + 'nok' => 'No se ha podido localizar PDO o uno de los controladores compatibles (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'Dispones de PDO y al menos uno de los controladores compatibles (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + 'nok' => 'Dispones de la versión PHP %s, pero FreshRSS necesita de, al menos, la versión %s.', + 'ok' => 'Dispones de la versión PHP %s, que es compatible con FreshRSS.', + ), + 'users' => array( + 'nok' => 'Revisa los permisos en el directorio ./data/users. El servidor HTTP debe contar con permisos de escritura.', + 'ok' => 'Los permisos en el directorio users son correctos.', + ), + 'xml' => array( + 'nok' => 'No se ha podido localizar la librería necesaria para procesar XML.', + 'ok' => 'Dispones de la librería necesaria para procesar XML.', + ), + ), + 'conf' => array( + '_' => 'Configuración general', + 'ok' => 'La configuración general se ha guardado.', + ), + 'congratulations' => '¡Enhorabuena!', + 'default_user' => 'Nombre de usuario para el usuario por defecto (máximo de 16 caracteres alfanuméricos)', + 'delete_articles_after' => 'Eliminar los artículos tras', + 'fix_errors_before' => 'Por favor, soluciona los errores detectados antes de proceder con el siguiente paso.', + 'javascript_is_better' => 'FreshRSS funciona mejor con JavaScript activado', + 'js' => array( + 'confirm_reinstall' => 'Al reinstalar FreshRSS perderás cualquier configuración anterior. ¿Seguro que quieres continuar?', + ), + 'language' => array( + '_' => 'Idioma', + 'choose' => 'Selecciona el idioma para FreshRSS', + 'defined' => 'Idioma seleccionado.', + ), + 'not_deleted' => 'Parece que ha habido un error. Debes eliminar el archivo %s de forma manual.', + 'ok' => 'La instalación se ha completado correctamente.', + 'step' => 'paso %d', + 'steps' => 'Pasos', + 'title' => 'Instalación · FreshRSS', + 'this_is_the_end' => '¡Terminamos!', +); diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php new file mode 100755 index 000000000..c18f0b786 --- /dev/null +++ b/app/i18n/es/sub.php @@ -0,0 +1,62 @@ + array( + '_' => 'Categoría', + 'add' => 'Añadir a la categoría', + 'empty' => 'Vaciar categoría', + 'new' => 'Nueva categoría', + ), + 'feed' => array( + 'add' => 'Añadir fuente RSS', + 'advanced' => 'Avanzado', + 'archiving' => 'Archivo', + 'auth' => array( + 'configuration' => 'Identificación', + 'help' => 'Permitir acceso a fuentes RSS protegidas con HTTP', + 'http' => 'Identificación HTTP', + 'password' => 'Contraseña HTTP', + 'username' => 'Nombre de usuario HTTP', + ), + 'css_help' => 'Recibir fuentes RSS truncadas (aviso, ¡necesita más tiempo!)', + 'css_path' => 'Ruta a la CSS de los artículos en la web original', + 'description' => 'Descripción', + 'empty' => 'La fuente está vacía. Por favor, verifica que siga activa.', + 'error' => 'Hay un problema con esta fuente. Por favor, veritica que esté disponible y prueba de nuevo.', + 'in_main_stream' => 'Mostrar en salida principal', + 'informations' => 'Información', + 'keep_history' => 'Número mínimo de artículos a conservar', + 'moved_category_deleted' => 'Al borrar una categoría todas sus fuentes pasan automáticamente a la categoría %s.', + 'no_selected' => 'No hay funentes seleccionadas.', + 'number_entries' => '%d artículos', + 'stats' => 'Estadísticas', + 'think_to_add' => 'Puedes añadir fuentes.', + 'title' => 'Título', + 'title_add' => 'Añadir fuente RSS', + 'ttl' => 'No actualizar de forma automática con una frecuencia mayor a', + 'url' => 'URL de la fuente', + 'validator' => 'Verifica la validez de la fuente', + 'website' => 'Web de la URL', + 'pubsubhubbub' => 'Notificación inmedaiata con PubSubHubbub', + ), + 'import_export' => array( + 'export' => 'Exportar', + 'export_opml' => 'Exportar la lista de fuentes (OPML)', + 'export_starred' => 'Exportar tus favoritos', + 'feed_list' => 'Lista de %s artículos', + 'file_to_import' => 'Archivo a importar
    (OPML, JSON o ZIP)', + 'file_to_import_no_zip' => 'Archivo a importar
    (OPML o JSON)', + 'import' => 'Importar', + 'starred_list' => 'Lista de artículos favoritos', + 'title' => 'Importar / exportar', + ), + 'menu' => array( + 'bookmark' => 'Suscribirse (favorito FreshRSS)', + 'import_export' => 'Importar / exportar', + 'subscription_management' => 'Administración de suscripciones', + ), + 'title' => array( + '_' => 'Administración de suscripciones', + 'feed_management' => 'Administración de fuentes RSS', + ), +); -- cgit v1.2.3 From 3b0c6435f5dd10671739132274cf3b0b56ae3f8a Mon Sep 17 00:00:00 2001 From: Ramón Cutanda Date: Fri, 22 Sep 2017 07:42:15 -0600 Subject: Update CREDITS.md (#1634) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added Ramón Cutanda as a contributor of the Spanish language --- CREDITS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.md b/CREDITS.md index 9d123f7c2..514464265 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -40,6 +40,7 @@ People are sorted by name so please keep this order. * [Paulius Šukys](https://github.com/psukys): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:psukys), [Web](http://sukys.eu) * [purexo](https://github.com/purexo): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:purexo), [Web](https://purexo.mom/) * [Quentin Dufour](https://github.com/superboum): [contributions](https://github.com/FreshRSS/documentation/commits?author=superboum), [Web](http://quentin.dufour.io/) +* [Ramón Cutanda](https://github.com/rcutanda): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rcutanda) * [romibi](https://github.com/romibi): [contributions](https://github.com/FreshRSS/FreshRSS/commits/dev?author=romibi) * [subic](https://github.com/subic): [contributions](https://github.com/FreshRSS/documentation/commits?author=subic) * [Tets42](https://github.com/Tets42): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Tets42) -- cgit v1.2.3 From a4890fbeb7cb876f6fd7980b91088595bcfb1415 Mon Sep 17 00:00:00 2001 From: Ramón Cutanda Date: Fri, 22 Sep 2017 07:42:29 -0600 Subject: Update CHANGELOG.md (#1635) Added Spanish language --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3dd665a2a..de4645622 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ * Simplified Chinese [#1541](https://github.com/FreshRSS/FreshRSS/pull/1541) * Improve English [#1465](https://github.com/FreshRSS/FreshRSS/pull/1465) * Improve Dutch [#1559](https://github.com/FreshRSS/FreshRSS/pull/1559) + * Added Spanish language [#1631] (https://github.com/FreshRSS/FreshRSS/pull/1631/) * Security * Do not require write access to check availability of new versions [#1450](https://github.com/FreshRSS/FreshRSS/issues/1450) * Misc. -- cgit v1.2.3 From 3fa63217cdf339b894c29ffe7f9af8c477c724fb Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 22 Sep 2017 16:21:37 +0200 Subject: Quick fix i18n es and zh (#1636) https://github.com/FreshRSS/FreshRSS/pull/1631 --- app/i18n/cz/gen.php | 2 ++ app/i18n/de/gen.php | 2 ++ app/i18n/en/gen.php | 1 + app/i18n/es/gen.php | 30 ++++++++++++++++-------------- app/i18n/fr/gen.php | 2 ++ app/i18n/it/gen.php | 2 ++ app/i18n/kr/gen.php | 1 + app/i18n/nl/gen.php | 2 ++ app/i18n/ru/gen.php | 2 ++ app/i18n/tr/gen.php | 2 ++ app/i18n/zh-cn/gen.php | 5 +++-- 11 files changed, 35 insertions(+), 16 deletions(-) diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 405c05de9..f243745d0 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -117,12 +117,14 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', ), 'menu' => array( 'about' => 'O aplikaci', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index dccf38383..c6b659f27 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -117,12 +117,14 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', ), 'menu' => array( 'about' => 'Über', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 0173b832f..29acfaf3c 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -117,6 +117,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', 'kr' => '한국어', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 41c591e1c..e2ce7e8a1 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -55,40 +55,41 @@ return array( 'Oct' => '\\O\\c\\t\\u\\b\\r\\e', 'Sep' => '\\S\\e\\p\\t\\i\\e\\m\\b\\r\\e', 'apr' => 'abr', - 'april' => 'Abr', + 'april' => 'abril', 'aug' => 'ago', - 'august' => 'Ago', + 'august' => 'agosto', 'before_yesterday' => 'Anteayer', 'dec' => 'dic', - 'december' => 'Dic', + 'december' => 'diciembre', 'feb' => 'feb', - 'february' => 'Feb', + 'february' => 'febrero', 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', 'fri' => 'Vie', 'jan' => 'ene', - 'january' => 'Ene', + 'january' => 'ene', 'jul' => 'jul', - 'july' => 'Jul', + 'july' => 'julio', 'jun' => 'jun', - 'june' => 'Jun', + 'june' => 'junio', 'last_3_month' => 'Últimos tres meses', 'last_6_month' => 'Últimos seis meses', 'last_month' => 'Mes pasado', 'last_week' => 'Semana pasada', 'last_year' => 'Año pasado', 'mar' => 'mar', - 'march' => 'Mar', - 'may' => 'May', + 'march' => 'marzo', + 'may_' => 'may', + 'may' => 'mayo', 'mon' => 'Lun', 'month' => 'meses', 'nov' => 'nov', - 'november' => 'Nov', + 'november' => 'noviembre', 'oct' => 'oct', - 'october' => 'Oct', + 'october' => 'octubre', 'sat' => 'Sab', 'sep' => 'sep', - 'september' => 'Sep', + 'september' => 'septiembre', 'sun' => 'Dom', 'thu' => 'Jue', 'today' => 'Hoy', @@ -116,13 +117,14 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', - 'zh-cn' => '简体中文' - 'es' => 'Español' + 'zh-cn' => '简体中文', ), 'menu' => array( 'about' => 'Acerca de', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 705cbd4ea..759ceb16b 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -117,12 +117,14 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', ), 'menu' => array( 'about' => 'À propos', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index e7403b603..d795a5e08 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -117,12 +117,14 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', ), 'menu' => array( 'about' => 'Informazioni', diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index 0c19b5871..161b80894 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -117,6 +117,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', 'kr' => '한국어', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 2a1d40e7e..df62620a0 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -117,12 +117,14 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', ), 'menu' => array( 'about' => 'Over', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 2518e0d0e..b67da4861 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -117,12 +117,14 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', ), 'menu' => array( 'about' => 'About', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index a6dda7478..ad0c72f9f 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -117,12 +117,14 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', ), 'menu' => array( 'about' => 'Hakkında', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 936f7d6ee..1cfc4ddff 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -116,9 +116,10 @@ return array( 'lang' => array( 'cz' => 'Čeština', 'de' => 'Deutsch', - 'en' => 'English1', + 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', - 'it' => 'Italiano1', + 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', 'ru' => 'Русский', -- cgit v1.2.3 From bc109cff50833fc378832def77fb1e4a5b343bff Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Fri, 22 Sep 2017 18:14:41 +0200 Subject: [fix] Spanish lang double space (#1637) --- app/i18n/es/conf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index 1ccd76b2e..aad5cc66d 100755 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -104,7 +104,7 @@ return array( 'when' => 'Marcar el artículo como leído…', ), 'show' => array( - '_' => 'Artículos a mostrar', + '_' => 'Artículos a mostrar', 'adaptive' => 'Ajustar la visualización', 'all_articles' => 'Mostrar todos los artículos', 'unread' => 'Mostrar solo pendientes', -- cgit v1.2.3 From 28db5dd2858002b376c920ec1d1aaad4ef254d54 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 23 Sep 2017 12:32:35 +0200 Subject: Fix SQL constraint insert into entrytmp table https://github.com/FreshRSS/FreshRSS/issues/1614 --- app/Controllers/feedController.php | 7 ++++++- app/Controllers/importExportController.php | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 66b1167a8..45cba9e98 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -320,11 +320,16 @@ class FreshRSS_feed_Controller extends Minz_ActionController { } // For this feed, check existing GUIDs already in database. $existingHashForGuids = $entryDAO->listHashForFeedGuids($feed->id(), $newGuids); - unset($newGuids); + $newGuids = array(); $oldGuids = array(); // Add entries in database if possible. foreach ($entries as $entry) { + if (isset($newGuids[$entry->guid()])) { + continue; //Skip subsequent articles with same GUID + } + $newGuids[$entry->guid()] = true; + $entry_date = $entry->date(true); if (isset($existingHashForGuids[$entry->guid()])) { $existingHash = $existingHashForGuids[$entry->guid()]; diff --git a/app/Controllers/importExportController.php b/app/Controllers/importExportController.php index a69490e70..a76dd9a2b 100644 --- a/app/Controllers/importExportController.php +++ b/app/Controllers/importExportController.php @@ -426,7 +426,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController { } // For this feed, check existing GUIDs already in database. $existingHashForGuids = $this->entryDAO->listHashForFeedGuids($feed->id(), $newGuids); - unset($newGuids); + $newGuids = array(); // Then, articles are imported. $this->entryDAO->beginTransaction(); @@ -455,6 +455,11 @@ class FreshRSS_importExport_Controller extends Minz_ActionController { $entry->_id(min(time(), $entry->date(true)) . uSecString()); $entry->_tags($tags); + if (isset($newGuids[$entry->guid()])) { + continue; //Skip subsequent articles with same GUID + } + $newGuids[$entry->guid()] = true; + $entry = Minz_ExtensionManager::callHook('entry_before_insert', $entry); if ($entry == null) { // An extension has returned a null value, there is nothing to insert. -- cgit v1.2.3 From 8cbb052758b02f266f42b6ba953c32419c0bcd4d Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 23 Sep 2017 12:34:31 +0200 Subject: Changelog 1614 https://github.com/FreshRSS/FreshRSS/issues/1614 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de4645622..6d16ba447 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ * Fix month abbreviations [#1560](https://github.com/FreshRSS/FreshRSS/issues/1560) * Bug fixing * Fix API compatibility bug between PostgreSQL and EasyRSS [#1603](https://github.com/FreshRSS/FreshRSS/pull/1603) - * Fix PostgreSQL error when adding entries with duplicated GUID [#1610](https://github.com/FreshRSS/FreshRSS/issues/1610) + * Fix PostgreSQL error when adding entries with duplicated GUID [#1610](https://github.com/FreshRSS/FreshRSS/issues/1610), [#1614](https://github.com/FreshRSS/FreshRSS/issues/1614) * Fix for RSS feeds containing HTML in author field [#1590](https://github.com/FreshRSS/FreshRSS/issues/1590) * Misc. * Travis continuous integration [#1619](https://github.com/FreshRSS/FreshRSS/pull/1619) -- cgit v1.2.3 From 2fd5ab8c55e990d3ad6dacc5371dfd5f9b6bcd2e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 23 Sep 2017 13:34:57 +0200 Subject: Fix global view CSRF https://github.com/FreshRSS/FreshRSS/issues/1591 --- CHANGELOG.md | 1 + p/scripts/global_view.js | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index de4645622..d1af4ac36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ * Fix API compatibility bug between PostgreSQL and EasyRSS [#1603](https://github.com/FreshRSS/FreshRSS/pull/1603) * Fix PostgreSQL error when adding entries with duplicated GUID [#1610](https://github.com/FreshRSS/FreshRSS/issues/1610) * Fix for RSS feeds containing HTML in author field [#1590](https://github.com/FreshRSS/FreshRSS/issues/1590) + * Fix logout issue in global view due to CSRF [#1591](https://github.com/FreshRSS/FreshRSS/issues/1591) * Misc. * Travis continuous integration [#1619](https://github.com/FreshRSS/FreshRSS/pull/1619) * Allow longer database usernames [#1597](https://github.com/FreshRSS/FreshRSS/issues/1597) diff --git a/p/scripts/global_view.js b/p/scripts/global_view.js index de0b9cb9f..e3de0fd52 100644 --- a/p/scripts/global_view.js +++ b/p/scripts/global_view.js @@ -33,6 +33,9 @@ function load_panel(link) { $.ajax({ type: "POST", url: $(this).attr("formaction"), + data : { + _csrf: context.csrf, + }, async: false }); window.location.reload(false); -- cgit v1.2.3 From ca7d1fdddeb5faf48014e93fac50619fa22a893d Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 23 Sep 2017 13:41:26 +0200 Subject: Minor JS whitespace --- p/scripts/category.js | 2 +- p/scripts/global_view.js | 2 +- p/scripts/main.js | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/p/scripts/category.js b/p/scripts/category.js index fbcd83a01..caa4fa22f 100644 --- a/p/scripts/category.js +++ b/p/scripts/category.js @@ -92,7 +92,7 @@ function init_draggable() { $.ajax({ type: 'POST', url: './?c=feed&a=move', - data : { + data: { f_id: dragFeedId, c_id: e.target.parentNode.getAttribute('data-cat-id'), _csrf: context.csrf, diff --git a/p/scripts/global_view.js b/p/scripts/global_view.js index e3de0fd52..c5aaa48b1 100644 --- a/p/scripts/global_view.js +++ b/p/scripts/global_view.js @@ -33,7 +33,7 @@ function load_panel(link) { $.ajax({ type: "POST", url: $(this).attr("formaction"), - data : { + data: { _csrf: context.csrf, }, async: false diff --git a/p/scripts/main.js b/p/scripts/main.js index 117e8a598..aa2f1d58b 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -133,7 +133,7 @@ function mark_read(active, only_not_read) { $.ajax({ type: 'POST', url: url, - data : { + data: { ajax: true, _csrf: context.csrf, }, @@ -182,7 +182,7 @@ function mark_favorite(active) { $.ajax({ type: 'POST', url: url, - data : { + data: { ajax: true, _csrf: context.csrf, }, @@ -823,7 +823,7 @@ function updateFeed(feeds, feeds_count) { $.ajax({ type: 'POST', url: feed.url, - data : { + data: { _csrf: context.csrf, noCommit: feeds.length > 0 ? 1 : 0, }, @@ -860,7 +860,7 @@ function init_actualize() { $.ajax({ //Empty request to force refresh server database cache type: 'POST', url: './?c=feed&a=actualize&id=-1', - data : { + data: { _csrf: context.csrf, noCommit: 0, }, @@ -1299,7 +1299,7 @@ function init_slider_observers() { $.ajax({ type: 'GET', url: url_slide, - data : { ajax: true } + data: { ajax: true } }).done(function (data) { slider.html(data); closer.addClass('active'); -- cgit v1.2.3 From 62d68f8c6639c59bff4f4b41ab87a5e47c6d763c Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 24 Sep 2017 12:16:41 +0200 Subject: Quick fix PSHB encoding after Travis refactoring https://github.com/FreshRSS/FreshRSS/pull/1619 Related to https://github.com/FreshRSS/FreshRSS/pull/1633 --- app/Models/Feed.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 002be711a..d8fe03197 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -487,9 +487,9 @@ class FreshRSS_Feed extends Minz_Model { CURLOPT_USERAGENT => 'FreshRSS/' . FRESHRSS_VERSION . ' (' . PHP_OS . '; ' . FRESHRSS_WEBSITE . ')', CURLOPT_POSTFIELDS => http_build_query(array( 'hub.verify' => 'sync', - 'hub.mode' => ($state ? 'subscribe' : 'unsubscribe'), - 'hub.topic' => urlencode($url), - 'hub.callback' => urlencode($callbackUrl), + 'hub.mode' => $state ? 'subscribe' : 'unsubscribe', + 'hub.topic' => $url, + 'hub.callback' => $callbackUrl, )) ) ); -- cgit v1.2.3 From f293cec4927b9abebca72588c531c53f83640a48 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 26 Sep 2017 22:19:18 +0200 Subject: HTML5 show controls audio video (#1642) * HTML5 show controls audio video * Changelog 1642 --- CHANGELOG.md | 1 + lib/lib_rss.php | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f870252dd..1eb051841 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * New page for subscription tools [#1534](https://github.com/FreshRSS/FreshRSS/issues/1354) * Adjustments to the padding of the tree of categories and feeds [1589](https://github.com/FreshRSS/FreshRSS/pull/1589) * Fix feed column position after lazy-loading images [#1616](https://github.com/FreshRSS/FreshRSS/pull/1616) + * Force UI controls for HTML5 video and audio [#1642](https://github.com/FreshRSS/FreshRSS/pull/1642) * CLI * New command `./cli/update-user` to update user settings [#1600](https://github.com/FreshRSS/FreshRSS/issues/1600) * I18n diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 959cb064c..09048700d 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -191,9 +191,9 @@ function customSimplePie() { 'onmouseover', 'onmousemove', 'onmouseout', 'onfocus', 'onblur', 'onkeypress', 'onkeydown', 'onkeyup', 'onselect', 'onchange', 'seamless', 'sizes', 'srcset'))); $simplePie->add_attributes(array( - 'audio' => array('preload' => 'none'), + 'audio' => array('controls' => 'controls', 'preload' => 'none'), 'iframe' => array('sandbox' => 'allow-scripts allow-same-origin'), - 'video' => array('preload' => 'none'), + 'video' => array('controls' => 'controls', 'preload' => 'none'), )); $simplePie->set_url_replacements(array( 'a' => 'href', -- cgit v1.2.3 From 92a1bf3917f41f86c3c6153f97d99896c2665c3e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 26 Sep 2017 22:20:25 +0200 Subject: Update some HTTP links (doc, HTTPS) (#1641) https://github.com/FreshRSS/FreshRSS/issues/1605 --- CREDITS.md | 4 ++-- README.fr.md | 7 +++---- README.md | 5 ++--- constants.php | 4 ++-- docs/en/developers/03_Backend/05_Extensions.md | 2 +- docs/fr/developers/02_Github.md | 2 +- docs/fr/developers/03_Backend/05_Extensions.md | 2 +- lib/lib_date.php | 2 +- p/api/greader.php | 4 ++-- p/themes/base-theme/README.md | 2 +- 10 files changed, 16 insertions(+), 18 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index 514464265..17fc490ab 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -7,7 +7,7 @@ People are sorted by name so please keep this order. --- * [Adrien Dorsaz](https://github.com/Trim): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Trim), [Web](https://adorsaz.ch/) -* [Alexandre Alapetite](https://github.com/Alkarex): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Alkarex), [Web](http://alexandre.alapetite.fr/) +* [Alexandre Alapetite](https://github.com/Alkarex): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Alkarex), [Web](https://alexandre.alapetite.fr/) * [Alexis Degrugillier](https://github.com/aledeg): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=aledeg) * [Alwaysin](https://github.com/Alwaysin): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Alwaysin) * [Amaury Carrade](https://github.com/AmauryCarrade): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=AmauryCarrade), [Web](https://amaury.carrade.eu/) @@ -32,7 +32,7 @@ People are sorted by name so please keep this order. * [Luc Didry](https://github.com/ldidry): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=ldidry), [Web](https://www.fiat-tux.fr/) * [marcomrc](https://github.com/marcomrc): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=marcomrc) * [Marcus Rohrmoser](https://github.com/mro): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=mro), [Web](http://mro.name/~me) -* [Marien Fressinaud](https://github.com/marienfressinaud): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=marienfressinaud), [Web](http://marienfressinaud.fr/) +* [Marien Fressinaud](https://github.com/marienfressinaud): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=marienfressinaud), [Web](https://marienfressinaud.fr/) * [Melvyn Laïly](https://github.com/yaurthek): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=yaurthek), [Web](http://x2a.yt/) * [Nicolas Elie](https://github.com/nicolaselie): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=nicolaselie) * [Nicolas Lœuillet](https://github.com/nicosomb): [contributions](https://github.com/FreshRSS/documentation/commits?author=nicosomb), [Web](http://www.loeuillet.org/) diff --git a/README.fr.md b/README.fr.md index cc268dc5e..8f19b280a 100644 --- a/README.fr.md +++ b/README.fr.md @@ -10,7 +10,7 @@ Il supporte [PubSubHubbub](https://code.google.com/p/pubsubhubbub/) pour des not Il y a une API pour les clients (mobiles), ainsi qu’une [interface en ligne de commande](./cli/README.md). Enfin, il permet l’ajout d’[extensions](#extensions) pour encore plus de personnalisation. -* Site officiel : http://freshrss.org +* Site officiel : https://freshrss.org * Démo : http://demo.freshrss.org/ * Licence : [GNU AGPL 3](http://www.gnu.org/licenses/agpl-3.0.html) @@ -42,8 +42,7 @@ Nous sommes une communauté amicale. ![Capture d’écran de FreshRSS](./docs/img/FreshRSS-screenshot.png) # Documentation -* http://doc.freshrss.org/fr/ -* https://github.com/FreshRSS/documentation +* https://freshrss.github.io/FreshRSS/fr/ # Installation 1. Récupérez l’application FreshRSS via la commande git ou [en téléchargeant l’archive](../releases) @@ -156,7 +155,7 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio # Bibliothèques incluses * [SimplePie](http://simplepie.org/) * [MINZ](https://github.com/marienfressinaud/MINZ) -* [php-http-304](http://alexandre.alapetite.fr/doc-alex/php-http-304/) +* [php-http-304](https://alexandre.alapetite.fr/doc-alex/php-http-304/) * [jQuery](http://jquery.com/) * [lib_opml](https://github.com/marienfressinaud/lib_opml) * [jQuery Plugin Sticky-Kit](http://leafo.net/sticky-kit/) diff --git a/README.md b/README.md index 016794ffc..14ca65a51 100644 --- a/README.md +++ b/README.md @@ -44,8 +44,7 @@ We are a friendly community. ![FreshRSS screenshot](./docs/img/FreshRSS-screenshot.png) # Documentation -* http://doc.freshrss.org/en/ -* https://github.com/FreshRSS/documentation +* https://freshrss.github.io/FreshRSS/en/ # Installation 1. Get FreshRSS with git or [by downloading the archive](https://github.com/FreshRSS/FreshRSS/archive/master.zip) @@ -160,7 +159,7 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E # Included libraries * [SimplePie](http://simplepie.org/) * [MINZ](https://github.com/marienfressinaud/MINZ) -* [php-http-304](http://alexandre.alapetite.fr/doc-alex/php-http-304/) +* [php-http-304](https://alexandre.alapetite.fr/doc-alex/php-http-304/) * [jQuery](http://jquery.com/) * [lib_opml](https://github.com/marienfressinaud/lib_opml) * [jQuery Plugin Sticky-Kit](http://leafo.net/sticky-kit/) diff --git a/constants.php b/constants.php index 6819e8d2d..792c39df7 100644 --- a/constants.php +++ b/constants.php @@ -1,7 +1,7 @@ Date: Thu, 28 Sep 2017 22:46:59 +0200 Subject: Change layout for the share options on mobile (#1645) * Change layout for the share options on mobile Before, it was impossible to click on links to share on small screens. Now, all dropdowns are opened at the bottom of the screen and stays there. Linked to #1506 * Change rule for border-radius --- p/themes/base-theme/template.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index f1a09c50c..320ad2d9b 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -835,6 +835,15 @@ input:checked + .slide-container .properties { .no-mobile { display: none; } + .dropdown .dropdown-menu { + border-radius: 0; + bottom: 0; + position: fixed; + width: 100%; + } + .dropdown-menu::after { + display: none; + } .aside .toggle_aside, .nav-login { display: block; -- cgit v1.2.3 From e53c10f975de9d35f476343287d720350bcbcbc0 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 28 Sep 2017 22:51:17 +0200 Subject: Changelog 1645 https://github.com/FreshRSS/FreshRSS/pull/1645 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1eb051841..d3a871580 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * Adjustments to the padding of the tree of categories and feeds [1589](https://github.com/FreshRSS/FreshRSS/pull/1589) * Fix feed column position after lazy-loading images [#1616](https://github.com/FreshRSS/FreshRSS/pull/1616) * Force UI controls for HTML5 video and audio [#1642](https://github.com/FreshRSS/FreshRSS/pull/1642) + * Fix share menu on small screens [#1645](https://github.com/FreshRSS/FreshRSS/pull/1645) * CLI * New command `./cli/update-user` to update user settings [#1600](https://github.com/FreshRSS/FreshRSS/issues/1600) * I18n -- cgit v1.2.3 From ee834888cd96df12d14686f3e75c82053e188a64 Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sat, 30 Sep 2017 08:25:07 +0200 Subject: Remove limitation on toggleContent (#1647) Before, articles were repositioned only when the new and the old article were different. When they were the same, it was just closed. It was frustrating with long articles, especially during reading. Now, when an article is collapsed, it is repositionned no matter the collapsing method. This should fix #1177 --- p/scripts/main.js | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index aa2f1d58b..278ecfee9 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -266,11 +266,9 @@ function toggleContent(new_active, old_active) { new_pos += old_scroll; } - if (old_active[0] !== new_active[0]) { - new_active.children(".flux_content").first().each(function () { - box_to_move.scrollTop(new_pos).scrollTop(); - }); - } + new_active.children(".flux_content").first().each(function () { + box_to_move.scrollTop(new_pos).scrollTop(); + }); } else { if (relative_move) { new_pos += old_scroll; @@ -386,13 +384,8 @@ function last_category() { } function collapse_entry() { - isCollapsed = !isCollapsed; - var flux_current = $(".flux.current"); - flux_current.toggleClass("active"); - if (isCollapsed && context.auto_mark_article) { - mark_read(flux_current, true); - } + toggleContent(flux_current, flux_current); } function user_filter(key) { -- cgit v1.2.3 From cc4f382bff029a0a6c2373ff4dfbb624b7198952 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 30 Sep 2017 08:54:43 +0200 Subject: Changelog 1177 https://github.com/FreshRSS/FreshRSS/issues/1177 https://github.com/FreshRSS/FreshRSS/pull/1647 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3a871580..6f126373c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ * Fix feed column position after lazy-loading images [#1616](https://github.com/FreshRSS/FreshRSS/pull/1616) * Force UI controls for HTML5 video and audio [#1642](https://github.com/FreshRSS/FreshRSS/pull/1642) * Fix share menu on small screens [#1645](https://github.com/FreshRSS/FreshRSS/pull/1645) + * Go back to previous view when collapsing article [#1177](https://github.com/FreshRSS/FreshRSS/issues/1177) * CLI * New command `./cli/update-user` to update user settings [#1600](https://github.com/FreshRSS/FreshRSS/issues/1600) * I18n -- cgit v1.2.3 From ac3c24dd83cd60bea50008ecf990900433c729ca Mon Sep 17 00:00:00 2001 From: David souza Date: Sat, 30 Sep 2017 04:26:09 -0300 Subject: Language portugue (#1648) * Create folder pt-br to translate to portuguese-brazil; Translate file admin.php; Trnaslate file index.php; * Translate the files: - conf.php - feedback.php - gen.php * Translate sub.php e install.php; add pt-br in file gen.php inside another languages * fix bug * Configure display date * Add pt-br to es, kr, zh, and fix whitespace https://github.com/FreshRSS/FreshRSS/pull/1648 * Changelog 1648 https://github.com/FreshRSS/FreshRSS/pull/1648 * Fix whitespace (caught by Travis) --- CHANGELOG.md | 1 + CREDITS.md | 3 +- app/i18n/cz/gen.php | 1 + app/i18n/de/gen.php | 1 + app/i18n/en/gen.php | 1 + app/i18n/es/gen.php | 1 + app/i18n/fr/gen.php | 1 + app/i18n/it/gen.php | 1 + app/i18n/kr/gen.php | 1 + app/i18n/nl/gen.php | 1 + app/i18n/pt-br/admin.php | 181 ++++++++++++++++++++++++++++++++++++++++++ app/i18n/pt-br/conf.php | 174 +++++++++++++++++++++++++++++++++++++++++ app/i18n/pt-br/feedback.php | 109 ++++++++++++++++++++++++++ app/i18n/pt-br/gen.php | 186 ++++++++++++++++++++++++++++++++++++++++++++ app/i18n/pt-br/index.php | 61 +++++++++++++++ app/i18n/pt-br/install.php | 119 ++++++++++++++++++++++++++++ app/i18n/pt-br/sub.php | 62 +++++++++++++++ app/i18n/ru/gen.php | 1 + app/i18n/tr/gen.php | 1 + app/i18n/zh-cn/gen.php | 1 + 20 files changed, 906 insertions(+), 1 deletion(-) create mode 100644 app/i18n/pt-br/admin.php create mode 100644 app/i18n/pt-br/conf.php create mode 100644 app/i18n/pt-br/feedback.php create mode 100644 app/i18n/pt-br/gen.php create mode 100644 app/i18n/pt-br/index.php create mode 100644 app/i18n/pt-br/install.php create mode 100644 app/i18n/pt-br/sub.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f126373c..804631b7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ * New command `./cli/update-user` to update user settings [#1600](https://github.com/FreshRSS/FreshRSS/issues/1600) * I18n * Korean [#1578](https://github.com/FreshRSS/FreshRSS/pull/1578) + * Portuguese (Brazilian) [#1648](https://github.com/FreshRSS/FreshRSS/pull/1648) * Fix month abbreviations [#1560](https://github.com/FreshRSS/FreshRSS/issues/1560) * Bug fixing * Fix API compatibility bug between PostgreSQL and EasyRSS [#1603](https://github.com/FreshRSS/FreshRSS/pull/1603) diff --git a/CREDITS.md b/CREDITS.md index 17fc490ab..cbbef73d6 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -16,6 +16,7 @@ People are sorted by name so please keep this order. * [Crupuk](https://github.com/Crupuk): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Crupuk) * [Damstre](https://github.com/Damstre): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Damstre) * [danc](https://github.com/danc): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=danc), [Web](http://tintouli.free.fr/) +* [David Souza](https://github.com/araujo0205): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:araujo0205), [Web](http://davidsouza.tech/) * [dswd](https://github.com/dswd): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:dswd) * [ealdraed](https://github.com/ealdraed): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=ealdraed) * [Frans de Jonge](https://github.com/Frenzie): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Frenzie), [Web](http://fransdejonge.com/) @@ -34,6 +35,7 @@ People are sorted by name so please keep this order. * [Marcus Rohrmoser](https://github.com/mro): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=mro), [Web](http://mro.name/~me) * [Marien Fressinaud](https://github.com/marienfressinaud): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=marienfressinaud), [Web](https://marienfressinaud.fr/) * [Melvyn Laïly](https://github.com/yaurthek): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=yaurthek), [Web](http://x2a.yt/) +* [MSZ](https://github.com/mszkb): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=mszkb) * [Nicolas Elie](https://github.com/nicolaselie): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=nicolaselie) * [Nicolas Lœuillet](https://github.com/nicosomb): [contributions](https://github.com/FreshRSS/documentation/commits?author=nicosomb), [Web](http://www.loeuillet.org/) * [plopoyop](https://github.com/plopoyop): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=plopoyop) @@ -47,4 +49,3 @@ People are sorted by name so please keep this order. * [Thomas Citharel](https://github.com/tcitworld): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:tomgue), [Web](https://www.tcit.fr/) * [tomgue](https://github.com/tomgue): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=tomgue) * [Wanabo](https://github.com/Wanabo): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Wanabo) -* [mszkb](https://github.com/mszkb): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=mszkb) diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index f243745d0..a9c7dc875 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index c6b659f27..43d0a2c05 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 29acfaf3c..095eb17d3 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index e2ce7e8a1..68fdaf429 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 759ceb16b..16935c3c4 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index d795a5e08..ae39d7324 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index 161b80894..35d5e8143 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index df62620a0..1617936ab 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/pt-br/admin.php b/app/i18n/pt-br/admin.php new file mode 100644 index 000000000..1076534b2 --- /dev/null +++ b/app/i18n/pt-br/admin.php @@ -0,0 +1,181 @@ + array( + 'allow_anonymous' => 'Permitir a leitura anónima dos artidos pelo usuário padrão (%s)', + 'allow_anonymous_refresh' => 'Permitir atualização anónima dos artigos', + 'api_enabled' => 'Permitir acesso à API (Necessáiro para aplicativos móveis)', + 'form' => 'Formulário Web(traditional, Necessita de JavaScript)', + 'http' => 'HTTP (Para usuários avançados com HTTPS)', + 'none' => 'Nenhum (Perigoso)', + 'title' => 'Autenticação', + 'title_reset' => 'Reset autenticação', + 'token' => 'Token de autenticação ', + 'token_help' => 'Permitir acesso a saída RSS para o usuário padrão sem autenticação', + 'type' => 'Método de autenticação', + 'unsafe_autologin' => 'Permitir login automática insegura usando o seguinte formato: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Verifique as permissões no diretório ./data/cache. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório cache estão corretos.', + ), + 'categories' => array( + 'nok' => 'Tabela Category está configurada incorretamente.', + 'ok' => 'Tabela Category está ok.', + ), + 'connection' => array( + 'nok' => 'Conexão ao banco de dados não pode ser estabelecida.', + 'ok' => 'Conexão ao banco de dados está ok.', + ), + 'ctype' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', + 'ok' => 'Você tem a biblioteca necessária para verificação do tipo de caractere (ctype).', + ), + 'curl' => array( + 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', + 'ok' => 'Você tem a biblioteca cURL.', + ), + 'data' => array( + 'nok' => 'Verifique as permissões no diretório ./data. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório data estão corretos.', + ), + 'database' => 'Instalação do banco de dados', + 'dom' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessária para navegar pelo DOM (php-xml).', + 'ok' => 'Você tem a biblioteca necessária para navegar pelo DOM.', + ), + 'entries' => array( + 'nok' => 'Tabela Entry está configurada incorretamente.', + 'ok' => 'Tabela Entry está ok.', + ), + 'favicons' => array( + 'nok' => 'Verifique as permissões no diretório ./data/favicons. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório favicons estão corretos.', + ), + 'feeds' => array( + 'nok' => 'Tabela Feed está configurada incorretamente.', + 'ok' => 'Tabela Feed está ok.', + ), + 'fileinfo' => array( + 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', + 'ok' => 'Você tem a biblioteca fileinfo.', + ), + 'files' => 'Instalação de arquivos', + 'json' => array( + 'nok' => 'Não foi possível encontrar JSON (php5-json).', + 'ok' => 'Você tem a extensão JSON.', + ), + 'minz' => array( + 'nok' => 'Não foi possível encontrar o framework Minz.', + 'ok' => 'Você tem o framework Minz.', + ), + 'pcre' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', + 'ok' => 'Você tem a biblioteca necessária para expressões regulares (php-pcre).', + ), + 'pdo' => array( + 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'Você tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + '_' => 'Instação do PHP', + 'nok' => 'Sua versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', + 'ok' => 'Sua versão do PHP é %s, que é compatível com o FreshRSS.', + ), + 'tables' => array( + 'nok' => 'Há uma ou mais tabelas inexistentes no banco de dados.', + 'ok' => 'As tabelas apropriadas existem no banco de dados.', + ), + 'title' => 'Verificação de instalação', + 'tokens' => array( + 'nok' => 'Verifique as permissões no diretório ./data/tokens. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório tokens estão corretos.', + ), + 'users' => array( + 'nok' => 'Verifiquei as permissões no diretório ./data/users. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório users estão corretos.', + ), + 'zip' => array( + 'nok' => 'Não foi possível localizar a extensão ZIP (php-zip).', + 'ok' => 'Você tem a extensão ZIP.', + ), + ), + 'extensions' => array( + 'disabled' => 'Desabilitado', + 'empty_list' => 'Não há extensões instaladas', + 'enabled' => 'Habilitada', + 'no_configure_view' => 'Esta extensão não pode ser configurada.', + 'system' => array( + '_' => 'Extensões do sistema', + 'no_rights' => 'Extensões do sistema (Você não tem direitos para isto)', + ), + 'title' => 'Extensões', + 'user' => 'Extensões do usuário', + ), + 'stats' => array( + '_' => 'Estatísticas', + 'all_feeds' => 'Todos os feeds', + 'category' => 'Categoria', + 'entry_count' => 'Contagem de entrada', + 'entry_per_category' => 'Entradas por categoria', + 'entry_per_day' => 'Entradas por dia (últimos 30 dias)', + 'entry_per_day_of_week' => 'Por dia da semana(média: %.2f mensagens)', + 'entry_per_hour' => 'Por hora (média: %.2f mensagens)', + 'entry_per_month' => 'Por mês(média: %.2f mensagens)', + 'entry_repartition' => 'Repartição de entradas', + 'feed' => 'Feed', + 'feed_per_category' => 'Feeds por categoria', + 'idle' => 'Feeds inativos', + 'main' => 'Estatísticas principais', + 'main_stream' => 'Stream principal', + 'menu' => array( + 'idle' => 'Feeds inativos', + 'main' => 'Estatísticas principais', + 'repartition' => 'Repartição de artigos', + ), + 'no_idle' => 'Não há nenhum feed inativo!', + 'number_entries' => '%d artigos', + 'percent_of_total' => '%% do total', + 'repartition' => 'Repartição de artigos', + 'status_favorites' => 'Favoritos', + 'status_read' => 'Lido', + 'status_total' => 'Total', + 'status_unread' => 'Não lidos', + 'title' => 'Estatísticas', + 'top_feed' => 'Top10 feeds', + ), + 'system' => array( + '_' => 'Configuração do sistema', + 'auto-update-url' => 'URL do servidor para atualização automática', + 'instance-name' => 'Nome da instância', + 'max-categories' => 'Limite de categorias por usuário', + 'max-feeds' => 'Limite de Feeds por usuário', + 'registration' => array( + 'help' => '0 significa que não há limite para a conta', + 'number' => 'Máximo número de contas', + ), + ), + 'update' => array( + '_' => 'Atualização do sistema', + 'apply' => 'Aplicar', + 'check' => 'Buscar por novas atualizações', + 'current_version' => 'Sua versão do FreshRSS é %s.', + 'last' => 'Última verificação: %s', + 'none' => 'Nenhuma atualização para se aplicar', + 'title' => 'Sistema de atualização', + ), + 'user' => array( + 'articles_and_size' => '%s artigos (%s)', + 'create' => 'Criar novo usuário', + 'language' => 'Idioma', + 'number' => 'Há %d conta criada', + 'numbers' => 'Há %d contas criadas', + 'password_form' => 'Senha
    (para o login pelo método do formulário)', + 'password_format' => 'Ao menos 7 caracteres', + 'title' => 'Gerenciar usuários', + 'user_list' => 'Lista de usuários', + 'username' => 'Usuário', + 'users' => 'Usuários', + ), +); diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php new file mode 100644 index 000000000..4eaf599db --- /dev/null +++ b/app/i18n/pt-br/conf.php @@ -0,0 +1,174 @@ + array( + '_' => 'Arquivar', + 'advanced' => 'Avançado', + 'delete_after' => 'Remover artigos depois', + 'help' => 'Mais opções estão disponíveis nas configurações individuais do feed', + 'keep_history_by_feed' => 'Número mínimo de artigos para deixar no feed', + 'optimize' => 'Otimizar banco de dados', + 'optimize_help' => 'Faça ocasionalmente para reduzir o tamanho do banco de dados', + 'purge_now' => 'Purge agora', + 'title' => 'Arquivar', + 'ttl' => 'Não atualize automaticamente mais frequente que', + ), + 'display' => array( + '_' => 'Exibição', + 'icon' => array( + 'bottom_line' => 'Linha inferior', + 'entry' => 'Ícones de artigos', + 'publication_date' => 'Data da publicação', + 'related_tags' => 'Tags relacionadas', + 'sharing' => 'Compartilhar', + 'top_line' => 'Linha superior', + ), + 'language' => 'Ídioma', + 'notif_html5' => array( + 'seconds' => 'segundos (0 significa sem timeout)', + 'timeout' => 'Notificação em HTML5 de timeout', + ), + 'theme' => 'Tema', + 'title' => 'Exibição', + 'width' => array( + 'content' => 'Largura do conteúdo', + 'large' => 'Largo', + 'medium' => 'Médio', + 'no_limit' => 'Sem lmite', + 'thin' => 'Fino', + ), + ), + 'query' => array( + '_' => 'Queries do usuário', + 'deprecated' => 'Esta não é mais válida. A categoria ou feed relacionado foi deletado.', + 'filter' => 'Filtro aplicado:', + 'get_all' => 'Mostrar todos os artigos', + 'get_category' => 'Visualizar "%s" categoria', + 'get_favorite' => 'Visualizar artigos favoritos', + 'get_feed' => 'Visualizar "%s" feed', + 'no_filter' => 'Sem filtro', + 'none' => 'Você não criou nenhuma query de usuário ainda.', + 'number' => 'Query n°%d', + 'order_asc' => 'Exibir artigos mais antigos primeiro', + 'order_desc' => 'Exibir artigos mais novos primeiro', + 'search' => 'Busca por "%s"', + 'state_0' => 'Exibir todos os artigos', + 'state_1' => 'Exibir artigos lidos', + 'state_2' => 'Exibir artigos não lidos', + 'state_3' => 'Exibir todos os artigos', + 'state_4' => 'Exibir artigos favoritos', + 'state_5' => 'Exibir artigos favoritos lidos', + 'state_6' => 'Exibir artigos favoritos não lidos', + 'state_7' => 'Exibir artigos favoritos', + 'state_8' => 'Exibir artigos que não são favoritos', + 'state_9' => 'Exibir artigos que não são favoritos lidos', + 'state_10' => 'Exibir artigos que não são favoritos não lidos', + 'state_11' => 'Exibir artigos que não são favoritos', + 'state_12' => 'Exibir todos os artigos', + 'state_13' => 'Exibir artigos lidos', + 'state_14' => 'Exibir artigos não lidos', + 'state_15' => 'Exibir todos os artigos', + 'title' => 'Queries de usuários', + ), + 'profile' => array( + '_' => 'Gerenciamento de perfil', + 'delete' => array( + '_' => 'Remover conta', + 'warn' => 'Sua conta e todos os dados relacionados serão removidos.', + ), + 'password_api' => 'Senha da API
    (p.s., para aplicativos móveis)', + 'password_form' => 'Senha
    (para o método de formulário web)', + 'password_format' => 'Ao menos 7 caracteres', + 'title' => 'Perfil', + ), + 'reading' => array( + '_' => 'Leitura', + 'after_onread' => 'Depois de "marcar todos como lido",', + 'articles_per_page' => 'Número de artigos por página', + 'auto_load_more' => 'Carregar mais artigos no final da página', + 'auto_remove_article' => 'Esconder artigos depois de lidos', + 'mark_updated_article_unread' => 'Marcar artigos atualizados como não lidos', + 'confirm_enabled' => 'Exibir uma caixa de diálogo de confirmação quando acionar "marcar todos como lido"', + 'display_articles_unfolded' => 'Mostrar aritogs abertos por padrão', + 'display_categories_unfolded' => 'Mostrar artigos fechados por padrão', + 'hide_read_feeds' => 'Esconder categorias e feeds com nenhum artigo não lido (não funciona com a configuração "Mostrar todos os artigos”)', + 'img_with_lazyload' => 'Utilizar o modo "lazy load" para carregar as imagens', + 'sides_close_article' => 'Clicando fora da área do texto do artigo fecha o mesmo', + 'jump_next' => 'Vá para o próximo irmão não lido (feed ou categoria)', + 'number_divided_when_reader' => 'Dividido por 2 no modo de leitura .', + 'read' => array( + 'article_open_on_website' => 'quando o artigo é aberto no site original', + 'article_viewed' => 'Quando o artigo é visualizado', + 'scroll' => 'enquando scrolling', + 'upon_reception' => 'ao receber um artigo', + 'when' => 'Marcar artigo como lido…', + ), + 'show' => array( + '_' => 'Artigos para exibir', + 'adaptive' => 'Ajustar visualização', + 'all_articles' => 'Exibir todos os artigos', + 'unread' => 'Exibir apenas não lido', + ), + 'sort' => array( + '_' => 'Ordem de visualização', + 'newer_first' => 'Novos primeiro', + 'older_first' => 'Antigos primeiro', + ), + 'sticky_post' => 'Coloque o artigo no topo quando aberto', + 'title' => 'Lendo', + 'view' => array( + 'default' => 'Visualização padrão', + 'global' => 'Visualização global', + 'normal' => 'Visualização normal', + 'reader' => 'Visualização de leitura', + ), + ), + 'sharing' => array( + '_' => 'Compartilhando', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'more_information' => 'Mais informação', + 'print' => 'Imprimir', + 'shaarli' => 'Shaarli', + 'share_name' => 'Nome de visualização para compartilhar', + 'share_url' => 'URL utilizada para compartilhar', + 'title' => 'Compartilhando', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'shortcut' => array( + '_' => 'Atalhos', + 'article_action' => 'Ações no artigo', + 'auto_share' => 'Compartilhar', + 'auto_share_help' => 'Se há apenas um modo de compartilhamento, ele é usado. Caso contrário, serão acessíveis pelo seu número.', + 'close_dropdown' => 'Fechar menus', + 'collapse_article' => 'Fechar', + 'first_article' => 'Ir para o primeiro artigo', + 'focus_search' => 'Acessar a caixa de busca', + 'help' => 'Mostrar documentação', + 'javascript' => 'JavaScript deve ser habilitado para utilizar atalhos', + 'last_article' => 'Ir para o último artigo', + 'load_more' => 'Carregar mais artigos', + 'mark_read' => 'Marcar como lido', + 'mark_favorite' => 'Marcar como favorito', + 'navigation' => 'Navegação', + 'navigation_help' => 'Com o modificador "Shift", atalhos de navegação aplicam aos feeds.
    Com o "Alt" modificador, atalhos de navegação aplicam as categorias.', + 'next_article' => 'Pule para o próximo artigo', + 'other_action' => 'Outras ações', + 'previous_article' => 'Pule para o artigo anterior', + 'see_on_website' => 'Visualize o site original', + 'shift_for_all_read' => '+ shift para marcar todos os artigos como lido', + 'title' => 'Atalhos', + 'user_filter' => 'Acesse filtros de usuário', + 'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.', + ), + 'user' => array( + 'articles_and_size' => '%s artigos (%s)', + 'current' => 'Usuário atual', + 'is_admin' => 'é administrador', + 'users' => 'Usuários', + ), +); diff --git a/app/i18n/pt-br/feedback.php b/app/i18n/pt-br/feedback.php new file mode 100644 index 000000000..0959ad38e --- /dev/null +++ b/app/i18n/pt-br/feedback.php @@ -0,0 +1,109 @@ + array( + 'optimization_complete' => 'Otimização Completa', + ), + 'access' => array( + 'denied' => 'Você não tem permissão para acessar esta página', + 'not_found' => 'VocÊ está buscando por uma página que não existe', + ), + 'auth' => array( + 'form' => array( + 'not_set' => 'Um problema ocorreu durante o sistema de configuração para autenticação. Por favor tente mais tarde.', + 'set' => 'Formulário é agora seu sistema de autenticação padrão.', + ), + 'login' => array( + 'invalid' => 'Login está incorreto', + 'success' => 'Vocé está conectado', + ), + 'logout' => array( + 'success' => 'Você está desconectado', + ), + 'no_password_set' => 'A senha do administrador não foi definida. Este recurso não está disponível.', + ), + 'conf' => array( + 'error' => 'Um erro ocorreu durante o salvamento das configurações', + 'query_created' => 'Query "%s" foi criada.', + 'shortcuts_updated' => 'Atalhos foram criados', + 'updated' => 'Configuração foi atualizada', + ), + 'extensions' => array( + 'already_enabled' => '%s já está habilitado', + 'disable' => array( + 'ko' => '%s não pode ser desabilitado. verifique os logs do FressRSS para detalhes.', + 'ok' => '%s agora está desabilitado', + ), + 'enable' => array( + 'ko' => '%s não pode ser habilitado. verifique os logs do FressRSS para detalhes.', + 'ok' => '%s agora está habilitado', + ), + 'no_access' => 'Você não tem acesso ao %s', + 'not_enabled' => '%s não está habilitado', + 'not_found' => '%s não existe', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'extensão ZIP não está presente em seu servidor. Por favor tente exportar os arquivos um por vez.', + 'feeds_imported' => 'Seus feeds foram importados e serão atualizados agora', + 'feeds_imported_with_errors' => 'Seus feeds foram importados, mas alguns erros ocorreram', + 'file_cannot_be_uploaded' => 'Arquivo não pôde ser enviado', + 'no_zip_extension' => 'extensão ZIP não está presente em seu servidor.', + 'zip_error' => 'Um erro ocorreu durante a importação do arquivo ZIP.', + ), + 'sub' => array( + 'actualize' => 'Atualizando', + 'category' => array( + 'created' => 'Categoria %s foi criada.', + 'deleted' => 'Categoria foi deletada.', + 'emptied' => 'Categoria foi esvaziada', + 'error' => 'Categoria não pode ser atualizada', + 'name_exists' => 'Este nome de categoria já existe.', + 'no_id' => 'Você precisa especificar um id para a categoria.', + 'no_name' => 'Nome da categoria não pode ser vazio.', + 'not_delete_default' => 'Você não pode deletar uma categoria vazia!', + 'not_exist' => 'A categoria não existe!', + 'over_max' => 'Você atingiu seu limite de categorias (%d)', + 'updated' => 'Categoria foi atualizada.', + ), + 'feed' => array( + 'actualized' => '%s foi atualizado', + 'actualizeds' => 'RSS feeds foi atualizado', + 'added' => 'RSS feed %s foi adicionado', + 'already_subscribed' => 'Você já está inscrito no %s', + 'deleted' => 'o Feed foi deletado', + 'error' => 'O feed não pode ser atualizado', + 'internal_problem' => 'O RSS feed não pôde ser adicionado. Verifique os FressRSS logs para detalhes.', + 'invalid_url' => 'URL %s é inválida', + 'marked_read' => 'Feeds foram marcados como lidos', + 'n_actualized' => '%d feeds foram atualizados', + 'n_entries_deleted' => '%d artigos foram deletados', + 'no_refresh' => 'Não há feed para atualizar…', + 'not_added' => '%s não pode ser atualizado', + 'over_max' => 'Você atingiu seu limite de feeds (%d)', + 'updated' => 'Feed foram atualizados', + ), + 'purge_completed' => 'Limpeza completa (%d artigos deletados)', + ), + 'update' => array( + 'can_apply' => 'FreshRSS será atualizado para a versão %s.', + 'error' => 'O processo de atualização encontrou um erro: %s', + 'file_is_nok' => 'Nova versão %s disponível, mas verifique as permissões no diretório %s. Servidor HTTP deve ter direitos para escrever dentro', + 'finished' => 'Atualização completa!', + 'none' => 'Nenhuma atualização para aplicar', + 'server_not_found' => 'Servidor de atualização não pôde ser localizado. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'Usuário %s foi criado', + 'error' => 'Usuário %s não pode ser criado', + ), + 'deleted' => array( + '_' => 'Usuário %s foi deletado', + 'error' => 'Usuário %s não pode ser deletado', + ), + ), + 'profile' => array( + 'error' => 'Your profile cannot be modified', + 'updated' => 'Your profile has been modified', + ), +); diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php new file mode 100644 index 000000000..18562deeb --- /dev/null +++ b/app/i18n/pt-br/gen.php @@ -0,0 +1,186 @@ + array( + 'actualize' => 'Atualizar', + 'back_to_rss_feeds' => '← Volte para o seu feeds RSS', + 'cancel' => 'Cancelar', + 'create' => 'Criar', + 'disable' => 'Desabilitar', + 'empty' => 'Vazio', + 'enable' => 'Habilitar', + 'export' => 'Exportar', + 'filter' => 'Filtrar', + 'import' => 'Importar', + 'manage' => 'Gerenciar', + 'mark_read' => 'Marcar como lido', + 'mark_favorite' => 'Marcar como favorito', + 'remove' => 'Remover', + 'see_website' => 'Ver o site', + 'submit' => 'Enviar', + 'truncate' => 'Deletar todos os artigos', + ), + 'auth' => array( + 'email' => 'Endereço de e-mail', + 'keep_logged_in' => 'Mantenha logado por (%s days)', + 'login' => 'Login', + 'logout' => 'Logout', + 'password' => array( + '_' => 'Senha', + 'format' => 'Ao menos 7 caracteres', + ), + 'registration' => array( + '_' => 'Nova conta', + 'ask' => 'Criar novoa conta?', + 'title' => 'Criação de conta', + ), + 'reset' => 'Reset autenticação', + 'username' => array( + '_' => 'Usuário', + 'admin' => 'Usuário administrador', + 'format' => 'máximo 16 caracteres alphanumericos', + ), + ), + 'date' => array( + 'Apr' => '\\A\\b\\r\\i\\l', + 'Aug' => '\\A\\g\\o\\s\\t\\o', + 'Dec' => '\\D\\e\\z\\e\\m\\b\\r\\o', + 'Feb' => '\\F\\e\\v\\e\\r\\e\\i\\r\\o', + 'Jan' => '\\J\\a\\n\\e\\i\\r\\o', + 'Jul' => '\\J\\u\\l\\h\\o', + 'Jun' => '\\J\\u\\n\\h\\o', + 'Mar' => '\\M\\a\\r\\ç\\o', + 'May' => '\\M\\a\\i\\o', + 'Nov' => '\\N\\o\\v\\e\\m\\b\\r\\o', + 'Oct' => '\\O\\u\\t\\u\\b\\r\\o', + 'Sep' => '\\S\\e\\t\\e\\m\\b\\r\\o', + 'apr' => 'abr', + 'april' => 'Abr', + 'aug' => 'ago', + 'august' => 'Ago', + 'before_yesterday' => 'Antes de ontem', + 'dec' => 'dez', + 'december' => 'Dez', + 'feb' => 'fev', + 'february' => 'Fev', + 'format_date' => 'j \\d\\e %s \\d\\e Y', + 'format_date_hour' => 'j \\d\\e %s \\d\\e Y\\, H\\:i', + 'fri' => 'Sex', + 'jan' => 'jan', + 'january' => 'Jan', + 'jul' => 'jul', + 'july' => 'Jul', + 'jun' => 'jun', + 'june' => 'Jun', + 'last_3_month' => 'Últimos três meses', + 'last_6_month' => 'Últimos seis meses', + 'last_month' => 'Últimos mês', + 'last_week' => 'Última semana', + 'last_year' => 'Último ano', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'Mai', + 'mon' => 'Seg', + 'month' => 'meses', + 'nov' => 'nov', + 'november' => 'Nov', + 'oct' => 'out', + 'october' => 'Out', + 'sat' => 'Sab', + 'sep' => 'set', + 'september' => 'Set', + 'sun' => 'Dom', + 'thu' => 'Qui', + 'today' => 'Hoje', + 'tue' => 'Ter', + 'wed' => 'Qua', + 'yesterday' => 'Ontem', + ), + 'freshrss' => array( + '_' => 'FreshRSS', + 'about' => 'Sobre FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Categoria vazia', + 'confirm_action' => 'Você tem certeza que deseja efetuar esta ação? Ela não poderá ser cancelada!', + 'confirm_action_feed_cat' => 'Você tem certeza que deseja efetuar esta ação ? Você irá perder favoritos e queries de usuários. Não poderá ser cancelado!', + 'feedback' => array( + 'body_new_articles' => 'Há %%d novos artigos para ler no FreshRSS.', + 'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de conexão com a internet.', + 'title_new_articles' => 'FreshRSS: novos artigos!', + ), + 'new_article' => 'Há novos artigos disponíveis, clique para atualizar a página.', + 'should_be_activated' => 'JavaScript precisa estar ativo', + ), + 'lang' => array( + 'cz' => 'Čeština', + 'de' => 'Deutsch', + 'en' => 'English', + 'fr' => 'Français', + 'it' => 'Italiano', + 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', + 'ru' => 'Русский', + 'tr' => 'Türkçe', + 'zh-cn' => '简体中文' + ), + 'menu' => array( + 'about' => 'Sobre', + 'admin' => 'Administração', + 'archiving' => 'Arquivar', + 'authentication' => 'Autenticação', + 'check_install' => 'Verificação de instalação', + 'configuration' => 'Configuração', + 'display' => 'Visualização', + 'extensions' => 'Extensões', + 'logs' => 'Logs', + 'queries' => 'Queries de usuário', + 'reading' => 'Leitura', + 'search' => 'Procurar por palavras ou #tags', + 'sharing' => 'Compartilhamento', + 'shortcuts' => 'Atalhos', + 'stats' => 'Estatísticas', + 'system' => 'Configuração do sistema', + 'update' => 'Atualização', + 'user_management' => 'Gerenciamento de usuários', + 'user_profile' => 'Perfil', + ), + 'pagination' => array( + 'first' => 'Primeiro', + 'last' => 'Último', + 'load_more' => 'Carregar mais artigos', + 'mark_all_read' => 'Marcar todos como lidos', + 'next' => 'Próximo', + 'nothing_to_load' => 'Não há mais artigos', + 'previous' => 'Anterior', + ), + 'share' => array( + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'movim' => 'Movim', + 'print' => 'Imprimir', + 'shaarli' => 'Shaarli', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', + 'jdh' => 'Journal du hacker', + 'Known' => 'Known based sites', + 'gnusocial' => 'GNU social', + ), + 'short' => array( + 'attention' => 'Atencão!', + 'blank_to_disable' => 'Deixe em branco para desativar', + 'by_author' => 'Por %s', + 'by_default' => 'Por padrão', + 'damn' => 'Buumm!', + 'default_category' => 'Sem categoria', + 'no' => 'Não', + 'not_applicable' => 'Não disponível', + 'ok' => 'Ok!', + 'or' => 'ou', + 'yes' => 'Sim', + ), +); diff --git a/app/i18n/pt-br/index.php b/app/i18n/pt-br/index.php new file mode 100644 index 000000000..610f00840 --- /dev/null +++ b/app/i18n/pt-br/index.php @@ -0,0 +1,61 @@ + array( + '_' => 'Sobre', + 'agpl3' => 'AGPL 3', + 'bugs_reports' => 'Reportar Bugs', + 'credits' => 'Créditos', + 'credits_content' => 'Alguns elementos de design vieram do Bootstrap Embora FreshRRS não utiliza este framework. Ícones vieram do GNOME project. Open Sans font police foi criada por Steve Matteson. FreshRSS é baseado no Minz, um framework PHP.', + 'freshrss_description' => 'FreshRSS é um RSS feeds aggregator para um host próprio como o Kriss Feed ou Leed. É leve e fácil de utilizar enquanto é uma ferramenta poderosa e configurável. ', + 'github' => 'no Github', + 'license' => 'licença', + 'project_website' => 'Site do projeto', + 'title' => 'Sobre', + 'version' => 'Versão', + 'website' => 'Site', + ), + 'feed' => array( + 'add' => 'Você pode adicionar alguns feeds.', + 'empty' => 'Não há nenhum artigo para mostrar.', + 'rss_of' => 'RSS feed do %s', + 'title' => 'Seus RSS feeds', + 'title_global' => 'Visualização Global', + 'title_fav' => 'Seus favoritos', + ), + 'log' => array( + '_' => 'Logs', + 'clear' => 'Limpar logs', + 'empty' => 'Arquivo de log está vazio', + 'title' => 'Logs', + ), + 'menu' => array( + 'about' => 'Sobre o FreshRSS', + 'add_query' => 'Adicionar uma query', + 'before_one_day' => 'Antes de um dia', + 'before_one_week' => 'Antes de uma semana', + 'favorites' => 'Favoritos (%s)', + 'global_view' => 'Visualização global', + 'main_stream' => 'Stream principal', + 'mark_all_read' => 'Marcar todos como lidos', + 'mark_cat_read' => 'Marcar categoria como lida', + 'mark_feed_read' => 'Marcar feed com lido', + 'newer_first' => 'Novos primeiro', + 'non-starred' => 'Mostrar todos, exceto favoritos', + 'normal_view' => 'visualização normal', + 'older_first' => 'Antigos primeiro', + 'queries' => 'Queries do usuário', + 'read' => 'Mostrar apenas lidos', + 'reader_view' => 'Visualização de leitura', + 'rss_view' => 'RSS feed', + 'search_short' => 'Buscar', + 'starred' => 'Mostrar apenas os favoritos', + 'stats' => 'Estatísticas', + 'subscription' => 'Gerenciamento de inscrições', + 'unread' => 'Mostrar apenas os não lidos', + ), + 'share' => 'Compartilhar', + 'tag' => array( + 'related' => 'Tags relacionadas', + ), +); diff --git a/app/i18n/pt-br/install.php b/app/i18n/pt-br/install.php new file mode 100644 index 000000000..3ca5fb854 --- /dev/null +++ b/app/i18n/pt-br/install.php @@ -0,0 +1,119 @@ + array( + 'finish' => 'Instalação completa', + 'fix_errors_before' => 'Por favor resolva os erros antes de ir para o próximo passo.', + 'keep_install' => 'Mantenha as configurações anteriores', + 'next_step' => 'Vá para o próximo passo', + 'reinstall' => 'Reinstale o FreshRSS', + ), + 'auth' => array( + 'form' => 'Formulário web(tradicional, necessita JavaScript)', + 'http' => 'HTTP (Para usuários avançados com HTTPS)', + 'none' => 'None (perigoso)', + 'password_form' => 'Senha
    (Para o método do login pelo formulário)', + 'password_format' => 'Ao menos 7 caracteres', + 'type' => 'Método de autenticação', + ), + 'bdd' => array( + '_' => 'Banco de dados', + 'conf' => array( + '_' => 'Configuração do banco de dados', + 'ko' => 'Verifique as informações do seu banco de dados.', + 'ok' => 'Configurações do banco de dados foram salvas.', + ), + 'host' => 'Host', + 'prefix' => 'Prefixo da tabela', + 'password' => 'Senha do banco de dados', + 'type' => 'Tipo do banco de dados', + 'username' => 'Usuário do banco de dados', + ), + 'check' => array( + '_' => 'Verificações', + 'already_installed' => 'Verificamos que o FreshRSS já está instalado!', + 'cache' => array( + 'nok' => 'Verifique as permissões no diretório ./data/cache. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório cache estão corretos.', + ), + 'ctype' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', + 'ok' => 'Você tem a biblioteca necessária para verificação do tipo de caractere (ctype).', + ), + 'curl' => array( + 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', + 'ok' => 'Você tem a biblioteca cURL.', + ), + 'data' => array( + 'nok' => 'Verifique as permissões no diretório ./data. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório data estão corretos.', + ), + 'dom' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessária para navegar pelo DOM (php-xml).', + 'ok' => 'Você tem a biblioteca necessária para navegar pelo DOM.', + ), + 'favicons' => array( + 'nok' => 'Verifique as permissões no diretório ./data/favicons. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório favicons estão corretos.', + ), + 'fileinfo' => array( + 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', + 'ok' => 'Você tem a biblioteca fileinfo.', + ), + 'http_referer' => array( + 'nok' => 'Por favor verifique se você não está alterando seu HTTP REFERER.', + 'ok' => 'Seu HTTP REFERER é conhecido e corresponde ao seu servidor.', + ), + 'json' => array( + 'nok' => 'Não foi possível encontrar JSON (php5-json).', + 'ok' => 'Você tem a extensão JSON.', + ), + 'minz' => array( + 'nok' => 'Não foi possível encontrar o framework Minz.', + 'ok' => 'Você tem o framework Minz.', + ), + 'pcre' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', + 'ok' => 'Você tem a biblioteca necessária para expressões regulares (php-pcre).', + ), + 'pdo' => array( + 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'Você tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + 'nok' => 'Sua versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', + 'ok' => 'Sua versão do PHP é %s, que é compatível com o FreshRSS.', + ), + 'users' => array( + 'nok' => 'Verifiquei as permissões no diretório ./data/users. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório users estão corretos.', + ), + 'xml' => array( + 'nok' => 'Não foi possível encontrar a biblioteca necessária para parse o XML.', + 'ok' => 'Você tem a biblioteca necessária para parse o XML.', + ), + ), + 'conf' => array( + '_' => 'Configurações gerais', + 'ok' => 'Configurações gerais foram salvas.', + ), + 'congratulations' => 'Parabéns!', + 'default_user' => 'Usuário do usuário padrão (máximo de 16 caracteres alphanumericos)', + 'delete_articles_after' => 'Remover artigos depois', + 'fix_errors_before' => 'Por favor solucione os erros antes de ir para o próximo passo.', + 'javascript_is_better' => 'FreshRSS é mais agradável com o JavaScript ativo', + 'js' => array( + 'confirm_reinstall' => 'Você irá perder suas configurações anteriores ao reinstalar o FreshRSS. Você está certo que deseja continuar?', + ), + 'language' => array( + '_' => 'Idioma', + 'choose' => 'Escolhar o idioma para o FreshRSS', + 'defined' => 'Idioma foi definido.', + ), + 'not_deleted' => 'Algo deu errado; você deve deletar o arquivo %s manualmente.', + 'ok' => 'O processo de instalação foi um sucesso.', + 'step' => 'passo %d', + 'steps' => 'Passos', + 'title' => 'Instalação · FreshRSS', + 'this_is_the_end' => 'Este é o final', +); diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php new file mode 100644 index 000000000..61a80d41e --- /dev/null +++ b/app/i18n/pt-br/sub.php @@ -0,0 +1,62 @@ + array( + '_' => 'Categoria', + 'add' => 'Adicionar uma categoria', + 'empty' => 'Categoria vazia', + 'new' => 'Nova categoria', + ), + 'feed' => array( + 'add' => 'Adicionar um RSS feed', + 'advanced' => 'Avançado', + 'archiving' => 'Arquivar', + 'auth' => array( + 'configuration' => 'Login', + 'help' => 'Permite acesso a feeds RSS protegidos por HTTP', + 'http' => 'Autenticação HTTP', + 'password' => 'Senha HTTP', + 'username' => 'Usuário HTTP', + ), + 'css_help' => 'Retorna RSS feeds truncados (atenção, requer mais tempo!)', + 'css_path' => 'Caminho do CSS do artigo no site original', + 'description' => 'Descrição', + 'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.', + 'error' => 'Este feed encontra-se com problema. Por favor verifique se ele ainda está disponível e atualize-o.', + 'in_main_stream' => 'Mostrar na tela principal', + 'informations' => 'Informações', + 'keep_history' => 'Número mínimo de artigos para manter', + 'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como %s.', + 'no_selected' => 'Nenhum feed selecionado.', + 'number_entries' => '%d artigos', + 'stats' => 'Estatísticas', + 'think_to_add' => 'Você deve adicionar alguns feeds.', + 'title' => 'Título', + 'title_add' => 'Adicionar o RSS feed', + 'ttl' => 'Não atualize automáticamente mais que', + 'url' => 'Feed URL', + 'validator' => 'Verifique a validade do feed', + 'website' => 'URL do site', + 'pubsubhubbub' => 'Notificação instantânea com PubSubHubbub', + ), + 'import_export' => array( + 'export' => 'Exportar', + 'export_opml' => 'Exporta a lista dos feeds (OPML)', + 'export_starred' => 'Exportar seus favoritos', + 'feed_list' => 'Lista dos %s artigos', + 'file_to_import' => 'Arquivo para importar
    (OPML, JSON or ZIP)', + 'file_to_import_no_zip' => 'Arquivo para importar
    (OPML or JSON)', + 'import' => 'Importar', + 'starred_list' => 'Listar artigos favoritos', + 'title' => 'Importar / exportar', + ), + 'menu' => array( + 'bookmark' => 'Inscreva-se (FreshRSS favoritos)', + 'import_export' => 'Importar / exportar', + 'subscription_management' => 'Gerenciamento de inscrições', + ), + 'title' => array( + '_' => 'Gerenciamento de inscrições', + 'feed_management' => 'Gerenciamento dos RSS feeds', + ), +); diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index b67da4861..3a728016d 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index ad0c72f9f..81f926840 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 1cfc4ddff..a69f02b3f 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -122,6 +122,7 @@ return array( 'it' => 'Italiano', 'kr' => '한국어', 'nl' => 'Nederlands', + 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', -- cgit v1.2.3 From 128ab42227d8bd65068f3536c53c4892020c3e39 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 30 Sep 2017 09:31:31 +0200 Subject: i18 quick fix: forgot es, kr in pt-br https://github.com/FreshRSS/FreshRSS/pull/1648 --- app/i18n/pt-br/gen.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index 18562deeb..1a74e1437 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -116,8 +116,10 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'es' => 'Español', 'fr' => 'Français', 'it' => 'Italiano', + 'kr' => '한국어', 'nl' => 'Nederlands', 'pt-br' => 'Português (Brasil)', 'ru' => 'Русский', -- cgit v1.2.3 From f241fc1841df89285ecb6f124f0d70198d712b2f Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 1 Oct 2017 18:22:06 +0200 Subject: Prepare release of version 1.8.0 (#1649) https://github.com/FreshRSS/FreshRSS/milestone/24 --- CHANGELOG.md | 2 +- constants.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 804631b7f..9dbdbe960 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## 2017-XX-XX FreshRSS 1.7.1-dev +## 2017-10-01 FreshRSS 1.8.0 * Compatibility: * Minimal PHP version increased to PHP 5.3.8+ to fix sanitize bug [#1604](https://github.com/FreshRSS/FreshRSS/issues/1604) diff --git a/constants.php b/constants.php index 792c39df7..be70188e0 100644 --- a/constants.php +++ b/constants.php @@ -1,5 +1,5 @@