1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/freshrss_ynh.git synced 2024-09-03 18:36:33 +02:00

Test 1.3.2 beta installation

This commit is contained in:
Clément 2016-07-24 11:59:17 +02:00
parent fa44b8812c
commit 2e307e59d5
425 changed files with 3394 additions and 624 deletions

View file

@ -11,7 +11,7 @@
"name": "plopoyop", "name": "plopoyop",
"email": "plopoyop@gmail.com" "email": "plopoyop@gmail.com"
}, },
"multi_instance": "true", "multi_instance": "false",
"services": [ "services": [
"nginx", "nginx",
"php5-fpm", "php5-fpm",

55
sources/CHANGELOG.md Executable file → Normal file
View file

@ -1,5 +1,60 @@
# Changelog # Changelog
## 2016-06-12 FreshRSS 1.3.2-beta
* Compatibility
* Require at least PHP 5.3+ (drop PHP 5.2) [#1133](https://github.com/FreshRSS/FreshRSS/pull/1133)
* Features
* Support for MySQL 5.7+ (e.g. Ubuntu 16.04 LTS) [#1132](https://github.com/FreshRSS/FreshRSS/pull/1132)
* Speed optimization for HTTP/2 [#1133](https://github.com/FreshRSS/FreshRSS/pull/1133)
* API support for REDIRECT_* HTTP headers (fcgi) [#1128](https://github.com/FreshRSS/FreshRSS/issues/1128)
* SimplePie
* Support for feeds with invalid whitespace [#1142](https://github.com/FreshRSS/FreshRSS/issues/1142)
* Bug fixing
* Fix bug when adding feeds with passwords [#1137](https://github.com/FreshRSS/FreshRSS/pull/1137)
* Fix validator link [#1147](https://github.com/FreshRSS/FreshRSS/pull/1147)
* Fix Favicon small bugs [#1135](https://github.com/FreshRSS/FreshRSS/pull/1135)
* Security
* CSP compatibility for homepage [#1120](https://github.com/FreshRSS/FreshRSS/pull/1120)
* I18n
* Draft of Russian [#1085](https://github.com/FreshRSS/FreshRSS/pull/1085)
* Misc.
* Change default feed timeout to 15 seconds [#1146](https://github.com/FreshRSS/FreshRSS/pull/1146)
* Updated Wallabag v2 [#1150](https://github.com/FreshRSS/FreshRSS/pull/1150)
## 2016-03-11 FreshRSS 1.3.1-beta
* Security
* Added CSP `Content-Security-Policy: default-src 'self'; child-src *; frame-src *; img-src * data:; media-src *` [#1075](https://github.com/FreshRSS/FreshRSS/issues/1075), [#1114](https://github.com/FreshRSS/FreshRSS/issues/1114)
* Added `X-Content-Type-Options: nosniff` [#1116](https://github.com/FreshRSS/FreshRSS/pull/1116)
* Cookie with `Secure` tag when used over HTTPS [#1117](https://github.com/FreshRSS/FreshRSS/pull/1117)
* Limit API post input to 1MB [#1118](https://github.com/FreshRSS/FreshRSS/pull/1118)
* Features
* New list of domains for which to force HTTPS (for images, videos, iframes…) defined in `./data/force-https.default.txt` and `./data/force-https.txt` [#1083](https://github.com/FreshRSS/FreshRSS/issues/1083)
* In particular useful for privacy and to avoid mixed content errors, e.g. to see YouTube videos when FreshRSS is in HTTPS
* Add sharing with “Journal du Hacker” [#1056](https://github.com/FreshRSS/FreshRSS/pull/1056)
* UI
* Updated to jQuery 2.2.1 and changed code for auto-load on scroll [#1050](https://github.com/FreshRSS/FreshRSS/pull/1050), [#1091](https://github.com/FreshRSS/FreshRSS/pull/1091)
* I18n
* Turkish [#1073](https://github.com/FreshRSS/FreshRSS/issues/1073)
* Bug fixing
* Fixed OPML import title bug [#1048](https://github.com/FreshRSS/FreshRSS/issues/1048)
* Fixed upgrade bug with SQLite when articles were marked as unread [#1049](https://github.com/FreshRSS/FreshRSS/issues/1049)
* Fixed error when deleting feeds from statistics page [#1047](https://github.com/FreshRSS/FreshRSS/issues/1047)
* Fixed several small bugs in global and reader view [#1050](https://github.com/FreshRSS/FreshRSS/pull/1050)
* Fixed sharing bug with PHP7 [#1072](https://github.com/FreshRSS/FreshRSS/issues/1072)
* Fixed fall-back when php-json is not installed [#1092](https://github.com/FreshRSS/FreshRSS/issues/1092)
* API
* Possibility to show only read items [#1035](https://github.com/FreshRSS/FreshRSS/pull/1035)
* Misc.
* Filters `<img />` attributes `srcset` and `sizes` [#1077](https://github.com/FreshRSS/FreshRSS/issues/1077), [#1086](https://github.com/FreshRSS/FreshRSS/pull/1086)
* Implement PubSubHubbub unsubscribe responses [#1058](https://github.com/FreshRSS/FreshRSS/issues/1058)
* Restored some compatibility with PHP 5.2 [#1055](https://github.com/FreshRSS/FreshRSS/issues/1055)
* Check for extension php-xml during install [#1094](https://github.com/FreshRSS/FreshRSS/issues/1094)
* Updated the sharing with Movim [#1030](https://github.com/FreshRSS/FreshRSS/pull/1030)
## 2015-11-03 FreshRSS 1.2.0 / 1.3.0-beta ## 2015-11-03 FreshRSS 1.2.0 / 1.3.0-beta
* Features * Features

0
sources/CONTRIBUTING.md Executable file → Normal file
View file

0
sources/CREDITS.md Executable file → Normal file
View file

13
sources/README.fr.md Executable file → Normal file
View file

@ -31,14 +31,16 @@ Nous sommes une communauté amicale.
# Prérequis # Prérequis
* Serveur modeste, par exemple sous Linux ou Windows * Serveur modeste, par exemple sous Linux ou Windows
* Fonctionne même sur un Raspberry Pi avec des temps de réponse < 1s (testé sur 150 flux, 22k articles, soit 32Mo de données partiellement compressées) * 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) * Serveur Web Apache2 (recommandé), ou nginx, lighttpd (non testé sur les autres)
* PHP 5.2.1+ (PHP 5.3.7+ recommandé, et PHP 5.5+ pour les performances) (support bêta de PHP 7 avec encore meilleures performances) * PHP 5.3+ (PHP 5.3.7+ recommandé, et PHP 5.5+ pour les performances, et PHP 7+ pour dencore meilleures performances)
* Requis : [PDO_MySQL](http://php.net/pdo-mysql) ou [PDO_SQLite](http://php.net/pdo-sqlite), [cURL](http://php.net/curl), [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) * Requis : [PDO_MySQL](http://php.net/pdo-mysql) ou [PDO_SQLite](http://php.net/pdo-sqlite), [cURL](http://php.net/curl), [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)
* Recommandés : [JSON](http://php.net/json), [mbstring](http://php.net/mbstring), [zlib](http://php.net/zlib), [Zip](http://php.net/zip) * Recommandés : [iconv](http://php.net/iconv), [JSON](http://php.net/json), [mbstring](http://php.net/mbstring), [Zip](http://php.net/zip), [zlib](http://php.net/zlib)
* Inclus par défaut : [DOM](http://php.net/dom), [XML](http://php.net/xml)…
* MySQL 5.0.3+ (recommandé) ou SQLite 3.7.4+ * MySQL 5.0.3+ (recommandé) ou SQLite 3.7.4+
* Un navigateur Web récent tel Firefox, Chrome, Opera, Safari. [Internet Explorer ne fonctionne plus, mais ce sera corrigé](https://github.com/FreshRSS/FreshRSS/issues/772). * Un navigateur Web récent tel Firefox, Chrome, Opera, Safari. [Internet Explorer ne fonctionne plus, mais ce sera corrigé](https://github.com/FreshRSS/FreshRSS/issues/772).
* Fonctionne aussi sur mobile * Fonctionne aussi sur mobile
* Lentête HTTP `Referer` ne doit pas être désactivé pour pouvoir utiliser le formulaire de connexion
![Capture décran de FreshRSS](http://marienfressinaud.fr/data/images/freshrss/freshrss_default-design.png) ![Capture décran de FreshRSS](http://marienfressinaud.fr/data/images/freshrss/freshrss_default-design.png)
@ -50,6 +52,9 @@ Nous sommes une communauté amicale.
5. Tout devrait fonctionner :) En cas de problème, nhésitez pas à me contacter. 5. Tout devrait fonctionner :) En cas de problème, nhésitez pas à me contacter.
6. Des paramètres de configuration avancée peuvent être accédés depuis [config.php](./data/config.default.php). 6. Des paramètres de configuration avancée peuvent être accédés depuis [config.php](./data/config.default.php).
## Installation automatisée
[![DP deploy](https://raw.githubusercontent.com/DFabric/DPlatform-ShellCore/gh-pages/img/deploy.png)](https://dfabric.github.io/DPlatform-ShellCore)
## Exemple dinstallation complète sur Linux Debian/Ubuntu ## Exemple dinstallation complète sur Linux Debian/Ubuntu
```sh ```sh
# Si vous utilisez le serveur Web Apache (sinon il faut un autre serveur Web) # Si vous utilisez le serveur Web Apache (sinon il faut un autre serveur Web)
@ -58,7 +63,7 @@ sudo a2enmod headers expires rewrite ssl
# (optionnel) Si vous voulez un serveur de base de données MySQL # (optionnel) Si vous voulez un serveur de base de données MySQL
sudo apt-get install mysql-server mysql-client php5-mysql sudo apt-get install mysql-server mysql-client php5-mysql
# Composants principaux (git est optionnel si vous déployez manuellement les fichiers dinstallation) # Composants principaux (git est optionnel si vous déployez manuellement les fichiers dinstallation)
sudo apt-get install git php5 php5-curl php5-gd php5-intl php5-json php5-gmp php5-sqlite sudo apt-get install git php5 php5-curl php5-gmp php5-intl php5-json php5-sqlite
# Redémarrage du serveur Web # Redémarrage du serveur Web
sudo service apache2 restart sudo service apache2 restart

13
sources/README.md Executable file → Normal file
View file

@ -31,14 +31,16 @@ We are a friendly community.
# Requirements # Requirements
* Light server running Linux or Windows * Light server running Linux or Windows
* It even works on Raspberry Pi with response time under a second (tested with 150 feeds, 22k articles, or 32Mo of compressed data) * 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) * A web server: Apache2 (recommended), nginx, lighttpd (not tested on others)
* PHP 5.2.1+ (PHP 5.3.7+ recommended, and PHP 5.5+ for performance) (beta support for PHP 7 with even higher performance) * PHP 5.3+ (PHP 5.3.7+ recommended, and PHP 5.5+ for performance, and PHP 7 for even higher performance)
* Required extensions: [PDO_MySQL](http://php.net/pdo-mysql) or [PDO_SQLite](http://php.net/pdo-sqlite), [cURL](http://php.net/curl), [GMP](http://php.net/gmp) (for API access on platforms < 64 bits), [IDN](http://php.net/intl.idn) (for Internationalized Domain Names) * Required extensions: [PDO_MySQL](http://php.net/pdo-mysql) or [PDO_SQLite](http://php.net/pdo-sqlite), [cURL](http://php.net/curl), [GMP](http://php.net/gmp) (for API access on platforms < 64 bits), [IDN](http://php.net/intl.idn) (for Internationalized Domain Names)
* Recommended extensions: [JSON](http://php.net/json), [mbstring](http://php.net/mbstring), [zlib](http://php.net/zlib), [Zip](http://php.net/zip) * Recommended extensions: [iconv](http://php.net/iconv), [JSON](http://php.net/json), [mbstring](http://php.net/mbstring), [Zip](http://php.net/zip), [zlib](http://php.net/zlib)
* Enabled by default: [DOM](http://php.net/dom), [XML](http://php.net/xml)…
* MySQL 5.0.3+ (recommended) or SQLite 3.7.4+ * MySQL 5.0.3+ (recommended) or SQLite 3.7.4+
* A recent browser like Firefox, Chrome, Opera, Safari. [Internet Explorer currently not supported, but support will come back](https://github.com/FreshRSS/FreshRSS/issues/772). * A recent browser like Firefox, Chrome, Opera, Safari. [Internet Explorer currently not supported, but support will come back](https://github.com/FreshRSS/FreshRSS/issues/772).
* Works on mobile * Works on mobile
* The browser HTTP `Referer` header must not be disabled when using the form login method
![FreshRSS screenshot](http://marienfressinaud.fr/data/images/freshrss/freshrss_default-design.png) ![FreshRSS screenshot](http://marienfressinaud.fr/data/images/freshrss/freshrss_default-design.png)
@ -50,6 +52,9 @@ We are a friendly community.
5. Everything should be working :) If you encounter any problem, feel free to contact me. 5. Everything should be working :) If you encounter any problem, feel free to contact me.
6. Advanced configuration settings can be seen in [config.php](./data/config.default.php). 6. Advanced configuration settings can be seen in [config.php](./data/config.default.php).
## Automated install
[![DP deploy](https://raw.githubusercontent.com/DFabric/DPlatform-ShellCore/gh-pages/img/deploy.png)](https://dfabric.github.io/DPlatform-ShellCore)
## Example of full installation on Linux Debian/Ubuntu ## Example of full installation on Linux Debian/Ubuntu
```sh ```sh
# If you use an Apache Web server (otherwise you need another Web server) # If you use an Apache Web server (otherwise you need another Web server)
@ -58,7 +63,7 @@ sudo a2enmod headers expires rewrite ssl
# (Optional) If you want a MySQL database server # (Optional) If you want a MySQL database server
sudo apt-get install mysql-server mysql-client php5-mysql sudo apt-get install mysql-server mysql-client php5-mysql
# Main components (git is optional if you manually download the installation files) # Main components (git is optional if you manually download the installation files)
sudo apt-get install git php5 php5-curl php5-gd php5-intl php5-json php5-gmp php5-sqlite sudo apt-get install git php5 php5-curl php5-gmp php5-intl php5-json php5-sqlite
# Restart Web server # Restart Web server
sudo service apache2 restart sudo service apache2 restart

0
sources/app/.htaccess Executable file → Normal file
View file

0
sources/app/Controllers/authController.php Executable file → Normal file
View file

0
sources/app/Controllers/categoryController.php Executable file → Normal file
View file

View file

@ -46,6 +46,7 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
if ($id === false) { if ($id === false) {
// id is false? It MUST be a POST request! // id is false? It MUST be a POST request!
if (!Minz_Request::isPost()) { if (!Minz_Request::isPost()) {
Minz_Request::bad(_t('feedback.access.not_found'), array('c' => 'index', 'a' => 'index'));
return; return;
} }

0
sources/app/Controllers/errorController.php Executable file → Normal file
View file

0
sources/app/Controllers/extensionController.php Executable file → Normal file
View file

View file

@ -114,6 +114,8 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
Minz_Request::bad(_t('feedback.sub.feed.invalid_url', $url), $url_redirect); Minz_Request::bad(_t('feedback.sub.feed.invalid_url', $url), $url_redirect);
} }
$feed->_httpAuth($http_auth);
try { try {
$feed->load(true); $feed->load(true);
} catch (FreshRSS_Feed_Exception $e) { } catch (FreshRSS_Feed_Exception $e) {
@ -140,7 +142,6 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
} }
$feed->_category($cat); $feed->_category($cat);
$feed->_httpAuth($http_auth);
// Call the extension hook // Call the extension hook
$name = $feed->name(); $name = $feed->name();
@ -355,12 +356,12 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
$entry_date = $entry->date(true); $entry_date = $entry->date(true);
if (isset($existingHashForGuids[$entry->guid()])) { if (isset($existingHashForGuids[$entry->guid()])) {
$existingHash = $existingHashForGuids[$entry->guid()]; $existingHash = $existingHashForGuids[$entry->guid()];
if (strcasecmp($existingHash, $entry->hash()) === 0 || $existingHash === '00000000000000000000000000000000') { if (strcasecmp($existingHash, $entry->hash()) === 0 || trim($existingHash, '0') == '') {
//This entry already exists and is unchanged. TODO: Remove the test with the zero'ed hash in FreshRSS v1.3 //This entry already exists and is unchanged. TODO: Remove the test with the zero'ed hash in FreshRSS v1.3
$oldGuids[] = $entry->guid(); $oldGuids[] = $entry->guid();
} else { //This entry already exists but has been updated } else { //This entry already exists but has been updated
Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->id() . //Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->id() .
', old hash ' . $existingHash . ', new hash ' . $entry->hash()); //', old hash ' . $existingHash . ', new hash ' . $entry->hash());
//TODO: Make an updated/is_read policy by feed, in addition to the global one. //TODO: Make an updated/is_read policy by feed, in addition to the global one.
$entry->_isRead(FreshRSS_Context::$user_conf->mark_updated_article_unread ? false : null); //Change is_read according to policy. $entry->_isRead(FreshRSS_Context::$user_conf->mark_updated_article_unread ? false : null); //Change is_read according to policy.
if (!$entryDAO->hasTransaction()) { if (!$entryDAO->hasTransaction()) {

0
sources/app/Controllers/importExportController.php Executable file → Normal file
View file

View file

@ -32,6 +32,7 @@ class FreshRSS_index_Controller extends Minz_ActionController {
Minz_Error::error(404); Minz_Error::error(404);
} }
$this->view->callbackBeforeContent = function() {
try { try {
$entries = $this->listEntriesByContext(); $entries = $this->listEntriesByContext();
@ -68,6 +69,7 @@ class FreshRSS_index_Controller extends Minz_ActionController {
$title = '(' . FreshRSS_Context::$get_unread . ') ' . $title; $title = '(' . FreshRSS_Context::$get_unread . ') ' . $title;
} }
Minz_View::prependTitle($title . ' · '); Minz_View::prependTitle($title . ' · ');
};
} }
/** /**

View file

@ -6,7 +6,7 @@ class FreshRSS_javascript_Controller extends Minz_ActionController {
} }
public function actualizeAction() { public function actualizeAction() {
header('Content-Type: text/javascript; charset=UTF-8'); header('Content-Type: application/json; charset=UTF-8');
$feedDAO = FreshRSS_Factory::createFeedDao(); $feedDAO = FreshRSS_Factory::createFeedDao();
$this->view->feeds = $feedDAO->listFeedsOrderUpdate(FreshRSS_Context::$user_conf->ttl_default); $this->view->feeds = $feedDAO->listFeedsOrderUpdate(FreshRSS_Context::$user_conf->ttl_default);
} }

0
sources/app/Controllers/statsController.php Executable file → Normal file
View file

0
sources/app/Controllers/subscriptionController.php Executable file → Normal file
View file

0
sources/app/Controllers/updateController.php Executable file → Normal file
View file

0
sources/app/Controllers/userController.php Executable file → Normal file
View file

0
sources/app/Exceptions/BadUrlException.php Executable file → Normal file
View file

0
sources/app/Exceptions/ContextException.php Executable file → Normal file
View file

0
sources/app/Exceptions/DAOException.php Executable file → Normal file
View file

0
sources/app/Exceptions/EntriesGetterException.php Executable file → Normal file
View file

0
sources/app/Exceptions/FeedException.php Executable file → Normal file
View file

40
sources/app/FreshRSS.php Executable file → Normal file
View file

@ -34,7 +34,7 @@ class FreshRSS extends Minz_FrontController {
// Auth has to be initialized before using currentUser session parameter // Auth has to be initialized before using currentUser session parameter
// because it's this part which create this parameter. // because it's this part which create this parameter.
$this->initAuth(); self::initAuth();
// Then, register the user configuration and use the configuration setter // Then, register the user configuration and use the configuration setter
// created above. // created above.
@ -46,10 +46,8 @@ class FreshRSS extends Minz_FrontController {
// Finish to initialize the other FreshRSS / Minz components. // Finish to initialize the other FreshRSS / Minz components.
FreshRSS_Context::init(); FreshRSS_Context::init();
$this->initI18n(); self::initI18n();
FreshRSS_Share::load(join_path(DATA_PATH, 'shares.php')); self::loadNotifications();
$this->loadStylesAndScripts();
$this->loadNotifications();
// Enable extensions for the current (logged) user. // Enable extensions for the current (logged) user.
if (FreshRSS_Auth::hasAccess()) { if (FreshRSS_Auth::hasAccess()) {
$ext_list = FreshRSS_Context::$user_conf->extensions_enabled; $ext_list = FreshRSS_Context::$user_conf->extensions_enabled;
@ -57,7 +55,7 @@ class FreshRSS extends Minz_FrontController {
} }
} }
private function initAuth() { private static function initAuth() {
FreshRSS_Auth::init(); FreshRSS_Auth::init();
if (Minz_Request::isPost() && !is_referer_from_same_domain()) { if (Minz_Request::isPost() && !is_referer_from_same_domain()) {
// Basic protection against XSRF attacks // Basic protection against XSRF attacks
@ -74,12 +72,12 @@ class FreshRSS extends Minz_FrontController {
} }
} }
private function initI18n() { private static function initI18n() {
Minz_Session::_param('language', FreshRSS_Context::$user_conf->language); Minz_Session::_param('language', FreshRSS_Context::$user_conf->language);
Minz_Translate::init(FreshRSS_Context::$user_conf->language); Minz_Translate::init(FreshRSS_Context::$user_conf->language);
} }
private function loadStylesAndScripts() { public static function loadStylesAndScripts() {
$theme = FreshRSS_Themes::load(FreshRSS_Context::$user_conf->theme); $theme = FreshRSS_Themes::load(FreshRSS_Context::$user_conf->theme);
if ($theme) { if ($theme) {
foreach($theme['files'] as $file) { foreach($theme['files'] as $file) {
@ -91,9 +89,9 @@ class FreshRSS extends Minz_FrontController {
$filename = $file; $filename = $file;
} }
$filetime = @filemtime(PUBLIC_PATH . '/themes/' . $theme_id . '/' . $filename); $filetime = @filemtime(PUBLIC_PATH . '/themes/' . $theme_id . '/' . $filename);
Minz_View::appendStyle(Minz_Url::display( $url = '/themes/' . $theme_id . '/' . $filename . '?' . $filetime;
'/themes/' . $theme_id . '/' . $filename . '?' . $filetime header('Link: <' . Minz_Url::display($url, '', 'root') . '>;rel=preload', false); //HTTP2
)); Minz_View::appendStyle(Minz_Url::display($url));
} }
} }
@ -110,11 +108,29 @@ class FreshRSS extends Minz_FrontController {
} }
} }
private function loadNotifications() { private static function loadNotifications() {
$notif = Minz_Session::param('notification'); $notif = Minz_Session::param('notification');
if ($notif) { if ($notif) {
Minz_View::_param('notification', $notif); Minz_View::_param('notification', $notif);
Minz_Session::_param('notification'); Minz_Session::_param('notification');
} }
} }
public static function preLayout() {
switch (Minz_Request::controllerName()) {
case 'index':
header("Content-Security-Policy: default-src 'self'; child-src *; frame-src *; img-src * data:; media-src *");
break;
case 'stats':
header("Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe-inline'");
break;
default:
header("Content-Security-Policy: default-src 'self'");
break;
}
header("X-Content-Type-Options: nosniff");
FreshRSS_Share::load(join_path(DATA_PATH, 'shares.php'));
self::loadStylesAndScripts();
}
} }

0
sources/app/Models/Auth.php Executable file → Normal file
View file

0
sources/app/Models/Category.php Executable file → Normal file
View file

2
sources/app/Models/CategoryDAO.php Executable file → Normal file
View file

@ -103,7 +103,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable
. ($details ? 'f.* ' : 'f.id, f.name, f.url, f.website, f.priority, f.error, f.cache_nbEntries, f.cache_nbUnreads ') . ($details ? 'f.* ' : 'f.id, f.name, f.url, f.website, f.priority, f.error, f.cache_nbEntries, f.cache_nbUnreads ')
. 'FROM `' . $this->prefix . 'category` c ' . 'FROM `' . $this->prefix . 'category` c '
. 'LEFT OUTER JOIN `' . $this->prefix . 'feed` f ON f.category=c.id ' . 'LEFT OUTER JOIN `' . $this->prefix . 'feed` f ON f.category=c.id '
. 'GROUP BY f.id ' . 'GROUP BY f.id, c_id '
. 'ORDER BY c.name, f.name'; . 'ORDER BY c.name, f.name';
$stm = $this->bd->prepare($sql); $stm = $this->bd->prepare($sql);
$stm->execute(); $stm->execute();

0
sources/app/Models/ConfigurationSetter.php Executable file → Normal file
View file

0
sources/app/Models/Context.php Executable file → Normal file
View file

0
sources/app/Models/DatabaseDAO.php Executable file → Normal file
View file

0
sources/app/Models/DatabaseDAOSQLite.php Executable file → Normal file
View file

0
sources/app/Models/Days.php Executable file → Normal file
View file

0
sources/app/Models/Entry.php Executable file → Normal file
View file

0
sources/app/Models/EntryDAO.php Executable file → Normal file
View file

0
sources/app/Models/EntryDAOSQLite.php Executable file → Normal file
View file

0
sources/app/Models/Factory.php Executable file → Normal file
View file

9
sources/app/Models/Feed.php Executable file → Normal file
View file

@ -451,6 +451,10 @@ class FreshRSS_Feed extends Minz_Model {
Minz_Log::warning('Invalid callback for PubSubHubbub: ' . $this->url); Minz_Log::warning('Invalid callback for PubSubHubbub: ' . $this->url);
return false; return false;
} }
if (!$state) { //unsubscribe
$hubJson['lease_end'] = time() - 60;
file_put_contents($hubFilename, json_encode($hubJson));
}
$ch = curl_init(); $ch = curl_init();
curl_setopt_array($ch, array( curl_setopt_array($ch, array(
CURLOPT_URL => $this->hubUrl, CURLOPT_URL => $this->hubUrl,
@ -470,11 +474,6 @@ class FreshRSS_Feed extends Minz_Model {
'PubSubHubbub ' . ($state ? 'subscribe' : 'unsubscribe') . ' to ' . $this->selfUrl . 'PubSubHubbub ' . ($state ? 'subscribe' : 'unsubscribe') . ' to ' . $this->selfUrl .
' with callback ' . $callbackUrl . ': ' . $info['http_code'] . ' ' . $response . "\n", FILE_APPEND); ' with callback ' . $callbackUrl . ': ' . $info['http_code'] . ' ' . $response . "\n", FILE_APPEND);
if (!$state) { //unsubscribe
$hubJson['lease_end'] = time() - 60;
file_put_contents($hubFilename, json_encode($hubJson));
}
if (substr($info['http_code'], 0, 1) == '2') { if (substr($info['http_code'], 0, 1) == '2') {
return true; return true;
} else { } else {

0
sources/app/Models/FeedDAO.php Executable file → Normal file
View file

0
sources/app/Models/FeedDAOSQLite.php Executable file → Normal file
View file

0
sources/app/Models/Log.php Executable file → Normal file
View file

0
sources/app/Models/LogDAO.php Executable file → Normal file
View file

0
sources/app/Models/Search.php Executable file → Normal file
View file

0
sources/app/Models/Searchable.php Executable file → Normal file
View file

6
sources/app/Models/Share.php Executable file → Normal file
View file

@ -119,11 +119,9 @@ class FreshRSS_Share {
); );
foreach ($options as $key => $value) { foreach ($options as $key => $value) {
if (!isset($available_options[$key])) { if (isset($available_options[$key])) {
continue; $this->{$available_options[$key]} = $value;
} }
$this->$available_options[$key] = $value;
} }
} }

20
sources/app/Models/StatsDAO.php Executable file → Normal file
View file

@ -55,9 +55,9 @@ SQL;
/** /**
* Calculates entry count per day on a 30 days period. * Calculates entry count per day on a 30 days period.
* Returns the result as a JSON string. * Returns the result as a JSON object.
* *
* @return string * @return JSON object
*/ */
public function calculateEntryCount() { public function calculateEntryCount() {
$count = $this->initEntryCountArray(); $count = $this->initEntryCountArray();
@ -257,9 +257,9 @@ SQL;
/** /**
* Calculates feed count per category. * Calculates feed count per category.
* Returns the result as a JSON string. * Returns the result as a JSON object.
* *
* @return string * @return JSON object
*/ */
public function calculateFeedByCategory() { public function calculateFeedByCategory() {
$sql = <<<SQL $sql = <<<SQL
@ -282,7 +282,7 @@ SQL;
* Calculates entry count per category. * Calculates entry count per category.
* Returns the result as a JSON string. * Returns the result as a JSON string.
* *
* @return string * @return JSON object
*/ */
public function calculateEntryByCategory() { public function calculateEntryByCategory() {
$sql = <<<SQL $sql = <<<SQL
@ -357,7 +357,7 @@ SQL;
$serie[] = array($key, $value); $serie[] = array($key, $value);
} }
return json_encode($serie); return $serie;
} }
protected function convertToPieSerie($data) { protected function convertToPieSerie($data) {
@ -368,7 +368,7 @@ SQL;
$serie[] = $value; $serie[] = $value;
} }
return json_encode($serie); return $serie;
} }
/** /**
@ -411,17 +411,17 @@ SQL;
} }
/** /**
* Translates array content and encode it as JSON * Translates array content
* *
* @param array $data * @param array $data
* @return string * @return JSON object
*/ */
private function convertToTranslatedJson($data = array()) { private function convertToTranslatedJson($data = array()) {
$translated = array_map(function($a) { $translated = array_map(function($a) {
return _t('gen.date.' . $a); return _t('gen.date.' . $a);
}, $data); }, $data);
return json_encode($translated); return $translated;
} }
} }

4
sources/app/Models/StatsDAOSQLite.php Executable file → Normal file
View file

@ -4,9 +4,9 @@ class FreshRSS_StatsDAOSQLite extends FreshRSS_StatsDAO {
/** /**
* Calculates entry count per day on a 30 days period. * Calculates entry count per day on a 30 days period.
* Returns the result as a JSON string. * Returns the result as a JSON object.
* *
* @return string * @return JSON object
*/ */
public function calculateEntryCount() { public function calculateEntryCount() {
$count = $this->initEntryCountArray(); $count = $this->initEntryCountArray();

4
sources/app/Models/Themes.php Executable file → Normal file
View file

@ -116,7 +116,3 @@ class FreshRSS_Themes extends Minz_Model {
'<img class="icon" src="' . Minz_Url::display($url) . '" alt="' . $alts[$name] . '" />'; '<img class="icon" src="' . Minz_Url::display($url) . '" alt="' . $alts[$name] . '" />';
} }
} }
function _i($icon, $url_only = false) {
return FreshRSS_Themes::icon($icon, $url_only);
}

0
sources/app/Models/UserDAO.php Executable file → Normal file
View file

0
sources/app/Models/UserQuery.php Executable file → Normal file
View file

0
sources/app/SQL/install.sql.mysql.php Executable file → Normal file
View file

0
sources/app/SQL/install.sql.sqlite.php Executable file → Normal file
View file

View file

@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS `YnoUser_feed` (
`name` varchar(255) NOT NULL, `name` varchar(255) NOT NULL,
`website` varchar(255) CHARACTER SET latin1, `website` varchar(255) CHARACTER SET latin1,
`description` text, `description` text,
`lastUpdate` int(11) DEFAULT 0, `lastUpdate` int(11) DEFAULT 0, -- Until year 2038
`priority` tinyint(2) NOT NULL DEFAULT 10, `priority` tinyint(2) NOT NULL DEFAULT 10,
`pathEntries` varchar(511) DEFAULT NULL, `pathEntries` varchar(511) DEFAULT NULL,
`httpAuth` varchar(511) DEFAULT NULL, `httpAuth` varchar(511) DEFAULT NULL,
@ -38,7 +38,9 @@ CREATE TABLE IF NOT EXISTS `YnoUser_entry` (
`author` varchar(255), `author` varchar(255),
`content_bin` blob, -- v0.7 `content_bin` blob, -- v0.7
`link` varchar(1023) CHARACTER SET latin1 NOT NULL, `link` varchar(1023) CHARACTER SET latin1 NOT NULL,
`date` int(11), `date` int(11), -- Until year 2038
`lastSeen` INT(11) DEFAULT 0, -- v1.1.1, Until year 2038
`hash` BINARY(16), -- v1.1.1
`is_read` boolean NOT NULL DEFAULT 0, `is_read` boolean NOT NULL DEFAULT 0,
`is_favorite` boolean NOT NULL DEFAULT 0, `is_favorite` boolean NOT NULL DEFAULT 0,
`id_feed` SMALLINT, -- v0.7 `id_feed` SMALLINT, -- v0.7
@ -47,7 +49,8 @@ CREATE TABLE IF NOT EXISTS `YnoUser_entry` (
FOREIGN KEY (`id_feed`) REFERENCES `YnoUser_feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`id_feed`) REFERENCES `YnoUser_feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE KEY (`id_feed`,`guid`), -- v0.7 UNIQUE KEY (`id_feed`,`guid`), -- v0.7
INDEX (`is_favorite`), -- v0.7 INDEX (`is_favorite`), -- v0.7
INDEX (`is_read`) -- v0.7 INDEX (`is_read`), -- v0.7
INDEX `entry_lastSeen_index` (`lastSeen`) -- v1.1.1
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
ENGINE = INNODB; ENGINE = INNODB;

0
sources/app/i18n/cz/admin.php Executable file → Normal file
View file

0
sources/app/i18n/cz/conf.php Executable file → Normal file
View file

0
sources/app/i18n/cz/feedback.php Executable file → Normal file
View file

8
sources/app/i18n/cz/gen.php Executable file → Normal file
View file

@ -108,7 +108,7 @@ return array(
'confirm_action' => 'Jste si jist, že chcete provést tuto akci? Změny nelze vrátit zpět!', 'confirm_action' => 'Jste si jist, že chcete provést tuto akci? Změny nelze vrátit zpět!',
'confirm_action_feed_cat' => 'Jste si jist, že chcete provést tuto akci? Přijdete o související oblíbené položky a uživatelské dotazy. Změny nelze vrátit zpět!', 'confirm_action_feed_cat' => 'Jste si jist, že chcete provést tuto akci? Přijdete o související oblíbené položky a uživatelské dotazy. Změny nelze vrátit zpět!',
'feedback' => array( 'feedback' => array(
'body_new_articles' => 'Je \\d nových článků k přečtení v FreshRSS.', 'body_new_articles' => 'Je %%d nových článků k přečtení v FreshRSS.',
'request_failed' => 'Požadavek selhal, což může být způsobeno problémy s připojení k internetu.', 'request_failed' => 'Požadavek selhal, což může být způsobeno problémy s připojení k internetu.',
'title_new_articles' => 'FreshRSS: nové články!', 'title_new_articles' => 'FreshRSS: nové články!',
), ),
@ -122,6 +122,8 @@ return array(
'fr' => 'Français', 'fr' => 'Français',
'it' => 'Italiano', 'it' => 'Italiano',
'nl' => 'Nederlands', 'nl' => 'Nederlands',
'ru' => 'Русский',
'tr' => 'Türkçe',
), ),
'menu' => array( 'menu' => array(
'about' => 'O aplikaci', 'about' => 'O aplikaci',
@ -163,7 +165,9 @@ return array(
'print' => 'Tisk', 'print' => 'Tisk',
'shaarli' => 'Shaarli', 'shaarli' => 'Shaarli',
'twitter' => 'Twitter', 'twitter' => 'Twitter',
'wallabag' => 'wallabag', 'wallabag' => 'wallabag v1',
'wallabagv2' => 'wallabag v2',
'jdh' => 'Journal du hacker',
), ),
'short' => array( 'short' => array(
'attention' => 'Upozornění!', 'attention' => 'Upozornění!',

0
sources/app/i18n/cz/index.php Executable file → Normal file
View file

10
sources/app/i18n/cz/install.php Executable file → Normal file
View file

@ -51,7 +51,7 @@ return array(
'ok' => 'Oprávnění adresáře data jsou v pořádku.', 'ok' => 'Oprávnění adresáře data jsou v pořádku.',
), ),
'dom' => array( 'dom' => array(
'nok' => 'Nemáte požadovanou knihovnu pro procházení DOM (balíček php-xml).', 'nok' => 'Nemáte požadovanou knihovnu pro procházení DOM.',
'ok' => 'Máte požadovanou knihovnu pro procházení DOM.', 'ok' => 'Máte požadovanou knihovnu pro procházení DOM.',
), ),
'favicons' => array( 'favicons' => array(
@ -62,6 +62,10 @@ return array(
'nok' => 'Zkontrolujte prosím že neměníte HTTP REFERER.', 'nok' => 'Zkontrolujte prosím že neměníte HTTP REFERER.',
'ok' => 'Váš HTTP REFERER je znám a odpovídá Vašemu serveru.', 'ok' => 'Váš HTTP REFERER je znám a odpovídá Vašemu serveru.',
), ),
'json' => array(
'nok' => 'Pro parsování JSON chybí doporučená knihovna.',
'ok' => 'Máte doporučenou knihovnu pro parsování JSON.',
),
'minz' => array( 'minz' => array(
'nok' => 'Nemáte framework Minz.', 'nok' => 'Nemáte framework Minz.',
'ok' => 'Máte framework Minz.', 'ok' => 'Máte framework Minz.',
@ -86,6 +90,10 @@ return array(
'nok' => 'Zkontrolujte oprávnění adresáře <em>./data/users</em>. HTTP server musí mít do tohoto adresáře práva zápisu', 'nok' => 'Zkontrolujte oprávnění adresáře <em>./data/users</em>. HTTP server musí mít do tohoto adresáře práva zápisu',
'ok' => 'Oprávnění adresáře users jsou v pořádku.', 'ok' => 'Oprávnění adresáře users jsou v pořádku.',
), ),
'xml' => array(
'nok' => 'Pro parsování XML chybí požadovaná knihovna.',
'ok' => 'Máte požadovanou knihovnu pro parsování XML.',
),
), ),
'conf' => array( 'conf' => array(
'_' => 'Obecná nastavení', '_' => 'Obecná nastavení',

0
sources/app/i18n/cz/sub.php Executable file → Normal file
View file

0
sources/app/i18n/de/admin.php Executable file → Normal file
View file

0
sources/app/i18n/de/conf.php Executable file → Normal file
View file

0
sources/app/i18n/de/feedback.php Executable file → Normal file
View file

8
sources/app/i18n/de/gen.php Executable file → Normal file
View file

@ -108,7 +108,7 @@ return array(
'confirm_action' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Diese Aktion kann nicht abgebrochen werden!', 'confirm_action' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Diese Aktion kann nicht abgebrochen werden!',
'confirm_action_feed_cat' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Sie werden zugehörige Favoriten und Benutzerabfragen verlieren. Dies kann nicht abgebrochen werden!', 'confirm_action_feed_cat' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Sie werden zugehörige Favoriten und Benutzerabfragen verlieren. Dies kann nicht abgebrochen werden!',
'feedback' => array( 'feedback' => array(
'body_new_articles' => 'Es gibt \\d neue Artikel zum Lesen auf FreshRSS.', 'body_new_articles' => 'Es gibt %%d neue Artikel zum Lesen auf FreshRSS.',
'request_failed' => 'Eine Anfrage ist fehlgeschlagen, dies könnte durch Probleme mit der Internetverbindung verursacht worden sein.', 'request_failed' => 'Eine Anfrage ist fehlgeschlagen, dies könnte durch Probleme mit der Internetverbindung verursacht worden sein.',
'title_new_articles' => 'FreshRSS: neue Artikel!', 'title_new_articles' => 'FreshRSS: neue Artikel!',
), ),
@ -122,6 +122,8 @@ return array(
'fr' => 'Français', 'fr' => 'Français',
'it' => 'Italiano', 'it' => 'Italiano',
'nl' => 'Nederlands', 'nl' => 'Nederlands',
'ru' => 'Русский',
'tr' => 'Türkçe',
), ),
'menu' => array( 'menu' => array(
'about' => 'Über', 'about' => 'Über',
@ -163,7 +165,9 @@ return array(
'print' => 'Drucken', 'print' => 'Drucken',
'shaarli' => 'Shaarli', 'shaarli' => 'Shaarli',
'twitter' => 'Twitter', 'twitter' => 'Twitter',
'wallabag' => 'wallabag', 'wallabag' => 'wallabag v1',
'wallabagv2' => 'wallabag v2',
'jdh' => 'Journal du hacker',
), ),
'short' => array( 'short' => array(
'attention' => 'Achtung!', 'attention' => 'Achtung!',

0
sources/app/i18n/de/index.php Executable file → Normal file
View file

10
sources/app/i18n/de/install.php Executable file → Normal file
View file

@ -51,7 +51,7 @@ return array(
'ok' => 'Die Berechtigungen des Verzeichnisses <em>./data</em> sind in Ordnung.', 'ok' => 'Die Berechtigungen des Verzeichnisses <em>./data</em> sind in Ordnung.',
), ),
'dom' => array( 'dom' => array(
'nok' => 'Ihnen fehlt eine benötigte Bibliothek um DOM zu durchstöbern (Paket php-xml).', 'nok' => 'Ihnen fehlt eine benötigte Bibliothek um DOM zu durchstöbern.',
'ok' => 'Sie haben die benötigte Bibliothek um DOM zu durchstöbern.', 'ok' => 'Sie haben die benötigte Bibliothek um DOM zu durchstöbern.',
), ),
'favicons' => array( 'favicons' => array(
@ -62,6 +62,10 @@ return array(
'nok' => 'Bitte stellen Sie sicher, dass Sie Ihren HTTP REFERER nicht abändern.', 'nok' => 'Bitte stellen Sie sicher, dass Sie Ihren HTTP REFERER nicht abändern.',
'ok' => 'Ihr HTTP REFERER ist bekannt und entspricht Ihrem Server.', 'ok' => 'Ihr HTTP REFERER ist bekannt und entspricht Ihrem Server.',
), ),
'json' => array(
'nok' => 'Ihnen fehlt eine empfohlene Bibliothek um JSON zu parsen.',
'ok' => 'Sie haben eine empfohlene Bibliothek um JSON zu parsen.',
),
'minz' => array( 'minz' => array(
'nok' => 'Ihnen fehlt das Minz-Framework.', 'nok' => 'Ihnen fehlt das Minz-Framework.',
'ok' => 'Sie haben das Minz-Framework.', 'ok' => 'Sie haben das Minz-Framework.',
@ -86,6 +90,10 @@ return array(
'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>./data/users</em>. Der HTTP-Server muss Schreibrechte besitzen.', 'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>./data/users</em>. Der HTTP-Server muss Schreibrechte besitzen.',
'ok' => 'Die Berechtigungen des Verzeichnisses <em>./data/users</em> sind in Ordnung.', 'ok' => 'Die Berechtigungen des Verzeichnisses <em>./data/users</em> sind in Ordnung.',
), ),
'xml' => array(
'nok' => 'Ihnen fehlt die benötigte Bibliothek um XML zu parsen.',
'ok' => 'Sie haben die benötigte Bibliothek um XML zu parsen.',
),
), ),
'conf' => array( 'conf' => array(
'_' => 'Allgemeine Konfiguration', '_' => 'Allgemeine Konfiguration',

0
sources/app/i18n/de/sub.php Executable file → Normal file
View file

0
sources/app/i18n/en/admin.php Executable file → Normal file
View file

2
sources/app/i18n/en/conf.php Executable file → Normal file
View file

@ -77,7 +77,7 @@ return array(
'warn' => 'Your account and all the related data will be deleted.', 'warn' => 'Your account and all the related data will be deleted.',
), ),
'email_persona' => 'Login email address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>', 'email_persona' => 'Login email address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'password_api' => 'Password API<br /><small>(e.g., for mobile apps)</small>', 'password_api' => 'API password<br /><small>(e.g., for mobile apps)</small>',
'password_form' => 'Password<br /><small>(for the Web-form login method)</small>', 'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
'password_format' => 'At least 7 characters', 'password_format' => 'At least 7 characters',
'title' => 'Profile', 'title' => 'Profile',

0
sources/app/i18n/en/feedback.php Executable file → Normal file
View file

8
sources/app/i18n/en/gen.php Executable file → Normal file
View file

@ -108,7 +108,7 @@ return array(
'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', '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 favorites and user queries. It cannot be cancelled!', 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!',
'feedback' => array( 'feedback' => array(
'body_new_articles' => 'There are \\d new articles to read on FreshRSS.', '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.', 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.',
'title_new_articles' => 'FreshRSS: new articles!', 'title_new_articles' => 'FreshRSS: new articles!',
), ),
@ -122,6 +122,8 @@ return array(
'fr' => 'Français', 'fr' => 'Français',
'it' => 'Italiano', 'it' => 'Italiano',
'nl' => 'Nederlands', 'nl' => 'Nederlands',
'ru' => 'Русский',
'tr' => 'Türkçe',
), ),
'menu' => array( 'menu' => array(
'about' => 'About', 'about' => 'About',
@ -163,7 +165,9 @@ return array(
'print' => 'Print', 'print' => 'Print',
'shaarli' => 'Shaarli', 'shaarli' => 'Shaarli',
'twitter' => 'Twitter', 'twitter' => 'Twitter',
'wallabag' => 'wallabag', 'wallabag' => 'wallabag v1',
'wallabagv2' => 'wallabag v2',
'jdh' => 'Journal du hacker',
), ),
'short' => array( 'short' => array(
'attention' => 'Warning!', 'attention' => 'Warning!',

0
sources/app/i18n/en/index.php Executable file → Normal file
View file

10
sources/app/i18n/en/install.php Executable file → Normal file
View file

@ -51,7 +51,7 @@ return array(
'ok' => 'Permissions on data directory are good.', 'ok' => 'Permissions on data directory are good.',
), ),
'dom' => array( 'dom' => array(
'nok' => 'You lack a required library to browse the DOM (php-xml package).', 'nok' => 'You lack a required library to browse the DOM.',
'ok' => 'You have the required library to browse the DOM.', 'ok' => 'You have the required library to browse the DOM.',
), ),
'favicons' => array( 'favicons' => array(
@ -62,6 +62,10 @@ return array(
'nok' => 'Please check that you are not altering your HTTP REFERER.', 'nok' => 'Please check that you are not altering your HTTP REFERER.',
'ok' => 'Your HTTP REFERER is known and corresponds to your server.', 'ok' => 'Your HTTP REFERER is known and corresponds to your server.',
), ),
'json' => array(
'nok' => 'You lack a recommended library to parse JSON.',
'ok' => 'You have a recommended library to parse JSON.',
),
'minz' => array( 'minz' => array(
'nok' => 'You lack the Minz framework.', 'nok' => 'You lack the Minz framework.',
'ok' => 'You have the Minz framework.', 'ok' => 'You have the Minz framework.',
@ -86,6 +90,10 @@ return array(
'nok' => 'Check permissions on <em>./data/users</em> directory. HTTP server must have rights to write into', 'nok' => 'Check permissions on <em>./data/users</em> directory. HTTP server must have rights to write into',
'ok' => 'Permissions on users directory are good.', 'ok' => 'Permissions on users directory are good.',
), ),
'xml' => array(
'nok' => 'You lack the required library to parse XML.',
'ok' => 'You have the required library to parse XML.',
),
), ),
'conf' => array( 'conf' => array(
'_' => 'General configuration', '_' => 'General configuration',

0
sources/app/i18n/en/sub.php Executable file → Normal file
View file

0
sources/app/i18n/fr/admin.php Executable file → Normal file
View file

0
sources/app/i18n/fr/conf.php Executable file → Normal file
View file

0
sources/app/i18n/fr/feedback.php Executable file → Normal file
View file

8
sources/app/i18n/fr/gen.php Executable file → Normal file
View file

@ -108,7 +108,7 @@ return array(
'confirm_action' => 'Êtes-vous sûr(e) de vouloir continuer ? Cette action ne peut être annulée !', 'confirm_action' => 'Êtes-vous sûr(e) de vouloir continuer ? Cette action ne peut être annulée !',
'confirm_action_feed_cat' => 'Êtes-vous sûr(e) de vouloir continuer ? Vous perdrez les favoris et les filtres associés. Cette action ne peut être annulée !', 'confirm_action_feed_cat' => 'Êtes-vous sûr(e) de vouloir continuer ? Vous perdrez les favoris et les filtres associés. Cette action ne peut être annulée !',
'feedback' => array( 'feedback' => array(
'body_new_articles' => 'Il y a \\d nouveaux articles à lire sur FreshRSS.', 'body_new_articles' => 'Il y a %%d nouveaux articles à lire sur FreshRSS.',
'request_failed' => 'Une requête a échoué, cela peut être dû à des problèmes de connexion à Internet.', 'request_failed' => 'Une requête a échoué, cela peut être dû à des problèmes de connexion à Internet.',
'title_new_articles' => 'FreshRSS : nouveaux articles !', 'title_new_articles' => 'FreshRSS : nouveaux articles !',
), ),
@ -122,6 +122,8 @@ return array(
'fr' => 'Français', 'fr' => 'Français',
'it' => 'Italiano', 'it' => 'Italiano',
'nl' => 'Nederlands', 'nl' => 'Nederlands',
'ru' => 'Русский',
'tr' => 'Türkçe',
), ),
'menu' => array( 'menu' => array(
'about' => 'À propos', 'about' => 'À propos',
@ -163,7 +165,9 @@ return array(
'print' => 'Imprimer', 'print' => 'Imprimer',
'shaarli' => 'Shaarli', 'shaarli' => 'Shaarli',
'twitter' => 'Twitter', 'twitter' => 'Twitter',
'wallabag' => 'wallabag', 'wallabag' => 'wallabag v1',
'wallabagv2' => 'wallabag v2',
'jdh' => 'Journal du hacker',
), ),
'short' => array( 'short' => array(
'attention' => 'Attention !', 'attention' => 'Attention !',

0
sources/app/i18n/fr/index.php Executable file → Normal file
View file

10
sources/app/i18n/fr/install.php Executable file → Normal file
View file

@ -51,7 +51,7 @@ return array(
'ok' => 'Les droits sur le répertoire de data sont bons.', 'ok' => 'Les droits sur le répertoire de data sont bons.',
), ),
'dom' => array( 'dom' => array(
'nok' => 'Il manque une librairie pour parcourir le DOM (paquet php-xml).', 'nok' => 'Il manque une librairie pour parcourir le DOM.',
'ok' => 'Vous disposez du nécessaire pour parcourir le DOM.', 'ok' => 'Vous disposez du nécessaire pour parcourir le DOM.',
), ),
'favicons' => array( 'favicons' => array(
@ -62,6 +62,10 @@ return array(
'nok' => 'Veuillez vérifier que vous ne modifiez pas votre HTTP REFERER.', 'nok' => 'Veuillez vérifier que vous ne modifiez pas votre HTTP REFERER.',
'ok' => 'Le HTTP REFERER est connu et semble correspondre à votre serveur.', 'ok' => 'Le HTTP REFERER est connu et semble correspondre à votre serveur.',
), ),
'json' => array(
'nok' => 'Il manque une librairie recommandée pour JSON.',
'ok' => 'Vouz disposez de la librairie recommandée pour JSON.',
),
'minz' => array( 'minz' => array(
'nok' => 'Vous ne disposez pas de la librairie Minz.', 'nok' => 'Vous ne disposez pas de la librairie Minz.',
'ok' => 'Vous disposez du framework Minz', 'ok' => 'Vous disposez du framework Minz',
@ -86,6 +90,10 @@ return array(
'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/users</em>. Le serveur HTTP doit être capable décrire dedans', 'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/users</em>. Le serveur HTTP doit être capable décrire dedans',
'ok' => 'Les droits sur le répertoire des utilisateurs sont bons.', 'ok' => 'Les droits sur le répertoire des utilisateurs sont bons.',
), ),
'xml' => array(
'nok' => 'Il manque une librairie requise pour XML.',
'ok' => 'Vouz disposez de la librairie requise pour XML.',
),
), ),
'conf' => array( 'conf' => array(
'_' => 'Configuration générale', '_' => 'Configuration générale',

0
sources/app/i18n/fr/sub.php Executable file → Normal file
View file

0
sources/app/i18n/it/admin.php Executable file → Normal file
View file

0
sources/app/i18n/it/conf.php Executable file → Normal file
View file

0
sources/app/i18n/it/feedback.php Executable file → Normal file
View file

9
sources/app/i18n/it/gen.php Executable file → Normal file
View file

@ -108,7 +108,7 @@ return array(
'confirm_action' => 'Sei sicuro di voler continuare?', 'confirm_action' => 'Sei sicuro di voler continuare?',
'confirm_action_feed_cat' => 'Sei sicuro di voler continuare? Verranno persi i preferiti e le ricerche utente correlate!', 'confirm_action_feed_cat' => 'Sei sicuro di voler continuare? Verranno persi i preferiti e le ricerche utente correlate!',
'feedback' => array( 'feedback' => array(
'body_new_articles' => 'Ci sono \\d nuovi articoli da leggere.', 'body_new_articles' => 'Ci sono %%d nuovi articoli da leggere.',
'request_failed' => 'Richiesta fallita, probabilmente a causa di problemi di connessione', 'request_failed' => 'Richiesta fallita, probabilmente a causa di problemi di connessione',
'title_new_articles' => 'Feed RSS Reader: nuovi articoli!', 'title_new_articles' => 'Feed RSS Reader: nuovi articoli!',
), ),
@ -122,6 +122,8 @@ return array(
'fr' => 'Français', 'fr' => 'Français',
'it' => 'Italiano', 'it' => 'Italiano',
'nl' => 'Nederlands', 'nl' => 'Nederlands',
'ru' => 'Русский',
'tr' => 'Türkçe',
), ),
'menu' => array( 'menu' => array(
'about' => 'Informazioni', 'about' => 'Informazioni',
@ -159,10 +161,13 @@ return array(
'email' => 'Email', 'email' => 'Email',
'facebook' => 'Facebook', 'facebook' => 'Facebook',
'g+' => 'Google+', 'g+' => 'Google+',
'movim' => 'Movim',
'print' => 'Stampa', 'print' => 'Stampa',
'shaarli' => 'Shaarli', 'shaarli' => 'Shaarli',
'twitter' => 'Twitter', 'twitter' => 'Twitter',
'wallabag' => 'wallabag', 'wallabag' => 'wallabag v1',
'wallabagv2' => 'wallabag v2',
'jdh' => 'Journal du hacker',
), ),
'short' => array( 'short' => array(
'attention' => 'Attenzione!', 'attention' => 'Attenzione!',

0
sources/app/i18n/it/index.php Executable file → Normal file
View file

10
sources/app/i18n/it/install.php Executable file → Normal file
View file

@ -51,7 +51,7 @@ return array(
'ok' => 'I permessi sulla cartella data sono corretti.', 'ok' => 'I permessi sulla cartella data sono corretti.',
), ),
'dom' => array( 'dom' => array(
'nok' => 'Manca una libreria richiesta per leggere DOM (pacchetto php-xml).', 'nok' => 'Manca una libreria richiesta per leggere DOM.',
'ok' => 'Libreria richiesta per leggere DOM presente.', 'ok' => 'Libreria richiesta per leggere DOM presente.',
), ),
'favicons' => array( 'favicons' => array(
@ -62,6 +62,10 @@ return array(
'nok' => 'Per favore verifica che non stai alterando il tuo HTTP REFERER.', 'nok' => 'Per favore verifica che non stai alterando il tuo HTTP REFERER.',
'ok' => 'Il tuo HTTP REFERER riconosciuto corrisponde al tuo server.', 'ok' => 'Il tuo HTTP REFERER riconosciuto corrisponde al tuo server.',
), ),
'json' => array(
'nok' => 'You lack a recommended library to parse JSON.',
'ok' => 'You have a recommended library to parse JSON.',
),
'minz' => array( 'minz' => array(
'nok' => 'Manca il framework Minz.', 'nok' => 'Manca il framework Minz.',
'ok' => 'Framework Minz presente.', 'ok' => 'Framework Minz presente.',
@ -87,6 +91,10 @@ return array(
'nok' => 'Verifica i permessi sulla cartella <em>./data/users</em>. Il server HTTP deve avere i permessi per scriverci dentro', 'nok' => 'Verifica i permessi sulla cartella <em>./data/users</em>. Il server HTTP deve avere i permessi per scriverci dentro',
'ok' => 'I permessi sulla cartella users sono corretti.', 'ok' => 'I permessi sulla cartella users sono corretti.',
), ),
'xml' => array(
'nok' => 'You lack the required library to parse XML.',
'ok' => 'You have the required library to parse XML.',
),
), ),
'conf' => array( 'conf' => array(
'_' => 'Configurazioni generali', '_' => 'Configurazioni generali',

0
sources/app/i18n/it/sub.php Executable file → Normal file
View file

18
sources/app/i18n/nl/admin.php Executable file → Normal file
View file

@ -120,7 +120,7 @@ return array(
'category' => 'Categorie', 'category' => 'Categorie',
'entry_count' => 'Invoer aantallen', 'entry_count' => 'Invoer aantallen',
'entry_per_category' => 'Aantallen per categorie', 'entry_per_category' => 'Aantallen per categorie',
'entry_per_day' => 'Aantallen per day (laatste 30 dagen)', 'entry_per_day' => 'Aantallen per dag (laatste 30 dagen)',
'entry_per_day_of_week' => 'Per dag of week (gemiddeld: %.2f berichten)', 'entry_per_day_of_week' => 'Per dag of week (gemiddeld: %.2f berichten)',
'entry_per_hour' => 'Per uur (gemiddeld: %.2f berichten)', 'entry_per_hour' => 'Per uur (gemiddeld: %.2f berichten)',
'entry_per_month' => 'Per maand (gemiddeld: %.2f berichten)', 'entry_per_month' => 'Per maand (gemiddeld: %.2f berichten)',
@ -147,14 +147,14 @@ return array(
'top_feed' => 'Top tien feeds', 'top_feed' => 'Top tien feeds',
), ),
'system' => array( 'system' => array(
'_' => 'System configuration', // @todo translate '_' => 'Systeem configuratie',
'auto-update-url' => 'Auto-update server URL', // @todo translate 'auto-update-url' => 'Automatische update server URL',
'instance-name' => 'Instance name', // @todo translate 'instance-name' => 'Voorbeeld naam',
'max-categories' => 'Categories per user limit', // @todo translate 'max-categories' => 'Categoriën limiet per gebruiker',
'max-feeds' => 'Feeds per user limit', // @todo translate 'max-feeds' => 'Feed limiet per gebruiker',
'registration' => array( 'registration' => array(
'help' => '0 means that there is no account limit', // @todo translate 'help' => '0 betekent geen account limiet',
'number' => 'Max number of accounts', // @todo translate 'number' => 'Maximum aantal accounts',
), ),
), ),
'update' => array( 'update' => array(
@ -178,7 +178,7 @@ return array(
'registration' => array( 'registration' => array(
'allow' => 'Sta het maken van nieuwe accounts toe', 'allow' => 'Sta het maken van nieuwe accounts toe',
'help' => '0 betekent dat er geen account limiet is', 'help' => '0 betekent dat er geen account limiet is',
'number' => 'Max aantal van accounts', 'number' => 'Max aantal accounts',
), ),
'title' => 'Beheer gebruikers', 'title' => 'Beheer gebruikers',
'user_list' => 'Lijst van gebruikers ', 'user_list' => 'Lijst van gebruikers ',

0
sources/app/i18n/nl/conf.php Executable file → Normal file
View file

0
sources/app/i18n/nl/feedback.php Executable file → Normal file
View file

10
sources/app/i18n/nl/gen.php Executable file → Normal file
View file

@ -108,7 +108,7 @@ return array(
'confirm_action' => 'Weet u zeker dat u dit wilt doen? Het kan niet ongedaan worden gemaakt!', 'confirm_action' => 'Weet u zeker dat u dit wilt doen? Het kan niet ongedaan worden gemaakt!',
'confirm_action_feed_cat' => 'Weet u zeker dat u dit wilt doen? U verliest alle gereleteerde favorieten en gebruikers informatie. Het kan niet ongedaan worden gemaakt!', 'confirm_action_feed_cat' => 'Weet u zeker dat u dit wilt doen? U verliest alle gereleteerde favorieten en gebruikers informatie. Het kan niet ongedaan worden gemaakt!',
'feedback' => array( 'feedback' => array(
'body_new_articles' => 'Er zijn \\d nieuwe artikelen om te lezen op FreshRSS.', 'body_new_articles' => 'Er zijn %%d nieuwe artikelen om te lezen op FreshRSS.',
'request_failed' => 'Een opdracht is mislukt, mogelijk door Internet verbindings problemen.', 'request_failed' => 'Een opdracht is mislukt, mogelijk door Internet verbindings problemen.',
'title_new_articles' => 'FreshRSS: nieuwe artikelen!', 'title_new_articles' => 'FreshRSS: nieuwe artikelen!',
), ),
@ -122,6 +122,8 @@ return array(
'fr' => 'Français', 'fr' => 'Français',
'it' => 'Italiano', 'it' => 'Italiano',
'nl' => 'Nederlands', 'nl' => 'Nederlands',
'ru' => 'Русский',
'tr' => 'Türkçe',
), ),
'menu' => array( 'menu' => array(
'about' => 'Over', 'about' => 'Over',
@ -139,7 +141,7 @@ return array(
'sharing' => 'Delen', 'sharing' => 'Delen',
'shortcuts' => 'Snelle toegang', 'shortcuts' => 'Snelle toegang',
'stats' => 'Statistieken', 'stats' => 'Statistieken',
'system' => 'System configuration', // @todo translate 'system' => 'Systeem configuratie',
'update' => 'Versie controle', 'update' => 'Versie controle',
'user_management' => 'Beheer gebruikers', 'user_management' => 'Beheer gebruikers',
'user_profile' => 'Profiel', 'user_profile' => 'Profiel',
@ -163,7 +165,9 @@ return array(
'print' => 'Print', 'print' => 'Print',
'shaarli' => 'Shaarli', 'shaarli' => 'Shaarli',
'twitter' => 'Twitter', 'twitter' => 'Twitter',
'wallabag' => 'wallabag', 'wallabag' => 'wallabag v1',
'wallabagv2' => 'wallabag v2',
'jdh' => 'Journal du hacker',
), ),
'short' => array( 'short' => array(
'attention' => 'Attentie!', 'attention' => 'Attentie!',

0
sources/app/i18n/nl/index.php Executable file → Normal file
View file

10
sources/app/i18n/nl/install.php Executable file → Normal file
View file

@ -51,7 +51,7 @@ return array(
'ok' => 'Permissies van de data map zijn goed.', 'ok' => 'Permissies van de data map zijn goed.',
), ),
'dom' => array( 'dom' => array(
'nok' => 'U mist een benodigde bibliotheek om te bladeren in de DOM (php-xml package).', 'nok' => 'U mist een benodigde bibliotheek om te bladeren in de DOM.',
'ok' => 'U hebt de benodigde bibliotheek om te bladeren in de DOM.', 'ok' => 'U hebt de benodigde bibliotheek om te bladeren in de DOM.',
), ),
'favicons' => array( 'favicons' => array(
@ -62,6 +62,10 @@ return array(
'nok' => 'Controleer a.u.b. dat u niet uw HTTP REFERER wijzigd.', 'nok' => 'Controleer a.u.b. dat u niet uw HTTP REFERER wijzigd.',
'ok' => 'Uw HTTP REFERER is bekend en komt overeen met uw server.', 'ok' => 'Uw HTTP REFERER is bekend en komt overeen met uw server.',
), ),
'json' => array(
'nok' => 'U mist een benodigede bibliotheek om JSON te gebruiken.',
'ok' => 'U hebt de benodigde bibliotheek om JSON te gebruiken.',
),
'minz' => array( 'minz' => array(
'nok' => 'U mist het Minz framework.', 'nok' => 'U mist het Minz framework.',
'ok' => 'U hebt het Minz framework.', 'ok' => 'U hebt het Minz framework.',
@ -86,6 +90,10 @@ return array(
'nok' => 'Controleer permissies van de <em>./data/users</em> map. HTTP server moet rechten hebben om er in te kunnen schrijven', 'nok' => 'Controleer permissies van de <em>./data/users</em> map. HTTP server moet rechten hebben om er in te kunnen schrijven',
'ok' => 'Permissies van de users map zijn goed.', 'ok' => 'Permissies van de users map zijn goed.',
), ),
'xml' => array(
'nok' => 'U mist de benodigde bibliotheek om XML te gebruiken.',
'ok' => 'U hebt de benodigde bibliotheek om XML te gebruiken.',
),
), ),
'conf' => array( 'conf' => array(
'_' => 'Algemene configuratie', '_' => 'Algemene configuratie',

0
sources/app/i18n/nl/sub.php Executable file → Normal file
View file

View file

@ -0,0 +1,183 @@
<?php
return array(
'auth' => array(
'allow_anonymous' => 'Разрешить анонимное чтение статей для пользователя по умолчанию (%s)',
'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей',
'api_enabled' => 'Включить доступ к <abbr>API</abbr> <small>(необходимо для мобильных приложений)</small>',
'form' => 'На основе веб-формы (традиционный, необходим JavaScript)',
'http' => 'HTTP (для продвинутых пользователей - по HTTPS)',
'none' => 'Без аутентификации (небезопасный)',
'persona' => 'Mozilla Persona (новый, необходим JavaScript)',
'title' => 'Аутентификации',
'title_reset' => 'Сброс аутентицикации',
'token' => 'Токен аутентификации',
'token_help' => 'Разрешает доступ к RSS ленте пользователя по умолчанию без аутентификации:',
'type' => 'Метод аутентификации',
'unsafe_autologin' => 'Разрешить небезопасный автоматический вход с использованием следующего формата: ',
),
'check_install' => array(
'cache' => array(
'nok' => 'Проверьте права доступа к папке <em>./data/cache</em>. Сервер HTTP должен иметь права на запись в эту папку',
'ok' => 'Права на <em>./data/cache</em> в порядке.',
),
'categories' => array(
'nok' => 'Таблица категорий настроена неправильно.',
'ok' => 'Таблица категорий настроена правильно.',
),
'connection' => array(
'nok' => 'Подключение к базе данных не может быть установлено.',
'ok' => 'Подключение к базе данных в порядке.',
),
'ctype' => array(
'nok' => 'У вас не установлена библиотека для проверки типов символов (php-ctype).',
'ok' => 'У вас не установлена библиотека для проверки типов символов (ctype).',
),
'curl' => array(
'nok' => 'У вас не установлено расширение cURL (пакет php5-curl).',
'ok' => 'У вас установлено расширение cURL.',
),
'data' => array(
'nok' => 'Проверьте права доступа к папке <em>./data</em> . Сервер HTTP должен иметь права на запись в эту папку.',
'ok' => 'Права на <em>./data/</em> в порядке.',
),
'database' => 'Установка базы данных',
'dom' => array(
'nok' => 'У вас не установлена библиотека для просмотра DOM (пакет php-xml).',
'ok' => 'У вас установлена библиотека для просмотра DOM.',
),
'entries' => array(
'nok' => 'Таблица статей (entry) неправильно настроена.',
'ok' => 'Таблица статей (entry) настроена правильно.',
),
'favicons' => array(
'nok' => 'Проверьте права доступа к папке <em>./data/favicons</em> . Сервер HTTP должен иметь права на запись в эту папку.',
'ok' => 'Права на папку значков в порядке.',
),
'feeds' => array(
'nok' => 'Таблица подписок (feed) неправильно настроена.',
'ok' => 'Таблица подписок (feed) настроена правильно.',
),
'files' => 'Установка файлов',
'json' => array(
'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php5-json).',
'ok' => 'У вас установлена библиотека для работы с JSON.',
),
'minz' => array(
'nok' => 'У вас не установлен фрейворк Minz.',
'ok' => 'У вас установлен фрейворк Minz.',
),
'pcre' => array(
'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).',
'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).',
),
'pdo' => array(
'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).',
'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).',
),
'persona' => array(
'nok' => 'Проверьте права доступа к папке <em>./data/persona</em> . Сервер HTTP должен иметь права на запись в эту папку.',
'ok' => 'Права на папку Mozilla Persona в порядке.',
),
'php' => array(
'_' => 'PHP installation',
'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.',
'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.',
),
'tables' => array(
'nok' => 'В базе данных отсуствует одна или больше таблица.',
'ok' => 'Все таблицы есть в базе данных.',
),
'title' => 'Проверка установки и настройки',
'tokens' => array(
'nok' => 'Проверьте права доступа к папке <em>./data/tokens</em> . Сервер HTTP должен иметь права на запись в эту папку.',
'ok' => 'Права на папку tokens в порядке.',
),
'users' => array(
'nok' => 'Проверьте права доступа к папке <em>./data/users</em> . Сервер HTTP должен иметь права на запись в эту папку.',
'ok' => 'Права на папку users в порядке.',
),
'zip' => array(
'nok' => 'You lack ZIP extension (php5-zip package).',
'ok' => 'You have ZIP extension.',
),
),
'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' => 'За неделю (в среднем - %.2f сообщений)',
'entry_per_hour' => 'За час (в среднем - %.2f сообщений)',
'entry_per_month' => 'За месяц (в среднем - %.2f сообщений)',
'entry_repartition' => 'Перерасределение статей',
'feed' => 'Подписка',
'feed_per_category' => 'Подписок в категории',
'idle' => 'Неактивные подписки',
'main' => 'Основная статистика',
'main_stream' => 'Основной поток',
'menu' => array(
'idle' => 'Неактивные подписки',
'main' => 'Основная статистика',
'repartition' => 'Перерасределение статей',
),
'no_idle' => 'Нет неактивных подписок!',
'number_entries' => 'статей: %d',
'percent_of_total' => '%% от всего',
'repartition' => 'Перераспределение статей',
'status_favorites' => 'Избранное',
'status_read' => 'Читать',
'status_total' => 'Всего',
'status_unread' => 'Не прочитано',
'title' => 'Статистика',
'top_feed' => '10 лучших подписок',
),
'system' => array(
'_' => 'Системные настройки',
'auto-update-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' => 'Создать нового пользователя',
'email_persona' => 'Адрес электронной почты для входа<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'language' => 'Язык',
'number' => 'На данный момент создан %d аккаунт',
'numbers' => 'На данный момент аккаунтов создано: %d',
'password_form' => 'Пароль<br /><small>(для входа через Веб-форму)</small>',
'password_format' => 'Минимум 7 символов',
'title' => 'Управление пользователями',
'user_list' => 'Список пользователей',
'username' => 'Имя пользователя',
'users' => 'Пользователи',
),
);

View file

@ -0,0 +1,174 @@
<?php
return array(
'archiving' => array(
'_' => 'Архивация',
'advanced' => 'Продвинутые настройки',
'delete_after' => 'Удалять статьи после',
'help' => 'Каждую подписку можно настроить более гибко',
'keep_history_by_feed' => 'Minimum number of articles to keep by feed',
'optimize' => 'Оптимизировать базу данных',
'optimize_help' => 'To do occasionally to reduce the size of the database',
'purge_now' => 'Очистить сейчас',
'title' => 'Архивация',
'ttl' => 'Не обновлять чаще чем',
),
'display' => array(
'_' => 'Display',
'icon' => array(
'bottom_line' => 'Bottom line',
'entry' => 'Article icons',
'publication_date' => 'Date of publication',
'related_tags' => 'Related tags',
'sharing' => 'Sharing',
'top_line' => 'Top line',
),
'language' => 'Язык',
'notif_html5' => array(
'seconds' => 'seconds (0 means no timeout)',
'timeout' => 'HTML5 notification timeout',
),
'theme' => 'Тема',
'title' => 'Display',
'width' => array(
'content' => 'Content width',
'large' => 'Large',
'medium' => 'Medium',
'no_limit' => 'No limit',
'thin' => 'Thin',
),
),
'query' => array(
'_' => 'User queries',
'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 favorite articles',
'get_feed' => 'Display "%s" feed',
'no_filter' => 'No filter',
'none' => 'You havent created any user query yet.',
'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 favorite articles',
'state_5' => 'Display read favorite articles',
'state_6' => 'Display unread favorite articles',
'state_7' => 'Display favorite articles',
'state_8' => 'Display not favorite articles',
'state_9' => 'Display read not favorite articles',
'state_10' => 'Display unread not favorite articles',
'state_11' => 'Display not favorite 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(
'_' => 'Profile management',
'delete' => array(
'_' => 'Account deletion',
'warn' => 'Your account and all the related data will be deleted.',
),
'email_persona' => 'Login email address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'password_api' => 'Password API<br /><small>(e.g., for mobile apps)</small>',
'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
'password_format' => 'At least 7 characters',
'title' => 'Profile',
),
'reading' => array(
'_' => 'Reading',
'after_onread' => 'After “mark all as read”,',
'articles_per_page' => 'Number of articles per page',
'auto_load_more' => 'Load next articles at the page bottom',
'auto_remove_article' => 'Hide articles after reading',
'mark_updated_article_unread' => 'Mark updated articles as unread',
'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions',
'display_articles_unfolded' => 'Show articles unfolded by default',
'display_categories_unfolded' => 'Show categories folded by default',
'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)',
'img_with_lazyload' => 'Use "lazy load" mode to load pictures',
'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' => 'when article is opened on its original website',
'article_viewed' => 'when article is viewed',
'scroll' => 'while scrolling',
'upon_reception' => 'upon reception of the article',
'when' => 'Mark article as read…',
),
'show' => array(
'_' => 'Articles to display',
'adaptive' => 'Adjust showing',
'all_articles' => 'Show all articles',
'unread' => 'Show only unread',
),
'sort' => array(
'_' => 'Sort order',
'newer_first' => 'Newer first',
'older_first' => 'Oldest first',
),
'sticky_post' => 'Stick the article to the top when opened',
'title' => 'Reading',
'view' => array(
'default' => 'Default view',
'global' => 'Global view',
'normal' => 'Normal view',
'reader' => 'Reading view',
),
),
'sharing' => array(
'_' => 'Sharing',
'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' => 'Sharing',
'twitter' => 'Twitter',
'wallabag' => 'wallabag',
),
'shortcut' => array(
'_' => 'Shortcuts',
'article_action' => 'Article actions',
'auto_share' => 'Share',
'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.',
'close_dropdown' => 'Close menus',
'collapse_article' => 'Collapse',
'first_article' => 'Skip to the first article',
'focus_search' => 'Access search box',
'help' => 'Display documentation',
'javascript' => 'JavaScript must be enabled in order to use shortcuts',
'last_article' => 'Skip to the last article',
'load_more' => 'Load more articles',
'mark_read' => 'Mark as read',
'mark_favorite' => 'Mark as favourite',
'navigation' => 'Navigation',
'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.<br/>With the "Alt" modifier, navigation shortcuts apply on categories.',
'next_article' => 'Skip to the next article',
'other_action' => 'Other actions',
'previous_article' => 'Skip to the previous article',
'see_on_website' => 'See on original website',
'shift_for_all_read' => '+ <code>shift</code> to mark all articles as read',
'title' => 'Shortcuts',
'user_filter' => 'Access user filters',
'user_filter_help' => 'If there is only one user filter, it is used. Else filters are accessible by their number.',
),
'user' => array(
'articles_and_size' => '%s articles (%s)',
'current' => 'Current user',
'is_admin' => 'is administrator',
'users' => 'Users',
),
);

View file

@ -0,0 +1,110 @@
<?php
return array(
'admin' => array(
'optimization_complete' => 'Optimisation complete',
),
'access' => array(
'denied' => 'You dont have permission to access this page',
'not_found' => 'You are looking for a page which doesnt 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 hasnt been set. This feature isnt available.',
'not_persona' => 'Only Persona system can be reset.',
),
'conf' => array(
'error' => 'An error occurred during configuration saving',
'query_created' => 'Query "%s" has been created.',
'shortcuts_updated' => 'Shortcuts have been updated',
'updated' => 'Configuration has been updated',
),
'extensions' => array(
'already_enabled' => '%s is already enabled',
'disable' => array(
'ko' => '%s cannot be disabled. <a href="%s">Check FressRSS logs</a> for details.',
'ok' => '%s is now disabled',
),
'enable' => array(
'ko' => '%s cannot be enabled. <a href="%s">Check FressRSS logs</a> for details.',
'ok' => '%s is now enabled',
),
'no_access' => 'You have no access on %s',
'not_enabled' => '%s is not enabled yet',
'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' => 'Actualise',
'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 precise 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' => '<em>%s</em> has been updated',
'actualizeds' => 'RSS feeds have been updated',
'added' => 'RSS feed <em>%s</em> has been added',
'already_subscribed' => 'You have already subscribed to <em>%s</em>',
'deleted' => 'Feed has been deleted',
'error' => 'Feed cannot be updated',
'internal_problem' => 'The RSS feed could not be added. <a href="%s">Check FressRSS logs</a> for details.',
'invalid_url' => 'URL <em>%s</em> 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' => '<em>%s</em> 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 <strong>version %s</strong>.',
'error' => 'The update process has encountered an error: %s',
'file_is_nok' => 'Check permissions on <em>%s</em> 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',
),
);

185
sources/app/i18n/ru/gen.php Normal file
View file

@ -0,0 +1,185 @@
<?php
return array(
'action' => array(
'actualize' => 'Actualize',
'back_to_rss_feeds' => '← Go back to your RSS feeds',
'cancel' => 'Cancel',
'create' => 'Create',
'disable' => 'Disable',
'empty' => 'Empty',
'enable' => 'Enable',
'export' => 'Export',
'filter' => 'Filter',
'import' => 'Import',
'manage' => 'Manage',
'mark_read' => 'Mark as read',
'mark_favorite' => 'Mark as favourite',
'remove' => 'Remove',
'see_website' => 'See website',
'submit' => 'Submit',
'truncate' => 'Delete all articles',
),
'auth' => array(
'email' => 'Email address',
'keep_logged_in' => 'Keep me logged in <small>(1 month)</small>',
'login' => 'Login',
'login_persona' => 'Login with Persona',
'login_persona_problem' => 'Connection problem with Persona?',
'logout' => 'Logout',
'password' => array(
'_' => 'Password',
'format' => '<small>At least 7 characters</small>',
),
'registration' => array(
'_' => 'New account',
'ask' => 'Create an account?',
'title' => 'Account creation',
),
'reset' => 'Authentication reset',
'username' => array(
'_' => 'Username',
'admin' => 'Administrator username',
'format' => '<small>maximum 16 alphanumeric characters</small>',
),
'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.',
),
'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' => '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' => 'months',
'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 favorites 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',
),
'menu' => array(
'about' => 'About',
'admin' => 'Administration',
'archiving' => 'Archiving',
'authentication' => 'Authentication',
'check_install' => 'Installation checking',
'configuration' => 'Configuration',
'display' => 'Display',
'extensions' => 'Extensions',
'logs' => 'Logs',
'queries' => 'User queries',
'reading' => 'Reading',
'search' => 'Search words or #tags',
'sharing' => 'Sharing',
'shortcuts' => 'Shortcuts',
'stats' => 'Statistics',
'system' => 'System configuration',
'update' => 'Update',
'user_management' => 'Manage users',
'user_profile' => '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+',
'jdh' => 'Journal du hacker',
'movim' => 'Movim',
'print' => 'Print',
'shaarli' => 'Shaarli',
'twitter' => 'Twitter',
'wallabag' => 'wallabag v1',
'wallabagv2' => 'wallabag v2',
),
'short' => array(
'attention' => 'Warning!',
'blank_to_disable' => 'Leave blank to disable',
'by_author' => 'By <em>%s</em>',
'by_default' => 'By default',
'damn' => 'Damn!',
'default_category' => 'Uncategorized',
'no' => 'No',
'not_applicable' => 'Not available',
'ok' => 'Ok!',
'or' => 'or',
'yes' => 'Yes',
),
);

Some files were not shown because too many files have changed in this diff Show more